<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.8/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.8/ http://www.mediawiki.org/xml/export-0.8.xsd" version="0.8" xml:lang="en">
  <siteinfo>
    <sitename>Quake Wiki</sitename>
    <base>http://quakewiki.org/wiki/Main_Page</base>
    <generator>MediaWiki 1.22.0</generator>
    <case>case-sensitive</case>
    <namespaces>
      <namespace key="-2" case="case-sensitive">Media</namespace>
      <namespace key="-1" case="first-letter">Special</namespace>
      <namespace key="0" case="case-sensitive" />
      <namespace key="1" case="case-sensitive">Talk</namespace>
      <namespace key="2" case="first-letter">User</namespace>
      <namespace key="3" case="first-letter">User talk</namespace>
      <namespace key="4" case="case-sensitive">Quake Wiki</namespace>
      <namespace key="5" case="case-sensitive">Quake Wiki talk</namespace>
      <namespace key="6" case="case-sensitive">File</namespace>
      <namespace key="7" case="case-sensitive">File talk</namespace>
      <namespace key="8" case="first-letter">MediaWiki</namespace>
      <namespace key="9" case="first-letter">MediaWiki talk</namespace>
      <namespace key="10" case="case-sensitive">Template</namespace>
      <namespace key="11" case="case-sensitive">Template talk</namespace>
      <namespace key="12" case="case-sensitive">Help</namespace>
      <namespace key="13" case="case-sensitive">Help talk</namespace>
      <namespace key="14" case="case-sensitive">Category</namespace>
      <namespace key="15" case="case-sensitive">Category talk</namespace>
    </namespaces>
  </siteinfo>
  <page>
    <title>Main Page</title>
    <ns>0</ns>
    <id>1</id>
    <revision>
      <id>1</id>
      <timestamp>2007-10-30T16:04:47Z</timestamp>
      <contributor>
        <username>MediaWiki default</username>
        <id>0</id>
      </contributor>
      <text xml:space="preserve" bytes="449">&lt;big&gt;'''MediaWiki has been successfully installed.'''&lt;/big&gt;

Consult the [http://meta.wikimedia.org/wiki/Help:Contents User's Guide] for information on using the wiki software.

== Getting started ==

* [http://www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
* [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
* [http://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]</text>
      <sha1>11sfdpsavc6prom4f32muy7cdiqy9ko</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2</id>
      <parentid>1</parentid>
      <timestamp>2007-10-30T16:12:40Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="1403">[[Quake Wiki]]

* [[Installing Quake]]
* [[Singleplayer Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Gameplay Tips]]

[[Quake Mapping]]

* [[Mapping Tools]]
* [[Textures]]
* [[Entity Guide]]
* [[Mapping Tutorials]]
* [[Map List]]
* [[Mapping Links]]

[[QuakeC]] / [[Modding]]

* [[Getting Started]] (links to download id1 qc and various important resources)
* [[Modding Tools]]
* [[QuakeC Basics]]
* [[Builtin Function List]]
* [[System Globals]]
* [[System Fields]]
* [[MenuQC Basics]]
* [[MenuQC Builtin Function List]]
* [[MenuQC System Constants]]
* [[QuakeC Tips]]
* [[QuakeC Tutorials]]
* [[Free Resources]]
* [[Mod List]]
* [[QuakeC Compilers List]]
* [[Legal Status]]

[[Quake Movies]]

* [[Demo Tools]]
* [[Movie List]]

[[Quake Engine Info]]

* [[Engine Getting Started]]
* [[Engine and Port List]]
* [[QSG Extensions]]
* [[Engine Tutorials]]
* [[Enhanced Engine Features]]
* [[Engines]]

[[Quake Technical]]

* [[Quake Error Guide]]
* [[Console Variables]]
* [[Console Commands]]
* [[Quake Bugs]]
* [[Command Line Parameters]]
* [[Quake File Formats]]
* [[Quake Network Messages]]
* [[Temporary Entity Messages]]
* [[Quake Font]]
* [[Quake Palette]]
* [[Quake Tools]]

[[Quake Wiki]]

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Statistics and Info]]
* [[Site Help]]
* [[Register]]
* [[Preferences]]
* [[Search]]
* [[Discussion]]
* [[Links]]</text>
      <sha1>j2v4remat10iu5q0gg613j7o8hsdby7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3</id>
      <parentid>2</parentid>
      <timestamp>2007-10-30T16:14:30Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1487">__NOTOC__
Welcome to the Quake Wiki.

===[[Quake Gameplay]]===

* [[Installing Quake]]
* [[Singleplayer Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Gameplay Tips]]

===[[Quake Mapping]]===

* [[Mapping Tools]]
* [[Textures]]
* [[Entity Guide]]
* [[Mapping Tutorials]]
* [[Map List]]
* [[Mapping Links]]

===[[QuakeC]] / [[Modding]]===

* [[Getting Started]] (links to download id1 qc and various important resources)
* [[Modding Tools]]
* [[QuakeC Basics]]
* [[Builtin Function List]]
* [[System Globals]]
* [[System Fields]]
* [[MenuQC Basics]]
* [[MenuQC Builtin Function List]]
* [[MenuQC System Constants]]
* [[QuakeC Tips]]
* [[QuakeC Tutorials]]
* [[Free Resources]]
* [[Mod List]]
* [[QuakeC Compilers List]]
* [[Legal Status]]

===[[Quake Movies]]===

* [[Demo Tools]]
* [[Movie List]]

===[[Quake Engine Info]]===

* [[Engine Getting Started]]
* [[Engine and Port List]]
* [[QSG Extensions]]
* [[Engine Tutorials]]
* [[Enhanced Engine Features]]
* [[Engines]]

===[[Quake Technical]]===

* [[Quake Error Guide]]
* [[Console Variables]]
* [[Console Commands]]
* [[Quake Bugs]]
* [[Command Line Parameters]]
* [[Quake File Formats]]
* [[Quake Network Messages]]
* [[Temporary Entity Messages]]
* [[Quake Font]]
* [[Quake Palette]]
* [[Quake Tools]]

===[[Quake Wiki]]===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Statistics and Info]]
* [[Site Help]]
* [[Register]]
* [[Preferences]]
* [[Search]]
* [[Discussion]]
* [[Links]]</text>
      <sha1>7fkn7sse9ydt9u4ybrreuduc0k604dg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>4</id>
      <parentid>3</parentid>
      <timestamp>2007-10-30T16:19:57Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1459">__NOTOC__
Welcome to the Quake Wiki.

===Quake Gameplay===

* [[Installing Quake]]
* [[Singleplayer Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Gameplay Tips]]

===Quake Mapping===

* [[Mapping Tools]]
* [[Textures]]
* [[Entity Guide]]
* [[Mapping Tutorials]]
* [[Map List]]
* [[Mapping Links]]

===[[QuakeC]] / Modding===

* [[Getting Started]] (links to download id1 qc and various important resources)
* [[Modding Tools]]
* [[QuakeC Basics]]
* [[Builtin Function List]]
* [[System Globals]]
* [[System Fields]]
* [[MenuQC Basics]]
* [[MenuQC Builtin Function List]]
* [[MenuQC System Constants]]
* [[QuakeC Tips]]
* [[QuakeC Tutorials]]
* [[Free Resources]]
* [[Mod List]]
* [[QuakeC Compilers List]]
* [[Legal Status]]

===Quake Movies===

* [[Demo Tools]]
* [[Movie List]]

===Quake Engine Info===

* [[Engine Getting Started]]
* [[Engine and Port List]]
* [[QSG Extensions]]
* [[Engine Tutorials]]
* [[Enhanced Engine Features]]
* [[Engines]]

===Quake Technical===

* [[Quake Error Guide]]
* [[Console Variables]]
* [[Console Commands]]
* [[Quake Bugs]]
* [[Command Line Parameters]]
* [[Quake File Formats]]
* [[Quake Network Messages]]
* [[Temporary Entity Messages]]
* [[Quake Font]]
* [[Quake Palette]]
* [[Quake Tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Statistics and Info]]
* [[Site Help]]
* [[Register]]
* [[Preferences]]
* [[Search]]
* [[Discussion]]
* [[Links]]</text>
      <sha1>l7w2ug9merdkmdqoyl20wmdl8nwnvx7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>17</id>
      <parentid>4</parentid>
      <timestamp>2007-10-30T16:47:42Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1467">__NOTOC__
Welcome to the Quake Wiki.

===Quake Gameplay===

* [[Installing Quake]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Installing addons]]
* [[Gameplay tips]]

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[Builtin function list]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[Mod list]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting gtarted]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[Console variables]]
* [[Console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Statistics and info]]
* [[Site help]]
* [[Register]]
* [[Preferences]]
* [[Search]]
* [[Discussion]]
* [[Links]]</text>
      <sha1>aonqd5dw73ih7jkuula3jubmg7vu3wq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>40</id>
      <parentid>17</parentid>
      <timestamp>2007-10-30T17:35:02Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1467">__NOTOC__
Welcome to the Quake Wiki.

===Quake Gameplay===

* [[Installing Quake]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Installing addons]]
* [[Gameplay tips]]

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[Builtin function list]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[Mod list]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[Console variables]]
* [[Console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Statistics and info]]
* [[Site help]]
* [[Register]]
* [[Preferences]]
* [[Search]]
* [[Discussion]]
* [[Links]]</text>
      <sha1>lya6sevq988kurolbmqq0saaxpj56g0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>48</id>
      <parentid>40</parentid>
      <timestamp>2007-10-30T17:44:30Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1477">__NOTOC__
Welcome to the Quake Wiki.

===Quake Gameplay===

* [[Installing Quake]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Installing addons]]
* [[Gameplay tips]]

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[Builtin function list]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[Mod list]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[Console variables]]
* [[Console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Register]]
* [[Preferences]]
* [[Search]]
* [[Discussion]]
* [[Links]]</text>
      <sha1>qofgg950yp14kh7d7o2zsidt0qvhudn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>59</id>
      <parentid>48</parentid>
      <timestamp>2007-10-30T18:14:45Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1481">__NOTOC__
Welcome to the Quake Wiki.

===Quake Gameplay===

* [[Installing Quake]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Installing addons]]
* [[Gameplay tips]]

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[List of builtin functions]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[Mod list]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[Console variables]]
* [[Console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Register]]
* [[Preferences]]
* [[Search]]
* [[Discussion]]
* [[Links]]</text>
      <sha1>bzkbnkropkukp80s3szzyerjnkkiyh6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>63</id>
      <parentid>59</parentid>
      <timestamp>2007-10-30T18:24:33Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1418">__NOTOC__
Welcome to the Quake Wiki.

===Quake Gameplay===

* [[Installing Quake]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Installing addons]]
* [[Gameplay tips]]

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[List of builtin functions]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[Mod list]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[Console variables]]
* [[Console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>awihrf9zzgyznqf7wdswvph3nskn5mk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>98</id>
      <parentid>63</parentid>
      <timestamp>2007-10-30T19:57:44Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="1434">__NOTOC__
Welcome to the Quake Wiki.

===Quake Gameplay===

* [[Installing Quake]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Installing addons]]
* [[Gameplay tips]]

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[List of builtin functions]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[Mod list]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>l32tpek9qmgrcnn2566b0d8j0tfdmrz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>113</id>
      <parentid>98</parentid>
      <timestamp>2007-10-30T21:46:04Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1438">__NOTOC__
Welcome to the Quake Wiki.

===Quake Gameplay===

* [[Installing Quake]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Installing addons]]
* [[Gameplay tips]]

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[List of builtin functions]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[List of mods]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>ifevoflyo5dm926gjb916q40syjx4xt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>204</id>
      <parentid>113</parentid>
      <timestamp>2007-10-31T02:32:23Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="1943">__NOTOC__
Welcome to the Quake Wiki.

The old one's at http://wiki.quakesrc.org, so start copying stuff over. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Quake Gameplay===

* [[Installing Quake]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Installing addons]]
* [[Gameplay tips]]

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[List of builtin functions]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[List of mods]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>cglqxfkfuol7mckmiqgq7gvopesg9hp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>621</id>
      <parentid>204</parentid>
      <timestamp>2008-04-14T20:35:00Z</timestamp>
      <contributor>
        <ip>85.134.153.142</ip>
      </contributor>
      <comment>/* Quake Engine Info */</comment>
      <text xml:space="preserve" bytes="1966">__NOTOC__
Welcome to the Quake Wiki.

The old one's at http://wiki.quakesrc.org, so start copying stuff over. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Quake Gameplay===

* [[Installing Quake]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Installing addons]]
* [[Gameplay tips]]

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[List of builtin functions]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[List of mods]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine Standards]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>1wggk772jzk50vhy6p7pjmm4zaol4eu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>635</id>
      <parentid>621</parentid>
      <timestamp>2008-04-20T18:08:22Z</timestamp>
      <contributor>
        <ip>79.78.39.159</ip>
      </contributor>
      <text xml:space="preserve" bytes="1981">__NOTOC__
Welcome to the Quake Wiki.

The old was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Quake Gameplay===

* [[Installing Quake]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Installing addons]]
* [[Gameplay tips]]

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[List of builtin functions]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[List of mods]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine Standards]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>qln6a9ckabcz1vtiv58byuscohmbwh6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>907</id>
      <parentid>635</parentid>
      <timestamp>2008-07-11T20:51:54Z</timestamp>
      <contributor>
        <ip>69.205.88.53</ip>
      </contributor>
      <comment>/* Quake Gameplay */</comment>
      <text xml:space="preserve" bytes="2031">__NOTOC__
Welcome to the Quake Wiki.

The old was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

tmcEL3  &lt;a href=&quot;http://fjdtwauurezr.com/&quot;&gt;fjdtwauurezr&lt;/a&gt;, [url=http://ewpwmbfdnhfh.com/]ewpwmbfdnhfh[/url], [link=http://osisqxkxvgpq.com/]osisqxkxvgpq[/link], http://dxmyidctxvdf.com/

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[List of builtin functions]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[List of mods]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine Standards]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>lzan7pc8x52r885m4bompa6y2xsh7tk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>908</id>
      <parentid>907</parentid>
      <timestamp>2008-07-21T19:59:24Z</timestamp>
      <contributor>
        <ip>91.201.193.194</ip>
      </contributor>
      <text xml:space="preserve" bytes="1842">__NOTOC__
Welcome to the Quake Wiki.

The old was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[List of builtin functions]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[List of mods]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine Standards]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>sdp8otigx1mykj4el5qs9kzbfs7tgor</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>913</id>
      <parentid>908</parentid>
      <timestamp>2008-08-04T23:51:52Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <comment>/* [[QuakeC]] / Modding */</comment>
      <text xml:space="preserve" bytes="1857">__NOTOC__
Welcome to the Quake Wiki.

The old was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[List of builtin functions]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[EXT_CSQC]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[List of mods]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine Standards]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>pshyd1afihtmdd38npcsz4c81mdlmic</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>914</id>
      <parentid>913</parentid>
      <timestamp>2008-08-04T23:52:29Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <comment>/* [[QuakeC]] / Modding */</comment>
      <text xml:space="preserve" bytes="1912">__NOTOC__
Welcome to the Quake Wiki.

The old was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[List of builtin functions]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[EXT_CSQC]]
* [[EXT CSQC System Globals Fields and Builtins List]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[List of mods]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine Standards]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>cgu5wdshemi0zcz1da6cff00uzor9u0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>921</id>
      <parentid>914</parentid>
      <timestamp>2008-08-29T21:27:36Z</timestamp>
      <contributor>
        <ip>71.108.190.247</ip>
      </contributor>
      <text xml:space="preserve" bytes="1920">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[List of builtin functions]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[EXT_CSQC]]
* [[EXT CSQC System Globals Fields and Builtins List]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[List of mods]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine Standards]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>stard3ulutmp953px4kfto1lo0dygc7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>923</id>
      <parentid>921</parentid>
      <timestamp>2008-09-02T01:42:26Z</timestamp>
      <contributor>
        <ip>203.29.67.179</ip>
      </contributor>
      <comment>/* Quake Mapping */</comment>
      <text xml:space="preserve" bytes="1792">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

PENIS

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[List of builtin functions]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[EXT_CSQC]]
* [[EXT CSQC System Globals Fields and Builtins List]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[List of mods]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine Standards]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>a05sqxlcylfx7mx9ylwttk1hqtlpihb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>924</id>
      <parentid>923</parentid>
      <timestamp>2008-09-02T01:43:04Z</timestamp>
      <contributor>
        <ip>203.29.67.179</ip>
      </contributor>
      <comment>/* [[QuakeC]] / Modding */</comment>
      <text xml:space="preserve" bytes="1290">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

PENIS

PENIS

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine Standards]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>9c8we5ch91umy3vpu8qk74vwesdiwvn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>925</id>
      <parentid>924</parentid>
      <timestamp>2008-09-02T01:44:15Z</timestamp>
      <contributor>
        <ip>203.29.67.179</ip>
      </contributor>
      <comment>/* Quake Movies */</comment>
      <text xml:space="preserve" bytes="1276">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

PENIS

PENIS

JESUS HAD SEX WITH MANY LITTLE CHILDREN

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine Standards]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>5ijhv5wrw61omhwy4ff7n31wrz2ffk3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>926</id>
      <parentid>925</parentid>
      <timestamp>2008-09-02T01:45:01Z</timestamp>
      <contributor>
        <ip>203.29.67.179</ip>
      </contributor>
      <comment>/* Quake Engine Info */</comment>
      <text xml:space="preserve" bytes="1095">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

PENIS

PENIS

JESUS HAD SEX WITH MANY LITTLE CHILDREN

clear all please

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>kyondom0nxo6r36d1ys90fexo52d9b9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>927</id>
      <parentid>926</parentid>
      <timestamp>2008-09-02T01:46:00Z</timestamp>
      <contributor>
        <ip>203.29.67.179</ip>
      </contributor>
      <comment>Replacing page with 'VAGINA

MANGINA

PENIS

TITS

ASSHOLE

BUMFLUFF

FUCK YOU ALL'</comment>
      <text xml:space="preserve" bytes="61">VAGINA

MANGINA

PENIS

TITS

ASSHOLE

BUMFLUFF

FUCK YOU ALL</text>
      <sha1>8occmmrkik2v8sup43vmqpj7jizw2rq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>928</id>
      <parentid>927</parentid>
      <timestamp>2008-09-02T01:46:22Z</timestamp>
      <contributor>
        <ip>203.29.67.179</ip>
      </contributor>
      <text xml:space="preserve" bytes="1023">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.


===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>p8b49oav5q6smv2rk9qb8r5b5u6edfx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>929</id>
      <parentid>928</parentid>
      <timestamp>2008-10-15T16:54:29Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <text xml:space="preserve" bytes="1055">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.


===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]
* [[List of builtin functions]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>3bdch47a34wvap74h6kspdy5ft60phg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>930</id>
      <parentid>929</parentid>
      <timestamp>2008-10-15T16:56:27Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <text xml:space="preserve" bytes="1070">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.


===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]
* [[List of builtin functions]]
* [[EXT CSQC]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>0gsldn5a67lh31x6y4hb2k3bfri8lfh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>939</id>
      <parentid>930</parentid>
      <timestamp>2008-11-12T11:48:38Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>Major attempt at giving structure to the front page.</comment>
      <text xml:space="preserve" bytes="1956">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Information for Players===
* [[Getting Started]] (Getting, installing, patching, running Quake)
* Playing Quake
** [[Single Player]] (monsters, weapons, tips, map guide, walkthrough, etc.)
** [[Speed Running]]
** [[Multiplayer]] (connecting to a server, QW vs. NQ, tactics, map guide, etc.)
** [[Demos]] (recording, playing)
** [[Bots]] (or merge this into &quot;mods&quot; below?)
* [[Engines]] (using, configuring, compatability)
* Add-on Content
** [[Playing Mods]]
** [[Playing Maps]]
** [[Customizing Quake]] (all the HUD/crosshair/replacement texture/etc. stuff )
* Technical
** [[Quake error guide|Runtime Errors]]
** [[Quake bugs]]
** [[Cvars]]
** [[Console commands]]
** [[Command line parameters]]
** [[Config Files]]
* [[Tools]] (dzip, fun name makers, idgamma , front-ends)

===Information for Developers===
* [[Developing Content]]
** [[Coding QuakeC]]
** [[Modelling]] (and skinning)
** [[Mapping]]
** [[Making Textures]] (both wad and tga/etc, and skyboxes?)
** [[Making Graphics]] (lmp/wad/spr, but also tga/etc.)
** [[Making Sounds]]
** [[Quake file formats]]
** [[Quake tools|Development Tools]]
* [[Engine Development]]
** [[Network Protocols]]
** [[Extensions]]
* [[Tool Development]] (compilers, file convertes, etc.)

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>7adwkgilwksruvbvuymc6d6snhejc0q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>941</id>
      <parentid>939</parentid>
      <timestamp>2008-11-12T11:53:11Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>/* Information for Developers */</comment>
      <text xml:space="preserve" bytes="1963">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Information for Players===
* [[Getting Started]] (Getting, installing, patching, running Quake)
* Playing Quake
** [[Single Player]] (monsters, weapons, tips, map guide, walkthrough, etc.)
** [[Speed Running]]
** [[Multiplayer]] (connecting to a server, QW vs. NQ, tactics, map guide, etc.)
** [[Demos]] (recording, playing)
** [[Bots]] (or merge this into &quot;mods&quot; below?)
* [[Engines]] (using, configuring, compatability)
* Add-on Content
** [[Playing Mods]]
** [[Playing Maps]]
** [[Customizing Quake]] (all the HUD/crosshair/replacement texture/etc. stuff )
* Technical
** [[Quake error guide|Runtime Errors]]
** [[Quake bugs]]
** [[Cvars]]
** [[Console commands]]
** [[Command line parameters]]
** [[Config Files]]
* [[Tools]] (dzip, fun name makers, idgamma , front-ends)

===Information for Developers===
* [[Developing Content]]
** [[Coding QuakeC]]
** [[Modelling]] (and skinning)
** [[Mapping]]
** [[Making Textures]] (both wad and tga/etc, and skyboxes?)
** [[Making Graphics]] (lmp/wad/spr, but also tga/etc.)
** [[Making Sounds]]
** [[Quake file formats]]
** [[Quake tools|Development Tools]]
* [[Engine Development]]
** [[Network Protocols]]
** [[Extensions]]
** ...
* [[Tool Development]] (compilers, file convertes, etc.)

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>cgn1d861n5t4ntchxda4p1k1v8mv4rr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>942</id>
      <parentid>941</parentid>
      <timestamp>2008-11-12T11:55:31Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>/* Information for Players */</comment>
      <text xml:space="preserve" bytes="2031">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Information for Players===
* [[Getting Started]] (Getting, installing, patching, running Quake)
* Playing Quake
** [[Single Player]] (monsters, weapons, tips, map guide, walkthrough, etc.)
** [[Speed Running]]
** [[Multiplayer]] (connecting to a server, QW vs. NQ, tactics, map guide, etc.)
** [[Demos]] (recording, playing)
** [[Bots]] (or merge this into &quot;mods&quot; below?)
* [[Engines]] (list, using, configuring, compatability)
** [[Quake on other platforms]] (dreamcast, DS, iPhone, etc.)
* Add-on Content
** [[Playing Mods]]
** [[Playing Maps]]
** [[Customizing Quake]] (all the HUD/crosshair/replacement texture/etc. stuff )
* Technical
** [[Quake error guide|Runtime Errors]]
** [[Quake bugs]]
** [[Cvars]]
** [[Console commands]]
** [[Command line parameters]]
** [[Config Files]]
* [[Tools]] (dzip, fun name makers, idgamma , front-ends)

===Information for Developers===
* [[Developing Content]]
** [[Coding QuakeC]]
** [[Modelling]] (and skinning)
** [[Mapping]]
** [[Making Textures]] (both wad and tga/etc, and skyboxes?)
** [[Making Graphics]] (lmp/wad/spr, but also tga/etc.)
** [[Making Sounds]]
** [[Quake file formats]]
** [[Quake tools|Development Tools]]
* [[Engine Development]]
** [[Network Protocols]]
** [[Extensions]]
** ...
* [[Tool Development]] (compilers, file convertes, etc.)

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>kx8kl4cuf32lsgvg52yeoq1y4awck4r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>944</id>
      <parentid>942</parentid>
      <timestamp>2008-11-12T12:02:52Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>/* Information for Players */</comment>
      <text xml:space="preserve" bytes="1984">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Information for Players===
* [[Getting Started]]
* Playing Quake
** [[Single Player]] (monsters, weapons, tips, map guide, walkthrough, etc.)
** [[Speed Running]]
** [[Multiplayer]] (connecting to a server, QW vs. NQ, tactics, map guide, etc.)
** [[Demos]] (recording, playing)
** [[Bots]] (or merge this into &quot;mods&quot; below?)
* [[Engines]] (list, using, configuring, compatability)
** [[Quake on other platforms]] (dreamcast, DS, iPhone, etc.)
* Add-on Content
** [[Playing Mods]]
** [[Playing Maps]]
** [[Customizing Quake]] (all the HUD/crosshair/replacement texture/etc. stuff )
* Technical
** [[Quake error guide|Runtime Errors]]
** [[Quake bugs]]
** [[Cvars]]
** [[Console commands]]
** [[Command line parameters]]
** [[Config Files]]
* [[Tools]] (dzip, fun name makers, idgamma , front-ends)

===Information for Developers===
* [[Developing Content]]
** [[Coding QuakeC]]
** [[Modelling]] (and skinning)
** [[Mapping]]
** [[Making Textures]] (both wad and tga/etc, and skyboxes?)
** [[Making Graphics]] (lmp/wad/spr, but also tga/etc.)
** [[Making Sounds]]
** [[Quake file formats]]
** [[Quake tools|Development Tools]]
* [[Engine Development]]
** [[Network Protocols]]
** [[Extensions]]
** ...
* [[Tool Development]] (compilers, file convertes, etc.)

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>bsongxkoafm06yh6lrk3fjm2qht4b83</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>946</id>
      <parentid>944</parentid>
      <timestamp>2008-11-12T12:07:35Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>/* Information for Players */</comment>
      <text xml:space="preserve" bytes="1922">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Information for Players===
* [[Getting Started]]
* Playing Quake
** [[Single Player]] (monsters, weapons, tips, map guide, walkthrough, etc.)
** [[Speed Running]]
** [[Multiplayer]] (connecting to a server, QW vs. NQ, tactics, map guide, etc.)
** [[Demos]] (recording, playing)
** [[Bots]] (or merge this into &quot;mods&quot; below?)
* [[Engines]] (list, using, configuring, compatability)
* Add-on Content
** [[Playing Mods]]
** [[Playing Maps]]
** [[Customizing Quake]] (all the HUD/crosshair/replacement texture/etc. stuff )
* Technical
** [[Quake error guide|Runtime Errors]]
** [[Quake bugs]]
** [[Cvars]]
** [[Console commands]]
** [[Command line parameters]]
** [[Config Files]]
* [[Tools]] (dzip, fun name makers, idgamma , front-ends)

===Information for Developers===
* [[Developing Content]]
** [[Coding QuakeC]]
** [[Modelling]] (and skinning)
** [[Mapping]]
** [[Making Textures]] (both wad and tga/etc, and skyboxes?)
** [[Making Graphics]] (lmp/wad/spr, but also tga/etc.)
** [[Making Sounds]]
** [[Quake file formats]]
** [[Quake tools|Development Tools]]
* [[Engine Development]]
** [[Network Protocols]]
** [[Extensions]]
** ...
* [[Tool Development]] (compilers, file convertes, etc.)

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>fjisf9pcjwtn4pm048uf28qaxqpifob</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>947</id>
      <parentid>946</parentid>
      <timestamp>2008-11-12T12:10:17Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <minor/>
      <comment>/* Information for Players */</comment>
      <text xml:space="preserve" bytes="1942">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Information for Players===
* [[Getting Started]]
* Playing Quake
** [[Single Player]] (monsters, weapons, tips, map guide, walkthrough, etc.)
** [[Speed Running]]
** [[Multiplayer]] (connecting to a server, QW vs. NQ, tactics, map guide, etc.)
** [[Demos]] (recording, playing)
** [[Bots]] (or merge this into &quot;mods&quot; below?)
* [[Engines]] (list, using, configuring, compatability)
* Add-on Content
** [[Playing Mods]]
** [[Playing Maps]]
** [[Customizing Quake]] (all the HUD/crosshair/replacement texture/etc. stuff )
* Technical
** [[Quake error guide|Runtime Errors]]
** [[Quake bugs]]
** [[Cvars]]
** [[Console commands]]
** [[Command line parameters]]
** [[Config Files]]
* [[Tools]] (dzip, fun name makers, idgamma , front-ends, server browsers...)

===Information for Developers===
* [[Developing Content]]
** [[Coding QuakeC]]
** [[Modelling]] (and skinning)
** [[Mapping]]
** [[Making Textures]] (both wad and tga/etc, and skyboxes?)
** [[Making Graphics]] (lmp/wad/spr, but also tga/etc.)
** [[Making Sounds]]
** [[Quake file formats]]
** [[Quake tools|Development Tools]]
* [[Engine Development]]
** [[Network Protocols]]
** [[Extensions]]
** ...
* [[Tool Development]] (compilers, file convertes, etc.)

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>mk20xmw6eei6yga570ng3epkfxr1v5f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>948</id>
      <parentid>947</parentid>
      <timestamp>2008-11-12T22:36:31Z</timestamp>
      <contributor>
        <ip>64.175.155.252</ip>
      </contributor>
      <text xml:space="preserve" bytes="1954">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Information for Players===
* [[Getting Started]]
* Playing Quake
** [[Single Player]] (monsters, weapons, tips, map guide, walkthrough, etc.)
** [[Speed Running]]
** [[Multiplayer]] (connecting to a server, QW vs. NQ, tactics, map guide, etc.)
** [[Demos]] (recording, playing)
** [[Bots]] (or merge this into &quot;mods&quot; below?)
* [[Engines]] (list, using, configuring, compatability)
* Add-on Content
** [[Playing Mods]]
** [[Playing Maps]]
** [[Customizing Quake]] (all the HUD/crosshair/replacement texture/etc. stuff )
* Technical
** [[Quake error guide|Runtime Errors]]
** [[Quake bugs]]
** [[Console variables]]
** [[Console commands]]
** [[Command line parameters]]
** [[Config Files]]
* [[Tools]] (dzip, fun name makers, idgamma , front-ends, server browsers...)

===Information for Developers===
* [[Developing Content]]
** [[Coding QuakeC]]
** [[Modelling]] (and skinning)
** [[Mapping]]
** [[Making Textures]] (both wad and tga/etc, and skyboxes?)
** [[Making Graphics]] (lmp/wad/spr, but also tga/etc.)
** [[Making Sounds]]
** [[Quake file formats]]
** [[Quake tools|Development Tools]]
* [[Engine Development]]
** [[Network Protocols]]
** [[Extensions]]
** ...
* [[Tool Development]] (compilers, file convertes, etc.)

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>fiqzscw4du8ahn607s8zzd0142ivtox</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>949</id>
      <parentid>948</parentid>
      <timestamp>2008-11-14T07:33:22Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="2024">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Information for Players===
* [[Getting Started]]
* Playing Quake
** [[Single Player]] (monsters, weapons, tips, map guide, walkthrough, etc.)
** [[Speed Running]]
** [[Multiplayer]] (connecting to a server, QW vs. NQ, tactics, map guide, etc.)
** [[Demos]] (recording, playing)
** [[Bots]] (or merge this into &quot;mods&quot; below?)
* [[Engines]] (list, using, configuring, compatability)
* Add-on Content
** [[Playing Mods]]
** [[Playing Maps]]
** [[Customizing Quake]] (all the HUD/crosshair/replacement texture/etc. stuff )
* Technical
** [[Quake error guide|Runtime Errors]]
** [[Quake bugs]]
** [[Console variables]]
** [[Console commands]]
** [[Command line parameters]]
** [[Config Files]]
* [[Tools]] (dzip, fun name makers, idgamma , front-ends, server browsers...)

===Information for Developers===
* [[Developing Content]]
** [[Coding QuakeC]]
** [[Modelling]] (and skinning)
** [[Mapping]]
** [[Making Textures]] (both wad and tga/etc, and skyboxes?)
** [[Making Graphics]] (lmp/wad/spr, but also tga/etc.)
** [[Making Sounds]]
** [[Quake file formats]]
** [[Quake tools|Development Tools]]
* [[Engine Development]]
** [[Network Protocols]]
** [[Extensions]]
** ...
* [[Tool Development]] (compilers, file convertes, etc.)

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>buypzd7eocg7afl2h22fu2920pk94m6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>953</id>
      <parentid>949</parentid>
      <timestamp>2008-11-14T07:52:53Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>/* Information for Developers */</comment>
      <text xml:space="preserve" bytes="2018">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Information for Players===
* [[Getting Started]]
* Playing Quake
** [[Single Player]] (monsters, weapons, tips, map guide, walkthrough, etc.)
** [[Speed Running]]
** [[Multiplayer]] (connecting to a server, QW vs. NQ, tactics, map guide, etc.)
** [[Demos]] (recording, playing)
** [[Bots]] (or merge this into &quot;mods&quot; below?)
* [[Engines]] (list, using, configuring, compatability)
* Add-on Content
** [[Playing Mods]]
** [[Playing Maps]]
** [[Customizing Quake]] (all the HUD/crosshair/replacement texture/etc. stuff )
* Technical
** [[Quake error guide|Runtime Errors]]
** [[Quake bugs]]
** [[Console variables]]
** [[Console commands]]
** [[Command line parameters]]
** [[Config Files]]
* [[Tools]] (dzip, fun name makers, idgamma , front-ends, server browsers...)

===Information for Developers===
* [[Developing Content]]
** [[Modding]]
** [[Modelling]] (and skinning)
** [[Mapping]]
** [[Making Textures]] (both wad and tga/etc, and skyboxes?)
** [[Making Graphics]] (lmp/wad/spr, but also tga/etc.)
** [[Making Sounds]]
** [[Quake file formats]]
** [[Quake tools|Development Tools]]
* [[Engine Development]]
** [[Network Protocols]]
** [[Extensions]]
** ...
* [[Tool Development]] (compilers, file convertes, etc.)

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>pazh6qbemvg4ehtljoz4prfoicraxik</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>954</id>
      <parentid>953</parentid>
      <timestamp>2008-11-14T07:55:55Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>some reorganization based on quakesrc.org wiki</comment>
      <text xml:space="preserve" bytes="1750">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Information for Players===
* [[Getting Started]]
* [[Engines]]
* [[Single Player Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Customizing Quake]] (all the HUD/crosshair/replacement texture/etc. stuff )
* [[Speed Running]]
* [[Demos]]
* [[Bots]]
=== Technical ===
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]] (dzip, fun name makers, idgamma , front-ends, server browsers...)

===Information for Developers===
* [[Developing Content]]
** [[Modding]]
** [[Modelling]] (and skinning)
** [[Mapping]]
** [[Making Textures]] (both wad and tga/etc, and skyboxes?)
** [[Making Graphics]] (lmp/wad/spr, but also tga/etc.)
** [[Making Sounds]]
** [[Quake file formats]]
** [[Quake tools|Development Tools]]
* [[Engine Development]]
** [[Network Protocols]]
** [[Extensions]]
** ...
* [[Tool Development]] (compilers, file convertes, etc.)

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>omc058do17yluzqgylpuoa8gw5ucxj6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>957</id>
      <parentid>954</parentid>
      <timestamp>2008-11-14T08:40:43Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>another attempt to get things organized... took some guidance from the old quake wiki, and added a table for formatting</comment>
      <text xml:space="preserve" bytes="2067">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

===Information for Players===
* [[Getting Started]]
* [[Engines]]
* [[Single Player Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Customizing Quake]]
* [[Speed Running]]
===Quake Technical===
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

===[[Mapping]]===
* [[Mapping Tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity Guide]]
* [[Mapping Tutorials]]
* [[Mapping Links]]
===Making Assets===
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]

|width=&quot;25%&quot;|

===[[Modding]]===
* [[Modding Tools]]
* [[QuakeC Basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[ModdingLinks]]
===Engine Development===
* [[Network Protocols]]
* [[Extensions]]
* ...

|width=&quot;25%&quot;|
===Demos and Movies===
* [[Demo Recording]]
* [[Movie Tools]]
* [[Machinima]]
===Miscellaneous===
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal Status]]
* [[Online Resources]]
* [[Archives]]
===Quake Wiki===
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>ca2i7ywq7hawvwz4zk2lwp9f21mtqdq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>958</id>
      <parentid>957</parentid>
      <timestamp>2008-11-14T08:44:46Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="2166">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Information for Players'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Single Player Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Customizing Quake]]
* [[Speed Running]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping Tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity Guide]]
* [[Mapping Tutorials]]
* [[Mapping Links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Modding Tools]]
* [[QuakeC Basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[ModdingLinks]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Network Protocols]]
* [[Extensions]]
* ...

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Movie Tools]]
* [[Machinima]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal Status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>88felc43q4d0074dwzls1ex8xla9hlx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>959</id>
      <parentid>958</parentid>
      <timestamp>2008-11-14T08:48:20Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2188">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Information for Players'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Single Player Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Customizing Quake]]
* [[Speed Running]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping Tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity Guide]]
* [[Mapping Errors]]
* [[Mapping Tutorials]]
* [[Mapping Links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Modding Tools]]
* [[QuakeC Basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Network Protocols]]
* [[Extensions]]
* ...

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Movie Tools]]
* [[Machinima]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal Status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>5j1crp1hln2kuixjrdg7tlhi16386pz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>965</id>
      <parentid>959</parentid>
      <timestamp>2008-11-14T11:22:00Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="2178">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Single Player Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Customizing Quake]]
* [[Speed Running]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping Tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity Guide]]
* [[Mapping Errors]]
* [[Mapping Tutorials]]
* [[Mapping Links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Modding Tools]]
* [[QuakeC Basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Network Protocols]]
* [[Extensions]]
* ...

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Movie Tools]]
* [[Machinima]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal Status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>dcb8myjedxx2joqsd80kmx6yta2t1m4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>973</id>
      <parentid>965</parentid>
      <timestamp>2009-03-10T03:47:55Z</timestamp>
      <contributor>
        <ip>64.175.155.252</ip>
      </contributor>
      <text xml:space="preserve" bytes="2177">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Single Player Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Customizing Quake]]
* [[Speed Running]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity Guide]]
* [[Mapping Errors]]
* [[Mapping Tutorials]]
* [[Mapping Links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Modding tools]]
* [[QuakeC Basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Network Protocols]]
* [[Extensions]]
* ...

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal Status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>trluw9o4vl83b02mntlttbcfqvvaoms</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1017</id>
      <parentid>973</parentid>
      <timestamp>2009-06-05T06:29:48Z</timestamp>
      <contributor>
        <username>Idontknowthisguy</username>
        <id>17</id>
      </contributor>
      <comment>Added the 'Getting Started' page to the 'Engine Development' list; transfering it over from the old site</comment>
      <text xml:space="preserve" bytes="2199">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Single Player Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Customizing Quake]]
* [[Speed Running]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity Guide]]
* [[Mapping Errors]]
* [[Mapping Tutorials]]
* [[Mapping Links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Modding tools]]
* [[QuakeC Basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Getting Started]]
* [[Network Protocols]]
* [[Extensions]]
* ...

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal Status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>knhfx626rs66sfh1mqedmbybbcwkf7m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1018</id>
      <parentid>1017</parentid>
      <timestamp>2009-06-05T06:31:41Z</timestamp>
      <contributor>
        <username>Idontknowthisguy</username>
        <id>17</id>
      </contributor>
      <comment>Already was a getting started page for general purposes; changing the title to include development</comment>
      <text xml:space="preserve" bytes="2210">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Single Player Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Customizing Quake]]
* [[Speed Running]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity Guide]]
* [[Mapping Errors]]
* [[Mapping Tutorials]]
* [[Mapping Links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Modding tools]]
* [[QuakeC Basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* ...

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal Status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>rvp2z0lhoo7zrqgr4qr25i9fos2d28c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1160</id>
      <parentid>1018</parentid>
      <timestamp>2009-09-23T20:24:41Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2230">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Single Player Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Customizing Quake]]
* [[Speed Running]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity Guide]]
* [[Mapping Errors]]
* [[Mapping Tutorials]]
* [[Mapping Links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Modding tools]]
* [[QuakeC Basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* ...

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal Status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>9ahwva9b8d4gqdjoq7nc198jz3kw06z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1175</id>
      <parentid>1160</parentid>
      <timestamp>2009-09-24T00:20:06Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="2391">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later. There is no &quot;standard&quot; way of doing things that you'll &quot;upset&quot;, this wiki is still in its infancy, so if you see something that could be cleaned up, have at it!

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Single Player Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Customizing Quake]]
* [[Speed Running]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity Guide]]
* [[Mapping Errors]]
* [[Mapping Tutorials]]
* [[Mapping Links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Modding tools]]
* [[QuakeC Basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* ...

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal Status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>4u5j9e4sln93qkxpftn8bdclfx38x36</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1199</id>
      <parentid>1175</parentid>
      <timestamp>2009-09-24T17:55:11Z</timestamp>
      <contributor>
        <username>Mh</username>
        <id>20</id>
      </contributor>
      <comment>Added engine limits link to Development section</comment>
      <text xml:space="preserve" bytes="2411">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later. There is no &quot;standard&quot; way of doing things that you'll &quot;upset&quot;, this wiki is still in its infancy, so if you see something that could be cleaned up, have at it!

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Single Player Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Customizing Quake]]
* [[Speed Running]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity Guide]]
* [[Mapping Errors]]
* [[Mapping Tutorials]]
* [[Mapping Links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Modding tools]]
* [[QuakeC Basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Engine Limits]]
* ...

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal Status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>f0y0uoqq89iment1rpdyzbsougp7ega</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1224</id>
      <parentid>1199</parentid>
      <timestamp>2009-09-25T07:22:27Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <comment>adding links to some orphaned pages (some of which should be pruned or merged later)</comment>
      <text xml:space="preserve" bytes="2506">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later. There is no &quot;standard&quot; way of doing things that you'll &quot;upset&quot;, this wiki is still in its infancy, so if you see something that could be cleaned up, have at it!

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing Addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity Guide]]
* [[Mapping Errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Modding tools]]
* [[QuakeC Basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal Status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>s7lxerlxxeudxnmcxhikpa33vp255h4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1225</id>
      <parentid>1224</parentid>
      <timestamp>2009-09-25T07:24:22Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>more links fixed (watch the capitalization!)</comment>
      <text xml:space="preserve" bytes="2568">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later. There is no &quot;standard&quot; way of doing things that you'll &quot;upset&quot;, this wiki is still in its infancy, so if you see something that could be cleaned up, have at it!

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity guide]]
* [[Mapping Errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting started]]
* [[Modding tools]]
* [[QuakeC Basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>dog7r7f8q96xy1il6pepw1sohwneccw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1226</id>
      <parentid>1225</parentid>
      <timestamp>2009-09-25T07:25:06Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2568">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later. There is no &quot;standard&quot; way of doing things that you'll &quot;upset&quot;, this wiki is still in its infancy, so if you see something that could be cleaned up, have at it!

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity guide]]
* [[Mapping Errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting started]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>gtbriytxwgv0ez4khdo56ns08ggke4r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1292</id>
      <parentid>1226</parentid>
      <timestamp>2009-09-27T08:37:43Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="2227">__NOTOC__
Welcome to the Quake Wiki.

The old version was at [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ http://wiki.quakesrc.org]. Not everything has been moved over yet, so feel free to help out.

See [[Quake Wiki:Policies and guidelines|Policies and guidelines]] for some guidelines on formatting and naming conventions, but don't worry too much. If you have something good to add, other people can always clean it up later...

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity guide]]
* [[Mapping Errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting started]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>n2k6wnh74qd6qzocfb4owdvki7ja570</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1431</id>
      <parentid>1292</parentid>
      <timestamp>2009-11-15T10:32:50Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="2235">__NOTOC__
Welcome to the Quake Wiki.

The old version was at [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ http://wiki.quakesrc.org]. Not everything has been moved over yet, so feel free to help out.

See [[Quake Wiki:Policies and guidelines|Policies and guidelines]] for some guidelines on formatting and naming conventions, but don't worry too much. If you have something good to add, other people can always clean it up later...

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity guide]]
* [[Mapping Errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting Started Modding]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>6gu9t0ryty2ly46t9u16r3f1iycqbkl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1517</id>
      <parentid>1431</parentid>
      <timestamp>2010-01-11T08:08:14Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="2235">__NOTOC__
Welcome to the Quake Wiki.

The old version was at [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ http://wiki.quakesrc.org]. Not everything has been moved over yet, so feel free to help out.

See [[Quake Wiki:Policies and guidelines|Policies and guidelines]] for some guidelines on formatting and naming conventions, but don't worry too much. If you have something good to add, other people can always clean it up later...

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping Basics]]
* [[Mapping tools]]
* [[Map compiling]]
* [[Entity guide]]
* [[Mapping Errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting Started Modding]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>beosd7j40hkvcepkjzpluoloql2mex8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1535</id>
      <parentid>1517</parentid>
      <timestamp>2010-01-12T03:36:17Z</timestamp>
      <contributor>
        <ip>173.11.92.50</ip>
      </contributor>
      <text xml:space="preserve" bytes="2244">__NOTOC__
Welcome to the Quake Wiki.

The old version was at [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ http://wiki.quakesrc.org]. Not everything has been moved over yet, so feel free to help out.

See [[Quake Wiki:Policies and guidelines|Policies and guidelines]] for some guidelines on formatting and naming conventions, but don't worry too much. If you have something good to add, other people can always clean it up later...

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Getting started mapping]]
* [[Mapping tools]]
* [[Map compiling]]
* [[Entity guide]]
* [[Mapping Errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making textures]]
* [[Making Graphics]]
* [[Making sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting Started Modding]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>tt75268u1oy2bjr7dcaczxprtqpd7fp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1542</id>
      <parentid>1535</parentid>
      <timestamp>2010-01-12T10:11:59Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>lowercased some page names</comment>
      <text xml:space="preserve" bytes="2244">__NOTOC__
Welcome to the Quake Wiki.

The old version was at [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ http://wiki.quakesrc.org]. Not everything has been moved over yet, so feel free to help out.

See [[Quake Wiki:Policies and guidelines|Policies and guidelines]] for some guidelines on formatting and naming conventions, but don't worry too much. If you have something good to add, other people can always clean it up later...

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Getting started mapping]]
* [[Mapping tools]]
* [[Map compiling]]
* [[Entity guide]]
* [[Mapping errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making textures]]
* [[Making graphics]]
* [[Making sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting Started Modding]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>5uqfg7n2fbvmmv9dguac7koj9gy8wzd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1577</id>
      <parentid>1542</parentid>
      <timestamp>2010-02-06T19:11:53Z</timestamp>
      <contributor>
        <ip>83.226.254.64</ip>
      </contributor>
      <comment>Added QSB to modding list</comment>
      <text xml:space="preserve" bytes="2275">__NOTOC__
Welcome to the Quake Wiki.

The old version was at [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ http://wiki.quakesrc.org]. Not everything has been moved over yet, so feel free to help out.

See [[Quake Wiki:Policies and guidelines|Policies and guidelines]] for some guidelines on formatting and naming conventions, but don't worry too much. If you have something good to add, other people can always clean it up later...

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Getting started mapping]]
* [[Mapping tools]]
* [[Map compiling]]
* [[Entity guide]]
* [[Mapping errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making textures]]
* [[Making graphics]]
* [[Making sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting Started Modding]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
* [[QSB|Quake Standards Base]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>4v8929j75sgu1axhs93tvzlvbkj8rsn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1685</id>
      <parentid>1577</parentid>
      <timestamp>2013-03-24T16:37:01Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <text xml:space="preserve" bytes="2461">__NOTOC__


== Update ==

Do not play around anymore, I consider the data now live. Thanks for your testing! [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 16:37, 24 March 2013 (UTC)


== Welcome to the Quake Wiki. ==


The old version was at [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ http://wiki.quakesrc.org]. Not everything has been moved over yet, so feel free to help out.

See [[Quake Wiki:Policies and guidelines|Policies and guidelines]] for some guidelines on formatting and naming conventions, but don't worry too much. If you have something good to add, other people can always clean it up later...

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Getting started mapping]]
* [[Mapping tools]]
* [[Map compiling]]
* [[Entity guide]]
* [[Mapping errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making textures]]
* [[Making graphics]]
* [[Making sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting Started Modding]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
* [[QSB|Quake Standards Base]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>008u6kvbmwxpabez8jf56n4y1pcn82y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1687</id>
      <parentid>1685</parentid>
      <timestamp>2013-03-24T18:07:52Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>new intro text</comment>
      <text xml:space="preserve" bytes="2421">__NOTOC__
== Welcome to the Quake Wiki. ==

This is currently 99% an import of the [http://web.archive.org/web/20081120082126/http://quakery.quakedev.com/qwiki/ Quakery Qwiki]. That itself was a mixture of imported content from the [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ Quakesrc Wiki] and quite a lot of new content.

See [[Quake Wiki:Policies and guidelines|Policies and guidelines]] for some guidelines on formatting and naming conventions, but don't worry too much. If you have something good to add, other people can always clean it up later... This is a do-ocracy.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Getting started mapping]]
* [[Mapping tools]]
* [[Map compiling]]
* [[Entity guide]]
* [[Mapping errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making textures]]
* [[Making graphics]]
* [[Making sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting Started Modding]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
* [[QSB|Quake Standards Base]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>4w0h7mu70aefkv9jc9y6ciejeqi3tf0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2096</id>
      <parentid>1687</parentid>
      <timestamp>2013-03-25T16:29:39Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Welcome to the Quake Wiki. */</comment>
      <text xml:space="preserve" bytes="2447">__NOTOC__
== Welcome to the Quake Wiki. ==

This is currently 99% an import of the [http://web.archive.org/web/20081120082126/http://quakery.quakedev.com/qwiki/ Quakery Qwiki]. That itself was a mixture of imported content from the [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ Quakesrc Wiki] and quite a lot of new content.

See [[Quake Wiki:Policies and guidelines|Policies and guidelines]] for some guidelines on formatting and naming conventions, but don't worry too much. If you have something good to add, other people can always clean it up later... This is a do-ocracy.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Quake|What is Quake]]
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Getting started mapping]]
* [[Mapping tools]]
* [[Map compiling]]
* [[Entity guide]]
* [[Mapping errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making textures]]
* [[Making graphics]]
* [[Making sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting Started Modding]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
* [[QSB|Quake Standards Base]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>0tpnipyojcksa4y9lo07jz6y0wgw8vi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2193</id>
      <parentid>2096</parentid>
      <timestamp>2013-03-26T04:25:30Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Welcome to the Quake Wiki. */</comment>
      <text xml:space="preserve" bytes="2447">__NOTOC__
== Welcome to the Quake Wiki. ==

This is currently 99% an import of the [http://web.archive.org/web/20081120082126/http://quakery.quakedev.com/qwiki/ Quakery Qwiki]. That itself was a mixture of imported content from the [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ Quakesrc Wiki] and quite a lot of new content.

See [[Quake Wiki:Policies and guidelines|Policies and guidelines]] for some guidelines on formatting and naming conventions, but don't worry too much. If you have something good to add, other people can always clean it up later... This is a do-ocracy.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Quake|What is Quake]]
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Getting Started Mapping]]
* [[Mapping tools]]
* [[Map compiling]]
* [[Entity guide]]
* [[Mapping errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making textures]]
* [[Making graphics]]
* [[Making sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting Started Modding]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
* [[QSB|Quake Standards Base]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>idhy4vpuq0yj3414csvnp6w7sb0pdla</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2318</id>
      <parentid>2193</parentid>
      <timestamp>2013-03-26T21:37:07Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Welcome to the Quake Wiki. */</comment>
      <text xml:space="preserve" bytes="2456">__NOTOC__
== Welcome to the Quake Wiki. ==

This is currently 99% an import of the [http://web.archive.org/web/20081120082126/http://quakery.quakedev.com/qwiki/ Quakery Qwiki]. That itself was a mixture of imported content from the [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ Quakesrc Wiki] and quite a lot of new content.

See [[Quake Wiki:Policies and guidelines|Policies and guidelines]] for some guidelines on formatting and naming conventions, but don't worry too much. If you have something good to add, other people can always clean it up later... This is a do-ocracy.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Quake|What is Quake]]
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Getting Started Mapping]]
* [[Mapping tools]]
* [[Map compiling]]
* [[Entity guide]]
* [[Mapping errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Textures|Making textures]]
* [[Making graphics]]
* [[Making sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting Started Modding]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
* [[QSB|Quake Standards Base]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>kvvwj0hbf8kts3m68kws1q879yrkzfg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2419</id>
      <parentid>2318</parentid>
      <timestamp>2013-03-28T15:14:05Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>/* Welcome to the Quake Wiki. */</comment>
      <text xml:space="preserve" bytes="2165">__NOTOC__
== Welcome to the Quake Wiki. ==
If you're interested contributing, feel free to do so! See the [[Quake Wiki:Community Portal|Community Portal]] for some information first, but don't worry too much. If you have something good to add, other people can always clean it up later... This is a do-ocracy.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Quake|What is Quake]]
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Getting Started Mapping]]
* [[Mapping tools]]
* [[Map compiling]]
* [[Entity guide]]
* [[Mapping errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Textures|Making textures]]
* [[Making graphics]]
* [[Making sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting Started Modding]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
* [[QSB|Quake Standards Base]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>6xa5gyz7zipti4y781wx4mkrx1sjfw1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2421</id>
      <parentid>2419</parentid>
      <timestamp>2013-03-28T15:23:36Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>/* Welcome to the Quake Wiki. */</comment>
      <text xml:space="preserve" bytes="2165">__NOTOC__
== Welcome to the Quake Wiki. ==
If you're interested contributing, feel free to do so! See the [[Quake Wiki:Community portal|Community Portal]] for some information first, but don't worry too much. If you have something good to add, other people can always clean it up later... This is a do-ocracy.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Quake|What is Quake]]
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Getting Started Mapping]]
* [[Mapping tools]]
* [[Map compiling]]
* [[Entity guide]]
* [[Mapping errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Textures|Making textures]]
* [[Making graphics]]
* [[Making sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting Started Modding]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
* [[QSB|Quake Standards Base]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>jnxha87zoozfs2g1a2gk0famj2uhqu2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3003</id>
      <parentid>2421</parentid>
      <timestamp>2013-09-13T04:50:52Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <comment>/* Welcome to the Quake Wiki. */</comment>
      <text xml:space="preserve" bytes="2168">__NOTOC__
== Welcome to the Quake Wiki. ==
If you're interested in contributing, feel free to do so! See the [[Quake Wiki:Community portal|Community Portal]] for some information first, but don't worry too much. If you have something good to add, other people can always clean it up later... This is a do-ocracy.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Quake|What is Quake]]
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Getting Started Mapping]]
* [[Mapping tools]]
* [[Map compiling]]
* [[Entity guide]]
* [[Mapping errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Textures|Making textures]]
* [[Making graphics]]
* [[Making sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting Started Modding]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
* [[QSB|Quake Standards Base]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>jqnhc2ltf2nk3ya1sh41k97lmlxkqtn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>-bpp</title>
    <ns>0</ns>
    <id>497</id>
    <revision>
      <id>1029</id>
      <timestamp>2009-06-10T10:11:56Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>New page: -bpp allows you to specify a color depth in glquake and derivated engines.  {| class=&quot;wikitable&quot; border=&quot;1&quot; |- !  commandline parameter !  effect |- |  -bpp 16 |  16 bit color depth |- |  ...</comment>
      <text xml:space="preserve" bytes="422">-bpp allows you to specify a color depth in glquake and derivated engines.

{| class=&quot;wikitable&quot; border=&quot;1&quot;
|-
!  commandline parameter
!  effect
|-
|  -bpp 16
|  16 bit color depth
|-
|  -bpp 32
|  32 bit color depth (recommended)
|}

32 bit color depth uses slightly more video memory but nowadays that is negligible. If you are using an engine with fancy smoke effects those will hugely benefit from 32 bit color depth.</text>
      <sha1>hal2jc0gibox5b89pdftjk1ugpg7oj5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>.lmp</title>
    <ns>0</ns>
    <id>519</id>
    <revision>
      <id>1174</id>
      <timestamp>2009-09-23T22:46:09Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <comment>meh</comment>
      <text xml:space="preserve" bytes="394">.lmp (pronounced &quot;lump&quot;) is a file extension used for several file formats in Quake.

== Lmp images ==
Quake stores some 2D UI graphics in files with .lmp extensions.

TODO

== Palette.lmp ==
A file with no header, simply contains 768 of palette data. See [[palette.lmp]].

== Colormap.lmp ==
A file with no header, simply contains 16384 (or 16385) bytes of colormap data. See [[colormap.lmp]].</text>
      <sha1>roaz7wqhknj5qchj9znktn3hfrhr50d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3228</id>
      <parentid>1174</parentid>
      <timestamp>2014-03-18T12:28:03Z</timestamp>
      <contributor>
        <ip>86.178.8.14</ip>
      </contributor>
      <comment>/* Lmp images */</comment>
      <text xml:space="preserve" bytes="711">.lmp (pronounced &quot;lump&quot;) is a file extension used for several file formats in Quake.

== Lmp images ==
Quake stores some 2D UI graphics in files with .lmp extensions.
These image lmps contain a small header consisting of just 32bit width then height values, the image data is then densely packed in top-down left-right order.
The image data itself is 8-bit paletted using the global palette.
This is the same format as most of the lumps within gfx.wad, just separated into their own files.

== Palette.lmp ==
A file with no header, simply contains 768 of palette data. See [[palette.lmp]].

== Colormap.lmp ==
A file with no header, simply contains 16384 (or 16385) bytes of colormap data. See [[colormap.lmp]].</text>
      <sha1>qlktc6m2q7ykdvmtbx38ndghphv06l9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>.pak</title>
    <ns>0</ns>
    <id>526</id>
    <revision>
      <id>1222</id>
      <timestamp>2009-09-25T06:42:30Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <comment>New page: '''.pak''' is Quake's container file format. It is an exceedingly simple uncompressed archive format which preserves file paths and that's about it.  == Format specification == All numeric...</comment>
      <text xml:space="preserve" bytes="3358">'''.pak''' is Quake's container file format. It is an exceedingly simple uncompressed archive format which preserves file paths and that's about it.

== Format specification ==
All numerical values are in little-endian (Intel) format.

Header (64 bytes):

{|class=&quot;wikitable&quot;
|-
!Name
!Type
!Info
|-
|id
|4 byte string
|Should be &quot;&lt;tt&gt;PACK&lt;/tt&gt;&quot; (not null-terminated).
|-
|offset
|Integer (4 bytes)
|Index to the beginning of the file table.
|-
|size
|Integer (4 bytes)
|Size of the file table.
|-
|}

You can determine the number of files stored in the .pak file by dividing the &quot;size&quot; value in the header by 64 (the size of the file entry struct).

File entry (64 bytes):

{|class=&quot;wikitable&quot;
|-
!Name
!Type
!Info
|-
|name
|56 byte null-terminated string
|Includes path. Example: &quot;&lt;tt&gt;maps/e1m1.bsp&lt;/tt&gt;&quot;.
|-
|offset
|Integer (4 bytes)
|The offset (from the beginning of the pak file) to the beginning of this file's contents.
|-
|size
|Integer (4 byte)
|The size of this file.
|-
|}

The pak files packaged with Quake store the file table after all the actual contents, but it shouldn't matter which comes first.

== Sample code ==
Here is some public-domain C code to open a .pak file, and return the contents of a certain file inside it. (The &lt;tt&gt;LittleLong&lt;/tt&gt; function, not defined here, should byteswap the variable contents only if the code is compiled on a big-endian machine.)

&lt;pre&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;

typedef struct pak_header_s
{
  char id[4];
  int offset;
  int size;
} pak_header_t;

typedef struct pak_file_s
{
  char name[56];
  int offset;
  int size;
} pak_file_t;

/* pak_filename : the os filename of the .pak file */
/* filename     : the name of the file you're trying to load from the .pak file (remember to use forward slashes for the path) */
/* out_filesize : if not null, the loaded file's size will be returned here */
/* returns a malloced buffer containing the file contents (remember to free it later), or NULL if any error occurred */
void *pak_load_file(const char *pak_filename, const char *filename, int *out_filesize)
{
  FILE *fp;
  pak_header_t pak_header;
  int num_files;
  int i;
  pak_file_t pak_file;
  void *buffer;

  fp = fopen(pak_filename, &quot;rb&quot;);
  if (!fp)
    return NULL;

  if (!fread(&amp;pak_header, sizeof(pak_header), 1, fp))
    goto pak_error;
  if (memcmp(pak_header.id, &quot;PACK&quot;, 4) != 0)
    goto pak_error;

  pak_header.offset = LittleLong(pak_header.offset);
  pak_header.size = LittleLong(pak_header.size);

  num_files = pak_header.size / sizeof(pak_file_t);

  if (fseek(fp, pak_header.offset, SEEK_SET) != 0)
    goto pak_error;

  for (i = 0; i &lt; num_files; i++)
  {
    if (!fread(&amp;pak_file, sizeof(pak_file_t), 1, fp))
      goto pak_error;

    if (!strcmp(pak_file.name, filename))
    {
      pak_file.offset = LittleLong(pak_file.offset);
      pak_file.size = LittleLong(pak_file.size);

      if (fseek(fp, pak_file.offset, SEEK_SET) != 0)
        goto pak_error;

      buffer = malloc(pak_file.size);
      if (!buffer)
        goto pak_error;

      if (!fread(buffer, pak_file.size, 1, fp))
      {
        free(buffer);
        goto pak_error;
      }

      if (out_filesize)
        *out_filesize = pak_file.size;
      return buffer;
    }
  }

pak_error:
  fclose(fp);
  return NULL;
}
&lt;/pre&gt;

== See also ==
* [[Quake file formats]]</text>
      <sha1>dxcevqzvjxpuya6whkcyklym8bnesbh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1223</id>
      <parentid>1222</parentid>
      <timestamp>2009-09-25T06:47:14Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="3700">'''.pak''' is Quake's container file format. It is an exceedingly simple uncompressed archive format which preserves file paths and that's about it.

== Format specification ==
All numerical values are in little-endian (Intel) format.

Header (64 bytes):

{|class=&quot;wikitable&quot;
|-
!Name
!Type
!Info
|-
|id
|4 byte string
|Should be &quot;&lt;tt&gt;PACK&lt;/tt&gt;&quot; (not null-terminated).
|-
|offset
|Integer (4 bytes)
|Index to the beginning of the file table.
|-
|size
|Integer (4 bytes)
|Size of the file table.
|-
|}

You can determine the number of files stored in the .pak file by dividing the &quot;size&quot; value in the header by 64 (the size of the file entry struct).

File entry (64 bytes):

{|class=&quot;wikitable&quot;
|-
!Name
!Type
!Info
|-
|name
|56 byte null-terminated string
|Includes path. Example: &quot;&lt;tt&gt;maps/e1m1.bsp&lt;/tt&gt;&quot;.
|-
|offset
|Integer (4 bytes)
|The offset (from the beginning of the pak file) to the beginning of this file's contents.
|-
|size
|Integer (4 byte)
|The size of this file.
|-
|}

The pak files packaged with Quake store the file table after all the actual contents, but it shouldn't matter which comes first.

== Games which use the .pak format ==
Most games based on the Quake engine retain the use of the .pak file format.
* [[Quake II]]
* [[Hexen II]]
* [[Half-Life]]

Some other completely unrelated games also use the .pak format, due to its simplicity.
* [http://www.anotherworld.fr/anotherworld_uk/ Another World] (15th anniversary re-release)

== Sample code ==
Here is some public-domain C code to open a .pak file, and return the contents of a certain file inside it. (The &lt;tt&gt;LittleLong&lt;/tt&gt; function, not defined here, should byteswap the variable contents only if the code is compiled on a big-endian machine.)

&lt;pre&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;

typedef struct pak_header_s
{
  char id[4];
  int offset;
  int size;
} pak_header_t;

typedef struct pak_file_s
{
  char name[56];
  int offset;
  int size;
} pak_file_t;

/* pak_filename : the os filename of the .pak file */
/* filename     : the name of the file you're trying to load from the .pak file (remember to use forward slashes for the path) */
/* out_filesize : if not null, the loaded file's size will be returned here */
/* returns a malloced buffer containing the file contents (remember to free it later), or NULL if any error occurred */
void *pak_load_file(const char *pak_filename, const char *filename, int *out_filesize)
{
  FILE *fp;
  pak_header_t pak_header;
  int num_files;
  int i;
  pak_file_t pak_file;
  void *buffer;

  fp = fopen(pak_filename, &quot;rb&quot;);
  if (!fp)
    return NULL;

  if (!fread(&amp;pak_header, sizeof(pak_header), 1, fp))
    goto pak_error;
  if (memcmp(pak_header.id, &quot;PACK&quot;, 4) != 0)
    goto pak_error;

  pak_header.offset = LittleLong(pak_header.offset);
  pak_header.size = LittleLong(pak_header.size);

  num_files = pak_header.size / sizeof(pak_file_t);

  if (fseek(fp, pak_header.offset, SEEK_SET) != 0)
    goto pak_error;

  for (i = 0; i &lt; num_files; i++)
  {
    if (!fread(&amp;pak_file, sizeof(pak_file_t), 1, fp))
      goto pak_error;

    if (!strcmp(pak_file.name, filename))
    {
      pak_file.offset = LittleLong(pak_file.offset);
      pak_file.size = LittleLong(pak_file.size);

      if (fseek(fp, pak_file.offset, SEEK_SET) != 0)
        goto pak_error;

      buffer = malloc(pak_file.size);
      if (!buffer)
        goto pak_error;

      if (!fread(buffer, pak_file.size, 1, fp))
      {
        free(buffer);
        goto pak_error;
      }

      if (out_filesize)
        *out_filesize = pak_file.size;
      return buffer;
    }
  }

pak_error:
  fclose(fp);
  return NULL;
}
&lt;/pre&gt;

== See also ==
* [[Quake file formats]]</text>
      <sha1>e3b2cjmnd0pkfa2xnzj0zqjhirdda7x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2991</id>
      <parentid>1223</parentid>
      <timestamp>2013-06-22T10:12:06Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>added link to Quake_tools#PAK_Editors:</comment>
      <text xml:space="preserve" bytes="3777">'''.pak''' is Quake's container file format. It is an exceedingly simple uncompressed archive format which preserves file paths and that's about it. See [[Quake_tools#PAK_Editors]] for a list of tools to work with .pak files.

== Format specification ==
All numerical values are in little-endian (Intel) format.

Header (64 bytes):

{|class=&quot;wikitable&quot;
|-
!Name
!Type
!Info
|-
|id
|4 byte string
|Should be &quot;&lt;tt&gt;PACK&lt;/tt&gt;&quot; (not null-terminated).
|-
|offset
|Integer (4 bytes)
|Index to the beginning of the file table.
|-
|size
|Integer (4 bytes)
|Size of the file table.
|-
|}

You can determine the number of files stored in the .pak file by dividing the &quot;size&quot; value in the header by 64 (the size of the file entry struct).

File entry (64 bytes):

{|class=&quot;wikitable&quot;
|-
!Name
!Type
!Info
|-
|name
|56 byte null-terminated string
|Includes path. Example: &quot;&lt;tt&gt;maps/e1m1.bsp&lt;/tt&gt;&quot;.
|-
|offset
|Integer (4 bytes)
|The offset (from the beginning of the pak file) to the beginning of this file's contents.
|-
|size
|Integer (4 byte)
|The size of this file.
|-
|}

The pak files packaged with Quake store the file table after all the actual contents, but it shouldn't matter which comes first.

== Games which use the .pak format ==
Most games based on the Quake engine retain the use of the .pak file format.
* [[Quake II]]
* [[Hexen II]]
* [[Half-Life]]

Some other completely unrelated games also use the .pak format, due to its simplicity.
* [http://www.anotherworld.fr/anotherworld_uk/ Another World] (15th anniversary re-release)

== Sample code ==
Here is some public-domain C code to open a .pak file, and return the contents of a certain file inside it. (The &lt;tt&gt;LittleLong&lt;/tt&gt; function, not defined here, should byteswap the variable contents only if the code is compiled on a big-endian machine.)

&lt;pre&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;

typedef struct pak_header_s
{
  char id[4];
  int offset;
  int size;
} pak_header_t;

typedef struct pak_file_s
{
  char name[56];
  int offset;
  int size;
} pak_file_t;

/* pak_filename : the os filename of the .pak file */
/* filename     : the name of the file you're trying to load from the .pak file (remember to use forward slashes for the path) */
/* out_filesize : if not null, the loaded file's size will be returned here */
/* returns a malloced buffer containing the file contents (remember to free it later), or NULL if any error occurred */
void *pak_load_file(const char *pak_filename, const char *filename, int *out_filesize)
{
  FILE *fp;
  pak_header_t pak_header;
  int num_files;
  int i;
  pak_file_t pak_file;
  void *buffer;

  fp = fopen(pak_filename, &quot;rb&quot;);
  if (!fp)
    return NULL;

  if (!fread(&amp;pak_header, sizeof(pak_header), 1, fp))
    goto pak_error;
  if (memcmp(pak_header.id, &quot;PACK&quot;, 4) != 0)
    goto pak_error;

  pak_header.offset = LittleLong(pak_header.offset);
  pak_header.size = LittleLong(pak_header.size);

  num_files = pak_header.size / sizeof(pak_file_t);

  if (fseek(fp, pak_header.offset, SEEK_SET) != 0)
    goto pak_error;

  for (i = 0; i &lt; num_files; i++)
  {
    if (!fread(&amp;pak_file, sizeof(pak_file_t), 1, fp))
      goto pak_error;

    if (!strcmp(pak_file.name, filename))
    {
      pak_file.offset = LittleLong(pak_file.offset);
      pak_file.size = LittleLong(pak_file.size);

      if (fseek(fp, pak_file.offset, SEEK_SET) != 0)
        goto pak_error;

      buffer = malloc(pak_file.size);
      if (!buffer)
        goto pak_error;

      if (!fread(buffer, pak_file.size, 1, fp))
      {
        free(buffer);
        goto pak_error;
      }

      if (out_filesize)
        *out_filesize = pak_file.size;
      return buffer;
    }
  }

pak_error:
  fclose(fp);
  return NULL;
}
&lt;/pre&gt;

== See also ==
* [[Quake file formats]]</text>
      <sha1>d98cxn43ruuv1a3zuq93zv6396q9wse</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>.wad</title>
    <ns>0</ns>
    <id>782</id>
    <redirect title="Texture Wad" />
    <revision>
      <id>2291</id>
      <timestamp>2013-03-26T17:59:29Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Scampie moved page [[.wad]] to [[Texture Wad]]: .wad is an ugly name for this article</comment>
      <text xml:space="preserve" bytes="25">#REDIRECT [[Texture Wad]]</text>
      <sha1>a6dwgd2izo39ossvakyl0awe2g3rs0q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>A required .DLL file, Glide2x.dll, was not found</title>
    <ns>0</ns>
    <id>488</id>
    <revision>
      <id>1003</id>
      <timestamp>2009-05-23T13:22:14Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>quick and dirty</comment>
      <text xml:space="preserve" bytes="167">If you do not have a 3Dfx/Voodoo graphics accelerator (you will know if you do) remove the opengl32.dll in your Quake directory.
You do '''not''' need the glide2x.dll!</text>
      <sha1>dix7evvzs7671pmybwul6lwjgn3wsyq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1043</id>
      <parentid>1003</parentid>
      <timestamp>2009-07-06T03:20:41Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>Expanded this article to fully explain the situation</comment>
      <text xml:space="preserve" bytes="1028">This error message may appear when you try to start GLQuake.

When you installed GLQuake, assuming you installed it properly, you had the option of also installing a 3dfx graphics card driver - specifically, the file opengl32.dll, which despite its generic-sounding name is actually a driver specifically made to enable glquake.exe to work with [http://en.wikipedia.org/wiki/3dfx_Voodoo_Graphics 3dfx's Voodoo-based graphics cards].

This presence of this driver makes GLQuake ''dependent'' on another file, glide2x.dll, which is the Glide API library found in standard 3dfx Voodoo driver installations. That is, when you installed the drivers to make your Voodoo card work with your PC in general, glide2x.dll was probably installed as part of that package.

If you do not have a Voodoo-based graphics accelerator (you will know if you do), then '''simply remove the opengl32.dll in your Quake directory'''. This will make GLQuake start normally without looking for the Glide API library. You do '''not''' need the glide2x.dll!</text>
      <sha1>5uo1v70zewy67mrf21am9uqen3ktbqp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1044</id>
      <parentid>1043</parentid>
      <timestamp>2009-07-06T03:21:51Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>Minor copy edit</comment>
      <text xml:space="preserve" bytes="1020">This error message may appear when you try to start GLQuake.

When you installed GLQuake, assuming you installed it properly, you had the option of also installing a 3dfx graphics card driver - specifically, the file opengl32.dll, which despite its generic-sounding name is actually a library designed to enable glquake.exe to work with [http://en.wikipedia.org/wiki/3dfx_Voodoo_Graphics 3dfx's Voodoo-based graphics cards].

This presence of this driver makes GLQuake ''dependent'' on another file, glide2x.dll, which is the Glide API library found in standard 3dfx Voodoo driver installations. That is, when you installed the drivers to make your Voodoo card work with your PC in general, glide2x.dll was probably installed as part of that package.

If you do not have a Voodoo-based graphics accelerator (you will know if you do), then '''simply remove the opengl32.dll in your Quake directory'''. This will make GLQuake start normally without looking for the Glide API library. You do '''not''' need the glide2x.dll!</text>
      <sha1>c7d56i28sqycxuqxrnimim4conc9kz1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>ATI and corrupted graphics</title>
    <ns>0</ns>
    <id>496</id>
    <revision>
      <id>1028</id>
      <timestamp>2009-06-10T10:08:27Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>New page: Do you have corrupted graphics running Quake on your ATI graphics card like this?  [[Image:Ati_bpp16_graphics_corruption.jpg|400px]]  Fix it by adding [[-bpp|-bpp 32]] to your [[http://qua...</comment>
      <text xml:space="preserve" bytes="460">Do you have corrupted graphics running Quake on your ATI graphics card like this?

[[Image:Ati_bpp16_graphics_corruption.jpg|400px]]

Fix it by adding [[-bpp|-bpp 32]] to your [[http://quakery.quakedev.com/qwiki/index.php/Command_line_parameters|commandline]]. Quake will then start in 32 bit color depth. It will use slightly more video memory but nowadays that is negligible.

Source: http://www.celephais.net/board/view_thread.php?id=60306&amp;start=113&amp;end=121</text>
      <sha1>4we6pghpagf6d4g8kyjjd0m6m7frhoa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1031</id>
      <parentid>1028</parentid>
      <timestamp>2009-06-10T10:13:52Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>fixed link</comment>
      <text xml:space="preserve" bytes="416">Do you have corrupted graphics running Quake on your ATI graphics card like this?

[[Image:Ati_bpp16_graphics_corruption.jpg|400px]]

Fix it by adding [[-bpp|-bpp 32]] to your [[Command_line_parameters|commandline]]. Quake will then start in 32 bit color depth. It will use slightly more video memory but nowadays that is negligible.

Source: http://www.celephais.net/board/view_thread.php?id=60306&amp;start=113&amp;end=121</text>
      <sha1>68musibbhcnxve4yzx6lz5k8k8ksxkg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Acknowledgments</title>
    <ns>0</ns>
    <id>40</id>
    <revision>
      <id>47</id>
      <timestamp>2007-10-30T17:43:18Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: This wiki was based on [http://wiki.quakesrc.org/ the old one], which was initiated and massively contributed to by FrikaC. This Acknowledgments page was taken from there.  We'd like to th...</comment>
      <text xml:space="preserve" bytes="965">This wiki was based on [http://wiki.quakesrc.org/ the old one], which was initiated and massively contributed to by FrikaC. This Acknowledgments page was taken from there.

We'd like to thank...

* JakFrost for the Console Command site http://www.planetquake.com/console/, which was used as a reference during the creation the [[Console Commands]] section.
* Uwe Girlich for the Quake Demospecs, which we didn't really use, but still: http://www.planetquake.com/demospecs/
* Olivier Montanuy for the Quake Specs, which served as inspiration.
* David &quot;DarkGrue&quot; Hesprich for the QuakeC Reference manual which served as inspiration (mostly because of all the mistakes it has...)
* [[id Software]] for [[Quake]], [[QuakeC]] and the all the sources to go with.
* Ender and [http://www.quakesrc.org QuakeSrc] for hosting and setting this site up.
* Maddes and [http://www.inside3d.com/qip Quake Info Pool] for many years of just being cool.
* Adiemus for the site design</text>
      <sha1>2a4rg1q6kbb1p2k4v0ebxwdpgdfgn23</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>880</id>
      <parentid>47</parentid>
      <timestamp>2008-06-14T16:47:25Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <comment>No longer relevant. Plus, use reference tags</comment>
      <text xml:space="preserve" bytes="850">This wiki was based on [http://wiki.quakesrc.org/ the old one], which was initiated and massively contributed to by FrikaC. This Acknowledgments page was taken from there.

We'd like to thank...

* JakFrost for the Console Command site http://www.planetquake.com/console/, which was used as a reference during the creation the [[Console Commands]] section.
* Uwe Girlich for the Quake Demospecs, which we didn't really use, but still: http://www.planetquake.com/demospecs/
* Olivier Montanuy for the Quake Specs, which served as inspiration.
* David &quot;DarkGrue&quot; Hesprich for the QuakeC Reference manual which served as inspiration (mostly because of all the mistakes it has...)
* [[id Software]] for [[Quake]], [[QuakeC]] and the all the sources to go with.
* Maddes and [http://www.inside3d.com/qip Quake Info Pool] for many years of just being cool.</text>
      <sha1>e536giwc88aso420ewzuukd61dp48y7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Aim</title>
    <ns>0</ns>
    <id>812</id>
    <redirect title="aim" />
    <revision>
      <id>2384</id>
      <timestamp>2013-03-28T14:57:35Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Spirit moved page [[Aim]] to [[aim]]: lowercase</comment>
      <text xml:space="preserve" bytes="17">#REDIRECT [[aim]]</text>
      <sha1>bsk7tjzhe1ictjrj54wrlp2hoi5hq9q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Ambient level</title>
    <ns>0</ns>
    <id>868</id>
    <redirect title="ambient level" />
    <revision>
      <id>2503</id>
      <timestamp>2013-03-29T14:21:08Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Ambient level]] to [[ambient level]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="27">#REDIRECT [[ambient level]]</text>
      <sha1>if5ihdac3k2gt178immsxtomid774x2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Armagon</title>
    <ns>0</ns>
    <id>467</id>
    <revision>
      <id>895</id>
      <timestamp>2008-06-30T12:34:45Z</timestamp>
      <contributor>
        <ip>195.199.147.174</ip>
      </contributor>
      <comment>New page: According to the storyline for Scourge of Armagon, this creature is the general of Quake's forces, planning to invade Earth via a portal known as the 'Rift'. Physically, Armagon resembles ...</comment>
      <text xml:space="preserve" bytes="392">According to the storyline for Scourge of Armagon, this creature is the general of Quake's forces, planning to invade Earth via a portal known as the 'Rift'. Physically, Armagon resembles a giant [[Gremlin]] with cybernetic legs and a combined [[rocket launcher]]/[[laser cannon]] for arms. This gives the creature an appearance not unlike the Cyberdemon from Doom and the Strogg in Quake II.</text>
      <sha1>bxhsyzukjvq4e9fp1pay1s0oyuqjg2f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>896</id>
      <parentid>895</parentid>
      <timestamp>2008-07-01T10:15:10Z</timestamp>
      <contributor>
        <ip>195.199.147.174</ip>
      </contributor>
      <text xml:space="preserve" bytes="392">According to the storyline for Scourge of Armagon, this creature is the general of Quake's forces, planning to invade Earth via a portal known as the 'Rift'. Physically, Armagon resembles a giant [[Gremlin]] with cybernetic legs and a combined [[Rocket Launcher]]/[[Laser Cannon]] for arms. This gives the creature an appearance not unlike the Cyberdemon from Doom and the Strogg in Quake II.</text>
      <sha1>e3dsrg6aihrz6pm9mq1nlbjxnhv9wbe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2708</id>
      <parentid>896</parentid>
      <timestamp>2013-03-31T12:43:27Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>categories</comment>
      <text xml:space="preserve" bytes="438">According to the storyline for Scourge of Armagon, this creature is the general of Quake's forces, planning to invade Earth via a portal known as the 'Rift'. Physically, Armagon resembles a giant [[Gremlin]] with cybernetic legs and a combined [[Rocket Launcher]]/[[Laser Cannon]] for arms. This gives the creature an appearance not unlike the Cyberdemon from Doom and the Strogg in Quake II.

{{Scourge of Armagon}}{{Monsters}}{{Bosses}}</text>
      <sha1>o7uekttey6uc9qq80vqvo4mo1uykm42</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2709</id>
      <parentid>2708</parentid>
      <timestamp>2013-03-31T12:44:29Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <text xml:space="preserve" bytes="465">According to the storyline for Scourge of Armagon, this creature is the general of Quake's forces, planning to invade Earth via a portal known as the 'Rift'. Physically, Armagon resembles a giant [[Gremlin]] with cybernetic legs and a combined [[Rocket Launcher]]/[[Laser Cannon]] for arms. This gives the creature an appearance not unlike the Cyberdemon from Doom and the Strogg in Quake II.

{{Category:Scourge of Armagon}}{{Category:Monsters}}{{Category:Bosses}}</text>
      <sha1>fkyzuhezywv50y53frobfv8gddyxgff</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2710</id>
      <parentid>2709</parentid>
      <timestamp>2013-03-31T12:45:10Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Reverted edits by [[Special:Contributions/Spirit|Spirit]] ([[User talk:Spirit|talk]]) to last revision by [[User:195.199.147.174|195.199.147.174]]</comment>
      <text xml:space="preserve" bytes="392">According to the storyline for Scourge of Armagon, this creature is the general of Quake's forces, planning to invade Earth via a portal known as the 'Rift'. Physically, Armagon resembles a giant [[Gremlin]] with cybernetic legs and a combined [[Rocket Launcher]]/[[Laser Cannon]] for arms. This gives the creature an appearance not unlike the Cyberdemon from Doom and the Strogg in Quake II.</text>
      <sha1>e3dsrg6aihrz6pm9mq1nlbjxnhv9wbe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Axe</title>
    <ns>0</ns>
    <id>406</id>
    <revision>
      <id>692</id>
      <timestamp>2008-05-07T19:53:13Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page:  == Description ==  What the axe lacks in quality it makes up for in entertainment value! There are few things more satisfying then axe murdering someone, especially when the message is di...</comment>
      <text xml:space="preserve" bytes="1560">
== Description ==

What the axe lacks in quality it makes up for in entertainment value! There are few things more satisfying then axe murdering someone, especially when the message is displayed for all on the server to see. This goes way below pummeling in Quake 3, which involves only a couple snuggles. It requires many whacks with the axe to defeat even an injured opponent, which makes pulling this off even more worth your while.

If you're using the axe, keep in mind that if you have any other weapon - I don't care what it is - you're making a big mistake. If you really do want to use it, though, or if you don't have anything else, you will surely meet your fate soon enough - but you may be able to get a couple of frags first, if you're careful enough. Try to attack the person from behind if possible. Once he turns to meet you, run to his back again. Basically, try to get as many whacks in without being in his line of fire. Any other weapon will surely kill you in a head-to-head skirmish, so don't let yourself get caught in one.

Fortunately for anyone being attacked by it, the axe is very easy to avoid. A few simple jumps when the person gets near you will assure that he won't be able to touch you. Just keep him in front of you as much as possible so you can shoot him. Chances are, he will become more of an annoyance than anything else. You may need some extra health afterward, but the chances of you dying are hardly phenomenal - unless you're hardly phenomenal yourself.

----
'''Effectiveness:''' Awful

'''Avoidability:''' Awful</text>
      <sha1>6gc8yydt3gkflogjgsivq9qug1qtabh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>987</id>
      <parentid>692</parentid>
      <timestamp>2009-05-22T08:39:41Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>as the current weapon descriptions were taken from http://euroquake.webs.com/guides2.htm i am getting the old ones from archive.org</comment>
      <text xml:space="preserve" bytes="627">{{Infobox Weapon
|weapon=Axe
|ammotype=none
|ammousage=none
|shottype=hitscan
|dpshot=20
|dpsecond=40
|range=64 units
|cycletime=0.5s
}}

The last resort. Face it -- going toe-to-toe with the ugles in Quake demonstrates all the good sense of a man parachuting into an alligator farm.

You start Quake with the Axe and the [[Shotgun]]. You will rarely use the Axe, probably never, but it's there. There is the occasion where you might want to use it on a lone [[Grunt]], to conserve ammo. Or, when you have the [[Quad Damage]], it makes an effective [[Zombie]]-beater. But other than that, ignore it.

==See Also==
* [[Weapons]]</text>
      <sha1>jrhryxgo8j7voykzlj0y879xnl4iqlq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1306</id>
      <parentid>987</parentid>
      <timestamp>2009-09-27T18:35:44Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="612">{{Infobox Weapon
|weapon=Axe
|ammotype=none
|ammousage=none
|shottype=hitscan
|dpshot=20
|dpsecond=40
|range=64 units
|cycletime=0.5s
}}

The last resort. Face it -- going toe-to-toe with the ugles in Quake demonstrates all the good sense of a man parachuting into an alligator farm.

You start Quake with the Axe and the [[Shotgun]]. You will rarely use the Axe, probably never, but it's there. There is the occasion where you might want to use it on a lone [[Grunt]], to conserve ammo. Or, when you have the [[Quad Damage]], it makes an effective [[Zombie]]-beater. But other than that, ignore it.

{{Weapons}}</text>
      <sha1>o7wjrsrso4slsw3wpgo3dpb2dxvxtsq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3041</id>
      <parentid>1306</parentid>
      <timestamp>2013-12-18T00:53:13Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <text xml:space="preserve" bytes="737">{{Infobox Weapon
|weapon=Axe
|image_v=v_axe.png
|manualtext=The last resort. Face it -- going toe-to-toe with the uglies in Quake demonstrates all the good sense of a man parachuting into an alligator farm.
|ammotype=none
|ammousage=none
|shottype=[[Hitscan]]
|dpshot=20
|dpsecond=40
|range=64 [[unit]]s
|cycletime=0.5s
|1stappearance=Default weapon
|obituary1=(Target) was ax-murdered by (attacker).
}}

You start Quake with the [[Axe]] and the [[Shotgun]]. You will rarely use the Axe, probably never, but it's there. There is the occasion where you might want to use it on a lone [[Grunt]], to conserve ammo. Or, when you have the [[Quad Damage]], it makes an effective [[Zombie]]-chopper. But other than that, ignore it.

{{Weapons}}</text>
      <sha1>7kvb25fwzuhlkz2eq00z91l1xbx4ebo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>BX WAL SUPPORT</title>
    <ns>0</ns>
    <id>219</id>
    <revision>
      <id>401</id>
      <timestamp>2008-02-28T12:59:43Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Indicates the engine supports .wal textures for filenames in the textures/ directory</comment>
      <text xml:space="preserve" bytes="84">Indicates the engine supports .wal textures for filenames in the textures/ directory</text>
      <sha1>bu0d88g421kak4xlzx583ekql1q3mah</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Basics of Quake Mapping</title>
    <ns>0</ns>
    <id>765</id>
    <redirect title="Getting Started Mapping" />
    <revision>
      <id>2192</id>
      <timestamp>2013-03-26T04:24:53Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Scampie moved page [[Basics of Quake Mapping]] to [[Getting Started Mapping]]</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[Getting Started Mapping]]</text>
      <sha1>6cly170083relf4dkaj4544meozksvj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Bgmvolume</title>
    <ns>0</ns>
    <id>813</id>
    <redirect title="bgmvolume" />
    <revision>
      <id>2386</id>
      <timestamp>2013-03-28T14:57:49Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Spirit moved page [[Bgmvolume]] to [[bgmvolume]]</comment>
      <text xml:space="preserve" bytes="23">#REDIRECT [[bgmvolume]]</text>
      <sha1>bevgw111s89l8zir07bwqamvvspw1tq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Biosuit</title>
    <ns>0</ns>
    <id>409</id>
    <revision>
      <id>696</id>
      <timestamp>2008-05-07T19:56:07Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: This suit will protect you against slime and water. You can't drown while wearing it, slime won't hurt you, and you can see a little better because it gives everything a tinge of green and...</comment>
      <text xml:space="preserve" bytes="515">This suit will protect you against slime and water. You can't drown while wearing it, slime won't hurt you, and you can see a little better because it gives everything a tinge of green and makes the screen a little brighter. You don't necessarily want to grab the suit just because it's there, it won't do you a whole lot of good unless you actually need to use it for something (like staying underwater for a long period of time). It can't hurt, but don't go too far out of your way or risk being killed to get it.</text>
      <sha1>qjm3gl62l4yqleo2sn4n8bkt63k35cs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>884</id>
      <parentid>696</parentid>
      <timestamp>2008-06-18T21:50:23Z</timestamp>
      <contributor>
        <ip>65.66.150.198</ip>
      </contributor>
      <text xml:space="preserve" bytes="532">This suit will protect you against slime and water. You can't drown while wearing it, slime won't hurt you, and you can see a little better because it gives everything a tinge of green and makes the screen a little brighter. You don't necessarily want to grab the suit just because it's there, it won't do you a whole lot of good unless you actually need to use it for something (like staying underwater for a long period of time). It can't hurt, but don't go too far out of your way or risk being killed to get it.

{{Quake items}}</text>
      <sha1>jelfimjmsekn5rihmbok5kbxy8d6f74</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1488</id>
      <parentid>884</parentid>
      <timestamp>2009-12-21T10:23:27Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <text xml:space="preserve" bytes="679">This suit will protect you against slime and water. You can't drown while wearing it, slime won't hurt you, and you can see a little better because it gives everything a tinge of green and makes the screen a little brighter. You don't necessarily want to grab the suit just because it's there, it won't do you a whole lot of good unless you actually need to use it for something (like staying underwater for a long period of time). It can't hurt, but don't go too far out of your way or risk being killed to get it. The biosuit also slows down lavaburn a little. You will still take damage, but the chances of being able to cross a small lava pool are increased.

{{Quake items}}</text>
      <sha1>jtvn8cobhk5gtx5p6men7rb9ug0xtkq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Boomstick</title>
    <ns>0</ns>
    <id>464</id>
    <revision>
      <id>892</id>
      <timestamp>2008-06-30T12:26:28Z</timestamp>
      <contributor>
        <ip>195.199.147.174</ip>
      </contributor>
      <comment>New page: Slang for the [[Shotgun]].</comment>
      <text xml:space="preserve" bytes="26">Slang for the [[Shotgun]].</text>
      <sha1>tkuq7urq3nkub0m9a7ngsjbephyt3mj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Bprint</title>
    <ns>0</ns>
    <id>216</id>
    <revision>
      <id>397</id>
      <timestamp>2008-02-23T19:04:10Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  void '''bprint''' (        string ''text''        [, string ''text2'']        [, string ''text3'']        [, string ''text4'']        [, string ''text5'']        [, string ''text6'']     ...</comment>
      <text xml:space="preserve" bytes="511"> void '''bprint''' (
       string ''text''
       [, string ''text2'']
       [, string ''text3'']
       [, string ''text4'']
       [, string ''text5'']
       [, string ''text6'']
       [, string ''text7'']
       [, string ''text8'']
 )

* ''text'', ''text2'', ... = text(s) of the message, if more than one text they are concatenated

Broadcast a message to all players on the current server.

The function really just sends a SVC_PRINT, reliable to all (MSG_ALL)

Not more than 8 parameters are allowed.</text>
      <sha1>rookfljpwxec3c9zx9m7ddnaom9yj4k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Break</title>
    <ns>0</ns>
    <id>210</id>
    <revision>
      <id>391</id>
      <timestamp>2008-02-23T18:43:31Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  void '''break'''()  Exit the programs. Never used?</comment>
      <text xml:space="preserve" bytes="51"> void '''break'''()

Exit the programs. Never used?</text>
      <sha1>e0ont78vg43hc3cflq2u74frypnzsm8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Brush</title>
    <ns>0</ns>
    <id>649</id>
    <revision>
      <id>1935</id>
      <timestamp>2013-03-25T04:16:37Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>added a simple page for brush</comment>
      <text xml:space="preserve" bytes="975">A brush in [[Mapping|Quake map making]] is the building block of a level. Brushes are placed by the level author in a level editor and used to define the entire geometry of the level, including any [[solid entities]] such as doors, lifts and buttons.

Brushes are something that are only ever seen during the level creation process, as they are turned into a polygonal mesh during the [[Map_compiling|map compilation]] process.

The shape of a brush is limited in that is can only ever be a convex shape. To make non-convex shapes, level authors must use multiple brushes. The reason for this limitation is that means that brushes can be defined in the .map file as a simple series of planes, the intersections of which result in the vertices of the brush that can be seen in the editor. It also makes the calculations needed during the [[QBSP]] phase of map compilation much simpler, and thus faster to run - something that was very important when Quake was being developed.</text>
      <sha1>drex5o65d0zkgmexsf37vyhxor6xpl1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1940</id>
      <parentid>1935</parentid>
      <timestamp>2013-03-25T04:34:06Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>made brush bold</comment>
      <text xml:space="preserve" bytes="981">A '''brush''' in [[Mapping|Quake map making]] is the building block of a level. Brushes are placed by the level author in a level editor and used to define the entire geometry of the level, including any [[solid entities]] such as doors, lifts and buttons.

Brushes are something that are only ever seen during the level creation process, as they are turned into a polygonal mesh during the [[Map_compiling|map compilation]] process.

The shape of a brush is limited in that is can only ever be a convex shape. To make non-convex shapes, level authors must use multiple brushes. The reason for this limitation is that means that brushes can be defined in the .map file as a simple series of planes, the intersections of which result in the vertices of the brush that can be seen in the editor. It also makes the calculations needed during the [[QBSP]] phase of map compilation much simpler, and thus faster to run - something that was very important when Quake was being developed.</text>
      <sha1>lu4knms162agxzxnl91z6gunlw76owb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1946</id>
      <parentid>1940</parentid>
      <timestamp>2013-03-25T05:04:52Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>Than moved page [[brush]] to [[Brush]]: fixed capitalisation (sorry!)</comment>
      <text xml:space="preserve" bytes="981">A '''brush''' in [[Mapping|Quake map making]] is the building block of a level. Brushes are placed by the level author in a level editor and used to define the entire geometry of the level, including any [[solid entities]] such as doors, lifts and buttons.

Brushes are something that are only ever seen during the level creation process, as they are turned into a polygonal mesh during the [[Map_compiling|map compilation]] process.

The shape of a brush is limited in that is can only ever be a convex shape. To make non-convex shapes, level authors must use multiple brushes. The reason for this limitation is that means that brushes can be defined in the .map file as a simple series of planes, the intersections of which result in the vertices of the brush that can be seen in the editor. It also makes the calculations needed during the [[QBSP]] phase of map compilation much simpler, and thus faster to run - something that was very important when Quake was being developed.</text>
      <sha1>lu4knms162agxzxnl91z6gunlw76owb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2045</id>
      <parentid>1946</parentid>
      <timestamp>2013-03-25T11:27:14Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="997">A '''brush''' in [[Mapping|Quake map making]] is the building block of a level. Brushes are placed by the level author in a level editor and used to define the entire geometry of the level, including any [[Entity#Overview|solid entities]] such as doors, lifts and buttons.

Brushes are something that are only ever seen during the level creation process, as they are turned into a polygonal mesh during the [[Map_compiling|map compilation]] process.

The shape of a brush is limited in that is can only ever be a convex shape. To make non-convex shapes, level authors must use multiple brushes. The reason for this limitation is that means that brushes can be defined in the .map file as a simple series of planes, the intersections of which result in the vertices of the brush that can be seen in the editor. It also makes the calculations needed during the [[QBSP]] phase of map compilation much simpler, and thus faster to run - something that was very important when Quake was being developed.</text>
      <sha1>c9qt8jm0s0mrmxknuvlvhob7w2042wc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2188</id>
      <parentid>2045</parentid>
      <timestamp>2013-03-26T04:20:12Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="1030">[[file:Brush.png|thumb|A brush]]
A '''brush''' in [[Mapping|Quake map making]] is the building block of a level. Brushes are placed by the level author in a level editor and used to define the entire geometry of the level, including any [[Entity#Overview|solid entities]] such as doors, lifts and buttons.

Brushes are something that are only ever seen during the level creation process, as they are turned into a polygonal mesh during the [[Map_compiling|map compilation]] process.

The shape of a brush is limited in that is can only ever be a convex shape. To make non-convex shapes, level authors must use multiple brushes. The reason for this limitation is that means that brushes can be defined in the .map file as a simple series of planes, the intersections of which result in the vertices of the brush that can be seen in the editor. It also makes the calculations needed during the [[QBSP]] phase of map compilation much simpler, and thus faster to run - something that was very important when Quake was being developed.</text>
      <sha1>hefr4v56ehjqu74vta79cry4iimhcl6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Builtin Functions</title>
    <ns>0</ns>
    <id>478</id>
    <redirect title="List of builtin functions" />
    <revision>
      <id>962</id>
      <timestamp>2008-11-14T11:13:22Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>New page: * [[List of builtin functions]]</comment>
      <text xml:space="preserve" bytes="31">* [[List of builtin functions]]</text>
      <sha1>tvbiktt9ktn4s499iovnlamahihp2u6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>963</id>
      <parentid>962</parentid>
      <timestamp>2008-11-14T11:13:55Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="75">Explanation of what builtin functions are.

* [[List of builtin functions]]</text>
      <sha1>1e8f9bazhdskd0be24qfs11vyudth6j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>964</id>
      <parentid>963</parentid>
      <timestamp>2008-11-14T11:14:46Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>Redirecting to [[List of builtin functions]]</comment>
      <text xml:space="preserve" bytes="39">#redirect [[List of builtin functions]]</text>
      <sha1>54jxm4iokers5ixkzsi8nlhzv3ht90b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>CIA Operative: Solo Missions</title>
    <ns>0</ns>
    <id>443</id>
    <revision>
      <id>778</id>
      <timestamp>2008-05-08T19:17:56Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <comment>New page: {{Infobox Project |name=CIA Operative: Solo Missions |author=[[2015 Inc.]] |license=Proprietary, commercial |engine=[[GLQuake]]  |first-release=2001 |newest-release=2001 |website=[http://w...</comment>
      <text xml:space="preserve" bytes="595">{{Infobox Project
|name=CIA Operative: Solo Missions
|author=[[2015 Inc.]]
|license=Proprietary, commercial
|engine=[[GLQuake]] 
|first-release=2001
|newest-release=2001
|website=[http://www.2015.com/ 2015]
}}

THIS ARTICLE IS VERY NPOV!!!

It's a piece of crap game period.
The plot of the game has you taking on drug lords and terrorists.

== Engine modifications ==

The game is closed source and is known to use FRIK_FILE as well as the GOLK shader engine, which in turn is illegally leaked Quake3 engine source code, so this breaches ''much more'' than the GNU GPL.




{{Derivative Games}}</text>
      <sha1>a1hyw72nf4dijmpywpiwodskruzejqz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>CODER4</title>
    <ns>0</ns>
    <id>361</id>
    <revision>
      <id>591</id>
      <timestamp>2008-04-11T02:42:47Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: Tei's QuakeC editing tool he lovingly coded for himself and ended up sharing with the rest of the community...</comment>
      <text xml:space="preserve" bytes="110">Tei's QuakeC editing tool he lovingly coded for himself and ended up sharing with the rest of the community...</text>
      <sha1>1uapnfesn4e3oblem4lbg64rvypzahs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>592</id>
      <parentid>591</parentid>
      <timestamp>2008-04-11T02:43:20Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="118">[[Tei]]'s [[QuakeC]] editing tool he lovingly coded for himself and ended up sharing with the rest of the community...</text>
      <sha1>n2jp9n0d0ce7zuejld8qmwseodccc5r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Category:Article deletion requests</title>
    <ns>14</ns>
    <id>829</id>
    <revision>
      <id>2443</id>
      <timestamp>2013-03-28T21:03:02Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>Created page with &quot;The purpose of this category is to list articles that have been requested for deletion by admins or mods (as normal user accounts cannot simply delete pages). This category ho...&quot;</comment>
      <text xml:space="preserve" bytes="309">The purpose of this category is to list articles that have been requested for deletion by admins or mods (as normal user accounts cannot simply delete pages). This category holds articles that use the &lt;nowiki&gt;{{deletion}}&lt;/nowiki&gt; template, or that have otherwise been added to the category, should any exist.</text>
      <sha1>ftic1tv3vss5b466202prbi0llcgys0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Category:Console commands</title>
    <ns>14</ns>
    <id>63</id>
    <revision>
      <id>102</id>
      <timestamp>2007-10-30T19:58:32Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: See [[List of console commands]].</comment>
      <text xml:space="preserve" bytes="33">See [[List of console commands]].</text>
      <sha1>er3arggt1mzaspwucahkjf2ljamxusa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Category:Console variables</title>
    <ns>14</ns>
    <id>59</id>
    <revision>
      <id>95</id>
      <timestamp>2007-10-30T19:57:00Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: See [[List of console variables]].</comment>
      <text xml:space="preserve" bytes="34">See [[List of console variables]].</text>
      <sha1>8g649h9gq9lfznyeccscif8f1yars3u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Category:DarkPlaces</title>
    <ns>14</ns>
    <id>629</id>
    <revision>
      <id>1743</id>
      <timestamp>2013-03-25T00:04:27Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>Created page with &quot;Below is a list of the pages in the category for the DarkPlaces engine. See the [[DarkPlaces]] page for information about this engine itself.&quot;</comment>
      <text xml:space="preserve" bytes="141">Below is a list of the pages in the category for the DarkPlaces engine. See the [[DarkPlaces]] page for information about this engine itself.</text>
      <sha1>fomnqe09tsibnpx5s2w4zqltntbsgnt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Category:Derivative Games</title>
    <ns>14</ns>
    <id>446</id>
    <revision>
      <id>783</id>
      <timestamp>2008-05-08T19:43:20Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <comment>New page: Any games derived from the GNU GPL Quake source release.</comment>
      <text xml:space="preserve" bytes="56">Any games derived from the GNU GPL Quake source release.</text>
      <sha1>r2uw7qalmdwkxrldhc87jssknoyehj8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Category:Engines</title>
    <ns>14</ns>
    <id>506</id>
    <revision>
      <id>1081</id>
      <timestamp>2009-07-12T00:36:12Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>eliminating redlinks on this category by giving it a description.</comment>
      <text xml:space="preserve" bytes="64">These are this wiki's articles about specific Quake [[engines]].</text>
      <sha1>r89s7wjxlk8u2r4d8uen8h1g4lg6sew</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Category:Games</title>
    <ns>14</ns>
    <id>480</id>
    <revision>
      <id>976</id>
      <timestamp>2009-03-22T03:04:36Z</timestamp>
      <contributor>
        <ip>64.123.239.223</ip>
      </contributor>
      <comment>New page: Games, such as [[Quake]].</comment>
      <text xml:space="preserve" bytes="25">Games, such as [[Quake]].</text>
      <sha1>hqvpv8854zbvk7l2aorp32qd13c0w71</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Category:Monsters</title>
    <ns>14</ns>
    <id>630</id>
    <revision>
      <id>1859</id>
      <timestamp>2013-03-25T00:45:31Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>Created page with &quot;See the [[Monsters]] page for general information about the monsters of Quake.&quot;</comment>
      <text xml:space="preserve" bytes="78">See the [[Monsters]] page for general information about the monsters of Quake.</text>
      <sha1>o89svk7r4w4f4ex9kjb3d8vyjc8731m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Category:Quake entities</title>
    <ns>14</ns>
    <id>643</id>
    <revision>
      <id>1890</id>
      <timestamp>2013-03-25T02:26:18Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>Created page with &quot;This is a list of all articles categorized as being about a standard entity in the Quake engine. For engine-specific entities please refer to [[Category:Custom entities]] inst...&quot;</comment>
      <text xml:space="preserve" bytes="208">This is a list of all articles categorized as being about a standard entity in the Quake engine. For engine-specific entities please refer to [[Category:Custom entities]] instead.

Also, see [[Entity guide]].</text>
      <sha1>7xtoqdpk0fijfoxzonq9m5kv2n4x13x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1891</id>
      <parentid>1890</parentid>
      <timestamp>2013-03-25T02:27:13Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="209">This is a list of all articles categorized as being about a standard entity in the Quake engine. For engine-specific entities please refer to [[:Category:Custom entities]] instead.

Also, see [[Entity guide]].</text>
      <sha1>e3onwjzv64pqd3ojeg09x5b6vc21lwc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Category:ToDo items</title>
    <ns>14</ns>
    <id>772</id>
    <revision>
      <id>2244</id>
      <timestamp>2013-03-26T14:16:15Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>Created page with &quot;This page lists all articles containing the template [[Template:todo]] or that have otherwise been added to this category. See the individual articles for more information on ...&quot;</comment>
      <text xml:space="preserve" bytes="198">This page lists all articles containing the template [[Template:todo]] or that have otherwise been added to this category. See the individual articles for more information on the item(s) to be done.</text>
      <sha1>6svyierw0kneqqdxd15tni6x7yntr7y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Ceil</title>
    <ns>0</ns>
    <id>869</id>
    <redirect title="ceil" />
    <revision>
      <id>2505</id>
      <timestamp>2013-03-29T14:21:57Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Ceil]] to [[ceil]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="18">#REDIRECT [[ceil]]</text>
      <sha1>6n8mjuqjuxxycdz01624zgi0vrxtr5c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Centroid</title>
    <ns>0</ns>
    <id>465</id>
    <revision>
      <id>893</id>
      <timestamp>2008-06-30T12:32:12Z</timestamp>
      <contributor>
        <ip>195.199.147.174</ip>
      </contributor>
      <comment>New page: A man-sized cybernetic scorpion with [[nailgun]]s for claws and melee sting attack. Also known as the Scourge.</comment>
      <text xml:space="preserve" bytes="110">A man-sized cybernetic scorpion with [[nailgun]]s for claws and melee sting attack. Also known as the Scourge.</text>
      <sha1>86dpvj0q7t7621wz8noi45rw068hldy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2957</id>
      <parentid>893</parentid>
      <timestamp>2013-05-04T17:05:10Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <text xml:space="preserve" bytes="711">{{Infobox Monster
| image = monster_hipnotic_scourge.png
| name = Centroid
| manualtext = These armor-plated, techno-advanced scorpion creatures are huge and pissed. They carry dual nail guns for claws to get your attention, but get too close and you'll have a stinger in your face.
| health = 300
| gibthresh = -35
| attacks = nailguns, tail sting attack
| drop = nothing
| 1stappearance = [[hip1m1]]
| gameversion = [[Scourge of Armagon]]
| deathmessage = Player was stung by a Centroid
}}

'''Centroid''' (also known as '''scourge''') is a man-sized cybernetic scorpion with [[nailgun]]s for claws and a highly-damaging tail-sting attack. It employs some unconventional dodging [[AI]].

[[Category:Monsters]]</text>
      <sha1>f71mfyzwpeoar8znamalewji6rhckb3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>CheapHack</title>
    <ns>0</ns>
    <id>151</id>
    <revision>
      <id>238</id>
      <timestamp>2007-11-02T20:12:04Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{Infobox Engine |name=CheapHack |author=[[CheapAlert]] |based-on=[[TomazQuake]] |first-release=? |newest-release=1.5 |website=[http://mods.moddb.com/286/cheaphack/ here] }}  {{Engines}}</comment>
      <text xml:space="preserve" bytes="186">{{Infobox Engine
|name=CheapHack
|author=[[CheapAlert]]
|based-on=[[TomazQuake]]
|first-release=?
|newest-release=1.5
|website=[http://mods.moddb.com/286/cheaphack/ here]
}}

{{Engines}}</text>
      <sha1>cyjy34rnx351n4inlon3y7x95w2pfy8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Checkbottom</title>
    <ns>0</ns>
    <id>870</id>
    <redirect title="checkbottom" />
    <revision>
      <id>2507</id>
      <timestamp>2013-03-29T14:21:58Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Checkbottom]] to [[checkbottom]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="25">#REDIRECT [[checkbottom]]</text>
      <sha1>94sd8w8wl3lbqq8oivawroixr0iulhi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Checkclient</title>
    <ns>0</ns>
    <id>214</id>
    <revision>
      <id>395</id>
      <timestamp>2008-02-23T18:53:36Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  entity checkclient()  Its purpose is to find clients looking at the current monster. It's really only used in AI.qc of the original id code. How it works is it checks one client per frame...</comment>
      <text xml:space="preserve" bytes="591"> entity checkclient()

Its purpose is to find clients looking at the current monster. It's really only used in AI.qc of the original id code. How it works is it checks one client per frame's pvs, and if self is in it, it returns that client to the calling code. It's very low load because of this optimization, but can result in delayed reaction time for the monsters. Remember, it checks if the player can see the monster, not the other way around as many people believe. The more players that there are in the server the longer the cycle takes (it only checks one player per server frame).</text>
      <sha1>if9rarvmomzxtvwgk16qb46zloibfuy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Checkextension</title>
    <ns>0</ns>
    <id>815</id>
    <redirect title="checkextension" />
    <revision>
      <id>2390</id>
      <timestamp>2013-03-28T14:58:25Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Spirit moved page [[Checkextension]] to [[checkextension]]: lowercase</comment>
      <text xml:space="preserve" bytes="28">#REDIRECT [[checkextension]]</text>
      <sha1>9gl11hdjwwhcjtinmy0n07vd2vzg38k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Chthon</title>
    <ns>0</ns>
    <id>145</id>
    <revision>
      <id>227</id>
      <timestamp>2007-11-02T19:46:01Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: * '''Weapon:''' Explosive Lava Balls * '''Health:''' N/A * '''Treasure:''' Nothing  '''Tips:''' The mighty Chthon can't be harmed by conventional weapons. He hurls explosive lava balls tha...</comment>
      <text xml:space="preserve" bytes="1002">* '''Weapon:''' Explosive Lava Balls
* '''Health:''' N/A
* '''Treasure:''' Nothing

'''Tips:''' The mighty Chthon can't be harmed by conventional weapons. He hurls explosive lava balls that explode small and are easy to run away from in Easy difficulty, but if you're playing on Hard, you will have to use some fancy footwork to avoid his path-predicting aim. His lair has a trap set up that you will have to use to kill him. Go up the elevator, and press the two floorplate buttons on either side of Chthon to lower the lightning trap. You will need to lower both to hit him. Then, go back to the third button, in front of him, and step on it send a powerful lightning bolt surging between the two pillars. Hopefully with Chthon in the middle. It will only take one zap to kill him on Easy difficulty, otherwise you'll need to do it three times (each time you zap him the pillars go back up).

'''Entity name:''' [[monster_boss]]

[http://wiki.quakesrc.org/files/boss.gif]

==See Also==
* [[Monsters]]</text>
      <sha1>9sqqyydvuews69w5nqu1q4c4wpjs7na</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>797</id>
      <parentid>227</parentid>
      <timestamp>2008-05-09T16:55:43Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <text xml:space="preserve" bytes="1410">{{Infobox Monster
|monstername=Chthon
|entityname=monster_boss
|monsterhealth=3, 1 on Easy
|monstermelee=N/A
|monstermissile=Lava bomb
|movetype=MOVETYPE_STEP
|monsterspeed=N/A
|monsterclass=Boss
}}
[[Image:Chthon.gif|left]]
Chthon is the boss of the first episode, Dimension of the Doomed. You can find him in [[The House of Chthon]], which is preceded by [[The Door to Chthon]]. Residing in a pool of lava, he emerges once you pick up the episode's [[rune]] and begins his attack via explosive lava balls, which on Hard difficulty, are aimed ahead of your movement.

He is immune to player based weapons (via self.takedamage = DAMAGE_NO;), and can be damaged only by electrical prongs residing in the ceiling of his house, the code for which can be found in boss.qc. Switches are located near both of the prongs, and at the center-end of the level is a switch to activate them, electrocuting Chthon. On Easy skill you only need to do this once, but otherwise it will take three jolts. Upon death he sinks back into the lava, and a bridge forms over the sulfurous mass allowing you access to an exit from the arena.

''&quot;As the corpse of the monstrous entity Chthon sinks back into the lava whence it rose, you grip the Rune of Earth Magic tightly. Now that you have conquered the Dimension of the Doomed, realm of Earth Magic, you are ready to complete your task.&quot;''

==See Also==
* [[Lavaman]]
* [[Monsters]]</text>
      <sha1>c83ajhguajm1udcyvpj1isbekldo93j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>868</id>
      <parentid>797</parentid>
      <timestamp>2008-05-17T18:54:31Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1431">{{Infobox Monster
|monstername=Chthon
|entityname=monster_boss
|monsterhealth=3, 1 on Easy
|monstermelee=N/A
|monstermissile=Lava bomb
|movetype=MOVETYPE_STEP
|monsterspeed=N/A
|monsterclass=Boss
|monsterdrop=nothing
}}
[[Image:Chthon.gif|left]]
Chthon is the boss of the first episode, Dimension of the Doomed. You can find him in [[The House of Chthon]], which is preceded by [[The Door to Chthon]]. Residing in a pool of lava, he emerges once you pick up the episode's [[rune]] and begins his attack via explosive lava balls, which on Hard difficulty, are aimed ahead of your movement.

He is immune to player based weapons (via self.takedamage = DAMAGE_NO;), and can be damaged only by electrical prongs residing in the ceiling of his house, the code for which can be found in boss.qc. Switches are located near both of the prongs, and at the center-end of the level is a switch to activate them, electrocuting Chthon. On Easy skill you only need to do this once, but otherwise it will take three jolts. Upon death he sinks back into the lava, and a bridge forms over the sulfurous mass allowing you access to an exit from the arena.

''&quot;As the corpse of the monstrous entity Chthon sinks back into the lava whence it rose, you grip the Rune of Earth Magic tightly. Now that you have conquered the Dimension of the Doomed, realm of Earth Magic, you are ready to complete your task.&quot;''

==See Also==
* [[Lavaman]]
* [[Monsters]]</text>
      <sha1>86g7r0otbojj7egjpwdap5bykf6zbw8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1230</id>
      <parentid>868</parentid>
      <timestamp>2009-09-25T07:46:25Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="1477">{{Infobox Monster
|name=Chthon
|entity=monster_boss
|model=boss.mdl
|health=3, 1 on Easy
|attacks=Lava bomb
|drop=nothing
}}
[[Image:Chthon.gif|left]]
'''Chthon''' is the end boss of the first episode, Dimension of the Doomed. You can find him in [[The House of Chthon]], which is preceded by [[The Door to Chthon]]. He resides in a pool of lava, emerging once you pick up the episode's [[rune]]. He attacks by hurling explosive lava bombs (which, on [[Hard]] difficulty, are aimed ahead of moving targets). The lava bombs do the same amount of damage as a player's [[Rocket Launcher|rocket]] (which is at least 100 upon a direct hit).

He is immune to player based weapons (via self.takedamage = DAMAGE_NO;), and can be damaged only by electrical prongs residing in the ceiling of his house, the code for which can be found in boss.qc. Switches are located near both of the prongs, and at the center-end of the level is a switch to activate them, electrocuting Chthon. On Easy skill you only need to do this once, but otherwise it will take three jolts. Upon death he sinks back into the lava, and a bridge forms over the sulfurous mass allowing you access to an exit from the arena.

''&quot;As the corpse of the monstrous entity Chthon sinks back into the lava whence it rose, you grip the Rune of Earth Magic tightly. Now that you have conquered the Dimension of the Doomed, realm of Earth Magic, you are ready to complete your task.&quot;''

==See Also==
* [[Lavaman]]

{{Monsters}}</text>
      <sha1>sd23q7w0885qu4ahx8m60t7z9mljzbg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1234</id>
      <parentid>1230</parentid>
      <timestamp>2009-09-25T07:53:13Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1492">{{Infobox Monster
|name=Chthon
|entity=monster_boss
|model=boss.mdl
|health=3, 1 on Easy
|attacks=Lava bomb
|drop=nothing
|registered=no
}}
[[Image:Chthon.gif|left]]
'''Chthon''' is the end boss of the first episode, Dimension of the Doomed. You can find him in [[The House of Chthon]], which is preceded by [[The Door to Chthon]]. He resides in a pool of lava, emerging once you pick up the episode's [[rune]]. He attacks by hurling explosive lava bombs (which, on [[Hard]] difficulty, are aimed ahead of moving targets). The lava bombs do the same amount of damage as a player's [[Rocket Launcher|rocket]] (which is at least 100 upon a direct hit).

He is immune to player based weapons (via self.takedamage = DAMAGE_NO;), and can be damaged only by electrical prongs residing in the ceiling of his house, the code for which can be found in boss.qc. Switches are located near both of the prongs, and at the center-end of the level is a switch to activate them, electrocuting Chthon. On Easy skill you only need to do this once, but otherwise it will take three jolts. Upon death he sinks back into the lava, and a bridge forms over the sulfurous mass allowing you access to an exit from the arena.

''&quot;As the corpse of the monstrous entity Chthon sinks back into the lava whence it rose, you grip the Rune of Earth Magic tightly. Now that you have conquered the Dimension of the Doomed, realm of Earth Magic, you are ready to complete your task.&quot;''

==See Also==
* [[Lavaman]]

{{Monsters}}</text>
      <sha1>fuydjvl9kzx1e7w9bii1p0n7e2g7cd0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1236</id>
      <parentid>1234</parentid>
      <timestamp>2009-09-25T07:55:01Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1500">{{Infobox Monster
|name=Chthon
|entity=monster_boss
|model=boss.mdl
|health=3, 1 on Easy
|attacks=Lava bomb
|drop=nothing
|gameversion=Shareware
}}
[[Image:Chthon.gif|left]]
'''Chthon''' is the end boss of the first episode, Dimension of the Doomed. You can find him in [[The House of Chthon]], which is preceded by [[The Door to Chthon]]. He resides in a pool of lava, emerging once you pick up the episode's [[rune]]. He attacks by hurling explosive lava bombs (which, on [[Hard]] difficulty, are aimed ahead of moving targets). The lava bombs do the same amount of damage as a player's [[Rocket Launcher|rocket]] (which is at least 100 upon a direct hit).

He is immune to player based weapons (via self.takedamage = DAMAGE_NO;), and can be damaged only by electrical prongs residing in the ceiling of his house, the code for which can be found in boss.qc. Switches are located near both of the prongs, and at the center-end of the level is a switch to activate them, electrocuting Chthon. On Easy skill you only need to do this once, but otherwise it will take three jolts. Upon death he sinks back into the lava, and a bridge forms over the sulfurous mass allowing you access to an exit from the arena.

''&quot;As the corpse of the monstrous entity Chthon sinks back into the lava whence it rose, you grip the Rune of Earth Magic tightly. Now that you have conquered the Dimension of the Doomed, realm of Earth Magic, you are ready to complete your task.&quot;''

==See Also==
* [[Lavaman]]

{{Monsters}}</text>
      <sha1>featui04pweilc2wpab2dflxjcvhua0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1378</id>
      <parentid>1236</parentid>
      <timestamp>2009-10-08T23:19:06Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1524">{{Infobox Monster
|name=Chthon
|entity=monster_boss
|model=boss.mdl
|health=3, 1 on Easy
|attacks=Lava bomb
|drop=nothing
|1stappearance=[[e1m7]]
|gameversion=Shareware
}}
[[Image:Chthon.gif|left]]
'''Chthon''' is the end boss of the first episode, Dimension of the Doomed. You can find him in [[The House of Chthon]], which is preceded by [[The Door to Chthon]]. He resides in a pool of lava, emerging once you pick up the episode's [[rune]]. He attacks by hurling explosive lava bombs (which, on [[Hard]] difficulty, are aimed ahead of moving targets). The lava bombs do the same amount of damage as a player's [[Rocket Launcher|rocket]] (which is at least 100 upon a direct hit).

He is immune to player based weapons (via self.takedamage = DAMAGE_NO;), and can be damaged only by electrical prongs residing in the ceiling of his house, the code for which can be found in boss.qc. Switches are located near both of the prongs, and at the center-end of the level is a switch to activate them, electrocuting Chthon. On Easy skill you only need to do this once, but otherwise it will take three jolts. Upon death he sinks back into the lava, and a bridge forms over the sulfurous mass allowing you access to an exit from the arena.

''&quot;As the corpse of the monstrous entity Chthon sinks back into the lava whence it rose, you grip the Rune of Earth Magic tightly. Now that you have conquered the Dimension of the Doomed, realm of Earth Magic, you are ready to complete your task.&quot;''

==See Also==
* [[Lavaman]]

{{Monsters}}</text>
      <sha1>aq4pw5uqny5hnynlulcrsyskk2hde2y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1916</id>
      <parentid>1378</parentid>
      <timestamp>2013-03-25T03:32:38Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>fixed image location and file link</comment>
      <text xml:space="preserve" bytes="1525">[[Image:Chthon.gif|left]]
{{Infobox Monster
|name=Chthon
|entity=monster_boss
|model=boss.mdl
|health=3, 1 on Easy
|attacks=Lava bomb
|drop=nothing
|1stappearance=[[e1m7]]
|gameversion=Shareware
}}

'''Chthon''' is the end boss of the first episode, Dimension of the Doomed. You can find him in [[The House of Chthon]], which is preceded by [[The Door to Chthon]]. He resides in a pool of lava, emerging once you pick up the episode's [[rune]]. He attacks by hurling explosive lava bombs (which, on [[Hard]] difficulty, are aimed ahead of moving targets). The lava bombs do the same amount of damage as a player's [[Rocket Launcher|rocket]] (which is at least 100 upon a direct hit).

He is immune to player based weapons (via self.takedamage = DAMAGE_NO;), and can be damaged only by electrical prongs residing in the ceiling of his house, the code for which can be found in boss.qc. Switches are located near both of the prongs, and at the center-end of the level is a switch to activate them, electrocuting Chthon. On Easy skill you only need to do this once, but otherwise it will take three jolts. Upon death he sinks back into the lava, and a bridge forms over the sulfurous mass allowing you access to an exit from the arena.

''&quot;As the corpse of the monstrous entity Chthon sinks back into the lava whence it rose, you grip the Rune of Earth Magic tightly. Now that you have conquered the Dimension of the Doomed, realm of Earth Magic, you are ready to complete your task.&quot;''

==See Also==
* [[Lavaman]]

{{Monsters}}</text>
      <sha1>qn6q0nq888gacf55szwmwz5kj77ep0a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2831</id>
      <parentid>1916</parentid>
      <timestamp>2013-04-08T13:38:52Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>changed info box</comment>
      <text xml:space="preserve" bytes="1550">{{Infobox Monster
| name = Chthon
| image = monster_quake_cthon.png
| health = 3, 1 on Easy
| attacks = Lava bomb
| drop = nothing
| 1stappearance = [[e1m7]]
| gameversion = Shareware
| deathmessage = None (Player died)
}}

'''Chthon''' is the end boss of the first episode, Dimension of the Doomed. You can find him in [[The House of Chthon]], which is preceded by [[The Door to Chthon]]. He resides in a pool of lava, emerging once you pick up the episode's [[rune]]. He attacks by hurling explosive lava bombs (which, on [[Hard]] difficulty, are aimed ahead of moving targets). The lava bombs do the same amount of damage as a player's [[Rocket Launcher|rocket]] (which is at least 100 upon a direct hit).

He is immune to player based weapons (via self.takedamage = DAMAGE_NO;), and can be damaged only by electrical prongs residing in the ceiling of his house, the code for which can be found in boss.qc. Switches are located near both of the prongs, and at the center-end of the level is a switch to activate them, electrocuting Chthon. On Easy skill you only need to do this once, but otherwise it will take three jolts. Upon death he sinks back into the lava, and a bridge forms over the sulfurous mass allowing you access to an exit from the arena.

''&quot;As the corpse of the monstrous entity Chthon sinks back into the lava whence it rose, you grip the Rune of Earth Magic tightly. Now that you have conquered the Dimension of the Doomed, realm of Earth Magic, you are ready to complete your task.&quot;''

==See Also==
* [[Lavaman]]

{{Monsters}}</text>
      <sha1>hp1kr1gqvw70exgjsfsasz49ueq5d5r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2848</id>
      <parentid>2831</parentid>
      <timestamp>2013-04-08T14:08:05Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>removed manual text and changed health to n/a</comment>
      <text xml:space="preserve" bytes="1557">{{Infobox Monster
| name = Chthon
| image = monster_quake_cthon.png
| manualtext = 
| health = N/A
| attacks = Lava bomb
| drop = nothing
| 1stappearance = [[e1m7]]
| gameversion = Shareware
| deathmessage = None (Player died)
}}

'''Chthon''' is the end boss of the first episode, Dimension of the Doomed. You can find him in [[The House of Chthon]], which is preceded by [[The Door to Chthon]]. He resides in a pool of lava, emerging once you pick up the episode's [[rune]]. He attacks by hurling explosive lava bombs (which, on [[Hard]] difficulty, are aimed ahead of moving targets). The lava bombs do the same amount of damage as a player's [[Rocket Launcher|rocket]] (which is at least 100 upon a direct hit).

He is immune to player based weapons (via self.takedamage = DAMAGE_NO;), and can be damaged only by electrical prongs residing in the ceiling of his house, the code for which can be found in boss.qc. Switches are located near both of the prongs, and at the center-end of the level is a switch to activate them, electrocuting Chthon. On Easy skill you only need to do this once, but otherwise it will take three jolts. Upon death he sinks back into the lava, and a bridge forms over the sulfurous mass allowing you access to an exit from the arena.

''&quot;As the corpse of the monstrous entity Chthon sinks back into the lava whence it rose, you grip the Rune of Earth Magic tightly. Now that you have conquered the Dimension of the Doomed, realm of Earth Magic, you are ready to complete your task.&quot;''

==See Also==
* [[Lavaman]]

{{Monsters}}</text>
      <sha1>ab53pamm5kcaqfebs0qykls3dua431o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2856</id>
      <parentid>2848</parentid>
      <timestamp>2013-04-08T14:56:13Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>removed manualtext hack</comment>
      <text xml:space="preserve" bytes="1541">{{Infobox Monster
| name = Chthon
| image = monster_quake_cthon.png
| health = N/A
| attacks = Lava bomb
| drop = nothing
| 1stappearance = [[e1m7]]
| gameversion = Shareware
| deathmessage = None (Player died)
}}

'''Chthon''' is the end boss of the first episode, Dimension of the Doomed. You can find him in [[The House of Chthon]], which is preceded by [[The Door to Chthon]]. He resides in a pool of lava, emerging once you pick up the episode's [[rune]]. He attacks by hurling explosive lava bombs (which, on [[Hard]] difficulty, are aimed ahead of moving targets). The lava bombs do the same amount of damage as a player's [[Rocket Launcher|rocket]] (which is at least 100 upon a direct hit).

He is immune to player based weapons (via self.takedamage = DAMAGE_NO;), and can be damaged only by electrical prongs residing in the ceiling of his house, the code for which can be found in boss.qc. Switches are located near both of the prongs, and at the center-end of the level is a switch to activate them, electrocuting Chthon. On Easy skill you only need to do this once, but otherwise it will take three jolts. Upon death he sinks back into the lava, and a bridge forms over the sulfurous mass allowing you access to an exit from the arena.

''&quot;As the corpse of the monstrous entity Chthon sinks back into the lava whence it rose, you grip the Rune of Earth Magic tightly. Now that you have conquered the Dimension of the Doomed, realm of Earth Magic, you are ready to complete your task.&quot;''

==See Also==
* [[Lavaman]]

{{Monsters}}</text>
      <sha1>o3ipp2cxz2o11znh6vyqpi23ccrnq5x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2882</id>
      <parentid>2856</parentid>
      <timestamp>2013-04-09T04:47:26Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>added simple entity info and tactics</comment>
      <text xml:space="preserve" bytes="4297">{{Infobox Monster
| name = Chthon
| image = monster_quake_cthon.png
| health = N/A
| attacks = Lava bomb
| drop = nothing
| 1stappearance = [[e1m7]]
| gameversion = Shareware
| deathmessage = None (Player died)
}}

'''Chthon''' is the end boss of the first episode, Dimension of the Doomed. You can find him in [[The House of Chthon]], which is preceded by [[The Door to Chthon]]. He resides in a pool of lava, emerging once you pick up the episode's [[rune]]. He attacks by hurling explosive lava bombs (which, on [[Hard]] difficulty, are aimed ahead of moving targets). The lava bombs do the same amount of damage as a player's [[Rocket Launcher|rocket]] (which is at least 100 upon a direct hit).

He is immune to player based weapons (via self.takedamage = DAMAGE_NO;), and can be damaged only by electrical prongs residing in the ceiling of his house, the code for which can be found in boss.qc. Switches are located near both of the prongs, and at the center-end of the level is a switch to activate them, electrocuting Chthon. On Easy skill you only need to do this once, but otherwise it will take three jolts. Upon death he sinks back into the lava, and a bridge forms over the sulfurous mass allowing you access to an exit from the arena.

''&quot;As the corpse of the monstrous entity Chthon sinks back into the lava whence it rose, you grip the Rune of Earth Magic tightly. Now that you have conquered the Dimension of the Doomed, realm of Earth Magic, you are ready to complete your task.&quot;''

==Tactics==
Cthon cannot be killed by regular weapons and must be killed by the lightning trap in e1m7 - the level in which he appears. To use the trap, the player must first press the buttons on the top level of the arena to lower the lightning rods, then press the button in the centre to fire lightning at Cthon. On Easy skill, a single hit is enough to kill Cthon, but on all other skill levels, three hits are required, which requires repeating the entire sequence of button presses for each subsequent attack.

Cthon's attacks are very easy to avoid on Easy and Normal skill, as he throws lava bombs directly at the player, so as long as the player keeps moving, he is unlikely to be hit. Onb Hard and Nightmare skill, however, the bombs are thrown in front of the player, so running without being careful is likely to end in the player's death. To successfully avoid the lava bombs on higher skill levels requires much more care.

&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_boss
| commonname = [[Cthon]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 256 x 256 x 280
| quakec = [[boss.qc]]
| precaches =
progs/boss.mdl&lt;br&gt;
progs/lavaball.mdl&lt;br&gt;
weapons/rocket1i.wav&lt;br&gt;
boss1/out1.wav&lt;br&gt;
boss1/sight1.wav&lt;br&gt;
misc/power.wav&lt;br&gt;
boss1/throw.wav&lt;br&gt;
boss1/pain.wav&lt;br&gt;
boss1/death.wav
}}

==Entity information==

'''monster_boss''' is the [[Entity|entity]] for placing '''Cthon''' in a level.

===Usage===

===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of Cthon. When triggered, Cthon will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when Cthon dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when Cthon dies.
|}

====Spawnflags====
monster_boss does not support the ambush spawnflag that is supported by regular monsters. Instead, it must be triggered for Cthon to appear at all.

It does, however, support the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = Cthon
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model(&quot;:progs/boss.mdl&quot;)
    = monster_boss : &quot;Cthon&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_boss (1 0 0) (-128 -128 -24) (128 128 256) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>rix59836eauuuk29f99m1i713e62fff</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2883</id>
      <parentid>2882</parentid>
      <timestamp>2013-04-09T04:53:36Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>/* DEF Definition */  removed ambush flag</comment>
      <text xml:space="preserve" bytes="4290">{{Infobox Monster
| name = Chthon
| image = monster_quake_cthon.png
| health = N/A
| attacks = Lava bomb
| drop = nothing
| 1stappearance = [[e1m7]]
| gameversion = Shareware
| deathmessage = None (Player died)
}}

'''Chthon''' is the end boss of the first episode, Dimension of the Doomed. You can find him in [[The House of Chthon]], which is preceded by [[The Door to Chthon]]. He resides in a pool of lava, emerging once you pick up the episode's [[rune]]. He attacks by hurling explosive lava bombs (which, on [[Hard]] difficulty, are aimed ahead of moving targets). The lava bombs do the same amount of damage as a player's [[Rocket Launcher|rocket]] (which is at least 100 upon a direct hit).

He is immune to player based weapons (via self.takedamage = DAMAGE_NO;), and can be damaged only by electrical prongs residing in the ceiling of his house, the code for which can be found in boss.qc. Switches are located near both of the prongs, and at the center-end of the level is a switch to activate them, electrocuting Chthon. On Easy skill you only need to do this once, but otherwise it will take three jolts. Upon death he sinks back into the lava, and a bridge forms over the sulfurous mass allowing you access to an exit from the arena.

''&quot;As the corpse of the monstrous entity Chthon sinks back into the lava whence it rose, you grip the Rune of Earth Magic tightly. Now that you have conquered the Dimension of the Doomed, realm of Earth Magic, you are ready to complete your task.&quot;''

==Tactics==
Cthon cannot be killed by regular weapons and must be killed by the lightning trap in e1m7 - the level in which he appears. To use the trap, the player must first press the buttons on the top level of the arena to lower the lightning rods, then press the button in the centre to fire lightning at Cthon. On Easy skill, a single hit is enough to kill Cthon, but on all other skill levels, three hits are required, which requires repeating the entire sequence of button presses for each subsequent attack.

Cthon's attacks are very easy to avoid on Easy and Normal skill, as he throws lava bombs directly at the player, so as long as the player keeps moving, he is unlikely to be hit. Onb Hard and Nightmare skill, however, the bombs are thrown in front of the player, so running without being careful is likely to end in the player's death. To successfully avoid the lava bombs on higher skill levels requires much more care.

&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_boss
| commonname = [[Cthon]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 256 x 256 x 280
| quakec = [[boss.qc]]
| precaches =
progs/boss.mdl&lt;br&gt;
progs/lavaball.mdl&lt;br&gt;
weapons/rocket1i.wav&lt;br&gt;
boss1/out1.wav&lt;br&gt;
boss1/sight1.wav&lt;br&gt;
misc/power.wav&lt;br&gt;
boss1/throw.wav&lt;br&gt;
boss1/pain.wav&lt;br&gt;
boss1/death.wav
}}

==Entity information==

'''monster_boss''' is the [[Entity|entity]] for placing '''Cthon''' in a level.

===Usage===

===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of Cthon. When triggered, Cthon will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when Cthon dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when Cthon dies.
|}

====Spawnflags====
monster_boss does not support the ambush spawnflag that is supported by regular monsters. Instead, it must be triggered for Cthon to appear at all.

It does, however, support the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = Cthon
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model(&quot;:progs/boss.mdl&quot;)
    = monster_boss : &quot;Cthon&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_boss (1 0 0) (-128 -128 -24) (128 128 256)
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>ot1f5q8vl1cejh0enhc855tv80vc80y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2902</id>
      <parentid>2883</parentid>
      <timestamp>2013-04-09T11:57:17Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>Cthon -&gt; Chthon (corrected spelling)</comment>
      <text xml:space="preserve" bytes="4304">{{Infobox Monster
| name = Chthon
| image = monster_quake_chthon.png
| health = N/A
| attacks = Lava bomb
| drop = nothing
| 1stappearance = [[e1m7]]
| gameversion = Shareware
| deathmessage = None (Player died)
}}

'''Chthon''' is the end boss of the first episode, Dimension of the Doomed. You can find him in [[The House of Chthon]], which is preceded by [[The Door to Chthon]]. He resides in a pool of lava, emerging once you pick up the episode's [[rune]]. He attacks by hurling explosive lava bombs (which, on [[Hard]] difficulty, are aimed ahead of moving targets). The lava bombs do the same amount of damage as a player's [[Rocket Launcher|rocket]] (which is at least 100 upon a direct hit).

He is immune to player based weapons (via self.takedamage = DAMAGE_NO;), and can be damaged only by electrical prongs residing in the ceiling of his house, the code for which can be found in boss.qc. Switches are located near both of the prongs, and at the center-end of the level is a switch to activate them, electrocuting Chthon. On Easy skill you only need to do this once, but otherwise it will take three jolts. Upon death he sinks back into the lava, and a bridge forms over the sulfurous mass allowing you access to an exit from the arena.

''&quot;As the corpse of the monstrous entity Chthon sinks back into the lava whence it rose, you grip the Rune of Earth Magic tightly. Now that you have conquered the Dimension of the Doomed, realm of Earth Magic, you are ready to complete your task.&quot;''

==Tactics==
Chthon cannot be killed by regular weapons and must be killed by the lightning trap in e1m7 - the level in which he appears. To use the trap, the player must first press the buttons on the top level of the arena to lower the lightning rods, then press the button in the centre to fire lightning at Chthon. On Easy skill, a single hit is enough to kill Chthon, but on all other skill levels, three hits are required, which requires repeating the entire sequence of button presses for each subsequent attack.

Chthon's attacks are very easy to avoid on Easy and Normal skill, as he throws lava bombs directly at the player, so as long as the player keeps moving, he is unlikely to be hit. Onb Hard and Nightmare skill, however, the bombs are thrown in front of the player, so running without being careful is likely to end in the player's death. To successfully avoid the lava bombs on higher skill levels requires much more care.

&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_boss
| commonname = [[Chthon]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 256 x 256 x 280
| quakec = [[boss.qc]]
| precaches =
progs/boss.mdl&lt;br&gt;
progs/lavaball.mdl&lt;br&gt;
weapons/rocket1i.wav&lt;br&gt;
boss1/out1.wav&lt;br&gt;
boss1/sight1.wav&lt;br&gt;
misc/power.wav&lt;br&gt;
boss1/throw.wav&lt;br&gt;
boss1/pain.wav&lt;br&gt;
boss1/death.wav
}}

==Entity information==

'''monster_boss''' is the [[Entity|entity]] for placing '''Chthon''' in a level.

===Usage===

===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of Chthon. When triggered, Chthon will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when Chthon dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when Chthon dies.
|}

====Spawnflags====
monster_boss does not support the ambush spawnflag that is supported by regular monsters. Instead, it must be triggered for Chthon to appear at all.

It does, however, support the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = Chthon
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model(&quot;:progs/boss.mdl&quot;)
    = monster_boss : &quot;Chthon&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_boss (1 0 0) (-128 -128 -24) (128 128 256)
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>gksa7m9b8u01oz647x5x16qpp34jcdx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2941</id>
      <parentid>2902</parentid>
      <timestamp>2013-05-04T15:37:50Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <minor/>
      <comment>gibs</comment>
      <text xml:space="preserve" bytes="4322">{{Infobox Monster
| name = Chthon
| image = monster_quake_chthon.png
| health = N/A
| gibthresh = N/A
| attacks = Lava bomb
| drop = nothing
| 1stappearance = [[e1m7]]
| gameversion = Shareware
| deathmessage = None (Player died)
}}

'''Chthon''' is the end boss of the first episode, Dimension of the Doomed. You can find him in [[The House of Chthon]], which is preceded by [[The Door to Chthon]]. He resides in a pool of lava, emerging once you pick up the episode's [[rune]]. He attacks by hurling explosive lava bombs (which, on [[Hard]] difficulty, are aimed ahead of moving targets). The lava bombs do the same amount of damage as a player's [[Rocket Launcher|rocket]] (which is at least 100 upon a direct hit).

He is immune to player based weapons (via self.takedamage = DAMAGE_NO;), and can be damaged only by electrical prongs residing in the ceiling of his house, the code for which can be found in boss.qc. Switches are located near both of the prongs, and at the center-end of the level is a switch to activate them, electrocuting Chthon. On Easy skill you only need to do this once, but otherwise it will take three jolts. Upon death he sinks back into the lava, and a bridge forms over the sulfurous mass allowing you access to an exit from the arena.

''&quot;As the corpse of the monstrous entity Chthon sinks back into the lava whence it rose, you grip the Rune of Earth Magic tightly. Now that you have conquered the Dimension of the Doomed, realm of Earth Magic, you are ready to complete your task.&quot;''

==Tactics==
Chthon cannot be killed by regular weapons and must be killed by the lightning trap in e1m7 - the level in which he appears. To use the trap, the player must first press the buttons on the top level of the arena to lower the lightning rods, then press the button in the centre to fire lightning at Chthon. On Easy skill, a single hit is enough to kill Chthon, but on all other skill levels, three hits are required, which requires repeating the entire sequence of button presses for each subsequent attack.

Chthon's attacks are very easy to avoid on Easy and Normal skill, as he throws lava bombs directly at the player, so as long as the player keeps moving, he is unlikely to be hit. Onb Hard and Nightmare skill, however, the bombs are thrown in front of the player, so running without being careful is likely to end in the player's death. To successfully avoid the lava bombs on higher skill levels requires much more care.

&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_boss
| commonname = [[Chthon]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 256 x 256 x 280
| quakec = [[boss.qc]]
| precaches =
progs/boss.mdl&lt;br&gt;
progs/lavaball.mdl&lt;br&gt;
weapons/rocket1i.wav&lt;br&gt;
boss1/out1.wav&lt;br&gt;
boss1/sight1.wav&lt;br&gt;
misc/power.wav&lt;br&gt;
boss1/throw.wav&lt;br&gt;
boss1/pain.wav&lt;br&gt;
boss1/death.wav
}}

==Entity information==

'''monster_boss''' is the [[Entity|entity]] for placing '''Chthon''' in a level.

===Usage===

===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of Chthon. When triggered, Chthon will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when Chthon dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when Chthon dies.
|}

====Spawnflags====
monster_boss does not support the ambush spawnflag that is supported by regular monsters. Instead, it must be triggered for Chthon to appear at all.

It does, however, support the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = Chthon
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model(&quot;:progs/boss.mdl&quot;)
    = monster_boss : &quot;Chthon&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_boss (1 0 0) (-128 -128 -24) (128 128 256)
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>t0gu4dqfuva5vfwzgq4uudky7zb3bxm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Cl backspeed</title>
    <ns>0</ns>
    <id>124</id>
    <revision>
      <id>198</id>
      <timestamp>2007-10-31T00:42:30Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=cl_backspeed |default-value=400 |saved-to-config=no }} cl_backspeed is the base speed you move when pressing [[+back]]. The speed ...</comment>
      <text xml:space="preserve" bytes="580">{{lowercase-underscores}}{{Infobox Console variable
|name=cl_backspeed
|default-value=400
|saved-to-config=no
}}
cl_backspeed is the base speed you move when pressing [[+back]]. The speed is multiplied by [[cl_movespeedkey]] if the [[+speed]] button is activated. Note that the [[Quake]] menu option &quot;Always Run&quot; doesn't actually always turn on [[+speed]] but instead simply attempts to raise the [[cl_backspeed]], [[cl_forwardspeed]], and [[cl_sidespeed]]. It is recommended that you do not use &quot;Always Run&quot; and instead add [[+speed]] to your autoexec.cfg.

{{Console variables}}</text>
      <sha1>0iu1417s7eddv5z32qh21o7xuyw9g60</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>199</id>
      <parentid>198</parentid>
      <timestamp>2007-10-31T00:42:39Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="576">{{lowercase-underscores}}{{Infobox Console variable
|name=cl_backspeed
|default-value=400
|saved-to-config=no
}}
cl_backspeed is the base speed you move when pressing [[+back]]. The speed is multiplied by [[cl_movespeedkey]] if the [[+speed]] button is activated. Note that the [[Quake]] menu option &quot;Always Run&quot; doesn't actually always turn on [[+speed]] but instead simply attempts to raise the cl_backspeed, [[cl_forwardspeed]], and [[cl_sidespeed]]. It is recommended that you do not use &quot;Always Run&quot; and instead add [[+speed]] to your autoexec.cfg.

{{Console variables}}</text>
      <sha1>t47ahnsjyispxyox3cklong6f66o3xj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Cl bob</title>
    <ns>0</ns>
    <id>814</id>
    <redirect title="cl bob" />
    <revision>
      <id>2388</id>
      <timestamp>2013-03-28T14:58:15Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Spirit moved page [[Cl bob]] to [[cl bob]]: lowercase</comment>
      <text xml:space="preserve" bytes="20">#REDIRECT [[cl bob]]</text>
      <sha1>mpjbwoyv7irh3yffaj6wctw903we1gy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Cl color</title>
    <ns>0</ns>
    <id>74</id>
    <revision>
      <id>117</id>
      <timestamp>2007-10-30T21:52:55Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{Infobox Console variable |name=_cl_color |default-value=0 |saved-to-config=yes }}  This cvar holds the client's colors, as set by the [[color]] command. It is sent to the server on signo...</comment>
      <text xml:space="preserve" bytes="560">{{Infobox Console variable
|name=_cl_color
|default-value=0
|saved-to-config=yes
}}

This cvar holds the client's colors, as set by the [[color]] command. It is sent to the server on signon, and should never be set directly by the user. Use the [[color]] command instead. '''_cl_color''' is actually the combined value of both the pants and shirt color, using an equations similar to this:

color [[=]] shirtcolor [[Multiplication|*]] 16 [[+]] pantscolor;

This combined color value is the same used for the [[SVC_UPDATECOLORS]] message.

{{Console variables}}</text>
      <sha1>ckntdxmnrwz7imb5mnxhn148qu6ub2t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>119</id>
      <parentid>117</parentid>
      <timestamp>2007-10-30T21:53:34Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="597">{{underscore-lowercase-underscores}}
{{Infobox Console variable
|name=_cl_color
|default-value=0
|saved-to-config=yes
}}

This cvar holds the client's colors, as set by the [[color]] command. It is sent to the server on signon, and should never be set directly by the user. Use the [[color]] command instead. '''_cl_color''' is actually the combined value of both the pants and shirt color, using an equations similar to this:

color [[=]] shirtcolor [[Multiplication|*]] 16 [[+]] pantscolor;

This combined color value is the same used for the [[SVC_UPDATECOLORS]] message.

{{Console variables}}</text>
      <sha1>hk0wcx2wtz0js9mshwnmpptlbyprm4j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>120</id>
      <parentid>119</parentid>
      <timestamp>2007-10-30T21:53:41Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="596">{{underscore-lowercase-underscores}}
{{Infobox Console variable
|name=_cl_color
|default-value=0
|saved-to-config=yes
}}
This cvar holds the client's colors, as set by the [[color]] command. It is sent to the server on signon, and should never be set directly by the user. Use the [[color]] command instead. '''_cl_color''' is actually the combined value of both the pants and shirt color, using an equations similar to this:

color [[=]] shirtcolor [[Multiplication|*]] 16 [[+]] pantscolor;

This combined color value is the same used for the [[SVC_UPDATECOLORS]] message.

{{Console variables}}</text>
      <sha1>l15jd5yz9nmcxfcx8djr0opy00s9l27</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>121</id>
      <parentid>120</parentid>
      <timestamp>2007-10-30T21:53:57Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="595">{{underscore-lowercase-underscores}}{{Infobox Console variable
|name=_cl_color
|default-value=0
|saved-to-config=yes
}}
This cvar holds the client's colors, as set by the [[color]] command. It is sent to the server on signon, and should never be set directly by the user. Use the [[color]] command instead. '''_cl_color''' is actually the combined value of both the pants and shirt color, using an equations similar to this:

color [[=]] shirtcolor [[Multiplication|*]] 16 [[+]] pantscolor;

This combined color value is the same used for the [[SVC_UPDATECOLORS]] message.

{{Console variables}}</text>
      <sha1>4ohucoe0iectit5c20s9clrquatajo7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Cl name</title>
    <ns>0</ns>
    <id>76</id>
    <revision>
      <id>125</id>
      <timestamp>2007-10-30T22:00:56Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{underscore-lowercase-underscores}}{{Infobox Console variable |name=_cl_name |default-value=&quot;player&quot; |saved-to-config=yes }} This is storage space for the [[name]] command, and contains t...</comment>
      <text xml:space="preserve" bytes="391">{{underscore-lowercase-underscores}}{{Infobox Console variable
|name=_cl_name
|default-value=&quot;player&quot;
|saved-to-config=yes
}}
This is storage space for the [[name]] command, and contains the last set client name. Changing this cvar directly is not recommended, as it will not send an update to the server and everyone else will not see your new name until you reconnect or the level changes.</text>
      <sha1>nd6861q4x0uwid11sx08qlj6chxfoy3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>126</id>
      <parentid>125</parentid>
      <timestamp>2007-10-30T22:01:05Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="414">{{underscore-lowercase-underscores}}{{Infobox Console variable
|name=_cl_name
|default-value=&quot;player&quot;
|saved-to-config=yes
}}
This is storage space for the [[name]] command, and contains the last set client name. Changing this cvar directly is not recommended, as it will not send an update to the server and everyone else will not see your new name until you reconnect or the level changes.

{{Console variables}}</text>
      <sha1>gzo66w1eg1dbihwpa05hw2s6blg565g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>139</id>
      <parentid>126</parentid>
      <timestamp>2007-10-30T22:36:03Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="412">{{underscore-lowercase-underscores}}{{Infobox Console variable
|name=_cl_name
|default-value=player
|saved-to-config=yes
}}
This is storage space for the [[name]] command, and contains the last set client name. Changing this cvar directly is not recommended, as it will not send an update to the server and everyone else will not see your new name until you reconnect or the level changes.

{{Console variables}}</text>
      <sha1>05nn48bfz7v9ekyawpzjjkp1t8ulk9j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Clientcommand</title>
    <ns>0</ns>
    <id>816</id>
    <redirect title="clientcommand" />
    <revision>
      <id>2392</id>
      <timestamp>2013-03-28T14:58:34Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Spirit moved page [[Clientcommand]] to [[clientcommand]]: lowercase</comment>
      <text xml:space="preserve" bytes="27">#REDIRECT [[clientcommand]]</text>
      <sha1>6kkau2h9wohc710vh30pnn7vo9uis7h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Coding QuakeC</title>
    <ns>0</ns>
    <id>476</id>
    <redirect title="Modding" />
    <revision>
      <id>951</id>
      <timestamp>2008-11-14T07:52:26Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>[[Coding QuakeC]] moved to [[Modding]]</comment>
      <text xml:space="preserve" bytes="21">#REDIRECT [[Modding]]</text>
      <sha1>h38slo5jzvfxv4mkb7wv8bx3mz27zsb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Command line parameters</title>
    <ns>0</ns>
    <id>44</id>
    <revision>
      <id>53</id>
      <timestamp>2007-10-30T18:08:46Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: * [[+command|+]] * [[-allow360]] * [[-basedir]] * [[-cachedir]] * [[-condebug]] * [[-conheight]] * [[-conwidth]] * [[-current]] * [[-dedicated]] * [[-dibonly]] * [[-dinput]] * [[-force]] *...</comment>
      <text xml:space="preserve" bytes="1023">* [[+command|+]]
* [[-allow360]]
* [[-basedir]]
* [[-cachedir]]
* [[-condebug]]
* [[-conheight]]
* [[-conwidth]]
* [[-current]]
* [[-dedicated]]
* [[-dibonly]]
* [[-dinput]]
* [[-force]]
* [[-fullsbar]]
* [[-game]]
* [[-heapsize]]
* [[-height]]
* [[-hipnotic]]
* [[-ip]]
* [[-ipxport]]
* [[-listen]]
* [[-minmemory]]
* [[-mode]]
* [[-noadjustaspect]]
* [[-noautostretch]]
* [[-nocdaudio]]
* [[-nodd]]
* [[-noddraw]]
* [[-nodirectdraw]]
* [[-noforcemaccel]]
* [[-noforcemparms]]
* [[-noforcemspd]]
* [[-noforcevga]]
* [[-nofulldib]]
* [[-noipx]]
* [[-nojoy]]
* [[-nolan]]
* [[-nomouse]]
* [[-nosound]]
* [[-notriplebuf]]
* [[-noudp]]
* [[-novbeaf]]
* [[-novesa]]
* [[-nowd]]
* [[-nowindirect]]
* [[-particles]]
* [[-path]]
* [[-playback]]
* [[-port]]
* [[-primarysound]]
* [[-proghack]]
* [[-record]]
* [[-resetwinpos]]
* [[-rogue]]
* [[-safe]]
* [[-simsound]]
* [[-snoforceformat]]
* [[-starttime]]
* [[-startwindowed]]
* [[-stdvid]]
* [[-surfcachesize]]
* [[-udpport]]
* [[-wavonly]]
* [[-width]]
* [[-window]]
* [[-zone]]</text>
      <sha1>nk65irryk3zao522l7ql6xxmz9n9z3f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1027</id>
      <parentid>53</parentid>
      <timestamp>2009-06-10T10:05:03Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>added -bpp</comment>
      <text xml:space="preserve" bytes="1034">* [[+command|+]]
* [[-allow360]]
* [[-basedir]]
* [[-bpp]]
* [[-cachedir]]
* [[-condebug]]
* [[-conheight]]
* [[-conwidth]]
* [[-current]]
* [[-dedicated]]
* [[-dibonly]]
* [[-dinput]]
* [[-force]]
* [[-fullsbar]]
* [[-game]]
* [[-heapsize]]
* [[-height]]
* [[-hipnotic]]
* [[-ip]]
* [[-ipxport]]
* [[-listen]]
* [[-minmemory]]
* [[-mode]]
* [[-noadjustaspect]]
* [[-noautostretch]]
* [[-nocdaudio]]
* [[-nodd]]
* [[-noddraw]]
* [[-nodirectdraw]]
* [[-noforcemaccel]]
* [[-noforcemparms]]
* [[-noforcemspd]]
* [[-noforcevga]]
* [[-nofulldib]]
* [[-noipx]]
* [[-nojoy]]
* [[-nolan]]
* [[-nomouse]]
* [[-nosound]]
* [[-notriplebuf]]
* [[-noudp]]
* [[-novbeaf]]
* [[-novesa]]
* [[-nowd]]
* [[-nowindirect]]
* [[-particles]]
* [[-path]]
* [[-playback]]
* [[-port]]
* [[-primarysound]]
* [[-proghack]]
* [[-record]]
* [[-resetwinpos]]
* [[-rogue]]
* [[-safe]]
* [[-simsound]]
* [[-snoforceformat]]
* [[-starttime]]
* [[-startwindowed]]
* [[-stdvid]]
* [[-surfcachesize]]
* [[-udpport]]
* [[-wavonly]]
* [[-width]]
* [[-window]]
* [[-zone]]</text>
      <sha1>khcxjuuchenxrmtk2oxplpkoxfzqxkg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Compiling QuakeC</title>
    <ns>0</ns>
    <id>1029</id>
    <revision>
      <id>2932</id>
      <timestamp>2013-04-22T21:01:19Z</timestamp>
      <contributor>
        <username>Baker5</username>
        <id>30</id>
      </contributor>
      <comment>Created page with &quot;Windows example:  Unzip [http://www.quake-1.com/files/sourcecodes/kits/progs106.zip progs106.zip] source code to a folder.  Place [http://sourceforge.net/projects/fteqw/files/...&quot;</comment>
      <text xml:space="preserve" bytes="366">Windows example:

Unzip [http://www.quake-1.com/files/sourcecodes/kits/progs106.zip progs106.zip] source code to a folder.

Place [http://sourceforge.net/projects/fteqw/files/QCC%20GUI/V1.00/fteqccgui-v100-win32.zip/download fteqccgui.exe] in same folder.

Double click fteqccgui.exe.  It will compile a progs.dat usually located one folder above source code folder.</text>
      <sha1>gvr7d2dfbkdl4l725bm7z6b6rgj3z34</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Config Files</title>
    <ns>0</ns>
    <id>585</id>
    <redirect title="Config files" />
    <revision>
      <id>1541</id>
      <timestamp>2010-01-12T10:11:24Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>[[Config Files]] moved to [[Config files]]</comment>
      <text xml:space="preserve" bytes="26">#REDIRECT [[Config files]]</text>
      <sha1>cykfkfqblacs9wo5523xi2wi1xbncdn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Config com baud</title>
    <ns>0</ns>
    <id>871</id>
    <redirect title="config com baud" />
    <revision>
      <id>2509</id>
      <timestamp>2013-03-29T14:21:58Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Config com baud]] to [[config com baud]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="29">#REDIRECT [[config com baud]]</text>
      <sha1>3a90wl8136kbp4b7ifvwha0ptxz5jdm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Config com irq</title>
    <ns>0</ns>
    <id>817</id>
    <redirect title="config com irq" />
    <revision>
      <id>2394</id>
      <timestamp>2013-03-28T14:58:50Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Spirit moved page [[Config com irq]] to [[config com irq]]: lowercase</comment>
      <text xml:space="preserve" bytes="28">#REDIRECT [[config com irq]]</text>
      <sha1>jnpbnk0lwb42ptrzdtykuaw2q0nn52j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Config com modem</title>
    <ns>0</ns>
    <id>79</id>
    <revision>
      <id>130</id>
      <timestamp>2007-10-30T22:04:17Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{underscore-lowercase-underscores}}{{Infobox Console variable |name=_config_com_modem |default-value=1 |saved-to-config=yes }} Versions: NormalQuake  This variable determines if the seria...</comment>
      <text xml:space="preserve" bytes="542">{{underscore-lowercase-underscores}}{{Infobox Console variable
|name=_config_com_modem
|default-value=1
|saved-to-config=yes
}}
Versions: NormalQuake

This variable determines if the serial connection is a real modem that requires [[_config_modem_hangup|hangup]], [[_config_modem_init|init]] (1) or if it is a mere null modem cable (0). Serial communications are not supported in [[WinQuake]] or [GLQuake] and this variable remains unused in those ports, however Linux and DOS ports are capable of serial communication.

{{Console variables}}</text>
      <sha1>k32ntctdhubiz0tkg2r6ssknocc1y2n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>131</id>
      <parentid>130</parentid>
      <timestamp>2007-10-30T22:04:28Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="544">{{underscore-lowercase-underscores}}{{Infobox Console variable
|name=_config_com_modem
|default-value=1
|saved-to-config=yes
}}
Versions: NormalQuake

This variable determines if the serial connection is a real modem that requires [[_config_modem_hangup|hangup]], [[_config_modem_init|init]] (1) or if it is a mere null modem cable (0). Serial communications are not supported in [[WinQuake]] or [[GLQuake]] and this variable remains unused in those ports, however Linux and DOS ports are capable of serial communication.

{{Console variables}}</text>
      <sha1>nfs0nqoy64f9khxgvr424rpmd2wjrp9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Config com port</title>
    <ns>0</ns>
    <id>80</id>
    <revision>
      <id>132</id>
      <timestamp>2007-10-30T22:07:02Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{underscore-lowercase-underscores}}{{Infobox Console variable |name=_config_com_port |default-value=0x3f8 |saved-to-config=yes }} Versions: NormalQuake  This variable specifies which hard...</comment>
      <text xml:space="preserve" bytes="797">{{underscore-lowercase-underscores}}{{Infobox Console variable
|name=_config_com_port
|default-value=0x3f8
|saved-to-config=yes
}}
Versions: NormalQuake

This variable specifies which hardware port to use when talking to the com port being used for serial communication. The default setting (hex 3f8) represents COM1. The addresses for other COM ports are:

* &lt;tt&gt;0x2f8&lt;/tt&gt;: COM2
* &lt;tt&gt;0x3E8&lt;/tt&gt;: COM3
* &lt;tt&gt;0x2E8&lt;/tt&gt;: COM4
* &lt;tt&gt;0x2F0&lt;/tt&gt;: COM5 (''note that COM5 and above are not supported by all systems'')
* &lt;tt&gt;0x3E0&lt;/tt&gt;: COM6
* &lt;tt&gt;0x2E0&lt;/tt&gt;: COM7
* &lt;tt&gt;0x260&lt;/tt&gt;: COM8

Serial communications are not available in [[WinQuake]] or [[GLQuake]] and this variable remains unused in those ports, however Linux and DOS ports are still capable of serial communication.

{{Console variables}}</text>
      <sha1>pzo9v7jc88jr52jf480o8x2369sojlg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Config files</title>
    <ns>0</ns>
    <id>479</id>
    <revision>
      <id>969</id>
      <timestamp>2009-01-30T11:08:32Z</timestamp>
      <contributor>
        <ip>82.21.239.243</ip>
      </contributor>
      <comment>New page: Config files may be found in your game directory, the default game directory is ID1. and these are where the configuration cvars maybe stored.</comment>
      <text xml:space="preserve" bytes="142">Config files may be found in your game directory, the default game directory is ID1. and these are where the configuration cvars maybe stored.</text>
      <sha1>b2nrtzcjc55ushoef1nk6jy51bzdt34</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1540</id>
      <parentid>969</parentid>
      <timestamp>2010-01-12T10:11:24Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <minor/>
      <comment>[[Config Files]] moved to [[Config files]]</comment>
      <text xml:space="preserve" bytes="142">Config files may be found in your game directory, the default game directory is ID1. and these are where the configuration cvars maybe stored.</text>
      <sha1>b2nrtzcjc55ushoef1nk6jy51bzdt34</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2431</id>
      <parentid>1540</parentid>
      <timestamp>2013-03-28T17:21:03Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>added a little more detail</comment>
      <text xml:space="preserve" bytes="955">'''Config files''' are plain text files with a .cfg extension that Quake stores player settings, such as keyboard controls in. They are normally stored in game directories, such as the default ID1 directory, as well as in the game dir of other [[Mod|mods]].

Some configuration files are loaded automatically at startup, but players can create their own config files and load them at the console using the [[exec]] command.

==config.cfg==
'''config.cfg''' is used to store player settings, such as controls, player colours and name. Some modern engines, such as [[FitzQuake]] and derivatives use this file to store all settings, but older versions of the Quake engine did not write certain settings.

==autoexec.cfg==
'''autoexec.cfg''' is used to store commands the player wants the engine to automatically execute at startup. Often, players will add graphics settings and commands that were not usually  saved in config.cfg, such as [[+mlook]] in here.</text>
      <sha1>6nll4wday58p70mnxkzz1adnky9qhwf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2510</id>
      <parentid>2431</parentid>
      <timestamp>2013-03-29T14:21:59Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Config files]] to [[config files]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="955">'''Config files''' are plain text files with a .cfg extension that Quake stores player settings, such as keyboard controls in. They are normally stored in game directories, such as the default ID1 directory, as well as in the game dir of other [[Mod|mods]].

Some configuration files are loaded automatically at startup, but players can create their own config files and load them at the console using the [[exec]] command.

==config.cfg==
'''config.cfg''' is used to store player settings, such as controls, player colours and name. Some modern engines, such as [[FitzQuake]] and derivatives use this file to store all settings, but older versions of the Quake engine did not write certain settings.

==autoexec.cfg==
'''autoexec.cfg''' is used to store commands the player wants the engine to automatically execute at startup. Often, players will add graphics settings and commands that were not usually  saved in config.cfg, such as [[+mlook]] in here.</text>
      <sha1>6nll4wday58p70mnxkzz1adnky9qhwf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2699</id>
      <parentid>2510</parentid>
      <timestamp>2013-03-30T15:10:58Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Spirit moved page [[config files]] to [[Config files]] over a redirect without leaving a redirect: oops, back to &quot;Config files&quot;</comment>
      <text xml:space="preserve" bytes="955">'''Config files''' are plain text files with a .cfg extension that Quake stores player settings, such as keyboard controls in. They are normally stored in game directories, such as the default ID1 directory, as well as in the game dir of other [[Mod|mods]].

Some configuration files are loaded automatically at startup, but players can create their own config files and load them at the console using the [[exec]] command.

==config.cfg==
'''config.cfg''' is used to store player settings, such as controls, player colours and name. Some modern engines, such as [[FitzQuake]] and derivatives use this file to store all settings, but older versions of the Quake engine did not write certain settings.

==autoexec.cfg==
'''autoexec.cfg''' is used to store commands the player wants the engine to automatically execute at startup. Often, players will add graphics settings and commands that were not usually  saved in config.cfg, such as [[+mlook]] in here.</text>
      <sha1>6nll4wday58p70mnxkzz1adnky9qhwf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Config modem clear</title>
    <ns>0</ns>
    <id>873</id>
    <redirect title="config modem clear" />
    <revision>
      <id>2513</id>
      <timestamp>2013-03-29T14:21:59Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Config modem clear]] to [[config modem clear]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="32">#REDIRECT [[config modem clear]]</text>
      <sha1>rld26n4m2fzjollz5lk9b1smknyxo97</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Config modem dialtype</title>
    <ns>0</ns>
    <id>874</id>
    <redirect title="config modem dialtype" />
    <revision>
      <id>2515</id>
      <timestamp>2013-03-29T14:22:00Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Config modem dialtype]] to [[config modem dialtype]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="35">#REDIRECT [[config modem dialtype]]</text>
      <sha1>71u7gne4pkmzh6bfqbgzzg5e4j5bk2z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Config modem hangup</title>
    <ns>0</ns>
    <id>818</id>
    <redirect title="config modem hangup" />
    <revision>
      <id>2397</id>
      <timestamp>2013-03-28T14:59:06Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Spirit moved page [[Config modem hangup]] to [[config modem hangup]]: lowercase</comment>
      <text xml:space="preserve" bytes="33">#REDIRECT [[config modem hangup]]</text>
      <sha1>fvpqu7udorfqgydnetznzmr787cd0fm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Config modem init</title>
    <ns>0</ns>
    <id>84</id>
    <revision>
      <id>137</id>
      <timestamp>2007-10-30T22:22:31Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{underscore-lowercase-underscores}}{{Infobox Console variable |name=_config_modem_init |default-value= |saved-to-config=yes }} Versions: NormalQuake  This variable contains the command to...</comment>
      <text xml:space="preserve" bytes="5848">{{underscore-lowercase-underscores}}{{Infobox Console variable
|name=_config_modem_init
|default-value=
|saved-to-config=yes
}}
Versions: NormalQuake

This variable contains the command to send to the modem to initialize the modem. Consult your modem manual for the appropriate initialization string. This variable is only used if [[_config_com_modem]] is 1. Modem communications are not supported in [[WinQuake]] or [[GLQuake]] and this variable remains unused in those ports, however Linux and DOS ports are still capable of modem communication.

The following init strings have been ripped from techinfo.txt, and are provided here for your conveinance.

* '''Boca M1440i (internal)'''
** &lt;tt&gt;&lt;nowiki&gt;ATS48=0S37=9S46=136%C0%E0%M0&amp;K0&amp;Q0&amp;R1&amp;C1&amp;D2\G0\N1N0&lt;/nowiki&gt;&lt;/tt&gt;

* '''Boca 14.4k (internal)'''
** &lt;tt&gt;&lt;nowiki&gt;AT&amp;C0N0S37=9&amp;K0W0&amp;Q0S36=3S48=128%C0&lt;/nowiki&gt;&lt;/tt&gt;

* '''Boca 14.4 Fax/Modem'''
** &lt;tt&gt;&lt;nowiki&gt; AT S46=0 S37=9 N0 &amp;Q0 &amp;D2 &amp;K4&lt;/nowiki&gt;&lt;/tt&gt;

* '''Boca 14.4k (external)'''
** &lt;tt&gt;&lt;nowiki&gt; AT &amp;F S0=1 S36=0 &amp;K0 &amp;Q6N0S37=9 &amp;D2&lt;/nowiki&gt;&lt;/tt&gt;

* '''Boca 14.4k'''
** &lt;tt&gt;&lt;nowiki&gt; AT S46=0 S37=9 N0 &amp;Q0 &amp;D2 &amp;K0 %C0&lt;/nowiki&gt;&lt;/tt&gt;

* '''Cardinal 14.4k v.32bis, v.42bis Fax/Modem'''
** &lt;tt&gt;&lt;nowiki&gt; AT &amp;F N0 S37=9 &amp;Q0 &amp;D2 \N1&lt;/nowiki&gt;&lt;/tt&gt;

* '''Digicom Systems (DSI) (softmodem)'''
** &lt;tt&gt;&lt;nowiki&gt; AT Z \N0 &amp;D2 &amp;K0 S48=48&lt;/nowiki&gt;&lt;/tt&gt;

* '''Digicom Systems Scout Plus'''
** &lt;tt&gt;&lt;nowiki&gt; ATZ*E0*N3*M0*S0*F0&amp;D2&lt;/nowiki&gt;&lt;/tt&gt;

* '''Gateway Telepath'''
** &lt;tt&gt;&lt;nowiki&gt; AT &amp;F S37=9 %C0 &amp;K0 &amp;Q6 \G0&lt;/nowiki&gt;&lt;/tt&gt;

* '''Gateway Telepath 14.4k'''
** &lt;tt&gt;&lt;nowiki&gt; AT S46=0 S37=9 N0 &amp;Q0 &amp;D2 &amp;K0 %C0&lt;/nowiki&gt;&lt;/tt&gt;

* '''Gateway Telepath I'''
** &lt;tt&gt;&lt;nowiki&gt; AT S0=1 &amp;N6 &amp;K0 &amp;M0&lt;/nowiki&gt;&lt;/tt&gt;

* '''Gateway Telepath II'''
** &lt;tt&gt;&lt;nowiki&gt; AT S0=1 S37=9 %C0 &amp;Q0 &amp;K0&lt;/nowiki&gt;&lt;/tt&gt;

* '''Generic v.32bis 14.4k Fax/Modem'''
** &lt;tt&gt;&lt;nowiki&gt; AT \N0 %C0 B8&lt;/nowiki&gt;&lt;/tt&gt;

* '''Generic 14.4k Fax/Modem'''
** &lt;tt&gt;&lt;nowiki&gt; AT S46=0 S37=9 N0 &amp;Q0 &amp;D2 %C0 \G0 &amp;K0&lt;/nowiki&gt;&lt;/tt&gt;

* '''GVC 14.4k (internal)'''
** &lt;tt&gt;&lt;nowiki&gt; AT &amp;F B8 \Q0&lt;/nowiki&gt;&lt;/tt&gt;

* '''Hayes 28.8k V.FAST Modem'''
** &lt;tt&gt;&lt;nowiki&gt; AT &amp;Q6 &amp;K S37=9 N %C0 \N0&lt;/nowiki&gt;&lt;/tt&gt;

* '''Infotel 144I'''
** &lt;tt&gt;&lt;nowiki&gt; AT&amp;Q0 S37=9 N0 &amp;D2&lt;/nowiki&gt;&lt;/tt&gt;

* '''Infotel 14.4'''
** &lt;tt&gt;&lt;nowiki&gt; &amp;F0 \N1 &amp;D2 S37=F8&lt;/nowiki&gt;&lt;/tt&gt;

* '''Intel 14.4k'''
** &lt;tt&gt;&lt;nowiki&gt; AT \N0 %C0 \Q0 B8&lt;/nowiki&gt;&lt;/tt&gt;

* '''Intel 14.4k (internal)'''
** &lt;tt&gt;&lt;nowiki&gt; AT Z B8 Q1 \C0 \N1 %C0 \V &quot;H&lt;/nowiki&gt;&lt;/tt&gt;

* '''Linelink 144e'''
** &lt;tt&gt;&lt;nowiki&gt; AT &amp;F &amp;D1 &amp;K0 &amp;Q6 S36=3 S46=136 %C0&lt;/nowiki&gt;&lt;/tt&gt;
** 19200

* '''Microcom AX'''
** &lt;tt&gt;&lt;nowiki&gt; &amp;F \N1 \Q0 &amp;D2&lt;/nowiki&gt;&lt;/tt&gt;

* '''Microcom QX/4232bis'''
** &lt;tt&gt;&lt;nowiki&gt; AT %C0 \N0&lt;/nowiki&gt;&lt;/tt&gt;

* '''Netcomm M7F'''
** &lt;tt&gt;&lt;nowiki&gt; AT &amp;E &amp;K0 B0 \V0 X4 &amp;D2 \N1 \Q0 #J0 #Q9 %C0&lt;/nowiki&gt;&lt;/tt&gt;

* '''Nokia ECM 4896M Trellis V.32'''
** &lt;tt&gt;&lt;nowiki&gt; AT Z %C0 /N0&lt;/nowiki&gt;&lt;/tt&gt;

* '''Nuvotel IFX 14.4 (internal)'''
** &lt;tt&gt;&lt;nowiki&gt; &amp;F \N1 &amp;D2&lt;/nowiki&gt;&lt;/tt&gt;

* '''Practical Peripherals 14400FX v.32bis'''
** &lt;tt&gt;&lt;nowiki&gt; AT Z S46=0 &amp;Q0 &amp;D2&lt;/nowiki&gt;&lt;/tt&gt;

* '''Practical Peripherals 14400FX v.32bis'''
** &lt;tt&gt;&lt;nowiki&gt; AT S46=0 &amp;Q0 &amp;K0 &amp;D2&lt;/nowiki&gt;&lt;/tt&gt;

* '''Supra'''
** &lt;tt&gt;&lt;nowiki&gt; AT &amp;F0 S46=136 %C0&lt;/nowiki&gt;&lt;/tt&gt;

* '''Supra (external)'''
** &lt;tt&gt;&lt;nowiki&gt; AT &amp;K &amp;Q &amp;D \N1&lt;/nowiki&gt;&lt;/tt&gt;

* '''Supra 14.4k v.32bis'''
** &lt;tt&gt;&lt;nowiki&gt; AT &amp;F S46=136 &amp;Q0 &amp;D2&lt;/nowiki&gt;&lt;/tt&gt;

* '''Supra 14.4k v.32bis'''
** &lt;tt&gt;&lt;nowiki&gt; AT &amp;K &amp;Q &amp;D \N1&lt;/nowiki&gt;&lt;/tt&gt;

* '''Supra Fax Modem 14.4K v.32 bis'''
** &lt;tt&gt;&lt;nowiki&gt; AT &amp;F %C0 S48=7 Q0 V1 W1&lt;/nowiki&gt;&lt;/tt&gt;

* '''Telepath 14.4k'''
** &lt;tt&gt;&lt;nowiki&gt; AT &amp;F&amp;M0&amp;K0&amp;N6&amp;H0 S0=1&lt;/nowiki&gt;&lt;/tt&gt;

* '''Twincomm DFi 14.4'''
** &lt;tt&gt;&lt;nowiki&gt; AT&amp;F &amp;Q0 %C0 S37=9 &amp;D2&lt;/nowiki&gt;&lt;/tt&gt;

* '''UDS V.3223'''
** &lt;tt&gt;&lt;nowiki&gt; &amp;F \N1 \Q &amp;D2&lt;/nowiki&gt;&lt;/tt&gt;

* '''UDS Fastalk 32BX'''
** &lt;tt&gt;&lt;nowiki&gt; &amp;F0 \N1 &amp;D2&lt;/nowiki&gt;&lt;/tt&gt;

* '''USR Courier v.32bis'''
** &lt;tt&gt;&lt;nowiki&gt; ATS0=1 S7=60 E1 Q0 V1 &amp;C1 &amp;D2 &amp;H0 &amp;K0 &amp;M0 &amp;N6 &amp;A3&lt;/nowiki&gt;&lt;/tt&gt;

* '''USR Courier HST/DS 16.8k'''
** First reset the modem in a communication program with AT&amp;F&amp;W
** &lt;tt&gt;&lt;nowiki&gt; AT X4 B0 &amp;A0 &amp;B0 &amp;H2 &amp;I0 &amp;K0 &amp;M0 &amp;N6a&lt;/nowiki&gt;&lt;/tt&gt;

* '''USR DS v.32bis v.42bis (external)'''
** &lt;tt&gt;&lt;nowiki&gt; AT&amp;m0&amp;n6&amp;a0&amp;r1&amp;h0&amp;k0&amp;i0&amp;s0&amp;b1x1&lt;/nowiki&gt;&lt;/tt&gt;

* '''USR Sporster 9600'''
** &lt;tt&gt;&lt;nowiki&gt; AT&amp;M0&amp;K0&amp;N6&lt;/nowiki&gt;&lt;/tt&gt;

* '''USR Sportster V.34 28.8 (note: works best at 19200 baud)'''
** &lt;tt&gt;&lt;nowiki&gt; AT &amp;F &amp;M0 &amp;I0 &amp;K0 &amp;B0 &amp;N0&lt;/nowiki&gt;&lt;/tt&gt;

* '''USR Sportster 14.4k Fax/Modem USING ERROR CORRECTION'''
** &lt;tt&gt;&lt;nowiki&gt; AT S0=1 S7=60 E1 QO V1 &amp;C1 &amp;D2 &amp;K0 &amp;N6 &amp;A3&lt;/nowiki&gt;&lt;/tt&gt;

* '''USR Sportster 14.4k Fax/Modem (internal)'''
** &lt;tt&gt;&lt;nowiki&gt; AT &amp;F&amp;M0&amp;K0&amp;N6&amp;H0&lt;/nowiki&gt;&lt;/tt&gt;

* '''USR Sportster 14.4k (internal)'''
** &lt;tt&gt;&lt;nowiki&gt; AT &amp;F &amp;B1 &amp;H0 &amp;I0 &amp;K0 &amp;M0 &amp;N6 &amp;R1&lt;/nowiki&gt;&lt;/tt&gt;

* '''USR Sportster 14.4k'''
** &lt;tt&gt;&lt;nowiki&gt; ATS0=1S7=60E1Q0V1&amp;C1&amp;D2&amp;K0&amp;N6&amp;A3&lt;/nowiki&gt;&lt;/tt&gt;

* '''USR Sportster 14.4k'''
** &lt;tt&gt;&lt;nowiki&gt; AT &amp;F0 &amp;K0 &amp;M0 &amp;N6 &amp;H0 &amp;I0 &amp;B1 &amp;R1&lt;/nowiki&gt;&lt;/tt&gt;

* '''USR Sportster 14,000 Fax Modem'''
** &lt;tt&gt;&lt;nowiki&gt; AT S0=2 &amp;N6 &amp;K0 &amp;M0 &amp;I0 &amp;H0 &amp;R1 &amp;A0 V1 X4&lt;/nowiki&gt;&lt;/tt&gt;

* '''USR 14.4k'''
** &lt;tt&gt;&lt;nowiki&gt; AT &amp;F&amp;A0&amp;K0&amp;M0&lt;/nowiki&gt;&lt;/tt&gt;

* '''USR 14.4k'''
** &lt;tt&gt;&lt;nowiki&gt; AT &amp;K0 &amp;H0 &amp;D0 &amp;I0 &amp;R1&lt;/nowiki&gt;&lt;/tt&gt;

* '''USR 14.4k Dual Standard'''
** &lt;tt&gt;&lt;nowiki&gt; ATB0&amp;R1&amp;B1&amp;N6Q0X4&amp;A0&amp;D2&amp;H0&amp;I0&amp;K0&amp;M0M1&lt;/nowiki&gt;&lt;/tt&gt;

* '''USR (model?)'''
** &lt;tt&gt;&lt;nowiki&gt; &amp;F E1 V1 X4 &amp;C1 &amp;D2 &amp;N0&lt;/nowiki&gt;&lt;/tt&gt;

* '''ViVa 14.4k'''
** &lt;tt&gt;&lt;nowiki&gt; AT&amp;F&amp;Q6\N0%C0&amp;D2N0S37=9&lt;/nowiki&gt;&lt;/tt&gt;

* '''ViVa modem (internal)'''
** &lt;tt&gt;&lt;nowiki&gt; &amp;F&amp;Q6\N0%C0&amp;D2N0S37=9&lt;/nowiki&gt;&lt;/tt&gt;

* '''Zoltrix model 14/14 VE'''
** &lt;tt&gt;&lt;nowiki&gt; AT S0=Q0 V1 &amp;C1 &amp;D2 W2 &amp;Q0&lt;/nowiki&gt;&lt;/tt&gt;

* '''Zoom 14.4k VFX'''
** &lt;tt&gt;&lt;nowiki&gt; AT&amp;Q6S37=9N0%C\N0&lt;/nowiki&gt;&lt;/tt&gt;

* '''Zoom 14.4k VFX'''
** &lt;tt&gt;&lt;nowiki&gt; AT&amp;Q6S37=11N0%C&amp;K0&lt;/nowiki&gt;&lt;/tt&gt;

* '''Zoom OEM Modem'''
** &lt;tt&gt;&lt;nowiki&gt; AT&amp;Q6S37=9N0&amp;K0&lt;/nowiki&gt;&lt;/tt&gt;

* '''Zyxel U-1496E'''
** &lt;tt&gt;&lt;nowiki&gt; AT Z &amp;N4 &amp;K0&lt;/nowiki&gt;&lt;/tt&gt;

{{Console variables}}</text>
      <sha1>azobtbspqdrovpe5kd6pasvuxp741mq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Console commands</title>
    <ns>0</ns>
    <id>61</id>
    <redirect title="List of console commands" />
    <revision>
      <id>100</id>
      <timestamp>2007-10-30T19:57:57Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>[[Console commands]] moved to [[List of console commands]]</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[List of console commands]]</text>
      <sha1>11lw5oqojsdn13qt7achx84at4xivq4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Console variables</title>
    <ns>0</ns>
    <id>60</id>
    <redirect title="List of console variables" />
    <revision>
      <id>97</id>
      <timestamp>2007-10-30T19:57:15Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>[[Console variables]] moved to [[List of console variables]]</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[List of console variables]]</text>
      <sha1>dv2m440b3a6uag7lpqq8z8km0xf9x49</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Coop</title>
    <ns>0</ns>
    <id>125</id>
    <revision>
      <id>200</id>
      <timestamp>2007-10-31T00:43:27Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=coop |default-value=0 |saved-to-config=no }} If true (1), indicate next game will be a multiplayer cooperative game.  {{Console va...</comment>
      <text xml:space="preserve" bytes="197">{{lowercase-underscores}}{{Infobox Console variable
|name=coop
|default-value=0
|saved-to-config=no
}}
If true (1), indicate next game will be a multiplayer cooperative game.

{{Console variables}}</text>
      <sha1>azk620xn96q3eanbn6p7jofcg8tapsj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Coredump</title>
    <ns>0</ns>
    <id>385</id>
    <revision>
      <id>655</id>
      <timestamp>2008-05-07T17:18:24Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: === Function: coredump ===   void coredump()  Print all entities</comment>
      <text xml:space="preserve" bytes="64">=== Function: coredump ===
  void coredump()

Print all entities</text>
      <sha1>r3yxj3yu8b0ef4b5e1k3xvlz1u91s3r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Crosshair</title>
    <ns>0</ns>
    <id>819</id>
    <redirect title="crosshair" />
    <revision>
      <id>2399</id>
      <timestamp>2013-03-28T14:59:22Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Spirit moved page [[Crosshair]] to [[crosshair]]: lowercase</comment>
      <text xml:space="preserve" bytes="23">#REDIRECT [[crosshair]]</text>
      <sha1>1m2gx6hs1i6jne8iw9k4dzztiwbr55a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Customizing Quake</title>
    <ns>0</ns>
    <id>477</id>
    <revision>
      <id>955</id>
      <timestamp>2008-11-14T08:02:45Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>New page: This page is about stuff like customizing your HUD, crosshair, using replacement textures, etc, in engines that support it.</comment>
      <text xml:space="preserve" bytes="123">This page is about stuff like customizing your HUD, crosshair, using replacement textures, etc, in engines that support it.</text>
      <sha1>a1fidst1npjiq4d2pfinwy0qrd4ccvu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1934</id>
      <parentid>955</parentid>
      <timestamp>2013-03-25T04:08:09Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="549">This page is about stuff like customizing your HUD, crosshair, using replacement textures, etc, in engines that support it.

'''[[[[configuration file]]]]'''
This article will show you what variables that a user can easily modify or add so that certain keyboard or mouse commands can be tied to them. This article is not intended to be a detailed explanation of how these variables work.

'''[[[[Configuration details]]]]'''
This is where specific configuration command issues are addressed and the possible implications of using them are discussed.</text>
      <sha1>exd9xfp2ht91h1mfi27vllvhy77qmrn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Cvar</title>
    <ns>0</ns>
    <id>392</id>
    <revision>
      <id>663</id>
      <timestamp>2008-05-07T17:25:14Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: === Function: cvar ===   float cvar (string variable)  variable = see console variables  returns the value of a console variable.</comment>
      <text xml:space="preserve" bytes="129">=== Function: cvar ===
  float cvar (string variable)

variable = see console variables

returns the value of a console variable.</text>
      <sha1>q3lgnzzrtyozqz8nhewudxxcdn1duwp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Cvars</title>
    <ns>0</ns>
    <id>377</id>
    <revision>
      <id>633</id>
      <timestamp>2008-04-16T15:08:38Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: ..Abbreviation for Quake [[console variables]]...</comment>
      <text xml:space="preserve" bytes="49">..Abbreviation for Quake [[console variables]]...</text>
      <sha1>603eyxblzcw7xceu2an246zu849k1gs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DM</title>
    <ns>0</ns>
    <id>375</id>
    <revision>
      <id>629</id>
      <timestamp>2008-04-16T14:54:43Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: Its an abbreviation for [[Deathmatch]].</comment>
      <text xml:space="preserve" bytes="39">Its an abbreviation for [[Deathmatch]].</text>
      <sha1>snlnaftaui1kcszktflxe2cumv8b3fo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DOS Quake</title>
    <ns>0</ns>
    <id>507</id>
    <redirect title="QUAKE.EXE" />
    <revision>
      <id>1096</id>
      <timestamp>2009-07-20T02:08:45Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>redirect to [[QUAKE.EXE]], in case anyone decides to link to DOS Quake</comment>
      <text xml:space="preserve" bytes="23">#REDIRECT [[QUAKE.EXE]]</text>
      <sha1>4im0qctm0upz69gbkuk7gwong44h05j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DOSQuake</title>
    <ns>0</ns>
    <id>508</id>
    <redirect title="QUAKE.EXE" />
    <revision>
      <id>1097</id>
      <timestamp>2009-07-20T02:09:54Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>Someone's already linking here from the [[Installing addons]] page; others may try in the future, so redirect to [[QUAKE.EXE]]</comment>
      <text xml:space="preserve" bytes="23">#REDIRECT [[QUAKE.EXE]]</text>
      <sha1>4im0qctm0upz69gbkuk7gwong44h05j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP BUTTONCHAT</title>
    <ns>0</ns>
    <id>182</id>
    <revision>
      <id>342</id>
      <timestamp>2008-01-27T13:28:32Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <comment>New page: .float buttonchat;  This field is TRUE if the player is currently chatting (in messagemode, menus or console). Set by engine.</comment>
      <text xml:space="preserve" bytes="125">.float buttonchat;

This field is TRUE if the player is currently chatting (in messagemode, menus or console). Set by engine.</text>
      <sha1>r8e3yx2yfd7ve26suormq0j5rkfanxl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP BUTTONUSE</title>
    <ns>0</ns>
    <id>183</id>
    <revision>
      <id>343</id>
      <timestamp>2008-01-27T13:30:24Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <comment>New page: .float buttonuse;  +use and -use console commands control this float, as .button1 was used by many mods in the past for other purposes.</comment>
      <text xml:space="preserve" bytes="135">.float buttonuse;

+use and -use console commands control this float, as .button1 was used by many mods in the past for other purposes.</text>
      <sha1>d4024jkv0e7d6lhu8x84e8g2y9gciz1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP CL LOADSKY</title>
    <ns>0</ns>
    <id>220</id>
    <revision>
      <id>402</id>
      <timestamp>2008-02-28T13:03:04Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: client console command:  loadsky &lt;basename&gt;  loadsky mtsun_ would load &quot;mtnsun_up.tga&quot; and &quot;mtnsun_rt.tga&quot; and similar names use &quot;&quot; to revert to quake sky, note: this is the same as Quake2...</comment>
      <text xml:space="preserve" bytes="421">client console command:

loadsky &lt;basename&gt;

loadsky mtsun_ would load &quot;mtnsun_up.tga&quot; and &quot;mtnsun_rt.tga&quot; and similar names
use &quot;&quot; to revert to quake sky, note: this is the same as Quake2 skybox naming)

Sets global skybox for the map for this client (can be stuffed to a client by QC), does not hurt much to repeatedly execute this command. In mods it is preferable to use [DP_GFX_SKYBOX] to set the skybox for the map.</text>
      <sha1>gl0y7hwdbsh9j1tboz9u4dumn0miu7z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>403</id>
      <parentid>402</parentid>
      <timestamp>2008-02-28T13:03:25Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="423">client console command:

loadsky &lt;basename&gt;

loadsky mtsun_ would load &quot;mtnsun_up.tga&quot; and &quot;mtnsun_rt.tga&quot; and similar names
use &quot;&quot; to revert to quake sky, note: this is the same as Quake2 skybox naming)

Sets global skybox for the map for this client (can be stuffed to a client by QC), does not hurt much to repeatedly execute this command. In mods it is preferable to use [[DP_GFX_SKYBOX]] to set the skybox for the map.</text>
      <sha1>rbfke3dh36fmcsivafr9949fog5wsmq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1744</id>
      <parentid>403</parentid>
      <timestamp>2013-03-25T00:09:31Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="448">client console command:

loadsky &lt;basename&gt;

loadsky mtsun_ would load &quot;mtnsun_up.tga&quot; and &quot;mtnsun_rt.tga&quot; and similar names
use &quot;&quot; to revert to quake sky, note: this is the same as Quake2 skybox naming)

Sets global skybox for the map for this client (can be stuffed to a client by QC), does not hurt much to repeatedly execute this command. In mods it is preferable to use [[DP_GFX_SKYBOX]] to set the skybox for the map.

[[Category:DarkPlaces]]</text>
      <sha1>r0uqvxpedmzzujfh51h6smwu6eqh9zs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP CON ALIASPARAMETERS</title>
    <ns>0</ns>
    <id>223</id>
    <revision>
      <id>406</id>
      <timestamp>2008-02-28T13:05:42Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Indicates this engine supports aliases containing $1 through $9 parameter macros (which when called will expand to the parameters passed to the alias, for example alias test &quot;say $2 $1&quot;, t...</comment>
      <text xml:space="preserve" bytes="322">Indicates this engine supports aliases containing $1 through $9 parameter macros (which when called will expand to the parameters passed to the alias, for example alias test &quot;say $2 $1&quot;, then you can type test hi there and it will execute say there hi), as well as $0 (name of the alias) and $* (all parameters $1 onward).</text>
      <sha1>7gp8s793b7mhhxej0b576xxplioxp3s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP CON EXPANDCVAR</title>
    <ns>0</ns>
    <id>224</id>
    <revision>
      <id>407</id>
      <timestamp>2008-02-28T13:06:05Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Indicates this engine supports console commandlines containing $cvarname which will expand to the contents of that cvar as a parameter, for instance say my fov is $fov, will say &quot;my fov is...</comment>
      <text xml:space="preserve" bytes="205">Indicates this engine supports console commandlines containing $cvarname which will expand to the contents of that cvar as a parameter, for instance say my fov is $fov, will say &quot;my fov is 90&quot;, or similar.</text>
      <sha1>47vmdpoqyvungr3nfez45m6n4pfxeq4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP CON SET</title>
    <ns>0</ns>
    <id>221</id>
    <revision>
      <id>404</id>
      <timestamp>2008-02-28T13:04:17Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Indicates this engine supports the &quot;set&quot; console command which creates or sets a non-archived cvar (not saved to config.cfg on exit). It is recommended that set and seta commands be placed...</comment>
      <text xml:space="preserve" bytes="227">Indicates this engine supports the &quot;set&quot; console command which creates or sets a non-archived cvar (not saved to config.cfg on exit). It is recommended that set and seta commands be placed in default.cfg for mod-specific cvars.</text>
      <sha1>3ehbrs5ndbh703tgequz3lw8s8kld5u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP CON SETA</title>
    <ns>0</ns>
    <id>222</id>
    <revision>
      <id>405</id>
      <timestamp>2008-02-28T13:04:40Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Indicates this engine supports the &quot;seta&quot; console command which creates or sets an archived cvar (saved to config.cfg on exit). It is recommended that set and seta commands be placed in de...</comment>
      <text xml:space="preserve" bytes="221">Indicates this engine supports the &quot;seta&quot; console command which creates or sets an archived cvar (saved to config.cfg on exit). It is recommended that set and seta commands be placed in default.cfg for mod-specific cvars.</text>
      <sha1>qojcrnqx3r8enwc7vdrbyxnj2oc4a60</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP CON STARTMAP</title>
    <ns>0</ns>
    <id>225</id>
    <revision>
      <id>408</id>
      <timestamp>2008-02-28T13:06:47Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Adds two engine-called aliases named startmap_sp and startmap_dm which are called when the engine tries to start a singleplayer game from the menu (startmap_sp) or the -listen or -dedicate...</comment>
      <text xml:space="preserve" bytes="544">Adds two engine-called aliases named startmap_sp and startmap_dm which are called when the engine tries to start a singleplayer game from the menu (startmap_sp) or the -listen or -dedicated options are used or the engine is a dedicated server (uses startmap_dm). These allow a mod or game to specify their own map instead of start, and also distinguish between singleplayer and -listen/-dedicated, also these need not be a simple &quot;map start&quot; command. They can do other things if desired. Startmap_sp and startmap_dm both default to &quot;map start&quot;.</text>
      <sha1>mzkxc31eni29w1lak85cc9eo06s310u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP EF ADDITIVE</title>
    <ns>0</ns>
    <id>226</id>
    <revision>
      <id>409</id>
      <timestamp>2008-02-28T13:07:50Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Adds a new .effects bit:  float   EF_ADDITIVE     = 32;  Objects with this bit set are rendered with additive blending.</comment>
      <text xml:space="preserve" bytes="119">Adds a new .effects bit:

float   EF_ADDITIVE     = 32;

Objects with this bit set are rendered with additive blending.</text>
      <sha1>9mz429gr701bbdp731xvrxlkoxo2vl3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP EF BLUE</title>
    <ns>0</ns>
    <id>227</id>
    <revision>
      <id>410</id>
      <timestamp>2008-02-28T13:10:58Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Provides a new .effects bit:  float   EF_BLUE         = 64;  An entity with this bit set emits blue light, often used for quad.</comment>
      <text xml:space="preserve" bytes="127">Provides a new .effects bit:

float   EF_BLUE         = 64;

An entity with this bit set emits blue light, often used for quad.</text>
      <sha1>bypj4j3n1vjq7yrtzdcdd4dpe3dk84o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP EF DOUBLESIDED</title>
    <ns>0</ns>
    <id>229</id>
    <revision>
      <id>414</id>
      <timestamp>2008-02-28T13:14:47Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Implements a new .effects bit:  float EF_DOUBLESIDED = 32768;  The entity is rendered as double sided (backfaces are visible, I.E. you see the 'interior' of the model, rather than just the...</comment>
      <text xml:space="preserve" bytes="245">Implements a new .effects bit:

float EF_DOUBLESIDED = 32768;

The entity is rendered as double sided (backfaces are visible, I.E. you see the 'interior' of the model, rather than just the front), can be occasionally useful on transparent stuff.</text>
      <sha1>4pkefkenurxjqz5hjtg4zlm15y3u06j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP EF FLAME</title>
    <ns>0</ns>
    <id>228</id>
    <revision>
      <id>411</id>
      <timestamp>2008-02-28T13:12:08Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Adds a new .effects bit:  float   EF_FLAME        = 1024;  Entities with this bit set are on fire.</comment>
      <text xml:space="preserve" bytes="98">Adds a new .effects bit:

float   EF_FLAME        = 1024;

Entities with this bit set are on fire.</text>
      <sha1>tpwwwvvevjdi8igl7zn8q5hpvkd40wq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP EF FULLBRIGHT</title>
    <ns>0</ns>
    <id>230</id>
    <revision>
      <id>415</id>
      <timestamp>2008-02-28T13:15:21Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Adds a new .effects bit:  float   EF_FULLBRIGHT   = 512;  An entity with this bit set is always brightly lit.</comment>
      <text xml:space="preserve" bytes="109">Adds a new .effects bit:

float   EF_FULLBRIGHT   = 512;

An entity with this bit set is always brightly lit.</text>
      <sha1>90gfuhupcs0lnt7t9gmi1zhslfln48t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP EF NODEPTHTEST</title>
    <ns>0</ns>
    <id>231</id>
    <revision>
      <id>416</id>
      <timestamp>2008-02-28T13:15:56Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Adds a new .effects bit:  float   EF_NODEPTHTEST       = 8192;  This makes the entity show up to client even through walls, useful with EF_ADDITIVE for special indicators like where team b...</comment>
      <text xml:space="preserve" bytes="237">Adds a new .effects bit:

float   EF_NODEPTHTEST       = 8192;

This makes the entity show up to client even through walls, useful with EF_ADDITIVE for special indicators like where team bases are in a map, so that people don't get lost.</text>
      <sha1>r4qgwpuzl3wus3tiu2dpxzvkpp604lt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP EF NODRAW</title>
    <ns>0</ns>
    <id>232</id>
    <revision>
      <id>417</id>
      <timestamp>2008-02-28T13:16:29Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Adds a new .effects bit:  float   EF_NODRAW       = 16;  This prevents server from sending entity to client (forced invisible, even if it would have been a light source or other such thing...</comment>
      <text xml:space="preserve" bytes="191">Adds a new .effects bit:

float   EF_NODRAW       = 16;

This prevents server from sending entity to client (forced invisible, even if it would have been a light source or other such things).</text>
      <sha1>nw2afuaoyp7gc34s0eeama95tufw7ny</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP EF NOGUNBOB</title>
    <ns>0</ns>
    <id>233</id>
    <revision>
      <id>419</id>
      <timestamp>2008-02-28T13:18:30Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Implements a new .effects bit:  float   EF_NOGUNBOB     = 256;  This has different meanings depending on the entity it is used on: player entity - prevents gun bobbing on player.viewmodel ...</comment>
      <text xml:space="preserve" bytes="616">Implements a new .effects bit:

float   EF_NOGUNBOB     = 256;

This has different meanings depending on the entity it is used on:
player entity - prevents gun bobbing on player.viewmodel
viewmodelforclient entity - prevents gun bobbing on an entity attached to the player's view
other entities - no effect

Possible uses:
* Disabling gun bobbing on a diving mask or other model used as a .viewmodel.
* Disabling gun bobbing on view-relative models meant to be part of the heads up display.  (note: if fov is changed these entities may be off-screen, or too near the center of the screen, so use fov 90 in this case)</text>
      <sha1>42q8d4qvnpeqrn4hdsvmfgs3huekz4h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>420</id>
      <parentid>419</parentid>
      <timestamp>2008-02-28T13:19:04Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="623">Implements a new .effects bit:

float   EF_NOGUNBOB     = 256;

This has different meanings depending on the entity it is used on:

* player entity - Prevents gun bobbing on player.viewmodel
* viewmodelforclient entity - Prevents gun bobbing on an entity attached to the player's view
* other entities - No effect

Possible uses:
* Disabling gun bobbing on a diving mask or other model used as a .viewmodel.
* Disabling gun bobbing on view-relative models meant to be part of the heads up display.  (note: if fov is changed these entities may be off-screen, or too near the center of the screen, so use fov 90 in this case)</text>
      <sha1>l4l04xvwyawwmrga4k4xun272b1fikr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP EF NOSHADOW</title>
    <ns>0</ns>
    <id>234</id>
    <revision>
      <id>421</id>
      <timestamp>2008-02-28T13:19:45Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Implements a new .effects bit:  float   EF_NOSHADOW     = 4096;  Realtime lights will not cast shadows from this entity (but can still illuminate it).</comment>
      <text xml:space="preserve" bytes="150">Implements a new .effects bit:

float   EF_NOSHADOW     = 4096;

Realtime lights will not cast shadows from this entity (but can still illuminate it).</text>
      <sha1>id5ae5jo06534cuhdzodcbfdpnf5crv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP EF RED</title>
    <ns>0</ns>
    <id>235</id>
    <revision>
      <id>422</id>
      <timestamp>2008-02-28T13:20:17Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Implements a new .effects bit:  float   EF_RED          = 128;  The entity emits red light (used for invulnerability).</comment>
      <text xml:space="preserve" bytes="118">Implements a new .effects bit:

float   EF_RED          = 128;

The entity emits red light (used for invulnerability).</text>
      <sha1>tgvzdjpvsl6t16vimu9d5h4wzdsexi0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP EF STARDUST</title>
    <ns>0</ns>
    <id>236</id>
    <revision>
      <id>423</id>
      <timestamp>2008-02-28T13:20:41Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Adds a new .effects bit:  float   EF_STARDUST     = 2048;  The entity emits bouncing sparkles in every direction.</comment>
      <text xml:space="preserve" bytes="113">Adds a new .effects bit:

float   EF_STARDUST     = 2048;

The entity emits bouncing sparkles in every direction.</text>
      <sha1>elfyf2kxflcc9bm5dyr87yosssskzi8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP ENT ALPHA</title>
    <ns>0</ns>
    <id>237</id>
    <revision>
      <id>424</id>
      <timestamp>2008-02-28T13:21:18Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: New entity field:  .float alpha;  .alpha controls opacity of the entity, 0.0 is forced to be 1.0 (otherwise everything would be invisible), use -1 if you want to make something invisible, ...</comment>
      <text xml:space="preserve" bytes="215">New entity field:

.float alpha;

.alpha controls opacity of the entity, 0.0 is forced to be 1.0 (otherwise everything would be invisible), use -1 if you want to make something invisible, 1.0 is solid (like normal).</text>
      <sha1>b01gju2ka2q60q91q54z4yi9sxld2m3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP ENT COLORMOD</title>
    <ns>0</ns>
    <id>238</id>
    <revision>
      <id>425</id>
      <timestamp>2008-02-28T13:22:52Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: New entity field:  .vector colormod;  colormod controls color of the entity, '0 0 0', is forced to be '1 1 1' (otherwise everything would be black), used for tinting objects, for instance ...</comment>
      <text xml:space="preserve" bytes="356">New entity field:

.vector colormod;

colormod controls color of the entity, '0 0 0', is forced to be '1 1 1' (otherwise everything would be black), used for tinting objects, for instance using '1 0.6 0.4' on an ogre would give you an orange ogre (order is red green blue), note that in [[DarkPlaces]], colors can go up to '8 8 8' (8x as bright as normal).</text>
      <sha1>jtsnr4nzmbbvaeqolhdt72o8tvjpfje</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1752</id>
      <parentid>425</parentid>
      <timestamp>2013-03-25T00:10:52Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="380">New entity field:

.vector colormod;

colormod controls color of the entity, '0 0 0', is forced to be '1 1 1' (otherwise everything would be black), used for tinting objects, for instance using '1 0.6 0.4' on an ogre would give you an orange ogre (order is red green blue), note that in [[DarkPlaces]], colors can go up to '8 8 8' (8x as bright as normal).
[[Category:DarkPlaces]]</text>
      <sha1>e8mh8mg3pmlnas7x1tfabcf6b2dy3pl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP ENT CUSTOMCOLORMAP</title>
    <ns>0</ns>
    <id>239</id>
    <revision>
      <id>426</id>
      <timestamp>2008-02-28T13:24:20Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: If .colormap is set to 1024 + pants + shirt * 16, those colors will be used for colormapping the entity, rather than looking up a colormap by player number.</comment>
      <text xml:space="preserve" bytes="156">If .colormap is set to 1024 + pants + shirt * 16, those colors will be used for colormapping the entity, rather than looking up a colormap by player number.</text>
      <sha1>e6lqh4be2iuyavvvr9u3ng9sbh1g9jm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1753</id>
      <parentid>426</parentid>
      <timestamp>2013-03-25T00:11:06Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="180">If .colormap is set to 1024 + pants + shirt * 16, those colors will be used for colormapping the entity, rather than looking up a colormap by player number.
[[Category:DarkPlaces]]</text>
      <sha1>pjaa8w168uljtxa46rt9a016r9rc4qa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP ENT EXTERIORMODELTOCLIENT</title>
    <ns>0</ns>
    <id>240</id>
    <revision>
      <id>427</id>
      <timestamp>2008-02-28T13:27:06Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: New entity field:  .entity exteriormodeltoclient;  Set an entity's .exteriormodeltoclient to a client (player).  The entity is visible to all clients with one exception: if the specified c...</comment>
      <text xml:space="preserve" bytes="392">New entity field:

.entity exteriormodeltoclient;

Set an entity's .exteriormodeltoclient to a client (player).

The entity is visible to all clients with one exception: if the specified client is using first person view (not using chase_active) the entity will not be shown.  Also if tag attachments are supported any entities attached to the player entity will not be drawn in first person.</text>
      <sha1>5scw6q9qyuqlqoj3zjovowadp5rm09u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1754</id>
      <parentid>427</parentid>
      <timestamp>2013-03-25T00:11:13Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="416">New entity field:

.entity exteriormodeltoclient;

Set an entity's .exteriormodeltoclient to a client (player).

The entity is visible to all clients with one exception: if the specified client is using first person view (not using chase_active) the entity will not be shown.  Also if tag attachments are supported any entities attached to the player entity will not be drawn in first person.
[[Category:DarkPlaces]]</text>
      <sha1>cc2eoe1qiurf09zk64ndess4b011j3e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP ENT GLOW</title>
    <ns>0</ns>
    <id>241</id>
    <revision>
      <id>428</id>
      <timestamp>2008-02-28T13:30:54Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Field definitions:  .float glow_color; .float glow_size; .float glow_trail;  Provides customizable glowing light effect on the entity, glow_color is a paletted (8bit) color in the range 0-...</comment>
      <text xml:space="preserve" bytes="411">Field definitions:

.float glow_color;
.float glow_size;
.float glow_trail;

Provides customizable glowing light effect on the entity, glow_color is a paletted (8bit) color in the range 0-255 (note: 0 and 254 are white), glow_size is 0 or higher (up to the engine what limit to cap it to, darkplaces imposes a 1020 limit), if glow_trail is true it will leave a trail of particles of the same color as the light.</text>
      <sha1>42lantd92boc296y85zomav596dxcqf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>429</id>
      <parentid>428</parentid>
      <timestamp>2008-02-28T13:31:09Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="424">Field definitions:

&lt;pre&gt;
.float glow_color;
.float glow_size;
.float glow_trail;
&lt;/pre&gt;

Provides customizable glowing light effect on the entity, glow_color is a paletted (8bit) color in the range 0-255 (note: 0 and 254 are white), glow_size is 0 or higher (up to the engine what limit to cap it to, darkplaces imposes a 1020 limit), if glow_trail is true it will leave a trail of particles of the same color as the light.</text>
      <sha1>3vg5zmzyf8obojalky1vq79tn72gov2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1755</id>
      <parentid>429</parentid>
      <timestamp>2013-03-25T00:11:20Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="448">Field definitions:

&lt;pre&gt;
.float glow_color;
.float glow_size;
.float glow_trail;
&lt;/pre&gt;

Provides customizable glowing light effect on the entity, glow_color is a paletted (8bit) color in the range 0-255 (note: 0 and 254 are white), glow_size is 0 or higher (up to the engine what limit to cap it to, darkplaces imposes a 1020 limit), if glow_trail is true it will leave a trail of particles of the same color as the light.
[[Category:DarkPlaces]]</text>
      <sha1>0ajiv4nyftm2vxrlxxx8ruccp6eoxn0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP ENT LOWPRECISION</title>
    <ns>0</ns>
    <id>242</id>
    <revision>
      <id>430</id>
      <timestamp>2008-02-28T13:31:53Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Implements a new .effects bit: &lt;pre&gt; float EF_LOWPRECISION = 4194304; &lt;/pre&gt; Entitites with this bit set use low quality origin coordinates, reducing network traffic compared to the defaul...</comment>
      <text xml:space="preserve" bytes="272">Implements a new .effects bit:
&lt;pre&gt;
float EF_LOWPRECISION = 4194304;
&lt;/pre&gt;
Entitites with this bit set use low quality origin coordinates, reducing network traffic compared to the default high precision, intended for numerous objects (projectiles/gibs/bullet holes/etc).</text>
      <sha1>cj57pangxafi8f3wug1s4mwxdz4lhyt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1756</id>
      <parentid>430</parentid>
      <timestamp>2013-03-25T00:11:28Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="296">Implements a new .effects bit:
&lt;pre&gt;
float EF_LOWPRECISION = 4194304;
&lt;/pre&gt;
Entitites with this bit set use low quality origin coordinates, reducing network traffic compared to the default high precision, intended for numerous objects (projectiles/gibs/bullet holes/etc).
[[Category:DarkPlaces]]</text>
      <sha1>m5zzgljnp8z1hax5u7c42viilqcvm52</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP ENT SCALE</title>
    <ns>0</ns>
    <id>243</id>
    <revision>
      <id>431</id>
      <timestamp>2008-02-28T13:32:52Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Field definition: &lt;pre&gt; .float scale; &lt;/pre&gt; Controls rendering scale of the object, 0 is forced to be 1, darkplaces uses 1/16th accuracy and a limit of 15.9375, can be used to make an obj...</comment>
      <text xml:space="preserve" bytes="210">Field definition:
&lt;pre&gt;
.float scale;
&lt;/pre&gt;
Controls rendering scale of the object, 0 is forced to be 1, darkplaces uses 1/16th accuracy and a limit of 15.9375, can be used to make an object larger or smaller.</text>
      <sha1>a7vmq4vgrspdghlcwgcgvkzap6napd1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1757</id>
      <parentid>431</parentid>
      <timestamp>2013-03-25T00:11:35Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="234">Field definition:
&lt;pre&gt;
.float scale;
&lt;/pre&gt;
Controls rendering scale of the object, 0 is forced to be 1, darkplaces uses 1/16th accuracy and a limit of 15.9375, can be used to make an object larger or smaller.
[[Category:DarkPlaces]]</text>
      <sha1>27jgcgbpfzyot51170maeiht9ff83kz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP ENT VIEWMODEL</title>
    <ns>0</ns>
    <id>244</id>
    <revision>
      <id>432</id>
      <timestamp>2008-02-28T13:33:35Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Field definition: &lt;pre&gt; .entity viewmodelforclient; &lt;/pre&gt; Set an entities .viewmodelforclient to a client (player).  This is a very special capability, attachs the entity to the view of t...</comment>
      <text xml:space="preserve" bytes="384">Field definition:
&lt;pre&gt;
.entity viewmodelforclient;
&lt;/pre&gt;
Set an entities .viewmodelforclient to a client (player).

This is a very special capability, attachs the entity to the view of the client specified, origin and angles become relative to the view of that client, all effects can be used (multiple skins on a weapon model etc)...  the entity is not visible to any other client.</text>
      <sha1>m22kajhlmkc5nwrjmn1n2t5kihyc41t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1758</id>
      <parentid>432</parentid>
      <timestamp>2013-03-25T00:11:43Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="408">Field definition:
&lt;pre&gt;
.entity viewmodelforclient;
&lt;/pre&gt;
Set an entities .viewmodelforclient to a client (player).

This is a very special capability, attachs the entity to the view of the client specified, origin and angles become relative to the view of that client, all effects can be used (multiple skins on a weapon model etc)...  the entity is not visible to any other client.
[[Category:DarkPlaces]]</text>
      <sha1>2devqjfr4w7rr16ysz9yq6hnynxnkso</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP GFX EXTERNALTEXTURES</title>
    <ns>0</ns>
    <id>245</id>
    <revision>
      <id>433</id>
      <timestamp>2008-02-28T13:36:59Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Loads external textures found in various directories (tenebrae compatible)...  In all examples .tga is merely the base texture, it can be any of these: * .tga (base texture) * _glow.tga (f...</comment>
      <text xml:space="preserve" bytes="2663">Loads external textures found in various directories (tenebrae compatible)...

In all examples .tga is merely the base texture, it can be any of these:
* .tga (base texture)
* _glow.tga (fullbrights or other glowing overlay stuff, NOTE: this is done using additive blend, not alpha)
* _pants.tga (pants overlay for colormapping on models, this should be shades of grey (it is tinted by pants color) and black wherever the base texture is not black, as this is an additive blend)
* _shirt.tga (same idea as pants, but for shirt color)
* _diffuse.tga (this may be used instead of base texture for per pixel lighting)
* _gloss.tga (specular texture for per pixel lighting, note this can be in color (tenebrae only supports greyscale))
* _norm.tga (normalmap texture for per pixel lighting)
* _bump.tga (bumpmap, converted to normalmap at load time, supported only for reasons of tenebrae compatibility)
* _luma.tga (same as _glow but supported only for reasons of tenebrae compatibility)

due to glquake's incomplete Targa(r) loader, this section describes
required Targa(r) features support:
types:
* type 1 (uncompressed 8bit paletted with 24bit/32bit palette)
* type 2 (uncompressed 24bit/32bit true color, glquake supported this)
* type 3 (uncompressed 8bit greyscale)
* type 9 (RLE compressed 8bit paletted with 24bit/32bit palette)
* type 10 (RLE compressed 24bit/32bit true color, glquake supported this)
* type 11 (RLE compressed 8bit greyscale)
* attribute bit 0x20 (Origin At Top Left, top to bottom, left to right)

image formats guaranteed to be supported:
* tga
* pcx
* lmp

image formats that are optional:
* png
* jpg

mdl/spr/spr32 examples:&lt;br&gt;
skins are named _A (A being a number) and skingroups are named like _A_B&lt;br&gt;
these act as suffixes on the model name...&lt;br&gt;
example names for skin _2_1 of model &quot;progs/armor.mdl&quot;:
&lt;pre&gt;
game/override/progs/armor.mdl_2_1.tga
game/textures/progs/armor.mdl_2_1.tga
game/progs/armor.mdl_2_1.tga
&lt;/pre&gt;
example names for skin _0 of the model &quot;progs/armor.mdl&quot;:
&lt;pre&gt;
game/override/progs/armor.mdl_0.tga
game/textures/progs/armor.mdl_0.tga
game/progs/armor.mdl_0.tga
&lt;/pre&gt;
Note that there can be more skins files (of the _0 naming) than the mdl
contains, this is only useful to save space in the .mdl file if classic quake
compatibility is not a concern.

bsp/md2/md3 examples:&lt;br&gt;
example names for the texture &quot;quake&quot; of model &quot;maps/start.bsp&quot;:
&lt;pre&gt;
game/override/quake.tga
game/textures/quake.tga
game/quake.tga
&lt;/pre&gt;

sbar/menu/console textures: for example the texture &quot;conchars&quot; (console font) in gfx.wad
&lt;pre&gt;
game/override/gfx/conchars.tga
game/textures/gfx/conchars.tga
game/gfx/conchars.tga
&lt;/pre&gt;</text>
      <sha1>stfxb0txa22jg1bt8h39iggp1lt3yrr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1759</id>
      <parentid>433</parentid>
      <timestamp>2013-03-25T00:11:54Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="2687">Loads external textures found in various directories (tenebrae compatible)...

In all examples .tga is merely the base texture, it can be any of these:
* .tga (base texture)
* _glow.tga (fullbrights or other glowing overlay stuff, NOTE: this is done using additive blend, not alpha)
* _pants.tga (pants overlay for colormapping on models, this should be shades of grey (it is tinted by pants color) and black wherever the base texture is not black, as this is an additive blend)
* _shirt.tga (same idea as pants, but for shirt color)
* _diffuse.tga (this may be used instead of base texture for per pixel lighting)
* _gloss.tga (specular texture for per pixel lighting, note this can be in color (tenebrae only supports greyscale))
* _norm.tga (normalmap texture for per pixel lighting)
* _bump.tga (bumpmap, converted to normalmap at load time, supported only for reasons of tenebrae compatibility)
* _luma.tga (same as _glow but supported only for reasons of tenebrae compatibility)

due to glquake's incomplete Targa(r) loader, this section describes
required Targa(r) features support:
types:
* type 1 (uncompressed 8bit paletted with 24bit/32bit palette)
* type 2 (uncompressed 24bit/32bit true color, glquake supported this)
* type 3 (uncompressed 8bit greyscale)
* type 9 (RLE compressed 8bit paletted with 24bit/32bit palette)
* type 10 (RLE compressed 24bit/32bit true color, glquake supported this)
* type 11 (RLE compressed 8bit greyscale)
* attribute bit 0x20 (Origin At Top Left, top to bottom, left to right)

image formats guaranteed to be supported:
* tga
* pcx
* lmp

image formats that are optional:
* png
* jpg

mdl/spr/spr32 examples:&lt;br&gt;
skins are named _A (A being a number) and skingroups are named like _A_B&lt;br&gt;
these act as suffixes on the model name...&lt;br&gt;
example names for skin _2_1 of model &quot;progs/armor.mdl&quot;:
&lt;pre&gt;
game/override/progs/armor.mdl_2_1.tga
game/textures/progs/armor.mdl_2_1.tga
game/progs/armor.mdl_2_1.tga
&lt;/pre&gt;
example names for skin _0 of the model &quot;progs/armor.mdl&quot;:
&lt;pre&gt;
game/override/progs/armor.mdl_0.tga
game/textures/progs/armor.mdl_0.tga
game/progs/armor.mdl_0.tga
&lt;/pre&gt;
Note that there can be more skins files (of the _0 naming) than the mdl
contains, this is only useful to save space in the .mdl file if classic quake
compatibility is not a concern.

bsp/md2/md3 examples:&lt;br&gt;
example names for the texture &quot;quake&quot; of model &quot;maps/start.bsp&quot;:
&lt;pre&gt;
game/override/quake.tga
game/textures/quake.tga
game/quake.tga
&lt;/pre&gt;

sbar/menu/console textures: for example the texture &quot;conchars&quot; (console font) in gfx.wad
&lt;pre&gt;
game/override/gfx/conchars.tga
game/textures/gfx/conchars.tga
game/gfx/conchars.tga
&lt;/pre&gt;
[[Category:DarkPlaces]]</text>
      <sha1>fw0n349j39avdnc7zjvrabtx78g5i9e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP GFX EXTERNALTEXTURES PERMAPTEXTURES</title>
    <ns>0</ns>
    <id>246</id>
    <revision>
      <id>435</id>
      <timestamp>2008-02-28T13:39:31Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Q1BSP and HLBSP map loading loads external textures found in textures/&lt;mapname&gt;/ as well as textures/.  Where mapname is the bsp filename minus the extension (typically .bsp) and minus map...</comment>
      <text xml:space="preserve" bytes="587">Q1BSP and HLBSP map loading loads external textures found in textures/&lt;mapname&gt;/ as well as textures/.

Where mapname is the bsp filename minus the extension (typically .bsp) and minus maps/ if it is in maps/ (any other path is not removed)
For example:
* maps/e1m1.bsp uses textures in the directory textures/e1m1/ and falls back to textures/
* maps/b_batt0.bsp uses textures in the directory textures/b_batt0.bsp and falls back to textures/

As a more extreme example:
* progs/something/blah.bsp uses textures in the directory textures/progs/something/blah/ and falls back to textures/</text>
      <sha1>5n8qx72w4zosu1409kcah4do171c5ie</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1760</id>
      <parentid>435</parentid>
      <timestamp>2013-03-25T00:12:03Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="611">Q1BSP and HLBSP map loading loads external textures found in textures/&lt;mapname&gt;/ as well as textures/.

Where mapname is the bsp filename minus the extension (typically .bsp) and minus maps/ if it is in maps/ (any other path is not removed)
For example:
* maps/e1m1.bsp uses textures in the directory textures/e1m1/ and falls back to textures/
* maps/b_batt0.bsp uses textures in the directory textures/b_batt0.bsp and falls back to textures/

As a more extreme example:
* progs/something/blah.bsp uses textures in the directory textures/progs/something/blah/ and falls back to textures/
[[Category:DarkPlaces]]</text>
      <sha1>5l8hmih15eqvoc0ryvas3q4o4o92447</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP GFX FOG</title>
    <ns>0</ns>
    <id>247</id>
    <revision>
      <id>436</id>
      <timestamp>2008-02-28T13:40:13Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Worldspawn fields:  &quot;fog&quot; (parameters: &quot;density red green blue&quot;, example: &quot;0.1 0.3 0.3 0.3&quot;)  Global fog for the map, can not be changed by QuakeC.</comment>
      <text xml:space="preserve" bytes="147">Worldspawn fields:

&quot;fog&quot; (parameters: &quot;density red green blue&quot;, example: &quot;0.1 0.3 0.3 0.3&quot;)

Global fog for the map, can not be changed by QuakeC.</text>
      <sha1>cv646i1umx8q9eroxl0k04xtihwjsdl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1761</id>
      <parentid>436</parentid>
      <timestamp>2013-03-25T00:12:15Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="171">Worldspawn fields:

&quot;fog&quot; (parameters: &quot;density red green blue&quot;, example: &quot;0.1 0.3 0.3 0.3&quot;)

Global fog for the map, can not be changed by QuakeC.
[[Category:DarkPlaces]]</text>
      <sha1>qyg9kkac7rxvjllh7toz04o3702vy3a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP GFX QUAKE3MODELTAGS</title>
    <ns>0</ns>
    <id>248</id>
    <revision>
      <id>437</id>
      <timestamp>2008-02-28T13:42:44Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Field definitions: &lt;pre&gt; .entity tag_entity; // Entity this is attached to (call setattachment to set this) .float tag_index;   // Which tag on that entity (0 is relative to the entity, &gt; ...</comment>
      <text xml:space="preserve" bytes="1226">Field definitions:
&lt;pre&gt;
.entity tag_entity; // Entity this is attached to (call setattachment to set this)
.float tag_index;   // Which tag on that entity (0 is relative to the entity, &gt; 0
                    // is an index into the tags on the model if it has any)
                    //(call setattachment to set this)
&lt;/pre&gt;

Builtin definitions:
&lt;pre&gt;
// Attachs e to a tag on tagentity (note: use &quot;&quot; to attach to entity origin/angles
// instead of a tag)
void(entity e, entity tagentity, string tagname) setattachment = #443;
&lt;/pre&gt;

Allows entities to be visually attached to model tags (which follow animations perfectly) on other entities, for example attaching a weapon to a player's hand, or upper body attached to lower body, allowing it to change angles and frame separately.

Note:
* origin and angles are relative to the tag, use '0 0 0' for both if you want it to follow exactly, this is similar to viewmodelforclient's behavior).
* If the tag is not found, it defaults to &quot;&quot; (attach to origin/angles of entity)
* Attaching to world turns off attachment
* The entity that this is attached to must be visible for this to work
* If an entity is attached to the player entity it will not be drawn in first person.</text>
      <sha1>biyknuoohuw5vsv3vv9maax0h6g1xfi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1762</id>
      <parentid>437</parentid>
      <timestamp>2013-03-25T00:12:23Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="1250">Field definitions:
&lt;pre&gt;
.entity tag_entity; // Entity this is attached to (call setattachment to set this)
.float tag_index;   // Which tag on that entity (0 is relative to the entity, &gt; 0
                    // is an index into the tags on the model if it has any)
                    //(call setattachment to set this)
&lt;/pre&gt;

Builtin definitions:
&lt;pre&gt;
// Attachs e to a tag on tagentity (note: use &quot;&quot; to attach to entity origin/angles
// instead of a tag)
void(entity e, entity tagentity, string tagname) setattachment = #443;
&lt;/pre&gt;

Allows entities to be visually attached to model tags (which follow animations perfectly) on other entities, for example attaching a weapon to a player's hand, or upper body attached to lower body, allowing it to change angles and frame separately.

Note:
* origin and angles are relative to the tag, use '0 0 0' for both if you want it to follow exactly, this is similar to viewmodelforclient's behavior).
* If the tag is not found, it defaults to &quot;&quot; (attach to origin/angles of entity)
* Attaching to world turns off attachment
* The entity that this is attached to must be visible for this to work
* If an entity is attached to the player entity it will not be drawn in first person.
[[Category:DarkPlaces]]</text>
      <sha1>8qslrcz95m1ypanzuou1g3orf05ga9p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP GFX SKINFILES</title>
    <ns>0</ns>
    <id>249</id>
    <revision>
      <id>438</id>
      <timestamp>2008-02-28T13:44:42Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Alias models (mdl, md2, md3) can have .skin files to replace conventional texture naming, these have a naming format such as: &lt;pre&gt; progs/test.md3_0.skin progs/test.md3_1.skin ... &lt;/pre&gt;  ...</comment>
      <text xml:space="preserve" bytes="1210">Alias models (mdl, md2, md3) can have .skin files to replace conventional texture naming, these have a naming format such as:
&lt;pre&gt;
progs/test.md3_0.skin
progs/test.md3_1.skin
...
&lt;/pre&gt;

These files contain replace commands (replace meshname shadername), example:
&lt;pre&gt;
replace &quot;helmet&quot; &quot;progs/test/helmet1.tga&quot; // this is a mesh shader replacement
replace &quot;teamstripes&quot; &quot;progs/test/redstripes.tga&quot;
replace &quot;visor&quot; &quot;common/nodraw&quot; // this makes the visor mesh invisible
&lt;/pre&gt;
It is not possible to rename tags using this format

Or the Quake3 syntax (100% compatible with Quake3's .skin files):
&lt;pre&gt;
helmet,progs/test/helmet1.tga // this is a mesh shader replacement
teamstripes,progs/test/redstripes.tga
visor,common/nodraw // this makes the visor mesh invisible
tag_camera, // this defines that the first tag in the model is called tag_camera
tag_test, // this defines that the second tag in the model is called tag_test
&lt;/pre&gt;

Any names that are not replaced are automatically show up as a grey checkerboard to indicate the error status, and &quot;common/nodraw&quot; is a special case that is invisible.
This feature is intended to allow multiple skin sets on md3 models (which otherwise only have one skin set).</text>
      <sha1>7olfo0f4oxzc1f8c8lze0jdzeu22td4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>439</id>
      <parentid>438</parentid>
      <timestamp>2008-02-28T13:45:47Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="1206">Alias models (mdl, md2, md3) can have .skin files to replace conventional texture naming, these have a naming format such as:
&lt;pre&gt;
progs/test.md3_0.skin
progs/test.md3_1.skin
...
&lt;/pre&gt;

These files contain replace commands (replace meshname shadername), example:
&lt;pre&gt;
replace &quot;helmet&quot; &quot;progs/test/helmet1.tga&quot; // this is a mesh shader replacement
replace &quot;teamstripes&quot; &quot;progs/test/redstripes.tga&quot;
replace &quot;visor&quot; &quot;common/nodraw&quot; // this makes the visor mesh invisible
&lt;/pre&gt;
It is not possible to rename tags using this format

Or the Quake3 syntax (100% compatible with Quake3's .skin files):
&lt;pre&gt;
helmet,progs/test/helmet1.tga // this is a mesh shader replacement
teamstripes,progs/test/redstripes.tga
visor,common/nodraw // this makes the visor mesh invisible
tag_camera, // this defines that the first tag in the model is called tag_camera
tag_test, // this defines that the second tag in the model is called tag_test
&lt;/pre&gt;

Any names that are not replaced automatically show up as a grey checkerboard to indicate the error status, and &quot;common/nodraw&quot; is a special case that is invisible.
This feature is intended to allow multiple skin sets on md3 models (which otherwise only have one skin set).</text>
      <sha1>czgtn7fiocqwho7n04mspi0kmcx1jmi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1763</id>
      <parentid>439</parentid>
      <timestamp>2013-03-25T00:12:31Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="1230">Alias models (mdl, md2, md3) can have .skin files to replace conventional texture naming, these have a naming format such as:
&lt;pre&gt;
progs/test.md3_0.skin
progs/test.md3_1.skin
...
&lt;/pre&gt;

These files contain replace commands (replace meshname shadername), example:
&lt;pre&gt;
replace &quot;helmet&quot; &quot;progs/test/helmet1.tga&quot; // this is a mesh shader replacement
replace &quot;teamstripes&quot; &quot;progs/test/redstripes.tga&quot;
replace &quot;visor&quot; &quot;common/nodraw&quot; // this makes the visor mesh invisible
&lt;/pre&gt;
It is not possible to rename tags using this format

Or the Quake3 syntax (100% compatible with Quake3's .skin files):
&lt;pre&gt;
helmet,progs/test/helmet1.tga // this is a mesh shader replacement
teamstripes,progs/test/redstripes.tga
visor,common/nodraw // this makes the visor mesh invisible
tag_camera, // this defines that the first tag in the model is called tag_camera
tag_test, // this defines that the second tag in the model is called tag_test
&lt;/pre&gt;

Any names that are not replaced automatically show up as a grey checkerboard to indicate the error status, and &quot;common/nodraw&quot; is a special case that is invisible.
This feature is intended to allow multiple skin sets on md3 models (which otherwise only have one skin set).
[[Category:DarkPlaces]]</text>
      <sha1>m7sw8z3eb1col7vtwf3ngqrhs7ymjfr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP GFX SKYBOX</title>
    <ns>0</ns>
    <id>250</id>
    <revision>
      <id>440</id>
      <timestamp>2008-02-28T13:46:37Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Worldspawn fields:  &quot;sky&quot; (parameters: &quot;basename&quot;, example: &quot;mtnsun_&quot; would load &quot;mtnsun_up.tga&quot; and &quot;mtnsun_rt.tga&quot; and similar names, note: &quot;sky&quot; is also used the same way by Quake2)  Gl...</comment>
      <text xml:space="preserve" bytes="242">Worldspawn fields:

&quot;sky&quot; (parameters: &quot;basename&quot;, example: &quot;mtnsun_&quot; would load &quot;mtnsun_up.tga&quot; and &quot;mtnsun_rt.tga&quot; and similar names, note: &quot;sky&quot; is also used the same way by Quake2)

Global skybox for the map, can not be changed by QuakeC.</text>
      <sha1>4n6kyiq4sy3b14nurn15fj6qnr66ser</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1764</id>
      <parentid>440</parentid>
      <timestamp>2013-03-25T00:12:40Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="266">Worldspawn fields:

&quot;sky&quot; (parameters: &quot;basename&quot;, example: &quot;mtnsun_&quot; would load &quot;mtnsun_up.tga&quot; and &quot;mtnsun_rt.tga&quot; and similar names, note: &quot;sky&quot; is also used the same way by Quake2)

Global skybox for the map, can not be changed by QuakeC.
[[Category:DarkPlaces]]</text>
      <sha1>imcru2nnb3t4unkxry23tedle1wr2l3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP HALFLIFE MAP</title>
    <ns>0</ns>
    <id>251</id>
    <revision>
      <id>441</id>
      <timestamp>2008-02-28T13:47:03Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Simply indicates that the engine supports HalfLife maps (BSP version 30, NOT the QER RGBA ones which are also version 30).</comment>
      <text xml:space="preserve" bytes="122">Simply indicates that the engine supports HalfLife maps (BSP version 30, NOT the QER RGBA ones which are also version 30).</text>
      <sha1>e3nrai3e3t7co8rpfa6w9n7zpzkehe2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1765</id>
      <parentid>441</parentid>
      <timestamp>2013-03-25T00:12:49Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="146">Simply indicates that the engine supports HalfLife maps (BSP version 30, NOT the QER RGBA ones which are also version 30).
[[Category:DarkPlaces]]</text>
      <sha1>clucvmcz5bc0zspa9p3br30t56rapir</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP HALFLIFE MAP CVAR</title>
    <ns>0</ns>
    <id>252</id>
    <revision>
      <id>442</id>
      <timestamp>2008-02-28T13:47:29Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Cvar:  halflifebsp 0/1  The engine sets this cvar when loading a map to indicate if it is halflife format or not.</comment>
      <text xml:space="preserve" bytes="113">Cvar:

halflifebsp 0/1

The engine sets this cvar when loading a map to indicate if it is halflife format or not.</text>
      <sha1>kt2gk53cvv4rt17i6rud4h5wld2jsc6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1766</id>
      <parentid>442</parentid>
      <timestamp>2013-03-25T00:12:58Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="137">Cvar:

halflifebsp 0/1

The engine sets this cvar when loading a map to indicate if it is halflife format or not.
[[Category:DarkPlaces]]</text>
      <sha1>g5jrn8gs4ayfjbggbp46e79qxo7hhy4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP HALFLIFE SPRITE</title>
    <ns>0</ns>
    <id>253</id>
    <revision>
      <id>443</id>
      <timestamp>2008-02-28T13:47:48Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Simply indicates that the engine supports HalfLife sprites.</comment>
      <text xml:space="preserve" bytes="59">Simply indicates that the engine supports HalfLife sprites.</text>
      <sha1>1c3e50xirx68wkk7yjleuzg0aae1u25</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1767</id>
      <parentid>443</parentid>
      <timestamp>2013-03-25T00:13:05Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="83">Simply indicates that the engine supports HalfLife sprites.
[[Category:DarkPlaces]]</text>
      <sha1>bji072gnq6hma1hr7132z90fgqtln5r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP INPUTBUTTONS</title>
    <ns>0</ns>
    <id>254</id>
    <revision>
      <id>444</id>
      <timestamp>2008-02-28T13:49:02Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Field definitions: &lt;pre&gt; .float button3; .float button4; .float button5; .float button6; .float button7; .float button8; &lt;/pre&gt;  Set to the state of the +button3, +button4, +button5, +butt...</comment>
      <text xml:space="preserve" bytes="327">Field definitions:
&lt;pre&gt;
.float button3;
.float button4;
.float button5;
.float button6;
.float button7;
.float button8;
&lt;/pre&gt;

Set to the state of the +button3, +button4, +button5, +button6, +button7, and +button8 buttons from the client, this does not involve protocol changes (the extra 6 button bits were simply not used).</text>
      <sha1>53iy7epejcs4ydoiazijgt8443mqu3u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1768</id>
      <parentid>444</parentid>
      <timestamp>2013-03-25T00:13:12Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="351">Field definitions:
&lt;pre&gt;
.float button3;
.float button4;
.float button5;
.float button6;
.float button7;
.float button8;
&lt;/pre&gt;

Set to the state of the +button3, +button4, +button5, +button6, +button7, and +button8 buttons from the client, this does not involve protocol changes (the extra 6 button bits were simply not used).
[[Category:DarkPlaces]]</text>
      <sha1>mnh3li5ntndieum0f3tz0oh6wyzhh19</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP LITSPRITES</title>
    <ns>0</ns>
    <id>255</id>
    <revision>
      <id>445</id>
      <timestamp>2008-02-28T13:50:26Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Indicates this engine supports lighting on sprites, any sprite with ! in its filename (both on disk and in the qc) will be lit rather than having forced EF_FULLBRIGHT (EF_FULLBRIGHT on the...</comment>
      <text xml:space="preserve" bytes="241">Indicates this engine supports lighting on sprites, any sprite with ! in its filename (both on disk and in the qc) will be lit rather than having forced EF_FULLBRIGHT (EF_FULLBRIGHT on the entity can still force these sprites to not be lit).</text>
      <sha1>t2cedwj2w51kvowefk81otf57hunioa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1769</id>
      <parentid>445</parentid>
      <timestamp>2013-03-25T00:13:19Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="265">Indicates this engine supports lighting on sprites, any sprite with ! in its filename (both on disk and in the qc) will be lit rather than having forced EF_FULLBRIGHT (EF_FULLBRIGHT on the entity can still force these sprites to not be lit).
[[Category:DarkPlaces]]</text>
      <sha1>inw7qmw569e7yqfn0mwoouy58du95zz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP LITSUPPORT</title>
    <ns>0</ns>
    <id>256</id>
    <revision>
      <id>446</id>
      <timestamp>2008-02-28T13:51:19Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Indicates this engine loads .lit files for any quake1 format .bsp files it loads to enhance maps with colored lighting.  Implementation description: these files begin with the header QLIT ...</comment>
      <text xml:space="preserve" bytes="805">Indicates this engine loads .lit files for any quake1 format .bsp files it loads to enhance maps with colored lighting.

Implementation description: these files begin with the header QLIT followed by version number 1 (as little endian 32bit), the rest of the file is a replacement lightmaps lump, except being 3x as large as the lightmaps lump of the map it matches up with (and yes the between-lightmap padding is expanded 3x to keep this consistent), so the lightmap offset in each surface is simply multiplied by 3 during loading to properly index the lit data, and the lit file is loaded instead of the lightmap lump, other renderer changes are needed to display these of course...

See the litsupport.zip sample code (almost a tutorial) at http://icculus.org/twilight/darkplaces for more information.</text>
      <sha1>rnn7j0v7843h23obc7bjzelas3vhczq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1770</id>
      <parentid>446</parentid>
      <timestamp>2013-03-25T00:13:31Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="829">Indicates this engine loads .lit files for any quake1 format .bsp files it loads to enhance maps with colored lighting.

Implementation description: these files begin with the header QLIT followed by version number 1 (as little endian 32bit), the rest of the file is a replacement lightmaps lump, except being 3x as large as the lightmaps lump of the map it matches up with (and yes the between-lightmap padding is expanded 3x to keep this consistent), so the lightmap offset in each surface is simply multiplied by 3 during loading to properly index the lit data, and the lit file is loaded instead of the lightmap lump, other renderer changes are needed to display these of course...

See the litsupport.zip sample code (almost a tutorial) at http://icculus.org/twilight/darkplaces for more information.
[[Category:DarkPlaces]]</text>
      <sha1>c6zq8du5gnxdbyn5uzgbjaqptcd40jv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP MONSTERWALK</title>
    <ns>0</ns>
    <id>257</id>
    <revision>
      <id>447</id>
      <timestamp>2008-02-28T13:52:45Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: MOVETYPE_WALK is permitted on non-clients, so bots can move smoothly, run off ledges, etc, just like a real player.</comment>
      <text xml:space="preserve" bytes="115">MOVETYPE_WALK is permitted on non-clients, so bots can move smoothly, run off ledges, etc, just like a real player.</text>
      <sha1>exmgm1d97dzqtyjx143g9agy39vt7vs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1771</id>
      <parentid>447</parentid>
      <timestamp>2013-03-25T00:13:40Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="139">MOVETYPE_WALK is permitted on non-clients, so bots can move smoothly, run off ledges, etc, just like a real player.
[[Category:DarkPlaces]]</text>
      <sha1>6kymex5fyuux2otity7qeisvwlfjlwh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP MOVETYPEBOUNCEMISSILE</title>
    <ns>0</ns>
    <id>258</id>
    <revision>
      <id>448</id>
      <timestamp>2008-02-28T13:53:27Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: .movetype definitions: &lt;pre&gt; //float MOVETYPE_BOUNCEMISSILE = 11; // already in defs.qc &lt;/pre&gt; MOVETYPE_BOUNCE but without gravity, and with full reflection (no speed loss like grenades ha...</comment>
      <text xml:space="preserve" bytes="231">.movetype definitions:
&lt;pre&gt;
//float MOVETYPE_BOUNCEMISSILE = 11; // already in defs.qc
&lt;/pre&gt;
MOVETYPE_BOUNCE but without gravity, and with full reflection (no speed loss like grenades have), in other words - bouncing laser bolts.</text>
      <sha1>5wgibr0myrnu7tsedrgvviz964tz60i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1772</id>
      <parentid>448</parentid>
      <timestamp>2013-03-25T00:14:15Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="255">.movetype definitions:
&lt;pre&gt;
//float MOVETYPE_BOUNCEMISSILE = 11; // already in defs.qc
&lt;/pre&gt;
MOVETYPE_BOUNCE but without gravity, and with full reflection (no speed loss like grenades have), in other words - bouncing laser bolts.
[[Category:DarkPlaces]]</text>
      <sha1>3dcraf9q21mvw73r2jw1kq513gzz24w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP MOVETYPEFOLLOW</title>
    <ns>0</ns>
    <id>259</id>
    <revision>
      <id>449</id>
      <timestamp>2008-02-28T13:54:38Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: .movetype definitions: &lt;pre&gt; float MOVETYPE_FOLLOW = 12; &lt;/pre&gt;  MOVETYPE_FOLLOW implemented, this uses existing entity fields in unusual ways: * aiment - the entity this is attached to. *...</comment>
      <text xml:space="preserve" bytes="936">.movetype definitions:
&lt;pre&gt;
float MOVETYPE_FOLLOW = 12;
&lt;/pre&gt;

MOVETYPE_FOLLOW implemented, this uses existing entity fields in unusual ways:
* aiment - the entity this is attached to.
* punchangle - the original angles when the follow began.
* view_ofs - the relative origin (note that this is un-rotated by punchangle, and that is actually the only purpose of punchangle).
* v_angle - the relative angles.

Here's an example of how you would set a bullet hole sprite to follow a bmodel it was created on, even if the bmodel rotates:
&lt;pre&gt;
hole.movetype = MOVETYPE_FOLLOW; // make the hole follow
hole.solid = SOLID_NOT;          // MOVETYPE_FOLLOW is always non-solid
hole.aiment = bmodel;            // make the hole follow bmodel
hole.punchangle = bmodel.angles; // the original angles of bmodel
hole.view_ofs = hole.origin - bmodel.origin; // relative origin
hole.v_angle = hole.angles - bmodel.angles;  // relative angles
&lt;/pre&gt;</text>
      <sha1>ahuu34jqywyjzlajnlhjbqwedushc6u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1773</id>
      <parentid>449</parentid>
      <timestamp>2013-03-25T00:14:23Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="960">.movetype definitions:
&lt;pre&gt;
float MOVETYPE_FOLLOW = 12;
&lt;/pre&gt;

MOVETYPE_FOLLOW implemented, this uses existing entity fields in unusual ways:
* aiment - the entity this is attached to.
* punchangle - the original angles when the follow began.
* view_ofs - the relative origin (note that this is un-rotated by punchangle, and that is actually the only purpose of punchangle).
* v_angle - the relative angles.

Here's an example of how you would set a bullet hole sprite to follow a bmodel it was created on, even if the bmodel rotates:
&lt;pre&gt;
hole.movetype = MOVETYPE_FOLLOW; // make the hole follow
hole.solid = SOLID_NOT;          // MOVETYPE_FOLLOW is always non-solid
hole.aiment = bmodel;            // make the hole follow bmodel
hole.punchangle = bmodel.angles; // the original angles of bmodel
hole.view_ofs = hole.origin - bmodel.origin; // relative origin
hole.v_angle = hole.angles - bmodel.angles;  // relative angles
&lt;/pre&gt;
[[Category:DarkPlaces]]</text>
      <sha1>ai8kmowj439k8atj95dnw0y09l4qgh6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC CHANGEPITCH</title>
    <ns>0</ns>
    <id>261</id>
    <revision>
      <id>453</id>
      <timestamp>2008-02-28T14:20:51Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Field definitions: &lt;pre&gt; .float idealpitch; .float pitch_speed; &lt;/pre&gt;  Builtin definitions: &lt;pre&gt; void(entity ent) changepitch = #63; &lt;/pre&gt;  Equivilant to changeyaw, ent is normally self...</comment>
      <text xml:space="preserve" bytes="213">Field definitions:
&lt;pre&gt;
.float idealpitch;
.float pitch_speed;
&lt;/pre&gt;

Builtin definitions:
&lt;pre&gt;
void(entity ent) changepitch = #63;
&lt;/pre&gt;

Equivilant to changeyaw, ent is normally self. (this was a Q2 builtin)</text>
      <sha1>l9xtj6eegq2up5dkfpiktugx1sq4lt0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1775</id>
      <parentid>453</parentid>
      <timestamp>2013-03-25T00:14:38Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="237">Field definitions:
&lt;pre&gt;
.float idealpitch;
.float pitch_speed;
&lt;/pre&gt;

Builtin definitions:
&lt;pre&gt;
void(entity ent) changepitch = #63;
&lt;/pre&gt;

Equivilant to changeyaw, ent is normally self. (this was a Q2 builtin)
[[Category:DarkPlaces]]</text>
      <sha1>2ig4yg8olvvak0a6n1gs9hkr0rzz94c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC COPYENTITY</title>
    <ns>0</ns>
    <id>262</id>
    <revision>
      <id>454</id>
      <timestamp>2008-02-28T14:21:55Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; void(entity from, entity to) copyentity = #400; &lt;/pre&gt;  Copies all data in the entity to another entity.</comment>
      <text xml:space="preserve" bytes="131">Builtin definitions:
&lt;pre&gt;
void(entity from, entity to) copyentity = #400;
&lt;/pre&gt;

Copies all data in the entity to another entity.</text>
      <sha1>2kdnudtnvbm7ifs4osf7866xvauvbon</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1776</id>
      <parentid>454</parentid>
      <timestamp>2013-03-25T00:14:45Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="155">Builtin definitions:
&lt;pre&gt;
void(entity from, entity to) copyentity = #400;
&lt;/pre&gt;

Copies all data in the entity to another entity.
[[Category:DarkPlaces]]</text>
      <sha1>9jgzfeaym9mk7w5mvj880mqtea3x7t2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC CVAR DEFSTRING</title>
    <ns>0</ns>
    <id>264</id>
    <revision>
      <id>458</id>
      <timestamp>2008-02-28T14:24:06Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; string(string s) cvar_defstring = #482; &lt;/pre&gt;  Returns the default value of a cvar, as a tempstring.</comment>
      <text xml:space="preserve" bytes="128">Builtin definitions:
&lt;pre&gt;
string(string s) cvar_defstring = #482;
&lt;/pre&gt;

Returns the default value of a cvar, as a tempstring.</text>
      <sha1>5u79wwpigoz6s2e6pxzpec8638zr4jj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1778</id>
      <parentid>458</parentid>
      <timestamp>2013-03-25T00:14:58Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="152">Builtin definitions:
&lt;pre&gt;
string(string s) cvar_defstring = #482;
&lt;/pre&gt;

Returns the default value of a cvar, as a tempstring.
[[Category:DarkPlaces]]</text>
      <sha1>b6bc27qqoajly7la5r1rhvw2qdwgvm7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC CVAR STRING</title>
    <ns>0</ns>
    <id>263</id>
    <revision>
      <id>455</id>
      <timestamp>2008-02-28T14:22:21Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; string(string s) cvar_defstring = #482; &lt;/pre&gt;  Returns the default value of a cvar, as a tempstring.</comment>
      <text xml:space="preserve" bytes="128">Builtin definitions:
&lt;pre&gt;
string(string s) cvar_defstring = #482;
&lt;/pre&gt;

Returns the default value of a cvar, as a tempstring.</text>
      <sha1>5u79wwpigoz6s2e6pxzpec8638zr4jj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>456</id>
      <parentid>455</parentid>
      <timestamp>2008-02-28T14:23:03Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="117">Builtin definitions:
&lt;pre&gt;
string(string s) cvar_string = #448;
&lt;/pre&gt;

Returns the value of a cvar, as a tempstring.</text>
      <sha1>rth5n7nrrn0jtlo99v5i39vi96eyl48</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1777</id>
      <parentid>456</parentid>
      <timestamp>2013-03-25T00:14:52Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="141">Builtin definitions:
&lt;pre&gt;
string(string s) cvar_string = #448;
&lt;/pre&gt;

Returns the value of a cvar, as a tempstring.
[[Category:DarkPlaces]]</text>
      <sha1>6kxe50389wgjfcmdcnw8yvzm6djubhm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC DP QC ASINACOSATANATAN2TAN</title>
    <ns>0</ns>
    <id>260</id>
    <revision>
      <id>451</id>
      <timestamp>2008-02-28T14:19:56Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Constant definitions: &lt;pre&gt; float DEG2RAD = 0.0174532925199432957692369076848861271344287188854172545609719144; float RAD2DEG = 57.295779513082320876798154814105170332405472466564321549160...</comment>
      <text xml:space="preserve" bytes="1843">Constant definitions:
&lt;pre&gt;
float DEG2RAD = 0.0174532925199432957692369076848861271344287188854172545609719144;
float RAD2DEG = 57.2957795130823208767981548141051703324054724665643215491602438612;
float PI      = 3.1415926535897932384626433832795028841971693993751058209749445923;
&lt;/pre&gt;

Builtin definitions:
&lt;pre&gt;
float(float s) asin = #471; // Returns angle in radians for a given sin() value,
                            // the result is in the range -PI*0.5 to PI*0.5
float(float c) acos = #472; // Returns angle in radians for a given cos() value,
                            // the result is in the range 0 to PI
float(float t) atan = #473; // Returns angle in radians for a given tan() value,
                            //the result is in the range -PI*0.5 to PI*0.5
float(float c, float s) atan2 = #474; // Returns angle in radians for a given cos()
                                      // and sin() value pair, the result is in the
                                      // range -PI to PI (this is identical to vectoyaw
                                      // except it returns radians rather than degrees)
float(float a) tan = #475; // Returns tangent value (which is simply sin(a)/cos(a))
                           // for the given angle in radians, the result is in the
                           // range -infinity to +infinity
&lt;/pre&gt;

Useful math functions for analyzing vectors, note that these all use angles in radians (just like the cos/sin functions) not degrees unlike makevectors/vectoyaw/vectoangles, so be sure to do the appropriate conversions (multiply by DEG2RAD or RAD2DEG as needed).
Note:
* atan2 can take unnormalized vectors (just like vectoyaw), and the function was included only for completeness (more often you want vectoyaw or vectoangles), atan2(v_x,v_y) * RAD2DEG gives the same result as vectoyaw(v)</text>
      <sha1>4y84is1cmynruds4riqdp92mbmjr443</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>452</id>
      <parentid>451</parentid>
      <timestamp>2008-02-28T14:20:10Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="1844">Constant definitions:
&lt;pre&gt;
float DEG2RAD = 0.0174532925199432957692369076848861271344287188854172545609719144;
float RAD2DEG = 57.2957795130823208767981548141051703324054724665643215491602438612;
float PI      = 3.1415926535897932384626433832795028841971693993751058209749445923;
&lt;/pre&gt;

Builtin definitions:
&lt;pre&gt;
float(float s) asin = #471; // Returns angle in radians for a given sin() value,
                            // the result is in the range -PI*0.5 to PI*0.5
float(float c) acos = #472; // Returns angle in radians for a given cos() value,
                            // the result is in the range 0 to PI
float(float t) atan = #473; // Returns angle in radians for a given tan() value,
                            //the result is in the range -PI*0.5 to PI*0.5
float(float c, float s) atan2 = #474; // Returns angle in radians for a given cos()
                                      // and sin() value pair, the result is in the
                                      // range -PI to PI (this is identical to vectoyaw
                                      // except it returns radians rather than degrees)
float(float a) tan = #475; // Returns tangent value (which is simply sin(a)/cos(a))
                           // for the given angle in radians, the result is in the
                           // range -infinity to +infinity
&lt;/pre&gt;

Useful math functions for analyzing vectors, note that these all use angles in radians (just like the cos/sin functions) not degrees unlike makevectors/vectoyaw/vectoangles, so be sure to do the appropriate conversions (multiply by DEG2RAD or RAD2DEG as needed).

Note:
* atan2 can take unnormalized vectors (just like vectoyaw), and the function was included only for completeness (more often you want vectoyaw or vectoangles), atan2(v_x,v_y) * RAD2DEG gives the same result as vectoyaw(v)</text>
      <sha1>99fhs1pv3kl0b8zugymm9qc8zu0ku40</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1774</id>
      <parentid>452</parentid>
      <timestamp>2013-03-25T00:14:32Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="1868">Constant definitions:
&lt;pre&gt;
float DEG2RAD = 0.0174532925199432957692369076848861271344287188854172545609719144;
float RAD2DEG = 57.2957795130823208767981548141051703324054724665643215491602438612;
float PI      = 3.1415926535897932384626433832795028841971693993751058209749445923;
&lt;/pre&gt;

Builtin definitions:
&lt;pre&gt;
float(float s) asin = #471; // Returns angle in radians for a given sin() value,
                            // the result is in the range -PI*0.5 to PI*0.5
float(float c) acos = #472; // Returns angle in radians for a given cos() value,
                            // the result is in the range 0 to PI
float(float t) atan = #473; // Returns angle in radians for a given tan() value,
                            //the result is in the range -PI*0.5 to PI*0.5
float(float c, float s) atan2 = #474; // Returns angle in radians for a given cos()
                                      // and sin() value pair, the result is in the
                                      // range -PI to PI (this is identical to vectoyaw
                                      // except it returns radians rather than degrees)
float(float a) tan = #475; // Returns tangent value (which is simply sin(a)/cos(a))
                           // for the given angle in radians, the result is in the
                           // range -infinity to +infinity
&lt;/pre&gt;

Useful math functions for analyzing vectors, note that these all use angles in radians (just like the cos/sin functions) not degrees unlike makevectors/vectoyaw/vectoangles, so be sure to do the appropriate conversions (multiply by DEG2RAD or RAD2DEG as needed).

Note:
* atan2 can take unnormalized vectors (just like vectoyaw), and the function was included only for completeness (more often you want vectoyaw or vectoangles), atan2(v_x,v_y) * RAD2DEG gives the same result as vectoyaw(v)
[[Category:DarkPlaces]]</text>
      <sha1>d4suyodpoane22u8cnb17218m7lsfbv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC ENTITYDATA</title>
    <ns>0</ns>
    <id>468</id>
    <revision>
      <id>901</id>
      <timestamp>2008-07-07T10:00:15Z</timestamp>
      <contributor>
        <ip>79.69.20.187</ip>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; float() numentityfields = #496; string(float fieldnum) entityfieldname = #497; float(float fieldnum) entityfieldtype = #498; string(float fieldnum, entity ent) g...</comment>
      <text xml:space="preserve" bytes="1382">Builtin definitions:
&lt;pre&gt;
float() numentityfields = #496;
string(float fieldnum) entityfieldname = #497;
float(float fieldnum) entityfieldtype = #498;
string(float fieldnum, entity ent) getentityfieldstring = #499;
float(float fieldnum, entity ent, string s) putentityfieldstring = #500;
&lt;/pre&gt;

Constants (Returned by entityfieldtype):
&lt;pre&gt;
float FIELD_STRING   = 1;
float FIELD_FLOAT    = 2;
float FIELD_VECTOR   = 3;
float FIELD_ENTITY   = 4;
float FIELD_FUNCTION = 6;
&lt;/pre&gt;

DP_QC_ENTITYDATA provides versatile functions intended for storing data from specific entities between level changes, but can be customized for some kind of partial savegame.

WARNING: .entity fields cannot be saved and restored between map loads as they will leave dangling pointers.

numentityfields returns the number of entity fields. NOT offsets. Vectors comprise 4 fields: v, v_x, v_y and v_z.

entityfieldname returns the name as a string, eg. &quot;origin&quot; or &quot;classname&quot; or whatever.

entityfieldtype returns a value that the constants represent, but the field may be of another type in more exotic progs.dat formats or compilers.

getentityfieldstring returns data as would be written to a savegame, eg... &quot;0.05&quot; (float), &quot;0 0 1&quot; (vector), or &quot;Hello World!&quot; (string). Function names can also be returned.

putentityfieldstring puts the data returned by getentityfieldstring back into the entity.</text>
      <sha1>s5pw39jk5y59sgqhqwfwd26xkq5vcuk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>902</id>
      <parentid>901</parentid>
      <timestamp>2008-07-07T10:06:47Z</timestamp>
      <contributor>
        <ip>79.69.20.187</ip>
      </contributor>
      <text xml:space="preserve" bytes="1810">Builtin definitions:
&lt;pre&gt;
float() numentityfields = #496;
string(float fieldnum) entityfieldname = #497;
float(float fieldnum) entityfieldtype = #498;
string(float fieldnum, entity ent) getentityfieldstring = #499;
float(float fieldnum, entity ent, string s) putentityfieldstring = #500;
&lt;/pre&gt;

Constants (Returned by entityfieldtype):
&lt;pre&gt;
float FIELD_STRING   = 1;
float FIELD_FLOAT    = 2;
float FIELD_VECTOR   = 3;
float FIELD_ENTITY   = 4;
float FIELD_FUNCTION = 6;
&lt;/pre&gt;

DP_QC_ENTITYDATA provides versatile functions intended for storing and retrieving field data without hard coding all the field names, in a versatile way. It was originally intended for automatically dumping entities to make them persist between levels, but was designed to be as versatile as possible. The data can be filtered by type or other criteria, and saved to file or sent to a database in combination with other functions.

'WARNING' .entity fields cannot be saved and restored between map loads as they will leave dangling pointers. Entity fields might still be useful, for example if you wish to dump entities straight to a web server for inspection there, in the event of an error.

''numentityfields'' returns the number of entity fields. NOT offsets. Vectors comprise 4 fields: v, v_x, v_y and v_z.

''entityfieldname'' returns the name as a string, eg. &quot;origin&quot; or &quot;classname&quot; or whatever.

''entityfieldtype'' returns a value that the constants represent, but the field may be of another type in more exotic progs.dat formats or compilers.

''getentityfieldstring'' returns data as would be written to a savegame, eg... &quot;0.05&quot; (float), &quot;0 0 1&quot; (vector), or &quot;Hello World!&quot; (string). Function names can also be returned.

''putentityfieldstring'' puts the data returned by getentityfieldstring back into the entity.</text>
      <sha1>f6nhsicy3o8wzflal9gtzh06bytadh7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>903</id>
      <parentid>902</parentid>
      <timestamp>2008-07-07T10:07:12Z</timestamp>
      <contributor>
        <ip>79.69.20.187</ip>
      </contributor>
      <text xml:space="preserve" bytes="1810">Builtin definitions:
&lt;pre&gt;
float() numentityfields = #496;
string(float fieldnum) entityfieldname = #497;
float(float fieldnum) entityfieldtype = #498;
string(float fieldnum, entity ent) getentityfieldstring = #499;
float(float fieldnum, entity ent, string s) putentityfieldstring = #500;
&lt;/pre&gt;

Constants (Returned by entityfieldtype):
&lt;pre&gt;
float FIELD_STRING   = 1;
float FIELD_FLOAT    = 2;
float FIELD_VECTOR   = 3;
float FIELD_ENTITY   = 4;
float FIELD_FUNCTION = 6;
&lt;/pre&gt;

DP_QC_ENTITYDATA provides versatile functions intended for storing and retrieving field data without hard coding all the field names, in a versatile way. It was originally intended for automatically dumping entities to make them persist between levels, but was designed to be as versatile as possible. The data can be filtered by type or other criteria, and saved to file or sent to a database in combination with other functions.

*WARNING* .entity fields cannot be saved and restored between map loads as they will leave dangling pointers. Entity fields might still be useful, for example if you wish to dump entities straight to a web server for inspection there, in the event of an error.

''numentityfields'' returns the number of entity fields. NOT offsets. Vectors comprise 4 fields: v, v_x, v_y and v_z.

''entityfieldname'' returns the name as a string, eg. &quot;origin&quot; or &quot;classname&quot; or whatever.

''entityfieldtype'' returns a value that the constants represent, but the field may be of another type in more exotic progs.dat formats or compilers.

''getentityfieldstring'' returns data as would be written to a savegame, eg... &quot;0.05&quot; (float), &quot;0 0 1&quot; (vector), or &quot;Hello World!&quot; (string). Function names can also be returned.

''putentityfieldstring'' puts the data returned by getentityfieldstring back into the entity.</text>
      <sha1>5msvwe7mjomskkwotsg5gxbzotn5uek</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>904</id>
      <parentid>903</parentid>
      <timestamp>2008-07-07T10:08:01Z</timestamp>
      <contributor>
        <ip>79.69.20.187</ip>
      </contributor>
      <text xml:space="preserve" bytes="1814">Builtin definitions:
&lt;pre&gt;
float() numentityfields = #496;
string(float fieldnum) entityfieldname = #497;
float(float fieldnum) entityfieldtype = #498;
string(float fieldnum, entity ent) getentityfieldstring = #499;
float(float fieldnum, entity ent, string s) putentityfieldstring = #500;
&lt;/pre&gt;

Constants (Returned by entityfieldtype):
&lt;pre&gt;
float FIELD_STRING   = 1;
float FIELD_FLOAT    = 2;
float FIELD_VECTOR   = 3;
float FIELD_ENTITY   = 4;
float FIELD_FUNCTION = 6;
&lt;/pre&gt;

DP_QC_ENTITYDATA provides versatile functions intended for storing and retrieving field data without hard coding all the field names, in a versatile way. It was originally intended for automatically dumping entities to make them persist between levels, but was designed to be as versatile as possible. The data can be filtered by type or other criteria, and saved to file or sent to a database in combination with other functions.

'''WARNING''' .entity fields cannot be saved and restored between map loads as they will leave dangling pointers. Entity fields might still be useful, for example if you wish to dump entities straight to a web server for inspection there, in the event of an error.

''numentityfields'' returns the number of entity fields. NOT offsets. Vectors comprise 4 fields: v, v_x, v_y and v_z.

''entityfieldname'' returns the name as a string, eg. &quot;origin&quot; or &quot;classname&quot; or whatever.

''entityfieldtype'' returns a value that the constants represent, but the field may be of another type in more exotic progs.dat formats or compilers.

''getentityfieldstring'' returns data as would be written to a savegame, eg... &quot;0.05&quot; (float), &quot;0 0 1&quot; (vector), or &quot;Hello World!&quot; (string). Function names can also be returned.

''putentityfieldstring'' puts the data returned by getentityfieldstring back into the entity.</text>
      <sha1>i7yuzmbynoirbe4lwlobom18hos1sx5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>905</id>
      <parentid>904</parentid>
      <timestamp>2008-07-07T10:08:13Z</timestamp>
      <contributor>
        <ip>79.69.20.187</ip>
      </contributor>
      <text xml:space="preserve" bytes="1815">Builtin definitions:
&lt;pre&gt;
float() numentityfields = #496;
string(float fieldnum) entityfieldname = #497;
float(float fieldnum) entityfieldtype = #498;
string(float fieldnum, entity ent) getentityfieldstring = #499;
float(float fieldnum, entity ent, string s) putentityfieldstring = #500;
&lt;/pre&gt;

Constants (Returned by entityfieldtype):
&lt;pre&gt;
float FIELD_STRING   = 1;
float FIELD_FLOAT    = 2;
float FIELD_VECTOR   = 3;
float FIELD_ENTITY   = 4;
float FIELD_FUNCTION = 6;
&lt;/pre&gt;

DP_QC_ENTITYDATA provides versatile functions intended for storing and retrieving field data without hard coding all the field names, in a versatile way. It was originally intended for automatically dumping entities to make them persist between levels, but was designed to be as versatile as possible. The data can be filtered by type or other criteria, and saved to file or sent to a database in combination with other functions.

'''WARNING:''' .entity fields cannot be saved and restored between map loads as they will leave dangling pointers. Entity fields might still be useful, for example if you wish to dump entities straight to a web server for inspection there, in the event of an error.

''numentityfields'' returns the number of entity fields. NOT offsets. Vectors comprise 4 fields: v, v_x, v_y and v_z.

''entityfieldname'' returns the name as a string, eg. &quot;origin&quot; or &quot;classname&quot; or whatever.

''entityfieldtype'' returns a value that the constants represent, but the field may be of another type in more exotic progs.dat formats or compilers.

''getentityfieldstring'' returns data as would be written to a savegame, eg... &quot;0.05&quot; (float), &quot;0 0 1&quot; (vector), or &quot;Hello World!&quot; (string). Function names can also be returned.

''putentityfieldstring'' puts the data returned by getentityfieldstring back into the entity.</text>
      <sha1>b1fxwmvn8ner7370wkxmasjzkxq766d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>906</id>
      <parentid>905</parentid>
      <timestamp>2008-07-07T10:08:34Z</timestamp>
      <contributor>
        <ip>79.69.20.187</ip>
      </contributor>
      <text xml:space="preserve" bytes="1820">Builtin definitions:
&lt;pre&gt;
float() numentityfields = #496;
string(float fieldnum) entityfieldname = #497;
float(float fieldnum) entityfieldtype = #498;
string(float fieldnum, entity ent) getentityfieldstring = #499;
float(float fieldnum, entity ent, string s) putentityfieldstring = #500;
&lt;/pre&gt;

Constants (Returned by entityfieldtype):
&lt;pre&gt;
float FIELD_STRING   = 1;
float FIELD_FLOAT    = 2;
float FIELD_VECTOR   = 3;
float FIELD_ENTITY   = 4;
float FIELD_FUNCTION = 6;
&lt;/pre&gt;

DP_QC_ENTITYDATA provides versatile functions intended for storing and retrieving field data without hard coding all the field names, in a versatile way. It was originally intended for automatically dumping entities to make them persist between levels, but was designed to be as versatile as possible. The data can be filtered by type or other criteria, and saved to file or sent to a database in combination with other functions.

'''WARNING:''' .entity fields cannot be saved and restored between map loads as they will leave dangling pointers. Entity fields might still be useful, for example if you wish to dump entities straight to a web server for inspection there, in the event of an error.

*''numentityfields'' returns the number of entity fields. NOT offsets. Vectors comprise 4 fields: v, v_x, v_y and v_z.

*''entityfieldname'' returns the name as a string, eg. &quot;origin&quot; or &quot;classname&quot; or whatever.

*''entityfieldtype'' returns a value that the constants represent, but the field may be of another type in more exotic progs.dat formats or compilers.

*''getentityfieldstring'' returns data as would be written to a savegame, eg... &quot;0.05&quot; (float), &quot;0 0 1&quot; (vector), or &quot;Hello World!&quot; (string). Function names can also be returned.

*''putentityfieldstring'' puts the data returned by getentityfieldstring back into the entity.</text>
      <sha1>j2c4ivcdq3osl62zahv8f69okjyk8l4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1751</id>
      <parentid>906</parentid>
      <timestamp>2013-03-25T00:10:42Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="1844">Builtin definitions:
&lt;pre&gt;
float() numentityfields = #496;
string(float fieldnum) entityfieldname = #497;
float(float fieldnum) entityfieldtype = #498;
string(float fieldnum, entity ent) getentityfieldstring = #499;
float(float fieldnum, entity ent, string s) putentityfieldstring = #500;
&lt;/pre&gt;

Constants (Returned by entityfieldtype):
&lt;pre&gt;
float FIELD_STRING   = 1;
float FIELD_FLOAT    = 2;
float FIELD_VECTOR   = 3;
float FIELD_ENTITY   = 4;
float FIELD_FUNCTION = 6;
&lt;/pre&gt;

DP_QC_ENTITYDATA provides versatile functions intended for storing and retrieving field data without hard coding all the field names, in a versatile way. It was originally intended for automatically dumping entities to make them persist between levels, but was designed to be as versatile as possible. The data can be filtered by type or other criteria, and saved to file or sent to a database in combination with other functions.

'''WARNING:''' .entity fields cannot be saved and restored between map loads as they will leave dangling pointers. Entity fields might still be useful, for example if you wish to dump entities straight to a web server for inspection there, in the event of an error.

*''numentityfields'' returns the number of entity fields. NOT offsets. Vectors comprise 4 fields: v, v_x, v_y and v_z.

*''entityfieldname'' returns the name as a string, eg. &quot;origin&quot; or &quot;classname&quot; or whatever.

*''entityfieldtype'' returns a value that the constants represent, but the field may be of another type in more exotic progs.dat formats or compilers.

*''getentityfieldstring'' returns data as would be written to a savegame, eg... &quot;0.05&quot; (float), &quot;0 0 1&quot; (vector), or &quot;Hello World!&quot; (string). Function names can also be returned.

*''putentityfieldstring'' puts the data returned by getentityfieldstring back into the entity.
[[Category:DarkPlaces]]</text>
      <sha1>8r4fcas8e9n9v71c8qiv9rqetsvp4bq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC ETOS</title>
    <ns>0</ns>
    <id>265</id>
    <revision>
      <id>459</id>
      <timestamp>2008-02-28T14:24:47Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; string(entity ent) etos = #65; &lt;/pre&gt;  Prints &quot;entity 1&quot; or similar into a string. (this was a Q2 builtin)</comment>
      <text xml:space="preserve" bytes="133">Builtin definitions:
&lt;pre&gt;
string(entity ent) etos = #65;
&lt;/pre&gt;

Prints &quot;entity 1&quot; or similar into a string. (this was a Q2 builtin)</text>
      <sha1>eu9exnbysephzzaea0em6sjbmanfvph</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1779</id>
      <parentid>459</parentid>
      <timestamp>2013-03-25T00:15:07Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="157">Builtin definitions:
&lt;pre&gt;
string(entity ent) etos = #65;
&lt;/pre&gt;

Prints &quot;entity 1&quot; or similar into a string. (this was a Q2 builtin)
[[Category:DarkPlaces]]</text>
      <sha1>logyo9qxhlcfxisju7zl117ah771i2e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC FINDCHAIN</title>
    <ns>0</ns>
    <id>266</id>
    <revision>
      <id>460</id>
      <timestamp>2008-02-28T14:25:16Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; entity(.string fld, string match) findchain = #402; &lt;/pre&gt;  Similar to find() but returns a chain of entities like findradius.</comment>
      <text xml:space="preserve" bytes="153">Builtin definitions:
&lt;pre&gt;
entity(.string fld, string match) findchain = #402;
&lt;/pre&gt;

Similar to find() but returns a chain of entities like findradius.</text>
      <sha1>ptyuww652gxxgyxobo1ddnoxfcvw8sq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1780</id>
      <parentid>460</parentid>
      <timestamp>2013-03-25T00:15:15Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="177">Builtin definitions:
&lt;pre&gt;
entity(.string fld, string match) findchain = #402;
&lt;/pre&gt;

Similar to find() but returns a chain of entities like findradius.
[[Category:DarkPlaces]]</text>
      <sha1>ik34n0218u5gd04la86b4d6dp1gsl9o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC FINDCHAINFLAGS</title>
    <ns>0</ns>
    <id>267</id>
    <revision>
      <id>461</id>
      <timestamp>2008-02-28T14:25:49Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; entity(.float fld, float match) findchainflags = #450; &lt;/pre&gt;  Similar to findflags() but returns a chain of entities like findradius.</comment>
      <text xml:space="preserve" bytes="161">Builtin definitions:
&lt;pre&gt;
entity(.float fld, float match) findchainflags = #450;
&lt;/pre&gt;

Similar to findflags() but returns a chain of entities like findradius.</text>
      <sha1>fultn26ohaf97fhcrb1c0bd6ecw4mty</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1781</id>
      <parentid>461</parentid>
      <timestamp>2013-03-25T00:15:22Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="185">Builtin definitions:
&lt;pre&gt;
entity(.float fld, float match) findchainflags = #450;
&lt;/pre&gt;

Similar to findflags() but returns a chain of entities like findradius.
[[Category:DarkPlaces]]</text>
      <sha1>heb4l9c3a96o8d995nc32njs5no8bto</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC FINDCHAINFLOAT</title>
    <ns>0</ns>
    <id>268</id>
    <revision>
      <id>462</id>
      <timestamp>2008-02-28T14:26:23Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; entity(.entity fld, entity match) findchainentity = #403; entity(.float fld, float match) findchainfloat = #403; &lt;/pre&gt;  Similar to findentity()/findfloat() but ...</comment>
      <text xml:space="preserve" bytes="232">Builtin definitions:
&lt;pre&gt;
entity(.entity fld, entity match) findchainentity = #403;
entity(.float fld, float match) findchainfloat = #403;
&lt;/pre&gt;

Similar to findentity()/findfloat() but returns a chain of entities like findradius.</text>
      <sha1>729rdx05ovb8os3tgpqwgpnn7oo7wkb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1782</id>
      <parentid>462</parentid>
      <timestamp>2013-03-25T00:15:30Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="256">Builtin definitions:
&lt;pre&gt;
entity(.entity fld, entity match) findchainentity = #403;
entity(.float fld, float match) findchainfloat = #403;
&lt;/pre&gt;

Similar to findentity()/findfloat() but returns a chain of entities like findradius.
[[Category:DarkPlaces]]</text>
      <sha1>g9bd374ltsmhjvy3x3dhydqx72jhxbw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC FINDFLAGS</title>
    <ns>0</ns>
    <id>269</id>
    <revision>
      <id>463</id>
      <timestamp>2008-02-28T14:26:51Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; entity(entity start, .float fld, float match) findflags = #449; &lt;/pre&gt;  Finds an entity with the specified flag set in the field, similar to find().</comment>
      <text xml:space="preserve" bytes="175">Builtin definitions:
&lt;pre&gt;
entity(entity start, .float fld, float match) findflags = #449;
&lt;/pre&gt;

Finds an entity with the specified flag set in the field, similar to find().</text>
      <sha1>ownklhhr81w6hx6xdt6dghb5jtdjnnu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1783</id>
      <parentid>463</parentid>
      <timestamp>2013-03-25T00:15:37Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="199">Builtin definitions:
&lt;pre&gt;
entity(entity start, .float fld, float match) findflags = #449;
&lt;/pre&gt;

Finds an entity with the specified flag set in the field, similar to find().
[[Category:DarkPlaces]]</text>
      <sha1>npc39l8yv47zbe66pu14saqyz6coh46</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC FINDFLOAT</title>
    <ns>0</ns>
    <id>270</id>
    <revision>
      <id>464</id>
      <timestamp>2008-02-28T14:27:15Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; entity(entity start, .entity fld, entity match) findentity = #98; entity(entity start, .float fld, float match) findfloat = #98; &lt;/pre&gt;  Finds an entity or float...</comment>
      <text xml:space="preserve" bytes="253">Builtin definitions:
&lt;pre&gt;
entity(entity start, .entity fld, entity match) findentity = #98;
entity(entity start, .float fld, float match) findfloat = #98;
&lt;/pre&gt;

Finds an entity or float field value, similar to find(), but for entity and float fields.</text>
      <sha1>9sydcn3thv6vsdh3p50a2in33jj51wf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1784</id>
      <parentid>464</parentid>
      <timestamp>2013-03-25T00:15:44Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="277">Builtin definitions:
&lt;pre&gt;
entity(entity start, .entity fld, entity match) findentity = #98;
entity(entity start, .float fld, float match) findfloat = #98;
&lt;/pre&gt;

Finds an entity or float field value, similar to find(), but for entity and float fields.
[[Category:DarkPlaces]]</text>
      <sha1>b25as84h60ca1u0oxfw5o9hd3e2gevu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC FS SEARCH</title>
    <ns>0</ns>
    <id>271</id>
    <revision>
      <id>465</id>
      <timestamp>2008-02-28T14:28:27Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; float(string pattern, float caseinsensitive, float quiet) search_begin = #444; void(float handle) search_end = #445; float(float handle) search_getsize = #446; s...</comment>
      <text xml:space="preserve" bytes="752">Builtin definitions:
&lt;pre&gt;
float(string pattern, float caseinsensitive, float quiet) search_begin = #444;
void(float handle) search_end = #445;
float(float handle) search_getsize = #446;
string(float handle, float num) search_getfilename = #447;
&lt;/pre&gt;

search_begin performs a filename search with the specified pattern (for example &quot;maps/*.bsp&quot;) and stores the results in a search slot (minimum of 128 supported by any engine with this extension), the other functions take this returned search slot number, be sure to search_free when done (they are also freed on progs reload).

search_end frees a search slot (also done at progs reload).

search_getsize returns how many filenames were found.

search_getfilename returns a filename from the search.</text>
      <sha1>fzwunr4j067k9i50egb7mcknxgktqg8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1785</id>
      <parentid>465</parentid>
      <timestamp>2013-03-25T00:15:51Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="776">Builtin definitions:
&lt;pre&gt;
float(string pattern, float caseinsensitive, float quiet) search_begin = #444;
void(float handle) search_end = #445;
float(float handle) search_getsize = #446;
string(float handle, float num) search_getfilename = #447;
&lt;/pre&gt;

search_begin performs a filename search with the specified pattern (for example &quot;maps/*.bsp&quot;) and stores the results in a search slot (minimum of 128 supported by any engine with this extension), the other functions take this returned search slot number, be sure to search_free when done (they are also freed on progs reload).

search_end frees a search slot (also done at progs reload).

search_getsize returns how many filenames were found.

search_getfilename returns a filename from the search.
[[Category:DarkPlaces]]</text>
      <sha1>iqow89mq1u00r4bxym9i01hkgp1a8fw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC GETLIGHT</title>
    <ns>0</ns>
    <id>272</id>
    <revision>
      <id>466</id>
      <timestamp>2008-02-28T14:28:59Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; vector(vector org) getlight = #92; &lt;/pre&gt;  Returns the lighting at the requested location (in color), 0-255 range (can exceed 255).</comment>
      <text xml:space="preserve" bytes="158">Builtin definitions:
&lt;pre&gt;
vector(vector org) getlight = #92;
&lt;/pre&gt;

Returns the lighting at the requested location (in color), 0-255 range (can exceed 255).</text>
      <sha1>ljn1lw3ulb5xlqeqiijskr1e7bdxwoi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1786</id>
      <parentid>466</parentid>
      <timestamp>2013-03-25T00:15:59Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="182">Builtin definitions:
&lt;pre&gt;
vector(vector org) getlight = #92;
&lt;/pre&gt;

Returns the lighting at the requested location (in color), 0-255 range (can exceed 255).
[[Category:DarkPlaces]]</text>
      <sha1>0amk145mrnsev793k2xi5456odqkbp7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC GETSURFACE</title>
    <ns>0</ns>
    <id>273</id>
    <revision>
      <id>467</id>
      <timestamp>2008-02-28T14:29:29Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; float(entity e, float s) getsurfacenumpoints = #434; vector(entity e, float s, float n) getsurfacepoint = #435; vector(entity e, float s) getsurfacenormal = #436...</comment>
      <text xml:space="preserve" bytes="410">Builtin definitions:
&lt;pre&gt;
float(entity e, float s) getsurfacenumpoints = #434;
vector(entity e, float s, float n) getsurfacepoint = #435;
vector(entity e, float s) getsurfacenormal = #436;
string(entity e, float s) getsurfacetexture = #437;
float(entity e, vector p) getsurfacenearpoint = #438;
vector(entity e, float s, vector p) getsurfaceclippedpoint = #439;
&lt;/pre&gt;

Functions to query surface information.</text>
      <sha1>nv6x5xbry4bx59ya9urplsvhrmm4sn1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1787</id>
      <parentid>467</parentid>
      <timestamp>2013-03-25T00:16:08Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="434">Builtin definitions:
&lt;pre&gt;
float(entity e, float s) getsurfacenumpoints = #434;
vector(entity e, float s, float n) getsurfacepoint = #435;
vector(entity e, float s) getsurfacenormal = #436;
string(entity e, float s) getsurfacetexture = #437;
float(entity e, vector p) getsurfacenearpoint = #438;
vector(entity e, float s, vector p) getsurfaceclippedpoint = #439;
&lt;/pre&gt;

Functions to query surface information.
[[Category:DarkPlaces]]</text>
      <sha1>i6h8t22ne3coq5uiolk58m5n3bdq9sj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC GETTAGINFO</title>
    <ns>0</ns>
    <id>274</id>
    <revision>
      <id>468</id>
      <timestamp>2008-02-28T14:29:58Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; float(entity ent, string tagname) gettagindex = #451; vector(entity ent, float tagindex) gettaginfo = #452; &lt;/pre&gt;  gettagindex returns the number of a tag on an...</comment>
      <text xml:space="preserve" bytes="770">Builtin definitions:
&lt;pre&gt;
float(entity ent, string tagname) gettagindex = #451;
vector(entity ent, float tagindex) gettaginfo = #452;
&lt;/pre&gt;

gettagindex returns the number of a tag on an entity, this number is the same as set by setattachment (in the .tag_index field), allowing the qc to save a little cpu time by keeping the number around if it wishes (this could already be done by calling setattachment and saving off the tag_index).

gettaginfo returns the origin of the tag in worldspace and sets v_forward, v_right, and v_up to the current orientation of the tag in worldspace, this automatically resolves all dependencies (attachments, including viewmodelforclient), this means you could fire a shot from a tag on a gun entity attached to the view for example.</text>
      <sha1>ffsz7fvn7lrxow00qkn9pygt02a4rnz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1788</id>
      <parentid>468</parentid>
      <timestamp>2013-03-25T00:16:15Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="794">Builtin definitions:
&lt;pre&gt;
float(entity ent, string tagname) gettagindex = #451;
vector(entity ent, float tagindex) gettaginfo = #452;
&lt;/pre&gt;

gettagindex returns the number of a tag on an entity, this number is the same as set by setattachment (in the .tag_index field), allowing the qc to save a little cpu time by keeping the number around if it wishes (this could already be done by calling setattachment and saving off the tag_index).

gettaginfo returns the origin of the tag in worldspace and sets v_forward, v_right, and v_up to the current orientation of the tag in worldspace, this automatically resolves all dependencies (attachments, including viewmodelforclient), this means you could fire a shot from a tag on a gun entity attached to the view for example.
[[Category:DarkPlaces]]</text>
      <sha1>41fs5fw4niv69h5y1l5ktjiaheb0rv9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC MINMAXBOUND</title>
    <ns>0</ns>
    <id>275</id>
    <revision>
      <id>469</id>
      <timestamp>2008-02-28T14:30:43Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; float(float a, float b) min = #94; float(float a, float b, float c) min3 = #94; float(float a, float b, float c, float d) min4 = #94; float(float a, float b, flo...</comment>
      <text xml:space="preserve" bytes="1133">Builtin definitions:
&lt;pre&gt;
float(float a, float b) min = #94;
float(float a, float b, float c) min3 = #94;
float(float a, float b, float c, float d) min4 = #94;
float(float a, float b, float c, float d, float e) min5 = #94;
float(float a, float b, float c, float d, float e, float f) min6 = #94;
float(float a, float b, float c, float d, float e, float f, float g) min7 = #94;
float(float a, float b, float c, float d, float e, float f, float g, float h) min8 = #94;
float(float a, float b) max = #95;
float(float a, float b, float c) max3 = #95;
float(float a, float b, float c, float d) max4 = #95;
float(float a, float b, float c, float d, float e) max5 = #95;
float(float a, float b, float c, float d, float e, float f) max6 = #95;
float(float a, float b, float c, float d, float e, float f, float g) max7 = #95;
float(float a, float b, float c, float d, float e, float f, float g, float h) max8 = #95;
float(float minimum, float val, float maximum) bound = #96;
&lt;/pre&gt;

min returns the lowest of all the supplied numbers.

max returns the highest of all the supplied numbers.

bound clamps the value to the range and returns it.</text>
      <sha1>h0ixgnn0ba4sd5c4o5m68aadsgs4qep</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1789</id>
      <parentid>469</parentid>
      <timestamp>2013-03-25T00:16:22Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="1157">Builtin definitions:
&lt;pre&gt;
float(float a, float b) min = #94;
float(float a, float b, float c) min3 = #94;
float(float a, float b, float c, float d) min4 = #94;
float(float a, float b, float c, float d, float e) min5 = #94;
float(float a, float b, float c, float d, float e, float f) min6 = #94;
float(float a, float b, float c, float d, float e, float f, float g) min7 = #94;
float(float a, float b, float c, float d, float e, float f, float g, float h) min8 = #94;
float(float a, float b) max = #95;
float(float a, float b, float c) max3 = #95;
float(float a, float b, float c, float d) max4 = #95;
float(float a, float b, float c, float d, float e) max5 = #95;
float(float a, float b, float c, float d, float e, float f) max6 = #95;
float(float a, float b, float c, float d, float e, float f, float g) max7 = #95;
float(float a, float b, float c, float d, float e, float f, float g, float h) max8 = #95;
float(float minimum, float val, float maximum) bound = #96;
&lt;/pre&gt;

min returns the lowest of all the supplied numbers.

max returns the highest of all the supplied numbers.

bound clamps the value to the range and returns it.
[[Category:DarkPlaces]]</text>
      <sha1>l62hqvbg4w5yukxvp7srtxw1nh886xp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC MULTIPLETEMPSTRINGS</title>
    <ns>0</ns>
    <id>276</id>
    <revision>
      <id>470</id>
      <timestamp>2008-02-28T14:31:28Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: This extension makes all builtins returning tempstrings (ftos for example) cycle through a pool of multiple tempstrings (at least 16), allowing multiple ftos results to be gathered before ...</comment>
      <text xml:space="preserve" bytes="537">This extension makes all builtins returning tempstrings (ftos for example)
cycle through a pool of multiple tempstrings (at least 16), allowing
multiple ftos results to be gathered before putting them to use, normal
quake only had 1 tempstring, causing many headaches.

Note that for longer term storage (or compatibility on engines having
FRIK_FILE but not this extension) the FRIK_FILE extension's
strzone/strunzone builtins provide similar functionality (slower though).

This extension is superseded by [[DP_QC_UNLIMITEDTEMPSTRINGS]]</text>
      <sha1>tl1bib0siveosomtblyo7kyfp2l5c02</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1745</id>
      <parentid>470</parentid>
      <timestamp>2013-03-25T00:09:41Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="561">This extension makes all builtins returning tempstrings (ftos for example)
cycle through a pool of multiple tempstrings (at least 16), allowing
multiple ftos results to be gathered before putting them to use, normal
quake only had 1 tempstring, causing many headaches.

Note that for longer term storage (or compatibility on engines having
FRIK_FILE but not this extension) the FRIK_FILE extension's
strzone/strunzone builtins provide similar functionality (slower though).

This extension is superseded by [[DP_QC_UNLIMITEDTEMPSTRINGS]]
[[Category:DarkPlaces]]</text>
      <sha1>ih3bnrprwcq2vk6zz8crwtq676c2i6y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC RANDOMVEC</title>
    <ns>0</ns>
    <id>277</id>
    <revision>
      <id>471</id>
      <timestamp>2008-02-28T14:32:23Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; vector() randomvec = #91; &lt;/pre&gt;  Returns a vector of length &lt; 1, much quicker version of this QC: do {v_x = random()*2-1;v_y = random()*2-1;v_z = random()*2-1;}...</comment>
      <text xml:space="preserve" bytes="207">Builtin definitions:
&lt;pre&gt;
vector() randomvec = #91;
&lt;/pre&gt;

Returns a vector of length &lt; 1, much quicker version of this QC: do {v_x = random()*2-1;v_y = random()*2-1;v_z = random()*2-1;} while(vlen(v) &gt; 1)</text>
      <sha1>6xde0ffr68jfsadw55xhcq27vbj8utg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1790</id>
      <parentid>471</parentid>
      <timestamp>2013-03-25T00:16:34Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="231">Builtin definitions:
&lt;pre&gt;
vector() randomvec = #91;
&lt;/pre&gt;

Returns a vector of length &lt; 1, much quicker version of this QC: do {v_x = random()*2-1;v_y = random()*2-1;v_z = random()*2-1;} while(vlen(v) &gt; 1)
[[Category:DarkPlaces]]</text>
      <sha1>j9xbvfwh923iagdks9prjdpstjnugte</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC SINCOSSQRTPOW</title>
    <ns>0</ns>
    <id>278</id>
    <revision>
      <id>472</id>
      <timestamp>2008-02-28T14:32:48Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; float(float val) sin = #60; float(float val) cos = #61; float(float val) sqrt = #62; float(float a, float b) pow = #97; &lt;/pre&gt;  Useful math functions, sine of va...</comment>
      <text xml:space="preserve" bytes="263">Builtin definitions:
&lt;pre&gt;
float(float val) sin = #60;
float(float val) cos = #61;
float(float val) sqrt = #62;
float(float a, float b) pow = #97;
&lt;/pre&gt;

Useful math functions, sine of val, cosine of val, square root of val, and raise a to power b, respectively.</text>
      <sha1>cmxtih5g75ga0ooalas89suqd26h818</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1791</id>
      <parentid>472</parentid>
      <timestamp>2013-03-25T00:17:14Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="287">Builtin definitions:
&lt;pre&gt;
float(float val) sin = #60;
float(float val) cos = #61;
float(float val) sqrt = #62;
float(float a, float b) pow = #97;
&lt;/pre&gt;

Useful math functions, sine of val, cosine of val, square root of val, and raise a to power b, respectively.
[[Category:DarkPlaces]]</text>
      <sha1>6t8lg27sg9godroxfzdiz0e2js0chnw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC STRFTIME</title>
    <ns>0</ns>
    <id>279</id>
    <revision>
      <id>474</id>
      <timestamp>2008-02-28T14:38:06Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; string(float uselocaltime, string format, ...) strftime = #478; &lt;/pre&gt;  Provides the ability to get the local (in your timezone) or world (Universal Coordinated ...</comment>
      <text xml:space="preserve" bytes="2033">Builtin definitions:
&lt;pre&gt;
string(float uselocaltime, string format, ...) strftime = #478;
&lt;/pre&gt;

Provides the ability to get the local (in your timezone) or world (Universal Coordinated Time) time as a string using the formatting of your choice:

example: &quot;%Y-%m-%d %H:%M:%S&quot;   (result looks like: 2007-02-08 01:03:15)

note: &quot;%F %T&quot; gives the same result as &quot;%Y-%m-%d %H:%M:%S&quot; (ISO 8601 date format and 24-hour time)

For more format codes please do a web search for strftime 3 and you should find the man(3) pages for this standard C function.

Practical uses:
* Changing day/night cycle (shops closing, monsters going on the prowl) in an RPG, for this you probably want to use s = strftime(TRUE, &quot;%H&quot;);hour = ftos(s);
* Printing current date/time for competitive multiplayer games, such as the beginning/end of each round in real world time.
* Activating eastereggs in singleplayer games on certain dates.

Note:
* Some codes such as %x and %X use your locale settings and thus may not make sense to international users, it is not advisable to use these as the server and clients may be in different countries.
* If you display local time to a player, it would be a good idea to note whether it is local time using a string like &quot;%F %T (local)&quot;, and otherwise use &quot;%F %T (UTC)&quot;.
* Be aware that if the game is saved and reloaded a week later the date and time will be different, so if activating eastereggs in a singleplayer game or something you may want to only check when a level is loaded and then keep the same easteregg state throughout the level so that the easteregg does not deactivate when reloading from a savegame (also be aware that precaches should not depend on such date/time code because reloading a savegame often scrambles the precaches if so!).
* This function can return a NULL string (you can check for it with if (!s)) if the localtime/gmtime functions returned NULL in the engine code, such as if those functions don't work on this platform (consoles perhaps?), so be aware that this may return nothing.</text>
      <sha1>gboo80yn5nt2yku17la6522uh982ftw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>475</id>
      <parentid>474</parentid>
      <timestamp>2008-02-28T14:39:18Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="2071">Builtin definitions:
&lt;pre&gt;
string(float uselocaltime, string format, ...) strftime = #478;
&lt;/pre&gt;

Provides the ability to get the local (in your timezone) or world (Universal Coordinated Time) time as a string using the formatting of your choice:

example: &quot;%Y-%m-%d %H:%M:%S&quot;   (result looks like: 2007-02-08 01:03:15)

note: &quot;%F %T&quot; gives the same result as &quot;%Y-%m-%d %H:%M:%S&quot; (ISO 8601 date format and 24-hour time)

For more format codes please see http://www.daemon-systems.org/man/strftime.3.html or google for strftime 3 and look for the man pages for this standard C function.

Practical uses:
* Changing day/night cycle (shops closing, monsters going on the prowl) in an RPG, for this you probably want to use s = strftime(TRUE, &quot;%H&quot;);hour = ftos(s);
* Printing current date/time for competitive multiplayer games, such as the beginning/end of each round in real world time.
* Activating eastereggs in singleplayer games on certain dates.

Note:
* Some codes such as %x and %X use your locale settings and thus may not make sense to international users, it is not advisable to use these as the server and clients may be in different countries.
* If you display local time to a player, it would be a good idea to note whether it is local time using a string like &quot;%F %T (local)&quot;, and otherwise use &quot;%F %T (UTC)&quot;.
* Be aware that if the game is saved and reloaded a week later the date and time will be different, so if activating eastereggs in a singleplayer game or something you may want to only check when a level is loaded and then keep the same easteregg state throughout the level so that the easteregg does not deactivate when reloading from a savegame (also be aware that precaches should not depend on such date/time code because reloading a savegame often scrambles the precaches if so!).
* This function can return a NULL string (you can check for it with if (!s)) if the localtime/gmtime functions returned NULL in the engine code, such as if those functions don't work on this platform (consoles perhaps?), so be aware that this may return nothing.</text>
      <sha1>js0ydzirehifyczcmgg5mqa5nag0sgy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1792</id>
      <parentid>475</parentid>
      <timestamp>2013-03-25T00:17:22Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="2095">Builtin definitions:
&lt;pre&gt;
string(float uselocaltime, string format, ...) strftime = #478;
&lt;/pre&gt;

Provides the ability to get the local (in your timezone) or world (Universal Coordinated Time) time as a string using the formatting of your choice:

example: &quot;%Y-%m-%d %H:%M:%S&quot;   (result looks like: 2007-02-08 01:03:15)

note: &quot;%F %T&quot; gives the same result as &quot;%Y-%m-%d %H:%M:%S&quot; (ISO 8601 date format and 24-hour time)

For more format codes please see http://www.daemon-systems.org/man/strftime.3.html or google for strftime 3 and look for the man pages for this standard C function.

Practical uses:
* Changing day/night cycle (shops closing, monsters going on the prowl) in an RPG, for this you probably want to use s = strftime(TRUE, &quot;%H&quot;);hour = ftos(s);
* Printing current date/time for competitive multiplayer games, such as the beginning/end of each round in real world time.
* Activating eastereggs in singleplayer games on certain dates.

Note:
* Some codes such as %x and %X use your locale settings and thus may not make sense to international users, it is not advisable to use these as the server and clients may be in different countries.
* If you display local time to a player, it would be a good idea to note whether it is local time using a string like &quot;%F %T (local)&quot;, and otherwise use &quot;%F %T (UTC)&quot;.
* Be aware that if the game is saved and reloaded a week later the date and time will be different, so if activating eastereggs in a singleplayer game or something you may want to only check when a level is loaded and then keep the same easteregg state throughout the level so that the easteregg does not deactivate when reloading from a savegame (also be aware that precaches should not depend on such date/time code because reloading a savegame often scrambles the precaches if so!).
* This function can return a NULL string (you can check for it with if (!s)) if the localtime/gmtime functions returned NULL in the engine code, such as if those functions don't work on this platform (consoles perhaps?), so be aware that this may return nothing.
[[Category:DarkPlaces]]</text>
      <sha1>m7inb6y6p10lxiyeehnpubhq068gmlw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC STRING CASE FUNCTIONS</title>
    <ns>0</ns>
    <id>281</id>
    <revision>
      <id>477</id>
      <timestamp>2008-02-28T14:40:32Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; string(string s) strtolower = #480; // returns the passed in string in pure lowercase form string(string s) strtoupper = #481; // returns the passed in string in...</comment>
      <text xml:space="preserve" bytes="274">Builtin definitions:
&lt;pre&gt;
string(string s) strtolower = #480; // returns the passed in string in pure lowercase form
string(string s) strtoupper = #481; // returns the passed in string in pure uppercase form
&lt;/pre&gt;

Provides simple string uppercase and lowercase functions.</text>
      <sha1>e0u7geu3yto5xff8gahu6nsfwfh6qh8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1794</id>
      <parentid>477</parentid>
      <timestamp>2013-03-25T00:17:38Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="298">Builtin definitions:
&lt;pre&gt;
string(string s) strtolower = #480; // returns the passed in string in pure lowercase form
string(string s) strtoupper = #481; // returns the passed in string in pure uppercase form
&lt;/pre&gt;

Provides simple string uppercase and lowercase functions.
[[Category:DarkPlaces]]</text>
      <sha1>nwuyw7qq79v0j8u5x5be2unhcqxu4zb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC STRINGCOLORFUNCTIONS</title>
    <ns>0</ns>
    <id>280</id>
    <revision>
      <id>476</id>
      <timestamp>2008-02-28T14:40:01Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; float(string s) strlennocol = #476; // returns how many characters are in a string, minus color codes string(string s) strdecolorize = #477; // returns a string ...</comment>
      <text xml:space="preserve" bytes="361">Builtin definitions:
&lt;pre&gt;
float(string s) strlennocol = #476; // returns how many characters are in a string, minus color codes
string(string s) strdecolorize = #477; // returns a string minus the color codes of the string provided
&lt;/pre&gt;

Provides additional functionality to strings by supporting functions that isolate and identify strings with color codes.</text>
      <sha1>jgcsmfz637tu52q5b57g0zpgs2yap3e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1793</id>
      <parentid>476</parentid>
      <timestamp>2013-03-25T00:17:30Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="385">Builtin definitions:
&lt;pre&gt;
float(string s) strlennocol = #476; // returns how many characters are in a string, minus color codes
string(string s) strdecolorize = #477; // returns a string minus the color codes of the string provided
&lt;/pre&gt;

Provides additional functionality to strings by supporting functions that isolate and identify strings with color codes.
[[Category:DarkPlaces]]</text>
      <sha1>eeqi5lfoe3nlsj8uzkx24keirzj6npe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC STRREPLACE</title>
    <ns>0</ns>
    <id>349</id>
    <revision>
      <id>559</id>
      <timestamp>2008-02-29T12:18:54Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; string(string search, string replace, string subject) strreplace = #484; string(string search, string replace, string subject) strireplace = #485; &lt;/pre&gt;  strrep...</comment>
      <text xml:space="preserve" bytes="393">Builtin definitions:
&lt;pre&gt;
string(string search, string replace, string subject) strreplace = #484;
string(string search, string replace, string subject) strireplace = #485;
&lt;/pre&gt;

strreplace replaces all occurrences of 'search' with 'replace' in the string 'subject', and returns the result as a tempstring.

strireplace does the same but uses case-insensitive matching of the 'search' term.</text>
      <sha1>f7wokdsyiqsn8jxr5ozq8kaycw5u2st</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1846</id>
      <parentid>559</parentid>
      <timestamp>2013-03-25T00:26:33Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="417">Builtin definitions:
&lt;pre&gt;
string(string search, string replace, string subject) strreplace = #484;
string(string search, string replace, string subject) strireplace = #485;
&lt;/pre&gt;

strreplace replaces all occurrences of 'search' with 'replace' in the string 'subject', and returns the result as a tempstring.

strireplace does the same but uses case-insensitive matching of the 'search' term.
[[Category:DarkPlaces]]</text>
      <sha1>ktkc3s7inl88evewikqegxe3nu1k9pm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC TOKENIZEBYSEPARATOR</title>
    <ns>0</ns>
    <id>282</id>
    <revision>
      <id>478</id>
      <timestamp>2008-02-28T14:41:47Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; float(string s, string separator1, ...) tokenizebyseparator = #479; &lt;/pre&gt;  This function returns tokens separated by any of the supplied separator strings, exam...</comment>
      <text xml:space="preserve" bytes="446">Builtin definitions:
&lt;pre&gt;
float(string s, string separator1, ...) tokenizebyseparator = #479;
&lt;/pre&gt;

This function returns tokens separated by any of the supplied separator strings, example:
&lt;pre&gt;
numnumbers = tokenizebyseparator(&quot;10.2.3.4&quot;, &quot;.&quot;);
&lt;/pre&gt;
Returns 4 and the tokens are &quot;10&quot; &quot;2&quot; &quot;3&quot; &quot;4&quot;

Possibly useful for parsing IPv4 addresses (such as &quot;1.2.3.4&quot;) and IPv6 addresses (such as &quot;[1234:5678:9abc:def0:1234:5678:9abc:def0]:26000&quot;).</text>
      <sha1>d7qiulkcrq907v6uk3kcv5mwnp40wxt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1795</id>
      <parentid>478</parentid>
      <timestamp>2013-03-25T00:17:45Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="470">Builtin definitions:
&lt;pre&gt;
float(string s, string separator1, ...) tokenizebyseparator = #479;
&lt;/pre&gt;

This function returns tokens separated by any of the supplied separator strings, example:
&lt;pre&gt;
numnumbers = tokenizebyseparator(&quot;10.2.3.4&quot;, &quot;.&quot;);
&lt;/pre&gt;
Returns 4 and the tokens are &quot;10&quot; &quot;2&quot; &quot;3&quot; &quot;4&quot;

Possibly useful for parsing IPv4 addresses (such as &quot;1.2.3.4&quot;) and IPv6 addresses (such as &quot;[1234:5678:9abc:def0:1234:5678:9abc:def0]:26000&quot;).
[[Category:DarkPlaces]]</text>
      <sha1>pcgg2d8tyc2ima0m33opv1p10tslpfc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC TRACE MOVETYPE HITMODEL</title>
    <ns>0</ns>
    <id>285</id>
    <revision>
      <id>481</id>
      <timestamp>2008-02-28T14:44:51Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Constant definitions: &lt;pre&gt; float MOVE_HITMODEL = 4; &lt;/pre&gt;  Allows traces to hit alias models (not sprites!) instead of entity boxes, use as the nomonsters parameter to trace functions, n...</comment>
      <text xml:space="preserve" bytes="297">Constant definitions:
&lt;pre&gt;
float MOVE_HITMODEL = 4;
&lt;/pre&gt;

Allows traces to hit alias models (not sprites!) instead of entity boxes, use as the nomonsters parameter to trace functions, note that you can hit invisible model entities (alpha &lt; 0 or EF_NODRAW or model &quot;&quot;, it only checks modelindex)</text>
      <sha1>pl8z2gic5v0bxgeevfbwx3k6lykgpy0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1798</id>
      <parentid>481</parentid>
      <timestamp>2013-03-25T00:18:09Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="321">Constant definitions:
&lt;pre&gt;
float MOVE_HITMODEL = 4;
&lt;/pre&gt;

Allows traces to hit alias models (not sprites!) instead of entity boxes, use as the nomonsters parameter to trace functions, note that you can hit invisible model entities (alpha &lt; 0 or EF_NODRAW or model &quot;&quot;, it only checks modelindex)
[[Category:DarkPlaces]]</text>
      <sha1>o12agmo0860jwgdk4ip4rys2t1kar93</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC TRACE MOVETYPE WORLDONLY</title>
    <ns>0</ns>
    <id>286</id>
    <revision>
      <id>482</id>
      <timestamp>2008-02-28T14:45:25Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Constant definitions: &lt;pre&gt; float MOVE_WORLDONLY = 3; &lt;/pre&gt;  Allows traces to hit only world (ignoring all entities, unlike MOVE_NOMONSTERS which hits all bmodels), use as the nomonsters ...</comment>
      <text xml:space="preserve" bytes="216">Constant definitions:
&lt;pre&gt;
float MOVE_WORLDONLY = 3;
&lt;/pre&gt;

Allows traces to hit only world (ignoring all entities, unlike MOVE_NOMONSTERS which hits all bmodels), use as the nomonsters parameter to trace functions</text>
      <sha1>pq3h3aiv4udr5u1fo4jsvd0r0wiagcp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1799</id>
      <parentid>482</parentid>
      <timestamp>2013-03-25T00:18:17Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="240">Constant definitions:
&lt;pre&gt;
float MOVE_WORLDONLY = 3;
&lt;/pre&gt;

Allows traces to hit only world (ignoring all entities, unlike MOVE_NOMONSTERS which hits all bmodels), use as the nomonsters parameter to trace functions
[[Category:DarkPlaces]]</text>
      <sha1>oezxgx9qp6j05sn2o2tk8ttjg4cqot2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC TRACEBOX</title>
    <ns>0</ns>
    <id>283</id>
    <revision>
      <id>479</id>
      <timestamp>2008-02-28T14:42:24Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; void(vector v1, vector min, vector max, vector v2, float nomonsters, entity forent) tracebox = #90; &lt;/pre&gt;  Similar to traceline but much more useful, traces a b...</comment>
      <text xml:space="preserve" bytes="418">Builtin definitions:
&lt;pre&gt;
void(vector v1, vector min, vector max, vector v2, float nomonsters, entity forent) tracebox = #90;
&lt;/pre&gt;

Similar to traceline but much more useful, traces a box of the size specified (technical note: in quake1 and halflife bsp maps the mins and maxs will be rounded up to one of the hull sizes, quake3 bsp does not have this problem, this is the case with normal moving entities as well).</text>
      <sha1>cxi7w8guwi5uwv3o44zkpv7rm3zat9d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1796</id>
      <parentid>479</parentid>
      <timestamp>2013-03-25T00:17:54Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="442">Builtin definitions:
&lt;pre&gt;
void(vector v1, vector min, vector max, vector v2, float nomonsters, entity forent) tracebox = #90;
&lt;/pre&gt;

Similar to traceline but much more useful, traces a box of the size specified (technical note: in quake1 and halflife bsp maps the mins and maxs will be rounded up to one of the hull sizes, quake3 bsp does not have this problem, this is the case with normal moving entities as well).
[[Category:DarkPlaces]]</text>
      <sha1>eu0eop6hgk99cehslgbjuwyv54ycuh1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC TRACETOSS</title>
    <ns>0</ns>
    <id>284</id>
    <revision>
      <id>480</id>
      <timestamp>2008-02-28T14:44:18Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; void(entity ent, entity ignore) tracetoss = #64; &lt;/pre&gt;  Simulates movement of the entity as if it is MOVETYPE_TOSS and starting with it's current state (locatio...</comment>
      <text xml:space="preserve" bytes="384">Builtin definitions:
&lt;pre&gt;
void(entity ent, entity ignore) tracetoss = #64;
&lt;/pre&gt;

Simulates movement of the entity as if it is MOVETYPE_TOSS and starting with it's current state (location, velocity, etc), returns relevant trace_ variables (trace_fraction is always 0, all other values are supported - trace_ent, trace_endpos, trace_plane_normal), does not actually alter the entity.</text>
      <sha1>h09kaf2rfixk8iv4bde18bnj2v9dk0q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1797</id>
      <parentid>480</parentid>
      <timestamp>2013-03-25T00:18:02Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="408">Builtin definitions:
&lt;pre&gt;
void(entity ent, entity ignore) tracetoss = #64;
&lt;/pre&gt;

Simulates movement of the entity as if it is MOVETYPE_TOSS and starting with it's current state (location, velocity, etc), returns relevant trace_ variables (trace_fraction is always 0, all other values are supported - trace_ent, trace_endpos, trace_plane_normal), does not actually alter the entity.
[[Category:DarkPlaces]]</text>
      <sha1>nibzh4bbfbesxixyvqfuovkznzcfoqo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC UNLIMITEDTEMPSTRINGS</title>
    <ns>0</ns>
    <id>287</id>
    <revision>
      <id>483</id>
      <timestamp>2008-02-28T14:46:35Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: This extension alters Quake behavior such that instead of reusing a single tempstring (or multiple) there are an unlimited number of tempstrings, which are removed only when a QC function ...</comment>
      <text xml:space="preserve" bytes="853">This extension alters Quake behavior such that instead of reusing a single
tempstring (or multiple) there are an unlimited number of tempstrings, which
are removed only when a QC function invoked by the engine returns,
eliminating almost all imaginable concerns with string handling in QuakeC.

In short:

You can now use and abuse tempstrings as much as you like, you still have to
use strzone (FRIK_FILE) for permanent storage however.

Implementation notes for other engine coders:
These tempstrings are expected to be stored in a contiguous buffer in memory
which may be fixed size or controlled by a cvar, or automatically grown on
demand (in the case of DarkPlaces).

This concept is similar to quake's Zone system, however these are all freed
when the QC interpreter returns.

This is basically a poor man's garbage collection system for strings.</text>
      <sha1>gxlqpn8ow28hjw5uxyo0rk4lqq27jrq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1800</id>
      <parentid>483</parentid>
      <timestamp>2013-03-25T00:18:29Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="877">This extension alters Quake behavior such that instead of reusing a single
tempstring (or multiple) there are an unlimited number of tempstrings, which
are removed only when a QC function invoked by the engine returns,
eliminating almost all imaginable concerns with string handling in QuakeC.

In short:

You can now use and abuse tempstrings as much as you like, you still have to
use strzone (FRIK_FILE) for permanent storage however.

Implementation notes for other engine coders:
These tempstrings are expected to be stored in a contiguous buffer in memory
which may be fixed size or controlled by a cvar, or automatically grown on
demand (in the case of DarkPlaces).

This concept is similar to quake's Zone system, however these are all freed
when the QC interpreter returns.

This is basically a poor man's garbage collection system for strings.
[[Category:DarkPlaces]]</text>
      <sha1>epv3oll0mri5fg1866w13p3b5n9j6f3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC VECTOANGLES WITH ROLL</title>
    <ns>0</ns>
    <id>289</id>
    <revision>
      <id>486</id>
      <timestamp>2008-02-28T14:51:19Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; vector(vector forward, vector up) vectoangles2 = #51; // same number as vectoangles &lt;/pre&gt;  Variant of vectoangles that takes an up vector to calculate roll angl...</comment>
      <text xml:space="preserve" bytes="434">Builtin definitions:
&lt;pre&gt;
vector(vector forward, vector up) vectoangles2 = #51; // same number as vectoangles
&lt;/pre&gt;

Variant of vectoangles that takes an up vector to calculate roll angle (also uses this to calculate yaw correctly if the forward is straight up or straight down)

Note: Just like normal vectoangles you need to negate the pitch of the returned angles if you want to feed them to makevectors or assign to self.v_angle</text>
      <sha1>9upy1if869qsy75cx6t0i1qtimn9syo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1802</id>
      <parentid>486</parentid>
      <timestamp>2013-03-25T00:18:50Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="458">Builtin definitions:
&lt;pre&gt;
vector(vector forward, vector up) vectoangles2 = #51; // same number as vectoangles
&lt;/pre&gt;

Variant of vectoangles that takes an up vector to calculate roll angle (also uses this to calculate yaw correctly if the forward is straight up or straight down)

Note: Just like normal vectoangles you need to negate the pitch of the returned angles if you want to feed them to makevectors or assign to self.v_angle
[[Category:DarkPlaces]]</text>
      <sha1>96yly66jx1lxiowxddpnk75t31nfz42</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QC VECTORVECTORS</title>
    <ns>0</ns>
    <id>288</id>
    <revision>
      <id>484</id>
      <timestamp>2008-02-28T14:48:28Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; void(vector dir) vectorvectors = #432; &lt;/pre&gt;  Creates v_forward, v_right, and v_up vectors given a forward vector, similar to makevectors except it takes a forw...</comment>
      <text xml:space="preserve" bytes="227">Builtin definitions:
&lt;pre&gt;
void(vector dir) vectorvectors = #432;
&lt;/pre&gt;

Creates v_forward, v_right, and v_up vectors given a forward vector, similar to makevectors except it takes a forward direction vector instead of angles.</text>
      <sha1>kt7621wxvmdhxx2jh9w1qrvjpbsy0ud</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1801</id>
      <parentid>484</parentid>
      <timestamp>2013-03-25T00:18:39Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="251">Builtin definitions:
&lt;pre&gt;
void(vector dir) vectorvectors = #432;
&lt;/pre&gt;

Creates v_forward, v_right, and v_up vectors given a forward vector, similar to makevectors except it takes a forward direction vector instead of angles.
[[Category:DarkPlaces]]</text>
      <sha1>27fwi9q573j35o23gc62dr202jqrzpx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QUAKE2 MODEL</title>
    <ns>0</ns>
    <id>290</id>
    <revision>
      <id>487</id>
      <timestamp>2008-02-28T14:51:38Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Shows that the engine supports Quake2 .md2 files.</comment>
      <text xml:space="preserve" bytes="49">Shows that the engine supports Quake2 .md2 files.</text>
      <sha1>fpqnmzvrz83ansis496mtpe2uictrsj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1803</id>
      <parentid>487</parentid>
      <timestamp>2013-03-25T00:18:58Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="73">Shows that the engine supports Quake2 .md2 files.
[[Category:DarkPlaces]]</text>
      <sha1>d0wb0oq2ep5wvk0j7xru147118jmdqg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QUAKE2 SPRITE</title>
    <ns>0</ns>
    <id>291</id>
    <revision>
      <id>488</id>
      <timestamp>2008-02-28T14:51:54Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Shows that the engine supports Quake2 .sp2 files.</comment>
      <text xml:space="preserve" bytes="49">Shows that the engine supports Quake2 .sp2 files.</text>
      <sha1>mmu9fjgtkqwp1zp4y6padcf41xwy9m4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1804</id>
      <parentid>488</parentid>
      <timestamp>2013-03-25T00:19:07Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="73">Shows that the engine supports Quake2 .sp2 files.
[[Category:DarkPlaces]]</text>
      <sha1>rqt6guwr057lazvg4jx0bxnqmx6f6x3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QUAKE3 MAP</title>
    <ns>0</ns>
    <id>292</id>
    <revision>
      <id>489</id>
      <timestamp>2008-02-28T14:52:07Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Shows that the engine supports Quake3 .bsp files.</comment>
      <text xml:space="preserve" bytes="49">Shows that the engine supports Quake3 .bsp files.</text>
      <sha1>8vqff8bggxhatj3ob8yhvp232yb8u9y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1805</id>
      <parentid>489</parentid>
      <timestamp>2013-03-25T00:19:14Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="73">Shows that the engine supports Quake3 .bsp files.
[[Category:DarkPlaces]]</text>
      <sha1>0y4yjle9kqf9l950odapmdtmx82qfbf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP QUAKE3 MODEL</title>
    <ns>0</ns>
    <id>293</id>
    <revision>
      <id>490</id>
      <timestamp>2008-02-28T14:52:28Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: shows that the engine supports Quake3 .md3 files.</comment>
      <text xml:space="preserve" bytes="49">shows that the engine supports Quake3 .md3 files.</text>
      <sha1>ogneyxgz111q51pl4rtq6xd2fjtbmwo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1806</id>
      <parentid>490</parentid>
      <timestamp>2013-03-25T00:19:21Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="73">shows that the engine supports Quake3 .md3 files.
[[Category:DarkPlaces]]</text>
      <sha1>075r1ettle132bdwvllsefya35tc0yt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP REGISTERCVAR</title>
    <ns>0</ns>
    <id>294</id>
    <revision>
      <id>491</id>
      <timestamp>2008-02-28T14:52:58Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; float(string name, string value) registercvar = #93; &lt;/pre&gt;  Adds a new console cvar to the server console (in singleplayer this is the player's console), the cv...</comment>
      <text xml:space="preserve" bytes="280">Builtin definitions:
&lt;pre&gt;
float(string name, string value) registercvar = #93;
&lt;/pre&gt;

Adds a new console cvar to the server console (in singleplayer this is the player's console), the cvar exists until the mod is unloaded or the game quits.

NOTE: [[DP_CON_SET]] is much better.</text>
      <sha1>qhkcpd5lm8b909wp14gifn47ppvua63</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1746</id>
      <parentid>491</parentid>
      <timestamp>2013-03-25T00:09:52Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="305">Builtin definitions:
&lt;pre&gt;
float(string name, string value) registercvar = #93;
&lt;/pre&gt;

Adds a new console cvar to the server console (in singleplayer this is the player's console), the cvar exists until the mod is unloaded or the game quits.

NOTE: [[DP_CON_SET]] is much better.

[[Category:DarkPlaces]]</text>
      <sha1>jv463odz38ugqycfz1eghtt6o6cgeur</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SND DIRECTIONLESSATTNNONE</title>
    <ns>0</ns>
    <id>295</id>
    <revision>
      <id>492</id>
      <timestamp>2008-02-28T14:53:20Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Make sounds with ATTN_NONE have no spatialization (enabling easy use as music sources).</comment>
      <text xml:space="preserve" bytes="87">Make sounds with ATTN_NONE have no spatialization (enabling easy use as music sources).</text>
      <sha1>lt9qikgbh3bwtqfhkwf6r8dt44mvtyu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1807</id>
      <parentid>492</parentid>
      <timestamp>2013-03-25T00:19:35Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="111">Make sounds with ATTN_NONE have no spatialization (enabling easy use as music sources).
[[Category:DarkPlaces]]</text>
      <sha1>r9yqt2b9ylc3uk92siilp1n3c5q0ux5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SND FAKETRACKS</title>
    <ns>0</ns>
    <id>296</id>
    <revision>
      <id>493</id>
      <timestamp>2008-02-28T14:53:49Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: The engine plays sound/cdtracks/track001.wav instead of cd track 1 and so on if found, this allows games and mods to have music tracks without using ambientsound.  Note: also plays .ogg wi...</comment>
      <text xml:space="preserve" bytes="222">The engine plays sound/cdtracks/track001.wav instead of cd track 1 and so on if found, this allows games and mods to have music tracks without using ambientsound.

Note: also plays .ogg with [[DP_SND_OGGVORBIS]] extension.</text>
      <sha1>k837u5ajter688jcyu6hhbquqy3owp8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1747</id>
      <parentid>493</parentid>
      <timestamp>2013-03-25T00:10:01Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="247">The engine plays sound/cdtracks/track001.wav instead of cd track 1 and so on if found, this allows games and mods to have music tracks without using ambientsound.

Note: also plays .ogg with [[DP_SND_OGGVORBIS]] extension.

[[Category:DarkPlaces]]</text>
      <sha1>prhyem04a8n9bkjm993rua8dq2ax13l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SND OGGVORBIS</title>
    <ns>0</ns>
    <id>297</id>
    <revision>
      <id>494</id>
      <timestamp>2008-02-28T14:54:05Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: The engine supports loading Ogg Vorbis sound files.  Use either the .ogg filename directly, or a .wav of the same name (will try to load the .wav first and then .ogg).</comment>
      <text xml:space="preserve" bytes="167">The engine supports loading Ogg Vorbis sound files.  Use either the .ogg filename directly, or a .wav of the same name (will try to load the .wav first and then .ogg).</text>
      <sha1>8kbktf18rcvt7dk4tw1cfgz416h4bef</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1808</id>
      <parentid>494</parentid>
      <timestamp>2013-03-25T00:19:57Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="191">The engine supports loading Ogg Vorbis sound files.  Use either the .ogg filename directly, or a .wav of the same name (will try to load the .wav first and then .ogg).
[[Category:DarkPlaces]]</text>
      <sha1>p6plz5e5kpbe18njr24yk8bubhytfqw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SND STEREOWAV</title>
    <ns>0</ns>
    <id>298</id>
    <revision>
      <id>495</id>
      <timestamp>2008-02-28T14:54:20Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: The engine supports stereo WAV files.  (useful with DP_SND_DIRECTIONLESSATTNNONE for music)</comment>
      <text xml:space="preserve" bytes="91">The engine supports stereo WAV files.  (useful with DP_SND_DIRECTIONLESSATTNNONE for music)</text>
      <sha1>4xr4zl3uc3vp80vyn3ejnlyx6u8kqwl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1748</id>
      <parentid>495</parentid>
      <timestamp>2013-03-25T00:10:10Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="116">The engine supports stereo WAV files.  (useful with DP_SND_DIRECTIONLESSATTNNONE for music)

[[Category:DarkPlaces]]</text>
      <sha1>dcxj6fao7is5llyr3oelloui1vql1nq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SOLIDCORPSE</title>
    <ns>0</ns>
    <id>299</id>
    <revision>
      <id>496</id>
      <timestamp>2008-02-28T14:55:28Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: .solid definitions: &lt;pre&gt; float SOLID_CORPSE = 5; &lt;/pre&gt;  The entity will not collide with SOLID_CORPSE and SOLID_SLIDEBOX entities (and likewise they will not collide with it), this is us...</comment>
      <text xml:space="preserve" bytes="636">.solid definitions:
&lt;pre&gt;
float SOLID_CORPSE = 5;
&lt;/pre&gt;

The entity will not collide with SOLID_CORPSE and SOLID_SLIDEBOX entities (and likewise they will not collide with it), this is useful if you want dead bodies that are shootable but do not obstruct movement by players and monsters, note that if you traceline with a SOLID_SLIDEBOX entity as the ignoreent, it will ignore SOLID_CORPSE entities, this is desirable for visibility and movement traces, but not for bullets, for the traceline to hit SOLID_CORPSE you must temporarily force the player (or whatever) to SOLID_BBOX and then restore to SOLID_SLIDEBOX after the traceline.</text>
      <sha1>3hzr0j6kj66qlxl1vd1ja6mjox6s3qh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1809</id>
      <parentid>496</parentid>
      <timestamp>2013-03-25T00:20:32Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="660">.solid definitions:
&lt;pre&gt;
float SOLID_CORPSE = 5;
&lt;/pre&gt;

The entity will not collide with SOLID_CORPSE and SOLID_SLIDEBOX entities (and likewise they will not collide with it), this is useful if you want dead bodies that are shootable but do not obstruct movement by players and monsters, note that if you traceline with a SOLID_SLIDEBOX entity as the ignoreent, it will ignore SOLID_CORPSE entities, this is desirable for visibility and movement traces, but not for bullets, for the traceline to hit SOLID_CORPSE you must temporarily force the player (or whatever) to SOLID_BBOX and then restore to SOLID_SLIDEBOX after the traceline.
[[Category:DarkPlaces]]</text>
      <sha1>fcg34r6gdoncnpn3mq2iimwuw5okuk1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SPRITE32</title>
    <ns>0</ns>
    <id>300</id>
    <revision>
      <id>497</id>
      <timestamp>2008-02-28T14:55:44Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: The engine supports .spr32 sprites.</comment>
      <text xml:space="preserve" bytes="35">The engine supports .spr32 sprites.</text>
      <sha1>e73ododile7nia7izlwzym8bkp0ohhe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1810</id>
      <parentid>497</parentid>
      <timestamp>2013-03-25T00:20:39Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="59">The engine supports .spr32 sprites.
[[Category:DarkPlaces]]</text>
      <sha1>mbjn25nzc6t4n9a3qqvquzld9qnbsnd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SV BOTCLIENT</title>
    <ns>0</ns>
    <id>301</id>
    <revision>
      <id>498</id>
      <timestamp>2008-02-28T14:57:15Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Constants: &lt;pre&gt; float CLIENTTYPE_DISCONNECTED = 0; float CLIENTTYPE_REAL = 1; float CLIENTTYPE_BOT = 2; float CLIENTTYPE_NOTACLIENT = 3; &lt;/pre&gt;  Builtin definitions: &lt;pre&gt; entity() spawnc...</comment>
      <text xml:space="preserve" bytes="1879">Constants:
&lt;pre&gt;
float CLIENTTYPE_DISCONNECTED = 0;
float CLIENTTYPE_REAL = 1;
float CLIENTTYPE_BOT = 2;
float CLIENTTYPE_NOTACLIENT = 3;
&lt;/pre&gt;

Builtin definitions:
&lt;pre&gt;
entity() spawnclient = #454; // like spawn but for client slots (also calls relevant connect/spawn functions), returns world if no clients available
float(entity clent) clienttype = #455; // returns one of the CLIENTTYPE_* constants
&lt;/pre&gt;

Spawns a client with no network connection, to allow bots to use client slots with no hacks.

How to use:
&lt;pre&gt;
	// to spawn a bot
	local entity oldself;
	oldself = self;
	self = spawnclient();
	if (!self)
	{
		bprint(&quot;Can not add bot, server full.\
&quot;);
		self = oldself;
		return;
	}
	self.netname = &quot;Yoyobot&quot;;
	self.clientcolors = 12 * 16 + 4; // yellow (12) shirt and red (4) pants
	ClientConnect();
	PutClientInServer();
	self = oldself;

	// to remove all bots
	local entity head;
	head = find(world, classname, &quot;player&quot;);
	while (head)
	{
		if (clienttype(head) == CLIENTTYPE_BOT)
			dropclient(head);
		head = find(head, classname, &quot;player&quot;);
	}

	// to identify if a client is a bot (for example in PlayerPreThink)
	if (clienttype(self) == CLIENTTYPE_BOT)
		botthink();
&lt;/pre&gt;

See also [[DP_SV_CLIENTCOLORS]] [[DP_SV_CLIENTNAME]] [[DP_SV_DROPCLIENT]]

How it works:&lt;br&gt;
Creates a new client, calls SetNewParms and stores the parms, and returns the client.
//this intentionally does not call SV_SendServerinfo to allow the QuakeC a chance to set the netname and clientcolors fields before actually spawning the bot by calling ClientConnect and PutClientInServer manually
on level change ClientConnect and PutClientInServer are called by the engine to spawn in the bot (this is why clienttype() exists to tell you on the next level what type of client this is).

parms work the same on bot clients as they do on real clients, and do carry from level to level</text>
      <sha1>f5h08o020zyuzn3r5e98qac3ak551vo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1749</id>
      <parentid>498</parentid>
      <timestamp>2013-03-25T00:10:23Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="1903">Constants:
&lt;pre&gt;
float CLIENTTYPE_DISCONNECTED = 0;
float CLIENTTYPE_REAL = 1;
float CLIENTTYPE_BOT = 2;
float CLIENTTYPE_NOTACLIENT = 3;
&lt;/pre&gt;

Builtin definitions:
&lt;pre&gt;
entity() spawnclient = #454; // like spawn but for client slots (also calls relevant connect/spawn functions), returns world if no clients available
float(entity clent) clienttype = #455; // returns one of the CLIENTTYPE_* constants
&lt;/pre&gt;

Spawns a client with no network connection, to allow bots to use client slots with no hacks.

How to use:
&lt;pre&gt;
	// to spawn a bot
	local entity oldself;
	oldself = self;
	self = spawnclient();
	if (!self)
	{
		bprint(&quot;Can not add bot, server full.\
&quot;);
		self = oldself;
		return;
	}
	self.netname = &quot;Yoyobot&quot;;
	self.clientcolors = 12 * 16 + 4; // yellow (12) shirt and red (4) pants
	ClientConnect();
	PutClientInServer();
	self = oldself;

	// to remove all bots
	local entity head;
	head = find(world, classname, &quot;player&quot;);
	while (head)
	{
		if (clienttype(head) == CLIENTTYPE_BOT)
			dropclient(head);
		head = find(head, classname, &quot;player&quot;);
	}

	// to identify if a client is a bot (for example in PlayerPreThink)
	if (clienttype(self) == CLIENTTYPE_BOT)
		botthink();
&lt;/pre&gt;

See also [[DP_SV_CLIENTCOLORS]] [[DP_SV_CLIENTNAME]] [[DP_SV_DROPCLIENT]]

How it works:&lt;br&gt;
Creates a new client, calls SetNewParms and stores the parms, and returns the client.
//this intentionally does not call SV_SendServerinfo to allow the QuakeC a chance to set the netname and clientcolors fields before actually spawning the bot by calling ClientConnect and PutClientInServer manually
on level change ClientConnect and PutClientInServer are called by the engine to spawn in the bot (this is why clienttype() exists to tell you on the next level what type of client this is).

parms work the same on bot clients as they do on real clients, and do carry from level to level
[[Category:DarkPlaces]]</text>
      <sha1>2q47i3bysrsa74jpuyh3uadngbn7wgd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SV CLIENTCOLORS</title>
    <ns>0</ns>
    <id>302</id>
    <revision>
      <id>499</id>
      <timestamp>2008-02-29T11:21:17Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Field definitions: &lt;pre&gt; .float clientcolors; // colors of the client (format: pants + shirt * 16) &lt;/pre&gt;  Allows QuakeC to read and modify the client colors associated with a client entit...</comment>
      <text xml:space="preserve" bytes="306">Field definitions:
&lt;pre&gt;
.float clientcolors; // colors of the client (format: pants + shirt * 16)
&lt;/pre&gt;

Allows QuakeC to read and modify the client colors associated with a client entity (not particularly useful on other entities), and automatically sends out any appropriate network updates if changed.</text>
      <sha1>t1sop7kh078u3okesxtjvj3jb8u7g3f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1811</id>
      <parentid>499</parentid>
      <timestamp>2013-03-25T00:20:51Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="330">Field definitions:
&lt;pre&gt;
.float clientcolors; // colors of the client (format: pants + shirt * 16)
&lt;/pre&gt;

Allows QuakeC to read and modify the client colors associated with a client entity (not particularly useful on other entities), and automatically sends out any appropriate network updates if changed.
[[Category:DarkPlaces]]</text>
      <sha1>oy3xacp05e98va9xgt6w4yb21wa1wrl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SV CLIENTNAME</title>
    <ns>0</ns>
    <id>303</id>
    <revision>
      <id>500</id>
      <timestamp>2008-02-29T11:21:38Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Allows qc to modify the client's .netname, and automatically sends out any appropriate network updates if changed.</comment>
      <text xml:space="preserve" bytes="114">Allows qc to modify the client's .netname, and automatically sends out any appropriate network updates if changed.</text>
      <sha1>cz421qg23cg14aitk5x4a6pslweptj4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1812</id>
      <parentid>500</parentid>
      <timestamp>2013-03-25T00:21:00Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="138">Allows qc to modify the client's .netname, and automatically sends out any appropriate network updates if changed.
[[Category:DarkPlaces]]</text>
      <sha1>7em6jkoj9wthjxxopvbxu1femu2wkng</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SV CUSTOMIZEENTITYFORCLIENT</title>
    <ns>0</ns>
    <id>304</id>
    <revision>
      <id>502</id>
      <timestamp>2008-02-29T11:25:07Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Field definitions: &lt;pre&gt; .float() customizeentityforclient; // self = this entity, other = client entity &lt;/pre&gt;  Allows qc to modify an entity before it is sent to each client, the functio...</comment>
      <text xml:space="preserve" bytes="2035">Field definitions:
&lt;pre&gt;
.float() customizeentityforclient; // self = this entity, other = client entity
&lt;/pre&gt;

Allows qc to modify an entity before it is sent to each client, the function returns TRUE if it should send, FALSE if it should not, and is fully capable of editing the entity's fields, this allows cloaked players to appear less transparent to their teammates, navigation markers to only show to their team, etc.

Tips on writing customize functions:
* It is a good idea to return FALSE early in the function if possible to reduce cpu usage, because this function may be called many thousands of times per frame if there are many customized entities on a 64+ player server.
* You are free to change anything in self, but please do not change any other entities (the results may be very inconsistent).

Example ideas for use of this extension:
* Making icons over teammates' heads which are only visible to teammates. For exasmple:
&lt;pre&gt;
float() playericon_customizeentityforclient = {return self.owner.team == other.team;};
&lt;/pre&gt;
* Making cloaked players more visible to their teammates than their enemies. For example:
&lt;pre&gt;
float() player_customizeentityforclient = {if (self.items &amp; IT_CLOAKING) {if (self.team == other.team) self.alpha = 0.6;else self.alpha = 0.1;} return TRUE;};
&lt;/pre&gt;
* Making explosion models that face the viewer (does not work well with chase_active). For example:
&lt;pre&gt;
float() explosion_customizeentityforclient = {self.angles = vectoangles(other.origin + other.view_ofs - self.origin);self.angles_x = 0 - self.angles_x;};
&lt;/pre&gt;

Implementation notes:

Entity customization should be done before per-client culling (visibility for instance) because the entity may be doing setorigin to display itself in different locations on different clients, may be altering its .modelindex, .effects and other fields important to culling, so customized entities increase cpu usage (non-customized entities can use all the early culling they want however, as they are not changing on a per client basis).</text>
      <sha1>sxy9yestibxzae5c6711nmnrfpzn1nz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>503</id>
      <parentid>502</parentid>
      <timestamp>2008-02-29T11:26:25Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2116">Field definitions:
&lt;pre&gt;
.float() customizeentityforclient; // self = this entity, other = client entity
&lt;/pre&gt;

Allows qc to modify an entity before it is sent to each client, the function returns TRUE if it should send, FALSE if it should not, and is fully capable of editing the entity's fields, this allows cloaked players to appear less transparent to their teammates, navigation markers to only show to their team, etc.

Tips on writing customize functions:
* It is a good idea to return FALSE early in the function if possible to reduce cpu usage, because this function may be called many thousands of times per frame if there are many customized entities on a 64+ player server.
* You are free to change anything in self, but please do not change any other entities (the results may be very inconsistent).

Example ideas for use of this extension:
* Making icons over teammates' heads which are only visible to teammates. For exasmple:
&lt;pre&gt;
float() playericon_customizeentityforclient = 
{
    return self.owner.team == other.team;
};
&lt;/pre&gt;
* Making cloaked players more visible to their teammates than their enemies. For example:
&lt;pre&gt;
float() player_customizeentityforclient = 
{
    if (self.items &amp; IT_CLOAKING)
    {
        if (self.team == other.team)
            self.alpha = 0.6;
        else
            self.alpha = 0.1;
    }
    return TRUE;
};
&lt;/pre&gt;
* Making explosion models that face the viewer (does not work well with chase_active). For example:
&lt;pre&gt;
float() explosion_customizeentityforclient = 
{
    self.angles = vectoangles(other.origin + other.view_ofs - self.origin);
    self.angles_x = 0 - self.angles_x;
};
&lt;/pre&gt;

Implementation notes:

Entity customization should be done before per-client culling (visibility for instance) because the entity may be doing setorigin to display itself in different locations on different clients, may be altering its .modelindex, .effects and other fields important to culling, so customized entities increase cpu usage (non-customized entities can use all the early culling they want however, as they are not changing on a per client basis).</text>
      <sha1>nuwvlj4c41z5xn8c3fn6aiixg5vwkvq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1813</id>
      <parentid>503</parentid>
      <timestamp>2013-03-25T00:21:08Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="2140">Field definitions:
&lt;pre&gt;
.float() customizeentityforclient; // self = this entity, other = client entity
&lt;/pre&gt;

Allows qc to modify an entity before it is sent to each client, the function returns TRUE if it should send, FALSE if it should not, and is fully capable of editing the entity's fields, this allows cloaked players to appear less transparent to their teammates, navigation markers to only show to their team, etc.

Tips on writing customize functions:
* It is a good idea to return FALSE early in the function if possible to reduce cpu usage, because this function may be called many thousands of times per frame if there are many customized entities on a 64+ player server.
* You are free to change anything in self, but please do not change any other entities (the results may be very inconsistent).

Example ideas for use of this extension:
* Making icons over teammates' heads which are only visible to teammates. For exasmple:
&lt;pre&gt;
float() playericon_customizeentityforclient = 
{
    return self.owner.team == other.team;
};
&lt;/pre&gt;
* Making cloaked players more visible to their teammates than their enemies. For example:
&lt;pre&gt;
float() player_customizeentityforclient = 
{
    if (self.items &amp; IT_CLOAKING)
    {
        if (self.team == other.team)
            self.alpha = 0.6;
        else
            self.alpha = 0.1;
    }
    return TRUE;
};
&lt;/pre&gt;
* Making explosion models that face the viewer (does not work well with chase_active). For example:
&lt;pre&gt;
float() explosion_customizeentityforclient = 
{
    self.angles = vectoangles(other.origin + other.view_ofs - self.origin);
    self.angles_x = 0 - self.angles_x;
};
&lt;/pre&gt;

Implementation notes:

Entity customization should be done before per-client culling (visibility for instance) because the entity may be doing setorigin to display itself in different locations on different clients, may be altering its .modelindex, .effects and other fields important to culling, so customized entities increase cpu usage (non-customized entities can use all the early culling they want however, as they are not changing on a per client basis).
[[Category:DarkPlaces]]</text>
      <sha1>jy80zl64inocsgvvh6peljbjhk20m73</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SV DRAWONLYTOCLIENT</title>
    <ns>0</ns>
    <id>305</id>
    <revision>
      <id>504</id>
      <timestamp>2008-02-29T11:27:02Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Field definitions: &lt;pre&gt; .entity drawonlytoclient; &lt;/pre&gt;  The entity is only visible to the specified client.</comment>
      <text xml:space="preserve" bytes="110">Field definitions:
&lt;pre&gt;
.entity drawonlytoclient;
&lt;/pre&gt;

The entity is only visible to the specified client.</text>
      <sha1>dhfxrgf6zvorcjeybo51xulrwjujed7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1814</id>
      <parentid>504</parentid>
      <timestamp>2013-03-25T00:21:17Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="134">Field definitions:
&lt;pre&gt;
.entity drawonlytoclient;
&lt;/pre&gt;

The entity is only visible to the specified client.
[[Category:DarkPlaces]]</text>
      <sha1>mkzxe9z59df3k7b75ugpcq95gwymqaj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SV DROPCLIENT</title>
    <ns>0</ns>
    <id>306</id>
    <revision>
      <id>505</id>
      <timestamp>2008-02-29T11:27:39Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; void(entity clent) dropclient = #453; &lt;/pre&gt;  Causes the server to immediately drop the client, more reliable than stuffcmd(clent, &quot;disconnect\
&quot;); which could b...</comment>
      <text xml:space="preserve" bytes="236">Builtin definitions:
&lt;pre&gt;
void(entity clent) dropclient = #453;
&lt;/pre&gt;

Causes the server to immediately drop the client, more reliable than stuffcmd(clent, &quot;disconnect\
&quot;); which could be intentionally ignored by the client engine.
..</text>
      <sha1>8v4ve5zbh4l3k0s5ld6c3rwukf0f08q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>506</id>
      <parentid>505</parentid>
      <timestamp>2008-02-29T11:27:51Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="233">Builtin definitions:
&lt;pre&gt;
void(entity clent) dropclient = #453;
&lt;/pre&gt;

Causes the server to immediately drop the client, more reliable than stuffcmd(clent, &quot;disconnect\
&quot;); which could be intentionally ignored by the client engine.</text>
      <sha1>gmwstzj8nlf5loe4qfba8j0n0qcva53</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1815</id>
      <parentid>506</parentid>
      <timestamp>2013-03-25T00:21:25Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="257">Builtin definitions:
&lt;pre&gt;
void(entity clent) dropclient = #453;
&lt;/pre&gt;

Causes the server to immediately drop the client, more reliable than stuffcmd(clent, &quot;disconnect\
&quot;); which could be intentionally ignored by the client engine.
[[Category:DarkPlaces]]</text>
      <sha1>ebcvpdkrn9cgof8e5eg3plekdtxyswr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SV EFFECT</title>
    <ns>0</ns>
    <id>307</id>
    <revision>
      <id>507</id>
      <timestamp>2008-02-29T11:29:36Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; void(vector org, string modelname, float startframe, float endframe, float framerate) effect = #404; &lt;/pre&gt;  Clientside playback of simple custom sprite effects ...</comment>
      <text xml:space="preserve" bytes="213">Builtin definitions:
&lt;pre&gt;
void(vector org, string modelname, float startframe, float endframe, float framerate) effect = #404;
&lt;/pre&gt;

Clientside playback of simple custom sprite effects (explosion sprites, etc).</text>
      <sha1>kgbvnemursapt5hx2xix5nl8g3qutql</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1816</id>
      <parentid>507</parentid>
      <timestamp>2013-03-25T00:21:32Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="237">Builtin definitions:
&lt;pre&gt;
void(vector org, string modelname, float startframe, float endframe, float framerate) effect = #404;
&lt;/pre&gt;

Clientside playback of simple custom sprite effects (explosion sprites, etc).
[[Category:DarkPlaces]]</text>
      <sha1>rj6qtorakam22g2ip583gj3fj2ncysh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SV ENTITYCONTENTSTRANSITION</title>
    <ns>0</ns>
    <id>308</id>
    <revision>
      <id>509</id>
      <timestamp>2008-02-29T11:31:18Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Field definitions: &lt;pre&gt; .void(float nOriginalContents, float nNewContents) contentstransition; &lt;/pre&gt;  This field function, when provided, is triggered on an entity when the contents (ie....</comment>
      <text xml:space="preserve" bytes="519">Field definitions:
&lt;pre&gt;
.void(float nOriginalContents, float nNewContents) contentstransition;
&lt;/pre&gt;

This field function, when provided, is triggered on an entity when the contents (ie. liquid / water / etc) is changed.

The first parameter provides the entities original contents, prior to the transition.  The second parameter provides the new contents.

Note: If this field function is provided on an entity, the standard watersplash sound IS SUPPRESSED to allow for authors to create their own transition sounds.</text>
      <sha1>pqk5qswjunjdpgzemp88xeiyw4q1bd4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1817</id>
      <parentid>509</parentid>
      <timestamp>2013-03-25T00:21:38Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="543">Field definitions:
&lt;pre&gt;
.void(float nOriginalContents, float nNewContents) contentstransition;
&lt;/pre&gt;

This field function, when provided, is triggered on an entity when the contents (ie. liquid / water / etc) is changed.

The first parameter provides the entities original contents, prior to the transition.  The second parameter provides the new contents.

Note: If this field function is provided on an entity, the standard watersplash sound IS SUPPRESSED to allow for authors to create their own transition sounds.
[[Category:DarkPlaces]]</text>
      <sha1>fziouvyq5xeinx6cjl2x2efli3q239o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SV MODELFLAGS AS EFFECTS</title>
    <ns>0</ns>
    <id>311</id>
    <revision>
      <id>517</id>
      <timestamp>2008-02-29T11:39:23Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Field definitions: &lt;pre&gt; .float modelflags; &lt;/pre&gt;  Constant definitions: &lt;pre&gt; float EF_NOMODELFLAGS = 8388608; // ignore any effects in a model file and substitute your own float MF_ROCK...</comment>
      <text xml:space="preserve" bytes="1313">Field definitions:
&lt;pre&gt;
.float modelflags;
&lt;/pre&gt;

Constant definitions:
&lt;pre&gt;
float EF_NOMODELFLAGS = 8388608; // ignore any effects in a model file and substitute your own
float MF_ROCKET  =   1; // leave a trail
float MF_GRENADE =   2; // leave a trail
float MF_GIB     =   4; // leave a trail
float MF_ROTATE  =   8; // rotate (bonus items)
float MF_TRACER  =  16; // green split trail
float MF_ZOMGIB  =  32; // small blood trail
float MF_TRACER2 =  64; // orange split trail
float MF_TRACER3 = 128; // purple trail
&lt;/pre&gt;

This extension allows model flags to be specified on entities so you can add a rocket trail and glow to any entity, etc.

Setting any of these will override the flags the model already has, to disable the model's flags without supplying any of your own you must use EF_NOMODELFLAGS.

Silly example modification #1 to W_FireRocket in weapons.qc:
&lt;pre&gt;
missile.effects = EF_NOMODELFLAGS; // rocket without a glow/fire trail
&lt;/pre&gt;

Silly example modification #2 to W_FireRocket in weapons.qc:
&lt;pre&gt;
missile.modelflags = MF_GIB; // leave a blood trail instead of glow/fire trail
&lt;/pre&gt;

Note: you can not combine multiple kinds of trail, only one of them will be active, you can combine MF_ROTATE and the other MF_ flags however, and using EF_NOMODELFLAGS along with these does no harm.</text>
      <sha1>47qhjqoi1490x7cgu40g7n0ijm97419</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1820</id>
      <parentid>517</parentid>
      <timestamp>2013-03-25T00:22:01Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="1337">Field definitions:
&lt;pre&gt;
.float modelflags;
&lt;/pre&gt;

Constant definitions:
&lt;pre&gt;
float EF_NOMODELFLAGS = 8388608; // ignore any effects in a model file and substitute your own
float MF_ROCKET  =   1; // leave a trail
float MF_GRENADE =   2; // leave a trail
float MF_GIB     =   4; // leave a trail
float MF_ROTATE  =   8; // rotate (bonus items)
float MF_TRACER  =  16; // green split trail
float MF_ZOMGIB  =  32; // small blood trail
float MF_TRACER2 =  64; // orange split trail
float MF_TRACER3 = 128; // purple trail
&lt;/pre&gt;

This extension allows model flags to be specified on entities so you can add a rocket trail and glow to any entity, etc.

Setting any of these will override the flags the model already has, to disable the model's flags without supplying any of your own you must use EF_NOMODELFLAGS.

Silly example modification #1 to W_FireRocket in weapons.qc:
&lt;pre&gt;
missile.effects = EF_NOMODELFLAGS; // rocket without a glow/fire trail
&lt;/pre&gt;

Silly example modification #2 to W_FireRocket in weapons.qc:
&lt;pre&gt;
missile.modelflags = MF_GIB; // leave a blood trail instead of glow/fire trail
&lt;/pre&gt;

Note: you can not combine multiple kinds of trail, only one of them will be active, you can combine MF_ROTATE and the other MF_ flags however, and using EF_NOMODELFLAGS along with these does no harm.
[[Category:DarkPlaces]]</text>
      <sha1>41sjbl32gkyldnvt5buceybc62kuerw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SV MOVETYPESTEP LANDEVENT</title>
    <ns>0</ns>
    <id>593</id>
    <revision>
      <id>1573</id>
      <timestamp>2010-02-06T17:41:42Z</timestamp>
      <contributor>
        <ip>83.226.254.64</ip>
      </contributor>
      <comment>New page: '''Field definitions:'''  .void(vector vImpactVelocity) movetypesteplandevent;   This field function, when provided, is triggered on a MOVETYPE_STEP entity when it experiences  &quot;land event...</comment>
      <text xml:space="preserve" bytes="611">'''Field definitions:'''

.void(vector vImpactVelocity) movetypesteplandevent;


This field function, when provided, is triggered on a MOVETYPE_STEP entity when it experiences  &quot;land event&quot;.

The standard engine behavior for this event is to play the sv_sound_land CVar sound.

The parameter provides the velocity of the entity at the time of the impact.  The z value may therefore be used to calculate how &quot;hard&quot; the entity struck the surface.

NOTE: If this field function is provided on a MOVETYPE_STEP entity, the standard sv_sound_land sound IS SUPPRESSED to allow for authors to create their own feedback.</text>
      <sha1>n55weu1a9u4oy4sdnw2lbbx9mdud2ay</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1847</id>
      <parentid>1573</parentid>
      <timestamp>2013-03-25T00:26:47Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="635">'''Field definitions:'''

.void(vector vImpactVelocity) movetypesteplandevent;


This field function, when provided, is triggered on a MOVETYPE_STEP entity when it experiences  &quot;land event&quot;.

The standard engine behavior for this event is to play the sv_sound_land CVar sound.

The parameter provides the velocity of the entity at the time of the impact.  The z value may therefore be used to calculate how &quot;hard&quot; the entity struck the surface.

NOTE: If this field function is provided on a MOVETYPE_STEP entity, the standard sv_sound_land sound IS SUPPRESSED to allow for authors to create their own feedback.
[[Category:DarkPlaces]]</text>
      <sha1>c2c0plqj1cfg1i008jzl8md5a06tmvr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SV NETADDRESS</title>
    <ns>0</ns>
    <id>312</id>
    <revision>
      <id>518</id>
      <timestamp>2008-02-29T11:40:05Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Field definitions: &lt;pre&gt; .string netaddress; &lt;/pre&gt;  Provides the netaddress of the associated entity (ie. 127.0.0.1) and &quot;null/botclient&quot; if the netconnection of the entity is invalid.</comment>
      <text xml:space="preserve" bytes="185">Field definitions:
&lt;pre&gt;
.string netaddress;
&lt;/pre&gt;

Provides the netaddress of the associated entity (ie. 127.0.0.1) and &quot;null/botclient&quot; if the netconnection of the entity is invalid.</text>
      <sha1>25ter608vc770q5ocmk45m3l33jnkq9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1821</id>
      <parentid>518</parentid>
      <timestamp>2013-03-25T00:22:17Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="209">Field definitions:
&lt;pre&gt;
.string netaddress;
&lt;/pre&gt;

Provides the netaddress of the associated entity (ie. 127.0.0.1) and &quot;null/botclient&quot; if the netconnection of the entity is invalid.
[[Category:DarkPlaces]]</text>
      <sha1>cz6tijul0ceeqm2dmbbxca3h9bhznxy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SV NODRAWTOCLIENT</title>
    <ns>0</ns>
    <id>313</id>
    <revision>
      <id>519</id>
      <timestamp>2008-02-29T11:40:33Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Field definitions: &lt;pre&gt; .entity nodrawtoclient; &lt;/pre&gt;  The entity is not visible to the specified client.</comment>
      <text xml:space="preserve" bytes="107">Field definitions:
&lt;pre&gt;
.entity nodrawtoclient;
&lt;/pre&gt;

The entity is not visible to the specified client.</text>
      <sha1>sipq5xw22m22if37s9plmhojzceib46</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1822</id>
      <parentid>519</parentid>
      <timestamp>2013-03-25T00:22:23Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="131">Field definitions:
&lt;pre&gt;
.entity nodrawtoclient;
&lt;/pre&gt;

The entity is not visible to the specified client.
[[Category:DarkPlaces]]</text>
      <sha1>fbfhxfqdyxubqfmqvv20rt99ll2x0sl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SV ONENTITYNOSPAWNFUNCTION</title>
    <ns>0</ns>
    <id>310</id>
    <revision>
      <id>516</id>
      <timestamp>2008-02-29T11:37:43Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Engine-called QC prototypes: &lt;pre&gt; void() SV_OnEntityNoSpawnFunction; &lt;/pre&gt;  This function is called whenever an entity on the server has no spawn function, and therefore has no defined Q...</comment>
      <text xml:space="preserve" bytes="338">Engine-called QC prototypes:
&lt;pre&gt;
void() SV_OnEntityNoSpawnFunction;
&lt;/pre&gt;

This function is called whenever an entity on the server has no spawn function, and therefore has no defined QC behavior.

You may as such dictate the behavior as to what happens to the entity.

To mimic the engine's default behavior, simply call remove(self).</text>
      <sha1>ofvu5kak9pd6fnb5ffaqz3spoj25te1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1819</id>
      <parentid>516</parentid>
      <timestamp>2013-03-25T00:21:53Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="362">Engine-called QC prototypes:
&lt;pre&gt;
void() SV_OnEntityNoSpawnFunction;
&lt;/pre&gt;

This function is called whenever an entity on the server has no spawn function, and therefore has no defined QC behavior.

You may as such dictate the behavior as to what happens to the entity.

To mimic the engine's default behavior, simply call remove(self).
[[Category:DarkPlaces]]</text>
      <sha1>d8zat2rz7pww64z8get9okzioum5zxo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SV PING</title>
    <ns>0</ns>
    <id>314</id>
    <revision>
      <id>520</id>
      <timestamp>2008-02-29T11:40:58Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Field definitions: &lt;pre&gt; .float ping; &lt;/pre&gt;  Continuously updated field indicating client's ping (based on average of last 16 packet time differences).</comment>
      <text xml:space="preserve" bytes="152">Field definitions:
&lt;pre&gt;
.float ping;
&lt;/pre&gt;

Continuously updated field indicating client's ping (based on average of last 16 packet time differences).</text>
      <sha1>0au087bviqzb88t4c9rmm1052hds7qy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1823</id>
      <parentid>520</parentid>
      <timestamp>2013-03-25T00:22:31Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="176">Field definitions:
&lt;pre&gt;
.float ping;
&lt;/pre&gt;

Continuously updated field indicating client's ping (based on average of last 16 packet time differences).
[[Category:DarkPlaces]]</text>
      <sha1>1o47v3t2w182d2ktfsvp2u6zb6gp4r5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SV POINTPARTICLES</title>
    <ns>0</ns>
    <id>315</id>
    <revision>
      <id>522</id>
      <timestamp>2008-02-29T11:42:51Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Function definitions: &lt;pre&gt; float(string effectname) particleeffectnum = #335; // same as in CSQC void(entity ent, float effectnum, vector start, vector end) trailparticles = #336; // same...</comment>
      <text xml:space="preserve" bytes="850">Function definitions:
&lt;pre&gt;
float(string effectname) particleeffectnum = #335; // same as in CSQC
void(entity ent, float effectnum, vector start, vector end) trailparticles = #336; // same as in CSQC
void(float effectnum, vector org, vector vel, float howmany) pointparticles = #337; // same as in CSQC
&lt;/pre&gt;

Provides the ability to spawn non-standard particle effects, typically these are defined in a particle effect information file such as effectinfo.txt in darkplaces.

This is a port of particle effect features from clientside QC [[EXT_CSQC]] to server QC, as these effects are potentially useful to all games even if they do not make use of [[EXT_CSQC]].

Warning: server must have same order of effects in effectinfo.txt as client does or the numbers would not match up, except for standard quake effects which are always the same numbers.</text>
      <sha1>sggmv59sjtsj7roal3oiaezj5gh4i5q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1824</id>
      <parentid>522</parentid>
      <timestamp>2013-03-25T00:22:39Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="874">Function definitions:
&lt;pre&gt;
float(string effectname) particleeffectnum = #335; // same as in CSQC
void(entity ent, float effectnum, vector start, vector end) trailparticles = #336; // same as in CSQC
void(float effectnum, vector org, vector vel, float howmany) pointparticles = #337; // same as in CSQC
&lt;/pre&gt;

Provides the ability to spawn non-standard particle effects, typically these are defined in a particle effect information file such as effectinfo.txt in darkplaces.

This is a port of particle effect features from clientside QC [[EXT_CSQC]] to server QC, as these effects are potentially useful to all games even if they do not make use of [[EXT_CSQC]].

Warning: server must have same order of effects in effectinfo.txt as client does or the numbers would not match up, except for standard quake effects which are always the same numbers.
[[Category:DarkPlaces]]</text>
      <sha1>3tdxd6c1gciuiqfuksyywnr4guzpnex</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SV POINTSOUND</title>
    <ns>0</ns>
    <id>309</id>
    <revision>
      <id>515</id>
      <timestamp>2008-02-29T11:37:01Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; void(vector origin, string sample, float volume, float attenuation) pointsound = #483; &lt;/pre&gt;  Similar to the standard QC sound function, this function takes an ...</comment>
      <text xml:space="preserve" bytes="329">Builtin definitions:
&lt;pre&gt;
void(vector origin, string sample, float volume, float attenuation) pointsound = #483;
&lt;/pre&gt;

Similar to the standard QC sound function, this function takes an origin instead of an entity and omits the channel parameter.

This allows sounds to be played at arbitrary origins without spawning entities.</text>
      <sha1>k2rktqztlbgzm34uxuicy8tohkfe1k6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1818</id>
      <parentid>515</parentid>
      <timestamp>2013-03-25T00:21:45Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="353">Builtin definitions:
&lt;pre&gt;
void(vector origin, string sample, float volume, float attenuation) pointsound = #483;
&lt;/pre&gt;

Similar to the standard QC sound function, this function takes an origin instead of an entity and omits the channel parameter.

This allows sounds to be played at arbitrary origins without spawning entities.
[[Category:DarkPlaces]]</text>
      <sha1>b7vivadskoxmzvfdwjdfgw5c0ay80jx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SV PRECACHEANYTIME</title>
    <ns>0</ns>
    <id>317</id>
    <revision>
      <id>524</id>
      <timestamp>2008-02-29T11:44:03Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: This extension allows precache_model and precache_sound (and any variants) to be used during the game (with automatic messages to clients to precache the new model/sound indices). Also, se...</comment>
      <text xml:space="preserve" bytes="293">This extension allows precache_model and precache_sound (and any variants) to be used during the game (with automatic messages to clients to precache the new model/sound indices). Also, setmodel/sound/ambientsound can be called without precaching first (they will cause an automatic precache).</text>
      <sha1>pahqn5mhgms1nkssm8nda04scc5n823</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1826</id>
      <parentid>524</parentid>
      <timestamp>2013-03-25T00:23:01Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="317">This extension allows precache_model and precache_sound (and any variants) to be used during the game (with automatic messages to clients to precache the new model/sound indices). Also, setmodel/sound/ambientsound can be called without precaching first (they will cause an automatic precache).
[[Category:DarkPlaces]]</text>
      <sha1>2xm7vqmeh1gg4ftmw2avgtd24jrgorz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SV PRINT</title>
    <ns>0</ns>
    <id>316</id>
    <revision>
      <id>523</id>
      <timestamp>2008-02-29T11:43:38Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; void(string s, ...) print = #339; // same number as in EXT_CSQC &lt;/pre&gt;  This is identical to dprint except that it always prints regardless of the developer cvar...</comment>
      <text xml:space="preserve" bytes="189">Builtin definitions:
&lt;pre&gt;
void(string s, ...) print = #339; // same number as in EXT_CSQC
&lt;/pre&gt;

This is identical to dprint except that it always prints regardless of the developer cvar.</text>
      <sha1>otzrjas2bpk45lpkaz3xjai5ngiob55</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1825</id>
      <parentid>523</parentid>
      <timestamp>2013-03-25T00:22:53Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="213">Builtin definitions:
&lt;pre&gt;
void(string s, ...) print = #339; // same number as in EXT_CSQC
&lt;/pre&gt;

This is identical to dprint except that it always prints regardless of the developer cvar.
[[Category:DarkPlaces]]</text>
      <sha1>imny4auqaqer6kl4zpmruv8oos7rdqv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SV PUNCHVECTOR</title>
    <ns>0</ns>
    <id>318</id>
    <revision>
      <id>525</id>
      <timestamp>2008-02-29T11:44:33Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Field definitions: &lt;pre&gt; .vector punchvector; &lt;/pre&gt;  Offsets client view in worldspace, similar to view_ofs but all 3 components are used and are sent with at least 8 bits of fraction, th...</comment>
      <text xml:space="preserve" bytes="391">Field definitions:
&lt;pre&gt;
.vector punchvector;
&lt;/pre&gt;

Offsets client view in worldspace, similar to view_ofs but all 3 components are used and are sent with at least 8 bits of fraction, this allows the view to be kicked around by damage or hard landings or whatever else, note that unlike punchangle this is not faded over time, it is up to the mod to fade it (see also DP_SV_PLAYERPHYSICS).</text>
      <sha1>4rr2q6hzgkljnh6c3z7kis3338v1la0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1750</id>
      <parentid>525</parentid>
      <timestamp>2013-03-25T00:10:31Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="415">Field definitions:
&lt;pre&gt;
.vector punchvector;
&lt;/pre&gt;

Offsets client view in worldspace, similar to view_ofs but all 3 components are used and are sent with at least 8 bits of fraction, this allows the view to be kicked around by damage or hard landings or whatever else, note that unlike punchangle this is not faded over time, it is up to the mod to fade it (see also DP_SV_PLAYERPHYSICS).
[[Category:DarkPlaces]]</text>
      <sha1>94i3yrqqzas1sjxy2koidoa6qgcs4g1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SV ROTATINGBMODEL</title>
    <ns>0</ns>
    <id>319</id>
    <revision>
      <id>526</id>
      <timestamp>2008-02-29T11:45:09Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: This extension merely indicates that MOVETYPE_PUSH supports avelocity, allowing rotating brush models to be created, they rotate around their origin (needs rotation supporting qbsp/light u...</comment>
      <text xml:space="preserve" bytes="684">This extension merely indicates that MOVETYPE_PUSH supports avelocity, allowing rotating brush models to be created, they rotate around their origin (needs rotation supporting qbsp/light utilities because id ones expected bmodel entity origins to be '0 0 0', recommend setting &quot;origin&quot; key in the entity fields in the map before compiling, there may be other methods depending on your qbsp, most are more complicated however).

Tip: level designers can create a func_wall with an origin, and avelocity (for example &quot;avelocity&quot; &quot;0 90 0&quot;), and &quot;nextthink&quot; &quot;99999999&quot; to make a rotating bmodel without any qc modifications, such entities will be solid in stock quake but will not rotate)</text>
      <sha1>tvm7il78uy1maax457v2f9yu87hd3b7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1827</id>
      <parentid>526</parentid>
      <timestamp>2013-03-25T00:23:43Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="708">This extension merely indicates that MOVETYPE_PUSH supports avelocity, allowing rotating brush models to be created, they rotate around their origin (needs rotation supporting qbsp/light utilities because id ones expected bmodel entity origins to be '0 0 0', recommend setting &quot;origin&quot; key in the entity fields in the map before compiling, there may be other methods depending on your qbsp, most are more complicated however).

Tip: level designers can create a func_wall with an origin, and avelocity (for example &quot;avelocity&quot; &quot;0 90 0&quot;), and &quot;nextthink&quot; &quot;99999999&quot; to make a rotating bmodel without any qc modifications, such entities will be solid in stock quake but will not rotate)
[[Category:DarkPlaces]]</text>
      <sha1>rggmrr77jy66ewdj6ysicxwa5bk066q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SV SETCOLOR</title>
    <ns>0</ns>
    <id>320</id>
    <revision>
      <id>527</id>
      <timestamp>2008-02-29T11:46:21Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; void(entity ent, float colors) setcolor = #401; &lt;/pre&gt;  Engine called QC functions (optional): &lt;pre&gt; void(float color) SV_ChangeTeam; &lt;/pre&gt;  Setcolor sets the c...</comment>
      <text xml:space="preserve" bytes="651">Builtin definitions:
&lt;pre&gt;
void(entity ent, float colors) setcolor = #401;
&lt;/pre&gt;

Engine called QC functions (optional):
&lt;pre&gt;
void(float color) SV_ChangeTeam;
&lt;/pre&gt;

Setcolor sets the color on a client and updates internal color information accordingly (equivilant to stuffing a &quot;color&quot; command but immediate).

SV_ChangeTeam is called by the engine whenever a &quot;color&quot; command is recieved, it may decide to do anything it pleases with the color passed by the client, including rejecting it (by doing nothing), or calling setcolor to apply it, preventing team changes is one use for this.

The color format is pants + shirt * 16 (0-255 potentially).</text>
      <sha1>5neg6sxslr0f0amrteapwi03sd8tlaa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1828</id>
      <parentid>527</parentid>
      <timestamp>2013-03-25T00:23:50Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="675">Builtin definitions:
&lt;pre&gt;
void(entity ent, float colors) setcolor = #401;
&lt;/pre&gt;

Engine called QC functions (optional):
&lt;pre&gt;
void(float color) SV_ChangeTeam;
&lt;/pre&gt;

Setcolor sets the color on a client and updates internal color information accordingly (equivilant to stuffing a &quot;color&quot; command but immediate).

SV_ChangeTeam is called by the engine whenever a &quot;color&quot; command is recieved, it may decide to do anything it pleases with the color passed by the client, including rejecting it (by doing nothing), or calling setcolor to apply it, preventing team changes is one use for this.

The color format is pants + shirt * 16 (0-255 potentially).
[[Category:DarkPlaces]]</text>
      <sha1>ntzvmd2705owwyzwdmig1q84qptboge</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SV SLOWMO</title>
    <ns>0</ns>
    <id>321</id>
    <revision>
      <id>528</id>
      <timestamp>2008-02-29T11:47:01Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Cvars: &lt;pre&gt; &quot;slowmo&quot; (0+, default 1) &lt;/pre&gt;  Sets the time scale of the server, mainly intended for use in singleplayer by the player, however potentially useful for mods, so here's an ex...</comment>
      <text xml:space="preserve" bytes="320">Cvars:
&lt;pre&gt;
&quot;slowmo&quot; (0+, default 1)
&lt;/pre&gt;

Sets the time scale of the server, mainly intended for use in singleplayer by the player, however potentially useful for mods, so here's an extension for it.

Range is 0 to infinite, recommended values to try are 0.1 (very slow, 10% speed), 1 (normal speed), 5 (500% speed).</text>
      <sha1>e4ahkr8s737oea22eu19bcrtafvv7jm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1829</id>
      <parentid>528</parentid>
      <timestamp>2013-03-25T00:23:58Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="344">Cvars:
&lt;pre&gt;
&quot;slowmo&quot; (0+, default 1)
&lt;/pre&gt;

Sets the time scale of the server, mainly intended for use in singleplayer by the player, however potentially useful for mods, so here's an extension for it.

Range is 0 to infinite, recommended values to try are 0.1 (very slow, 10% speed), 1 (normal speed), 5 (500% speed).
[[Category:DarkPlaces]]</text>
      <sha1>i15tr7x5immwbjmdem1mt2c5ger17al</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP SV WRITEUNTERMINATEDSTRING</title>
    <ns>0</ns>
    <id>322</id>
    <revision>
      <id>529</id>
      <timestamp>2008-02-29T11:48:01Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; void(float to, string s) WriteUnterminatedString = #456; &lt;/pre&gt;  Like WriteString, but does not write a terminating 0 after the string. This means you can includ...</comment>
      <text xml:space="preserve" bytes="913">Builtin definitions:
&lt;pre&gt;
void(float to, string s) WriteUnterminatedString = #456;
&lt;/pre&gt;

Like WriteString, but does not write a terminating 0 after the string. This means you can include things like a player's netname in the middle of a string sent over the network. Just be sure to end it up with either a call to WriteString (which includes the trailing 0) or WriteByte(0) to terminate it yourself.

A historical note: this extension was suggested by FrikaC years ago, more recently Shadowalker has been badmouthing LordHavoc and Spike for stealing 'his' extension writestring2 which does exactly the same thing but uses a different builtin number and name and extension string, this argument hinges on the idea that it was his idea in the first place, which is incorrect as FrikaC first suggested it and used a rough equivilant of it in his FrikBot mod years ago involving WriteByte calls on each character.</text>
      <sha1>car3m7maro3e0j2vcihvjcjpgw8gq1p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1830</id>
      <parentid>529</parentid>
      <timestamp>2013-03-25T00:24:06Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="937">Builtin definitions:
&lt;pre&gt;
void(float to, string s) WriteUnterminatedString = #456;
&lt;/pre&gt;

Like WriteString, but does not write a terminating 0 after the string. This means you can include things like a player's netname in the middle of a string sent over the network. Just be sure to end it up with either a call to WriteString (which includes the trailing 0) or WriteByte(0) to terminate it yourself.

A historical note: this extension was suggested by FrikaC years ago, more recently Shadowalker has been badmouthing LordHavoc and Spike for stealing 'his' extension writestring2 which does exactly the same thing but uses a different builtin number and name and extension string, this argument hinges on the idea that it was his idea in the first place, which is incorrect as FrikaC first suggested it and used a rough equivilant of it in his FrikBot mod years ago involving WriteByte calls on each character.
[[Category:DarkPlaces]]</text>
      <sha1>kw96yb7qqiztkpzhvligbhk6vhzqcqs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP TE BLOOD</title>
    <ns>0</ns>
    <id>323</id>
    <revision>
      <id>530</id>
      <timestamp>2008-02-29T11:49:06Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; void(vector org, vector velocity, float howmany) te_blood = #405; &lt;/pre&gt;  Temp entity definitions: &lt;pre&gt; float TE_BLOOD = 50; &lt;/pre&gt;  Protocol: &lt;pre&gt; vector orig...</comment>
      <text xml:space="preserve" bytes="350">Builtin definitions:
&lt;pre&gt;
void(vector org, vector velocity, float howmany) te_blood = #405;
&lt;/pre&gt;

Temp entity definitions:
&lt;pre&gt;
float TE_BLOOD = 50;
&lt;/pre&gt;

Protocol:
&lt;pre&gt;
vector origin
byte xvelocity (-128 to +127)
byte yvelocity (-128 to +127)
byte zvelocity (-128 to +127)
byte count (0 to 255, how much blood)
&lt;/pre&gt;

Creates a blood effect.</text>
      <sha1>1lelbq1djjs4hrzlmusrwa4cxsxlot8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1831</id>
      <parentid>530</parentid>
      <timestamp>2013-03-25T00:24:13Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="374">Builtin definitions:
&lt;pre&gt;
void(vector org, vector velocity, float howmany) te_blood = #405;
&lt;/pre&gt;

Temp entity definitions:
&lt;pre&gt;
float TE_BLOOD = 50;
&lt;/pre&gt;

Protocol:
&lt;pre&gt;
vector origin
byte xvelocity (-128 to +127)
byte yvelocity (-128 to +127)
byte zvelocity (-128 to +127)
byte count (0 to 255, how much blood)
&lt;/pre&gt;

Creates a blood effect.
[[Category:DarkPlaces]]</text>
      <sha1>rgoeifu45glfjaxqunzl5b7pmv0yv1x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP TE BLOODSHOWER</title>
    <ns>0</ns>
    <id>324</id>
    <revision>
      <id>531</id>
      <timestamp>2008-02-29T11:49:54Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; void(vector mincorner, vector maxcorner, float explosionspeed, float howmany) te_bloodshower = #406; &lt;/pre&gt;  Temp entity definitions: &lt;pre&gt; float TE_BLOODSHOWER ...</comment>
      <text xml:space="preserve" bytes="498">Builtin definitions:
&lt;pre&gt;
void(vector mincorner, vector maxcorner, float explosionspeed, float howmany) te_bloodshower = #406;
&lt;/pre&gt;

Temp entity definitions:
&lt;pre&gt;
float TE_BLOODSHOWER = 52;
&lt;/pre&gt;

Protocol:
&lt;pre&gt;
vector mins (minimum corner of the cube)
vector maxs (maximum corner of the cube)
coord explosionspeed (velocity of blood particles flying out of the center)
short count (number of blood particles)
&lt;/pre&gt;

Creates an exploding shower of blood, for making gibbings more convincing.</text>
      <sha1>673qljy9iul3z6cw2r8fa8vmsnb7zn7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1832</id>
      <parentid>531</parentid>
      <timestamp>2013-03-25T00:24:20Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="522">Builtin definitions:
&lt;pre&gt;
void(vector mincorner, vector maxcorner, float explosionspeed, float howmany) te_bloodshower = #406;
&lt;/pre&gt;

Temp entity definitions:
&lt;pre&gt;
float TE_BLOODSHOWER = 52;
&lt;/pre&gt;

Protocol:
&lt;pre&gt;
vector mins (minimum corner of the cube)
vector maxs (maximum corner of the cube)
coord explosionspeed (velocity of blood particles flying out of the center)
short count (number of blood particles)
&lt;/pre&gt;

Creates an exploding shower of blood, for making gibbings more convincing.
[[Category:DarkPlaces]]</text>
      <sha1>n03xj9kc8y3vxkriep0in6yewsz9wzq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP TE CUSTOMFLASH</title>
    <ns>0</ns>
    <id>325</id>
    <revision>
      <id>532</id>
      <timestamp>2008-02-29T11:50:42Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; void(vector org, float radius, float lifetime, vector color) te_customflash = #417; &lt;/pre&gt;  Temp entity definitions: &lt;pre&gt; float TE_CUSTOMFLASH = 73; &lt;/pre&gt;  pro...</comment>
      <text xml:space="preserve" bytes="537">Builtin definitions:
&lt;pre&gt;
void(vector org, float radius, float lifetime, vector color) te_customflash = #417;
&lt;/pre&gt;

Temp entity definitions:
&lt;pre&gt;
float TE_CUSTOMFLASH = 73;
&lt;/pre&gt;

protocol:
&lt;pre&gt;
vector origin
byte radius ((MSG_ReadByte() + 1) * 8, meaning 8-2048 unit radius)
byte lifetime ((MSG_ReadByte() + 1) / 256.0, meaning approximately 0-1 second lifetime)
byte red (0.0 to 1.0 converted to 0-255)
byte green (0.0 to 1.0 converted to 0-255)
byte blue (0.0 to 1.0 converted to 0-255)
&lt;/pre&gt;

Creates a customized light flash.</text>
      <sha1>lph3q03cwsx7nf3fcrr9va4jxv4pihu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1833</id>
      <parentid>532</parentid>
      <timestamp>2013-03-25T00:24:28Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="561">Builtin definitions:
&lt;pre&gt;
void(vector org, float radius, float lifetime, vector color) te_customflash = #417;
&lt;/pre&gt;

Temp entity definitions:
&lt;pre&gt;
float TE_CUSTOMFLASH = 73;
&lt;/pre&gt;

protocol:
&lt;pre&gt;
vector origin
byte radius ((MSG_ReadByte() + 1) * 8, meaning 8-2048 unit radius)
byte lifetime ((MSG_ReadByte() + 1) / 256.0, meaning approximately 0-1 second lifetime)
byte red (0.0 to 1.0 converted to 0-255)
byte green (0.0 to 1.0 converted to 0-255)
byte blue (0.0 to 1.0 converted to 0-255)
&lt;/pre&gt;

Creates a customized light flash.
[[Category:DarkPlaces]]</text>
      <sha1>11wntt8evrxkm7jorvm0n5p8e9eeszn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP TE EXPLOSIONRGB</title>
    <ns>0</ns>
    <id>326</id>
    <revision>
      <id>533</id>
      <timestamp>2008-02-29T11:51:31Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; void(vector org, vector color) te_explosionrgb = #407; &lt;/pre&gt;  Temp entity definitions: &lt;pre&gt; float TE_EXPLOSIONRGB = 53; &lt;/pre&gt;  Protocol: &lt;pre&gt; vector origin b...</comment>
      <text xml:space="preserve" bytes="365">Builtin definitions:
&lt;pre&gt;
void(vector org, vector color) te_explosionrgb = #407;
&lt;/pre&gt;

Temp entity definitions:
&lt;pre&gt;
float TE_EXPLOSIONRGB = 53;
&lt;/pre&gt;

Protocol:
&lt;pre&gt;
vector origin
byte red (0.0 to 1.0 converted to 0 to 255)
byte green (0.0 to 1.0 converted to 0 to 255)
byte blue (0.0 to 1.0 converted to 0 to 255)
&lt;/pre&gt;

Creates a colored explosion effect.</text>
      <sha1>q0dkt6711hn31mhbybpjn5k01wx7lg5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1834</id>
      <parentid>533</parentid>
      <timestamp>2013-03-25T00:24:34Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="389">Builtin definitions:
&lt;pre&gt;
void(vector org, vector color) te_explosionrgb = #407;
&lt;/pre&gt;

Temp entity definitions:
&lt;pre&gt;
float TE_EXPLOSIONRGB = 53;
&lt;/pre&gt;

Protocol:
&lt;pre&gt;
vector origin
byte red (0.0 to 1.0 converted to 0 to 255)
byte green (0.0 to 1.0 converted to 0 to 255)
byte blue (0.0 to 1.0 converted to 0 to 255)
&lt;/pre&gt;

Creates a colored explosion effect.
[[Category:DarkPlaces]]</text>
      <sha1>b3zxm4iyozamxks7a2r8oelwwnqwo9u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP TE FLAMEJET</title>
    <ns>0</ns>
    <id>327</id>
    <revision>
      <id>534</id>
      <timestamp>2008-02-29T11:52:20Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; void(vector org, vector vel, float howmany) te_flamejet = #457; &lt;/pre&gt;  Temp entity definitions: &lt;pre&gt; float TE_FLAMEJET = 74; &lt;/pre&gt;  Protocol: &lt;pre&gt; vector ori...</comment>
      <text xml:space="preserve" bytes="331">Builtin definitions:
&lt;pre&gt;
void(vector org, vector vel, float howmany) te_flamejet = #457;
&lt;/pre&gt;

Temp entity definitions:
&lt;pre&gt;
float TE_FLAMEJET = 74;
&lt;/pre&gt;

Protocol:
&lt;pre&gt;
vector origin
vector velocity
byte count (0 to 255, how many flame particles)
&lt;/pre&gt;

Creates a single puff of flame particles.  (not very useful really)</text>
      <sha1>rdtnqoblr7psq7jin0sx8e5udt7g294</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1835</id>
      <parentid>534</parentid>
      <timestamp>2013-03-25T00:24:41Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="355">Builtin definitions:
&lt;pre&gt;
void(vector org, vector vel, float howmany) te_flamejet = #457;
&lt;/pre&gt;

Temp entity definitions:
&lt;pre&gt;
float TE_FLAMEJET = 74;
&lt;/pre&gt;

Protocol:
&lt;pre&gt;
vector origin
vector velocity
byte count (0 to 255, how many flame particles)
&lt;/pre&gt;

Creates a single puff of flame particles.  (not very useful really)
[[Category:DarkPlaces]]</text>
      <sha1>kfomqaui59n0r8ktkojw77jkwfdrsey</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP TE PARTICLECUBE</title>
    <ns>0</ns>
    <id>328</id>
    <revision>
      <id>535</id>
      <timestamp>2008-02-29T11:53:17Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; void(vector mincorner, vector maxcorner, vector vel, float howmany,      float color, float gravityflag, float randomveljitter) te_particlecube = #408; &lt;/pre&gt;  T...</comment>
      <text xml:space="preserve" bytes="610">Builtin definitions:
&lt;pre&gt;
void(vector mincorner, vector maxcorner, vector vel, float howmany,
     float color, float gravityflag, float randomveljitter) te_particlecube = #408;
&lt;/pre&gt;

Temp entity definitions:
&lt;pre&gt;
float TE_PARTICLECUBE = 54;
&lt;/pre&gt;

Protocol:
&lt;pre&gt;
vector mins (minimum corner of the cube)
vector maxs (maximum corner of the cube)
vector velocity
short count
byte color (palette color)
byte gravity (TRUE or FALSE, FIXME should this be a scaler instead?)
coord randomvel (how much to jitter the velocity)
&lt;/pre&gt;

Creates a cloud of particles, useful for forcefields but quite customizable.</text>
      <sha1>closxajxsbrarda7f9rla45w5ir9nrg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1836</id>
      <parentid>535</parentid>
      <timestamp>2013-03-25T00:24:50Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="634">Builtin definitions:
&lt;pre&gt;
void(vector mincorner, vector maxcorner, vector vel, float howmany,
     float color, float gravityflag, float randomveljitter) te_particlecube = #408;
&lt;/pre&gt;

Temp entity definitions:
&lt;pre&gt;
float TE_PARTICLECUBE = 54;
&lt;/pre&gt;

Protocol:
&lt;pre&gt;
vector mins (minimum corner of the cube)
vector maxs (maximum corner of the cube)
vector velocity
short count
byte color (palette color)
byte gravity (TRUE or FALSE, FIXME should this be a scaler instead?)
coord randomvel (how much to jitter the velocity)
&lt;/pre&gt;

Creates a cloud of particles, useful for forcefields but quite customizable.
[[Category:DarkPlaces]]</text>
      <sha1>5bb4p74o5796lh76qf1a56iyzrpwk4t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP TE PARTICLERAIN</title>
    <ns>0</ns>
    <id>329</id>
    <revision>
      <id>536</id>
      <timestamp>2008-02-29T11:54:09Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; void(vector mincorner, vector maxcorner, vector vel, float howmany, float color) te_particlerain = #409; &lt;/pre&gt;  Temp entity definitions: &lt;pre&gt; float TE_PARTICLE...</comment>
      <text xml:space="preserve" bytes="540">Builtin definitions:
&lt;pre&gt;
void(vector mincorner, vector maxcorner, vector vel, float howmany, float color) te_particlerain = #409;
&lt;/pre&gt;

Temp entity definitions:
&lt;pre&gt;
float TE_PARTICLERAIN = 55;
&lt;/pre&gt;

Protocol:
&lt;pre&gt;
vector mins (minimum corner of the cube)
vector maxs (maximum corner of the cube)
vector velocity (velocity of particles)
short count (number of particles)
byte color (8bit palette color)
&lt;/pre&gt;

Creates a shower of rain, the rain will appear either at the top (if falling down) or bottom (if falling up) of the cube.</text>
      <sha1>2rlmg5wcxl7nuqvjigqrfki7jbpiksj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1837</id>
      <parentid>536</parentid>
      <timestamp>2013-03-25T00:24:59Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="564">Builtin definitions:
&lt;pre&gt;
void(vector mincorner, vector maxcorner, vector vel, float howmany, float color) te_particlerain = #409;
&lt;/pre&gt;

Temp entity definitions:
&lt;pre&gt;
float TE_PARTICLERAIN = 55;
&lt;/pre&gt;

Protocol:
&lt;pre&gt;
vector mins (minimum corner of the cube)
vector maxs (maximum corner of the cube)
vector velocity (velocity of particles)
short count (number of particles)
byte color (8bit palette color)
&lt;/pre&gt;

Creates a shower of rain, the rain will appear either at the top (if falling down) or bottom (if falling up) of the cube.
[[Category:DarkPlaces]]</text>
      <sha1>qsnmubkxbtgzrvqlgu94m7279106yle</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP TE PARTICLESNOW</title>
    <ns>0</ns>
    <id>330</id>
    <revision>
      <id>537</id>
      <timestamp>2008-02-29T11:55:01Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; void(vector mincorner, vector maxcorner, vector vel, float howmany, float color) te_particlesnow = #410; &lt;/pre&gt;  Temp entity definitions: &lt;pre&gt; float TE_PARTICLE...</comment>
      <text xml:space="preserve" bytes="590">Builtin definitions:
&lt;pre&gt;
void(vector mincorner, vector maxcorner, vector vel, float howmany, float color) te_particlesnow = #410;
&lt;/pre&gt;

Temp entity definitions:
&lt;pre&gt;
float TE_PARTICLERAIN = 56;
&lt;/pre&gt;

Protocol:
&lt;pre&gt;
vector mins (minimum corner of the cube)
vector maxs (maximum corner of the cube)
vector velocity (velocity of particles)
short count (number of particles)
byte color (8bit palette color)
&lt;/pre&gt;

Creates a shower of snow, the snow will appear either at the top (if falling down) or bottom (if falling up) of the cube, low velocities are advisable for convincing snow.</text>
      <sha1>ttb9auhzhvcswkqaouz8ou8ypt0yltk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1838</id>
      <parentid>537</parentid>
      <timestamp>2013-03-25T00:25:08Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="614">Builtin definitions:
&lt;pre&gt;
void(vector mincorner, vector maxcorner, vector vel, float howmany, float color) te_particlesnow = #410;
&lt;/pre&gt;

Temp entity definitions:
&lt;pre&gt;
float TE_PARTICLERAIN = 56;
&lt;/pre&gt;

Protocol:
&lt;pre&gt;
vector mins (minimum corner of the cube)
vector maxs (maximum corner of the cube)
vector velocity (velocity of particles)
short count (number of particles)
byte color (8bit palette color)
&lt;/pre&gt;

Creates a shower of snow, the snow will appear either at the top (if falling down) or bottom (if falling up) of the cube, low velocities are advisable for convincing snow.
[[Category:DarkPlaces]]</text>
      <sha1>a6v90wrx1rlt34yhby3eh6hz190hvxe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP TE PLASMABURN</title>
    <ns>0</ns>
    <id>331</id>
    <revision>
      <id>538</id>
      <timestamp>2008-02-29T11:55:43Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; void(vector org) te_plasmaburn = #433; &lt;/pre&gt;  Temp entity definitions: &lt;pre&gt; float TE_PLASMABURN = 75; &lt;/pre&gt;  Protocol: &lt;pre&gt; vector origin &lt;/pre&gt;  Creates a s...</comment>
      <text xml:space="preserve" bytes="248">Builtin definitions:
&lt;pre&gt;
void(vector org) te_plasmaburn = #433;
&lt;/pre&gt;

Temp entity definitions:
&lt;pre&gt;
float TE_PLASMABURN = 75;
&lt;/pre&gt;

Protocol:
&lt;pre&gt;
vector origin
&lt;/pre&gt;

Creates a small light flash (radius 200, time 0.2) and marks the walls.</text>
      <sha1>ad79zvaunyzya5x8oc4ja7ta54c4mby</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1839</id>
      <parentid>538</parentid>
      <timestamp>2013-03-25T00:25:26Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="272">Builtin definitions:
&lt;pre&gt;
void(vector org) te_plasmaburn = #433;
&lt;/pre&gt;

Temp entity definitions:
&lt;pre&gt;
float TE_PLASMABURN = 75;
&lt;/pre&gt;

Protocol:
&lt;pre&gt;
vector origin
&lt;/pre&gt;

Creates a small light flash (radius 200, time 0.2) and marks the walls.
[[Category:DarkPlaces]]</text>
      <sha1>4k7n4wdnbu33fda0kqxgs8wpjthklsb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP TE QUADEFFECTS1</title>
    <ns>0</ns>
    <id>332</id>
    <revision>
      <id>539</id>
      <timestamp>2008-02-29T11:56:40Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; void(vector org) te_gunshotquad = #412; void(vector org) te_spikequad = #413; void(vector org) te_superspikequad = #414; void(vector org) te_explosionquad = #415...</comment>
      <text xml:space="preserve" bytes="595">Builtin definitions:
&lt;pre&gt;
void(vector org) te_gunshotquad = #412;
void(vector org) te_spikequad = #413;
void(vector org) te_superspikequad = #414;
void(vector org) te_explosionquad = #415;
&lt;/pre&gt;

Temp entity definitions:
&lt;pre&gt;
float   TE_GUNSHOTQUAD  = 57; // [vector] origin
float   TE_SPIKEQUAD    = 58; // [vector] origin
float   TE_SUPERSPIKEQUAD = 59; // [vector] origin
float   TE_EXPLOSIONQUAD = 70; // [vector] origin
&lt;/pre&gt;

Protocol:
&lt;pre&gt;
vector origin
&lt;/pre&gt;

All of these just take a location, and are equivilant in function (but not appearance :) to the original TE_GUNSHOT, etc.</text>
      <sha1>fh33ef1ku40579h3mnaxxfljzj3dsmo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1840</id>
      <parentid>539</parentid>
      <timestamp>2013-03-25T00:25:35Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="619">Builtin definitions:
&lt;pre&gt;
void(vector org) te_gunshotquad = #412;
void(vector org) te_spikequad = #413;
void(vector org) te_superspikequad = #414;
void(vector org) te_explosionquad = #415;
&lt;/pre&gt;

Temp entity definitions:
&lt;pre&gt;
float   TE_GUNSHOTQUAD  = 57; // [vector] origin
float   TE_SPIKEQUAD    = 58; // [vector] origin
float   TE_SUPERSPIKEQUAD = 59; // [vector] origin
float   TE_EXPLOSIONQUAD = 70; // [vector] origin
&lt;/pre&gt;

Protocol:
&lt;pre&gt;
vector origin
&lt;/pre&gt;

All of these just take a location, and are equivilant in function (but not appearance :) to the original TE_GUNSHOT, etc.
[[Category:DarkPlaces]]</text>
      <sha1>ruyzu1di1n8p4vwvzqglrtxw58yeq47</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP TE SMALLFLASH</title>
    <ns>0</ns>
    <id>333</id>
    <revision>
      <id>540</id>
      <timestamp>2008-02-29T11:57:22Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; void(vector org) te_smallflash = #416; &lt;/pre&gt;  Temp entity definitions: &lt;pre&gt; float TE_SMALLFLASH = 72; &lt;/pre&gt;  Protocol: &lt;pre&gt; vector origin &lt;/pre&gt;  Creates a s...</comment>
      <text xml:space="preserve" bytes="228">Builtin definitions:
&lt;pre&gt;
void(vector org) te_smallflash = #416;
&lt;/pre&gt;

Temp entity definitions:
&lt;pre&gt;
float TE_SMALLFLASH = 72;
&lt;/pre&gt;

Protocol:
&lt;pre&gt;
vector origin
&lt;/pre&gt;

Creates a small light flash (radius 200, time 0.2).</text>
      <sha1>2w4u1hrakxcdu8atsgins1g9mvw5bdk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1841</id>
      <parentid>540</parentid>
      <timestamp>2013-03-25T00:25:43Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="252">Builtin definitions:
&lt;pre&gt;
void(vector org) te_smallflash = #416;
&lt;/pre&gt;

Temp entity definitions:
&lt;pre&gt;
float TE_SMALLFLASH = 72;
&lt;/pre&gt;

Protocol:
&lt;pre&gt;
vector origin
&lt;/pre&gt;

Creates a small light flash (radius 200, time 0.2).
[[Category:DarkPlaces]]</text>
      <sha1>gm4h4ewu7njtuy69sy37p1f6dvjqi6b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP TE SPARK</title>
    <ns>0</ns>
    <id>334</id>
    <revision>
      <id>541</id>
      <timestamp>2008-02-29T11:58:01Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; void(vector org, vector vel, float howmany) te_spark = #411; &lt;/pre&gt;  Temp entity definitions: &lt;pre&gt; float TE_SPARK = 51; &lt;/pre&gt;  Protocol: &lt;pre&gt; vector origin by...</comment>
      <text xml:space="preserve" bytes="355">Builtin definitions:
&lt;pre&gt;
void(vector org, vector vel, float howmany) te_spark = #411;
&lt;/pre&gt;

Temp entity definitions:
&lt;pre&gt;
float TE_SPARK = 51;
&lt;/pre&gt;

Protocol:
&lt;pre&gt;
vector origin
byte xvelocity (-128 to 127)
byte yvelocity (-128 to 127)
byte zvelocity (-128 to 127)
byte count (number of sparks)
&lt;/pre&gt;

Creates a shower of sparks and a smoke puff.</text>
      <sha1>ceen6sa31spbj7xlvex0mnkpcvoajka</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1842</id>
      <parentid>541</parentid>
      <timestamp>2013-03-25T00:25:53Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="379">Builtin definitions:
&lt;pre&gt;
void(vector org, vector vel, float howmany) te_spark = #411;
&lt;/pre&gt;

Temp entity definitions:
&lt;pre&gt;
float TE_SPARK = 51;
&lt;/pre&gt;

Protocol:
&lt;pre&gt;
vector origin
byte xvelocity (-128 to 127)
byte yvelocity (-128 to 127)
byte zvelocity (-128 to 127)
byte count (number of sparks)
&lt;/pre&gt;

Creates a shower of sparks and a smoke puff.
[[Category:DarkPlaces]]</text>
      <sha1>9qgqvnvpwz8ixfnevad0kjzonqg2gys</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP TE STANDARDEFFECTBUILTINS</title>
    <ns>0</ns>
    <id>335</id>
    <revision>
      <id>542</id>
      <timestamp>2008-02-29T11:58:25Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; void(vector org) te_gunshot = #418; void(vector org) te_spike = #419; void(vector org) te_superspike = #420; void(vector org) te_explosion = #421; void(vector or...</comment>
      <text xml:space="preserve" bytes="735">Builtin definitions:
&lt;pre&gt;
void(vector org) te_gunshot = #418;
void(vector org) te_spike = #419;
void(vector org) te_superspike = #420;
void(vector org) te_explosion = #421;
void(vector org) te_tarexplosion = #422;
void(vector org) te_wizspike = #423;
void(vector org) te_knightspike = #424;
void(vector org) te_lavasplash = #425;
void(vector org) te_teleport = #426;
void(vector org, float color, float colorlength) te_explosion2 = #427;
void(entity own, vector start, vector end) te_lightning1 = #428;
void(entity own, vector start, vector end) te_lightning2 = #429;
void(entity own, vector start, vector end) te_lightning3 = #430;
void(entity own, vector start, vector end) te_beam = #431;
&lt;/pre&gt;

To make life easier on mod coders.</text>
      <sha1>n534m78zvcm50fyegpgn4c8w7m2qy4d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1843</id>
      <parentid>542</parentid>
      <timestamp>2013-03-25T00:26:01Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="759">Builtin definitions:
&lt;pre&gt;
void(vector org) te_gunshot = #418;
void(vector org) te_spike = #419;
void(vector org) te_superspike = #420;
void(vector org) te_explosion = #421;
void(vector org) te_tarexplosion = #422;
void(vector org) te_wizspike = #423;
void(vector org) te_knightspike = #424;
void(vector org) te_lavasplash = #425;
void(vector org) te_teleport = #426;
void(vector org, float color, float colorlength) te_explosion2 = #427;
void(entity own, vector start, vector end) te_lightning1 = #428;
void(entity own, vector start, vector end) te_lightning2 = #429;
void(entity own, vector start, vector end) te_lightning3 = #430;
void(entity own, vector start, vector end) te_beam = #431;
&lt;/pre&gt;

To make life easier on mod coders.
[[Category:DarkPlaces]]</text>
      <sha1>r2xjkxnjk0vx0widrcpz3clsjpdehrs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP TRACE HITCONTENTSMASK SURFACEINFO</title>
    <ns>0</ns>
    <id>336</id>
    <revision>
      <id>544</id>
      <timestamp>2008-02-29T12:02:32Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Globals: &lt;pre&gt; .float dphitcontentsmask; // If non-zero on the entity passed to traceline/tracebox/tracetoss                           // this will override the normal collidable contents ...</comment>
      <text xml:space="preserve" bytes="3606">Globals:
&lt;pre&gt;
.float dphitcontentsmask; // If non-zero on the entity passed to traceline/tracebox/tracetoss
                          // this will override the normal collidable contents rules and
                          // instead hit these contents values (for example AI can use
                          // tracelines that hit DONOTENTER if it wants to, by simply changing
                          // this field on the entity passed to traceline), this affects normal
                          // movement as well as trace calls
float trace_dpstartcontents; // DPCONTENTS_ value at start position of trace
float trace_dphitcontents; // DPCONTENTS_ value of impacted surface (not contents at impact
                           //point, just contents of the surface that was hit)
float trace_dphitq3surfaceflags; // Q3SURFACEFLAG_ value of impacted surface
string trace_dphittexturename; // texture name of impacted surface
&lt;/pre&gt;

Constants:
&lt;pre&gt;
float DPCONTENTS_SOLID = 1; // hit a bmodel, not a bounding box
float DPCONTENTS_WATER = 2;
float DPCONTENTS_SLIME = 4;
float DPCONTENTS_LAVA = 8;
float DPCONTENTS_SKY = 16;
float DPCONTENTS_BODY = 32; // hit a bounding box, not a bmodel
float DPCONTENTS_CORPSE = 64; // hit a SOLID_CORPSE entity
float DPCONTENTS_NODROP = 128; // an area where backpacks should not spawn
float DPCONTENTS_PLAYERCLIP = 256; // blocks player movement
float DPCONTENTS_MONSTERCLIP = 512; // blocks monster movement
float DPCONTENTS_DONOTENTER = 1024; // AI hint brush
float DPCONTENTS_LIQUIDSMASK = 14; // WATER | SLIME | LAVA
float Q3SURFACEFLAG_NODAMAGE = 1;
float Q3SURFACEFLAG_SLICK = 2; // low friction surface
float Q3SURFACEFLAG_SKY = 4; // sky surface (also has NOIMPACT and NOMARKS set)
float Q3SURFACEFLAG_LADDER = 8; // climbable surface
float Q3SURFACEFLAG_NOIMPACT = 16; // projectiles should remove themselves on impact (this is set on sky)
float Q3SURFACEFLAG_NOMARKS = 32; // projectiles should not leave marks, such as decals (this is set on sky)
float Q3SURFACEFLAG_FLESH = 64; // projectiles should do a fleshy effect (blood?) on impact
//float Q3SURFACEFLAG_NODRAW = 128; // compiler hint (not important to qc)
//float Q3SURFACEFLAG_HINT = 256; // compiler hint (not important to qc)
//float Q3SURFACEFLAG_SKIP = 512; // compiler hint (not important to qc)
//float Q3SURFACEFLAG_NOLIGHTMAP = 1024; // compiler hint (not important to qc)
//float Q3SURFACEFLAG_POINTLIGHT = 2048; // compiler hint (not important to qc)
float Q3SURFACEFLAG_METALSTEPS = 4096; // walking on this surface should make metal step sounds
float Q3SURFACEFLAG_NOSTEPS = 8192; // walking on this surface should not make footstep sounds
//float Q3SURFACEFLAG_NONSOLID = 16384; // compiler hint (not important to qc)
//float Q3SURFACEFLAG_LIGHTFILTER = 32768; // compiler hint (not important to qc)
//float Q3SURFACEFLAG_ALPHASHADOW = 65536; // compiler hint (not important to qc)
//float Q3SURFACEFLAG_NODLIGHT = 131072; // compiler hint (not important to qc)
//float Q3SURFACEFLAG_DUST = 262144; // translucent 'light beam' effect (not important to qc)
&lt;/pre&gt;

Adds additional information after a traceline/tracebox/tracetoss call.

Also (very important) sets trace_* globals before calling .touch functions,
this allows them to inspect the nature of the collision (for example
determining if a projectile hit sky), clears trace_* variables for the other
object in a touch event (that is to say, a projectile moving will see the
trace results in its .touch function, but the player it hit will see very
little information in the trace_ variables as it was not moving at the time)</text>
      <sha1>cwer28ocr014u4jzst5rhoomm55az8o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1844</id>
      <parentid>544</parentid>
      <timestamp>2013-03-25T00:26:12Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="3630">Globals:
&lt;pre&gt;
.float dphitcontentsmask; // If non-zero on the entity passed to traceline/tracebox/tracetoss
                          // this will override the normal collidable contents rules and
                          // instead hit these contents values (for example AI can use
                          // tracelines that hit DONOTENTER if it wants to, by simply changing
                          // this field on the entity passed to traceline), this affects normal
                          // movement as well as trace calls
float trace_dpstartcontents; // DPCONTENTS_ value at start position of trace
float trace_dphitcontents; // DPCONTENTS_ value of impacted surface (not contents at impact
                           //point, just contents of the surface that was hit)
float trace_dphitq3surfaceflags; // Q3SURFACEFLAG_ value of impacted surface
string trace_dphittexturename; // texture name of impacted surface
&lt;/pre&gt;

Constants:
&lt;pre&gt;
float DPCONTENTS_SOLID = 1; // hit a bmodel, not a bounding box
float DPCONTENTS_WATER = 2;
float DPCONTENTS_SLIME = 4;
float DPCONTENTS_LAVA = 8;
float DPCONTENTS_SKY = 16;
float DPCONTENTS_BODY = 32; // hit a bounding box, not a bmodel
float DPCONTENTS_CORPSE = 64; // hit a SOLID_CORPSE entity
float DPCONTENTS_NODROP = 128; // an area where backpacks should not spawn
float DPCONTENTS_PLAYERCLIP = 256; // blocks player movement
float DPCONTENTS_MONSTERCLIP = 512; // blocks monster movement
float DPCONTENTS_DONOTENTER = 1024; // AI hint brush
float DPCONTENTS_LIQUIDSMASK = 14; // WATER | SLIME | LAVA
float Q3SURFACEFLAG_NODAMAGE = 1;
float Q3SURFACEFLAG_SLICK = 2; // low friction surface
float Q3SURFACEFLAG_SKY = 4; // sky surface (also has NOIMPACT and NOMARKS set)
float Q3SURFACEFLAG_LADDER = 8; // climbable surface
float Q3SURFACEFLAG_NOIMPACT = 16; // projectiles should remove themselves on impact (this is set on sky)
float Q3SURFACEFLAG_NOMARKS = 32; // projectiles should not leave marks, such as decals (this is set on sky)
float Q3SURFACEFLAG_FLESH = 64; // projectiles should do a fleshy effect (blood?) on impact
//float Q3SURFACEFLAG_NODRAW = 128; // compiler hint (not important to qc)
//float Q3SURFACEFLAG_HINT = 256; // compiler hint (not important to qc)
//float Q3SURFACEFLAG_SKIP = 512; // compiler hint (not important to qc)
//float Q3SURFACEFLAG_NOLIGHTMAP = 1024; // compiler hint (not important to qc)
//float Q3SURFACEFLAG_POINTLIGHT = 2048; // compiler hint (not important to qc)
float Q3SURFACEFLAG_METALSTEPS = 4096; // walking on this surface should make metal step sounds
float Q3SURFACEFLAG_NOSTEPS = 8192; // walking on this surface should not make footstep sounds
//float Q3SURFACEFLAG_NONSOLID = 16384; // compiler hint (not important to qc)
//float Q3SURFACEFLAG_LIGHTFILTER = 32768; // compiler hint (not important to qc)
//float Q3SURFACEFLAG_ALPHASHADOW = 65536; // compiler hint (not important to qc)
//float Q3SURFACEFLAG_NODLIGHT = 131072; // compiler hint (not important to qc)
//float Q3SURFACEFLAG_DUST = 262144; // translucent 'light beam' effect (not important to qc)
&lt;/pre&gt;

Adds additional information after a traceline/tracebox/tracetoss call.

Also (very important) sets trace_* globals before calling .touch functions,
this allows them to inspect the nature of the collision (for example
determining if a projectile hit sky), clears trace_* variables for the other
object in a touch event (that is to say, a projectile moving will see the
trace results in its .touch function, but the player it hit will see very
little information in the trace_ variables as it was not moving at the time)
[[Category:DarkPlaces]]</text>
      <sha1>mniqiir5slvu2ops5qtd18b6noqj8eo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DP VIEWZOOM</title>
    <ns>0</ns>
    <id>337</id>
    <revision>
      <id>545</id>
      <timestamp>2008-02-29T12:03:11Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Field definitions: &lt;pre&gt; .float viewzoom; &lt;/pre&gt;  Scales fov and sensitivity of player, valid range is 0 to 1 (intended for sniper rifle zooming, and such)</comment>
      <text xml:space="preserve" bytes="155">Field definitions:
&lt;pre&gt;
.float viewzoom;
&lt;/pre&gt;

Scales fov and sensitivity of player, valid range is 0 to 1 (intended for sniper rifle zooming, and such)</text>
      <sha1>spmpc96f90p7hcufhhduhivfy2gotm7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1845</id>
      <parentid>545</parentid>
      <timestamp>2013-03-25T00:26:21Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="179">Field definitions:
&lt;pre&gt;
.float viewzoom;
&lt;/pre&gt;

Scales fov and sensitivity of player, valid range is 0 to 1 (intended for sniper rifle zooming, and such)
[[Category:DarkPlaces]]</text>
      <sha1>4na0vv0omx5i7enbvl4bvldfaq1kxzq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DarkPlaces</title>
    <ns>0</ns>
    <id>70</id>
    <revision>
      <id>110</id>
      <timestamp>2007-10-30T21:45:16Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: [[DarkPlaces]], [[LordHavoc]]'s Quake engine. One of the fastest engines available, it features realtime lighting, bumpmapping, an OpenGL shader system, bloom lighting, model interpolation...</comment>
      <text xml:space="preserve" bytes="1153">[[DarkPlaces]],
[[LordHavoc]]'s Quake engine. One of the fastest engines available, it features realtime lighting, bumpmapping, an OpenGL shader system, bloom lighting, model interpolation, and rewritten network code which supports connecting to [[NetQuake]] and [[QuakeWorld]] servers within the same binary. It is functional as a standalone engine and is used for many projects such as [[Nexuiz]], [[Darsana]], and [[Transfusion]]. Known for its increase in limits, allowing more intricate mapping, in various BSP formats, as well as more flexibility in qc, DarkPlaces is preferred by most modders.

It has recently added advanced texturing techniques such as normal mapping and deluxemaps, which are being employed by [[Kedhrin]]'s [[Quake10Year]] project. Maintains full compatibility with mods and even with other engines. It is still in development and has a continuing mod by [[LordHavoc]] under the same name, both of which can be found at http://www.icculus.org/twilight/darkplaces for the latest (generally annual) stable releases, or for the most uptodate versions, or any previous version, at http://www.icculus.org/twilight/darkplaces/files</text>
      <sha1>4mk6iih0lm9woohz5upqqbpgtf8sxh3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>230</id>
      <parentid>110</parentid>
      <timestamp>2007-11-02T19:55:56Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="1434">{{Infobox Engine
|name=DarkPlaces
|based-on=[[GLQuake]]
|author=[[LordHavoc]]
|first-release=[http://icculus.org/twilight/darkplaces/files/2000/?M=A 2000]
|newest-release=[http://icculus.org/twilight/darkplaces/files/?M=D Oct 30 2007]
|website=[http://www.icculus.org/twilight/darkplaces here]
}}
[[LordHavoc]]'s Quake engine. One of the fastest engines available, it features realtime lighting, bumpmapping, an OpenGL shader system, bloom lighting, model interpolation, and rewritten network code which supports connecting to [[NetQuake]] and [[QuakeWorld]] servers within the same binary. It is functional as a standalone engine and is used for many projects such as [[Nexuiz]], [[Darsana]], and [[Transfusion]]. Known for its increase in limits, allowing more intricate mapping, in various BSP formats, as well as more flexibility in qc, DarkPlaces is preferred by most modders.

It has recently added advanced texturing techniques such as normal mapping and deluxemaps, which are being employed by [[Kedhrin]]'s [[Quake10Year]] project. Maintains full compatibility with mods and even with other engines. It is still in development and has a continuing mod by [[LordHavoc]] under the same name, both of which can be found at http://www.icculus.org/twilight/darkplaces for the latest (generally annual) stable releases, or for the most uptodate versions, or any previous version, at http://www.icculus.org/twilight/darkplaces/files</text>
      <sha1>h892vlmsr48svc7emm4a2zcfwa0os5n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>235</id>
      <parentid>230</parentid>
      <timestamp>2007-11-02T20:08:43Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1447">{{Infobox Engine
|name=DarkPlaces
|based-on=[[GLQuake]]
|author=[[LordHavoc]]
|first-release=[http://icculus.org/twilight/darkplaces/files/2000/?M=A 2000]
|newest-release=[http://icculus.org/twilight/darkplaces/files/?M=D Oct 30 2007]
|website=[http://www.icculus.org/twilight/darkplaces here]
}}
[[LordHavoc]]'s Quake engine. One of the fastest engines available, it features realtime lighting, bumpmapping, an OpenGL shader system, bloom lighting, model interpolation, and rewritten network code which supports connecting to [[NetQuake]] and [[QuakeWorld]] servers within the same binary. It is functional as a standalone engine and is used for many projects such as [[Nexuiz]], [[Darsana]], and [[Transfusion]]. Known for its increase in limits, allowing more intricate mapping, in various BSP formats, as well as more flexibility in qc, DarkPlaces is preferred by most modders.

It has recently added advanced texturing techniques such as normal mapping and deluxemaps, which are being employed by [[Kedhrin]]'s [[Quake10Year]] project. Maintains full compatibility with mods and even with other engines. It is still in development and has a continuing mod by [[LordHavoc]] under the same name, both of which can be found at http://www.icculus.org/twilight/darkplaces for the latest (generally annual) stable releases, or for the most uptodate versions, or any previous version, at http://www.icculus.org/twilight/darkplaces/files

{{Engines}}</text>
      <sha1>1l5gt4v4q7swcup69vxvh3igzv6wmb0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>636</id>
      <parentid>235</parentid>
      <timestamp>2008-04-21T20:36:53Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <text xml:space="preserve" bytes="1497">{{Infobox Engine
|name=DarkPlaces
|based-on=[[GLQuake]]
|author=[[LordHavoc]]
|first-release=[http://icculus.org/twilight/darkplaces/files/2000/?M=A 2000]
|newest-release=[http://icculus.org/twilight/darkplaces/files/?M=D Oct 30 2007]
|website=[http://www.icculus.org/twilight/darkplaces here]
}}
[[LordHavoc]]'s Quake engine. One of the fastest engines available, it features realtime lighting, bumpmapping, an OpenGL shader system, bloom lighting, model interpolation, and rewritten network code which supports connecting to [[NetQuake]] and [[QuakeWorld]] servers within the same binary. It is functional as a standalone engine and is used for many projects such as [[Nexuiz]], [[Darsana]], and [[Transfusion]]. Known for its increase in limits, allowing more intricate mapping, in various BSP formats, as well as more flexibility in qc, DarkPlaces is preferred by most modders.

It has recently added advanced texturing techniques such as normal mapping and deluxemaps, which are being employed by [[Kedhrin]]'s [[Quake10Year]] project. Maintains full compatibility with mods and even with other engines. It is still in development and has a continuing mod by [[LordHavoc]] under the same name, both of which can be found at http://www.icculus.org/twilight/darkplaces for the latest (generally annual) stable releases, or for the most uptodate versions, or any previous version, at http://www.icculus.org/twilight/darkplaces/files

{{Engines}}
{{GL NetQuake Engines}}
{{GL QuakeWorld Engines}}</text>
      <sha1>hifaoysfhd06x9ew5po47vvgvo7wdtb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1742</id>
      <parentid>636</parentid>
      <timestamp>2013-03-25T00:03:31Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>categories</comment>
      <text xml:space="preserve" bytes="1521">{{Infobox Engine
|name=DarkPlaces
|based-on=[[GLQuake]]
|author=[[LordHavoc]]
|first-release=[http://icculus.org/twilight/darkplaces/files/2000/?M=A 2000]
|newest-release=[http://icculus.org/twilight/darkplaces/files/?M=D Oct 30 2007]
|website=[http://www.icculus.org/twilight/darkplaces here]
}}
[[LordHavoc]]'s Quake engine. One of the fastest engines available, it features realtime lighting, bumpmapping, an OpenGL shader system, bloom lighting, model interpolation, and rewritten network code which supports connecting to [[NetQuake]] and [[QuakeWorld]] servers within the same binary. It is functional as a standalone engine and is used for many projects such as [[Nexuiz]], [[Darsana]], and [[Transfusion]]. Known for its increase in limits, allowing more intricate mapping, in various BSP formats, as well as more flexibility in qc, DarkPlaces is preferred by most modders.

It has recently added advanced texturing techniques such as normal mapping and deluxemaps, which are being employed by [[Kedhrin]]'s [[Quake10Year]] project. Maintains full compatibility with mods and even with other engines. It is still in development and has a continuing mod by [[LordHavoc]] under the same name, both of which can be found at http://www.icculus.org/twilight/darkplaces for the latest (generally annual) stable releases, or for the most uptodate versions, or any previous version, at http://www.icculus.org/twilight/darkplaces/files

{{Engines}}
{{GL NetQuake Engines}}
{{GL QuakeWorld Engines}}
[[Category:DarkPlaces]]</text>
      <sha1>0ehcz9kq6osvt8xws7an5ztwpkf8syb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Darkplaces</title>
    <ns>0</ns>
    <id>628</id>
    <redirect title="DarkPlaces" />
    <revision>
      <id>1741</id>
      <timestamp>2013-03-25T00:03:10Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>redir</comment>
      <text xml:space="preserve" bytes="24">#REDIRECT [[DarkPlaces]]</text>
      <sha1>hii2gi771kg332ntkem0879lxdirtnv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Death Knight</title>
    <ns>0</ns>
    <id>136</id>
    <revision>
      <id>218</id>
      <timestamp>2007-11-02T19:36:35Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: This particular canned meat tends to open you up instead.  * '''Weapon:''' Sword, Fireballs * '''Health:''' 250 * '''Treasure:''' Nothing  '''Tips:''' Death Knights do more damage with the...</comment>
      <text xml:space="preserve" bytes="698">This particular canned meat tends to open you up instead.

* '''Weapon:''' Sword, Fireballs
* '''Health:''' 250
* '''Treasure:''' Nothing

'''Tips:''' Death Knights do more damage with their swords than regular [[Knight|Knights]], and also have a ranged weapon: Fireballs. They can throw multiple slow-moving fireballs, so get ready to dodge. For killing them, use the [[Double-Barrelled Shotgun]] at close range, otherwise you're going to want to use a [[Nailgun]], or preferably, a [[Super Nailgun]]. [[Rocket Launcher|Rockets]] and [[Grenade Launcher|Grenades]] work well too.

'''Entity name:''' [[monster_hell_knight]]

[http://wiki.quakesrc.org/files/hknight.gif]

==See Also==
* [[Monsters]]</text>
      <sha1>t54m2l7fjhi7zb1vwe6b5qni73xlea6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>274</id>
      <parentid>218</parentid>
      <timestamp>2007-11-05T22:15:46Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <text xml:space="preserve" bytes="615">This particular canned meat tends to open you up instead.

* '''Weapon:''' Sword, Fireballs
* '''Health:''' 250
* '''Treasure:''' Nothing

'''Tips:''' Death Knights wield sharper blades than typical [[Knight|Knights]], and unfortunately for you also boast a ranged attack, a horizontal fanning of fireballs which are difficult to dodge shortly after release. Keep just outside of melee range and if not dealing with a crowd, stick to the [[Double-Barrelled Shotgun]]. Explosives are a worthy investment against a group.

[[Image:Hknight.gif]]

'''Entity name:''' [[monster_hell_knight]]

==See Also==
* [[Monsters]]</text>
      <sha1>bmt9suxrsbys866yz8g31ne1dvqh8ri</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>737</id>
      <parentid>274</parentid>
      <timestamp>2008-05-07T20:37:48Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="728">This particular canned meat tends to open you up instead.

* '''Weapon:''' Sword, Fireballs
* '''Health:''' 250
* '''Treasure:''' Nothing

'''Tips:'''
----
 Death Knights wield sharper blades than typical [[Knight|Knights]], and unfortunately for you also boast a ranged attack, a horizontal fanning of fireballs which are difficult to dodge shortly after release. Keep just outside of melee range and if not dealing with a crowd, stick to the [[Double-Barrelled Shotgun]]. Explosives are a worthy investment against a group.
*'''Best Weapons:''' Rocket Launcher, Super Nailgun
*'''Worst Weapons:''' Shotgun, Double-Barreled Shotgun

[[Image:Hknight.gif]]

'''Entity name:''' [[monster_hell_knight]]

==See Also==
* [[Monsters]]</text>
      <sha1>mzdfvozcgdzmo6ocxie2wuvxvo1pp2l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>738</id>
      <parentid>737</parentid>
      <timestamp>2008-05-07T20:37:59Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="727">This particular canned meat tends to open you up instead.

* '''Weapon:''' Sword, Fireballs
* '''Health:''' 250
* '''Treasure:''' Nothing

'''Tips:'''
----
Death Knights wield sharper blades than typical [[Knight|Knights]], and unfortunately for you also boast a ranged attack, a horizontal fanning of fireballs which are difficult to dodge shortly after release. Keep just outside of melee range and if not dealing with a crowd, stick to the [[Double-Barrelled Shotgun]]. Explosives are a worthy investment against a group.
*'''Best Weapons:''' Rocket Launcher, Super Nailgun
*'''Worst Weapons:''' Shotgun, Double-Barreled Shotgun

[[Image:Hknight.gif]]

'''Entity name:''' [[monster_hell_knight]]

==See Also==
* [[Monsters]]</text>
      <sha1>fvuzpc8qa9b0qj1oi2mb8lsp7y80rje</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>798</id>
      <parentid>738</parentid>
      <timestamp>2008-05-09T17:23:32Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <text xml:space="preserve" bytes="1501">{{Infobox Monster
|monstername=Death Knight
|entityname=monster_hell_knight
|monsterhealth=250
|monstermelee=Sword
|monstermissile=Magic missile spread
|movetype=MOVETYPE_STEP
|monsterspeed=3.3, 16.5
|monsterclass=Medieval, registered
}}

[[Image:Hknight.gif|left]]The Death Knight makes his first appearance in [[The Crypt of Decay]]. Often seen patrolling, he makes low hoarse grunts, rather than growls, which can be identified from a distance. Distinguishable by his horned helmet, armor, and sheer size, a new player may hesitate on initiating combat with the Death Knight. 

Wielding a rather large sword, and possessing a strong tenacity for charging while swinging, it is a good idea to keep your distance, though you risk him utilizing his magic missile attack, which fans out horizontally making dodging a bit difficult. Thankfully due to this, you can lure the Death Knight into inciting chaos by harming other monsters. 

Some players however criticize them as being a bit too boring, lacking significant variety or threat in their behavior, and acting as a super shotgun sponge to reduce ammo and slow the player. They may appear in hordes, but that generally mitigates the effectiveness of their magic, and makes them susceptible to explosives. A far more dangerous variety can be found in [[DarkPlaces Mod]] where the magic homes in on the player and pursues rather relentlessly.

''&quot;This particular canned meat tends to open you up instead.&quot;''

==See Also==
* [[Knight]]
* [[Monsters]]</text>
      <sha1>erp4fx8vq91gzi85ycxsv6amdc0qth5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>867</id>
      <parentid>798</parentid>
      <timestamp>2008-05-17T18:54:19Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1522">{{Infobox Monster
|monstername=Death Knight
|entityname=monster_hell_knight
|monsterhealth=250
|monstermelee=Sword
|monstermissile=Magic missile spread
|movetype=MOVETYPE_STEP
|monsterspeed=3.3, 16.5
|monsterclass=Medieval, registered
|monsterdrop=nothing
}}

[[Image:Hknight.gif|left]]The Death Knight makes his first appearance in [[The Crypt of Decay]]. Often seen patrolling, he makes low hoarse grunts, rather than growls, which can be identified from a distance. Distinguishable by his horned helmet, armor, and sheer size, a new player may hesitate on initiating combat with the Death Knight. 

Wielding a rather large sword, and possessing a strong tenacity for charging while swinging, it is a good idea to keep your distance, though you risk him utilizing his magic missile attack, which fans out horizontally making dodging a bit difficult. Thankfully due to this, you can lure the Death Knight into inciting chaos by harming other monsters. 

Some players however criticize them as being a bit too boring, lacking significant variety or threat in their behavior, and acting as a super shotgun sponge to reduce ammo and slow the player. They may appear in hordes, but that generally mitigates the effectiveness of their magic, and makes them susceptible to explosives. A far more dangerous variety can be found in [[DarkPlaces Mod]] where the magic homes in on the player and pursues rather relentlessly.

''&quot;This particular canned meat tends to open you up instead.&quot;''

==See Also==
* [[Knight]]
* [[Monsters]]</text>
      <sha1>n0tdki1vnvi62sfa9solc57jyfdckw3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1231</id>
      <parentid>867</parentid>
      <timestamp>2009-09-25T07:48:53Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="1459">{{Infobox Monster
|name=Death Knight
|model=hknight.mdl, h_hellkn.mdl
|entity=monster_hell_knight
|health=250
|attacks=Sword, magic missiles
|drop=nothing
}}

[[Image:Hknight.gif|left]]
The '''Death Knight''' (also known as the Hell Knight) makes his first appearance in [[The Crypt of Decay]]. Often seen patrolling, he makes low hoarse grunts, rather than growls, which can be identified from a distance. Distinguishable by his horned helmet, armor, and sheer size, a new player may hesitate on initiating combat with the Death Knight. 

Wielding a rather large sword, and possessing a strong tenacity for charging while swinging, it is a good idea to keep your distance, though you risk him utilizing his magic missile attack, which fans out horizontally making dodging a bit difficult. Thankfully due to this, you can lure the Death Knight into inciting chaos by harming other monsters. 

Some players however criticize them as being a bit too boring, lacking significant variety or threat in their behavior, and acting as a super shotgun sponge to reduce ammo and slow the player. They may appear in hordes, but that generally mitigates the effectiveness of their magic, and makes them susceptible to explosives. A far more dangerous variety can be found in [[DarkPlaces Mod]] where the magic homes in on the player and pursues rather relentlessly.

''&quot;This particular canned meat tends to open you up instead.&quot;''

==See Also==
* [[Knight]]

{{Monsters}}</text>
      <sha1>6jqzzzswu233rov3z9y4fizqg142xd0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1239</id>
      <parentid>1231</parentid>
      <timestamp>2009-09-25T07:55:48Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1474">{{Infobox Monster
|name=Death Knight
|model=hknight.mdl&lt;br /&gt;h_hellkn.mdl (head gib)
|entity=monster_hell_knight
|health=250
|attacks=Sword, magic missiles
|drop=nothing
}}

[[Image:Hknight.gif|left]]
The '''Death Knight''' (also known as the Hell Knight) makes his first appearance in [[The Crypt of Decay]]. Often seen patrolling, he makes low hoarse grunts, rather than growls, which can be identified from a distance. Distinguishable by his horned helmet, armor, and sheer size, a new player may hesitate on initiating combat with the Death Knight. 

Wielding a rather large sword, and possessing a strong tenacity for charging while swinging, it is a good idea to keep your distance, though you risk him utilizing his magic missile attack, which fans out horizontally making dodging a bit difficult. Thankfully due to this, you can lure the Death Knight into inciting chaos by harming other monsters. 

Some players however criticize them as being a bit too boring, lacking significant variety or threat in their behavior, and acting as a super shotgun sponge to reduce ammo and slow the player. They may appear in hordes, but that generally mitigates the effectiveness of their magic, and makes them susceptible to explosives. A far more dangerous variety can be found in [[DarkPlaces Mod]] where the magic homes in on the player and pursues rather relentlessly.

''&quot;This particular canned meat tends to open you up instead.&quot;''

==See Also==
* [[Knight]]

{{Monsters}}</text>
      <sha1>crae8utvhdcedv68lwnd9pfyvsr7jh2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1240</id>
      <parentid>1239</parentid>
      <timestamp>2009-09-25T07:56:08Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1498">{{Infobox Monster
|name=Death Knight
|model=hknight.mdl&lt;br /&gt;h_hellkn.mdl (head gib)
|entity=monster_hell_knight
|health=250
|attacks=Sword, magic missiles
|drop=nothing
|gameversion=Registered
}}

[[Image:Hknight.gif|left]]
The '''Death Knight''' (also known as the Hell Knight) makes his first appearance in [[The Crypt of Decay]]. Often seen patrolling, he makes low hoarse grunts, rather than growls, which can be identified from a distance. Distinguishable by his horned helmet, armor, and sheer size, a new player may hesitate on initiating combat with the Death Knight. 

Wielding a rather large sword, and possessing a strong tenacity for charging while swinging, it is a good idea to keep your distance, though you risk him utilizing his magic missile attack, which fans out horizontally making dodging a bit difficult. Thankfully due to this, you can lure the Death Knight into inciting chaos by harming other monsters. 

Some players however criticize them as being a bit too boring, lacking significant variety or threat in their behavior, and acting as a super shotgun sponge to reduce ammo and slow the player. They may appear in hordes, but that generally mitigates the effectiveness of their magic, and makes them susceptible to explosives. A far more dangerous variety can be found in [[DarkPlaces Mod]] where the magic homes in on the player and pursues rather relentlessly.

''&quot;This particular canned meat tends to open you up instead.&quot;''

==See Also==
* [[Knight]]

{{Monsters}}</text>
      <sha1>l2b15fxpwyqp9vlnrab6xamgqqh2g4l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1379</id>
      <parentid>1240</parentid>
      <timestamp>2009-10-08T23:19:43Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1522">{{Infobox Monster
|name=Death Knight
|model=hknight.mdl&lt;br /&gt;h_hellkn.mdl (head gib)
|entity=monster_hell_knight
|health=250
|attacks=Sword, magic missiles
|drop=nothing
|1stappearance=[[e2m3]]
|gameversion=Registered
}}

[[Image:Hknight.gif|left]]
The '''Death Knight''' (also known as the Hell Knight) makes his first appearance in [[The Crypt of Decay]]. Often seen patrolling, he makes low hoarse grunts, rather than growls, which can be identified from a distance. Distinguishable by his horned helmet, armor, and sheer size, a new player may hesitate on initiating combat with the Death Knight. 

Wielding a rather large sword, and possessing a strong tenacity for charging while swinging, it is a good idea to keep your distance, though you risk him utilizing his magic missile attack, which fans out horizontally making dodging a bit difficult. Thankfully due to this, you can lure the Death Knight into inciting chaos by harming other monsters. 

Some players however criticize them as being a bit too boring, lacking significant variety or threat in their behavior, and acting as a super shotgun sponge to reduce ammo and slow the player. They may appear in hordes, but that generally mitigates the effectiveness of their magic, and makes them susceptible to explosives. A far more dangerous variety can be found in [[DarkPlaces Mod]] where the magic homes in on the player and pursues rather relentlessly.

''&quot;This particular canned meat tends to open you up instead.&quot;''

==See Also==
* [[Knight]]

{{Monsters}}</text>
      <sha1>2wshgwy7s9m3i7psx6n036bcna43dkv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1393</id>
      <parentid>1379</parentid>
      <timestamp>2009-10-08T23:42:28Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1563">{{Infobox Monster
|name=Death Knight
|model=hknight.mdl&lt;br /&gt;h_hellkn.mdl (head gib)
|entity=monster_hell_knight
|health=250
|attacks=Sword, magic missiles
|drop=nothing
|1stappearance=[[e2m3]]
|gameversion=Registered
}}

[[Image:Hknight.gif|left]]
''&quot;This particular canned meat tends to open you up instead.&quot;''
The '''Death Knight''' (also known as the Hell Knight) makes his first appearance in [[The Crypt of Decay]]. Often seen patrolling, he makes low hoarse grunts, rather than growls, which can be identified from a distance. Distinguishable by his horned helmet, armor, and sheer size, a new player may hesitate on initiating combat with the Death Knight. 

Wielding a rather large sword, and possessing a strong tenacity for charging while swinging, it is a good idea to keep your distance, though you risk him utilizing his magic missile attack, which fans out horizontally making dodging a bit difficult. Thankfully due to this, you can lure the Death Knight into inciting chaos by harming other monsters. 

Some players however criticize them as being a bit too boring, lacking significant variety or threat in their behavior, and acting as a super shotgun sponge to reduce ammo and slow the player. They may appear in hordes, but that generally mitigates the effectiveness of their magic, and makes them susceptible to explosives. A far more dangerous variety can be found in [[DarkPlaces Mod]] where the magic homes in on the player and pursues rather relentlessly.

''&quot;Player was slain by a Death Knight&quot;''

==See Also==
* [[Knight]]

{{Monsters}}</text>
      <sha1>0eeue6h0t7b7tcnm1rxoe0rtbg8fbr1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1918</id>
      <parentid>1393</parentid>
      <timestamp>2013-03-25T03:34:31Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>fixed image location and file link</comment>
      <text xml:space="preserve" bytes="1564">[[Image:Hknight.gif|left]]
{{Infobox Monster
|name=Death Knight
|model=hknight.mdl&lt;br /&gt;h_hellkn.mdl (head gib)
|entity=monster_hell_knight
|health=250
|attacks=Sword, magic missiles
|drop=nothing
|1stappearance=[[e2m3]]
|gameversion=Registered
}}


''&quot;This particular canned meat tends to open you up instead.&quot;''
The '''Death Knight''' (also known as the Hell Knight) makes his first appearance in [[The Crypt of Decay]]. Often seen patrolling, he makes low hoarse grunts, rather than growls, which can be identified from a distance. Distinguishable by his horned helmet, armor, and sheer size, a new player may hesitate on initiating combat with the Death Knight. 

Wielding a rather large sword, and possessing a strong tenacity for charging while swinging, it is a good idea to keep your distance, though you risk him utilizing his magic missile attack, which fans out horizontally making dodging a bit difficult. Thankfully due to this, you can lure the Death Knight into inciting chaos by harming other monsters. 

Some players however criticize them as being a bit too boring, lacking significant variety or threat in their behavior, and acting as a super shotgun sponge to reduce ammo and slow the player. They may appear in hordes, but that generally mitigates the effectiveness of their magic, and makes them susceptible to explosives. A far more dangerous variety can be found in [[DarkPlaces Mod]] where the magic homes in on the player and pursues rather relentlessly.

''&quot;Player was slain by a Death Knight&quot;''

==See Also==
* [[Knight]]

{{Monsters}}</text>
      <sha1>r4t39mypug5flog0aw82twbsm92z69r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2832</id>
      <parentid>1918</parentid>
      <timestamp>2013-04-08T13:41:08Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>changed info box</comment>
      <text xml:space="preserve" bytes="1538">{{Infobox Monster
| image = monster_quake_death_knight.png
| name = Death Knight
| manualtext = This particular canned meat tends to open you up instead.
| health = 250
| attacks = Sword, magic missiles
| drop = nothing
| 1stappearance = [[e2m3]]
| gameversion = Registered
| deathmessage = Player was slain by a Death Knight
}}

The '''Death Knight''' (also known as the Hell Knight) makes his first appearance in [[The Crypt of Decay]]. Often seen patrolling, he makes low hoarse grunts, rather than growls, which can be identified from a distance. Distinguishable by his horned helmet, armor, and sheer size, a new player may hesitate on initiating combat with the Death Knight. 

Wielding a rather large sword, and possessing a strong tenacity for charging while swinging, it is a good idea to keep your distance, though you risk him utilizing his magic missile attack, which fans out horizontally making dodging a bit difficult. Thankfully due to this, you can lure the Death Knight into inciting chaos by harming other monsters. 

Some players however criticize them as being a bit too boring, lacking significant variety or threat in their behavior, and acting as a super shotgun sponge to reduce ammo and slow the player. They may appear in hordes, but that generally mitigates the effectiveness of their magic, and makes them susceptible to explosives. A far more dangerous variety can be found in [[DarkPlaces Mod]] where the magic homes in on the player and pursues rather relentlessly.

==See Also==
* [[Knight]]

{{Monsters}}</text>
      <sha1>m0w2qmdpe1d0venhwk76c10i13qp2gu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2874</id>
      <parentid>2832</parentid>
      <timestamp>2013-04-09T04:07:02Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>added entity information</comment>
      <text xml:space="preserve" bytes="3719">{{Infobox Monster
| image = monster_quake_death_knight.png
| name = Death Knight
| manualtext = This particular canned meat tends to open you up instead.
| health = 250
| attacks = Sword, magic missiles
| drop = nothing
| 1stappearance = [[e2m3]]
| gameversion = Registered
| deathmessage = Player was slain by a Death Knight
}}

The '''Death Knight''' (also known as the Hell Knight) makes his first appearance in [[The Crypt of Decay]]. Often seen patrolling, he makes low hoarse grunts, rather than growls, which can be identified from a distance. Distinguishable by his horned helmet, armor, and sheer size, a new player may hesitate on initiating combat with the Death Knight. 

Wielding a rather large sword, and possessing a strong tenacity for charging while swinging, it is a good idea to keep your distance, though you risk him utilizing his magic missile attack, which fans out horizontally making dodging a bit difficult. Thankfully due to this, you can lure the Death Knight into inciting chaos by harming other monsters. 

Some players however criticize them as being a bit too boring, lacking significant variety or threat in their behavior, and acting as a super shotgun sponge to reduce ammo and slow the player. They may appear in hordes, but that generally mitigates the effectiveness of their magic, and makes them susceptible to explosives. A far more dangerous variety can be found in [[DarkPlaces Mod]] where the magic homes in on the player and pursues rather relentlessly.

==Tactics==


&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_hell_knight
| commonname = [[Death Knight]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 32 x 32 x 64
| quakec = [[hknight.qc]]
| precaches =
progs/hknight.mdl&lt;br&gt;
progs/k_spike.mdl&lt;br&gt;
progs/h_hellkn.mdl&lt;br&gt;
hknight/attack1.wav&lt;br&gt;
hknight/death1.wav&lt;br&gt;
hknight/pain1.wav&lt;br&gt;
hknight/sight1.wav&lt;br&gt;
hknight/hit.wav&lt;br&gt;
hknight/slash1.wav&lt;br&gt;
hknight/idle.wav&lt;br&gt;
hknight/grunt.wav&lt;br&gt;
knight/sword1.wav&lt;br&gt;
knight/sword2.wav&lt;br&gt;
}}

==Entity information==

'''monster_hell_knight''' is the [[Entity|entity]] for placing '''Death Knights''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Death Knight. When triggered, the Death Knight will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Death Knight dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Death Knight dies.
|}

====Spawnflags====
The monster_hell_knight entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Death Knight will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Death Knight
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model(&quot;:progs/hknight.mdl&quot;)
    = monster_hell_knight : &quot;Death Knight&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_hell_knight (1 0 0) (-16 -16 -24) (16 16 40) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>e0iywqvjps1ggxvr5klxpy300d6ak8l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2942</id>
      <parentid>2874</parentid>
      <timestamp>2013-05-04T15:40:28Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <minor/>
      <comment>gibs</comment>
      <text xml:space="preserve" bytes="3737">{{Infobox Monster
| image = monster_quake_death_knight.png
| name = Death Knight
| manualtext = This particular canned meat tends to open you up instead.
| health = 250
| gibthresh = -40
| attacks = Sword, magic missiles
| drop = nothing
| 1stappearance = [[e2m3]]
| gameversion = Registered
| deathmessage = Player was slain by a Death Knight
}}

The '''Death Knight''' (also known as the Hell Knight) makes his first appearance in [[The Crypt of Decay]]. Often seen patrolling, he makes low hoarse grunts, rather than growls, which can be identified from a distance. Distinguishable by his horned helmet, armor, and sheer size, a new player may hesitate on initiating combat with the Death Knight. 

Wielding a rather large sword, and possessing a strong tenacity for charging while swinging, it is a good idea to keep your distance, though you risk him utilizing his magic missile attack, which fans out horizontally making dodging a bit difficult. Thankfully due to this, you can lure the Death Knight into inciting chaos by harming other monsters. 

Some players however criticize them as being a bit too boring, lacking significant variety or threat in their behavior, and acting as a super shotgun sponge to reduce ammo and slow the player. They may appear in hordes, but that generally mitigates the effectiveness of their magic, and makes them susceptible to explosives. A far more dangerous variety can be found in [[DarkPlaces Mod]] where the magic homes in on the player and pursues rather relentlessly.

==Tactics==


&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_hell_knight
| commonname = [[Death Knight]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 32 x 32 x 64
| quakec = [[hknight.qc]]
| precaches =
progs/hknight.mdl&lt;br&gt;
progs/k_spike.mdl&lt;br&gt;
progs/h_hellkn.mdl&lt;br&gt;
hknight/attack1.wav&lt;br&gt;
hknight/death1.wav&lt;br&gt;
hknight/pain1.wav&lt;br&gt;
hknight/sight1.wav&lt;br&gt;
hknight/hit.wav&lt;br&gt;
hknight/slash1.wav&lt;br&gt;
hknight/idle.wav&lt;br&gt;
hknight/grunt.wav&lt;br&gt;
knight/sword1.wav&lt;br&gt;
knight/sword2.wav&lt;br&gt;
}}

==Entity information==

'''monster_hell_knight''' is the [[Entity|entity]] for placing '''Death Knights''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Death Knight. When triggered, the Death Knight will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Death Knight dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Death Knight dies.
|}

====Spawnflags====
The monster_hell_knight entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Death Knight will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Death Knight
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model(&quot;:progs/hknight.mdl&quot;)
    = monster_hell_knight : &quot;Death Knight&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_hell_knight (1 0 0) (-16 -16 -24) (16 16 40) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>qspkbk283q6t9gb2alt9mi3ycl3xubg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Deathmatch</title>
    <ns>0</ns>
    <id>875</id>
    <redirect title="deathmatch" />
    <revision>
      <id>2517</id>
      <timestamp>2013-03-29T14:22:00Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Deathmatch]] to [[deathmatch]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="24">#REDIRECT [[deathmatch]]</text>
      <sha1>mfud4ctheef2ow499fmcs8xsa23yyxh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Demo Recording</title>
    <ns>0</ns>
    <id>597</id>
    <revision>
      <id>1627</id>
      <timestamp>2010-08-18T20:01:56Z</timestamp>
      <contributor>
        <ip>99.246.130.206</ip>
      </contributor>
      <comment>New page: htfhd</comment>
      <text xml:space="preserve" bytes="5">htfhd</text>
      <sha1>h5mauvk9nqm0eg1hp2ldogc7xoaqkr2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1637</id>
      <parentid>1627</parentid>
      <timestamp>2010-09-09T00:19:08Z</timestamp>
      <contributor>
        <ip>159.153.4.50</ip>
      </contributor>
      <comment>Removing all content from page</comment>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2218</id>
      <parentid>1637</parentid>
      <timestamp>2013-03-26T13:03:27Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="72">{{todo|user=[[Hectate]]|todo=Missing content, need to add instructions}}</text>
      <sha1>hikelv6mu3miq61n7s1qu9kwr436l3l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2924</id>
      <parentid>2218</parentid>
      <timestamp>2013-04-16T15:01:41Z</timestamp>
      <contributor>
        <username>Baker5</username>
        <id>30</id>
      </contributor>
      <text xml:space="preserve" bytes="532">To record a demo, type in the Quake console:  record mydemo
To stop demo recording, type in the Quake console: stop
To play a demo: playdemo mydemo

If you have a video codec installed like [http://www.optimasc.com/products/vp8vfw/index.html Google's VP 8] and are using FitzQuake Mark V on Windows:

To convert a demo to AVI movie: capturedemo mydemo

Notes: GLQuake could not start recording a demo after the start of a map, but most modified engines like Quakespasm support this [an example of engine that doesn't is DarkPlaces].</text>
      <sha1>i5zk5ea5tudvx8dpy9828oq35wq9n1i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2925</id>
      <parentid>2924</parentid>
      <timestamp>2013-04-16T15:02:16Z</timestamp>
      <contributor>
        <username>Baker5</username>
        <id>30</id>
      </contributor>
      <text xml:space="preserve" bytes="534">To record a demo, type in the Quake console:  record mydemo

To stop demo recording, type in the Quake console: stop

To play a demo: playdemo mydemo

If you have a video codec installed like [http://www.optimasc.com/products/vp8vfw/index.html Google's VP 8] and are using FitzQuake Mark V on Windows:

To convert a demo to AVI movie: capturedemo mydemo

Notes: GLQuake could not start recording a demo after the start of a map, but most modified engines like Quakespasm support this [an example of engine that doesn't is DarkPlaces].</text>
      <sha1>q5ih1vptzzc39n2qxfz1ij4kedexe75</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3275</id>
      <parentid>2925</parentid>
      <timestamp>2014-10-11T20:54:50Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>just testing if mails truly work again with this random edit</comment>
      <text xml:space="preserve" bytes="554">To record a [[demo]], type in the Quake [[console]]:  record mydemo

To stop demo recording, type in the Quake console: stop

To play a demo: playdemo mydemo

If you have a video codec installed like [http://www.optimasc.com/products/vp8vfw/index.html Google's VP 8] and are using FitzQuake Mark V on Windows:

To convert a demo to AVI movie: capturedemo mydemo

Notes: [[GLQuake]] could not start recording a demo after the start of a map, but most modified engines like [[Quakespasm]] support this (an example of engine that doesn't is [[DarkPlaces]]).</text>
      <sha1>2ig42uuttsxp9txj88p26em8leb8lhy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Demo tools</title>
    <ns>0</ns>
    <id>32</id>
    <revision>
      <id>38</id>
      <timestamp>2007-10-30T17:33:33Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: * [[Demtool]] - simple but useful tool for editing and compressing demos * [[ReMaic]] - Acronym for &quot;Reshoot Existing Movie, Altering Its Camera&quot;, great tool for recamming * [http://www.pl...</comment>
      <text xml:space="preserve" bytes="998">* [[Demtool]] - simple but useful tool for editing and compressing demos
* [[ReMaic]] - Acronym for &quot;Reshoot Existing Movie, Altering Its Camera&quot;, great tool for recamming
* [http://www.planetquake.com/qdq/demix.html DeMix] - A 'demo remixer'
* [http://www.planetquake.com/sda/dzip Dzip] - Demo compression utility
* [http://www.planetquake.com/filmat11/ Film at 11] - A rather old tool
* [http://www.planetquake.com/keygrip/ KeyGrip] - Another oldie..
* [http://wiki.quakesrc.org/files/dp21.zip Demoplayer] - ?
* [http://www.planetquake.com/demospecs/ Little Movie Processing Centre]
* [http://www.fraps.com/ Frapps] - Real-Time Video Capture Software
* [http://wiki.quakesrc.org/files/demo_to_movie_tutorial.txt Demo to Video Tutorial] By Chuck
* [http://dem2mpg.planetquake.gamespy.com/ Quake Demo To Video Converter] - Command-line demo to video converter for Linux

FIXME: make local download copies of all

===See Also===
* [[Quake tools]]
* [http://www.planetquake.com/qdq/ Quake Done Quick]</text>
      <sha1>b918mg6m0ymfzx5wkyprr8d3o7rkh0x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>982</id>
      <parentid>38</parentid>
      <timestamp>2009-04-17T23:27:49Z</timestamp>
      <contributor>
        <ip>88.70.232.110</ip>
      </contributor>
      <comment>Dzip link fixed, BJP's convdem added, QDQ link fixed, SDA link added</comment>
      <text xml:space="preserve" bytes="1176">* [[Demtool]] - simple but useful tool for editing and compressing demos
* [[ReMaic]] - Acronym for &quot;Reshoot Existing Movie, Altering Its Camera&quot;, great tool for recamming
* [http://www.planetquake.com/qdq/demix.html DeMix] - A 'demo remixer'
* [http://speeddemosarchive.com/dzip/ Dzip] - Demo compression utility
* [http://www.planetquake.com/filmat11/ Film at 11] - A rather old demo editing tool
* [http://www.planetquake.com/keygrip/ KeyGrip] - Another oldie..
* [http://wiki.quakesrc.org/files/dp21.zip Demoplayer] - ?
* [http://www.planetquake.com/demospecs/ Little Movie Processing Centre]
* [http://www.fraps.com/ Frapps] - Real-Time Video Capture Software
* [http://wiki.quakesrc.org/files/demo_to_movie_tutorial.txt Demo to Video Tutorial] By Chuck
* [http://dem2mpg.planetquake.gamespy.com/ Quake Demo To Video Converter] - Command-line demo to video converter for Linux
* [http://user.tninet.se/xir870k/ Conversion/validation tool by Bengt Jardrup]

FIXME: make local download copies of all

===See Also===
* [[Quake tools]]
* [http://speeddemosarchive.com/quake/qdq/ Quake Done Quick] or
* [http://speeddemosarchive.com/quake/ Speed Demos Archive - Quake section]</text>
      <sha1>htjmiveuvzj6djbip5m11864eyl09ij</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2216</id>
      <parentid>982</parentid>
      <timestamp>2013-03-26T13:01:33Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="1183">* [[Demtool]] - simple but useful tool for editing and compressing demos
* [[ReMaic]] - Acronym for &quot;Reshoot Existing Movie, Altering Its Camera&quot;, great tool for recamming
* [http://www.planetquake.com/qdq/demix.html DeMix] - A 'demo remixer'
* [http://speeddemosarchive.com/dzip/ Dzip] - Demo compression utility
* [http://www.planetquake.com/filmat11/ Film at 11] - A rather old demo editing tool
* [http://www.planetquake.com/keygrip/ KeyGrip] - Another oldie..
* [http://wiki.quakesrc.org/files/dp21.zip Demoplayer] - ?
* [http://www.planetquake.com/demospecs/ Little Movie Processing Centre]
* [http://www.fraps.com/ Frapps] - Real-Time Video Capture Software
* [http://wiki.quakesrc.org/files/demo_to_movie_tutorial.txt Demo to Video Tutorial] By Chuck
* [http://dem2mpg.planetquake.gamespy.com/ Quake Demo To Video Converter] - Command-line demo to video converter for Linux
* [http://user.tninet.se/xir870k/ Conversion/validation tool by Bengt Jardrup]

{{todo|todo=make local download copies of all}}

===See Also===
* [[Quake tools]]
* [http://speeddemosarchive.com/quake/qdq/ Quake Done Quick] or
* [http://speeddemosarchive.com/quake/ Speed Demos Archive - Quake section]</text>
      <sha1>sr7yxw1645p3atpvsxoqmnlb6rh8z0u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Developer</title>
    <ns>0</ns>
    <id>876</id>
    <redirect title="developer" />
    <revision>
      <id>2519</id>
      <timestamp>2013-03-29T14:22:00Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Developer]] to [[developer]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="23">#REDIRECT [[developer]]</text>
      <sha1>j86r05lxetnak5ern36nzyrlo54sn7v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>DirectQ</title>
    <ns>0</ns>
    <id>522</id>
    <revision>
      <id>1200</id>
      <timestamp>2009-09-24T17:59:40Z</timestamp>
      <contributor>
        <username>Mh</username>
        <id>20</id>
      </contributor>
      <comment>Basic info</comment>
      <text xml:space="preserve" bytes="305">{{Infobox Engine
|name=DirectQ
|based-on=[[GLQuake]]
|author=[[mh]]
|website=[http://http://directq.codeplex.com]
|blog=[http://mhquake.blogspot.com]
}}
A port of GLQuake to Direct3D with emphasis on bug fixes, being faithful to the original software Quake look, increased limits, and player-friendliness.</text>
      <sha1>esewcx51gg2dg4p9jk3hh3e3kfswghg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1201</id>
      <parentid>1200</parentid>
      <timestamp>2009-09-24T18:05:14Z</timestamp>
      <contributor>
        <username>Mh</username>
        <id>20</id>
      </contributor>
      <comment>More info</comment>
      <text xml:space="preserve" bytes="711">{{Infobox Engine
|name=DirectQ
|based-on=[[GLQuake]]
|author=[[mh]]
|first-release=[http://directq.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=28626 here]
|newest-release=[http://directq.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=32343 here]
|website=[http://mhquake.blogspot.com here]
}}
A port of GLQuake to Direct3D with emphasis on bug fixes, being faithful to the original software Quake look, increased limits, and player-friendliness.

This is primarily intended for use on PCs and laptops that have integrated Intel 3D cards which either choke on, or give incredibly poor performance with, OpenGL-based Quake engines.  It is also suitable for more general use on any machine, of course.</text>
      <sha1>pjllwde4gucoze1tvgtrxxh6jv7engh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1422</id>
      <parentid>1201</parentid>
      <timestamp>2009-10-21T19:57:51Z</timestamp>
      <contributor>
        <username>Mh</username>
        <id>20</id>
      </contributor>
      <comment>new release link</comment>
      <text xml:space="preserve" bytes="711">{{Infobox Engine
|name=DirectQ
|based-on=[[GLQuake]]
|author=[[mh]]
|first-release=[http://directq.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=28626 here]
|newest-release=[http://directq.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34780 here]
|website=[http://mhquake.blogspot.com here]
}}
A port of GLQuake to Direct3D with emphasis on bug fixes, being faithful to the original software Quake look, increased limits, and player-friendliness.

This is primarily intended for use on PCs and laptops that have integrated Intel 3D cards which either choke on, or give incredibly poor performance with, OpenGL-based Quake engines.  It is also suitable for more general use on any machine, of course.</text>
      <sha1>bvh1h6o8kfgy6vryd6zo2p4mbmnpicw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Dissolution of Eternity</title>
    <ns>0</ns>
    <id>8</id>
    <revision>
      <id>11</id>
      <timestamp>2007-10-30T16:35:14Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: '''Dissolution of Eternity''' is [[Quake]]'s second official mission pack. It was developed by Rogue Entertainment.  If you just have the /rogue folder and no executable or link, you can s...</comment>
      <text xml:space="preserve" bytes="298">'''Dissolution of Eternity''' is [[Quake]]'s second official mission pack. It was developed by Rogue Entertainment.

If you just have the /rogue folder and no executable or link, you can start it by running Quake with the command line parameter '''-rogue'''.

===See Also===
* [[Installing Addons]]</text>
      <sha1>l2a4agtzqowld8cpfpjvgdvhmh0llke</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1417</id>
      <parentid>11</parentid>
      <timestamp>2009-10-14T18:19:12Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="449">'''Dissolution of Eternity''' is [[Quake]]'s second official mission pack. It was developed by Rogue Entertainment.

If you just have the /rogue folder and no executable or link, you can start it by running Quake with the command line parameter '''-rogue'''.


----

''This article is currently pending a significant rewrite due to its importance for the wiki, expect the current page to change drastically.''

===See Also===
* [[Installing Addons]]</text>
      <sha1>0fczlk4wvlyt2onpawvcb3lo5yvqnce</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Double-Barrelled Shotgun</title>
    <ns>0</ns>
    <id>400</id>
    <revision>
      <id>681</id>
      <timestamp>2008-05-07T19:45:21Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page:  == Description ==  This shotgun plays very differently from the single-barreled version. The spread is much wider, so it is not good for distances. However, it deals a lot more damage. It...</comment>
      <text xml:space="preserve" bytes="1514">
== Description ==

This shotgun plays very differently from the single-barreled version. The spread is much wider, so it is not good for distances. However, it deals a lot more damage. It also has a fairly fast reload rate, so it turns out to be a very powerful weapon in close quarters. The problem is, it's really bad for distances, and it uses a lot of precious ammo that may be better suited for the single-barreled gun.

Only use this weapon when other players are very close to you. Otherwise, the single barreled shotgun would actually do you more good. Strafing seems to be very effective because of the close range. It might also be to your advantage to lay it all out on your opponent from behind, getting as close as possible and keeping to his sides and back, firing as often as you can. This way, he will have no way of knowing where you are. By the time he knows what's happening he will be dead. If you don't manage to surprise him in some way, however, you may face that fate yourself, as many other weapons can do the job more quickly.

Defending yourself against this weapon is not an easy thing, but you do at least have some time to do it. Similarly to the single-barreled shotgun, the more movement the better. Try to get as far away as possible without turning your back, and don't try to run away unless you're desperate. Get rid of him as soon as possible, because if he manages to start hitting you, it's going to hurt - a lot.

----
'''Effectiveness:''' Average

'''Avoidability:''' Poor</text>
      <sha1>4kmmrso630r9iyqcpx44comh5iameu3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>989</id>
      <parentid>681</parentid>
      <timestamp>2009-05-22T08:44:41Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>as the current weapon descriptions were taken from http://euroquake.webs.com/guides2.htm i am getting the old ones from archive.org</comment>
      <text xml:space="preserve" bytes="690">{{Infobox Weapon
|weapon=[[Shells]]
|ammotype=2 per shot
|ammousage=none
|shottype=hitscan
|dpshot=56, divided among 14 pellets
|dpsecond=80
|range=2048 units
|cycletime=0.7s
}}

A worthy weapon with three minor drawbacks: first, it uses up 2 shells per blast; second, it's slow; third, its shot pattern is very loose at long range. But in general, once you find this puppy, the other shotgun starts rusting from disuse.

The Double-Barrelled Shotgun uses 2 shells up per shot, but is a lot more effective at close range than the [[Shotgun]]. It is probably the most-used weapon in the game, and you'll first find it in a secret in [[e1m1]], or else in [[e1m2]].

==See Also==
* [[Weapons]]</text>
      <sha1>7u2w8c6vuh0fulr74g0mbqm4hf6y5bk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>992</id>
      <parentid>989</parentid>
      <timestamp>2009-05-22T08:51:14Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>fixed infobox</comment>
      <text xml:space="preserve" bytes="710">{{Infobox Weapon
|weapon=Double-Barrelled Shotgun
|ammotype=[[Shells]]
|ammousage=2 per shot
|shottype=hitscan
|dpshot=56, divided among 14 pellets
|dpsecond=80
|range=2048 units
|cycletime=0.7s
}}

A worthy weapon with three minor drawbacks: first, it uses up 2 shells per blast; second, it's slow; third, its shot pattern is very loose at long range. But in general, once you find this puppy, the other shotgun starts rusting from disuse.

The Double-Barrelled Shotgun uses 2 shells up per shot, but is a lot more effective at close range than the [[Shotgun]]. It is probably the most-used weapon in the game, and you'll first find it in a secret in [[e1m1]], or else in [[e1m2]].

==See Also==
* [[Weapons]]</text>
      <sha1>hb3d1o5h20w5pstcif0zo5dhp7l2vfr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1296</id>
      <parentid>992</parentid>
      <timestamp>2009-09-27T10:01:38Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="983">{{Infobox Weapon
|weapon=Double-Barrelled Shotgun
|ammotype=[[Shells]]
|ammousage=2 per shot
|shottype=hitscan
|dpshot=56, divided among 14 pellets
|dpsecond=80
|range=2048 units
|cycletime=0.7s
}}

A worthy weapon with three minor drawbacks: first, it uses up 2 shells per blast; second, it's slow; third, its shot pattern is very loose at long range. But in general, once you find this puppy, the other shotgun starts rusting from disuse.

The Double-Barrelled Shotgun uses 2 shells up per shot, but is a lot more effective at close range than the [[Shotgun]]. It is probably the most-used weapon in the game, and you'll first find it in a secret in [[e1m1]], or else in [[e1m2]].

== Name ==
The term &quot;Super Shotgun&quot; might sometimes be used to describe this gun in fewer syllables, but this is technically incorrect. Both Doom 2 and [[Quake II]] used this term, but in Quake it is called the Double-Barrelled Shotgun (sometimes shortened to dbshotgun).

==See Also==
* [[Weapons]]</text>
      <sha1>ib4aywxlqjvg1hmms66bd66mud0r8jb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1308</id>
      <parentid>1296</parentid>
      <timestamp>2009-09-27T18:35:55Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="968">{{Infobox Weapon
|weapon=Double-Barrelled Shotgun
|ammotype=[[Shells]]
|ammousage=2 per shot
|shottype=hitscan
|dpshot=56, divided among 14 pellets
|dpsecond=80
|range=2048 units
|cycletime=0.7s
}}

A worthy weapon with three minor drawbacks: first, it uses up 2 shells per blast; second, it's slow; third, its shot pattern is very loose at long range. But in general, once you find this puppy, the other shotgun starts rusting from disuse.

The Double-Barrelled Shotgun uses 2 shells up per shot, but is a lot more effective at close range than the [[Shotgun]]. It is probably the most-used weapon in the game, and you'll first find it in a secret in [[e1m1]], or else in [[e1m2]].

== Name ==
The term &quot;Super Shotgun&quot; might sometimes be used to describe this gun in fewer syllables, but this is technically incorrect. Both Doom 2 and [[Quake II]] used this term, but in Quake it is called the Double-Barrelled Shotgun (sometimes shortened to dbshotgun).

{{Weapons}}</text>
      <sha1>o9zidxlyixk7m6l0cevk5j9jrh2qnwj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3043</id>
      <parentid>1308</parentid>
      <timestamp>2013-12-18T01:08:15Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <text xml:space="preserve" bytes="1193">{{Infobox Weapon
|weapon=Double-Barrelled Shotgun
|image_w=weapon_supershotgun.png
|image_v=v_supershotgun.png
|manualtext=A worthy weapon with three minor drawbacks: first, it uses up 2 shells per blast; second, it's slow; third, its shot pattern is very loose at long range. But in general, once you find this puppy, the other shotgun starts rusting from disuse.
|ammotype=[[Shells]]
|ammousage=2 per shot
|shottype=[[Hitscan]]
|dpshot=56, divided among 14 pellets
|dpsecond=80
|range=2048 [[unit]]s
|cycletime=0.7s
|1stappearance = [[E1M1]] (secret), [[E1M2]]
|obituary1=(Target) ate 2 loads of (attacker)'s buckshot.
}}

The '''Double-Barrelled Shotgun''' uses 2 shells up per shot, but is a lot more effective at close range than the [[Shotgun]]. It is probably the most-used weapon in the game, and you'll first find it in a secret in [[E1M1]], or else in [[E1M2]].

== Name ==
The term &quot;Super Shotgun&quot; might sometimes be used to describe this gun in fewer syllables, but this is technically incorrect. Both Doom 2 and [[Quake II]] used this term, but in Quake it is called the Double-Barrelled Shotgun. Still, its [[spawn function]] refers to it as ''weapon_supershotgun''.

{{Weapons}}</text>
      <sha1>klwfdql5p9smo4oh5emk2rivebiy0d4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Dprint</title>
    <ns>0</ns>
    <id>384</id>
    <revision>
      <id>654</id>
      <timestamp>2008-05-07T17:17:43Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: === Function: dprint ===   void dprint (string text) 	text = text of the message  Prints a message to the server console.</comment>
      <text xml:space="preserve" bytes="121">=== Function: dprint ===
  void dprint (string text)
	text = text of the message

Prints a message to the server console.</text>
      <sha1>eeukkd0rr3ohpmle4vndypyf6qu3log</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Droptofloor</title>
    <ns>0</ns>
    <id>389</id>
    <revision>
      <id>660</id>
      <timestamp>2008-05-07T17:22:07Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: === Function: droptofloor ===   float droptofloor() returns TRUE or FALSE   Drops self to the floor, if the floor is less than -256 coordinates below. Returns TRUE if landed on floor. Main...</comment>
      <text xml:space="preserve" bytes="244">=== Function: droptofloor ===
  float droptofloor()
returns TRUE or FALSE 

Drops self to the floor, if the floor is less than -256 coordinates below.
Returns TRUE if landed on floor.
Mainly used to spawn items or walking monsters on the floor.</text>
      <sha1>1k6uz48qm3jjg5vefwybwnauqaxx640</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>E1m1</title>
    <ns>0</ns>
    <id>552</id>
    <revision>
      <id>1370</id>
      <timestamp>2009-10-03T05:08:53Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <comment>placeholder at the moment, to test  entity tables</comment>
      <text xml:space="preserve" bytes="4535">{{Infobox singleplayer map
|title=the Slipgate Complex
|author=[[John Romero]]
|monsters=10 / 23 / 42
|secrets=6
|worldtype=2 (Base)
|secretlevel=No
|secretexit=No
|rune=No
}}
Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus. Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus. Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus. Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus. Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus. Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus. Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus. Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.

==Tutorial==
Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.

==Secrets==
Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.

{{Infobox singleplayer map entities
|difficulty=Easy Difficulty
|grunts=18
|rottweilers=5
|ogres=0
|knights=0
|scrags=0
|zombies=0
|fiends=0
|shamblers=0
|enforcers=0
|deathknights=0
|rotfish=0
|spawn=0
|vores=0
|rocketlaunchers=0
|lightningguns=0
|grenadelaunchers=0
|supernailguns=0
|nailguns=1
|supershotguns=1
|greenarmors=1
|yellowarmors=1
|redarmors=0
|quaddamages=1
|megahealths=2
|pentagrams=0
|ringsofshadow=0
|biosuits=1
|healthpacks=5
|rottenhealth=7
|shells40=0
|shells20=3
|nails50=1
|nails25=1
|rockets10=0
|rockets5=0
|cells12=0
|cells6=0
|slipgates=1
|trapshooters=0
|silverkeys=0
|goldkeys=0
}}
{{Infobox singleplayer map entities
|difficulty=Normal Difficulty
|grunts=18
|rottweilers=5
|ogres=0
|knights=0
|scrags=0
|zombies=0
|fiends=0
|shamblers=0
|enforcers=0
|deathknights=0
|rotfish=0
|spawn=0
|vores=0
|rocketlaunchers=0
|lightningguns=0
|grenadelaunchers=0
|supernailguns=0
|nailguns=1
|supershotguns=1
|greenarmors=1
|yellowarmors=1
|redarmors=0
|quaddamages=1
|megahealths=2
|pentagrams=0
|ringsofshadow=0
|biosuits=1
|healthpacks=5
|rottenhealth=7
|shells40=0
|shells20=3
|nails50=1
|nails25=1
|rockets10=0
|rockets5=0
|cells12=0
|cells6=0
|slipgates=1
|trapshooters=0
|silverkeys=0
|goldkeys=0
}}
{{Infobox singleplayer map entities
|difficulty=Hard Difficulty
|grunts=34
|rottweilers=8
|ogres=0
|knights=0
|scrags=0
|zombies=0
|fiends=0
|shamblers=0
|enforcers=0
|deathknights=0
|rotfish=0
|spawn=0
|vores=0
|rocketlaunchers=0
|lightningguns=0
|grenadelaunchers=0
|supernailguns=0
|nailguns=1
|supershotguns=1
|greenarmors=1
|yellowarmors=1
|redarmors=0
|quaddamages=1
|megahealths=2
|pentagrams=0
|ringsofshadow=0
|biosuits=1
|healthpacks=5
|rottenhealth=7
|shells40=0
|shells20=3
|nails50=1
|nails25=1
|rockets10=0
|rockets5=0
|cells12=0
|cells6=0
|slipgates=1
|trapshooters=0
|silverkeys=0
|goldkeys=0
}}</text>
      <sha1>lov5wy8nael9ssxr309zc16ci1ibtk9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1374</id>
      <parentid>1370</parentid>
      <timestamp>2009-10-03T06:02:13Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="4534">{{Infobox singleplayer map
|title=the Slipgate Complex
|author=[[John Romero]]
|monsters=10 / 23 / 42
|secrets=6
|worldtype=2 (Base)
|secretlevel=No
|secretexit=No
|rune=No
}}
Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus. Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus. Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus. Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus. Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus. Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus. Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus. Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.

==Tutorial==
Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.

==Secrets==
Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.Quake Ipsem Dolor Shubby Sanctus Chthon Filler Text To Beus Repeatus.

{{Infobox singleplayer map entities
|difficulty=Easy Difficulty
|grunts=9
|rottweilers=1
|ogres=0
|knights=0
|scrags=0
|zombies=0
|fiends=0
|shamblers=0
|enforcers=0
|deathknights=0
|rotfish=0
|spawn=0
|vores=0
|rocketlaunchers=0
|lightningguns=0
|grenadelaunchers=0
|supernailguns=0
|nailguns=1
|supershotguns=1
|greenarmors=1
|yellowarmors=1
|redarmors=0
|quaddamages=1
|megahealths=2
|pentagrams=0
|ringsofshadow=0
|biosuits=1
|healthpacks=5
|rottenhealth=7
|shells40=0
|shells20=3
|nails50=1
|nails25=1
|rockets10=0
|rockets5=0
|cells12=0
|cells6=0
|slipgates=1
|trapshooters=0
|silverkeys=0
|goldkeys=0
}}
{{Infobox singleplayer map entities
|difficulty=Normal Difficulty
|grunts=18
|rottweilers=5
|ogres=0
|knights=0
|scrags=0
|zombies=0
|fiends=0
|shamblers=0
|enforcers=0
|deathknights=0
|rotfish=0
|spawn=0
|vores=0
|rocketlaunchers=0
|lightningguns=0
|grenadelaunchers=0
|supernailguns=0
|nailguns=1
|supershotguns=1
|greenarmors=1
|yellowarmors=1
|redarmors=0
|quaddamages=1
|megahealths=2
|pentagrams=0
|ringsofshadow=0
|biosuits=1
|healthpacks=5
|rottenhealth=7
|shells40=0
|shells20=3
|nails50=1
|nails25=1
|rockets10=0
|rockets5=0
|cells12=0
|cells6=0
|slipgates=1
|trapshooters=0
|silverkeys=0
|goldkeys=0
}}
{{Infobox singleplayer map entities
|difficulty=Hard Difficulty
|grunts=34
|rottweilers=8
|ogres=0
|knights=0
|scrags=0
|zombies=0
|fiends=0
|shamblers=0
|enforcers=0
|deathknights=0
|rotfish=0
|spawn=0
|vores=0
|rocketlaunchers=0
|lightningguns=0
|grenadelaunchers=0
|supernailguns=0
|nailguns=1
|supershotguns=1
|greenarmors=1
|yellowarmors=1
|redarmors=0
|quaddamages=1
|megahealths=2
|pentagrams=0
|ringsofshadow=0
|biosuits=1
|healthpacks=5
|rottenhealth=7
|shells40=0
|shells20=3
|nails50=1
|nails25=1
|rockets10=0
|rockets5=0
|cells12=0
|cells6=0
|slipgates=1
|trapshooters=0
|silverkeys=0
|goldkeys=0
}}</text>
      <sha1>3ezu3y2w0rfrww3lgecvoag7d003qgm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1406</id>
      <parentid>1374</parentid>
      <timestamp>2009-10-09T18:58:05Z</timestamp>
      <contributor>
        <ip>209.180.238.66</ip>
      </contributor>
      <comment>added a bunch of stuff, hopefully i can fill it out a bit more later</comment>
      <text xml:space="preserve" bytes="4329">{{Infobox singleplayer map
|title=the Slipgate Complex
|author=[[John Romero]]
|monsters=10 / 23 / 42
|secrets=6
|worldtype=2 (Base)
|secretlevel=No
|secretexit=No
|rune=No
}}
e1m1, known as the Slipgate Complex is the first level of Quake. It follows the convention of the first level of all episodes, in that it takes place in a earthly military base setting, housing a piece of the slipgate technology, through which the player reaches the otherworld aspects of Quake. e1m1 is largely linear, as it serves as an introduction to Quake gameplay, putting most enemies directly in front of the player, with limited ambushes, and ample recovery items.

==Tutorial==
e1m1 functions as the closest thing to a tutorial that you will get, instructing the player as to some basic behaviors and putting them in scenarios of low punishment with only one out.
* Secrets - There is a message instructing the player to attack a wall, the wall is being highlighted by a flickering light, training users to look for visual discrepancies as a motive to dig deeper. They are rewarding in this case with a box of 20 shotgun shells.
* Jumping - There is a message instructing the player when walking along a small step that they can jump the crossing, and if they do so, they will have access to a Green Armor.
* Doors - The first door is pushed into a recess, so a player cannot accidentally trigger it, thus they understand that doors typically function via proximity.
* Elevators and buttons - Through the door the player has a dead end with a floor texture change and a flashing button, if they continue forward they will bump into the button, which will activate the elevator, training the player on the importance of floor texture, and that buttons are not operational by proximity, but rather contact.
* Water - If the player ventures off the main path into the water, they can experience movement and view changes. The water becomes deep enough for the player to encounter immersion but the ground quickly slides back up, so they can escape, and also hear the gasping sound, understanding the implicit danger of water. It also introduces players to platforms and secret areas that can be stumbled upon.
* Ambushes - The nailgun shows the player how traps are still a part of the game world, triggered usually by items, and that they can result in environmental changes such as light levels and walls moving.
* Sequences - In the ramp room the player is given a series of buttons, and a door that requires all 3 be pressed to open. This trains the player via messaging and the unopened door that many things in Quake require more than one action to complete.
* Exits - Very simple, as the player approaches the slipgate, it is messaged that they are about to leave the level.

==Secrets==
e1m1 has 6 secret areas:
* The shotgun shells hidden behind the panel on the right just past the start.
* The quad damage which can be reached from the right hand side of the larger base by shooting the earth texture, and then hitting a similar portion of wall, or by hitting the different texture in the hallway leading to the ramp room.
* The supershotgun which can be found by shooting the crosshair button in the recess overlooking the extended bridge over the slime.
* The megahealth in the dark balcony over the ramp room, jump up onto the railing by a button, or onto the button if you can, and take a running jump to the narrow steps sticking out of the wall, and climb them to reach the megahealth.
* At the sequential button locked door in the ramp room, there is a biosuit behind a pillar, grab it and hop into the slime, you will see a passage running underneath the catwalk through the door, follow it and you will find a small porthole, which will deposit you on a small metal island with a yellow armor, and a teleporter taking you to a space over the main base entrance at the beginning.
* The megahealth at the water front, which can be found by hopping into the water at the first bridge, or by striking the wall on your right in the slipgate chamber.

==Trivia==
On Easy, this map features the only dog you will encounter until [[e2m1]], and has one of the largest monster to skill ratio disparities of any map, with the relationship of Easy to Normal being just over two fold, but the relationship of Easy to Hard being seven fold.</text>
      <sha1>87tjirb3f8nx1a2vz6rxrupbgja0g4h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1410</id>
      <parentid>1406</parentid>
      <timestamp>2009-10-09T20:45:02Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <comment>added some images</comment>
      <text xml:space="preserve" bytes="4659">{{Infobox singleplayer map
|title=the Slipgate Complex
|author=[[John Romero]]
|monsters=10 / 23 / 42
|secrets=6
|worldtype=2 (Base)
|secretlevel=No
|secretexit=No
|rune=No
}}
e1m1, known as the Slipgate Complex is the first level of Quake. It follows the convention of the first level of all episodes, in that it takes place in a earthly military base setting, housing a piece of the slipgate technology, through which the player reaches the otherworld aspects of Quake. e1m1 is largely linear, as it serves as an introduction to Quake gameplay, putting most enemies directly in front of the player, with limited ambushes, and ample recovery items.

==Tutorial==
e1m1 functions as the closest thing to a tutorial that you will get, instructing the player as to some basic behaviors and putting them in scenarios of low punishment with only one out.
* Secrets - There is a message instructing the player to attack a wall, the wall is being highlighted by a flickering light, training users to look for visual discrepancies as a motive to dig deeper. They are rewarding in this case with a box of 20 shotgun shells.
* Jumping - There is a message instructing the player when walking along a small step that they can jump the crossing, and if they do so, they will have access to a Green Armor.
* Doors - The first door is pushed into a recess, so a player cannot accidentally trigger it, thus they understand that doors typically function via proximity.
* Elevators and buttons - Through the door the player has a dead end with a floor texture change and a flashing button, if they continue forward they will bump into the button, which will activate the elevator, training the player on the importance of floor texture, and that buttons are not operational by proximity, but rather contact.
* Water - If the player ventures off the main path into the water, they can experience movement and view changes. The water becomes deep enough for the player to encounter immersion but the ground quickly slides back up, so they can escape, and also hear the gasping sound, understanding the implicit danger of water. It also introduces players to platforms and secret areas that can be stumbled upon.
* Ambushes - The nailgun shows the player how traps are still a part of the game world, triggered usually by items, and that they can result in environmental changes such as light levels and walls moving.
* Sequences - In the ramp room the player is given a series of buttons, and a door that requires all 3 be pressed to open. This trains the player via messaging and the unopened door that many things in Quake require more than one action to complete.
* Exits - Very simple, as the player approaches the slipgate, it is messaged that they are about to leave the level.

==Secrets==
e1m1 has 6 secret areas:
* The shotgun shells hidden behind the panel on the right just past the start.
* The quad damage which can be reached from the right hand side of the larger base by shooting the earth texture, and then hitting a similar portion of wall, or by hitting the different texture in the hallway leading to the ramp room.
* The supershotgun which can be found by shooting the crosshair button in the recess overlooking the extended bridge over the slime.
* The megahealth in the dark balcony over the ramp room, jump up onto the railing by a button, or onto the button if you can, and take a running jump to the narrow steps sticking out of the wall, and climb them to reach the megahealth.
* At the sequential button locked door in the ramp room, there is a biosuit behind a pillar, grab it and hop into the slime, you will see a passage running underneath the catwalk through the door, follow it and you will find a small porthole, which will deposit you on a small metal island with a yellow armor, and a teleporter taking you to a space over the main base entrance at the beginning.
* The megahealth at the water front, which can be found by hopping into the water at the first bridge, or by striking the wall on your right in the slipgate chamber.

==Trivia==
On Easy, this map features the only dog you will encounter until [[e2m1]].

E1m1 has one of the largest monster to skill ratio disparities of any map, with the relationship of Easy to Normal being just over two fold, but the relationship of Easy to Hard being seven fold.
{|center align=&quot;center&quot;
|+ '''the Slipgate Complex'''
|-
|[[Image:E1m1_1.jpg|thumb|Standing upon the initial slipgate, looking into the brief 'tutorial' area.]]
|[[Image:E1m1_2.jpg|thumb|The bridge leading into the Slipgate Complex.]]
|[[Image:E1m1_3.jpg|thumb|The ramp room, a grunt guarding an already pressed button.]]
|-
|}</text>
      <sha1>gm5j2zf57qvmtejj4uaqrwotycvngrb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1413</id>
      <parentid>1410</parentid>
      <timestamp>2009-10-10T19:45:34Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="4704">{{Infobox singleplayer map
|title=the Slipgate Complex
|author=[[John Romero]]
|monsters=10 / 23 / 42
|secrets=6
|worldtype=2 (Base)
|secretlevel=No
|secretexit=No
|previouslevel=[[start]]
|nextlevel=[[e1m2]]
|rune=No
}}
e1m1, known as the Slipgate Complex is the first level of Quake. It follows the convention of the first level of all episodes, in that it takes place in a earthly military base setting, housing a piece of the slipgate technology, through which the player reaches the otherworld aspects of Quake. e1m1 is largely linear, as it serves as an introduction to Quake gameplay, putting most enemies directly in front of the player, with limited ambushes, and ample recovery items.

==Tutorial==
e1m1 functions as the closest thing to a tutorial that you will get, instructing the player as to some basic behaviors and putting them in scenarios of low punishment with only one out.
* Secrets - There is a message instructing the player to attack a wall, the wall is being highlighted by a flickering light, training users to look for visual discrepancies as a motive to dig deeper. They are rewarding in this case with a box of 20 shotgun shells.
* Jumping - There is a message instructing the player when walking along a small step that they can jump the crossing, and if they do so, they will have access to a Green Armor.
* Doors - The first door is pushed into a recess, so a player cannot accidentally trigger it, thus they understand that doors typically function via proximity.
* Elevators and buttons - Through the door the player has a dead end with a floor texture change and a flashing button, if they continue forward they will bump into the button, which will activate the elevator, training the player on the importance of floor texture, and that buttons are not operational by proximity, but rather contact.
* Water - If the player ventures off the main path into the water, they can experience movement and view changes. The water becomes deep enough for the player to encounter immersion but the ground quickly slides back up, so they can escape, and also hear the gasping sound, understanding the implicit danger of water. It also introduces players to platforms and secret areas that can be stumbled upon.
* Ambushes - The nailgun shows the player how traps are still a part of the game world, triggered usually by items, and that they can result in environmental changes such as light levels and walls moving.
* Sequences - In the ramp room the player is given a series of buttons, and a door that requires all 3 be pressed to open. This trains the player via messaging and the unopened door that many things in Quake require more than one action to complete.
* Exits - Very simple, as the player approaches the slipgate, it is messaged that they are about to leave the level.

==Secrets==
e1m1 has 6 secret areas:
* The shotgun shells hidden behind the panel on the right just past the start.
* The quad damage which can be reached from the right hand side of the larger base by shooting the earth texture, and then hitting a similar portion of wall, or by hitting the different texture in the hallway leading to the ramp room.
* The supershotgun which can be found by shooting the crosshair button in the recess overlooking the extended bridge over the slime.
* The megahealth in the dark balcony over the ramp room, jump up onto the railing by a button, or onto the button if you can, and take a running jump to the narrow steps sticking out of the wall, and climb them to reach the megahealth.
* At the sequential button locked door in the ramp room, there is a biosuit behind a pillar, grab it and hop into the slime, you will see a passage running underneath the catwalk through the door, follow it and you will find a small porthole, which will deposit you on a small metal island with a yellow armor, and a teleporter taking you to a space over the main base entrance at the beginning.
* The megahealth at the water front, which can be found by hopping into the water at the first bridge, or by striking the wall on your right in the slipgate chamber.

==Trivia==
On Easy, this map features the only dog you will encounter until [[e2m1]].

E1m1 has one of the largest monster to skill ratio disparities of any map, with the relationship of Easy to Normal being just over two fold, but the relationship of Easy to Hard being seven fold.
{|center align=&quot;center&quot;
|+ '''the Slipgate Complex'''
|-
|[[Image:E1m1_1.jpg|thumb|Standing upon the initial slipgate, looking into the brief 'tutorial' area.]]
|[[Image:E1m1_2.jpg|thumb|The bridge leading into the Slipgate Complex.]]
|[[Image:E1m1_3.jpg|thumb|The ramp room, a grunt guarding an already pressed button.]]
|-
|}</text>
      <sha1>ry56y8f0t1m6nu0jpdvxo5kekz6jt2e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>EXT BITSHIFT</title>
    <ns>0</ns>
    <id>338</id>
    <revision>
      <id>546</id>
      <timestamp>2008-02-29T12:03:50Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; float(float number, float quantity) bitshift = #218; &lt;/pre&gt;  Multiplies number by a power of 2 corresponding to quantity (0 = *1, 1 = *2, 2 = *4, 3 = *8, -1 = /2...</comment>
      <text xml:space="preserve" bytes="449">Builtin definitions:
&lt;pre&gt;
float(float number, float quantity) bitshift = #218;
&lt;/pre&gt;

Multiplies number by a power of 2 corresponding to quantity (0 = *1, 1 = *2, 2 = *4, 3 = *8, -1 = /2, -2 = /4x, etc), and rounds down (due to integer math) like other bit operations do (&amp; and | and the like).

Note: it is faster to use multiply if you are shifting by a constant, avoiding the quakec function call cost, however that does not do a floor for you.</text>
      <sha1>5ysbuqhtn06pwkxblqleqt10x6ykc3y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>EXT CSQC</title>
    <ns>0</ns>
    <id>178</id>
    <revision>
      <id>293</id>
      <timestamp>2008-01-17T15:04:05Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: ==Introduction== QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to con...</comment>
      <text xml:space="preserve" bytes="1000">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.

By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.

EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.

The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

[[EXT_CSQC System Globals Fields and Builtins List]]</text>
      <sha1>hcmhhoarzce2rd8g2mwjj71hmnff3qt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>294</id>
      <parentid>293</parentid>
      <timestamp>2008-01-17T15:06:52Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="1113">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.


[[EXT_CSQC System Globals Fields and Builtins List]] lists the core features of EXT_CSQC on the client. The following sections in this article explain their use.</text>
      <sha1>q5rz1uqhsoywaij5k4ugt8hum8580y4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>304</id>
      <parentid>294</parentid>
      <timestamp>2008-01-17T16:00:05Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Introduction */</comment>
      <text xml:space="preserve" bytes="1147">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.


[[EXT_CSQC System Globals Fields and Builtins List]] lists the core features of EXT_CSQC on the client. The following sections in this article explain their use.

==Client Programs Entry Points==</text>
      <sha1>l6oh6f4zjt6wb7amyux0yh0gnumomi9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>305</id>
      <parentid>304</parentid>
      <timestamp>2008-01-17T16:10:38Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="2469">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.


[[EXT_CSQC System Globals Fields and Builtins List]] lists the core features of EXT_CSQC on the client. The following sections in this article explain their use.

==Overview==

==Client Programs Entry Points==
===CSQC_Draw===
This function is required always, and overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_Draw =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetViewf(VF_MIN_X, 0);
    R_SetViewf(VF_MIN_Y, 0);
    R_SetViewf(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetViewf(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetViewf(VF_FOV, cvar(&quot;fov&quot;));
    R_SetViewv(VF_ORIGIN, player_org);
    R_SetViewv(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS); // Add any entities that the csqc does not know about

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;</text>
      <sha1>jses5yij9ysnsg19rqirou3dqx46mqb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>307</id>
      <parentid>305</parentid>
      <timestamp>2008-01-17T16:33:29Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Overview */</comment>
      <text xml:space="preserve" bytes="3355">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.


[[EXT_CSQC System Globals Fields and Builtins List]] lists the core features of EXT_CSQC on the client. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

* First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires, but if the CSQC rendering code does not do anything, then nothing will be rendered.
* Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Draw===
This function is required always, and overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_Draw =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetViewf(VF_MIN_X, 0);
    R_SetViewf(VF_MIN_Y, 0);
    R_SetViewf(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetViewf(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetViewf(VF_FOV, cvar(&quot;fov&quot;));
    R_SetViewv(VF_ORIGIN, player_org);
    R_SetViewv(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS); // Add any entities that the csqc does not know about

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;</text>
      <sha1>bx7zi7jrlftlifbjk6nfdt5ybgmwbft</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>308</id>
      <parentid>307</parentid>
      <timestamp>2008-01-17T16:34:40Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Overview */</comment>
      <text xml:space="preserve" bytes="3360">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.


[[EXT_CSQC System Globals Fields and Builtins List]] lists the core features of EXT_CSQC on the client. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

* First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.
* Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Draw===
This function is required always, and overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_Draw =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetViewf(VF_MIN_X, 0);
    R_SetViewf(VF_MIN_Y, 0);
    R_SetViewf(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetViewf(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetViewf(VF_FOV, cvar(&quot;fov&quot;));
    R_SetViewv(VF_ORIGIN, player_org);
    R_SetViewv(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS); // Add any entities that the csqc does not know about

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;</text>
      <sha1>7snpel7bwdlpp9ghg6xr9b4q7akrnsf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>309</id>
      <parentid>308</parentid>
      <timestamp>2008-01-17T16:35:07Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Overview */</comment>
      <text xml:space="preserve" bytes="3361">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.


[[EXT_CSQC System Globals Fields and Builtins List]] lists the core features of EXT_CSQC on the client. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

* First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

* Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Draw===
This function is required always, and overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_Draw =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetViewf(VF_MIN_X, 0);
    R_SetViewf(VF_MIN_Y, 0);
    R_SetViewf(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetViewf(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetViewf(VF_FOV, cvar(&quot;fov&quot;));
    R_SetViewv(VF_ORIGIN, player_org);
    R_SetViewv(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS); // Add any entities that the csqc does not know about

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;</text>
      <sha1>4j2iyp5am9kkd9rcpsn1pheqsctsm9f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>310</id>
      <parentid>309</parentid>
      <timestamp>2008-01-17T16:35:24Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="3357">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.


[[EXT_CSQC System Globals Fields and Builtins List]] lists the core features of EXT_CSQC on the client. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Draw===
This function is required always, and overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_Draw =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetViewf(VF_MIN_X, 0);
    R_SetViewf(VF_MIN_Y, 0);
    R_SetViewf(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetViewf(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetViewf(VF_FOV, cvar(&quot;fov&quot;));
    R_SetViewv(VF_ORIGIN, player_org);
    R_SetViewv(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS); // Add any entities that the csqc does not know about

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;</text>
      <sha1>7qps52thte7lvt2jdina7gku7amx3kq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>311</id>
      <parentid>310</parentid>
      <timestamp>2008-01-17T16:48:49Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Client Programs Entry Points */</comment>
      <text xml:space="preserve" bytes="3664">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.


[[EXT_CSQC System Globals Fields and Builtins List]] lists the core features of EXT_CSQC on the client. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;

===CSQC_InputEvent===
&lt;pre&gt;
float(float f, float t) CSQC_InputEvent;
&lt;/pre&gt;

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function is required always, and overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetViewf(VF_MIN_X, 0);
    R_SetViewf(VF_MIN_Y, 0);
    R_SetViewf(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetViewf(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetViewf(VF_FOV, cvar(&quot;fov&quot;));
    R_SetViewv(VF_ORIGIN, player_org);
    R_SetViewv(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS); // Add any entities that the csqc does not know about

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;</text>
      <sha1>jv1kehqnxha3mjetxafjgqqmryxdjfs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>312</id>
      <parentid>311</parentid>
      <timestamp>2008-01-17T16:50:00Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="3723">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.


[[EXT_CSQC System Globals Fields and Builtins List]] lists the core features of EXT_CSQC on the client. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;

===CSQC_InputEvent===
&lt;pre&gt;
float(float f, float t) CSQC_InputEvent;
&lt;/pre&gt;

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function is required always, and overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetViewf(VF_MIN_X, 0);
    R_SetViewf(VF_MIN_Y, 0);
    R_SetViewf(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetViewf(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetViewf(VF_FOV, cvar(&quot;fov&quot;));
    R_SetViewv(VF_ORIGIN, player_org);
    R_SetViewv(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS); // Add any entities that the csqc does not know about

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;

==Sending Data to the Client==
===Stats===
===Entities===</text>
      <sha1>07q6dgqgvvd6nhm3kdmjzqzfh9qg2rr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>314</id>
      <parentid>312</parentid>
      <timestamp>2008-01-17T16:53:27Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* CSQC_UpdateView */</comment>
      <text xml:space="preserve" bytes="3699">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.


[[EXT_CSQC System Globals Fields and Builtins List]] lists the core features of EXT_CSQC on the client. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;

===CSQC_InputEvent===
&lt;pre&gt;
float(float f, float t) CSQC_InputEvent;
&lt;/pre&gt;

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetViewf(VF_MIN_X, 0);
    R_SetViewf(VF_MIN_Y, 0);
    R_SetViewf(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetViewf(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetViewf(VF_FOV, cvar(&quot;fov&quot;));
    R_SetViewv(VF_ORIGIN, player_org);
    R_SetViewv(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS); // Add any entities that the csqc does not know about

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;

==Sending Data to the Client==
===Stats===
===Entities===</text>
      <sha1>6m4buyvac33wq5b5to6itericd93l3f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>316</id>
      <parentid>314</parentid>
      <timestamp>2008-01-17T16:56:57Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* CSQC_UpdateView */</comment>
      <text xml:space="preserve" bytes="3692">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.


[[EXT_CSQC System Globals Fields and Builtins List]] lists the core features of EXT_CSQC on the client. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;

===CSQC_InputEvent===
&lt;pre&gt;
float(float f, float t) CSQC_InputEvent;
&lt;/pre&gt;

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS); // Add any entities that the csqc does not know about

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;

==Sending Data to the Client==
===Stats===
===Entities===</text>
      <sha1>szonj19tp6fzlg3c2mfau2thajr2arv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>317</id>
      <parentid>316</parentid>
      <timestamp>2008-01-17T17:11:09Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* CSQC_UpdateView */</comment>
      <text xml:space="preserve" bytes="3696">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.


[[EXT_CSQC System Globals Fields and Builtins List]] lists the core features of EXT_CSQC on the client. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;

===CSQC_InputEvent===
&lt;pre&gt;
float(float f, float t) CSQC_InputEvent;
&lt;/pre&gt;

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;

==Sending Data to the Client==
===Stats===
===Entities===</text>
      <sha1>bbjv9pw9xlcu37l6ceq7c570uons8v5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>319</id>
      <parentid>317</parentid>
      <timestamp>2008-01-17T19:19:12Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="4001">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// addstat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_FLOAT_TRUNCATED = 8;
float AS_FLOAT  = 2;
float AS_STRING = 1;
// entity sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

[[EXT_CSQC System Globals Fields and Builtins List]] lists the core features of EXT_CSQC on the client. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;

===CSQC_InputEvent===
&lt;pre&gt;
float(float f, float t) CSQC_InputEvent;
&lt;/pre&gt;

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;

==Sending Data to the Client==
===Stats===
===Entities===</text>
      <sha1>7lmtfjnkfimq5t2skyw7psox7st45x3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>320</id>
      <parentid>319</parentid>
      <timestamp>2008-01-17T19:19:55Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Header Code */</comment>
      <text xml:space="preserve" bytes="3986">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// addstat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_FLOAT_TRUNCATED = 8;
float AS_FLOAT  = 2;
float AS_STRING = 1;
// entity sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;

===CSQC_InputEvent===
&lt;pre&gt;
float(float f, float t) CSQC_InputEvent;
&lt;/pre&gt;

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;

==Sending Data to the Client==
===Stats===
===Entities===</text>
      <sha1>puip4lp0tf5yoc8wqd5t6av475j4gig</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>321</id>
      <parentid>320</parentid>
      <timestamp>2008-01-17T19:20:27Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Header Code */</comment>
      <text xml:space="preserve" bytes="3998">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_FLOAT_TRUNCATED = 8;
float AS_FLOAT  = 2;
float AS_STRING = 1;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;

===CSQC_InputEvent===
&lt;pre&gt;
float(float f, float t) CSQC_InputEvent;
&lt;/pre&gt;

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;

==Sending Data to the Client==
===Stats===
===Entities===</text>
      <sha1>pea6ix9tayzgd3q8df8btwa6bsmskuv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>322</id>
      <parentid>321</parentid>
      <timestamp>2008-01-17T19:23:37Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* CSQC_Init */</comment>
      <text xml:space="preserve" bytes="4234">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_FLOAT_TRUNCATED = 8;
float AS_FLOAT  = 2;
float AS_STRING = 1;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic, as well as any other initialization that the mod may wish to do.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;

===CSQC_InputEvent===
&lt;pre&gt;
float(float f, float t) CSQC_InputEvent;
&lt;/pre&gt;

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;

==Sending Data to the Client==
===Stats===
===Entities===</text>
      <sha1>1444xqnggvrmo4j5ebxovnrzud5xsh5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>323</id>
      <parentid>322</parentid>
      <timestamp>2008-01-17T19:27:18Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* CSQC_Init */</comment>
      <text xml:space="preserve" bytes="4169">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_FLOAT_TRUNCATED = 8;
float AS_FLOAT  = 2;
float AS_STRING = 1;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;

===CSQC_InputEvent===
&lt;pre&gt;
float(float f, float t) CSQC_InputEvent;
&lt;/pre&gt;

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;

==Sending Data to the Client==
===Stats===
===Entities===</text>
      <sha1>r5a6mm9oaok6lh0jxg86228if75y5se</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>324</id>
      <parentid>323</parentid>
      <timestamp>2008-01-17T19:30:16Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* CSQC_Shutdown */</comment>
      <text xml:space="preserve" bytes="4415">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_FLOAT_TRUNCATED = 8;
float AS_FLOAT  = 2;
float AS_STRING = 1;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float f, float t) CSQC_InputEvent;
&lt;/pre&gt;

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;

==Sending Data to the Client==
===Stats===
===Entities===</text>
      <sha1>ro2y5zwzmh3hfc7dh5ff93ma8b0aupo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>325</id>
      <parentid>324</parentid>
      <timestamp>2008-01-17T19:40:10Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* CSQC_ConsoleCommand */</comment>
      <text xml:space="preserve" bytes="4979">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_FLOAT_TRUNCATED = 8;
float AS_FLOAT  = 2;
float AS_STRING = 1;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float f, float t) CSQC_InputEvent;
&lt;/pre&gt;

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands, for example +showscores and -showscores which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
===Entities===</text>
      <sha1>hx973tw9wxfri1y2ql5ejt8ul5iqbah</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>326</id>
      <parentid>325</parentid>
      <timestamp>2008-01-17T19:57:31Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* CSQC_InputEvent */</comment>
      <text xml:space="preserve" bytes="5349">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_FLOAT_TRUNCATED = 8;
float AS_FLOAT  = 2;
float AS_STRING = 1;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands, for example +showscores and -showscores which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
===Entities===</text>
      <sha1>65fksuwtgxs53ndebdr3trihbuyccj1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>329</id>
      <parentid>326</parentid>
      <timestamp>2008-01-18T12:10:58Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* CSQC_ConsoleCommand */</comment>
      <text xml:space="preserve" bytes="5350">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_FLOAT_TRUNCATED = 8;
float AS_FLOAT  = 2;
float AS_STRING = 1;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
===Entities===</text>
      <sha1>2a5j0lu5874lstw0hxzs47355vxyp0w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>330</id>
      <parentid>329</parentid>
      <timestamp>2008-01-18T12:13:39Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* CSQC_InputEvent */</comment>
      <text xml:space="preserve" bytes="5458">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_FLOAT_TRUNCATED = 8;
float AS_FLOAT  = 2;
float AS_STRING = 1;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
===Entities===</text>
      <sha1>m7gujb6i803s9ikbmvhfc2thnhu202j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>331</id>
      <parentid>330</parentid>
      <timestamp>2008-01-18T12:31:00Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Stats */</comment>
      <text xml:space="preserve" bytes="6555">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_FLOAT_TRUNCATED = 8;
float AS_FLOAT  = 2;
float AS_STRING = 1;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
On the server, the AddStat function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) SV_AddStat;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

On the client, the function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===</text>
      <sha1>ket8glb82wsv7vxyg4r1rx7pcq3yseb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>332</id>
      <parentid>331</parentid>
      <timestamp>2008-01-18T12:33:04Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="6594">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_FLOAT_TRUNCATED = 8;
float AS_FLOAT  = 2;
float AS_STRING = 1;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
On the server, the AddStat function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) SV_AddStat;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

On the client, the function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===


==Rendering Entities on the Client==</text>
      <sha1>htvv6y6lqr4ajs1dnztao81ir4iwy9j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>333</id>
      <parentid>332</parentid>
      <timestamp>2008-01-18T12:37:17Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Rendering Entities on the Client */</comment>
      <text xml:space="preserve" bytes="6610">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_FLOAT_TRUNCATED = 8;
float AS_FLOAT  = 2;
float AS_STRING = 1;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
On the server, the AddStat function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) SV_AddStat;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

On the client, the function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===


==Rendering on the Client==
===Entities===
===Hud===</text>
      <sha1>48ssr3smfxmm7lv40gjyy31fsogsbed</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>334</id>
      <parentid>333</parentid>
      <timestamp>2008-01-18T12:37:54Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Rendering on the Client */</comment>
      <text xml:space="preserve" bytes="6629">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_FLOAT_TRUNCATED = 8;
float AS_FLOAT  = 2;
float AS_STRING = 1;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
On the server, the AddStat function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) SV_AddStat;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

On the client, the function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===


==Rendering Entities on the Client==
==Rendering 2D HUD on the Client==</text>
      <sha1>o6xt69tvp6m3zm5ifgeufetyukmnvu6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>335</id>
      <parentid>334</parentid>
      <timestamp>2008-01-18T12:40:29Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Header Code */</comment>
      <text xml:space="preserve" bytes="6629">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT  = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
On the server, the AddStat function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) SV_AddStat;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

On the client, the function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===


==Rendering Entities on the Client==
==Rendering 2D HUD on the Client==</text>
      <sha1>52skrmvcug2p455txtral8fep10ofsp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>336</id>
      <parentid>335</parentid>
      <timestamp>2008-01-18T12:40:46Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Header Code */</comment>
      <text xml:space="preserve" bytes="6647">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
On the server, the AddStat function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) SV_AddStat;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

On the client, the function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===


==Rendering Entities on the Client==
==Rendering 2D HUD on the Client==</text>
      <sha1>a6y5sqglvqny093obed36b56avc5z89</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>337</id>
      <parentid>336</parentid>
      <timestamp>2008-01-18T13:02:29Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="6644">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
On the server, the AddStat function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

On the client, the function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===


==Rendering Entities on the Client==
==Rendering 2D HUD on the Client==</text>
      <sha1>4ukefw1px2r5vhyt81y3m9hxh1b07hk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>338</id>
      <parentid>337</parentid>
      <timestamp>2008-01-19T12:22:19Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Stats */</comment>
      <text xml:space="preserve" bytes="6651">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
On the server, the AddStat function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

On the client, the function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===


==Rendering Entities on the Client==
==Rendering 2D HUD on the Client==</text>
      <sha1>tcb7okugu7goqdtd20lmyepfdaj0amo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>339</id>
      <parentid>338</parentid>
      <timestamp>2008-01-19T12:22:37Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Stats */</comment>
      <text xml:space="preserve" bytes="6659">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
On the server, the AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

On the client, the function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===


==Rendering Entities on the Client==
==Rendering 2D HUD on the Client==</text>
      <sha1>kol6z4zbzn5ravjkacfecgs0j4c02gc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>344</id>
      <parentid>339</parentid>
      <timestamp>2008-02-10T12:05:28Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Entities */</comment>
      <text xml:space="preserve" bytes="7351">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
On the server, the AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

On the client, the function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
On the server, the SendEntiy builtin is used in conjunction with the .Version field. The .Version field should be incremented every time an update is desired. This causes the SendEntity field to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins WriteCoord, WriteAngle, WriteByte, WriteShort, WriteLong are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

==Rendering Entities on the Client==
==Rendering 2D HUD on the Client==</text>
      <sha1>ijvkoevlj3a8ee94jzspgjrficozwsz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>345</id>
      <parentid>344</parentid>
      <timestamp>2008-02-10T12:06:13Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Entities */</comment>
      <text xml:space="preserve" bytes="7352">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
On the server, the AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

On the client, the function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
On the server, the SendEntity builtin is used in conjunction with the .Version field. The .Version field should be incremented every time an update is desired. This causes the SendEntity field to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins WriteCoord, WriteAngle, WriteByte, WriteShort, WriteLong are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

==Rendering Entities on the Client==
==Rendering 2D HUD on the Client==</text>
      <sha1>64v2yrtp57svottg5djoc2oybdzhq4e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>346</id>
      <parentid>345</parentid>
      <timestamp>2008-02-10T12:07:24Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Entities */</comment>
      <text xml:space="preserve" bytes="7377">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
On the server, the AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

On the client, the function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
On the server, the ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins WriteCoord, WriteAngle, WriteByte, WriteShort, WriteLong are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

==Rendering Entities on the Client==
==Rendering 2D HUD on the Client==</text>
      <sha1>7kir7qyhmq36wtqda0j9xjb773m7qpi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>347</id>
      <parentid>346</parentid>
      <timestamp>2008-02-10T12:08:50Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Entities */</comment>
      <text xml:space="preserve" bytes="7397">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
On the server, the AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

On the client, the function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
On the server, the ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

==Rendering Entities on the Client==
==Rendering 2D HUD on the Client==</text>
      <sha1>gszn2og8npat3r1yunmrcqx0jcplgzw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>348</id>
      <parentid>347</parentid>
      <timestamp>2008-02-10T12:14:00Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Entities */</comment>
      <text xml:space="preserve" bytes="7460">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
On the server, the AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

On the client, the function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
On the server, the ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

==Rendering Entities on the Client==
==Rendering 2D HUD on the Client==</text>
      <sha1>14s37u1a4fr5ft9689l1dfqf0p4lc00</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>349</id>
      <parentid>348</parentid>
      <timestamp>2008-02-10T12:24:31Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Entities */</comment>
      <text xml:space="preserve" bytes="8305">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
On the server, the AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

On the client, the function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
On the server, the ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.


On the client, when an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.

The entity being created or updated is ''self''.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed until this function returns. This allows the mod to clean up any client-created entities associated with the one being removed.

==Rendering Entities on the Client==
==Rendering 2D HUD on the Client==</text>
      <sha1>jvd8yket2ckykd3joq9c5vsj6baofe9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>350</id>
      <parentid>349</parentid>
      <timestamp>2008-02-10T12:25:15Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Entities */</comment>
      <text xml:space="preserve" bytes="8319">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
On the server, the AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

On the client, the function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
====On the server====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.


====On the client====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.

The entity being created or updated is ''self''.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed until this function returns. This allows the mod to clean up any client-created entities associated with the one being removed.

==Rendering Entities on the Client==
==Rendering 2D HUD on the Client==</text>
      <sha1>1ubr1yqf440o2aq4mvbgl60qeorrtik</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>351</id>
      <parentid>350</parentid>
      <timestamp>2008-02-10T12:25:34Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Entities */</comment>
      <text xml:space="preserve" bytes="8323">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
On the server, the AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

On the client, the function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.


=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.

The entity being created or updated is ''self''.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed until this function returns. This allows the mod to clean up any client-created entities associated with the one being removed.

==Rendering Entities on the Client==
==Rendering 2D HUD on the Client==</text>
      <sha1>63cw5afxomxkxfd2daumuyh45bq4gj2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>352</id>
      <parentid>351</parentid>
      <timestamp>2008-02-10T12:25:59Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Stats */</comment>
      <text xml:space="preserve" bytes="8341">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.


=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.

The entity being created or updated is ''self''.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed until this function returns. This allows the mod to clean up any client-created entities associated with the one being removed.

==Rendering Entities on the Client==
==Rendering 2D HUD on the Client==</text>
      <sha1>2hvh7yx6bshxx41vbkcbdaqyz8uwgep</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>353</id>
      <parentid>352</parentid>
      <timestamp>2008-02-10T12:26:12Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Entities */</comment>
      <text xml:space="preserve" bytes="8340">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.

The entity being created or updated is ''self''.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed until this function returns. This allows the mod to clean up any client-created entities associated with the one being removed.

==Rendering Entities on the Client==
==Rendering 2D HUD on the Client==</text>
      <sha1>8z6q8ja8mxqzrpvi1odvllviq9bro11</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>354</id>
      <parentid>353</parentid>
      <timestamp>2008-02-10T12:26:34Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Entities */</comment>
      <text xml:space="preserve" bytes="8364">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.
==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.

The entity being created or updated is ''self''.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed until this function returns. This allows the mod to clean up any client-created entities associated with the one being removed.

=====Example Code=====

==Rendering Entities on the Client==
==Rendering 2D HUD on the Client==</text>
      <sha1>3kia06vgc86bvbpvvocq4tc8hapnsle</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>359</id>
      <parentid>354</parentid>
      <timestamp>2008-02-10T12:49:46Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Introduction */</comment>
      <text xml:space="preserve" bytes="8661">==Notice==
This extension is still in a state of change - engines shouldn't yet advertise EXT_CSQC and modders shouldn't rely on its interface staying exactly the same. However it is probably a good time to get acquainted with it as this page will be updated to match the current specification.

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.

The entity being created or updated is ''self''.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed until this function returns. This allows the mod to clean up any client-created entities associated with the one being removed.

=====Example Code=====

==Rendering Entities on the Client==
==Rendering 2D HUD on the Client==</text>
      <sha1>rbv5ta4g58e9diutyxfmoeta5wsk0os</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>561</id>
      <parentid>359</parentid>
      <timestamp>2008-03-10T17:39:30Z</timestamp>
      <contributor>
        <ip>79.77.100.204</ip>
      </contributor>
      <comment>/* Example Code */</comment>
      <text xml:space="preserve" bytes="8684">==Notice==
This extension is still in a state of change - engines shouldn't yet advertise EXT_CSQC and modders shouldn't rely on its interface staying exactly the same. However it is probably a good time to get acquainted with it as this page will be updated to match the current specification.

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.

The entity being created or updated is ''self''.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed until this function returns. This allows the mod to clean up any client-created entities associated with the one being removed.

=====Example Code=====

=====Please Note=====

==Rendering Entities on the Client==
==Rendering 2D HUD on the Client==</text>
      <sha1>00jzm6i1j9ycbur1m1t29zuqmf4u27w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>563</id>
      <parentid>561</parentid>
      <timestamp>2008-03-10T19:06:56Z</timestamp>
      <contributor>
        <ip>79.77.100.204</ip>
      </contributor>
      <comment>/* Please Note */</comment>
      <text xml:space="preserve" bytes="9095">==Notice==
This extension is still in a state of change - engines shouldn't yet advertise EXT_CSQC and modders shouldn't rely on its interface staying exactly the same. However it is probably a good time to get acquainted with it as this page will be updated to match the current specification.

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.

The entity being created or updated is ''self''.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed until this function returns. This allows the mod to clean up any client-created entities associated with the one being removed.

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==
==Rendering 2D HUD on the Client==</text>
      <sha1>pb3mxbj67jc0us5i8kc68fekgpegslh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>564</id>
      <parentid>563</parentid>
      <timestamp>2008-03-10T20:20:54Z</timestamp>
      <contributor>
        <ip>79.77.100.204</ip>
      </contributor>
      <comment>/* CSQC_UpdateView */</comment>
      <text xml:space="preserve" bytes="10483">==Notice==
This extension is still in a state of change - engines shouldn't yet advertise EXT_CSQC and modders shouldn't rely on its interface staying exactly the same. However it is probably a good time to get acquainted with it as this page will be updated to match the current specification.

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.

The entity being created or updated is ''self''.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed until this function returns. This allows the mod to clean up any client-created entities associated with the one being removed.

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==
==Rendering 2D HUD on the Client==</text>
      <sha1>jnf0dog5ex9o9rzkiikfgayqag4f51h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>568</id>
      <parentid>564</parentid>
      <timestamp>2008-03-25T15:52:12Z</timestamp>
      <contributor>
        <ip>79.69.19.41</ip>
      </contributor>
      <comment>/* Header Code */</comment>
      <text xml:space="preserve" bytes="10698">==Notice==
This extension is still in a state of change - engines shouldn't yet advertise EXT_CSQC and modders shouldn't rely on its interface staying exactly the same. However it is probably a good time to get acquainted with it as this page will be updated to match the current specification.

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to the server. This is the same bit as used
// in DP_EF_NODEPTHTEST - CSQC requires this even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.

The entity being created or updated is ''self''.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed until this function returns. This allows the mod to clean up any client-created entities associated with the one being removed.

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==
==Rendering 2D HUD on the Client==</text>
      <sha1>sjd81wpfts0fqflahk7k9i10sxi63z3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>569</id>
      <parentid>568</parentid>
      <timestamp>2008-03-25T15:53:15Z</timestamp>
      <contributor>
        <ip>79.69.19.41</ip>
      </contributor>
      <comment>/* Header Code */</comment>
      <text xml:space="preserve" bytes="10762">==Notice==
This extension is still in a state of change - engines shouldn't yet advertise EXT_CSQC and modders shouldn't rely on its interface staying exactly the same. However it is probably a good time to get acquainted with it as this page will be updated to match the current specification.

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.

The entity being created or updated is ''self''.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed until this function returns. This allows the mod to clean up any client-created entities associated with the one being removed.

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==
==Rendering 2D HUD on the Client==</text>
      <sha1>brqinld6qkz6vzvqshxupe76p6utmnm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>918</id>
      <parentid>569</parentid>
      <timestamp>2008-08-24T05:07:59Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="10775">==Notice==
This extension is still in a state of change - engines shouldn't yet advertise EXT_CSQC and modders shouldn't rely on its interface staying exactly the same. However it is probably a good time to get acquainted with it as this page will be updated to match the current specification.

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_DrawScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.

The entity being created or updated is ''self''.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed until this function returns. This allows the mod to clean up any client-created entities associated with the one being removed.

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==
==Rendering 2D HUD on the Client==</text>
      <sha1>4lxhgypsj06hys2bezuey4ilcthdk0g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>920</id>
      <parentid>918</parentid>
      <timestamp>2008-08-24T06:35:59Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>R_DrawScene -&gt; R_RenderScene</comment>
      <text xml:space="preserve" bytes="10777">==Notice==
This extension is still in a state of change - engines shouldn't yet advertise EXT_CSQC and modders shouldn't rely on its interface staying exactly the same. However it is probably a good time to get acquainted with it as this page will be updated to match the current specification.

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.

The entity being created or updated is ''self''.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed until this function returns. This allows the mod to clean up any client-created entities associated with the one being removed.

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==
==Rendering 2D HUD on the Client==</text>
      <sha1>lsluymnv8domqbjk7272flf1sblszmo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1347</id>
      <parentid>920</parentid>
      <timestamp>2009-09-30T22:21:26Z</timestamp>
      <contributor>
        <ip>86.217.28.65</ip>
      </contributor>
      <comment>/* Rendering Entities on the Client */</comment>
      <text xml:space="preserve" bytes="10926">==Notice==
This extension is still in a state of change - engines shouldn't yet advertise EXT_CSQC and modders shouldn't rely on its interface staying exactly the same. However it is probably a good time to get acquainted with it as this page will be updated to match the current specification.

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.

The entity being created or updated is ''self''.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed until this function returns. This allows the mod to clean up any client-created entities associated with the one being removed.

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

spawn your ent, set a model/modelindex, set an origin, set the drawmask to something that matches your call to addentities. entity is now visible.

==Rendering 2D HUD on the Client==</text>
      <sha1>rru5jozeajuo0pnvx5gzqu8sxbegdrk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1348</id>
      <parentid>1347</parentid>
      <timestamp>2009-09-30T22:22:52Z</timestamp>
      <contributor>
        <ip>86.217.28.65</ip>
      </contributor>
      <comment>/* Rendering Entities on the Client */</comment>
      <text xml:space="preserve" bytes="11040">==Notice==
This extension is still in a state of change - engines shouldn't yet advertise EXT_CSQC and modders shouldn't rely on its interface staying exactly the same. However it is probably a good time to get acquainted with it as this page will be updated to match the current specification.

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.

The entity being created or updated is ''self''.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed until this function returns. This allows the mod to clean up any client-created entities associated with the one being removed.

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

spawn your ent [self = spawn();], set a model/modelindex [setmodel(self, &quot;progs/player.mdl);], set an origin [setorigin(self, '0 0 0');], set the drawmask to something that matches your call to addentities [self.drawmask = MASK_NORMAL;]. entity is now visible.

==Rendering 2D HUD on the Client==</text>
      <sha1>h4qjnmzhln4gozl7y2u4da321h4tbhf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1349</id>
      <parentid>1348</parentid>
      <timestamp>2009-09-30T22:23:41Z</timestamp>
      <contributor>
        <ip>86.217.28.65</ip>
      </contributor>
      <comment>/* Rendering Entities on the Client */</comment>
      <text xml:space="preserve" bytes="11132">==Notice==
This extension is still in a state of change - engines shouldn't yet advertise EXT_CSQC and modders shouldn't rely on its interface staying exactly the same. However it is probably a good time to get acquainted with it as this page will be updated to match the current specification.

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.

The entity being created or updated is ''self''.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed until this function returns. This allows the mod to clean up any client-created entities associated with the one being removed.

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

spawn your ent [self = spawn();], set a model/modelindex [setmodel(self, &quot;progs/player.mdl);], set an origin [setorigin(self, '0 0 0');], set the drawmask to something that matches your call to addentities [self.drawmask = MASK_NORMAL;]. entity is now visible.

Or you could do as above, but ignore the drawmask part and call [addentity(self);] instead

==Rendering 2D HUD on the Client==</text>
      <sha1>6ntlyyiesa96vs37wzv6sup0jz3bu3f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1350</id>
      <parentid>1349</parentid>
      <timestamp>2009-09-30T22:23:55Z</timestamp>
      <contributor>
        <ip>86.217.28.65</ip>
      </contributor>
      <comment>/* Rendering Entities on the Client */</comment>
      <text xml:space="preserve" bytes="11133">==Notice==
This extension is still in a state of change - engines shouldn't yet advertise EXT_CSQC and modders shouldn't rely on its interface staying exactly the same. However it is probably a good time to get acquainted with it as this page will be updated to match the current specification.

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void() CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, cvar(&quot;vid_conwidth&quot;));
    R_SetView(VF_SIZE_Y, cvar(&quot;vid_conheight&quot;));
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org);
    R_SetView(VF_ANGLES, player_ang);
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.

The entity being created or updated is ''self''.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed until this function returns. This allows the mod to clean up any client-created entities associated with the one being removed.

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

spawn your ent [self = spawn();], set a model/modelindex [setmodel(self, &quot;progs/player.mdl&quot;);], set an origin [setorigin(self, '0 0 0');], set the drawmask to something that matches your call to addentities [self.drawmask = MASK_NORMAL;]. entity is now visible.

Or you could do as above, but ignore the drawmask part and call [addentity(self);] instead

==Rendering 2D HUD on the Client==</text>
      <sha1>mlxlh0y6ccxbx8q32ijjj4teerkwup1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1351</id>
      <parentid>1350</parentid>
      <timestamp>2009-09-30T22:29:08Z</timestamp>
      <contributor>
        <ip>86.217.28.65</ip>
      </contributor>
      <comment>/* CSQC_UpdateView */</comment>
      <text xml:space="preserve" bytes="11317">==Notice==
This extension is still in a state of change - engines shouldn't yet advertise EXT_CSQC and modders shouldn't rely on its interface staying exactly the same. However it is probably a good time to get acquainted with it as this page will be updated to match the current specification.

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void() CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.

The entity being created or updated is ''self''.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed until this function returns. This allows the mod to clean up any client-created entities associated with the one being removed.

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

spawn your ent [self = spawn();], set a model/modelindex [setmodel(self, &quot;progs/player.mdl&quot;);], set an origin [setorigin(self, '0 0 0');], set the drawmask to something that matches your call to addentities [self.drawmask = MASK_NORMAL;]. entity is now visible.

Or you could do as above, but ignore the drawmask part and call [addentity(self);] instead

==Rendering 2D HUD on the Client==</text>
      <sha1>d4p3bvcbfizk68kpe67lhv8vg8mge7x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1352</id>
      <parentid>1351</parentid>
      <timestamp>2009-09-30T22:29:32Z</timestamp>
      <contributor>
        <ip>86.217.28.65</ip>
      </contributor>
      <comment>/* CSQC_UpdateView */</comment>
      <text xml:space="preserve" bytes="11344">==Notice==
This extension is still in a state of change - engines shouldn't yet advertise EXT_CSQC and modders shouldn't rely on its interface staying exactly the same. However it is probably a good time to get acquainted with it as this page will be updated to match the current specification.

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.

The entity being created or updated is ''self''.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed until this function returns. This allows the mod to clean up any client-created entities associated with the one being removed.

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

spawn your ent [self = spawn();], set a model/modelindex [setmodel(self, &quot;progs/player.mdl&quot;);], set an origin [setorigin(self, '0 0 0');], set the drawmask to something that matches your call to addentities [self.drawmask = MASK_NORMAL;]. entity is now visible.

Or you could do as above, but ignore the drawmask part and call [addentity(self);] instead

==Rendering 2D HUD on the Client==</text>
      <sha1>ep5ckyqor5lg9ht0m3pia0uy836v7p4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1353</id>
      <parentid>1352</parentid>
      <timestamp>2009-09-30T22:34:36Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <comment>/* Rendering Entities on the Client */ minor formatting touchups</comment>
      <text xml:space="preserve" bytes="11400">==Notice==
This extension is still in a state of change - engines shouldn't yet advertise EXT_CSQC and modders shouldn't rely on its interface staying exactly the same. However it is probably a good time to get acquainted with it as this page will be updated to match the current specification.

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.

The entity being created or updated is ''self''.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed until this function returns. This allows the mod to clean up any client-created entities associated with the one being removed.

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==</text>
      <sha1>ggbibvkgq6w8ncgigmdpom72q91q67m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1355</id>
      <parentid>1353</parentid>
      <timestamp>2009-10-01T02:17:43Z</timestamp>
      <contributor>
        <ip>86.217.28.65</ip>
      </contributor>
      <comment>/* Notice */</comment>
      <text xml:space="preserve" bytes="11612">==Notice==
This extension is still in a state of change - engines shouldn't yet advertise EXT_CSQC and modders shouldn't rely on its interface staying exactly the same. However it is probably a good time to get acquainted with it as this page will be updated to match the current specification.

A more technical/complete specification can be found here:
http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/specs/ext_csqc_1.txt?revision=3346&amp;view=markup
Warning: DP does not fully implement the above spec.

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.

The entity being created or updated is ''self''.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed until this function returns. This allows the mod to clean up any client-created entities associated with the one being removed.

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==</text>
      <sha1>lvpm4hsztixwqgflj6s14kie1y6jxee</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1356</id>
      <parentid>1355</parentid>
      <timestamp>2009-10-01T02:18:23Z</timestamp>
      <contributor>
        <ip>86.217.28.65</ip>
      </contributor>
      <comment>/* Notice */</comment>
      <text xml:space="preserve" bytes="11598">==Notice==
This extension is still in a state of change - engines shouldn't yet advertise EXT_CSQC and modders shouldn't rely on its interface staying exactly the same. However it is probably a good time to get acquainted with it as this page will be updated to match the current specification.

A more technical/complete specification can be found here:
http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/specs/ext_csqc_1.txt?view=markup
Warning: DP does not fully implement the above spec.

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.

The entity being created or updated is ''self''.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed until this function returns. This allows the mod to clean up any client-created entities associated with the one being removed.

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==</text>
      <sha1>db1g45honh0sjo64nzpdtqzx7o1klou</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1357</id>
      <parentid>1356</parentid>
      <timestamp>2009-10-01T02:29:20Z</timestamp>
      <contributor>
        <ip>86.217.28.65</ip>
      </contributor>
      <comment>/* On the client */</comment>
      <text xml:space="preserve" bytes="11667">==Notice==
This extension is still in a state of change - engines shouldn't yet advertise EXT_CSQC and modders shouldn't rely on its interface staying exactly the same. However it is probably a good time to get acquainted with it as this page will be updated to match the current specification.

A more technical/complete specification can be found here:
http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/specs/ext_csqc_1.txt?view=markup
Warning: DP does not fully implement the above spec.

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.

The entity being created or updated is ''self''.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer.

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==</text>
      <sha1>gerproeih01unglgkpigj33y3bw6ywj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1358</id>
      <parentid>1357</parentid>
      <timestamp>2009-10-01T02:37:09Z</timestamp>
      <contributor>
        <ip>86.217.28.65</ip>
      </contributor>
      <comment>/* On the client */</comment>
      <text xml:space="preserve" bytes="12222">==Notice==
This extension is still in a state of change - engines shouldn't yet advertise EXT_CSQC and modders shouldn't rely on its interface staying exactly the same. However it is probably a good time to get acquainted with it as this page will be updated to match the current specification.

A more technical/complete specification can be found here:
http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/specs/ext_csqc_1.txt?view=markup
Warning: DP does not fully implement the above spec.

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==</text>
      <sha1>e2i0q0giups2efezokc8j7i4rbpcj81</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1359</id>
      <parentid>1358</parentid>
      <timestamp>2009-10-01T02:40:19Z</timestamp>
      <contributor>
        <ip>86.217.28.65</ip>
      </contributor>
      <comment>/* Rendering 2D HUD on the Client */</comment>
      <text xml:space="preserve" bytes="12347">==Notice==
This extension is still in a state of change - engines shouldn't yet advertise EXT_CSQC and modders shouldn't rely on its interface staying exactly the same. However it is probably a good time to get acquainted with it as this page will be updated to match the current specification.

A more technical/complete specification can be found here:
http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/specs/ext_csqc_1.txt?view=markup
Warning: DP does not fully implement the above spec.

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed. For mouse input the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin should be used.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>cjd6y1jocmgatccgf7wuwewwzx37i1b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1360</id>
      <parentid>1359</parentid>
      <timestamp>2009-10-01T09:00:55Z</timestamp>
      <contributor>
        <ip>86.217.28.65</ip>
      </contributor>
      <comment>/* CSQC_InputEvent */</comment>
      <text xml:space="preserve" bytes="12684">==Notice==
This extension is still in a state of change - engines shouldn't yet advertise EXT_CSQC and modders shouldn't rely on its interface staying exactly the same. However it is probably a good time to get acquainted with it as this page will be updated to match the current specification.

A more technical/complete specification can be found here:
http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/specs/ext_csqc_1.txt?view=markup
Warning: DP does not fully implement the above spec.

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed while ascii is the printable character. Potentially, ascii might be a full unicode char if the engine supports that, and is often 0 on keyup events or keydown events where escape or modifier keys etc were used.
For mouse input the 'key' parameter contains the x movement, while the ascii parameter contains the y movement, but in DP, you may be required to use the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin instead.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>lyk0zaojdxtp05ee9cko5iueae3g4dn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1606</id>
      <parentid>1360</parentid>
      <timestamp>2010-05-14T01:44:09Z</timestamp>
      <contributor>
        <ip>188.40.209.161</ip>
      </contributor>
      <comment>2YkoTY  &lt;a href=&quot;http://paefpmunvbpt.com/&quot;&gt;paefpmunvbpt&lt;/a&gt;, [url=http://wecnivnjdmlm.com/]wecnivnjdmlm[/url], [link=http://lgikousorbpd.com/]lgikousorbpd[/link], http://xlmfeiafqamh.com/</comment>
      <text xml:space="preserve" bytes="12379">2YkoTY  &lt;a href=&quot;http://paefpmunvbpt.com/&quot;&gt;paefpmunvbpt&lt;/a&gt;, [url=http://wecnivnjdmlm.com/]wecnivnjdmlm[/url], [link=http://lgikousorbpd.com/]lgikousorbpd[/link], http://xlmfeiafqamh.com/

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed while ascii is the printable character. Potentially, ascii might be a full unicode char if the engine supports that, and is often 0 on keyup events or keydown events where escape or modifier keys etc were used.
For mouse input the 'key' parameter contains the x movement, while the ascii parameter contains the y movement, but in DP, you may be required to use the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin instead.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>0ca88qqtf9se65tnxkrx2z6sycehc1t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1607</id>
      <parentid>1606</parentid>
      <timestamp>2010-05-15T06:44:27Z</timestamp>
      <contributor>
        <ip>88.70.50.234</ip>
      </contributor>
      <comment>Undo revision 1606 by [[Special:Contributions/188.40.209.161|188.40.209.161]] ([[User talk:188.40.209.161|Talk]]) Spam</comment>
      <text xml:space="preserve" bytes="12684">==Notice==
This extension is still in a state of change - engines shouldn't yet advertise EXT_CSQC and modders shouldn't rely on its interface staying exactly the same. However it is probably a good time to get acquainted with it as this page will be updated to match the current specification.

A more technical/complete specification can be found here:
http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/specs/ext_csqc_1.txt?view=markup
Warning: DP does not fully implement the above spec.

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed while ascii is the printable character. Potentially, ascii might be a full unicode char if the engine supports that, and is often 0 on keyup events or keydown events where escape or modifier keys etc were used.
For mouse input the 'key' parameter contains the x movement, while the ascii parameter contains the y movement, but in DP, you may be required to use the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin instead.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>lyk0zaojdxtp05ee9cko5iueae3g4dn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1608</id>
      <parentid>1607</parentid>
      <timestamp>2010-05-18T05:32:00Z</timestamp>
      <contributor>
        <ip>78.109.84.129</ip>
      </contributor>
      <comment>diablo ii 1.11 editor http://tournejafe.tripod.com/charles-e.-harley-antonio.html our brisbane.com.au  juan j. rodriguez velez http://tournejafe.tripod.com/sharper-image.com.html elizabethbarry aol.co</comment>
      <text xml:space="preserve" bytes="13195">diablo ii 1.11 editor http://tournejafe.tripod.com/charles-e.-harley-antonio.html our brisbane.com.au  juan j. rodriguez velez http://tournejafe.tripod.com/sharper-image.com.html elizabethbarry aol.com 2007  dr. eugene scott http://tournejafe.tripod.com/music-instrument-stores-portland-or.html zoom.ca  www.ocyopus travel.com http://tournejafe.tripod.com/peter-r.-sainez.html nrt framework download  www.pala.com http://tournejafe.tripod.com/st.-vincent-s-hospitalstaten-island.html image derm inc  roger davison rogerdavison eastlink.ca http://tournejafe.tripod.com/crossroad-harley-davison.com.html brisbane.qld.gov.au development  peter 1.00 alpha http://tournejafe.tripod.com/www.eros-guide.com.html thomas myspace editor 2.5  restaurant.com cheers http://tournejafe.tripod.com/davidson-county-n.c.schools.html dr. seuss titles  zoominfo.com http://tournejafe.tripod.com/louise-e.-rea.html hacks foronionbooty.com  james f. harnden http://tournejafe.tripod.com/michael-r.-moyer-v.m.d.html t.v guide

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed while ascii is the printable character. Potentially, ascii might be a full unicode char if the engine supports that, and is often 0 on keyup events or keydown events where escape or modifier keys etc were used.
For mouse input the 'key' parameter contains the x movement, while the ascii parameter contains the y movement, but in DP, you may be required to use the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin instead.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>sbpb3h4m874uif3ufs8r2uxyeud864h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1609</id>
      <parentid>1608</parentid>
      <timestamp>2010-05-31T09:38:16Z</timestamp>
      <contributor>
        <ip>88.70.235.214</ip>
      </contributor>
      <comment>Undo revision 1608 by [[Special:Contributions/78.109.84.129|78.109.84.129]] ([[User talk:78.109.84.129|Talk]]) Spam</comment>
      <text xml:space="preserve" bytes="12684">==Notice==
This extension is still in a state of change - engines shouldn't yet advertise EXT_CSQC and modders shouldn't rely on its interface staying exactly the same. However it is probably a good time to get acquainted with it as this page will be updated to match the current specification.

A more technical/complete specification can be found here:
http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/specs/ext_csqc_1.txt?view=markup
Warning: DP does not fully implement the above spec.

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed while ascii is the printable character. Potentially, ascii might be a full unicode char if the engine supports that, and is often 0 on keyup events or keydown events where escape or modifier keys etc were used.
For mouse input the 'key' parameter contains the x movement, while the ascii parameter contains the y movement, but in DP, you may be required to use the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin instead.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>lyk0zaojdxtp05ee9cko5iueae3g4dn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1610</id>
      <parentid>1609</parentid>
      <timestamp>2010-06-20T01:47:16Z</timestamp>
      <contributor>
        <ip>61.244.235.34</ip>
      </contributor>
      <comment>medical review evaluatory sr http://quekanrost.angelfire.com/dr.-phil-anorexia.html washingtonstate.com gov  www.washingtonstate lacrosse.com http://quekanrost.angelfire.com/msnbc.msn.html st. ignatiu</comment>
      <text xml:space="preserve" bytes="13309">medical review evaluatory sr http://quekanrost.angelfire.com/dr.-phil-anorexia.html washingtonstate.com gov  www.washingtonstate lacrosse.com http://quekanrost.angelfire.com/msnbc.msn.html st. ignatius school manhattan  sierra entertainment inc http://quekanrost.angelfire.com/california-state-dept.-hours.html joes inc.school chillium rd  msnbc.com today http://quekanrost.angelfire.com/leanrx.net-8003048447.html www.teenmodelmarie.com found on google  studio search inc http://quekanrost.angelfire.com/movie-releases-feb.-18-1989.html band tshirt designs.com  lastes d.v.d. releases http://quekanrost.angelfire.com/s.y.compromise-found.html benefits.ml  99.9 arizona http://quekanrost.angelfire.com/internet-explorer-6.0-install.html dr. abuzzahab dateline story  comment out servlet web.xml http://quekanrost.angelfire.com/mr.-clean-disosible-gloves.html japan s main legislative body  charter main street .com http://quekanrost.angelfire.com/www.tdcj.state.tx.us.html ferc.gov press releases 2005  members.phil flash.com pass http://quekanrost.angelfire.com/stevesuniques-sbcglobal.net.html scholarships.com scam

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed while ascii is the printable character. Potentially, ascii might be a full unicode char if the engine supports that, and is often 0 on keyup events or keydown events where escape or modifier keys etc were used.
For mouse input the 'key' parameter contains the x movement, while the ascii parameter contains the y movement, but in DP, you may be required to use the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin instead.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>jzku3xjm3rywuaqdbi8paki35x23bjd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1611</id>
      <parentid>1610</parentid>
      <timestamp>2010-06-23T14:19:54Z</timestamp>
      <contributor>
        <ip>88.70.50.254</ip>
      </contributor>
      <comment>Undo revision 1610 by [[Special:Contributions/61.244.235.34|61.244.235.34]] ([[User talk:61.244.235.34|Talk]]) Spam</comment>
      <text xml:space="preserve" bytes="12684">==Notice==
This extension is still in a state of change - engines shouldn't yet advertise EXT_CSQC and modders shouldn't rely on its interface staying exactly the same. However it is probably a good time to get acquainted with it as this page will be updated to match the current specification.

A more technical/complete specification can be found here:
http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/specs/ext_csqc_1.txt?view=markup
Warning: DP does not fully implement the above spec.

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed while ascii is the printable character. Potentially, ascii might be a full unicode char if the engine supports that, and is often 0 on keyup events or keydown events where escape or modifier keys etc were used.
For mouse input the 'key' parameter contains the x movement, while the ascii parameter contains the y movement, but in DP, you may be required to use the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin instead.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>lyk0zaojdxtp05ee9cko5iueae3g4dn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1612</id>
      <parentid>1611</parentid>
      <timestamp>2010-06-27T13:02:47Z</timestamp>
      <contributor>
        <ip>82.114.160.34</ip>
      </contributor>
      <comment>www.google.comcom http://giaconmoihard.tripod.com/mygmlink.ca.html jennifer l. aubuch n  u.s merian memorial http://giaconmoihard.tripod.com/edna-g.-beasley.html rude humor .com  www2.karupspc.com htt</comment>
      <text xml:space="preserve" bytes="13164">www.google.comcom http://giaconmoihard.tripod.com/mygmlink.ca.html jennifer l. aubuch n  u.s merian memorial http://giaconmoihard.tripod.com/edna-g.-beasley.html rude humor .com  www2.karupspc.com http://giaconmoihard.tripod.com/www.logic-puzzles.html viking corp  every woman should have http://giaconmoihard.tripod.com/www.anniesnaturals.com.html nickname for the u.s.s.constitution  sinclair valentine.com http://giaconmoihard.tripod.com/www.waterboro.ogr.html coke rewardpoints.comcom  www.lowpings.net http://giaconmoihard.tripod.com/sgt.pilot-thomas-wallace-malta.html lightpathways.com  www.rrgetawayz.com http://giaconmoihard.tripod.com/nilda-l.-marrero.html passwords for onionbooty.com  goldengate.com http://giaconmoihard.tripod.com/www.oldwomen.synnp.net.html transcend information inc  com sites http://giaconmoihard.tripod.com/b.-n.gust.html u.p. michigan ski resorts  deshawn m. vella http://giaconmoihard.tripod.com/st.-valentine.html 24.5 wheel simulators

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed while ascii is the printable character. Potentially, ascii might be a full unicode char if the engine supports that, and is often 0 on keyup events or keydown events where escape or modifier keys etc were used.
For mouse input the 'key' parameter contains the x movement, while the ascii parameter contains the y movement, but in DP, you may be required to use the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin instead.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>flojf17krjn2pzpqr42dxhxmqfh33ut</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1613</id>
      <parentid>1612</parentid>
      <timestamp>2010-06-27T20:32:53Z</timestamp>
      <contributor>
        <ip>88.70.64.119</ip>
      </contributor>
      <comment>Undo revision 1612 by [[Special:Contributions/82.114.160.34|82.114.160.34]] ([[User talk:82.114.160.34|Talk]]) Spam (does anyone even care around here?)</comment>
      <text xml:space="preserve" bytes="12684">==Notice==
This extension is still in a state of change - engines shouldn't yet advertise EXT_CSQC and modders shouldn't rely on its interface staying exactly the same. However it is probably a good time to get acquainted with it as this page will be updated to match the current specification.

A more technical/complete specification can be found here:
http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/specs/ext_csqc_1.txt?view=markup
Warning: DP does not fully implement the above spec.

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed while ascii is the printable character. Potentially, ascii might be a full unicode char if the engine supports that, and is often 0 on keyup events or keydown events where escape or modifier keys etc were used.
For mouse input the 'key' parameter contains the x movement, while the ascii parameter contains the y movement, but in DP, you may be required to use the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin instead.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>lyk0zaojdxtp05ee9cko5iueae3g4dn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1622</id>
      <parentid>1613</parentid>
      <timestamp>2010-07-24T13:17:46Z</timestamp>
      <contributor>
        <ip>222.77.14.55</ip>
      </contributor>
      <comment>joplinscompserv.como http://conttinla.t35.com/oregonian-archives-scholarships-.com.html miami florida u.s. forecast  cole aol.com yahoo.com http://conttinla.t35.com/ann.-of-hurricane-katrina.html wate</comment>
      <text xml:space="preserve" bytes="13212">joplinscompserv.como http://conttinla.t35.com/oregonian-archives-scholarships-.com.html miami florida u.s. forecast  cole aol.com yahoo.com http://conttinla.t35.com/ann.-of-hurricane-katrina.html waterford 18.5 hurricane  engines super hurricane .24 http://conttinla.t35.com/luther-f.-cole-louisiana.html u.s. coastal marine forecasts  3.14159 the full number http://conttinla.t35.com/siskiyou-weather.com.html coastal federal.com  como leo formato rar http://conttinla.t35.com/wind-forecast-.kml.html about.com monthly holidays  local6.comn http://conttinla.t35.com/askjolene.comn.html current memphis tn. weather  allen e. cole photographer http://conttinla.t35.com/hereistheporn.como.html image urlmon.dll is corrupt  susan e. parks http://conttinla.t35.com/deborah-m.-panciera.html s.a. auto sales  marine federal.org http://conttinla.t35.com/chokinchicken.ccom.html www.astrologyzone.com forecasts monthly  texas monthly butt http://conttinla.t35.com/www.ireland-national-archives.html n.c. wine production forcasts

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed while ascii is the printable character. Potentially, ascii might be a full unicode char if the engine supports that, and is often 0 on keyup events or keydown events where escape or modifier keys etc were used.
For mouse input the 'key' parameter contains the x movement, while the ascii parameter contains the y movement, but in DP, you may be required to use the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin instead.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>omrborz9um9hvz6m441hy7kmlm9qlko</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1623</id>
      <parentid>1622</parentid>
      <timestamp>2010-07-29T07:34:55Z</timestamp>
      <contributor>
        <ip>86.0.165.149</ip>
      </contributor>
      <comment>removed irrelevant spam ads at the top of the page</comment>
      <text xml:space="preserve" bytes="12190">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed while ascii is the printable character. Potentially, ascii might be a full unicode char if the engine supports that, and is often 0 on keyup events or keydown events where escape or modifier keys etc were used.
For mouse input the 'key' parameter contains the x movement, while the ascii parameter contains the y movement, but in DP, you may be required to use the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin instead.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>3dkoa4i0yubgb2o2g6ozjdq3dgvsi7i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1624</id>
      <parentid>1623</parentid>
      <timestamp>2010-08-12T04:37:45Z</timestamp>
      <contributor>
        <ip>213.61.13.81</ip>
      </contributor>
      <comment>mrs. elizabeth manilla arocho http://dirazzspokni.tripod.com/phila.-city-paper.html c dd landfill acquisitions ltd  r. blake honey missoula mt http://dirazzspokni.tripod.com/members.incest3d.net.html</comment>
      <text xml:space="preserve" bytes="12220">mrs. elizabeth manilla arocho http://dirazzspokni.tripod.com/phila.-city-paper.html c dd landfill acquisitions ltd  r. blake honey missoula mt http://dirazzspokni.tripod.com/members.incest3d.net.html johanna foods inc  crokket honey.com http://dirazzspokni.tripod.com/willamette-pass-ski-.com.html palm os v4.0  wpow 96.5 http://dirazzspokni.tripod.com/mdb-offline-folders-gpo.html sardonyxbooks.com  st. clair county landfill http://dirazzspokni.tripod.com/what-are-pc-drs.html extreme asses.com  buffalo members g.a.r http://dirazzspokni.tripod.com/gallery-ig.com.br.html annette p. radick  free.rmvb to .mpg converter http://dirazzspokni.tripod.com/teendreams.com-movie.html kimberley l. judd  kimberley l. judd http://dirazzspokni.tripod.com/budweiser-tour-st.-louis.html dr. karen hill  what is csc.exe http://dirazzspokni.tripod.com/baked-glazed-ham.com.html umbrella rihana.mp3  garrett a. morgan http://dirazzspokni.tripod.com/christopher-m.-malloy.html samuel s. ramsden

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed while ascii is the printable character. Potentially, ascii might be a full unicode char if the engine supports that, and is often 0 on keyup events or keydown events where escape or modifier keys etc were used.
For mouse input the 'key' parameter contains the x movement, while the ascii parameter contains the y movement, but in DP, you may be required to use the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin instead.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>klu2q0h8saki0h1lhk7827i9x05gmei</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1625</id>
      <parentid>1624</parentid>
      <timestamp>2010-08-14T10:45:24Z</timestamp>
      <contributor>
        <ip>110.137.45.161</ip>
      </contributor>
      <comment>citadel consulting inc http://solstifestdros.website.org/teenwhores.com-lexi.html trojan horse g47676000.dll  ct. free news papers http://solstifestdros.website.org/inventors.about.com.html john evers</comment>
      <text xml:space="preserve" bytes="12508">mrs. elizabeth manilla arocho http://dirazzspokni.tripod.com/phila.-city-paper.html c dd landfill acquisitions ltd  r. blake honey missoula mt http://dirazzspokni.tripod.com/members.incest3d.net.html johanna foods inc  crokket honey.com http://dirazzspokni.tripod.com/willamette-pass-ski-.com.html palm os v4.0  wpow 96.5 http://dirazzspokni.tripod.com/mdb-offline-folders-gpo.html sardonyxbooks.com  st. clair county landfill http://dirazzspokni.tripod.com/what-are-pc-drs.html extreme asses.com  buffalo members g.a.r http://dirazzspokni.tripod.com/gallery-ig.com.br.html annette p. radick  free.rmvb to .mpg converter http://dirazzspokni.tripod.com/teendreams.com-movie.html kimberley l. judd  kimberley l. judd http://dirazzspokni.tripod.com/budweiser-tour-st.-louis.html dr. karen hill  what is csc.exe http://dirazzspokni.tripod.com/baked-glazed-ham.com.html umbrella rihana.mp3  garrett a. morgan http://dirazzspokni.tripod.com/christopher-m.-malloy.html samuel s. ramsden

citadel consulting inc http://solstifestdros.website.org/teenwhores.com-lexi.html trojan horse g47676000.dll  ct. free news papers http://solstifestdros.website.org/inventors.about.com.html john evers st. thomas  long term relationships http://solstifestdros.website.org/seymour-yahoo.com-hotmail.com.html acute care inc  rev. humphreys http://solstifestdros.website.org/www.relationships.com.au.html trojan horse generic10.aaos  exploitedteens.com lexi http://solstifestdros.website.org/iron-management-inc.-knee.html winlinux layout.bin download  creater industry co. ltd http://solstifestdros.website.org/richard-f.-humphreys-said.html jne consulting ltd. pdf  www.tacl.co.ke http://solstifestdros.website.org/fact.com.html history of holly grail.com  trojan.js.obsq.c http://solstifestdros.website.org/mckinsey-co.-consulting.html kidney.com  hotels myrtle beach sc http://solstifestdros.website.org/comprehensive-vs.-focused.html www.uimn.org ui  st. jude s mcc wilmington http://solstifestdros.website.org/arapahoe.edu-bkstr.html generic10.aokl

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed while ascii is the printable character. Potentially, ascii might be a full unicode char if the engine supports that, and is often 0 on keyup events or keydown events where escape or modifier keys etc were used.
For mouse input the 'key' parameter contains the x movement, while the ascii parameter contains the y movement, but in DP, you may be required to use the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin instead.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>9l5gpacu3150qv57mvpc5m0ph16wnan</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1626</id>
      <parentid>1625</parentid>
      <timestamp>2010-08-16T14:09:12Z</timestamp>
      <contributor>
        <ip>201.72.123.133</ip>
      </contributor>
      <comment>www.world station radiowww.ebay.co.uk http://brigpicogte.onlinewebshop.net/texas-yoga.-com.html njmmistraining unisys.com  st. george tucker wife http://brigpicogte.onlinewebshop.net/eps.esterline.htm</comment>
      <text xml:space="preserve" bytes="12708">mrs. elizabeth manilla arocho http://dirazzspokni.tripod.com/phila.-city-paper.html c dd landfill acquisitions ltd  r. blake honey missoula mt http://dirazzspokni.tripod.com/members.incest3d.net.html johanna foods inc  crokket honey.com http://dirazzspokni.tripod.com/willamette-pass-ski-.com.html palm os v4.0  wpow 96.5 http://dirazzspokni.tripod.com/mdb-offline-folders-gpo.html sardonyxbooks.com  st. clair county landfill http://dirazzspokni.tripod.com/what-are-pc-drs.html extreme asses.com  buffalo members g.a.r http://dirazzspokni.tripod.com/gallery-ig.com.br.html annette p. radick  free.rmvb to .mpg converter http://dirazzspokni.tripod.com/teendreams.com-movie.html kimberley l. judd  kimberley l. judd http://dirazzspokni.tripod.com/budweiser-tour-st.-louis.html dr. karen hill  what is csc.exe http://dirazzspokni.tripod.com/baked-glazed-ham.com.html umbrella rihana.mp3  garrett a. morgan http://dirazzspokni.tripod.com/christopher-m.-malloy.html samuel s. ramsden

citadel consulting inc http://solstifestdros.website.org/teenwhores.com-lexi.html trojan horse g47676000.dll  ct. free news papers http://solstifestdros.website.org/inventors.about.com.html john evers st. thomas  long term relationships http://solstifestdros.website.org/seymour-yahoo.com-hotmail.com.html acute care inc  rev. humphreys http://solstifestdros.website.org/www.relationships.com.au.html trojan horse generic10.aaos  exploitedteens.com lexi http://solstifestdros.website.org/iron-management-inc.-knee.html winlinux layout.bin download  creater industry co. ltd http://solstifestdros.website.org/richard-f.-humphreys-said.html jne consulting ltd. pdf  www.tacl.co.ke http://solstifestdros.website.org/fact.com.html history of holly grail.com  trojan.js.obsq.c http://solstifestdros.website.org/mckinsey-co.-consulting.html kidney.com  hotels myrtle beach sc http://solstifestdros.website.org/comprehensive-vs.-focused.html www.uimn.org ui  st. jude s mcc wilmington http://solstifestdros.website.org/arapahoe.edu-bkstr.html generic10.aokl

www.world station radiowww.ebay.co.uk http://brigpicogte.onlinewebshop.net/texas-yoga.-com.html njmmistraining unisys.com  st. george tucker wife http://brigpicogte.onlinewebshop.net/eps.esterline.html 892 cingular.com att  rodney p. kinney associates inc http://brigpicogte.onlinewebshop.net/hardy-county-wv.-newspapers.html dctorret.com  nasa world wind1.3.5 http://brigpicogte.onlinewebshop.net/6.0-cordless-phone.html waves gold bundle 3.5  kenyon v. garrells foia http://brigpicogte.onlinewebshop.net/m.f.-weaver-bathing-beauties.html raymond davis jr  www.unisys.com public sector http://brigpicogte.onlinewebshop.net/culture-room-ft.-lauderdale.html market your soft.com  champagne.closquinet.r wanadoo.fr http://brigpicogte.onlinewebshop.net/e.-brent-shelton.html www.osmonics.comm  cd girls.com http://brigpicogte.onlinewebshop.net/ssgt-thomas-c.-shelton.html st. raymond school nj  rodney mailhot http://brigpicogte.onlinewebshop.net/kodak-c63-6.1-megapixel.html www.itc spanking  alt.binaries pictures nylons http://brigpicogte.onlinewebshop.net/shelton-ct.html dave s st. petersburg beach

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed while ascii is the printable character. Potentially, ascii might be a full unicode char if the engine supports that, and is often 0 on keyup events or keydown events where escape or modifier keys etc were used.
For mouse input the 'key' parameter contains the x movement, while the ascii parameter contains the y movement, but in DP, you may be required to use the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin instead.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>pzkfdtyzrg2vy7k5mspy33voyaqmwff</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1629</id>
      <parentid>1626</parentid>
      <timestamp>2010-08-25T08:11:03Z</timestamp>
      <contributor>
        <username>Karatorian</username>
        <id>25</id>
      </contributor>
      <minor/>
      <comment>Revert to last version before all the spam.</comment>
      <text xml:space="preserve" bytes="12684">==Notice==
This extension is still in a state of change - engines shouldn't yet advertise EXT_CSQC and modders shouldn't rely on its interface staying exactly the same. However it is probably a good time to get acquainted with it as this page will be updated to match the current specification.

A more technical/complete specification can be found here:
http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/specs/ext_csqc_1.txt?view=markup
Warning: DP does not fully implement the above spec.

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed while ascii is the printable character. Potentially, ascii might be a full unicode char if the engine supports that, and is often 0 on keyup events or keydown events where escape or modifier keys etc were used.
For mouse input the 'key' parameter contains the x movement, while the ascii parameter contains the y movement, but in DP, you may be required to use the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin instead.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>lyk0zaojdxtp05ee9cko5iueae3g4dn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1630</id>
      <parentid>1629</parentid>
      <timestamp>2010-09-01T06:26:31Z</timestamp>
      <contributor>
        <ip>155.253.6.151</ip>
      </contributor>
      <comment>http://ardvarklinnea.host-ed.net/homedepot.com-howto.html homedepot.com/howto  http://ardvarklinnea.host-ed.net/lowes.com-howto.html lowes.com/howto  http://ardvarklinnea.host-ed.net/what-is-python-2.</comment>
      <text xml:space="preserve" bytes="12502">http://ardvarklinnea.host-ed.net/homedepot.com-howto.html homedepot.com/howto  http://ardvarklinnea.host-ed.net/lowes.com-howto.html lowes.com/howto  http://ardvarklinnea.host-ed.net/what-is-python-2.2.3.html what is python 2.2.3  http://ardvarklinnea.host-ed.net/what-is-python-2.2.1.html what is python 2.2.1

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed while ascii is the printable character. Potentially, ascii might be a full unicode char if the engine supports that, and is often 0 on keyup events or keydown events where escape or modifier keys etc were used.
For mouse input the 'key' parameter contains the x movement, while the ascii parameter contains the y movement, but in DP, you may be required to use the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin instead.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>kz3fzd9xvycnu2ev22it0bsflmu4qbe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1631</id>
      <parentid>1630</parentid>
      <timestamp>2010-09-06T01:30:34Z</timestamp>
      <contributor>
        <ip>68.233.227.103</ip>
      </contributor>
      <comment>ghettogaggers.com crack http://teilicktesyl.000hosted.com/gotm-3-rapidshare.com.html rapidshare.de worlds end  leechget serial rapidshare.com http://teilicktesyl.000hosted.com/rapidshare.com-movie-rap</comment>
      <text xml:space="preserve" bytes="12775">http://ardvarklinnea.host-ed.net/homedepot.com-howto.html homedepot.com/howto  http://ardvarklinnea.host-ed.net/lowes.com-howto.html lowes.com/howto  http://ardvarklinnea.host-ed.net/what-is-python-2.2.3.html what is python 2.2.3  http://ardvarklinnea.host-ed.net/what-is-python-2.2.1.html what is python 2.2.1

ghettogaggers.com crack http://teilicktesyl.000hosted.com/gotm-3-rapidshare.com.html rapidshare.de worlds end  leechget serial rapidshare.com http://teilicktesyl.000hosted.com/rapidshare.com-movie-rapidshareddl.html giorgos rapidshare.com  msp2006 12 06 rapidshare.com http://teilicktesyl.000hosted.com/rapidshare.com-vicky.html wendy o. williams rapidshare  kira rapidshare.de http://teilicktesyl.000hosted.com/zip-password-rapidshare.com.html rapidshare.de free accounts  rapidshare.com mai http://teilicktesyl.000hosted.com/devlan-rapidshare.de.html sql server 2000 rapidshare.com files  rapidshare.com teen titans go http://teilicktesyl.000hosted.com/bound-life-rapidshare.com.html encarta 2007 rapidshare.com  rapidshare 5.9 downlaod http://teilicktesyl.000hosted.com/silent.hunter-iii-v1.4-rapidshare.com.html mondo rossi rapidshare.com  autumn jade rapidshare.com http://teilicktesyl.000hosted.com/rapidshare.com-files35769964-sogorok.html eleanor mcevoy rapidshare.com  lily model.com video 01 rapidshare http://teilicktesyl.000hosted.com/apprentice-to-murder-rapidshare.com.html lady domina rapidshare.com  rapidshare.erotiek http://teilicktesyl.000hosted.com/sql.svr.developer.edtn.2005.html rapidshare.com 12345

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed while ascii is the printable character. Potentially, ascii might be a full unicode char if the engine supports that, and is often 0 on keyup events or keydown events where escape or modifier keys etc were used.
For mouse input the 'key' parameter contains the x movement, while the ascii parameter contains the y movement, but in DP, you may be required to use the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin instead.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>d7n4cczhnw8jdc7vyyjtvx2u657dipm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1632</id>
      <parentid>1631</parentid>
      <timestamp>2010-09-07T02:26:44Z</timestamp>
      <contributor>
        <ip>67.176.79.127</ip>
      </contributor>
      <comment>rv again</comment>
      <text xml:space="preserve" bytes="12684">==Notice==
This extension is still in a state of change - engines shouldn't yet advertise EXT_CSQC and modders shouldn't rely on its interface staying exactly the same. However it is probably a good time to get acquainted with it as this page will be updated to match the current specification.

A more technical/complete specification can be found here:
http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/specs/ext_csqc_1.txt?view=markup
Warning: DP does not fully implement the above spec.

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed while ascii is the printable character. Potentially, ascii might be a full unicode char if the engine supports that, and is often 0 on keyup events or keydown events where escape or modifier keys etc were used.
For mouse input the 'key' parameter contains the x movement, while the ascii parameter contains the y movement, but in DP, you may be required to use the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin instead.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>lyk0zaojdxtp05ee9cko5iueae3g4dn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1634</id>
      <parentid>1632</parentid>
      <timestamp>2010-09-08T17:08:24Z</timestamp>
      <contributor>
        <ip>122.220.36.181</ip>
      </contributor>
      <comment>www.baby annabell.com http://roijadito.260mb.com/airsoft-p90-at-amozon.com.html round rock tx. resturants  glock .40 caliber comparison http://roijadito.260mb.com/hdmi-connectors-vs.-dvi.html www.prof</comment>
      <text xml:space="preserve" bytes="13111">www.baby annabell.com http://roijadito.260mb.com/airsoft-p90-at-amozon.com.html round rock tx. resturants  glock .40 caliber comparison http://roijadito.260mb.com/hdmi-connectors-vs.-dvi.html www.professional staffing resources.com  olney c.j. short http://roijadito.260mb.com/richard-orth-d.o.html trl  guns america.com http://roijadito.260mb.com/r.-lee-ermey-clips.html 16 in. glock barrel  remote.hawaiipacifichealth.org http://roijadito.260mb.com/glock-23-.40.html guns.com  themilflist.com http://roijadito.260mb.com/w32-netsky.c-mm.html my glock.com  handgunreview.com glock http://roijadito.260mb.com/manuel-g.-gillispie-iii.html 9.6volt ryobi tools  sig v. glock http://roijadito.260mb.com/articles-c.a.d.-drafting-jobs.html uhs.baby  dvd recorder .iso http://roijadito.260mb.com/linder-feed.com.html compare .40 cal handguns  glock .357 pistol http://roijadito.260mb.com/t-c-.32-h-r-barrel.html www.austria.com

==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed while ascii is the printable character. Potentially, ascii might be a full unicode char if the engine supports that, and is often 0 on keyup events or keydown events where escape or modifier keys etc were used.
For mouse input the 'key' parameter contains the x movement, while the ascii parameter contains the y movement, but in DP, you may be required to use the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin instead.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>2z5wr27dwsvamv1r3rf2qufdl4ir98p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1638</id>
      <parentid>1634</parentid>
      <timestamp>2010-09-09T00:19:23Z</timestamp>
      <contributor>
        <ip>159.153.4.50</ip>
      </contributor>
      <text xml:space="preserve" bytes="12190">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed while ascii is the printable character. Potentially, ascii might be a full unicode char if the engine supports that, and is often 0 on keyup events or keydown events where escape or modifier keys etc were used.
For mouse input the 'key' parameter contains the x movement, while the ascii parameter contains the y movement, but in DP, you may be required to use the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin instead.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>3dkoa4i0yubgb2o2g6ozjdq3dgvsi7i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1645</id>
      <parentid>1638</parentid>
      <timestamp>2011-01-10T01:30:58Z</timestamp>
      <contributor>
        <ip>41.134.13.66</ip>
      </contributor>
      <comment>VDHSmi  &lt;a href=&quot;http://ydilhwzllcqc.com/&quot;&gt;ydilhwzllcqc&lt;/a&gt;, [url=http://kyeillnjzkac.com/]kyeillnjzkac[/url], [link=http://dpyiowgmxofs.com/]dpyiowgmxofs[/link], http://bcpombxxlepz.com/</comment>
      <text xml:space="preserve" bytes="11428">VDHSmi  &lt;a href=&quot;http://ydilhwzllcqc.com/&quot;&gt;ydilhwzllcqc&lt;/a&gt;, [url=http://kyeillnjzkac.com/]kyeillnjzkac[/url], [link=http://dpyiowgmxofs.com/]dpyiowgmxofs[/link], http://bcpombxxlepz.com/

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed while ascii is the printable character. Potentially, ascii might be a full unicode char if the engine supports that, and is often 0 on keyup events or keydown events where escape or modifier keys etc were used.
For mouse input the 'key' parameter contains the x movement, while the ascii parameter contains the y movement, but in DP, you may be required to use the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin instead.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>h322yzxsixb1c7oce71og7k834hyhzo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1646</id>
      <parentid>1645</parentid>
      <timestamp>2011-01-12T04:36:37Z</timestamp>
      <contributor>
        <ip>188.66.6.21</ip>
      </contributor>
      <comment>Wx6sbQ  &lt;a href=&quot;http://fpbvymhmvpuw.com/&quot;&gt;fpbvymhmvpuw&lt;/a&gt;, [url=http://wjmdkfkedeqp.com/]wjmdkfkedeqp[/url], [link=http://spsjxzpdghwh.com/]spsjxzpdghwh[/link], http://axqbpjhksbxv.com/</comment>
      <text xml:space="preserve" bytes="10853">VDHSmi  &lt;a href=&quot;http://ydilhwzllcqc.com/&quot;&gt;ydilhwzllcqc&lt;/a&gt;, [url=http://kyeillnjzkac.com/]kyeillnjzkac[/url], [link=http://dpyiowgmxofs.com/]dpyiowgmxofs[/link], http://bcpombxxlepz.com/

Wx6sbQ  &lt;a href=&quot;http://fpbvymhmvpuw.com/&quot;&gt;fpbvymhmvpuw&lt;/a&gt;, [url=http://wjmdkfkedeqp.com/]wjmdkfkedeqp[/url], [link=http://spsjxzpdghwh.com/]spsjxzpdghwh[/link], http://axqbpjhksbxv.com/

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed while ascii is the printable character. Potentially, ascii might be a full unicode char if the engine supports that, and is often 0 on keyup events or keydown events where escape or modifier keys etc were used.
For mouse input the 'key' parameter contains the x movement, while the ascii parameter contains the y movement, but in DP, you may be required to use the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin instead.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>oc3u5b585iwtwpw8u3oeoyixxab5xxo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1647</id>
      <parentid>1646</parentid>
      <timestamp>2011-01-14T06:36:39Z</timestamp>
      <contributor>
        <ip>166.111.120.63</ip>
      </contributor>
      <comment>/* Overview */</comment>
      <text xml:space="preserve" bytes="11026">VDHSmi  &lt;a href=&quot;http://ydilhwzllcqc.com/&quot;&gt;ydilhwzllcqc&lt;/a&gt;, [url=http://kyeillnjzkac.com/]kyeillnjzkac[/url], [link=http://dpyiowgmxofs.com/]dpyiowgmxofs[/link], http://bcpombxxlepz.com/

Wx6sbQ  &lt;a href=&quot;http://fpbvymhmvpuw.com/&quot;&gt;fpbvymhmvpuw&lt;/a&gt;, [url=http://wjmdkfkedeqp.com/]wjmdkfkedeqp[/url], [link=http://spsjxzpdghwh.com/]spsjxzpdghwh[/link], http://axqbpjhksbxv.com/

boomerrang http://members.multimania.co.uk/spatbadveca/henti.com-644553.html henti.com  cartoon network porno http://members.multimania.co.uk/spatbadveca/www.ben10.com-652343.html www.ben10.com  cartoonnet work porn.com http://members.multimania.co.uk/spatbadveca/cartoonnetwork-ben-10-movie-642665.html ben 10 movie 2009  ben 10 movie http://members.multimania.co.uk/spatbadveca/ cartoonnetwork  ben 10 of cartoon network http://members.multimania.co.uk/spatbadveca/w.w.w.cartoonnetwork.hq.net-642510.html cartoonnetworkhq.netl  hiv cartoon http://members.multimania.co.uk/spatbadveca/extremesex.com-642461.html extremesex.coÃ¹  old cartoonetwork.com http://members.multimania.co.uk/spatbadveca/porn-new-cartoonnetwork.com-647300.html cartoon network porno  ben ten movie http://members.multimania.co.uk/spatbadveca/www.cartoonetwork-641403.html www.cartoonetwork  www.mom extremesex.com http://members.multimania.co.uk/spatbadveca/cartoonnetwork-638612.html wwww. cartoon. com  strange cosmos http://members.multimania.co.uk/spatbadveca/ben10.com-644329.html ben10.com/

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed while ascii is the printable character. Potentially, ascii might be a full unicode char if the engine supports that, and is often 0 on keyup events or keydown events where escape or modifier keys etc were used.
For mouse input the 'key' parameter contains the x movement, while the ascii parameter contains the y movement, but in DP, you may be required to use the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin instead.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>1mlc86gt8wjlln2zvnvh6gq5q8cr7fz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1648</id>
      <parentid>1647</parentid>
      <timestamp>2011-01-14T13:15:32Z</timestamp>
      <contributor>
        <ip>189.44.168.154</ip>
      </contributor>
      <comment>/* Client Programs Entry Points */</comment>
      <text xml:space="preserve" bytes="7165">VDHSmi  &lt;a href=&quot;http://ydilhwzllcqc.com/&quot;&gt;ydilhwzllcqc&lt;/a&gt;, [url=http://kyeillnjzkac.com/]kyeillnjzkac[/url], [link=http://dpyiowgmxofs.com/]dpyiowgmxofs[/link], http://bcpombxxlepz.com/

Wx6sbQ  &lt;a href=&quot;http://fpbvymhmvpuw.com/&quot;&gt;fpbvymhmvpuw&lt;/a&gt;, [url=http://wjmdkfkedeqp.com/]wjmdkfkedeqp[/url], [link=http://spsjxzpdghwh.com/]spsjxzpdghwh[/link], http://axqbpjhksbxv.com/

boomerrang http://members.multimania.co.uk/spatbadveca/henti.com-644553.html henti.com  cartoon network porno http://members.multimania.co.uk/spatbadveca/www.ben10.com-652343.html www.ben10.com  cartoonnet work porn.com http://members.multimania.co.uk/spatbadveca/cartoonnetwork-ben-10-movie-642665.html ben 10 movie 2009  ben 10 movie http://members.multimania.co.uk/spatbadveca/ cartoonnetwork  ben 10 of cartoon network http://members.multimania.co.uk/spatbadveca/w.w.w.cartoonnetwork.hq.net-642510.html cartoonnetworkhq.netl  hiv cartoon http://members.multimania.co.uk/spatbadveca/extremesex.com-642461.html extremesex.coÃ¹  old cartoonetwork.com http://members.multimania.co.uk/spatbadveca/porn-new-cartoonnetwork.com-647300.html cartoon network porno  ben ten movie http://members.multimania.co.uk/spatbadveca/www.cartoonetwork-641403.html www.cartoonetwork  www.mom extremesex.com http://members.multimania.co.uk/spatbadveca/cartoonnetwork-638612.html wwww. cartoon. com  strange cosmos http://members.multimania.co.uk/spatbadveca/ben10.com-644329.html ben10.com/

craftsman q 4.5 http://usilguepai.atspace.com/consumer-reports-ellipticals-1117769.html free consumer reports on ellipticals  thompson consumer electronis, inc http://usilguepai.atspace.com/henry-lever-action-.22-921777.html 22 henry lever action  craftsman 4.5 hp lawnmower http://usilguepai.atspace.com/dynamark.lawnmowers-1191630.html dynamark riding lawnmowers  www.action.act.gov .au http://usilguepai.atspace.com/winchester-lever-action-.410-910709.html lever action 410  bolt action .410 shotguns http://usilguepai.atspace.com/50-action-express-874300.html 50 action express  murrey lawnmowers http://usilguepai.atspace.com/410-bolt-action-shotguns-874741.html sears roebuck 410 bolt action  sears roebuck 410 bolt action http://usilguepai.atspace.com/toro-lawnmowers.com-910011.html riding lawn mowers co clare  henry 22 lever action http://usilguepai.atspace.com/consumer-reports-.org-491078.html riding lawnmowers.com consumer reports  dynamark riding lawnmowers http://usilguepai.atspace.com/www.experion.com-consumer-771587.html experion.com/consumer  bushhog lawnmowers http://usilguepai.atspace.com/sears.com-lawnmowers-747431.html www.sears.com/lawnmowers

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>6schegzxhsvggegzculgrw4zi4lg0f7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1649</id>
      <parentid>1648</parentid>
      <timestamp>2011-01-16T18:16:30Z</timestamp>
      <contributor>
        <ip>88.202.62.1</ip>
      </contributor>
      <comment>-31</comment>
      <text xml:space="preserve" bytes="3744">VDHSmi  &lt;a href=&quot;http://ydilhwzllcqc.com/&quot;&gt;ydilhwzllcqc&lt;/a&gt;, [url=http://kyeillnjzkac.com/]kyeillnjzkac[/url], [link=http://dpyiowgmxofs.com/]dpyiowgmxofs[/link], http://bcpombxxlepz.com/

Wx6sbQ  &lt;a href=&quot;http://fpbvymhmvpuw.com/&quot;&gt;fpbvymhmvpuw&lt;/a&gt;, [url=http://wjmdkfkedeqp.com/]wjmdkfkedeqp[/url], [link=http://spsjxzpdghwh.com/]spsjxzpdghwh[/link], http://axqbpjhksbxv.com/

boomerrang http://members.multimania.co.uk/spatbadveca/henti.com-644553.html henti.com  cartoon network porno http://members.multimania.co.uk/spatbadveca/www.ben10.com-652343.html www.ben10.com  cartoonnet work porn.com http://members.multimania.co.uk/spatbadveca/cartoonnetwork-ben-10-movie-642665.html ben 10 movie 2009  ben 10 movie http://members.multimania.co.uk/spatbadveca/ cartoonnetwork  ben 10 of cartoon network http://members.multimania.co.uk/spatbadveca/w.w.w.cartoonnetwork.hq.net-642510.html cartoonnetworkhq.netl  hiv cartoon http://members.multimania.co.uk/spatbadveca/extremesex.com-642461.html extremesex.coÃ¹  old cartoonetwork.com http://members.multimania.co.uk/spatbadveca/porn-new-cartoonnetwork.com-647300.html cartoon network porno  ben ten movie http://members.multimania.co.uk/spatbadveca/www.cartoonetwork-641403.html www.cartoonetwork  www.mom extremesex.com http://members.multimania.co.uk/spatbadveca/cartoonnetwork-638612.html wwww. cartoon. com  strange cosmos http://members.multimania.co.uk/spatbadveca/ben10.com-644329.html ben10.com/

craftsman q 4.5 http://usilguepai.atspace.com/consumer-reports-ellipticals-1117769.html free consumer reports on ellipticals  thompson consumer electronis, inc http://usilguepai.atspace.com/henry-lever-action-.22-921777.html 22 henry lever action  craftsman 4.5 hp lawnmower http://usilguepai.atspace.com/dynamark.lawnmowers-1191630.html dynamark riding lawnmowers  www.action.act.gov .au http://usilguepai.atspace.com/winchester-lever-action-.410-910709.html lever action 410  bolt action .410 shotguns http://usilguepai.atspace.com/50-action-express-874300.html 50 action express  murrey lawnmowers http://usilguepai.atspace.com/410-bolt-action-shotguns-874741.html sears roebuck 410 bolt action  sears roebuck 410 bolt action http://usilguepai.atspace.com/toro-lawnmowers.com-910011.html riding lawn mowers co clare  henry 22 lever action http://usilguepai.atspace.com/consumer-reports-.org-491078.html riding lawnmowers.com consumer reports  dynamark riding lawnmowers http://usilguepai.atspace.com/www.experion.com-consumer-771587.html experion.com/consumer  bushhog lawnmowers http://usilguepai.atspace.com/sears.com-lawnmowers-747431.html www.sears.com/lawnmowers

nifty.org down http://conftremobman.webng.com/mclt-sites.net-908177.html mclt-sites.net  meetme.com http://conftremobman.webng.com/yuvutu.com-like-805783.html yuvutu on the beach  coom lourdes http://conftremobman.webng.com/proxy-https.oldysex.com-894205.html julian-landscape proxy site  yuvutu scholls http://conftremobman.webng.com/proxy-httpswww.sexocean.com-818419.html www.cuteschool.com proxy  coom porn http://conftremobman.webng.com/sites-like-ifeelmyself.com-1152277.html site similar to ifeelmyself

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>a7n1khn2w4bm41vo9diliilhwpg5wjz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1650</id>
      <parentid>1649</parentid>
      <timestamp>2011-01-17T01:57:01Z</timestamp>
      <contributor>
        <ip>208.96.213.149</ip>
      </contributor>
      <comment>/* Rendering Entities on the Client */</comment>
      <text xml:space="preserve" bytes="4256">VDHSmi  &lt;a href=&quot;http://ydilhwzllcqc.com/&quot;&gt;ydilhwzllcqc&lt;/a&gt;, [url=http://kyeillnjzkac.com/]kyeillnjzkac[/url], [link=http://dpyiowgmxofs.com/]dpyiowgmxofs[/link], http://bcpombxxlepz.com/

Wx6sbQ  &lt;a href=&quot;http://fpbvymhmvpuw.com/&quot;&gt;fpbvymhmvpuw&lt;/a&gt;, [url=http://wjmdkfkedeqp.com/]wjmdkfkedeqp[/url], [link=http://spsjxzpdghwh.com/]spsjxzpdghwh[/link], http://axqbpjhksbxv.com/

boomerrang http://members.multimania.co.uk/spatbadveca/henti.com-644553.html henti.com  cartoon network porno http://members.multimania.co.uk/spatbadveca/www.ben10.com-652343.html www.ben10.com  cartoonnet work porn.com http://members.multimania.co.uk/spatbadveca/cartoonnetwork-ben-10-movie-642665.html ben 10 movie 2009  ben 10 movie http://members.multimania.co.uk/spatbadveca/ cartoonnetwork  ben 10 of cartoon network http://members.multimania.co.uk/spatbadveca/w.w.w.cartoonnetwork.hq.net-642510.html cartoonnetworkhq.netl  hiv cartoon http://members.multimania.co.uk/spatbadveca/extremesex.com-642461.html extremesex.coÃ¹  old cartoonetwork.com http://members.multimania.co.uk/spatbadveca/porn-new-cartoonnetwork.com-647300.html cartoon network porno  ben ten movie http://members.multimania.co.uk/spatbadveca/www.cartoonetwork-641403.html www.cartoonetwork  www.mom extremesex.com http://members.multimania.co.uk/spatbadveca/cartoonnetwork-638612.html wwww. cartoon. com  strange cosmos http://members.multimania.co.uk/spatbadveca/ben10.com-644329.html ben10.com/

craftsman q 4.5 http://usilguepai.atspace.com/consumer-reports-ellipticals-1117769.html free consumer reports on ellipticals  thompson consumer electronis, inc http://usilguepai.atspace.com/henry-lever-action-.22-921777.html 22 henry lever action  craftsman 4.5 hp lawnmower http://usilguepai.atspace.com/dynamark.lawnmowers-1191630.html dynamark riding lawnmowers  www.action.act.gov .au http://usilguepai.atspace.com/winchester-lever-action-.410-910709.html lever action 410  bolt action .410 shotguns http://usilguepai.atspace.com/50-action-express-874300.html 50 action express  murrey lawnmowers http://usilguepai.atspace.com/410-bolt-action-shotguns-874741.html sears roebuck 410 bolt action  sears roebuck 410 bolt action http://usilguepai.atspace.com/toro-lawnmowers.com-910011.html riding lawn mowers co clare  henry 22 lever action http://usilguepai.atspace.com/consumer-reports-.org-491078.html riding lawnmowers.com consumer reports  dynamark riding lawnmowers http://usilguepai.atspace.com/www.experion.com-consumer-771587.html experion.com/consumer  bushhog lawnmowers http://usilguepai.atspace.com/sears.com-lawnmowers-747431.html www.sears.com/lawnmowers

nifty.org down http://conftremobman.webng.com/mclt-sites.net-908177.html mclt-sites.net  meetme.com http://conftremobman.webng.com/yuvutu.com-like-805783.html yuvutu on the beach  coom lourdes http://conftremobman.webng.com/proxy-https.oldysex.com-894205.html julian-landscape proxy site  yuvutu scholls http://conftremobman.webng.com/proxy-httpswww.sexocean.com-818419.html www.cuteschool.com proxy  coom porn http://conftremobman.webng.com/sites-like-ifeelmyself.com-1152277.html site similar to ifeelmyself

my exgirlfrind http://rerrenstem.hdfree.com.br/free-downloadable-greek-fonts-438308.html free greek fonts downloadable  dosapp http://rerrenstem.hdfree.com.br/mini.org-torrent-site-438014.html miniorg torrent  dosapp fon http://rerrenstem.hdfree.com.br/96-dpi-fonts-dosapp.fon-446747.html dosapp need for dpi  archstyl http://rerrenstem.hdfree.com.br/da-fonts.com-438772.html da font  dosapp http://rerrenstem.hdfree.com.br/ed.helper.com-661060.html ed helper.com  archstyl ttf http://rerrenstem.hdfree.com.br/archstyl.shx-450765.html archstyl.shx download  &quot;archstyl&quot; ttf http://rerrenstem.hdfree.com.br/fonts-archstyl.shx-ttf-422519.html utf shx  free greek+font+download site:angelfire.com http://rerrenstem.hdfree.com.br/www.1001-tattoos.com-615497.html 1001 tattoos  da fonts.com http://rerrenstem.hdfree.com.br/my-exgirlfriend.com-english-412443.html my +exgirlfriend  dafonts free http://rerrenstem.hdfree.com.br/wwwgoogle.net-442717.html wwwgoogle.net

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>k7wh4k0c84seke10g9kh0mw5t9ui9yu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1651</id>
      <parentid>1650</parentid>
      <timestamp>2011-01-19T10:10:23Z</timestamp>
      <contributor>
        <ip>203.106.122.60</ip>
      </contributor>
      <comment>/* Rendering 2D HUD on the Client */</comment>
      <text xml:space="preserve" bytes="5118">VDHSmi  &lt;a href=&quot;http://ydilhwzllcqc.com/&quot;&gt;ydilhwzllcqc&lt;/a&gt;, [url=http://kyeillnjzkac.com/]kyeillnjzkac[/url], [link=http://dpyiowgmxofs.com/]dpyiowgmxofs[/link], http://bcpombxxlepz.com/

Wx6sbQ  &lt;a href=&quot;http://fpbvymhmvpuw.com/&quot;&gt;fpbvymhmvpuw&lt;/a&gt;, [url=http://wjmdkfkedeqp.com/]wjmdkfkedeqp[/url], [link=http://spsjxzpdghwh.com/]spsjxzpdghwh[/link], http://axqbpjhksbxv.com/

boomerrang http://members.multimania.co.uk/spatbadveca/henti.com-644553.html henti.com  cartoon network porno http://members.multimania.co.uk/spatbadveca/www.ben10.com-652343.html www.ben10.com  cartoonnet work porn.com http://members.multimania.co.uk/spatbadveca/cartoonnetwork-ben-10-movie-642665.html ben 10 movie 2009  ben 10 movie http://members.multimania.co.uk/spatbadveca/ cartoonnetwork  ben 10 of cartoon network http://members.multimania.co.uk/spatbadveca/w.w.w.cartoonnetwork.hq.net-642510.html cartoonnetworkhq.netl  hiv cartoon http://members.multimania.co.uk/spatbadveca/extremesex.com-642461.html extremesex.coÃ¹  old cartoonetwork.com http://members.multimania.co.uk/spatbadveca/porn-new-cartoonnetwork.com-647300.html cartoon network porno  ben ten movie http://members.multimania.co.uk/spatbadveca/www.cartoonetwork-641403.html www.cartoonetwork  www.mom extremesex.com http://members.multimania.co.uk/spatbadveca/cartoonnetwork-638612.html wwww. cartoon. com  strange cosmos http://members.multimania.co.uk/spatbadveca/ben10.com-644329.html ben10.com/

craftsman q 4.5 http://usilguepai.atspace.com/consumer-reports-ellipticals-1117769.html free consumer reports on ellipticals  thompson consumer electronis, inc http://usilguepai.atspace.com/henry-lever-action-.22-921777.html 22 henry lever action  craftsman 4.5 hp lawnmower http://usilguepai.atspace.com/dynamark.lawnmowers-1191630.html dynamark riding lawnmowers  www.action.act.gov .au http://usilguepai.atspace.com/winchester-lever-action-.410-910709.html lever action 410  bolt action .410 shotguns http://usilguepai.atspace.com/50-action-express-874300.html 50 action express  murrey lawnmowers http://usilguepai.atspace.com/410-bolt-action-shotguns-874741.html sears roebuck 410 bolt action  sears roebuck 410 bolt action http://usilguepai.atspace.com/toro-lawnmowers.com-910011.html riding lawn mowers co clare  henry 22 lever action http://usilguepai.atspace.com/consumer-reports-.org-491078.html riding lawnmowers.com consumer reports  dynamark riding lawnmowers http://usilguepai.atspace.com/www.experion.com-consumer-771587.html experion.com/consumer  bushhog lawnmowers http://usilguepai.atspace.com/sears.com-lawnmowers-747431.html www.sears.com/lawnmowers

nifty.org down http://conftremobman.webng.com/mclt-sites.net-908177.html mclt-sites.net  meetme.com http://conftremobman.webng.com/yuvutu.com-like-805783.html yuvutu on the beach  coom lourdes http://conftremobman.webng.com/proxy-https.oldysex.com-894205.html julian-landscape proxy site  yuvutu scholls http://conftremobman.webng.com/proxy-httpswww.sexocean.com-818419.html www.cuteschool.com proxy  coom porn http://conftremobman.webng.com/sites-like-ifeelmyself.com-1152277.html site similar to ifeelmyself

my exgirlfrind http://rerrenstem.hdfree.com.br/free-downloadable-greek-fonts-438308.html free greek fonts downloadable  dosapp http://rerrenstem.hdfree.com.br/mini.org-torrent-site-438014.html miniorg torrent  dosapp fon http://rerrenstem.hdfree.com.br/96-dpi-fonts-dosapp.fon-446747.html dosapp need for dpi  archstyl http://rerrenstem.hdfree.com.br/da-fonts.com-438772.html da font  dosapp http://rerrenstem.hdfree.com.br/ed.helper.com-661060.html ed helper.com  archstyl ttf http://rerrenstem.hdfree.com.br/archstyl.shx-450765.html archstyl.shx download  &quot;archstyl&quot; ttf http://rerrenstem.hdfree.com.br/fonts-archstyl.shx-ttf-422519.html utf shx  free greek+font+download site:angelfire.com http://rerrenstem.hdfree.com.br/www.1001-tattoos.com-615497.html 1001 tattoos  da fonts.com http://rerrenstem.hdfree.com.br/my-exgirlfriend.com-english-412443.html my +exgirlfriend  dafonts free http://rerrenstem.hdfree.com.br/wwwgoogle.net-442717.html wwwgoogle.net

bild a bear  work shop .com http://textsacharway.atspace.com/search-www.pbskids.org-534414.html www.pbs kids .com .au  pbs kids dragon tales http://textsacharway.atspace.com/pbskids.ord-537089.html pbskids.ord  www.sesameworkshop.org http://textsacharway.atspace.com/www.pbskids.ord-537442.html search pbskids.ord  sartan leather http://textsacharway.atspace.com/www-pbskids.com-533827.html wwwpbskidscom  pbskids.rog http://textsacharway.atspace.com/sesamestreet-games.com-537395.html search sesamestreet.com  pbskids.c om http://textsacharway.atspace.com/pbskids.-org-542452.html pbskids.ord  pbskids.orrrg http://textsacharway.atspace.com/640-pbskids.com-545095.html pbskids.or  www.pbs kids .com .au http://textsacharway.atspace.com/wwww.pbskids.org-541276.html wwww.pbskids.org  pds.kids org. http://textsacharway.atspace.com/pbskids.go.com-534941.html the electric company  pbskids.com  wwww.pbskids.com http://textsacharway.atspace.com/sesameworkshop.org-sesamestreet-sitemap-534817.html sesame street workshop org</text>
      <sha1>ncbz9zm4myso1gi5u0nhonpqi0f3gi8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1652</id>
      <parentid>1651</parentid>
      <timestamp>2011-01-24T07:57:10Z</timestamp>
      <contributor>
        <ip>41.133.142.97</ip>
      </contributor>
      <comment>-921755</comment>
      <text xml:space="preserve" bytes="1177">www.morganstanley.com/online/enroll http://belpamontsupp.prv.pl/www.dl.ed.gov-enroll-719946.html www.dl.ed.gov.enroll  www.morganstanley.com/online/enroll http://belpamontsupp.prv.pl/webmail.servicemagic.com-429758.html webmail.servicemagic.comâ  customerservice@mp.servicemagic.com http://belpamontsupp.prv.pl/webmail-kzlnet.com-447588.html kzlnet mail  www.morganstanley,com/online/enroll http://belpamontsupp.prv.pl/dr.-phil-show-595098.html drphil c0m  customerservice@mp.servicemagic.com http://belpamontsupp.prv.pl/mix-96.1-san-antonio-427535.html 96.1 mix san antonio  seattle.servicemagic.com http://belpamontsupp.prv.pl/mp.servicemagic.com-564293.html customerservice@mp.servicemagic.com  seattle.servicemagic.com http://belpamontsupp.prv.pl/fixitfast.service.com-431898.html fixitfast servicemagic  webmail.servicemagic.comâ http://belpamontsupp.prv.pl/www.people.com-customerservice-523054.html +www.people.com/customerservice  www.philly.servicemagic.com http://belpamontsupp.prv.pl/mibank.com-enroll-728419.html mibank.com/enroll  www.consumptionjunction.con http://belpamontsupp.prv.pl/onlingo.com-customerservice-449135.html onlingo.com customerservice</text>
      <sha1>7bb68uk1xkja2lkcff0gd3bem6fykea</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1653</id>
      <parentid>1652</parentid>
      <timestamp>2011-01-24T14:15:14Z</timestamp>
      <contributor>
        <ip>200.7.199.11</ip>
      </contributor>
      <comment>qLjmjdok</comment>
      <text xml:space="preserve" bytes="1182">.hack gu soundtrack http://tihuntilan.pytalhost.com/dr.dolittle-3-soundtrack-lyrics-559156.html lyrics to dr dolittle 3 songs  ms. doubtfire soundtrack http://tihuntilan.pytalhost.com/mrs.-doubtfire-soundtrack-547040.html ms. doubtfire soundtrack  ffshrine soundtracks http://tihuntilan.pytalhost.com/gffshrine.-soundtracks-617709.html gffshrine  daywind soundtracks/downloads http://tihuntilan.pytalhost.com/i-am-david-soundtracks-638946.html i am david soundtrack  gh ffshrine soundtracks http://tihuntilan.pytalhost.com/dr.-doolittle-2-soundtrack-600374.html dr.doolittle 2 soundtrack  gh ffshrine soundtracks http://tihuntilan.pytalhost.com/christian-world-inc.-soundtracks-530351.html christian inc soundtracks  christian world inc soundtracks http://tihuntilan.pytalhost.com/gh.ffshrine.org-sountracks-666738.html gh ffshrine org  soundtrack dr zhivago http://tihuntilan.pytalhost.com/mrs.-congeniality-soundtrack-540146.html mrs. congeniality soundtrack  will there be a +moive for e r http://tihuntilan.pytalhost.com/b.-monkey-soundtrack-584021.html b monkey movie soundtrack  dr. doolittle soundtracks http://tihuntilan.pytalhost.com/gh.ffshrine-613632.html gh.ffshrine.org</text>
      <sha1>293ppfs7touhkspdrx5yujvmx2ac5g2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1654</id>
      <parentid>1653</parentid>
      <timestamp>2011-01-25T06:27:34Z</timestamp>
      <contributor>
        <ip>203.186.154.81</ip>
      </contributor>
      <comment>JaDJgwAtXkPBA</comment>
      <text xml:space="preserve" bytes="983">habbo scripting http://dilfunccarli.atspace.com/free-habbo-coin-cheats-874207.html habbo coin cheats  www.chase.com.aarp. http://dilfunccarli.atspace.com/habbo-furni-gen-7.8-656867.html habbo gen  www chase.com bp http://dilfunccarli.atspace.com/chase.c0m-872429.html chase.c0m  walkthrough for magneto syndrome http://dilfunccarli.atspace.com/habbo.ca-rare-values-810093.html habbo extra rare  tk habbo hack http://dilfunccarli.atspace.com/habbo-account-stealer-979254.html habbo au password stealer  habbo device hack http://dilfunccarli.atspace.com/cheats-for-old-habbo-1064215.html old habbo.be  habbo au password stealer http://dilfunccarli.atspace.com/habbo-canada-furni-hack-953531.html canadian habbo  www.chase.com/bp http://dilfunccarli.atspace.com/habbo-us-1049008.html habbo us  brazil habbo http://dilfunccarli.atspace.com/habbo-client-1269932.html habbo client  how to get habbo coins in england http://dilfunccarli.atspace.com/chase.com-bp-718728.html www.chase,com/bp</text>
      <sha1>gesn27uwv3zo1yrkxykjucnbjwc3nbm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1655</id>
      <parentid>1654</parentid>
      <timestamp>2011-01-25T11:37:16Z</timestamp>
      <contributor>
        <ip>218.92.8.165</ip>
      </contributor>
      <comment>-656859</comment>
      <text xml:space="preserve" bytes="976">vouyeweb http://ruiwecklosap.webng.com/remove-myway.mywebsearch-574294.html remove myway.mywebsearch  vouyerweb.com http://ruiwecklosap.webng.com/free-vouyerweb.com-453994.html the free vouyrweb  mywebsearch removal tool http://ruiwecklosap.webng.com/free-myway.mywebsearch-removal-447051.html mywebsearch.com removal  myway.mywebsearch removal http://ruiwecklosap.webng.com/innocenthigh.copm-419661.html copm floor  vouyeweb http://ruiwecklosap.webng.com/what-is-myway.mywebsearch-419981.html what is myway.mywebsearch?  web toolbar.win32.whenu.a http://ruiwecklosap.webng.com/edits.mywebsearch.com-565069.html edits.mywebsearch  what is myway.mywebsearch? http://ruiwecklosap.webng.com/www-mywebsearch.com-421074.html www.mywebsearch.com  myway mywebsearch removal tool http://ruiwecklosap.webng.com/winvnc.exe-servicehelper-442663.html winvnc.exe servicehelper  www.mywebsearch http://ruiwecklosap.webng.com/myway.mywebsearch-keeps-coming-back-562654.html myway.mywebsearch</text>
      <sha1>dj95lxxe2sqwlknvnkix032z2uk6n52</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1656</id>
      <parentid>1655</parentid>
      <timestamp>2011-01-27T13:05:05Z</timestamp>
      <contributor>
        <ip>60.171.37.134</ip>
      </contributor>
      <comment>UMidwwmtNP</comment>
      <text xml:space="preserve" bytes="925">imgb.rentalcgi.com/bbs http://erovgee.hdfree.com.br/jooxnet.com-807309.html jooxnet  child supermodels.com http://erovgee.hdfree.com.br/free-porno.movie.bg-798643.html free porno movie. com.  free porn movies downloads .com http://erovgee.hdfree.com.br/free-porn-movie.com-793503.html movie porn.com  joox net http://erovgee.hdfree.com.br/www.jooxnet.com-949245.html jooxnet  free porn-movie.com http://erovgee.hdfree.com.br/joox.net-stage-6-812344.html joox stage6  free porno movie.com http://erovgee.hdfree.com.br/rentalcgi.imgb.child-530658.html imgb rentalcgi bbs  free  porno movie http://erovgee.hdfree.com.br/child-lover.mpg-536849.html childlover  free porno movie.com http://erovgee.hdfree.com.br/joox.nt-638831.html joox net stage6  aurthers .com http://erovgee.hdfree.com.br/joox.net-ilegal-tv-790099.html joox net  freepornmovie. com http://erovgee.hdfree.com.br/amc-movie-theathers-az-877256.html amc +theathers</text>
      <sha1>1b9sjyigzkyl1e76kgl9nhmex26ags0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1657</id>
      <parentid>1656</parentid>
      <timestamp>2011-01-27T23:55:18Z</timestamp>
      <contributor>
        <ip>144.140.52.52</ip>
      </contributor>
      <comment>-812338</comment>
      <text xml:space="preserve" bytes="884">deep throtes.com http://nebocygni.web.fc2.com/www.wamu.om-437905.html www,wamu.om  wamu.c0m http://nebocygni.web.fc2.com/free-vouyerweb.com-444531.html the free vouyerweb  homepage wamu.net http://nebocygni.web.fc2.com/bankof-america.com-personal-438006.html bankof america.com  wwww.wellsfargo,com/activate http://nebocygni.web.fc2.com/google.comg-440631.html www.google.comg  wamu.co m banks http://nebocygni.web.fc2.com/wamu.con-440202.html ww.wamu.com  clearing house for wamu http://nebocygni.web.fc2.com/wamu-cards.cm-445556.html wamu.cm activate  wamu.comm http://nebocygni.web.fc2.com/home.wamu.net-437824.html http://home.wamu.net  psea.org activate http://nebocygni.web.fc2.com/activate-wamu.com-441569.html wamu activate  www.wamu.com/home. http://nebocygni.web.fc2.com/wamu-co-445673.html wamu.co m banks  wamu.ocm http://nebocygni.web.fc2.com/wamucom-437608.html wamu.con</text>
      <sha1>s6wv52ryu67roc6fp248cfeudszl8o0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1658</id>
      <parentid>1657</parentid>
      <timestamp>2011-01-30T19:26:07Z</timestamp>
      <contributor>
        <ip>118.70.139.233</ip>
      </contributor>
      <comment>lnkZikZh</comment>
      <text xml:space="preserve" bytes="1033">www.wellsfargo.com/easypay http://stabverbpillrust.tripod.com/wells-fargo.com-easypay-832133.html well fargo easypay  www.chicagotribune.com/easypay http://stabverbpillrust.tripod.com/scholastic.com-cptoolkit-859776.html www.scholastic.com/cptoolkit  adp easypay net http://stabverbpillrust.tripod.com/t-mobile.com-easypay-846585.html .t-mobile.com/easypay  adp easypay net http://stabverbpillrust.tripod.com/100.5-the-zone-959517.html 100.5 the zone  www.scholastic.com/girlslife http://stabverbpillrust.tripod.com/auto-zone-.com-941260.html search auto zone.com  scholastic cptoolkit http://stabverbpillrust.tripod.com/easypay-farmersinsurance.com-818786.html easypay +farmersinsurance  wellsfargo easypay http://stabverbpillrust.tripod.com/wellsfargo.com-easypay-660593.html www.wellsfargo.com.easypay  downloads2go http://stabverbpillrust.tripod.com/www-scholastic.com-abbyhayes-1132564.html www.scholastic.com/abbyhayes  100.5 the zone http://stabverbpillrust.tripod.com/scholastic.com-homeclubs-755829.html scholastic homeclubs</text>
      <sha1>m4peid8ymf8cho0sxa16lwmoedzxu1n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1659</id>
      <parentid>1658</parentid>
      <timestamp>2011-02-01T03:35:49Z</timestamp>
      <contributor>
        <ip>58.49.91.194</ip>
      </contributor>
      <comment>DgADTomc</comment>
      <text xml:space="preserve" bytes="1216">www.help@bingomega http://members.multimania.co.uk/gayveterans/rickand-bubba.com-446831.html www.rickand bubba.com  big lots ft myers fl http://members.multimania.co.uk/gayveterans/webmail.jumo.com-436620.html jumo web mail  download ialmnt5 sys windows driver http://members.multimania.co.uk/gayveterans/alt.binaries.pictures.nudism.youth-451349.html nudism in knoxville  bigd&amp;bubba http://members.multimania.co.uk/gayveterans/bubba-raw.com-587261.html www.bigd&amp;bubba.com  bubbaraw http://members.multimania.co.uk/gayveterans/spca561.sys-file-download-580422.html spca561.sys download  bubba raw.com http://members.multimania.co.uk/gayveterans/tool-central-jonesboro-ar-653341.html tool central jonesboro ar  alt.binaries.pictures.erotica.mclt http://members.multimania.co.uk/gayveterans/ nickles  jonesboro sport show http://members.multimania.co.uk/gayveterans/ialmnt5.sys-graphics-driver-492216.html ialmnt5.sys driver download free  internet explorer7.0 http://members.multimania.co.uk/gayveterans/alt.binaries.pictures.erotica.mclt-456473.html alt.binaries.pictures.erotica.mclt  www.rickand bubba http://members.multimania.co.uk/gayveterans/big-lots-store-ft.myers-fl-466932.html big lots store/ft. myers, fl.</text>
      <sha1>ccceai6h8muse86m586hz59c4vhqx2d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1660</id>
      <parentid>1659</parentid>
      <timestamp>2011-02-02T12:45:29Z</timestamp>
      <contributor>
        <ip>144.140.52.52</ip>
      </contributor>
      <comment>aUVVhPFZWpRoRA</comment>
      <text xml:space="preserve" bytes="1014">frank vasfailo http://anistetipi.an.funpic.de/usnews.com-accountstatus-1133421.html usnews.com/accountstatus  gp4 .torrent http://anistetipi.an.funpic.de/www.usnews.com-accountstatus-1119840.html www.usnews.com/accountstatus  globe dragon technology http://anistetipi.an.funpic.de/getporn.com-1048405.html getporn  www.weaterchanel http://anistetipi.an.funpic.de/lastminute.com-promo-code-1143519.html &quot;lastminute.com promo code&quot;  gp4 1994 torrent http://anistetipi.an.funpic.de/www.imagefap.com-1149628.html imagefap poppy  www.kyloc.com http://anistetipi.an.funpic.de/sex-slave-video.com-1123974.html www.sexslavevideo.com  www.sexslavevideo.com http://anistetipi.an.funpic.de/kyloc.us.army.mil.com-1132158.html kyloc.us.army.mil  learn.healthstream.com http://anistetipi.an.funpic.de/ lastminute  monthly passes ladner leisure centre http://anistetipi.an.funpic.de/yuvutu.com-1020668.html yuvutu 2010  gary sibcy http://anistetipi.an.funpic.de/lwww.learn.healthstream.com-sph-1060936.html learn.healthstream.com</text>
      <sha1>2x95pls393ui0cjr5sps659a3bv6s3u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1661</id>
      <parentid>1660</parentid>
      <timestamp>2011-02-03T02:26:25Z</timestamp>
      <contributor>
        <ip>212.38.100.66</ip>
      </contributor>
      <comment>SPDKSBsdpGYX</comment>
      <text xml:space="preserve" bytes="1043">parentalvideo com http://consdemvesupp.atspace.com/nudes10.hegre-art-409031.html hegre.art.com  http://www.sexy-archives.com/ http://consdemvesupp.atspace.com/hegre-archives.com-406939.html www.hegre-archives.com  archives.gov/research-room/vetrecs. http://consdemvesupp.atspace.com/childsupermodels.com-archives-407546.html http://www.childsupermodels.com  kristen incest archives http://consdemvesupp.atspace.com/incest-kristen-archives-asstr-420174.html kristen's archives/incest  hegre.art.com http://consdemvesupp.atspace.com/hotmail.c0om-420420.html www.hotmail.c0om  pargnatvideo http://consdemvesupp.atspace.com/ arts  www.hegre-archives.com http://consdemvesupp.atspace.com/www.hegre-arts.com-449862.html hegre arts  www.gay-archives.com http://consdemvesupp.atspace.com/www.childsupermodel.com-archives-403808.html www.childsupermodel.com  hegre art .com http://consdemvesupp.atspace.com/hegre.art.com-418718.html hegre.art  childsupermodel.com http://consdemvesupp.atspace.com/nudes.hegre-art.com-420621.html www.nudes.hegre.art.com</text>
      <sha1>jm6lxh57nwg35iu6hwz698xnn1q8lg4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1662</id>
      <parentid>1661</parentid>
      <timestamp>2011-02-10T18:27:48Z</timestamp>
      <contributor>
        <ip>80.23.104.218</ip>
      </contributor>
      <comment>uapzQWVGfdjkO</comment>
      <text xml:space="preserve" bytes="1101">hotmail +comsign http://members.multimania.co.uk/amabithid/hotmail.comsign-in-686460.html hotmail +comsign  hotmail.com/signin http://members.multimania.co.uk/amabithid/hotmail.com-signin-841218.html https://www.hotmail.com/signin  www.hotmail.com sign http://members.multimania.co.uk/amabithid/www.yahoocom-1290672.html +www.yahoocom  hotmail.com/sign in http://members.multimania.co.uk/amabithid/excite.coml-1193966.html nudes.coml  www.hotmail.com sign in http://members.multimania.co.uk/amabithid/207-hotmail.com-sign-in-690132.html hotmail.com sign in  mcnudes http://members.multimania.co.uk/amabithid/hotmail.com-sing-in-818934.html sing in on hotmail  ;hotrmail.com sign in http://members.multimania.co.uk/amabithid/www.m-c-nudes.com-1200305.html m.c.nudes&quot;com  hotmail.com/sign in http://members.multimania.co.uk/amabithid/hotmail.comsignin-761867.html hgotmail.comsignin  sing in on hotmail http://members.multimania.co.uk/amabithid/hotmail.com-sign-802343.html hotmail.com sign  hotmail +comsign http://members.multimania.co.uk/amabithid/hotmail.com-sign-in-806023.html www.hotmail.com sign</text>
      <sha1>gi13cvsp7bpuimedhuyndcd5ku58gcb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1663</id>
      <parentid>1662</parentid>
      <timestamp>2011-02-10T19:55:38Z</timestamp>
      <contributor>
        <ip>153.19.91.2</ip>
      </contributor>
      <comment>vZmWnMwOoWjXWPHpjD</comment>
      <text xml:space="preserve" bytes="1333">exploitedteens.com adrian http://members.multimania.co.uk/teddusoge/password-for-little-summer.com-796200.html little summer free password  sexandsubmission.com passwords login http://members.multimania.co.uk/teddusoge/pictureview.com-password-794097.html free passwords pictureview.com  pattycakeonline.com pass http://members.multimania.co.uk/teddusoge/hacked-password-for-bruteens.com-784037.html ultimate surrender passwords hack  karendreams password http://members.multimania.co.uk/teddusoge/www2.pictureview-password-790732.html find hacked pictureview password  mastasia.com passwords http://members.multimania.co.uk/teddusoge/pantypoop.com-password-787652.html panty-poop  free pass to ultimate surrender http://members.multimania.co.uk/teddusoge/alsscan.com-username-and-password-783027.html alsscan  public invasion pass http://members.multimania.co.uk/teddusoge/fmcdealer.dealerconnection.com-796366.html fmcdealer  shaylaren.com login http://members.multimania.co.uk/teddusoge/www.apdealers.dealerconnection.com.au-790109.html bdsm esse suspension  videosz username and pass http://members.multimania.co.uk/teddusoge/ishotmyself.com-password-794780.html password for ishotmyself  ultimatecelebs.com http://members.multimania.co.uk/teddusoge/www.lizvicious.com-username-password-796419.html lizvicious.com hacked password</text>
      <sha1>8vevdwhb1yhbfu5f7bnl6hb9b5j5ela</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1664</id>
      <parentid>1663</parentid>
      <timestamp>2011-02-12T15:14:37Z</timestamp>
      <contributor>
        <ip>220.167.224.29</ip>
      </contributor>
      <comment>qJKRArRdRuDzS</comment>
      <text xml:space="preserve" bytes="1069">newsfilter.rog http://members.multimania.co.uk/melemader/newsfilter.net-566052.html newsfilter .net  rain bird.com http://members.multimania.co.uk/melemader/aspen-rain.com-579787.html aspen rain sex  ww.lord&amp;taylor/com http://members.multimania.co.uk/melemader/www.newsfilter.org-videos-567669.html newsfilter video org  newsfilter og http://members.multimania.co.uk/melemader/www-newsfilter.org-590270.html newsfilter og  newsfilter org http://members.multimania.co.uk/melemader/videos-newsfilter.org-589960.html newsfilter .org videos  newsfilter net http://members.multimania.co.uk/melemader/newsfilter.org-videos-575486.html newsfilter org  newsfilterorg http://members.multimania.co.uk/melemader/newsfilter.-org-531619.html video newsfilter  show on newsfilter.org http://members.multimania.co.uk/melemader/567-newsfilter.org-569060.html newsfilter  show on newsfilter http://members.multimania.co.uk/melemader/newsfilter.org-sunrise-adams-869171.html www.newsfilter  newsfilter http://members.multimania.co.uk/melemader/www.newsfilterorg-700741.html newsfilterorg</text>
      <sha1>2dcuuv3pkixob2ne2xomn9y65rhu6ya</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1665</id>
      <parentid>1664</parentid>
      <timestamp>2011-02-16T03:04:30Z</timestamp>
      <contributor>
        <ip>211.103.156.211</ip>
      </contributor>
      <comment>PeKQQYDypmaXg</comment>
      <text xml:space="preserve" bytes="1110">rcbhsc.wvu.edu/email http://clustormevab.atspace.com/check-email-sbcglobal.net-995907.html sbcglobal.net check email  sky.com.email login http://clustormevab.atspace.com/directtv.com-email-899944.html directtv.com/email  partners org/email http://clustormevab.atspace.com/partners.org-email-963867.html email@partners.org  where is my sbcglobal.net email http://clustormevab.atspace.com/email-yahoo-.com-1061403.html email@yahoo.com  kraftfoods.com/email http://clustormevab.atspace.com/1.4-email-extractor-970741.html email extractor lite 1.4 &quot;email extractor 1.4&quot;  partners+org+email http://clustormevab.atspace.com/bellsouthweb.email-1065477.html bellsouthweb email  my mail hughes net http://clustormevab.atspace.com/verizon.net-email-addresses-1002790.html verizon.net email addresses  ntelos email login site http://clustormevab.atspace.com/msn.-free-email-1048982.html free email msn  ntelos email login site http://clustormevab.atspace.com/free-email-yahoo-.com-994911.html free email at yahoo .com  tampabay.rr email search http://clustormevab.atspace.com/sky.com-email-994921.html sky.com.email login</text>
      <sha1>2ibk896zdz6efcwsl9jgr11nmr2wf4v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1666</id>
      <parentid>1665</parentid>
      <timestamp>2011-02-16T04:04:31Z</timestamp>
      <contributor>
        <ip>200.251.58.190</ip>
      </contributor>
      <comment>vZPbWHOLPsiYOOXBy</comment>
      <text xml:space="preserve" bytes="1044">versa gate install viedo http://moripostlist.atspace.com/www.nibco-gate-valves-851810.html nibco gate valve  gate.com mysql http://moripostlist.atspace.com/jana-jordan-alsscan.com-839154.html alsscan indeed  versa-gate mitsubishi http://moripostlist.atspace.com/anointing-gate-church.com-849241.html ocps equipment darlington  ww.sucurity gate.com http://moripostlist.atspace.com/www.wrought-iron-gate.com-850272.html www.irongate.com  mail.gate.com http://moripostlist.atspace.com/gate-city-motor-co-894263.html gate city hand-held programmer  mysql gate http://moripostlist.atspace.com/www.celeb.gate.cc-de-843075.html www.celeb.gate.cc  nibco gate valve http://moripostlist.atspace.com/erena-yumemoto-.jp-848326.html erena yumemoto galleries  gate2wire.net http://moripostlist.atspace.com/www.versa-gate.com-899534.html versagate  webmail gate.com http://moripostlist.atspace.com/globe.gate-check-valve-798791.html gate post lights globe  driveway gate lights http://moripostlist.atspace.com/www-torture-gate.com-841798.html webmail.gate.com</text>
      <sha1>mqgpt5837v1wuigsynefq000nzvzh61</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1667</id>
      <parentid>1666</parentid>
      <timestamp>2011-02-16T08:07:53Z</timestamp>
      <contributor>
        <ip>78.38.151.6</ip>
      </contributor>
      <comment>KxNKwTaOZBUYM</comment>
      <text xml:space="preserve" bytes="1014">save@mycostcophotos.com http://clicleygedke.atspace.com/mr.-sandman-sheet-music-932192.html mister sandman score  spca561 http://clicleygedke.atspace.com/subnow.net-substitute-teachers-905322.html subnow.net  ww.long fucks http://clicleygedke.atspace.com/dark-brothers.com-933556.html les dark brothers  freeflings/69 http://clicleygedke.atspace.com/www.lowesvisacreditcard.com-829687.html lowesvisacreditcard  robert q.ca http://clicleygedke.atspace.com/crisqo-and-bong-song.mp3-819017.html &quot;move site&quot; song  &quot;mary m. massey&quot; http://clicleygedke.atspace.com/graf-brothers-flooring-inc-1219454.html awfgrafbros.com  awfgrafbros.com http://clicleygedke.atspace.com/u.s.m.c.-stores-937386.html usmc cobra cologne  subnow.net http://clicleygedke.atspace.com/sonny-fucks-mom.incest-922292.html teksonny  aceboard anything goes http://clicleygedke.atspace.com/younggirlsfeet.aceboard.com-822998.html aceboard+evil  freeflings.com black http://clicleygedke.atspace.com/free-pic-series-xxx.com-927684.html nick series xxx</text>
      <sha1>01pqbd0dhhv9c6mei9qo0vczxgba73q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1668</id>
      <parentid>1667</parentid>
      <timestamp>2011-02-16T13:23:29Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>overwriting the spam again, hope i took the right base</comment>
      <text xml:space="preserve" bytes="12190">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed while ascii is the printable character. Potentially, ascii might be a full unicode char if the engine supports that, and is often 0 on keyup events or keydown events where escape or modifier keys etc were used.
For mouse input the 'key' parameter contains the x movement, while the ascii parameter contains the y movement, but in DP, you may be required to use the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin instead.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>3dkoa4i0yubgb2o2g6ozjdq3dgvsi7i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1669</id>
      <parentid>1668</parentid>
      <timestamp>2011-02-16T13:24:04Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[EXT CSQC]]&quot;: protecting this site because spammers went crazy [edit=autoconfirmed:move=autoconfirmed]</comment>
      <text xml:space="preserve" bytes="12190">==Introduction==
QuakeC code is normally run only on the server as a progs.dat file. Engines which support the EXT_CSQC extension run QuakeC code on the client. This enables the mod to control certain extra features:

*Customize the status bar.
*Adjust models and draw extra things on models (even with only one entity on the server).
*Implement prediction.
*Override the FOV.
*Launch sounds locally.
*Implement what would otherwise require another QSG extension.


By standard, CSQC should be compiled into and loaded from a csprogs.dat. Engines can provide cvars to specify a different name but that isn't part of this extension.


EXT_CSQC is intended to replace as much of the fixed function engine code as possible, without requiring knowledge of the engine code mechanisms and in a way that is consistent with the existing style of QuakeC.


The extension defines the whole csprogs, as well as adding some builtins and constants on the server.

==Header Code==
On the server:
&lt;pre&gt;
// EXT_CSQC
// AddStat
void(float index, float type, ...) AddStat = #232; // third parameter is an entity field
float AS_STRING          = 1;
float AS_FLOAT_TRUNCATED = 2;
float AS_FLOAT           = 8;
// Entity Sending
.float(entity viewer) SendEntity;
.float Version;
float MSG_ENTITY = 5;
// Effect bit specifies that the entity is always to be sent to CSQC (provided it has a
// SendEntity function and Version is incremented. This is the same bit as used
// in DP_EF_NODEPTHTEST, but CSQC requires it even if the extension is not present.
float EF_NOPVSCULL = 8192;
&lt;/pre&gt;

On the client, [[EXT_CSQC System Globals Fields and Builtins List]] lists the core code. The following sections in this article explain their use.

==Overview==
There are two major design factors to be aware of first when beginning to understand Client Side QuakeC:

First is that the render function overrides the entire process of rendering. That is not to say that the CSQC replaces the low level rendering process - the engine provides functions for the CSQC code to call as the modder desires. However, if the CSQC rendering code does not do anything, then nothing will be rendered.

Secondly, CSQC does not automatically recieve any of the engine entities, even the rendering entities that the local client recieves. This acts as cheat protection, preventing players from making a client-side-only radar mod and such. The server mod must explicitly send the entities to the client as described later. It is also an important note that the server entities must still be linked into the world and viewable by a client in order to be sent to it.

==Client Programs Entry Points==
===CSQC_Init===
&lt;pre&gt;
void() CSQC_Init;
&lt;/pre&gt;
This is called when the csprogs.dat is loaded into memory. It is here that sounds, models and images can be precached with precache_sound precache_model and precache_pic.

===CSQC_Shutdown===
&lt;pre&gt;
void() CSQC_Shutdown;
&lt;/pre&gt;
This function is called before the csprogs is fully unloaded, both for shutdown and map change. It is possible to store data in cvars to read in after a map change in CSQC_Init, which is feasible in conjunction with the [[DP_CON_SET]] extension.

===CSQC_InputEvent===
&lt;pre&gt;
float(float event, float key, float ascii) CSQC_InputEvent;
float EVENT_KEYDOWN = 0;
float EVENT_KEYUP = 1;
float EVENT_MOUSEMOVE = 2;
&lt;/pre&gt;
This function is called on keyboard and mouse events. The ''event'' parameter is one of the EVENT_ constants. For keyboard input the ''key'' parameter is the quake key code of the key that was pressed or depressed while ascii is the printable character. Potentially, ascii might be a full unicode char if the engine supports that, and is often 0 on keyup events or keydown events where escape or modifier keys etc were used.
For mouse input the 'key' parameter contains the x movement, while the ascii parameter contains the y movement, but in DP, you may be required to use the &lt;tt&gt;vector() getmousepos&lt;/tt&gt; builtin instead.

The function returns FALSE if the engine should process the event, or TRUE if the engine should ignore it.

===CSQC_UpdateView===
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView;
&lt;/pre&gt;
This function overrides the engine drawing code. It orders the rendering of everything including views, scoreboards and huds. If the csqc were to simply return, nothing would be drawn. Areas that the function fails to draw over will contain undefined pixels.

Example code:
&lt;pre&gt;
void(float swidth, float sheight) CSQC_UpdateView =
{
    R_ClearScene();       //wipe the scene, and apply the default rendering values.

    //These lines, if used, specifiy various global view properties to the engine.
    //The engine returns 0 if it accepted the command, and -1 if it had an error.
    //The names listed here are the basic set required for basic compatability.
    R_SetView(VF_MIN_X, 0);
    R_SetView(VF_MIN_Y, 0);
    R_SetView(VF_SIZE_X, swidth);
    R_SetView(VF_SIZE_Y, sheight);
    R_SetView(VF_FOV, cvar(&quot;fov&quot;));
    R_SetView(VF_ORIGIN, player_org); //if absent and the player's entity is sent via the regular protocols, the default is the player's entity origin
    R_SetView(VF_ANGLES, player_ang); //the default is the client's current view angle, plus idlescale stuff.
    R_SetView(VF_DRAWWORLD, 1);
    R_SetView(VF_DRAWCROSSHAIR, 1);
    R_SetView(VF_DRAWENGINESBAR, 0);

    // Add any entities that the csqc does not know about
    R_AddEntities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS);

    R_RenderScene();        // draw the view

    csqc_drawsbar();       // call to a custom function drawing the status bar
 };
&lt;/pre&gt;

R_SetView Parameters:

{|style=&quot;border:1px solid #000000&quot;
|-
| Flag   || parameters || description
|-
| VF_MIN || vector     || Top-left corner of the viewport. Only _x and _y are used.
|- 
| VF_MIN_X || float    || Left edge of the viewport.
|-
| VF_MIN_Y || float    || Top edge of the viewport.
|-
| VF_SIZE  || vector   || Width and height of the viewport. Only _x and _y are used.
|-
| VF_SIZE_X || float   || Width of the viewport.
|-
| VF_SIZE_Y || float   || Height of the viewport.
|-
| VF_VIEWPORT || vector, vector || Origin and size of the viewport.
|-
| VF_FOV || vector     || Field of view. Only _x and _y are used. Units are degrees for perspective projection.
|-
| VF_FOVX   || float   || Horizontal field of view in degrees.
|-
| VF_FOVY   || float   || Vertical field of view in degrees.
|-
| VF_ORIGIN || vector  || The position of the camera.
|-
| VF_ORIGIN_X || float ||
|-
| VF_ORIGIN_Y || float ||
|-
| VF_ORIGIN_Z || float ||
|-
| VF_DRAWWORLD || float || TRUE if the world model (bsp, all submodels and world entities and effects) are to be drawn, else FALSE. Default is TRUE.
|-
| VF_DRAWENGINESBAR || float || TRUE to draw the engine status bar (scoreboard, intermissions etc.), FALSE if you want to override it with your own code. Default is TRUE.
|-
| VF_DRAWCROSSHAIR || float || TRUE to draw the engine crosshair, FALSE to hide it or draw your own.
|-
|}

===CSQC_ConsoleCommand===
&lt;pre&gt;
float(string s) CSQC_ConsoleCommand;
&lt;/pre&gt;
This function parses console commands entered on the client. The parameter ''s'' contains the entire string entered on the console.

The function must return TRUE if it parses the command or FALSE if it does not. Returning false causes the command to then be parsed by the engine, and will display an error message if the command is then not recognised.

Since the function is called before any engine parsing it is possible to override engine commands (for example +showscores and -showscores) which would be useful in building a custom status bar and scoreboard.

==Sending Data to the Client==
===Stats===
=====On the server=====
The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().
&lt;pre&gt;
void(float index, float type, .void field) AddStat = #232;
&lt;/pre&gt;
The ''index'' parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The ''type'' parameter is one of:
* AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The ''field'' parameter must be a float.
* AS_FLOAT - sends the whole float without any data loss. The ''field'' parameter must be a float.
* AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The ''field'' parameter must be a string.

=====On the client=====
The function corresponding to the ''type'' parameter is used to retrieve the data, with the ''index'' corresponding to that of the server.
&lt;pre&gt;
float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;
&lt;/pre&gt;

===Entities===
=====On the server=====
The ''SendEntity'' function is used in conjunction with the ''.Version'' field. The ''.Version'' field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:
&lt;pre&gt;
.float(entity viewer) SendEntity;
&lt;/pre&gt;
In this function, the entity which is being sent is ''self''.

The ''viewer'' parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins ''WriteCoord'', ''WriteAngle'', ''WriteByte'', ''WriteShort'', ''WriteLong'' are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

=====On the client=====
When an entity is received the function ''CSQC_Ent_Update'' is called. Here the CSQC core functions ''ReadCoord'', ''ReadAngle'', ''ReadByte'', ''ReadShort'', ''ReadLong'' are used to retrieve the data sent by the server.
Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

&lt;pre&gt;
void(float isnew) CSQC_Ent_Update;
&lt;/pre&gt;
If the entity does not yet exist it is created on the client and the ''isnew'' parameter is TRUE, otherwise FALSE.
Basically, ''isnew'' says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is ''self''.
You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex.
You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function ''CSQC_Ent_Remove'' is called on the client:
&lt;pre&gt;
void() CSQC_Ent_Remove;
&lt;/pre&gt;
In this function, ''self'' is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

=====Example Code=====

=====Please Note=====
Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

==Rendering Entities on the Client==

Spawn your entity:
&lt;pre&gt;
self = spawn();
&lt;/pre&gt;
Set a model/modelindex:
&lt;pre&gt;
setmodel(self, &quot;progs/player.mdl&quot;);
&lt;/pre&gt;
Set an origin:
&lt;pre&gt;
setorigin(self, '0 0 0');
&lt;/pre&gt;
Set the drawmask to something that matches your call to addentities: 
&lt;pre&gt;
self.drawmask = MASK_NORMAL;
&lt;/pre&gt;
The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:
&lt;pre&gt;
addentity(self);
&lt;/pre&gt;

==Rendering 2D HUD on the Client==

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup</text>
      <sha1>3dkoa4i0yubgb2o2g6ozjdq3dgvsi7i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>EXT CSQC COPYTOTEXTURE</title>
    <ns>0</ns>
    <id>469</id>
    <revision>
      <id>909</id>
      <timestamp>2008-07-27T09:28:18Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: ===Extension Proposal=== Suggested extension for copying a portion of the screen to a texture in client side QuakeC. This will essentially be a wrapper for the OpenGL function ''glCopyTexI...</comment>
      <text xml:space="preserve" bytes="2050">===Extension Proposal===
Suggested extension for copying a portion of the screen to a texture in client side QuakeC. This will essentially be a wrapper for the OpenGL function ''glCopyTexImage2D'' (http://www.opengl.org/documentation/specs/man_pages/hardcopy/GL/html/gl/copyteximage2d.html).

Builtin function:
&lt;pre&gt;vector csqc_copytotexture(float x, float y, float w, float h, string texture);&lt;/pre&gt;

''x, y, w, and h'' specify the portion of the screen from which to copy pixels. They use the exact same coordinate space as ''R_SetView'' does for the view portal, were the top left of the screen is 0, 0, and the width and height are vid_conwidth and vid_conheight respectively.

''texture'' specifies the name of the destination texture which will receive the new data. It is a string path and filename which would have been previously passed to ''precache_pic''. The currently loaded texture will be overwritten with new pixels, though it may not necessarily persist beyond a video subsystem restart.

If the engine supports automatically precaching textures as soon as they are used, then the same should be implemented for this extension - the texture name will no longer need to have been precached with a dummy texture.

''glCopyTexImage2D'' requires that the destination texture have width and height be a power of two, though they don't have to be the same length. csqc_copytotexture should accept any width and height, and automatically use a larger texture. The vector returned is the s and t texture coordinates of the corner of the desired texture within the larger power-of-2 sided texture.

====Possible Issues====
glCopyTexImage2D copies pixels upside-down compared to quake's 2D coordinate system:
&lt;tt&gt;Pixel ordering is such that lower x and y screen coordinates correspond to	lower s	and t texture coordinates.&lt;/tt&gt;

This means that the texture coordinates will be upside down in QuakeC.

I think the desired image will be aligned to the top left of the texture, but upside down. (It might be aligned to the bottom, have to check).</text>
      <sha1>g8f4aa7kcdmdd6ahj59kkxda1xskay0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>910</id>
      <parentid>909</parentid>
      <timestamp>2008-07-27T11:21:14Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Extension Proposal */</comment>
      <text xml:space="preserve" bytes="2022">===Extension Proposal===
Suggested extension for copying a portion of the screen to a texture in client side QuakeC. This will essentially be a wrapper for the OpenGL function ''glCopyTexImage2D'' (http://www.opengl.org/documentation/specs/man_pages/hardcopy/GL/html/gl/copyteximage2d.html).

Builtin functions:
&lt;pre&gt;string csqc_allocdynamictexture();&lt;/pre&gt;

Allocates a dynamic texture, returns a string which can be used as any precached texture could be.

&lt;pre&gt;vector csqc_copytotexture(float x, float y, float w, float h, string texture);&lt;/pre&gt;

''x, y, w, and h'' specify the portion of the screen from which to copy pixels. They use the exact same coordinate space as ''R_SetView'' does for the view portal, were the top left of the screen is 0, 0, and the width and height are vid_conwidth and vid_conheight respectively.

''texture'' specifies the name of the destination texture which will receive the new data. It must have been allocated with ''csqc_alloctexture''.

If the engine supports automatically precaching textures as soon as they are used, then the same should be implemented for this extension - the texture name will no longer need to have been precached with a dummy texture.

''glCopyTexImage2D'' requires that the destination texture have width and height be a power of two, though they don't have to be the same length. csqc_copytotexture should accept any width and height, and automatically use a larger texture. The vector returned is the s and t texture coordinates of the corner of the desired texture within the larger power-of-2 sided texture.

====Possible Issues====
glCopyTexImage2D copies pixels upside-down compared to quake's 2D coordinate system:
&lt;tt&gt;Pixel ordering is such that lower x and y screen coordinates correspond to	lower s	and t texture coordinates.&lt;/tt&gt;

This means that the texture coordinates will be upside down in QuakeC.

I think the desired image will be aligned to the top left of the texture, but upside down. (It might be aligned to the bottom, have to check).</text>
      <sha1>jdv3renzc7ypg4gk9tzvfvwc7j4b9lc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>911</id>
      <parentid>910</parentid>
      <timestamp>2008-07-27T11:25:40Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Possible Issues */</comment>
      <text xml:space="preserve" bytes="2023">===Extension Proposal===
Suggested extension for copying a portion of the screen to a texture in client side QuakeC. This will essentially be a wrapper for the OpenGL function ''glCopyTexImage2D'' (http://www.opengl.org/documentation/specs/man_pages/hardcopy/GL/html/gl/copyteximage2d.html).

Builtin functions:
&lt;pre&gt;string csqc_allocdynamictexture();&lt;/pre&gt;

Allocates a dynamic texture, returns a string which can be used as any precached texture could be.

&lt;pre&gt;vector csqc_copytotexture(float x, float y, float w, float h, string texture);&lt;/pre&gt;

''x, y, w, and h'' specify the portion of the screen from which to copy pixels. They use the exact same coordinate space as ''R_SetView'' does for the view portal, were the top left of the screen is 0, 0, and the width and height are vid_conwidth and vid_conheight respectively.

''texture'' specifies the name of the destination texture which will receive the new data. It must have been allocated with ''csqc_alloctexture''.

If the engine supports automatically precaching textures as soon as they are used, then the same should be implemented for this extension - the texture name will no longer need to have been precached with a dummy texture.

''glCopyTexImage2D'' requires that the destination texture have width and height be a power of two, though they don't have to be the same length. csqc_copytotexture should accept any width and height, and automatically use a larger texture. The vector returned is the s and t texture coordinates of the corner of the desired texture within the larger power-of-2 sided texture.

====Possible Issues====
glCopyTexImage2D copies pixels upside-down compared to quake's 2D coordinate system:

&lt;tt&gt;Pixel ordering is such that lower x and y screen coordinates correspond to	lower s	and t texture coordinates.&lt;/tt&gt;

This means that the texture coordinates will be upside down in QuakeC.

I think the desired image will be aligned to the top left of the texture, but upside down. (It might be aligned to the bottom, have to check).</text>
      <sha1>1cgnqrbbksvugc6agcqq5q25rwbekhm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>912</id>
      <parentid>911</parentid>
      <timestamp>2008-07-27T11:29:16Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="1800">===Extension Proposal===
Suggested extension for copying a portion of the screen to a texture in client side QuakeC. This will essentially be a wrapper for the OpenGL function ''glCopyTexImage2D'' (http://www.opengl.org/documentation/specs/man_pages/hardcopy/GL/html/gl/copyteximage2d.html).

Builtin functions:
&lt;pre&gt;string csqc_allocdynamictexture();&lt;/pre&gt;

Allocates a dynamic texture, returns a string which can be used as any precached texture could be.

&lt;pre&gt;vector csqc_copytotexture(float x, float y, float w, float h, string texture);&lt;/pre&gt;

''x, y, w, and h'' specify the portion of the screen from which to copy pixels. They use the exact same coordinate space as ''R_SetView'' does for the view portal, were the top left of the screen is 0, 0, and the width and height are vid_conwidth and vid_conheight respectively.

''texture'' specifies the name of the destination texture which will receive the new data. It must have been allocated with ''csqc_alloctexture''.

''glCopyTexImage2D'' requires that the destination texture have width and height be a power of two, though they don't have to be the same length. csqc_copytotexture should accept any width and height, and automatically use a larger texture. The vector returned is the s and t texture coordinates of the corner of the desired texture within the larger power-of-2 sided texture.

====Possible Issues====
glCopyTexImage2D copies pixels upside-down compared to quake's 2D coordinate system:

&lt;tt&gt;Pixel ordering is such that lower x and y screen coordinates correspond to	lower s	and t texture coordinates.&lt;/tt&gt;

This means that the texture coordinates will be upside down in QuakeC.

I think the desired image will be aligned to the top left of the texture, but upside down. (It might be aligned to the bottom, have to check).</text>
      <sha1>mw2yn4vlqox2vcixricepri8558554s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>EXT CSQC System Globals Fields and Builtins List</title>
    <ns>0</ns>
    <id>179</id>
    <revision>
      <id>295</id>
      <timestamp>2008-01-17T15:11:36Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: ==System Globals== &lt;code&gt; entity		self; entity		other; entity		world; float		time; float		frametime;  float 		player_localentnum;     //the entnum float 		player_localnum;        //the pla...</comment>
      <text xml:space="preserve" bytes="2606">==System Globals==
&lt;code&gt;
entity		self;
entity		other;
entity		world;
float		time;
float		frametime;

float 		player_localentnum;     //the entnum
float 		player_localnum;        //the playernum
float		maxclients;             //a constant filled in by the engine. gah, portability eh?

float		clientcommandframe;     //player movement
float		servercommandframe;     //clientframe echoed off the server
string		mapname;

//
// global variables set by built in functions
//
vector		v_forward, v_up, v_right;  // set by makevectors()

// set by traceline / tracebox
float		trace_allsolid;
float		trace_startsolid;
float		trace_fraction;
vector		trace_endpos;
vector		trace_plane_normal;
float		trace_plane_dist;
entity		trace_ent;
float		trace_inopen;
float		trace_inwater;

//
// required prog functions
//
void()		CSQC_Init;
void()		CSQC_Shutdown;
float(float f, float t)	CSQC_InputEvent;
void()		CSQC_UpdateView;
float(string s)	CSQC_ConsoleCommand;

//these fields are read and set by the default player physics
vector		pmove_org;
vector		pmove_vel;
vector		pmove_mins;
vector		pmove_maxs;
//retrieved from the current movement commands (read by player physics)
float		input_timelength;
vector		input_angles;
vector		input_movevalues;  //forwards, right, up.
float		input_buttons;     //attack, use, jump (default physics only uses jump)

float		movevar_gravity;
float		movevar_stopspeed;
float		movevar_maxspeed;
float		movevar_spectatormaxspeed;  //used by NOCLIP movetypes.
float		movevar_accelerate;
float		movevar_airaccelerate;
float		movevar_wateraccelerate;
float		movevar_friction;
float		movevar_waterfriction;
float		movevar_entgravity;	//the local player's gravity field. Is a multiple (1 is the normal value)
&lt;/code&gt;
==System Fields==
&lt;code&gt;
.float		modelindex;     // *** model index in the precached list
.vector		absmin, absmax;	// *** origin + mins / maxs

.float		entnum;         // *** the ent number as on the server
.float		drawmask;
.void()		predraw;
.float		movetype;
.float		solid;

.vector		origin;         // ***
.vector		oldorigin;      // ***
.vector		velocity;
.vector		angles;
.vector		avelocity;

.string		classname;      // spawn function
.string		model;
.float		frame;
.float		skin;
.float		effects;

.vector		mins, maxs;     // bounding box extents reletive to origin
.vector		size;           // maxs - mins

.void()		touch;
.void()		use;
.void()		think;
.void()		blocked;        // for doors or plats, called when can't push other

.float		nextthink;
.entity		chain;
.string		netname;
.entity 	enemy;
.float		flags;
.float		colormap;
.entity		owner;
&lt;/code&gt;
==Builtins==</text>
      <sha1>fh2ton3og4470a5rq60ygvze7nioav9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>296</id>
      <parentid>295</parentid>
      <timestamp>2008-01-17T15:13:42Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="2576">==System Globals==
entity		self;
entity		other;
entity		world;
float		time;
float		frametime;

float 		player_localentnum;     //the entnum
float 		player_localnum;        //the playernum
float		maxclients;             //a constant filled in by the engine. gah, portability eh?

float		clientcommandframe;     //player movement
float		servercommandframe;     //clientframe echoed off the server
string		mapname;

//
// global variables set by built in functions
//
vector		v_forward, v_up, v_right;  // set by makevectors()

// set by traceline / tracebox
float		trace_allsolid;
float		trace_startsolid;
float		trace_fraction;
vector		trace_endpos;
vector		trace_plane_normal;
float		trace_plane_dist;
entity		trace_ent;
float		trace_inopen;
float		trace_inwater;

//
// required prog functions
//
void()		CSQC_Init;
void()		CSQC_Shutdown;
float(float f, float t)	CSQC_InputEvent;
void()		CSQC_UpdateView;
float(string s)	CSQC_ConsoleCommand;

//these fields are read and set by the default player physics
vector		pmove_org;
vector		pmove_vel;
vector		pmove_mins;
vector		pmove_maxs;
//retrieved from the current movement commands (read by player physics)
float		input_timelength;
vector		input_angles;
vector		input_movevalues;  //forwards, right, up.
float		input_buttons;     //attack, use, jump (default physics only uses jump)

float		movevar_gravity;
float		movevar_stopspeed;
float		movevar_maxspeed;
float		movevar_spectatormaxspeed;  //used by NOCLIP movetypes.
float		movevar_accelerate;
float		movevar_airaccelerate;
float		movevar_wateraccelerate;
float		movevar_friction;
float		movevar_waterfriction;
float		movevar_entgravity;	//the local player's gravity field. Is a multiple (1 is the normal value)
==System Fields==
.float		modelindex;     // *** model index in the precached list
.vector		absmin, absmax;	// *** origin + mins / maxs

.float		entnum;         // *** the ent number as on the server
.float		drawmask;
.void()		predraw;
.float		movetype;
.float		solid;

.vector		origin;         // ***
.vector		oldorigin;      // ***
.vector		velocity;
.vector		angles;
.vector		avelocity;

.string		classname;      // spawn function
.string		model;
.float		frame;
.float		skin;
.float		effects;

.vector		mins, maxs;     // bounding box extents reletive to origin
.vector		size;           // maxs - mins

.void()		touch;
.void()		use;
.void()		think;
.void()		blocked;        // for doors or plats, called when can't push other

.float		nextthink;
.entity		chain;
.string		netname;
.entity 	enemy;
.float		flags;
.float		colormap;
.entity		owner;
==Builtins==</text>
      <sha1>73khasgs6p99we4dc3yku71x2wafjkf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>297</id>
      <parentid>296</parentid>
      <timestamp>2008-01-17T15:17:09Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="2961">==System Globals==
&lt;code&gt;
entity		self;&lt;br&gt;
entity		other;&lt;br&gt;
entity		world;&lt;br&gt;
float		time;&lt;br&gt;
float		frametime;&lt;br&gt;
&lt;br&gt;
float 		player_localentnum;     //the entnum&lt;br&gt;
float 		player_localnum;        //the playernum&lt;br&gt;
float		maxclients;             //a constant filled in by the engine&lt;br&gt;
&lt;br&gt;
float		clientcommandframe;     //player movement&lt;br&gt;
float		servercommandframe;     //clientframe echoed off the server&lt;br&gt;
string		mapname;&lt;br&gt;
&lt;br&gt;
//&lt;br&gt;
// global variables set by built in functions&lt;br&gt;
//&lt;br&gt;
vector		v_forward, v_up, v_right;  // set by makevectors()&lt;br&gt;
&lt;br&gt;
// set by traceline / tracebox&lt;br&gt;
float		trace_allsolid;&lt;br&gt;
float		trace_startsolid;&lt;br&gt;
float		trace_fraction;&lt;br&gt;
vector		trace_endpos;&lt;br&gt;
vector		trace_plane_normal;&lt;br&gt;
float		trace_plane_dist;&lt;br&gt;
entity		trace_ent;&lt;br&gt;
float		trace_inopen;&lt;br&gt;
float		trace_inwater;&lt;br&gt;
&lt;br&gt;
//&lt;br&gt;
// required prog functions&lt;br&gt;
//&lt;br&gt;
void()		CSQC_Init;&lt;br&gt;
void()		CSQC_Shutdown;&lt;br&gt;
float(float f, float t)	CSQC_InputEvent;&lt;br&gt;
void()		CSQC_UpdateView;&lt;br&gt;
float(string s)	CSQC_ConsoleCommand;&lt;br&gt;
&lt;br&gt;
//these fields are read and set by the default player physics&lt;br&gt;
vector		pmove_org;&lt;br&gt;
vector		pmove_vel;&lt;br&gt;
vector		pmove_mins;&lt;br&gt;
vector		pmove_maxs;&lt;br&gt;
//retrieved from the current movement commands (read by player physics)&lt;br&gt;
float		input_timelength;&lt;br&gt;
vector		input_angles;&lt;br&gt;
vector		input_movevalues;  //forwards, right, up.&lt;br&gt;
float		input_buttons;     //attack, use, jump (default physics only uses jump)&lt;br&gt;
&lt;br&gt;
float		movevar_gravity;&lt;br&gt;
float		movevar_stopspeed;&lt;br&gt;
float		movevar_maxspeed;&lt;br&gt;
float		movevar_spectatormaxspeed;  //used by NOCLIP movetypes.&lt;br&gt;
float		movevar_accelerate;&lt;br&gt;
float		movevar_airaccelerate;&lt;br&gt;
float		movevar_wateraccelerate;&lt;br&gt;
float		movevar_friction;&lt;br&gt;
float		movevar_waterfriction;&lt;br&gt;
float		movevar_entgravity;	//the local player's gravity field. Is a multiple (1 is the normal value)&lt;br&gt;
&lt;/code&gt;
==System Fields==
.float		modelindex;     // *** model index in the precached list&lt;br&gt;
.vector		absmin, absmax;	// *** origin + mins / maxs&lt;br&gt;
&lt;br&gt;
.float		entnum;         // *** the ent number as on the server&lt;br&gt;
.float		drawmask;&lt;br&gt;
.void()		predraw;&lt;br&gt;
.float		movetype;&lt;br&gt;
.float		solid;&lt;br&gt;
&lt;br&gt;
.vector		origin;         // ***&lt;br&gt;
.vector		oldorigin;      // ***&lt;br&gt;
.vector		velocity;&lt;br&gt;
.vector		angles;&lt;br&gt;
.vector		avelocity;&lt;br&gt;
&lt;br&gt;
.string		classname;      // spawn function&lt;br&gt;
.string		model;&lt;br&gt;
.float		frame;&lt;br&gt;
.float		skin;&lt;br&gt;
.float		effects;&lt;br&gt;
&lt;br&gt;
.vector		mins, maxs;     // bounding box extents reletive to origin&lt;br&gt;
.vector		size;           // maxs - mins&lt;br&gt;
&lt;br&gt;
.void()		touch;&lt;br&gt;
.void()		use;&lt;br&gt;
.void()		think;&lt;br&gt;
.void()		blocked;        // for doors or plats, called when can't push other&lt;br&gt;
&lt;br&gt;
.float		nextthink;&lt;br&gt;
.entity		chain;&lt;br&gt;
.string		netname;&lt;br&gt;
.entity 	enemy;&lt;br&gt;
.float		flags;&lt;br&gt;
.float		colormap;&lt;br&gt;
.entity		owner;&lt;br&gt;
&lt;/code&gt;
==Builtins==</text>
      <sha1>c6l1sl5zvru86c3amulsjvkzs2akxqa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>298</id>
      <parentid>297</parentid>
      <timestamp>2008-01-17T15:17:54Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="2968">==System Globals==
&lt;code&gt;
entity		self;&lt;br&gt;
entity		other;&lt;br&gt;
entity		world;&lt;br&gt;
float		time;&lt;br&gt;
float		frametime;&lt;br&gt;
&lt;br&gt;
float 		player_localentnum;     //the entnum&lt;br&gt;
float 		player_localnum;        //the playernum&lt;br&gt;
float		maxclients;             //a constant filled in by the engine&lt;br&gt;
&lt;br&gt;
float		clientcommandframe;     //player movement&lt;br&gt;
float		servercommandframe;     //clientframe echoed off the server&lt;br&gt;
string		mapname;&lt;br&gt;
&lt;br&gt;
//&lt;br&gt;
// global variables set by built in functions&lt;br&gt;
//&lt;br&gt;
vector		v_forward, v_up, v_right;  // set by makevectors()&lt;br&gt;
&lt;br&gt;
// set by traceline / tracebox&lt;br&gt;
float		trace_allsolid;&lt;br&gt;
float		trace_startsolid;&lt;br&gt;
float		trace_fraction;&lt;br&gt;
vector		trace_endpos;&lt;br&gt;
vector		trace_plane_normal;&lt;br&gt;
float		trace_plane_dist;&lt;br&gt;
entity		trace_ent;&lt;br&gt;
float		trace_inopen;&lt;br&gt;
float		trace_inwater;&lt;br&gt;
&lt;br&gt;
//&lt;br&gt;
// required prog functions&lt;br&gt;
//&lt;br&gt;
void()		CSQC_Init;&lt;br&gt;
void()		CSQC_Shutdown;&lt;br&gt;
float(float f, float t)	CSQC_InputEvent;&lt;br&gt;
void()		CSQC_UpdateView;&lt;br&gt;
float(string s)	CSQC_ConsoleCommand;&lt;br&gt;
&lt;br&gt;
//these fields are read and set by the default player physics&lt;br&gt;
vector		pmove_org;&lt;br&gt;
vector		pmove_vel;&lt;br&gt;
vector		pmove_mins;&lt;br&gt;
vector		pmove_maxs;&lt;br&gt;
//retrieved from the current movement commands (read by player physics)&lt;br&gt;
float		input_timelength;&lt;br&gt;
vector		input_angles;&lt;br&gt;
vector		input_movevalues;  //forwards, right, up.&lt;br&gt;
float		input_buttons;     //attack, use, jump (default physics only uses jump)&lt;br&gt;
&lt;br&gt;
float		movevar_gravity;&lt;br&gt;
float		movevar_stopspeed;&lt;br&gt;
float		movevar_maxspeed;&lt;br&gt;
float		movevar_spectatormaxspeed;  //used by NOCLIP movetypes.&lt;br&gt;
float		movevar_accelerate;&lt;br&gt;
float		movevar_airaccelerate;&lt;br&gt;
float		movevar_wateraccelerate;&lt;br&gt;
float		movevar_friction;&lt;br&gt;
float		movevar_waterfriction;&lt;br&gt;
float		movevar_entgravity;	//the local player's gravity field. Is a multiple (1 is the normal value)&lt;br&gt;
&lt;/code&gt;
==System Fields==
&lt;code&gt;
.float		modelindex;     // *** model index in the precached list&lt;br&gt;
.vector		absmin, absmax;	// *** origin + mins / maxs&lt;br&gt;
&lt;br&gt;
.float		entnum;         // *** the ent number as on the server&lt;br&gt;
.float		drawmask;&lt;br&gt;
.void()		predraw;&lt;br&gt;
.float		movetype;&lt;br&gt;
.float		solid;&lt;br&gt;
&lt;br&gt;
.vector		origin;         // ***&lt;br&gt;
.vector		oldorigin;      // ***&lt;br&gt;
.vector		velocity;&lt;br&gt;
.vector		angles;&lt;br&gt;
.vector		avelocity;&lt;br&gt;
&lt;br&gt;
.string		classname;      // spawn function&lt;br&gt;
.string		model;&lt;br&gt;
.float		frame;&lt;br&gt;
.float		skin;&lt;br&gt;
.float		effects;&lt;br&gt;
&lt;br&gt;
.vector		mins, maxs;     // bounding box extents reletive to origin&lt;br&gt;
.vector		size;           // maxs - mins&lt;br&gt;
&lt;br&gt;
.void()		touch;&lt;br&gt;
.void()		use;&lt;br&gt;
.void()		think;&lt;br&gt;
.void()		blocked;        // for doors or plats, called when can't push other&lt;br&gt;
&lt;br&gt;
.float		nextthink;&lt;br&gt;
.entity		chain;&lt;br&gt;
.string		netname;&lt;br&gt;
.entity 	enemy;&lt;br&gt;
.float		flags;&lt;br&gt;
.float		colormap;&lt;br&gt;
.entity		owner;&lt;br&gt;
&lt;/code&gt;
==Builtins==</text>
      <sha1>e72cqjfa6zddpuzst57mrhsx2uqaetm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>299</id>
      <parentid>298</parentid>
      <timestamp>2008-01-17T15:25:19Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="2964">==System Globals==
&lt;pre&gt;
entity		self;&lt;br&gt;
entity		other;&lt;br&gt;
entity		world;&lt;br&gt;
float		time;&lt;br&gt;
float		frametime;&lt;br&gt;
&lt;br&gt;
float 		player_localentnum;     //the entnum&lt;br&gt;
float 		player_localnum;        //the playernum&lt;br&gt;
float		maxclients;             //a constant filled in by the engine&lt;br&gt;
&lt;br&gt;
float		clientcommandframe;     //player movement&lt;br&gt;
float		servercommandframe;     //clientframe echoed off the server&lt;br&gt;
string		mapname;&lt;br&gt;
&lt;br&gt;
//&lt;br&gt;
// global variables set by built in functions&lt;br&gt;
//&lt;br&gt;
vector		v_forward, v_up, v_right;  // set by makevectors()&lt;br&gt;
&lt;br&gt;
// set by traceline / tracebox&lt;br&gt;
float		trace_allsolid;&lt;br&gt;
float		trace_startsolid;&lt;br&gt;
float		trace_fraction;&lt;br&gt;
vector		trace_endpos;&lt;br&gt;
vector		trace_plane_normal;&lt;br&gt;
float		trace_plane_dist;&lt;br&gt;
entity		trace_ent;&lt;br&gt;
float		trace_inopen;&lt;br&gt;
float		trace_inwater;&lt;br&gt;
&lt;br&gt;
//&lt;br&gt;
// required prog functions&lt;br&gt;
//&lt;br&gt;
void()		CSQC_Init;&lt;br&gt;
void()		CSQC_Shutdown;&lt;br&gt;
float(float f, float t)	CSQC_InputEvent;&lt;br&gt;
void()		CSQC_UpdateView;&lt;br&gt;
float(string s)	CSQC_ConsoleCommand;&lt;br&gt;
&lt;br&gt;
//these fields are read and set by the default player physics&lt;br&gt;
vector		pmove_org;&lt;br&gt;
vector		pmove_vel;&lt;br&gt;
vector		pmove_mins;&lt;br&gt;
vector		pmove_maxs;&lt;br&gt;
//retrieved from the current movement commands (read by player physics)&lt;br&gt;
float		input_timelength;&lt;br&gt;
vector		input_angles;&lt;br&gt;
vector		input_movevalues;  //forwards, right, up.&lt;br&gt;
float		input_buttons;     //attack, use, jump (default physics only uses jump)&lt;br&gt;
&lt;br&gt;
float		movevar_gravity;&lt;br&gt;
float		movevar_stopspeed;&lt;br&gt;
float		movevar_maxspeed;&lt;br&gt;
float		movevar_spectatormaxspeed;  //used by NOCLIP movetypes.&lt;br&gt;
float		movevar_accelerate;&lt;br&gt;
float		movevar_airaccelerate;&lt;br&gt;
float		movevar_wateraccelerate;&lt;br&gt;
float		movevar_friction;&lt;br&gt;
float		movevar_waterfriction;&lt;br&gt;
float		movevar_entgravity;	//the local player's gravity field. Is a multiple (1 is the normal value)&lt;br&gt;
&lt;/pre&gt;
==System Fields==
&lt;pre&gt;
.float		modelindex;     // *** model index in the precached list&lt;br&gt;
.vector		absmin, absmax;	// *** origin + mins / maxs&lt;br&gt;
&lt;br&gt;
.float		entnum;         // *** the ent number as on the server&lt;br&gt;
.float		drawmask;&lt;br&gt;
.void()		predraw;&lt;br&gt;
.float		movetype;&lt;br&gt;
.float		solid;&lt;br&gt;
&lt;br&gt;
.vector		origin;         // ***&lt;br&gt;
.vector		oldorigin;      // ***&lt;br&gt;
.vector		velocity;&lt;br&gt;
.vector		angles;&lt;br&gt;
.vector		avelocity;&lt;br&gt;
&lt;br&gt;
.string		classname;      // spawn function&lt;br&gt;
.string		model;&lt;br&gt;
.float		frame;&lt;br&gt;
.float		skin;&lt;br&gt;
.float		effects;&lt;br&gt;
&lt;br&gt;
.vector		mins, maxs;     // bounding box extents reletive to origin&lt;br&gt;
.vector		size;           // maxs - mins&lt;br&gt;
&lt;br&gt;
.void()		touch;&lt;br&gt;
.void()		use;&lt;br&gt;
.void()		think;&lt;br&gt;
.void()		blocked;        // for doors or plats, called when can't push other&lt;br&gt;
&lt;br&gt;
.float		nextthink;&lt;br&gt;
.entity		chain;&lt;br&gt;
.string		netname;&lt;br&gt;
.entity 	enemy;&lt;br&gt;
.float		flags;&lt;br&gt;
.float		colormap;&lt;br&gt;
.entity		owner;&lt;br&gt;
&lt;/pre&gt;
==Builtins==</text>
      <sha1>k7mbwlw9hz1eli9n94kf0dj1d8szm10</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>300</id>
      <parentid>299</parentid>
      <timestamp>2008-01-17T15:27:47Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="2580">==System Globals==
&lt;pre&gt;
entity		self;
entity		other;
entity		world;
float		time;
float		frametime;

float 		player_localentnum;     //the entnum
float 		player_localnum;        //the playernum
float		maxclients;             //a constant filled in by the engine

float		clientcommandframe;     //player movement
float		servercommandframe;     //clientframe echoed off the server
string		mapname;

//
// global variables set by built in functions
//
vector		v_forward, v_up, v_right;  // set by makevectors()

// set by traceline / tracebox
float		trace_allsolid;
float		trace_startsolid;
float		trace_fraction;
vector		trace_endpos;
vector		trace_plane_normal;
float		trace_plane_dist;
entity		trace_ent;
float		trace_inopen;
float		trace_inwater;

//
// required prog functions
//
void()		CSQC_Init;
void()		CSQC_Shutdown;
float(float f, float t)	CSQC_InputEvent;
void()		CSQC_UpdateView;
float(string s)	CSQC_ConsoleCommand;

//these fields are read and set by the default player physics
vector		pmove_org;
vector		pmove_vel;
vector		pmove_mins;
vector		pmove_maxs;
//retrieved from the current movement commands (read by player physics)
float		input_timelength;
vector		input_angles;
vector		input_movevalues;  //forwards, right, up.
float		input_buttons;     //attack, use, jump (default physics only uses jump)

float		movevar_gravity;
float		movevar_stopspeed;
float		movevar_maxspeed;
float		movevar_spectatormaxspeed;  //used by NOCLIP movetypes.
float		movevar_accelerate;
float		movevar_airaccelerate;
float		movevar_wateraccelerate;
float		movevar_friction;
float		movevar_waterfriction;
float		movevar_entgravity;	//the local player's gravity field. Is a multiple (1 is the normal value)
&lt;/pre&gt;
==System Fields==
&lt;pre&gt;
.float		modelindex;     // *** model index in the precached list
.vector		absmin, absmax;	// *** origin + mins / maxs

.float		entnum;         // *** the ent number as on the server
.float		drawmask;
.void()		predraw;
.float		movetype;
.float		solid;

.vector		origin;         // ***
.vector		oldorigin;      // ***
.vector		velocity;
.vector		angles;
.vector		avelocity;

.string		classname;      // spawn function
.string		model;
.float		frame;
.float		skin;
.float		effects;

.vector		mins, maxs;     // bounding box extents reletive to origin
.vector		size;           // maxs - mins

.void()		touch;
.void()		use;
.void()		think;
.void()		blocked;        // for doors or plats, called when can't push other

.float		nextthink;
.entity		chain;
.string		netname;
.entity 	enemy;
.float		flags;
.float		colormap;
.entity		owner;
&lt;/pre&gt;
==Builtins==</text>
      <sha1>2kpe801prxcnmisi7iaicytr2p6de1a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>301</id>
      <parentid>300</parentid>
      <timestamp>2008-01-17T15:37:49Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Builtins */</comment>
      <text xml:space="preserve" bytes="4426">==System Globals==
&lt;pre&gt;
entity		self;
entity		other;
entity		world;
float		time;
float		frametime;

float 		player_localentnum;     //the entnum
float 		player_localnum;        //the playernum
float		maxclients;             //a constant filled in by the engine

float		clientcommandframe;     //player movement
float		servercommandframe;     //clientframe echoed off the server
string		mapname;

//
// global variables set by built in functions
//
vector		v_forward, v_up, v_right;  // set by makevectors()

// set by traceline / tracebox
float		trace_allsolid;
float		trace_startsolid;
float		trace_fraction;
vector		trace_endpos;
vector		trace_plane_normal;
float		trace_plane_dist;
entity		trace_ent;
float		trace_inopen;
float		trace_inwater;

//
// required prog functions
//
void()		CSQC_Init;
void()		CSQC_Shutdown;
float(float f, float t)	CSQC_InputEvent;
void()		CSQC_UpdateView;
float(string s)	CSQC_ConsoleCommand;

//these fields are read and set by the default player physics
vector		pmove_org;
vector		pmove_vel;
vector		pmove_mins;
vector		pmove_maxs;
//retrieved from the current movement commands (read by player physics)
float		input_timelength;
vector		input_angles;
vector		input_movevalues;  //forwards, right, up.
float		input_buttons;     //attack, use, jump (default physics only uses jump)

float		movevar_gravity;
float		movevar_stopspeed;
float		movevar_maxspeed;
float		movevar_spectatormaxspeed;  //used by NOCLIP movetypes.
float		movevar_accelerate;
float		movevar_airaccelerate;
float		movevar_wateraccelerate;
float		movevar_friction;
float		movevar_waterfriction;
float		movevar_entgravity;	//the local player's gravity field. Is a multiple (1 is the normal value)
&lt;/pre&gt;
==System Fields==
&lt;pre&gt;
.float		modelindex;     // *** model index in the precached list
.vector		absmin, absmax;	// *** origin + mins / maxs

.float		entnum;         // *** the ent number as on the server
.float		drawmask;
.void()		predraw;
.float		movetype;
.float		solid;

.vector		origin;         // ***
.vector		oldorigin;      // ***
.vector		velocity;
.vector		angles;
.vector		avelocity;

.string		classname;      // spawn function
.string		model;
.float		frame;
.float		skin;
.float		effects;

.vector		mins, maxs;     // bounding box extents reletive to origin
.vector		size;           // maxs - mins

.void()		touch;
.void()		use;
.void()		think;
.void()		blocked;        // for doors or plats, called when can't push other

.float		nextthink;
.entity		chain;
.string		netname;
.entity 	enemy;
.float		flags;
.float		colormap;
.entity		owner;
&lt;/pre&gt;
==Builtins==
&lt;pre&gt;
void(vector ang) makevectors = #1;
void(entity e, vector o) setorigin = #2;
void(entity e, string m) setmodel = #3;
void(entity e, vector min, vector max) setsize = #4;
void(entity e, vector min, vector max) setabssize = #5;
void() break = #6;
float() random = #7;
void(entity e, float chan, string samp) sound = #8;
vector(vector v) normalize = #9;
void(string e) error = #10;
void(string e) objerror = #11;
float(vector v) vlen = #12;
float(vector v) vectoyaw = #13;
entity() spawn = #14;
void(entity e) remove = #15;
float(vector v1, vector v2, float tryents) traceline = #16;
entity() checkclient = #17;
entity(entity start, .string fld, string match) find = #18;
void(string s) precache_sound = #19;
void(string s) precache_model = #20;
void(entity client, string s, ...) stuffcmd = #21;
entity(vector org, float rad) findradius = #22;

string(float f) ftos = #26;
string(vector v) vtos = #27;
void() coredump = #28;
void() traceon = #29;
void() traceoff = #30;
void(entity e) eprint = #31;
float(float yaw, float dist) walkmove = #32;

float() droptofloor = #34;
void(float style, string value) lightstyle = #35;
float(float v) rint = #36;
float(float v) floor = #37;
float(float v) ceil = #38;

float(entity e) checkbottom = #40;
float(vector v) pointcontents = #41;

float(float f) fabs = #43;
float(string s) cvar = #45;
void(string s) localcmd = #46;
entity(entity e) nextent = #47;
void(vector o, vector d, float color, float count) particle = #48;
void() ChangeYaw = #49;

vector(vector v) vectoangles = #51;

string(string s) precache_file = #68;
void(entity e) makestatic = #69;

void(string var, string val) cvar_set = #72;

void(vector pos, string samp, float vol, float atten) ambientsound = #74;
string(string s) precache_model2 = #75;
string(string s) precache_sound2 = #76;
string(string s) precache_file2 = #77;
&lt;/pre&gt;</text>
      <sha1>1rh1o68zikk09vbwbbz1zusjpe3485p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>302</id>
      <parentid>301</parentid>
      <timestamp>2008-01-17T15:43:36Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Builtins */</comment>
      <text xml:space="preserve" bytes="5906">==System Globals==
&lt;pre&gt;
entity		self;
entity		other;
entity		world;
float		time;
float		frametime;

float 		player_localentnum;     //the entnum
float 		player_localnum;        //the playernum
float		maxclients;             //a constant filled in by the engine

float		clientcommandframe;     //player movement
float		servercommandframe;     //clientframe echoed off the server
string		mapname;

//
// global variables set by built in functions
//
vector		v_forward, v_up, v_right;  // set by makevectors()

// set by traceline / tracebox
float		trace_allsolid;
float		trace_startsolid;
float		trace_fraction;
vector		trace_endpos;
vector		trace_plane_normal;
float		trace_plane_dist;
entity		trace_ent;
float		trace_inopen;
float		trace_inwater;

//
// required prog functions
//
void()		CSQC_Init;
void()		CSQC_Shutdown;
float(float f, float t)	CSQC_InputEvent;
void()		CSQC_UpdateView;
float(string s)	CSQC_ConsoleCommand;

//these fields are read and set by the default player physics
vector		pmove_org;
vector		pmove_vel;
vector		pmove_mins;
vector		pmove_maxs;
//retrieved from the current movement commands (read by player physics)
float		input_timelength;
vector		input_angles;
vector		input_movevalues;  //forwards, right, up.
float		input_buttons;     //attack, use, jump (default physics only uses jump)

float		movevar_gravity;
float		movevar_stopspeed;
float		movevar_maxspeed;
float		movevar_spectatormaxspeed;  //used by NOCLIP movetypes.
float		movevar_accelerate;
float		movevar_airaccelerate;
float		movevar_wateraccelerate;
float		movevar_friction;
float		movevar_waterfriction;
float		movevar_entgravity;	//the local player's gravity field. Is a multiple (1 is the normal value)
&lt;/pre&gt;
==System Fields==
&lt;pre&gt;
.float		modelindex;     // *** model index in the precached list
.vector		absmin, absmax;	// *** origin + mins / maxs

.float		entnum;         // *** the ent number as on the server
.float		drawmask;
.void()		predraw;
.float		movetype;
.float		solid;

.vector		origin;         // ***
.vector		oldorigin;      // ***
.vector		velocity;
.vector		angles;
.vector		avelocity;

.string		classname;      // spawn function
.string		model;
.float		frame;
.float		skin;
.float		effects;

.vector		mins, maxs;     // bounding box extents reletive to origin
.vector		size;           // maxs - mins

.void()		touch;
.void()		use;
.void()		think;
.void()		blocked;        // for doors or plats, called when can't push other

.float		nextthink;
.entity		chain;
.string		netname;
.entity 	enemy;
.float		flags;
.float		colormap;
.entity		owner;
&lt;/pre&gt;
==Builtins==
&lt;pre&gt;
// core functions from standard quake
void(vector ang) makevectors = #1;
void(entity e, vector o) setorigin = #2;
void(entity e, string m) setmodel = #3;
void(entity e, vector min, vector max) setsize = #4;
void(entity e, vector min, vector max) setabssize = #5;
void() break = #6;
float() random = #7;
void(entity e, float chan, string samp) sound = #8;
vector(vector v) normalize = #9;
void(string e) error = #10;
void(string e) objerror = #11;
float(vector v) vlen = #12;
float(vector v) vectoyaw = #13;
entity() spawn = #14;
void(entity e) remove = #15;
float(vector v1, vector v2, float tryents) traceline = #16;
entity() checkclient = #17;
entity(entity start, .string fld, string match) find = #18;
void(string s) precache_sound = #19;
void(string s) precache_model = #20;
void(entity client, string s, ...) stuffcmd = #21;
entity(vector org, float rad) findradius = #22;

string(float f) ftos = #26;
string(vector v) vtos = #27;
void() coredump = #28;
void() traceon = #29;
void() traceoff = #30;
void(entity e) eprint = #31;
float(float yaw, float dist) walkmove = #32;

float() droptofloor = #34;
void(float style, string value) lightstyle = #35;
float(float v) rint = #36;
float(float v) floor = #37;
float(float v) ceil = #38;

float(entity e) checkbottom = #40;
float(vector v) pointcontents = #41;

float(float f) fabs = #43;
float(string s) cvar = #45;
void(string s) localcmd = #46;
entity(entity e) nextent = #47;
void(vector o, vector d, float color, float count) particle = #48;
void() ChangeYaw = #49;

vector(vector v) vectoangles = #51;

string(string s) precache_file = #68;
void(entity e) makestatic = #69;

void(string var, string val) cvar_set = #72;

void(vector pos, string samp, float vol, float atten) ambientsound = #74;
string(string s) precache_model2 = #75;
string(string s) precache_sound2 = #76;
string(string s) precache_file2 = #77;

// core ext_csqc functions
void() clearscene = #300;
void(float mask) addentities = #301;
void(entity ent) addentity = #302;
float(float property, ...) setproperty = #303;
void() renderscene = #304;
void(vector org, float radius, vector lightcolours) adddynamiclight = #305;
void(string texturename, float flag[, float is2d, float lines]) R_BeginPolygon = #306;
void(vector org, vector texcoords, vector rgb, float alpha) R_PolygonVertex = #307;
void() R_EndPolygon = #308;

vector (vector v) cs_unproject = #310;
vector (vector v) cs_project = #311;

void(float width, vector pos1, vector pos2, float flag) drawline = #315;
float(string name) iscachedpic = #316;
string(string name, float trywad) precache_pic = #317;
vector(string picname) draw_getimagesize = #318;
void(string name) freepic = #319;
float(vector position, float character, vector scale, vector rgb, float alpha, float flag) drawcharacter = #320;
float(vector position, string text, vector scale, vector rgb, float alpha, float flag) drawstring = #321;
float(vector position, string pic, vector size, vector rgb, float alpha, float flag) drawpic = #322;
float(vector position, vector size, vector rgb, float alpha, float flag) drawfill = #323;
void(float x, float y, float width, float height) drawsetcliparea = #324;
void(void) drawresetcliparea = #325;
float drawcolorcodedstring(vector position, string text, vector scale, vector rgb, float alpha, float flag) = #326;


&lt;/pre&gt;</text>
      <sha1>llxgt90ntzpdhtuf67c8xuivu9ck1tx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>303</id>
      <parentid>302</parentid>
      <timestamp>2008-01-17T15:52:36Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Builtins */</comment>
      <text xml:space="preserve" bytes="7337">==System Globals==
&lt;pre&gt;
entity		self;
entity		other;
entity		world;
float		time;
float		frametime;

float 		player_localentnum;     //the entnum
float 		player_localnum;        //the playernum
float		maxclients;             //a constant filled in by the engine

float		clientcommandframe;     //player movement
float		servercommandframe;     //clientframe echoed off the server
string		mapname;

//
// global variables set by built in functions
//
vector		v_forward, v_up, v_right;  // set by makevectors()

// set by traceline / tracebox
float		trace_allsolid;
float		trace_startsolid;
float		trace_fraction;
vector		trace_endpos;
vector		trace_plane_normal;
float		trace_plane_dist;
entity		trace_ent;
float		trace_inopen;
float		trace_inwater;

//
// required prog functions
//
void()		CSQC_Init;
void()		CSQC_Shutdown;
float(float f, float t)	CSQC_InputEvent;
void()		CSQC_UpdateView;
float(string s)	CSQC_ConsoleCommand;

//these fields are read and set by the default player physics
vector		pmove_org;
vector		pmove_vel;
vector		pmove_mins;
vector		pmove_maxs;
//retrieved from the current movement commands (read by player physics)
float		input_timelength;
vector		input_angles;
vector		input_movevalues;  //forwards, right, up.
float		input_buttons;     //attack, use, jump (default physics only uses jump)

float		movevar_gravity;
float		movevar_stopspeed;
float		movevar_maxspeed;
float		movevar_spectatormaxspeed;  //used by NOCLIP movetypes.
float		movevar_accelerate;
float		movevar_airaccelerate;
float		movevar_wateraccelerate;
float		movevar_friction;
float		movevar_waterfriction;
float		movevar_entgravity;	//the local player's gravity field. Is a multiple (1 is the normal value)
&lt;/pre&gt;
==System Fields==
&lt;pre&gt;
.float		modelindex;     // *** model index in the precached list
.vector		absmin, absmax;	// *** origin + mins / maxs

.float		entnum;         // *** the ent number as on the server
.float		drawmask;
.void()		predraw;
.float		movetype;
.float		solid;

.vector		origin;         // ***
.vector		oldorigin;      // ***
.vector		velocity;
.vector		angles;
.vector		avelocity;

.string		classname;      // spawn function
.string		model;
.float		frame;
.float		skin;
.float		effects;

.vector		mins, maxs;     // bounding box extents reletive to origin
.vector		size;           // maxs - mins

.void()		touch;
.void()		use;
.void()		think;
.void()		blocked;        // for doors or plats, called when can't push other

.float		nextthink;
.entity		chain;
.string		netname;
.entity 	enemy;
.float		flags;
.float		colormap;
.entity		owner;
&lt;/pre&gt;
==Builtins==
&lt;pre&gt;
// core functions from standard quake
void(vector ang) makevectors = #1;
void(entity e, vector o) setorigin = #2;
void(entity e, string m) setmodel = #3;
void(entity e, vector min, vector max) setsize = #4;
void(entity e, vector min, vector max) setabssize = #5;
void() break = #6;
float() random = #7;
void(entity e, float chan, string samp) sound = #8;
vector(vector v) normalize = #9;
void(string e) error = #10;
void(string e) objerror = #11;
float(vector v) vlen = #12;
float(vector v) vectoyaw = #13;
entity() spawn = #14;
void(entity e) remove = #15;
float(vector v1, vector v2, float tryents) traceline = #16;
entity() checkclient = #17;
entity(entity start, .string fld, string match) find = #18;
void(string s) precache_sound = #19;
void(string s) precache_model = #20;
void(entity client, string s, ...) stuffcmd = #21;
entity(vector org, float rad) findradius = #22;

string(float f) ftos = #26;
string(vector v) vtos = #27;
void() coredump = #28;
void() traceon = #29;
void() traceoff = #30;
void(entity e) eprint = #31;
float(float yaw, float dist) walkmove = #32;

float() droptofloor = #34;
void(float style, string value) lightstyle = #35;
float(float v) rint = #36;
float(float v) floor = #37;
float(float v) ceil = #38;

float(entity e) checkbottom = #40;
float(vector v) pointcontents = #41;

float(float f) fabs = #43;
float(string s) cvar = #45;
void(string s) localcmd = #46;
entity(entity e) nextent = #47;
void(vector o, vector d, float color, float count) particle = #48;
void() ChangeYaw = #49;

vector(vector v) vectoangles = #51;

string(string s) precache_file = #68;
void(entity e) makestatic = #69;

void(string var, string val) cvar_set = #72;

void(vector pos, string samp, float vol, float atten) ambientsound = #74;
string(string s) precache_model2 = #75;
string(string s) precache_sound2 = #76;
string(string s) precache_file2 = #77;

// core ext_csqc functions
void() clearscene = #300;
void(float mask) addentities = #301;
void(entity ent) addentity = #302;
float(float property, ...) setproperty = #303;
void() renderscene = #304;
void(vector org, float radius, vector lightcolours) adddynamiclight = #305;
void(string texturename, float flag[, float is2d, float lines]) R_BeginPolygon = #306;
void(vector org, vector texcoords, vector rgb, float alpha) R_PolygonVertex = #307;
void() R_EndPolygon = #308;

vector (vector v) cs_unproject = #310;
vector (vector v) cs_project = #311;

void(float width, vector pos1, vector pos2, float flag) drawline = #315;
float(string name) iscachedpic = #316;
string(string name, float trywad) precache_pic = #317;
vector(string picname) draw_getimagesize = #318;
void(string name) freepic = #319;
float(vector position, float character, vector scale, vector rgb, float alpha, float flag) drawcharacter = #320;
float(vector position, string text, vector scale, vector rgb, float alpha, float flag) drawstring = #321;
float(vector position, string pic, vector size, vector rgb, float alpha, float flag) drawpic = #322;
float(vector position, vector size, vector rgb, float alpha, float flag) drawfill = #323;
void(float x, float y, float width, float height) drawsetcliparea = #324;
void(void) drawresetcliparea = #325;
float drawcolorcodedstring(vector position, string text, vector scale, vector rgb, float alpha, float flag) = #326;

float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;

void(entity e, float mdlindex) setmodelindex = #333;
string(float mdlindex) modelnameforindex = #334;
float(string effectname) particleeffectnum = #335;
void(entity ent, float effectnum, vector start, vector end) trailparticles = #336;
void(float effectnum, vector origin [, vector dir, float count]) pointparticles = #337;
void(string s, ...) centerprint = #338;
void(string s, ...) print = #339;
string(float keynum) keynumtostring = #340;
float(string keyname) stringtokeynum = #341;
string(float keynum) getkeybind = #342;
void(float usecursor) setcursormode = #343;
vector() getmousepos = #344;
float(float framenum) getinputstate = #345;
void(float sens) setsensitivityscaler = #346;
void() runstandardplayerphysics = #347;
string(float playernum, string keyname) getplayerkeyvalue = #348;
float() isdemo = #349;
float() isserver = #350;
void(vector origin, vector forward, vector right, vector up) SetListener = #351;
void(string cmdname) registercommand = #352;
float(entity ent) wasfreed = #353;
string(string key) serverkey = #354;

float() ReadByte = #360;
float() ReadChar = #361;
float() ReadShort = #362;
float() ReadLong = #363;
float() ReadCoord = #364;
float() ReadAngle = #365;
string() ReadString = #366;	//warning: this returns a temporary!
float() ReadFloat = #367;
&lt;/pre&gt;</text>
      <sha1>e8k1xylfvam561pn3lz78fdi9mkgbk2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>315</id>
      <parentid>303</parentid>
      <timestamp>2008-01-17T16:56:01Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Builtins */</comment>
      <text xml:space="preserve" bytes="7345">==System Globals==
&lt;pre&gt;
entity		self;
entity		other;
entity		world;
float		time;
float		frametime;

float 		player_localentnum;     //the entnum
float 		player_localnum;        //the playernum
float		maxclients;             //a constant filled in by the engine

float		clientcommandframe;     //player movement
float		servercommandframe;     //clientframe echoed off the server
string		mapname;

//
// global variables set by built in functions
//
vector		v_forward, v_up, v_right;  // set by makevectors()

// set by traceline / tracebox
float		trace_allsolid;
float		trace_startsolid;
float		trace_fraction;
vector		trace_endpos;
vector		trace_plane_normal;
float		trace_plane_dist;
entity		trace_ent;
float		trace_inopen;
float		trace_inwater;

//
// required prog functions
//
void()		CSQC_Init;
void()		CSQC_Shutdown;
float(float f, float t)	CSQC_InputEvent;
void()		CSQC_UpdateView;
float(string s)	CSQC_ConsoleCommand;

//these fields are read and set by the default player physics
vector		pmove_org;
vector		pmove_vel;
vector		pmove_mins;
vector		pmove_maxs;
//retrieved from the current movement commands (read by player physics)
float		input_timelength;
vector		input_angles;
vector		input_movevalues;  //forwards, right, up.
float		input_buttons;     //attack, use, jump (default physics only uses jump)

float		movevar_gravity;
float		movevar_stopspeed;
float		movevar_maxspeed;
float		movevar_spectatormaxspeed;  //used by NOCLIP movetypes.
float		movevar_accelerate;
float		movevar_airaccelerate;
float		movevar_wateraccelerate;
float		movevar_friction;
float		movevar_waterfriction;
float		movevar_entgravity;	//the local player's gravity field. Is a multiple (1 is the normal value)
&lt;/pre&gt;
==System Fields==
&lt;pre&gt;
.float		modelindex;     // *** model index in the precached list
.vector		absmin, absmax;	// *** origin + mins / maxs

.float		entnum;         // *** the ent number as on the server
.float		drawmask;
.void()		predraw;
.float		movetype;
.float		solid;

.vector		origin;         // ***
.vector		oldorigin;      // ***
.vector		velocity;
.vector		angles;
.vector		avelocity;

.string		classname;      // spawn function
.string		model;
.float		frame;
.float		skin;
.float		effects;

.vector		mins, maxs;     // bounding box extents reletive to origin
.vector		size;           // maxs - mins

.void()		touch;
.void()		use;
.void()		think;
.void()		blocked;        // for doors or plats, called when can't push other

.float		nextthink;
.entity		chain;
.string		netname;
.entity 	enemy;
.float		flags;
.float		colormap;
.entity		owner;
&lt;/pre&gt;
==Builtins==
&lt;pre&gt;
// core functions from standard quake
void(vector ang) makevectors = #1;
void(entity e, vector o) setorigin = #2;
void(entity e, string m) setmodel = #3;
void(entity e, vector min, vector max) setsize = #4;
void(entity e, vector min, vector max) setabssize = #5;
void() break = #6;
float() random = #7;
void(entity e, float chan, string samp) sound = #8;
vector(vector v) normalize = #9;
void(string e) error = #10;
void(string e) objerror = #11;
float(vector v) vlen = #12;
float(vector v) vectoyaw = #13;
entity() spawn = #14;
void(entity e) remove = #15;
float(vector v1, vector v2, float tryents) traceline = #16;
entity() checkclient = #17;
entity(entity start, .string fld, string match) find = #18;
void(string s) precache_sound = #19;
void(string s) precache_model = #20;
void(entity client, string s, ...) stuffcmd = #21;
entity(vector org, float rad) findradius = #22;

string(float f) ftos = #26;
string(vector v) vtos = #27;
void() coredump = #28;
void() traceon = #29;
void() traceoff = #30;
void(entity e) eprint = #31;
float(float yaw, float dist) walkmove = #32;

float() droptofloor = #34;
void(float style, string value) lightstyle = #35;
float(float v) rint = #36;
float(float v) floor = #37;
float(float v) ceil = #38;

float(entity e) checkbottom = #40;
float(vector v) pointcontents = #41;

float(float f) fabs = #43;
float(string s) cvar = #45;
void(string s) localcmd = #46;
entity(entity e) nextent = #47;
void(vector o, vector d, float color, float count) particle = #48;
void() ChangeYaw = #49;

vector(vector v) vectoangles = #51;

string(string s) precache_file = #68;
void(entity e) makestatic = #69;

void(string var, string val) cvar_set = #72;

void(vector pos, string samp, float vol, float atten) ambientsound = #74;
string(string s) precache_model2 = #75;
string(string s) precache_sound2 = #76;
string(string s) precache_file2 = #77;

// core ext_csqc functions
void() R_ClearScene = #300;
void(float mask) R_AddEntities = #301;
void(entity ent) R_AddEntity = #302;
float(float property, ...) R_SetView = #303;
void() R_RenderScene = #304;
void(vector org, float radius, vector lightcolours) R_AddDynamicLight = #305;
void(string texturename, float flag[, float is2d, float lines]) R_BeginPolygon = #306;
void(vector org, vector texcoords, vector rgb, float alpha) R_PolygonVertex = #307;
void() R_EndPolygon = #308;

vector (vector v) cs_unproject = #310;
vector (vector v) cs_project = #311;

void(float width, vector pos1, vector pos2, float flag) drawline = #315;
float(string name) iscachedpic = #316;
string(string name, float trywad) precache_pic = #317;
vector(string picname) draw_getimagesize = #318;
void(string name) freepic = #319;
float(vector position, float character, vector scale, vector rgb, float alpha, float flag) drawcharacter = #320;
float(vector position, string text, vector scale, vector rgb, float alpha, float flag) drawstring = #321;
float(vector position, string pic, vector size, vector rgb, float alpha, float flag) drawpic = #322;
float(vector position, vector size, vector rgb, float alpha, float flag) drawfill = #323;
void(float x, float y, float width, float height) drawsetcliparea = #324;
void(void) drawresetcliparea = #325;
float drawcolorcodedstring(vector position, string text, vector scale, vector rgb, float alpha, float flag) = #326;

float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;

void(entity e, float mdlindex) setmodelindex = #333;
string(float mdlindex) modelnameforindex = #334;
float(string effectname) particleeffectnum = #335;
void(entity ent, float effectnum, vector start, vector end) trailparticles = #336;
void(float effectnum, vector origin [, vector dir, float count]) pointparticles = #337;
void(string s, ...) centerprint = #338;
void(string s, ...) print = #339;
string(float keynum) keynumtostring = #340;
float(string keyname) stringtokeynum = #341;
string(float keynum) getkeybind = #342;
void(float usecursor) setcursormode = #343;
vector() getmousepos = #344;
float(float framenum) getinputstate = #345;
void(float sens) setsensitivityscaler = #346;
void() runstandardplayerphysics = #347;
string(float playernum, string keyname) getplayerkeyvalue = #348;
float() isdemo = #349;
float() isserver = #350;
void(vector origin, vector forward, vector right, vector up) SetListener = #351;
void(string cmdname) registercommand = #352;
float(entity ent) wasfreed = #353;
string(string key) serverkey = #354;

float() ReadByte = #360;
float() ReadChar = #361;
float() ReadShort = #362;
float() ReadLong = #363;
float() ReadCoord = #364;
float() ReadAngle = #365;
string() ReadString = #366;	//warning: this returns a temporary!
float() ReadFloat = #367;
&lt;/pre&gt;</text>
      <sha1>875tin2zlhxgzpmmoislqur71xp4tib</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>327</id>
      <parentid>315</parentid>
      <timestamp>2008-01-17T20:05:09Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="9759">==System Globals==
&lt;pre&gt;
entity		self;
entity		other;
entity		world;
float		time;
float		frametime;

float 		player_localentnum;     //the entnum
float 		player_localnum;        //the playernum
float		maxclients;             //a constant filled in by the engine

float		clientcommandframe;     //player movement
float		servercommandframe;     //clientframe echoed off the server
string		mapname;

//
// global variables set by built in functions
//
vector		v_forward, v_up, v_right;  // set by makevectors()

// set by traceline / tracebox
float		trace_allsolid;
float		trace_startsolid;
float		trace_fraction;
vector		trace_endpos;
vector		trace_plane_normal;
float		trace_plane_dist;
entity		trace_ent;
float		trace_inopen;
float		trace_inwater;

//
// required prog functions
//
void()		CSQC_Init;
void()		CSQC_Shutdown;
float(float f, float t)	CSQC_InputEvent;
void()		CSQC_UpdateView;
float(string s)	CSQC_ConsoleCommand;

//these fields are read and set by the default player physics
vector		pmove_org;
vector		pmove_vel;
vector		pmove_mins;
vector		pmove_maxs;
//retrieved from the current movement commands (read by player physics)
float		input_timelength;
vector		input_angles;
vector		input_movevalues;  //forwards, right, up.
float		input_buttons;     //attack, use, jump (default physics only uses jump)

float		movevar_gravity;
float		movevar_stopspeed;
float		movevar_maxspeed;
float		movevar_spectatormaxspeed;  //used by NOCLIP movetypes.
float		movevar_accelerate;
float		movevar_airaccelerate;
float		movevar_wateraccelerate;
float		movevar_friction;
float		movevar_waterfriction;
float		movevar_entgravity;	//the local player's gravity field. Is a multiple (1 is the normal value)
&lt;/pre&gt;
==System Fields==
&lt;pre&gt;
.float		modelindex;     // *** model index in the precached list
.vector		absmin, absmax;	// *** origin + mins / maxs

.float		entnum;         // *** the ent number as on the server
.float		drawmask;
.void()		predraw;
.float		movetype;
.float		solid;

.vector		origin;         // ***
.vector		oldorigin;      // ***
.vector		velocity;
.vector		angles;
.vector		avelocity;

.string		classname;      // spawn function
.string		model;
.float		frame;
.float		skin;
.float		effects;

.vector		mins, maxs;     // bounding box extents reletive to origin
.vector		size;           // maxs - mins

.void()		touch;
.void()		use;
.void()		think;
.void()		blocked;        // for doors or plats, called when can't push other

.float		nextthink;
.entity		chain;
.string		netname;
.entity 	enemy;
.float		flags;
.float		colormap;
.entity		owner;
&lt;/pre&gt;
==Builtins==
&lt;pre&gt;
// core functions from standard quake
void(vector ang) makevectors = #1;
void(entity e, vector o) setorigin = #2;
void(entity e, string m) setmodel = #3;
void(entity e, vector min, vector max) setsize = #4;
void(entity e, vector min, vector max) setabssize = #5;
void() break = #6;
float() random = #7;
void(entity e, float chan, string samp) sound = #8;
vector(vector v) normalize = #9;
void(string e) error = #10;
void(string e) objerror = #11;
float(vector v) vlen = #12;
float(vector v) vectoyaw = #13;
entity() spawn = #14;
void(entity e) remove = #15;
float(vector v1, vector v2, float tryents) traceline = #16;
entity() checkclient = #17;
entity(entity start, .string fld, string match) find = #18;
void(string s) precache_sound = #19;
void(string s) precache_model = #20;
void(entity client, string s, ...) stuffcmd = #21;
entity(vector org, float rad) findradius = #22;

string(float f) ftos = #26;
string(vector v) vtos = #27;
void() coredump = #28;
void() traceon = #29;
void() traceoff = #30;
void(entity e) eprint = #31;
float(float yaw, float dist) walkmove = #32;

float() droptofloor = #34;
void(float style, string value) lightstyle = #35;
float(float v) rint = #36;
float(float v) floor = #37;
float(float v) ceil = #38;

float(entity e) checkbottom = #40;
float(vector v) pointcontents = #41;

float(float f) fabs = #43;
float(string s) cvar = #45;
void(string s) localcmd = #46;
entity(entity e) nextent = #47;
void(vector o, vector d, float color, float count) particle = #48;
void() ChangeYaw = #49;

vector(vector v) vectoangles = #51;

string(string s) precache_file = #68;
void(entity e) makestatic = #69;

void(string var, string val) cvar_set = #72;

void(vector pos, string samp, float vol, float atten) ambientsound = #74;
string(string s) precache_model2 = #75;
string(string s) precache_sound2 = #76;
string(string s) precache_file2 = #77;

// core ext_csqc functions
void() R_ClearScene = #300;
void(float mask) R_AddEntities = #301;
void(entity ent) R_AddEntity = #302;
float(float property, ...) R_SetView = #303;
void() R_RenderScene = #304;
void(vector org, float radius, vector lightcolours) R_AddDynamicLight = #305;
void(string texturename, float flag[, float is2d, float lines]) R_BeginPolygon = #306;
void(vector org, vector texcoords, vector rgb, float alpha) R_PolygonVertex = #307;
void() R_EndPolygon = #308;

vector (vector v) cs_unproject = #310;
vector (vector v) cs_project = #311;

void(float width, vector pos1, vector pos2, float flag) drawline = #315;
float(string name) iscachedpic = #316;
string(string name, float trywad) precache_pic = #317;
vector(string picname) draw_getimagesize = #318;
void(string name) freepic = #319;
float(vector position, float character, vector scale, vector rgb, float alpha, float flag) drawcharacter = #320;
float(vector position, string text, vector scale, vector rgb, float alpha, float flag) drawstring = #321;
float(vector position, string pic, vector size, vector rgb, float alpha, float flag) drawpic = #322;
float(vector position, vector size, vector rgb, float alpha, float flag) drawfill = #323;
void(float x, float y, float width, float height) drawsetcliparea = #324;
void(void) drawresetcliparea = #325;
float drawcolorcodedstring(vector position, string text, vector scale, vector rgb, float alpha, float flag) = #326;

float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;

void(entity e, float mdlindex) setmodelindex = #333;
string(float mdlindex) modelnameforindex = #334;
float(string effectname) particleeffectnum = #335;
void(entity ent, float effectnum, vector start, vector end) trailparticles = #336;
void(float effectnum, vector origin [, vector dir, float count]) pointparticles = #337;
void(string s, ...) centerprint = #338;
void(string s, ...) print = #339;
string(float keynum) keynumtostring = #340;
float(string keyname) stringtokeynum = #341;
string(float keynum) getkeybind = #342;
void(float usecursor) setcursormode = #343;
vector() getmousepos = #344;
float(float framenum) getinputstate = #345;
void(float sens) setsensitivityscaler = #346;
void() runstandardplayerphysics = #347;
string(float playernum, string keyname) getplayerkeyvalue = #348;
float() isdemo = #349;
float() isserver = #350;
void(vector origin, vector forward, vector right, vector up) SetListener = #351;
void(string cmdname) registercommand = #352;
float(entity ent) wasfreed = #353;
string(string key) serverkey = #354;

float() ReadByte = #360;
float() ReadChar = #361;
float() ReadShort = #362;
float() ReadLong = #363;
float() ReadCoord = #364;
float() ReadAngle = #365;
string() ReadString = #366;	//warning: this returns a temporary!
float() ReadFloat = #367;
&lt;/pre&gt;
==Constants==
&lt;pre&gt;
// add-entity mask bits
float MASK_ENGINE           = 1;
float MASK_ENGINEVIEWMODELS = 2;
float MASK_NORMAL           = 4;

// renderflag bits
float RF_VIEWMODEL          = 1;
float RF_EXTERNALMODEL      = 2;
float RF_DEPTHHACK          = 4;
float RF_ADDITIVE           = 8;
float RF_USEAXIS            = 16;

// flags for 2d drawing
float DRAWFLAG_NORMAL       = 0;
float DRAWFLAG_ADDITIVE     = 1;
float DRAWFLAG_MODULATE     = 2;
float DRAWFLAG_2XMODULATE   = 3;

// setview parameter
float VF_MIN                = 1;    //(vector)
float VF_MIN_X              = 2;    //(float)
float VF_MIN_Y              = 3;    //(float)
float VF_SIZE               = 4;    //(vector) (viewport size)
float VF_SIZE_Y             = 5;    //(float)
float VF_SIZE_X             = 6;    //(float)
float VF_VIEWPORT           = 7;    //(vector, vector)
float VF_FOV                = 8;    //(vector)
float VF_FOVX               = 9;    //(float)
float VF_FOVY               = 10;   //(float)
float VF_ORIGIN             = 11;   //(vector)
float VF_ORIGIN_X           = 12;   //(float)
float VF_ORIGIN_Y           = 13;   //(float)
float VF_ORIGIN_Z           = 14;   //(float)
float VF_ANGLES             = 15;   //(vector)
float VF_ANGLES_X           = 16;   //(float)
float VF_ANGLES_Y           = 17;   //(float)
float VF_ANGLES_Z           = 18;   //(float)
float VF_DRAWWORLD          = 19;   //(float)
float VF_DRAWENGINESBAR     = 20;   //(float)
float VF_DRAWCROSSHAIR      = 21;   //(float)

float VF_CL_VIEWANGLES      = 33;   //(vector)
float VF_CL_VIEWANGLES_X    = 34;   //(float)
float VF_CL_VIEWANGLES_Y    = 35;   //(float)
float VF_CL_VIEWANGLES_Z    = 36;   //(float)

float VF_PERSPECTIVE        = 200;  //(float)

// stats
// 0 - 31 are reserved for standard engine stats
// 32 - 128 are for QuakeC modders
float STAT_HEALTH           = 0;
float STAT_WEAPONMODEL      = 2;
float STAT_AMMO             = 3;
float STAT_ARMOR            = 4;
float STAT_WEAPONFRAME      = 5;
float STAT_SHELLS           = 6;
float STAT_NAILS            = 7;
float STAT_ROCKETS          = 8;
float STAT_CELLS            = 9;
float STAT_ACTIVEWEAPON     = 10;
float STAT_TOTALSECRETS     = 11;
float STAT_TOTALMONSTERS    = 12;
float STAT_SECRETS          = 13; // bumped on client side by svc_foundsecret
float STAT_MONSTERS         = 14; // bumped by svc_killedmonster
float STAT_ITEMS            = 15;
&lt;/pre&gt;</text>
      <sha1>rpe39v7d4j9pti61nzx7v97nwl44dxp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>328</id>
      <parentid>327</parentid>
      <timestamp>2008-01-18T12:03:58Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Constants */</comment>
      <text xml:space="preserve" bytes="9793">==System Globals==
&lt;pre&gt;
entity		self;
entity		other;
entity		world;
float		time;
float		frametime;

float 		player_localentnum;     //the entnum
float 		player_localnum;        //the playernum
float		maxclients;             //a constant filled in by the engine

float		clientcommandframe;     //player movement
float		servercommandframe;     //clientframe echoed off the server
string		mapname;

//
// global variables set by built in functions
//
vector		v_forward, v_up, v_right;  // set by makevectors()

// set by traceline / tracebox
float		trace_allsolid;
float		trace_startsolid;
float		trace_fraction;
vector		trace_endpos;
vector		trace_plane_normal;
float		trace_plane_dist;
entity		trace_ent;
float		trace_inopen;
float		trace_inwater;

//
// required prog functions
//
void()		CSQC_Init;
void()		CSQC_Shutdown;
float(float f, float t)	CSQC_InputEvent;
void()		CSQC_UpdateView;
float(string s)	CSQC_ConsoleCommand;

//these fields are read and set by the default player physics
vector		pmove_org;
vector		pmove_vel;
vector		pmove_mins;
vector		pmove_maxs;
//retrieved from the current movement commands (read by player physics)
float		input_timelength;
vector		input_angles;
vector		input_movevalues;  //forwards, right, up.
float		input_buttons;     //attack, use, jump (default physics only uses jump)

float		movevar_gravity;
float		movevar_stopspeed;
float		movevar_maxspeed;
float		movevar_spectatormaxspeed;  //used by NOCLIP movetypes.
float		movevar_accelerate;
float		movevar_airaccelerate;
float		movevar_wateraccelerate;
float		movevar_friction;
float		movevar_waterfriction;
float		movevar_entgravity;	//the local player's gravity field. Is a multiple (1 is the normal value)
&lt;/pre&gt;
==System Fields==
&lt;pre&gt;
.float		modelindex;     // *** model index in the precached list
.vector		absmin, absmax;	// *** origin + mins / maxs

.float		entnum;         // *** the ent number as on the server
.float		drawmask;
.void()		predraw;
.float		movetype;
.float		solid;

.vector		origin;         // ***
.vector		oldorigin;      // ***
.vector		velocity;
.vector		angles;
.vector		avelocity;

.string		classname;      // spawn function
.string		model;
.float		frame;
.float		skin;
.float		effects;

.vector		mins, maxs;     // bounding box extents reletive to origin
.vector		size;           // maxs - mins

.void()		touch;
.void()		use;
.void()		think;
.void()		blocked;        // for doors or plats, called when can't push other

.float		nextthink;
.entity		chain;
.string		netname;
.entity 	enemy;
.float		flags;
.float		colormap;
.entity		owner;
&lt;/pre&gt;
==Builtins==
&lt;pre&gt;
// core functions from standard quake
void(vector ang) makevectors = #1;
void(entity e, vector o) setorigin = #2;
void(entity e, string m) setmodel = #3;
void(entity e, vector min, vector max) setsize = #4;
void(entity e, vector min, vector max) setabssize = #5;
void() break = #6;
float() random = #7;
void(entity e, float chan, string samp) sound = #8;
vector(vector v) normalize = #9;
void(string e) error = #10;
void(string e) objerror = #11;
float(vector v) vlen = #12;
float(vector v) vectoyaw = #13;
entity() spawn = #14;
void(entity e) remove = #15;
float(vector v1, vector v2, float tryents) traceline = #16;
entity() checkclient = #17;
entity(entity start, .string fld, string match) find = #18;
void(string s) precache_sound = #19;
void(string s) precache_model = #20;
void(entity client, string s, ...) stuffcmd = #21;
entity(vector org, float rad) findradius = #22;

string(float f) ftos = #26;
string(vector v) vtos = #27;
void() coredump = #28;
void() traceon = #29;
void() traceoff = #30;
void(entity e) eprint = #31;
float(float yaw, float dist) walkmove = #32;

float() droptofloor = #34;
void(float style, string value) lightstyle = #35;
float(float v) rint = #36;
float(float v) floor = #37;
float(float v) ceil = #38;

float(entity e) checkbottom = #40;
float(vector v) pointcontents = #41;

float(float f) fabs = #43;
float(string s) cvar = #45;
void(string s) localcmd = #46;
entity(entity e) nextent = #47;
void(vector o, vector d, float color, float count) particle = #48;
void() ChangeYaw = #49;

vector(vector v) vectoangles = #51;

string(string s) precache_file = #68;
void(entity e) makestatic = #69;

void(string var, string val) cvar_set = #72;

void(vector pos, string samp, float vol, float atten) ambientsound = #74;
string(string s) precache_model2 = #75;
string(string s) precache_sound2 = #76;
string(string s) precache_file2 = #77;

// core ext_csqc functions
void() R_ClearScene = #300;
void(float mask) R_AddEntities = #301;
void(entity ent) R_AddEntity = #302;
float(float property, ...) R_SetView = #303;
void() R_RenderScene = #304;
void(vector org, float radius, vector lightcolours) R_AddDynamicLight = #305;
void(string texturename, float flag[, float is2d, float lines]) R_BeginPolygon = #306;
void(vector org, vector texcoords, vector rgb, float alpha) R_PolygonVertex = #307;
void() R_EndPolygon = #308;

vector (vector v) cs_unproject = #310;
vector (vector v) cs_project = #311;

void(float width, vector pos1, vector pos2, float flag) drawline = #315;
float(string name) iscachedpic = #316;
string(string name, float trywad) precache_pic = #317;
vector(string picname) draw_getimagesize = #318;
void(string name) freepic = #319;
float(vector position, float character, vector scale, vector rgb, float alpha, float flag) drawcharacter = #320;
float(vector position, string text, vector scale, vector rgb, float alpha, float flag) drawstring = #321;
float(vector position, string pic, vector size, vector rgb, float alpha, float flag) drawpic = #322;
float(vector position, vector size, vector rgb, float alpha, float flag) drawfill = #323;
void(float x, float y, float width, float height) drawsetcliparea = #324;
void(void) drawresetcliparea = #325;
float drawcolorcodedstring(vector position, string text, vector scale, vector rgb, float alpha, float flag) = #326;

float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;

void(entity e, float mdlindex) setmodelindex = #333;
string(float mdlindex) modelnameforindex = #334;
float(string effectname) particleeffectnum = #335;
void(entity ent, float effectnum, vector start, vector end) trailparticles = #336;
void(float effectnum, vector origin [, vector dir, float count]) pointparticles = #337;
void(string s, ...) centerprint = #338;
void(string s, ...) print = #339;
string(float keynum) keynumtostring = #340;
float(string keyname) stringtokeynum = #341;
string(float keynum) getkeybind = #342;
void(float usecursor) setcursormode = #343;
vector() getmousepos = #344;
float(float framenum) getinputstate = #345;
void(float sens) setsensitivityscaler = #346;
void() runstandardplayerphysics = #347;
string(float playernum, string keyname) getplayerkeyvalue = #348;
float() isdemo = #349;
float() isserver = #350;
void(vector origin, vector forward, vector right, vector up) SetListener = #351;
void(string cmdname) registercommand = #352;
float(entity ent) wasfreed = #353;
string(string key) serverkey = #354;

float() ReadByte = #360;
float() ReadChar = #361;
float() ReadShort = #362;
float() ReadLong = #363;
float() ReadCoord = #364;
float() ReadAngle = #365;
string() ReadString = #366;	//warning: this returns a temporary!
float() ReadFloat = #367;
&lt;/pre&gt;
==Constants==
&lt;pre&gt;
// add-entity mask bits
float MASK_ENGINE           = 1;
float MASK_ENGINEVIEWMODELS = 2;
float MASK_NORMAL           = 4;

// renderflag bits
float RF_VIEWMODEL          = 1;
float RF_EXTERNALMODEL      = 2;
float RF_DEPTHHACK          = 4;
float RF_ADDITIVE           = 8;
float RF_USEAXIS            = 16;

// flags for 2d drawing
float DRAWFLAG_NORMAL       = 0;
float DRAWFLAG_ADDITIVE     = 1;
float DRAWFLAG_MODULATE     = 2;
float DRAWFLAG_2XMODULATE   = 3;

// setview parameter
float VF_MIN                = 1;    //(vector)
float VF_MIN_X              = 2;    //(float)
float VF_MIN_Y              = 3;    //(float)
float VF_SIZE               = 4;    //(vector) (viewport size)
float VF_SIZE_Y             = 5;    //(float)
float VF_SIZE_X             = 6;    //(float)
float VF_VIEWPORT           = 7;    //(vector, vector)
float VF_FOV                = 8;    //(vector)
float VF_FOVX               = 9;    //(float)
float VF_FOVY               = 10;   //(float)
float VF_ORIGIN             = 11;   //(vector)
float VF_ORIGIN_X           = 12;   //(float)
float VF_ORIGIN_Y           = 13;   //(float)
float VF_ORIGIN_Z           = 14;   //(float)
float VF_ANGLES             = 15;   //(vector)
float VF_ANGLES_X           = 16;   //(float)
float VF_ANGLES_Y           = 17;   //(float)
float VF_ANGLES_Z           = 18;   //(float)
float VF_DRAWWORLD          = 19;   //(float)
float VF_DRAWENGINESBAR     = 20;   //(float)
float VF_DRAWCROSSHAIR      = 21;   //(float)

float VF_CL_VIEWANGLES      = 33;   //(vector)
float VF_CL_VIEWANGLES_X    = 34;   //(float)
float VF_CL_VIEWANGLES_Y    = 35;   //(float)
float VF_CL_VIEWANGLES_Z    = 36;   //(float)

float VF_PERSPECTIVE        = 200;  //(float)

// stats
// 0 - 31 are reserved for standard engine stats
// 32 - 128 are for QuakeC modders
float STAT_HEALTH           = 0;
float STAT_WEAPONMODEL      = 2;
float STAT_AMMO             = 3;
float STAT_ARMOR            = 4;
float STAT_WEAPONFRAME      = 5;
float STAT_SHELLS           = 6;
float STAT_NAILS            = 7;
float STAT_ROCKETS          = 8;
float STAT_CELLS            = 9;
float STAT_ACTIVEWEAPON     = 10;
float STAT_TOTALSECRETS     = 11;
float STAT_TOTALMONSTERS    = 12;
float STAT_SECRETS          = 13; // bumped on client side by svc_foundsecret
float STAT_MONSTERS         = 14; // bumped by svc_killedmonster
float STAT_ITEMS            = 15; // self.items bitmask from server
&lt;/pre&gt;</text>
      <sha1>81bqsal172dkyg7k2xapthwag3y9rdc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>357</id>
      <parentid>328</parentid>
      <timestamp>2008-02-10T12:39:32Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Constants */</comment>
      <text xml:space="preserve" bytes="10493">==System Globals==
&lt;pre&gt;
entity		self;
entity		other;
entity		world;
float		time;
float		frametime;

float 		player_localentnum;     //the entnum
float 		player_localnum;        //the playernum
float		maxclients;             //a constant filled in by the engine

float		clientcommandframe;     //player movement
float		servercommandframe;     //clientframe echoed off the server
string		mapname;

//
// global variables set by built in functions
//
vector		v_forward, v_up, v_right;  // set by makevectors()

// set by traceline / tracebox
float		trace_allsolid;
float		trace_startsolid;
float		trace_fraction;
vector		trace_endpos;
vector		trace_plane_normal;
float		trace_plane_dist;
entity		trace_ent;
float		trace_inopen;
float		trace_inwater;

//
// required prog functions
//
void()		CSQC_Init;
void()		CSQC_Shutdown;
float(float f, float t)	CSQC_InputEvent;
void()		CSQC_UpdateView;
float(string s)	CSQC_ConsoleCommand;

//these fields are read and set by the default player physics
vector		pmove_org;
vector		pmove_vel;
vector		pmove_mins;
vector		pmove_maxs;
//retrieved from the current movement commands (read by player physics)
float		input_timelength;
vector		input_angles;
vector		input_movevalues;  //forwards, right, up.
float		input_buttons;     //attack, use, jump (default physics only uses jump)

float		movevar_gravity;
float		movevar_stopspeed;
float		movevar_maxspeed;
float		movevar_spectatormaxspeed;  //used by NOCLIP movetypes.
float		movevar_accelerate;
float		movevar_airaccelerate;
float		movevar_wateraccelerate;
float		movevar_friction;
float		movevar_waterfriction;
float		movevar_entgravity;	//the local player's gravity field. Is a multiple (1 is the normal value)
&lt;/pre&gt;
==System Fields==
&lt;pre&gt;
.float		modelindex;     // *** model index in the precached list
.vector		absmin, absmax;	// *** origin + mins / maxs

.float		entnum;         // *** the ent number as on the server
.float		drawmask;
.void()		predraw;
.float		movetype;
.float		solid;

.vector		origin;         // ***
.vector		oldorigin;      // ***
.vector		velocity;
.vector		angles;
.vector		avelocity;

.string		classname;      // spawn function
.string		model;
.float		frame;
.float		skin;
.float		effects;

.vector		mins, maxs;     // bounding box extents reletive to origin
.vector		size;           // maxs - mins

.void()		touch;
.void()		use;
.void()		think;
.void()		blocked;        // for doors or plats, called when can't push other

.float		nextthink;
.entity		chain;
.string		netname;
.entity 	enemy;
.float		flags;
.float		colormap;
.entity		owner;
&lt;/pre&gt;
==Builtins==
&lt;pre&gt;
// core functions from standard quake
void(vector ang) makevectors = #1;
void(entity e, vector o) setorigin = #2;
void(entity e, string m) setmodel = #3;
void(entity e, vector min, vector max) setsize = #4;
void(entity e, vector min, vector max) setabssize = #5;
void() break = #6;
float() random = #7;
void(entity e, float chan, string samp) sound = #8;
vector(vector v) normalize = #9;
void(string e) error = #10;
void(string e) objerror = #11;
float(vector v) vlen = #12;
float(vector v) vectoyaw = #13;
entity() spawn = #14;
void(entity e) remove = #15;
float(vector v1, vector v2, float tryents) traceline = #16;
entity() checkclient = #17;
entity(entity start, .string fld, string match) find = #18;
void(string s) precache_sound = #19;
void(string s) precache_model = #20;
void(entity client, string s, ...) stuffcmd = #21;
entity(vector org, float rad) findradius = #22;

string(float f) ftos = #26;
string(vector v) vtos = #27;
void() coredump = #28;
void() traceon = #29;
void() traceoff = #30;
void(entity e) eprint = #31;
float(float yaw, float dist) walkmove = #32;

float() droptofloor = #34;
void(float style, string value) lightstyle = #35;
float(float v) rint = #36;
float(float v) floor = #37;
float(float v) ceil = #38;

float(entity e) checkbottom = #40;
float(vector v) pointcontents = #41;

float(float f) fabs = #43;
float(string s) cvar = #45;
void(string s) localcmd = #46;
entity(entity e) nextent = #47;
void(vector o, vector d, float color, float count) particle = #48;
void() ChangeYaw = #49;

vector(vector v) vectoangles = #51;

string(string s) precache_file = #68;
void(entity e) makestatic = #69;

void(string var, string val) cvar_set = #72;

void(vector pos, string samp, float vol, float atten) ambientsound = #74;
string(string s) precache_model2 = #75;
string(string s) precache_sound2 = #76;
string(string s) precache_file2 = #77;

// core ext_csqc functions
void() R_ClearScene = #300;
void(float mask) R_AddEntities = #301;
void(entity ent) R_AddEntity = #302;
float(float property, ...) R_SetView = #303;
void() R_RenderScene = #304;
void(vector org, float radius, vector lightcolours) R_AddDynamicLight = #305;
void(string texturename, float flag[, float is2d, float lines]) R_BeginPolygon = #306;
void(vector org, vector texcoords, vector rgb, float alpha) R_PolygonVertex = #307;
void() R_EndPolygon = #308;

vector (vector v) cs_unproject = #310;
vector (vector v) cs_project = #311;

void(float width, vector pos1, vector pos2, float flag) drawline = #315;
float(string name) iscachedpic = #316;
string(string name, float trywad) precache_pic = #317;
vector(string picname) draw_getimagesize = #318;
void(string name) freepic = #319;
float(vector position, float character, vector scale, vector rgb, float alpha, float flag) drawcharacter = #320;
float(vector position, string text, vector scale, vector rgb, float alpha, float flag) drawstring = #321;
float(vector position, string pic, vector size, vector rgb, float alpha, float flag) drawpic = #322;
float(vector position, vector size, vector rgb, float alpha, float flag) drawfill = #323;
void(float x, float y, float width, float height) drawsetcliparea = #324;
void(void) drawresetcliparea = #325;
float drawcolorcodedstring(vector position, string text, vector scale, vector rgb, float alpha, float flag) = #326;

float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;

void(entity e, float mdlindex) setmodelindex = #333;
string(float mdlindex) modelnameforindex = #334;
float(string effectname) particleeffectnum = #335;
void(entity ent, float effectnum, vector start, vector end) trailparticles = #336;
void(float effectnum, vector origin [, vector dir, float count]) pointparticles = #337;
void(string s, ...) centerprint = #338;
void(string s, ...) print = #339;
string(float keynum) keynumtostring = #340;
float(string keyname) stringtokeynum = #341;
string(float keynum) getkeybind = #342;
void(float usecursor) setcursormode = #343;
vector() getmousepos = #344;
float(float framenum) getinputstate = #345;
void(float sens) setsensitivityscaler = #346;
void() runstandardplayerphysics = #347;
string(float playernum, string keyname) getplayerkeyvalue = #348;
float() isdemo = #349;
float() isserver = #350;
void(vector origin, vector forward, vector right, vector up) SetListener = #351;
void(string cmdname) registercommand = #352;
float(entity ent) wasfreed = #353;
string(string key) serverkey = #354;

float() ReadByte = #360;
float() ReadChar = #361;
float() ReadShort = #362;
float() ReadLong = #363;
float() ReadCoord = #364;
float() ReadAngle = #365;
string() ReadString = #366;	//warning: this returns a temporary!
float() ReadFloat = #367;
&lt;/pre&gt;
==Constants==
&lt;pre&gt;
// add-entity mask bits
float MASK_ENGINE           = 1;
float MASK_ENGINEVIEWMODELS = 2;
float MASK_NORMAL           = 4;

// renderflag bits
float RF_VIEWMODEL          = 1;
float RF_EXTERNALMODEL      = 2;
float RF_DEPTHHACK          = 4;
float RF_ADDITIVE           = 8;
float RF_USEAXIS            = 16;

// flags for 2d drawing
float DRAWFLAG_NORMAL       = 0;
float DRAWFLAG_ADDITIVE     = 1;
float DRAWFLAG_MODULATE     = 2;
float DRAWFLAG_2XMODULATE   = 3;

// setview parameter
float VF_MIN                = 1;    //(vector)
float VF_MIN_X              = 2;    //(float)
float VF_MIN_Y              = 3;    //(float)
float VF_SIZE               = 4;    //(vector) (viewport size)
float VF_SIZE_Y             = 5;    //(float)
float VF_SIZE_X             = 6;    //(float)
float VF_VIEWPORT           = 7;    //(vector, vector)
float VF_FOV                = 8;    //(vector)
float VF_FOVX               = 9;    //(float)
float VF_FOVY               = 10;   //(float)
float VF_ORIGIN             = 11;   //(vector)
float VF_ORIGIN_X           = 12;   //(float)
float VF_ORIGIN_Y           = 13;   //(float)
float VF_ORIGIN_Z           = 14;   //(float)
float VF_ANGLES             = 15;   //(vector)
float VF_ANGLES_X           = 16;   //(float)
float VF_ANGLES_Y           = 17;   //(float)
float VF_ANGLES_Z           = 18;   //(float)
float VF_DRAWWORLD          = 19;   //(float)
float VF_DRAWENGINESBAR     = 20;   //(float)
float VF_DRAWCROSSHAIR      = 21;   //(float)

float VF_CL_VIEWANGLES      = 33;   //(vector)
float VF_CL_VIEWANGLES_X    = 34;   //(float)
float VF_CL_VIEWANGLES_Y    = 35;   //(float)
float VF_CL_VIEWANGLES_Z    = 36;   //(float)

float VF_PERSPECTIVE        = 200;  //(float)

// stats
// 0 - 31 are reserved for standard engine stats
// 32 - 128 are for QuakeC modders
float STAT_HEALTH           = 0;
float STAT_WEAPONMODEL      = 2;
float STAT_AMMO             = 3;
float STAT_ARMOR            = 4;
float STAT_WEAPONFRAME      = 5;
float STAT_SHELLS           = 6;
float STAT_NAILS            = 7;
float STAT_ROCKETS          = 8;
float STAT_CELLS            = 9;
float STAT_ACTIVEWEAPON     = 10;
float STAT_TOTALSECRETS     = 11;
float STAT_TOTALMONSTERS    = 12;
float STAT_SECRETS          = 13; // bumped on client side by svc_foundsecret
float STAT_MONSTERS         = 14; // bumped by svc_killedmonster
float STAT_ITEMS            = 15; // self.items bitmask from server

// buttons for input_buttons
float BUTTON_ATTACK         = 1;
float BUTTON_JUMP           = 2;
float BUTTON_3              = 4;
float BUTTON_4              = 8;
float BUTTON_5              = 16;
float BUTTON_6              = 32;
float BUTTON_7              = 64;
float BUTTON_8              = 128;
float BUTTON_USE            = 256;
float BUTTON_CHAT           = 512;
float BUTTON_PRYDONCURSOR   = 1024;
float BUTTON_9              = 2048;
float BUTTON_10             = 4096;
float BUTTON_11             = 8192;
float BUTTON_12             = 16384;
float BUTTON_13             = 32768;
float BUTTON_14             = 65536;
float BUTTON_15             = 131072;
float BUTTON_16             = 262144;
&lt;/pre&gt;</text>
      <sha1>qwx851v7ucnq9wjlw4ka5mbon8fwc5q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>358</id>
      <parentid>357</parentid>
      <timestamp>2008-02-10T12:40:00Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>/* Constants */</comment>
      <text xml:space="preserve" bytes="10092">==System Globals==
&lt;pre&gt;
entity		self;
entity		other;
entity		world;
float		time;
float		frametime;

float 		player_localentnum;     //the entnum
float 		player_localnum;        //the playernum
float		maxclients;             //a constant filled in by the engine

float		clientcommandframe;     //player movement
float		servercommandframe;     //clientframe echoed off the server
string		mapname;

//
// global variables set by built in functions
//
vector		v_forward, v_up, v_right;  // set by makevectors()

// set by traceline / tracebox
float		trace_allsolid;
float		trace_startsolid;
float		trace_fraction;
vector		trace_endpos;
vector		trace_plane_normal;
float		trace_plane_dist;
entity		trace_ent;
float		trace_inopen;
float		trace_inwater;

//
// required prog functions
//
void()		CSQC_Init;
void()		CSQC_Shutdown;
float(float f, float t)	CSQC_InputEvent;
void()		CSQC_UpdateView;
float(string s)	CSQC_ConsoleCommand;

//these fields are read and set by the default player physics
vector		pmove_org;
vector		pmove_vel;
vector		pmove_mins;
vector		pmove_maxs;
//retrieved from the current movement commands (read by player physics)
float		input_timelength;
vector		input_angles;
vector		input_movevalues;  //forwards, right, up.
float		input_buttons;     //attack, use, jump (default physics only uses jump)

float		movevar_gravity;
float		movevar_stopspeed;
float		movevar_maxspeed;
float		movevar_spectatormaxspeed;  //used by NOCLIP movetypes.
float		movevar_accelerate;
float		movevar_airaccelerate;
float		movevar_wateraccelerate;
float		movevar_friction;
float		movevar_waterfriction;
float		movevar_entgravity;	//the local player's gravity field. Is a multiple (1 is the normal value)
&lt;/pre&gt;
==System Fields==
&lt;pre&gt;
.float		modelindex;     // *** model index in the precached list
.vector		absmin, absmax;	// *** origin + mins / maxs

.float		entnum;         // *** the ent number as on the server
.float		drawmask;
.void()		predraw;
.float		movetype;
.float		solid;

.vector		origin;         // ***
.vector		oldorigin;      // ***
.vector		velocity;
.vector		angles;
.vector		avelocity;

.string		classname;      // spawn function
.string		model;
.float		frame;
.float		skin;
.float		effects;

.vector		mins, maxs;     // bounding box extents reletive to origin
.vector		size;           // maxs - mins

.void()		touch;
.void()		use;
.void()		think;
.void()		blocked;        // for doors or plats, called when can't push other

.float		nextthink;
.entity		chain;
.string		netname;
.entity 	enemy;
.float		flags;
.float		colormap;
.entity		owner;
&lt;/pre&gt;
==Builtins==
&lt;pre&gt;
// core functions from standard quake
void(vector ang) makevectors = #1;
void(entity e, vector o) setorigin = #2;
void(entity e, string m) setmodel = #3;
void(entity e, vector min, vector max) setsize = #4;
void(entity e, vector min, vector max) setabssize = #5;
void() break = #6;
float() random = #7;
void(entity e, float chan, string samp) sound = #8;
vector(vector v) normalize = #9;
void(string e) error = #10;
void(string e) objerror = #11;
float(vector v) vlen = #12;
float(vector v) vectoyaw = #13;
entity() spawn = #14;
void(entity e) remove = #15;
float(vector v1, vector v2, float tryents) traceline = #16;
entity() checkclient = #17;
entity(entity start, .string fld, string match) find = #18;
void(string s) precache_sound = #19;
void(string s) precache_model = #20;
void(entity client, string s, ...) stuffcmd = #21;
entity(vector org, float rad) findradius = #22;

string(float f) ftos = #26;
string(vector v) vtos = #27;
void() coredump = #28;
void() traceon = #29;
void() traceoff = #30;
void(entity e) eprint = #31;
float(float yaw, float dist) walkmove = #32;

float() droptofloor = #34;
void(float style, string value) lightstyle = #35;
float(float v) rint = #36;
float(float v) floor = #37;
float(float v) ceil = #38;

float(entity e) checkbottom = #40;
float(vector v) pointcontents = #41;

float(float f) fabs = #43;
float(string s) cvar = #45;
void(string s) localcmd = #46;
entity(entity e) nextent = #47;
void(vector o, vector d, float color, float count) particle = #48;
void() ChangeYaw = #49;

vector(vector v) vectoangles = #51;

string(string s) precache_file = #68;
void(entity e) makestatic = #69;

void(string var, string val) cvar_set = #72;

void(vector pos, string samp, float vol, float atten) ambientsound = #74;
string(string s) precache_model2 = #75;
string(string s) precache_sound2 = #76;
string(string s) precache_file2 = #77;

// core ext_csqc functions
void() R_ClearScene = #300;
void(float mask) R_AddEntities = #301;
void(entity ent) R_AddEntity = #302;
float(float property, ...) R_SetView = #303;
void() R_RenderScene = #304;
void(vector org, float radius, vector lightcolours) R_AddDynamicLight = #305;
void(string texturename, float flag[, float is2d, float lines]) R_BeginPolygon = #306;
void(vector org, vector texcoords, vector rgb, float alpha) R_PolygonVertex = #307;
void() R_EndPolygon = #308;

vector (vector v) cs_unproject = #310;
vector (vector v) cs_project = #311;

void(float width, vector pos1, vector pos2, float flag) drawline = #315;
float(string name) iscachedpic = #316;
string(string name, float trywad) precache_pic = #317;
vector(string picname) draw_getimagesize = #318;
void(string name) freepic = #319;
float(vector position, float character, vector scale, vector rgb, float alpha, float flag) drawcharacter = #320;
float(vector position, string text, vector scale, vector rgb, float alpha, float flag) drawstring = #321;
float(vector position, string pic, vector size, vector rgb, float alpha, float flag) drawpic = #322;
float(vector position, vector size, vector rgb, float alpha, float flag) drawfill = #323;
void(float x, float y, float width, float height) drawsetcliparea = #324;
void(void) drawresetcliparea = #325;
float drawcolorcodedstring(vector position, string text, vector scale, vector rgb, float alpha, float flag) = #326;

float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;

void(entity e, float mdlindex) setmodelindex = #333;
string(float mdlindex) modelnameforindex = #334;
float(string effectname) particleeffectnum = #335;
void(entity ent, float effectnum, vector start, vector end) trailparticles = #336;
void(float effectnum, vector origin [, vector dir, float count]) pointparticles = #337;
void(string s, ...) centerprint = #338;
void(string s, ...) print = #339;
string(float keynum) keynumtostring = #340;
float(string keyname) stringtokeynum = #341;
string(float keynum) getkeybind = #342;
void(float usecursor) setcursormode = #343;
vector() getmousepos = #344;
float(float framenum) getinputstate = #345;
void(float sens) setsensitivityscaler = #346;
void() runstandardplayerphysics = #347;
string(float playernum, string keyname) getplayerkeyvalue = #348;
float() isdemo = #349;
float() isserver = #350;
void(vector origin, vector forward, vector right, vector up) SetListener = #351;
void(string cmdname) registercommand = #352;
float(entity ent) wasfreed = #353;
string(string key) serverkey = #354;

float() ReadByte = #360;
float() ReadChar = #361;
float() ReadShort = #362;
float() ReadLong = #363;
float() ReadCoord = #364;
float() ReadAngle = #365;
string() ReadString = #366;	//warning: this returns a temporary!
float() ReadFloat = #367;
&lt;/pre&gt;
==Constants==
&lt;pre&gt;
// add-entity mask bits
float MASK_ENGINE           = 1;
float MASK_ENGINEVIEWMODELS = 2;
float MASK_NORMAL           = 4;

// renderflag bits
float RF_VIEWMODEL          = 1;
float RF_EXTERNALMODEL      = 2;
float RF_DEPTHHACK          = 4;
float RF_ADDITIVE           = 8;
float RF_USEAXIS            = 16;

// flags for 2d drawing
float DRAWFLAG_NORMAL       = 0;
float DRAWFLAG_ADDITIVE     = 1;
float DRAWFLAG_MODULATE     = 2;
float DRAWFLAG_2XMODULATE   = 3;

// setview parameter
float VF_MIN                = 1;    //(vector)
float VF_MIN_X              = 2;    //(float)
float VF_MIN_Y              = 3;    //(float)
float VF_SIZE               = 4;    //(vector) (viewport size)
float VF_SIZE_Y             = 5;    //(float)
float VF_SIZE_X             = 6;    //(float)
float VF_VIEWPORT           = 7;    //(vector, vector)
float VF_FOV                = 8;    //(vector)
float VF_FOVX               = 9;    //(float)
float VF_FOVY               = 10;   //(float)
float VF_ORIGIN             = 11;   //(vector)
float VF_ORIGIN_X           = 12;   //(float)
float VF_ORIGIN_Y           = 13;   //(float)
float VF_ORIGIN_Z           = 14;   //(float)
float VF_ANGLES             = 15;   //(vector)
float VF_ANGLES_X           = 16;   //(float)
float VF_ANGLES_Y           = 17;   //(float)
float VF_ANGLES_Z           = 18;   //(float)
float VF_DRAWWORLD          = 19;   //(float)
float VF_DRAWENGINESBAR     = 20;   //(float)
float VF_DRAWCROSSHAIR      = 21;   //(float)

float VF_CL_VIEWANGLES      = 33;   //(vector)
float VF_CL_VIEWANGLES_X    = 34;   //(float)
float VF_CL_VIEWANGLES_Y    = 35;   //(float)
float VF_CL_VIEWANGLES_Z    = 36;   //(float)

float VF_PERSPECTIVE        = 200;  //(float)

// stats
// 0 - 31 are reserved for standard engine stats
// 32 - 128 are for QuakeC modders
float STAT_HEALTH           = 0;
float STAT_WEAPONMODEL      = 2;
float STAT_AMMO             = 3;
float STAT_ARMOR            = 4;
float STAT_WEAPONFRAME      = 5;
float STAT_SHELLS           = 6;
float STAT_NAILS            = 7;
float STAT_ROCKETS          = 8;
float STAT_CELLS            = 9;
float STAT_ACTIVEWEAPON     = 10;
float STAT_TOTALSECRETS     = 11;
float STAT_TOTALMONSTERS    = 12;
float STAT_SECRETS          = 13; // bumped on client side by svc_foundsecret
float STAT_MONSTERS         = 14; // bumped by svc_killedmonster
float STAT_ITEMS            = 15; // self.items bitmask from server

// buttons for input_buttons
float BUTTON_ATTACK         = 1;
float BUTTON_JUMP           = 2;
float BUTTON_3              = 4;
float BUTTON_4              = 8;
float BUTTON_5              = 16;
float BUTTON_6              = 32;
float BUTTON_7              = 64;
float BUTTON_8              = 128;
&lt;/pre&gt;</text>
      <sha1>noh44tp24xory4an9wyllcafvif5598</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>560</id>
      <parentid>358</parentid>
      <timestamp>2008-03-10T17:01:41Z</timestamp>
      <contributor>
        <ip>79.77.100.204</ip>
      </contributor>
      <comment>/* System Globals */</comment>
      <text xml:space="preserve" bytes="10121">==System Globals==
&lt;pre&gt;
entity		self;
entity		other;
entity		world;
float		time;
float		frametime;

float 		player_localentnum;     //the entnum
float 		player_localnum;        //the playernum
float		maxclients;             //a constant filled in by the engine

float		clientcommandframe;     //player movement
float		servercommandframe;     //clientframe echoed off the server
string		mapname;

//
// global variables set by built in functions
//
vector		v_forward, v_up, v_right;  // set by makevectors()

// set by traceline / tracebox
float		trace_allsolid;
float		trace_startsolid;
float		trace_fraction;
vector		trace_endpos;
vector		trace_plane_normal;
float		trace_plane_dist;
entity		trace_ent;
float		trace_inopen;
float		trace_inwater;

//
// required prog functions
//
void()		CSQC_Init;
void()		CSQC_Shutdown;
float(float f, float t)	CSQC_InputEvent;
void()		CSQC_UpdateView;
float(string s)	CSQC_ConsoleCommand;

//these fields are read and set by the default player physics
vector		pmove_org;
vector		pmove_vel;
vector		pmove_mins;
vector		pmove_maxs;
//retrieved from the current movement commands (read by player physics)
float		input_timelength;
vector		input_angles;
vector		input_movevalues;  //forwards, right, up.
float		input_buttons;     //attack, use, jump (default physics only uses jump)

float		movevar_gravity;
float		movevar_stopspeed;
float		movevar_maxspeed;
float		movevar_spectatormaxspeed;  //used by NOCLIP movetypes.
float		movevar_accelerate;
float		movevar_airaccelerate;
float		movevar_wateraccelerate;
float		movevar_friction;
float		movevar_waterfriction;
float		movevar_entgravity;	//the local player's gravity field. Is a multiple
		                        //(1 is the normal value)
&lt;/pre&gt;

==System Fields==
&lt;pre&gt;
.float		modelindex;     // *** model index in the precached list
.vector		absmin, absmax;	// *** origin + mins / maxs

.float		entnum;         // *** the ent number as on the server
.float		drawmask;
.void()		predraw;
.float		movetype;
.float		solid;

.vector		origin;         // ***
.vector		oldorigin;      // ***
.vector		velocity;
.vector		angles;
.vector		avelocity;

.string		classname;      // spawn function
.string		model;
.float		frame;
.float		skin;
.float		effects;

.vector		mins, maxs;     // bounding box extents reletive to origin
.vector		size;           // maxs - mins

.void()		touch;
.void()		use;
.void()		think;
.void()		blocked;        // for doors or plats, called when can't push other

.float		nextthink;
.entity		chain;
.string		netname;
.entity 	enemy;
.float		flags;
.float		colormap;
.entity		owner;
&lt;/pre&gt;
==Builtins==
&lt;pre&gt;
// core functions from standard quake
void(vector ang) makevectors = #1;
void(entity e, vector o) setorigin = #2;
void(entity e, string m) setmodel = #3;
void(entity e, vector min, vector max) setsize = #4;
void(entity e, vector min, vector max) setabssize = #5;
void() break = #6;
float() random = #7;
void(entity e, float chan, string samp) sound = #8;
vector(vector v) normalize = #9;
void(string e) error = #10;
void(string e) objerror = #11;
float(vector v) vlen = #12;
float(vector v) vectoyaw = #13;
entity() spawn = #14;
void(entity e) remove = #15;
float(vector v1, vector v2, float tryents) traceline = #16;
entity() checkclient = #17;
entity(entity start, .string fld, string match) find = #18;
void(string s) precache_sound = #19;
void(string s) precache_model = #20;
void(entity client, string s, ...) stuffcmd = #21;
entity(vector org, float rad) findradius = #22;

string(float f) ftos = #26;
string(vector v) vtos = #27;
void() coredump = #28;
void() traceon = #29;
void() traceoff = #30;
void(entity e) eprint = #31;
float(float yaw, float dist) walkmove = #32;

float() droptofloor = #34;
void(float style, string value) lightstyle = #35;
float(float v) rint = #36;
float(float v) floor = #37;
float(float v) ceil = #38;

float(entity e) checkbottom = #40;
float(vector v) pointcontents = #41;

float(float f) fabs = #43;
float(string s) cvar = #45;
void(string s) localcmd = #46;
entity(entity e) nextent = #47;
void(vector o, vector d, float color, float count) particle = #48;
void() ChangeYaw = #49;

vector(vector v) vectoangles = #51;

string(string s) precache_file = #68;
void(entity e) makestatic = #69;

void(string var, string val) cvar_set = #72;

void(vector pos, string samp, float vol, float atten) ambientsound = #74;
string(string s) precache_model2 = #75;
string(string s) precache_sound2 = #76;
string(string s) precache_file2 = #77;

// core ext_csqc functions
void() R_ClearScene = #300;
void(float mask) R_AddEntities = #301;
void(entity ent) R_AddEntity = #302;
float(float property, ...) R_SetView = #303;
void() R_RenderScene = #304;
void(vector org, float radius, vector lightcolours) R_AddDynamicLight = #305;
void(string texturename, float flag[, float is2d, float lines]) R_BeginPolygon = #306;
void(vector org, vector texcoords, vector rgb, float alpha) R_PolygonVertex = #307;
void() R_EndPolygon = #308;

vector (vector v) cs_unproject = #310;
vector (vector v) cs_project = #311;

void(float width, vector pos1, vector pos2, float flag) drawline = #315;
float(string name) iscachedpic = #316;
string(string name, float trywad) precache_pic = #317;
vector(string picname) draw_getimagesize = #318;
void(string name) freepic = #319;
float(vector position, float character, vector scale, vector rgb, float alpha, float flag) drawcharacter = #320;
float(vector position, string text, vector scale, vector rgb, float alpha, float flag) drawstring = #321;
float(vector position, string pic, vector size, vector rgb, float alpha, float flag) drawpic = #322;
float(vector position, vector size, vector rgb, float alpha, float flag) drawfill = #323;
void(float x, float y, float width, float height) drawsetcliparea = #324;
void(void) drawresetcliparea = #325;
float drawcolorcodedstring(vector position, string text, vector scale, vector rgb, float alpha, float flag) = #326;

float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;

void(entity e, float mdlindex) setmodelindex = #333;
string(float mdlindex) modelnameforindex = #334;
float(string effectname) particleeffectnum = #335;
void(entity ent, float effectnum, vector start, vector end) trailparticles = #336;
void(float effectnum, vector origin [, vector dir, float count]) pointparticles = #337;
void(string s, ...) centerprint = #338;
void(string s, ...) print = #339;
string(float keynum) keynumtostring = #340;
float(string keyname) stringtokeynum = #341;
string(float keynum) getkeybind = #342;
void(float usecursor) setcursormode = #343;
vector() getmousepos = #344;
float(float framenum) getinputstate = #345;
void(float sens) setsensitivityscaler = #346;
void() runstandardplayerphysics = #347;
string(float playernum, string keyname) getplayerkeyvalue = #348;
float() isdemo = #349;
float() isserver = #350;
void(vector origin, vector forward, vector right, vector up) SetListener = #351;
void(string cmdname) registercommand = #352;
float(entity ent) wasfreed = #353;
string(string key) serverkey = #354;

float() ReadByte = #360;
float() ReadChar = #361;
float() ReadShort = #362;
float() ReadLong = #363;
float() ReadCoord = #364;
float() ReadAngle = #365;
string() ReadString = #366;	//warning: this returns a temporary!
float() ReadFloat = #367;
&lt;/pre&gt;
==Constants==
&lt;pre&gt;
// add-entity mask bits
float MASK_ENGINE           = 1;
float MASK_ENGINEVIEWMODELS = 2;
float MASK_NORMAL           = 4;

// renderflag bits
float RF_VIEWMODEL          = 1;
float RF_EXTERNALMODEL      = 2;
float RF_DEPTHHACK          = 4;
float RF_ADDITIVE           = 8;
float RF_USEAXIS            = 16;

// flags for 2d drawing
float DRAWFLAG_NORMAL       = 0;
float DRAWFLAG_ADDITIVE     = 1;
float DRAWFLAG_MODULATE     = 2;
float DRAWFLAG_2XMODULATE   = 3;

// setview parameter
float VF_MIN                = 1;    //(vector)
float VF_MIN_X              = 2;    //(float)
float VF_MIN_Y              = 3;    //(float)
float VF_SIZE               = 4;    //(vector) (viewport size)
float VF_SIZE_Y             = 5;    //(float)
float VF_SIZE_X             = 6;    //(float)
float VF_VIEWPORT           = 7;    //(vector, vector)
float VF_FOV                = 8;    //(vector)
float VF_FOVX               = 9;    //(float)
float VF_FOVY               = 10;   //(float)
float VF_ORIGIN             = 11;   //(vector)
float VF_ORIGIN_X           = 12;   //(float)
float VF_ORIGIN_Y           = 13;   //(float)
float VF_ORIGIN_Z           = 14;   //(float)
float VF_ANGLES             = 15;   //(vector)
float VF_ANGLES_X           = 16;   //(float)
float VF_ANGLES_Y           = 17;   //(float)
float VF_ANGLES_Z           = 18;   //(float)
float VF_DRAWWORLD          = 19;   //(float)
float VF_DRAWENGINESBAR     = 20;   //(float)
float VF_DRAWCROSSHAIR      = 21;   //(float)

float VF_CL_VIEWANGLES      = 33;   //(vector)
float VF_CL_VIEWANGLES_X    = 34;   //(float)
float VF_CL_VIEWANGLES_Y    = 35;   //(float)
float VF_CL_VIEWANGLES_Z    = 36;   //(float)

float VF_PERSPECTIVE        = 200;  //(float)

// stats
// 0 - 31 are reserved for standard engine stats
// 32 - 128 are for QuakeC modders
float STAT_HEALTH           = 0;
float STAT_WEAPONMODEL      = 2;
float STAT_AMMO             = 3;
float STAT_ARMOR            = 4;
float STAT_WEAPONFRAME      = 5;
float STAT_SHELLS           = 6;
float STAT_NAILS            = 7;
float STAT_ROCKETS          = 8;
float STAT_CELLS            = 9;
float STAT_ACTIVEWEAPON     = 10;
float STAT_TOTALSECRETS     = 11;
float STAT_TOTALMONSTERS    = 12;
float STAT_SECRETS          = 13; // bumped on client side by svc_foundsecret
float STAT_MONSTERS         = 14; // bumped by svc_killedmonster
float STAT_ITEMS            = 15; // self.items bitmask from server

// buttons for input_buttons
float BUTTON_ATTACK         = 1;
float BUTTON_JUMP           = 2;
float BUTTON_3              = 4;
float BUTTON_4              = 8;
float BUTTON_5              = 16;
float BUTTON_6              = 32;
float BUTTON_7              = 64;
float BUTTON_8              = 128;
&lt;/pre&gt;</text>
      <sha1>ig5639r2376s40c0em7swohw4va7pei</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>566</id>
      <parentid>560</parentid>
      <timestamp>2008-03-25T15:47:55Z</timestamp>
      <contributor>
        <ip>79.69.19.41</ip>
      </contributor>
      <text xml:space="preserve" bytes="10265">==System Globals==
&lt;pre&gt;
entity		self;
entity		other;
entity		world;
float		time;
float		frametime;

float 		player_localentnum;     //the entnum
float 		player_localnum;        //the playernum
float		maxclients;             //a constant filled in by the engine

float		clientcommandframe;     //player movement
float		servercommandframe;     //clientframe echoed off the server
string		mapname;

//
// global variables set by built in functions
//
vector		v_forward, v_up, v_right;  // set by makevectors()

// set by traceline / tracebox
float		trace_allsolid;
float		trace_startsolid;
float		trace_fraction;
vector		trace_endpos;
vector		trace_plane_normal;
float		trace_plane_dist;
entity		trace_ent;
float		trace_inopen;
float		trace_inwater;

//
// required prog functions
//
void()		CSQC_Init;
void()		CSQC_Shutdown;
float(float f, float t)	CSQC_InputEvent;
void()		CSQC_UpdateView;
float(string s)	CSQC_ConsoleCommand;

//these fields are read and set by the default player physics
vector		pmove_org;
vector		pmove_vel;
vector		pmove_mins;
vector		pmove_maxs;
//retrieved from the current movement commands (read by player physics)
float		input_timelength;
vector		input_angles;
vector		input_movevalues;  //forwards, right, up.
float		input_buttons;     //attack, use, jump (default physics only uses jump)

float		movevar_gravity;
float		movevar_stopspeed;
float		movevar_maxspeed;
float		movevar_spectatormaxspeed;  //used by NOCLIP movetypes.
float		movevar_accelerate;
float		movevar_airaccelerate;
float		movevar_wateraccelerate;
float		movevar_friction;
float		movevar_waterfriction;
float		movevar_entgravity;	//the local player's gravity field. Is a multiple
		                        //(1 is the normal value)
&lt;/pre&gt;

==System Fields==
&lt;pre&gt;
.float		modelindex;     // *** model index in the precached list
.vector		absmin, absmax;	// *** origin + mins / maxs

.float		entnum;         // *** the ent number as on the server
.float		drawmask;
.void()		predraw;
.float		movetype;
.float		solid;

.vector		origin;         // ***
.vector		oldorigin;      // ***
.vector		velocity;
.vector		angles;
.vector		avelocity;

.string		classname;      // spawn function
.string		model;
.float		frame;
.float		skin;
.float		effects;

.vector		mins, maxs;     // bounding box extents reletive to origin
.vector		size;           // maxs - mins

.void()		touch;
.void()		use;
.void()		think;
.void()		blocked;        // for doors or plats, called when can't push other

.float		nextthink;
.entity		chain;
.string		netname;
.entity 	enemy;
.float		flags;
.float		colormap;
.entity		owner;
&lt;/pre&gt;
==Builtins==
&lt;pre&gt;
// core functions from standard quake
void(vector ang) makevectors = #1;
void(entity e, vector o) setorigin = #2;
void(entity e, string m) setmodel = #3;
void(entity e, vector min, vector max) setsize = #4;
void(entity e, vector min, vector max) setabssize = #5;
void() break = #6;
float() random = #7;
void(entity e, float chan, string samp) sound = #8;
vector(vector v) normalize = #9;
void(string e) error = #10;
void(string e) objerror = #11;
float(vector v) vlen = #12;
float(vector v) vectoyaw = #13;
entity() spawn = #14;
void(entity e) remove = #15;
float(vector v1, vector v2, float tryents) traceline = #16;
entity() checkclient = #17;
entity(entity start, .string fld, string match) find = #18;
void(string s) precache_sound = #19;
void(string s) precache_model = #20;
void(entity client, string s, ...) stuffcmd = #21;
entity(vector org, float rad) findradius = #22;

string(float f) ftos = #26;
string(vector v) vtos = #27;
void() coredump = #28;
void() traceon = #29;
void() traceoff = #30;
void(entity e) eprint = #31;
float(float yaw, float dist) walkmove = #32;

float() droptofloor = #34;
void(float style, string value) lightstyle = #35;
float(float v) rint = #36;
float(float v) floor = #37;
float(float v) ceil = #38;

float(entity e) checkbottom = #40;
float(vector v) pointcontents = #41;

float(float f) fabs = #43;
float(string s) cvar = #45;
void(string s) localcmd = #46;
entity(entity e) nextent = #47;
void(vector o, vector d, float color, float count) particle = #48;
void() ChangeYaw = #49;

vector(vector v) vectoangles = #51;

string(string s) precache_file = #68;
void(entity e) makestatic = #69;

void(string var, string val) cvar_set = #72;

void(vector pos, string samp, float vol, float atten) ambientsound = #74;
string(string s) precache_model2 = #75;
string(string s) precache_sound2 = #76;
string(string s) precache_file2 = #77;

// core ext_csqc functions
void() R_ClearScene = #300;
void(float mask) R_AddEntities = #301;
void(entity ent) R_AddEntity = #302;
float(float property, ...) R_SetView = #303;
void() R_RenderScene = #304;
void(vector org, float radius, vector lightcolours) R_AddDynamicLight = #305;
void(string texturename, float flag[, float is2d, float lines]) R_BeginPolygon = #306;
void(vector org, vector texcoords, vector rgb, float alpha) R_PolygonVertex = #307;
void() R_EndPolygon = #308;

vector (vector v) cs_unproject = #310;
vector (vector v) cs_project = #311;

void(float width, vector pos1, vector pos2, float flag) drawline = #315;
float(string name) iscachedpic = #316;
string(string name, float trywad) precache_pic = #317;
vector(string picname) draw_getimagesize = #318;
void(string name) freepic = #319;
float(vector position, float character, vector scale, vector rgb, float alpha, float flag) drawcharacter = #320;
float(vector position, string text, vector scale, vector rgb, float alpha, float flag) drawstring = #321;
float(vector position, string pic, vector size, vector rgb, float alpha, float flag) drawpic = #322;
float(vector position, vector size, vector rgb, float alpha, float flag) drawfill = #323;
void(float x, float y, float width, float height) drawsetcliparea = #324;
void(void) drawresetcliparea = #325;
float drawcolorcodedstring(vector position, string text, vector scale, vector rgb, float alpha, float flag) = #326;

float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;

void(entity e, float mdlindex) setmodelindex = #333;
string(float mdlindex) modelnameforindex = #334;
float(string effectname) particleeffectnum = #335;
void(entity ent, float effectnum, vector start, vector end) trailparticles = #336;
void(float effectnum, vector origin [, vector dir, float count]) pointparticles = #337;
void(string s, ...) centerprint = #338;
void(string s, ...) print = #339;
string(float keynum) keynumtostring = #340;
float(string keyname) stringtokeynum = #341;
string(float keynum) getkeybind = #342;
void(float usecursor) setcursormode = #343;
vector() getmousepos = #344;
float(float framenum) getinputstate = #345;
void(float sens) setsensitivityscaler = #346;
void() runstandardplayerphysics = #347;
string(float playernum, string keyname) getplayerkeyvalue = #348;
float() isdemo = #349;
float() isserver = #350;
void(vector origin, vector forward, vector right, vector up) SetListener = #351;
void(string cmdname) registercommand = #352;
float(entity ent) wasfreed = #353;
string(string key) serverkey = #354;

float() ReadByte = #360;
float() ReadChar = #361;
float() ReadShort = #362;
float() ReadLong = #363;
float() ReadCoord = #364;
float() ReadAngle = #365;
string() ReadString = #366;	//warning: this returns a temporary!
float() ReadFloat = #367;
&lt;/pre&gt;
==Constants==
&lt;pre&gt;
// add-entity mask bits
float MASK_ENGINE           = 1;
float MASK_ENGINEVIEWMODELS = 2;
float MASK_NORMAL           = 4;

// renderflag bits
float RF_VIEWMODEL          = 1;
float RF_EXTERNALMODEL      = 2;
float RF_DEPTHHACK          = 4;
float RF_ADDITIVE           = 8;
float RF_USEAXIS            = 16;

// flags for 2d drawing
float DRAWFLAG_NORMAL       = 0;
float DRAWFLAG_ADDITIVE     = 1;
float DRAWFLAG_MODULATE     = 2;
float DRAWFLAG_2XMODULATE   = 3;

// setview parameter
float VF_MIN                = 1;    //(vector)
float VF_MIN_X              = 2;    //(float)
float VF_MIN_Y              = 3;    //(float)
float VF_SIZE               = 4;    //(vector) (viewport size)
float VF_SIZE_Y             = 5;    //(float)
float VF_SIZE_X             = 6;    //(float)
float VF_VIEWPORT           = 7;    //(vector, vector)
float VF_FOV                = 8;    //(vector)
float VF_FOVX               = 9;    //(float)
float VF_FOVY               = 10;   //(float)
float VF_ORIGIN             = 11;   //(vector)
float VF_ORIGIN_X           = 12;   //(float)
float VF_ORIGIN_Y           = 13;   //(float)
float VF_ORIGIN_Z           = 14;   //(float)
float VF_ANGLES             = 15;   //(vector)
float VF_ANGLES_X           = 16;   //(float)
float VF_ANGLES_Y           = 17;   //(float)
float VF_ANGLES_Z           = 18;   //(float)
float VF_DRAWWORLD          = 19;   //(float)
float VF_DRAWENGINESBAR     = 20;   //(float)
float VF_DRAWCROSSHAIR      = 21;   //(float)

float VF_CL_VIEWANGLES      = 33;   //(vector)
float VF_CL_VIEWANGLES_X    = 34;   //(float)
float VF_CL_VIEWANGLES_Y    = 35;   //(float)
float VF_CL_VIEWANGLES_Z    = 36;   //(float)

float VF_PERSPECTIVE        = 200;  //(float)

// stats
// 0 - 31 are reserved for standard engine stats
// 32 - 128 are for QuakeC modders
float STAT_HEALTH           = 0;
float STAT_WEAPONMODEL      = 2;
float STAT_AMMO             = 3;
float STAT_ARMOR            = 4;
float STAT_WEAPONFRAME      = 5;
float STAT_SHELLS           = 6;
float STAT_NAILS            = 7;
float STAT_ROCKETS          = 8;
float STAT_CELLS            = 9;
float STAT_ACTIVEWEAPON     = 10;
float STAT_TOTALSECRETS     = 11;
float STAT_TOTALMONSTERS    = 12;
float STAT_SECRETS          = 13; // bumped on client side by svc_foundsecret
float STAT_MONSTERS         = 14; // bumped by svc_killedmonster
float STAT_ITEMS            = 15; // self.items bitmask from server

// buttons for input_buttons
float BUTTON_ATTACK         = 1;
float BUTTON_JUMP           = 2;
float BUTTON_3              = 4;
float BUTTON_4              = 8;
float BUTTON_5              = 16;
float BUTTON_6              = 32;
float BUTTON_7              = 64;
float BUTTON_8              = 128;
&lt;/pre&gt;
==Non-System Fields and Globals==
&lt;pre&gt;
intermission; // initially FALSE, set to TRUE when the server sends the SVC_INTERMISSION command
&lt;/pre&gt;</text>
      <sha1>695968b5y39kiu9gk4ls4fs1shnn5kb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>567</id>
      <parentid>566</parentid>
      <timestamp>2008-03-25T15:48:32Z</timestamp>
      <contributor>
        <ip>79.69.19.41</ip>
      </contributor>
      <comment>/* Non-System Fields and Globals */</comment>
      <text xml:space="preserve" bytes="10272">==System Globals==
&lt;pre&gt;
entity		self;
entity		other;
entity		world;
float		time;
float		frametime;

float 		player_localentnum;     //the entnum
float 		player_localnum;        //the playernum
float		maxclients;             //a constant filled in by the engine

float		clientcommandframe;     //player movement
float		servercommandframe;     //clientframe echoed off the server
string		mapname;

//
// global variables set by built in functions
//
vector		v_forward, v_up, v_right;  // set by makevectors()

// set by traceline / tracebox
float		trace_allsolid;
float		trace_startsolid;
float		trace_fraction;
vector		trace_endpos;
vector		trace_plane_normal;
float		trace_plane_dist;
entity		trace_ent;
float		trace_inopen;
float		trace_inwater;

//
// required prog functions
//
void()		CSQC_Init;
void()		CSQC_Shutdown;
float(float f, float t)	CSQC_InputEvent;
void()		CSQC_UpdateView;
float(string s)	CSQC_ConsoleCommand;

//these fields are read and set by the default player physics
vector		pmove_org;
vector		pmove_vel;
vector		pmove_mins;
vector		pmove_maxs;
//retrieved from the current movement commands (read by player physics)
float		input_timelength;
vector		input_angles;
vector		input_movevalues;  //forwards, right, up.
float		input_buttons;     //attack, use, jump (default physics only uses jump)

float		movevar_gravity;
float		movevar_stopspeed;
float		movevar_maxspeed;
float		movevar_spectatormaxspeed;  //used by NOCLIP movetypes.
float		movevar_accelerate;
float		movevar_airaccelerate;
float		movevar_wateraccelerate;
float		movevar_friction;
float		movevar_waterfriction;
float		movevar_entgravity;	//the local player's gravity field. Is a multiple
		                        //(1 is the normal value)
&lt;/pre&gt;

==System Fields==
&lt;pre&gt;
.float		modelindex;     // *** model index in the precached list
.vector		absmin, absmax;	// *** origin + mins / maxs

.float		entnum;         // *** the ent number as on the server
.float		drawmask;
.void()		predraw;
.float		movetype;
.float		solid;

.vector		origin;         // ***
.vector		oldorigin;      // ***
.vector		velocity;
.vector		angles;
.vector		avelocity;

.string		classname;      // spawn function
.string		model;
.float		frame;
.float		skin;
.float		effects;

.vector		mins, maxs;     // bounding box extents reletive to origin
.vector		size;           // maxs - mins

.void()		touch;
.void()		use;
.void()		think;
.void()		blocked;        // for doors or plats, called when can't push other

.float		nextthink;
.entity		chain;
.string		netname;
.entity 	enemy;
.float		flags;
.float		colormap;
.entity		owner;
&lt;/pre&gt;
==Builtins==
&lt;pre&gt;
// core functions from standard quake
void(vector ang) makevectors = #1;
void(entity e, vector o) setorigin = #2;
void(entity e, string m) setmodel = #3;
void(entity e, vector min, vector max) setsize = #4;
void(entity e, vector min, vector max) setabssize = #5;
void() break = #6;
float() random = #7;
void(entity e, float chan, string samp) sound = #8;
vector(vector v) normalize = #9;
void(string e) error = #10;
void(string e) objerror = #11;
float(vector v) vlen = #12;
float(vector v) vectoyaw = #13;
entity() spawn = #14;
void(entity e) remove = #15;
float(vector v1, vector v2, float tryents) traceline = #16;
entity() checkclient = #17;
entity(entity start, .string fld, string match) find = #18;
void(string s) precache_sound = #19;
void(string s) precache_model = #20;
void(entity client, string s, ...) stuffcmd = #21;
entity(vector org, float rad) findradius = #22;

string(float f) ftos = #26;
string(vector v) vtos = #27;
void() coredump = #28;
void() traceon = #29;
void() traceoff = #30;
void(entity e) eprint = #31;
float(float yaw, float dist) walkmove = #32;

float() droptofloor = #34;
void(float style, string value) lightstyle = #35;
float(float v) rint = #36;
float(float v) floor = #37;
float(float v) ceil = #38;

float(entity e) checkbottom = #40;
float(vector v) pointcontents = #41;

float(float f) fabs = #43;
float(string s) cvar = #45;
void(string s) localcmd = #46;
entity(entity e) nextent = #47;
void(vector o, vector d, float color, float count) particle = #48;
void() ChangeYaw = #49;

vector(vector v) vectoangles = #51;

string(string s) precache_file = #68;
void(entity e) makestatic = #69;

void(string var, string val) cvar_set = #72;

void(vector pos, string samp, float vol, float atten) ambientsound = #74;
string(string s) precache_model2 = #75;
string(string s) precache_sound2 = #76;
string(string s) precache_file2 = #77;

// core ext_csqc functions
void() R_ClearScene = #300;
void(float mask) R_AddEntities = #301;
void(entity ent) R_AddEntity = #302;
float(float property, ...) R_SetView = #303;
void() R_RenderScene = #304;
void(vector org, float radius, vector lightcolours) R_AddDynamicLight = #305;
void(string texturename, float flag[, float is2d, float lines]) R_BeginPolygon = #306;
void(vector org, vector texcoords, vector rgb, float alpha) R_PolygonVertex = #307;
void() R_EndPolygon = #308;

vector (vector v) cs_unproject = #310;
vector (vector v) cs_project = #311;

void(float width, vector pos1, vector pos2, float flag) drawline = #315;
float(string name) iscachedpic = #316;
string(string name, float trywad) precache_pic = #317;
vector(string picname) draw_getimagesize = #318;
void(string name) freepic = #319;
float(vector position, float character, vector scale, vector rgb, float alpha, float flag) drawcharacter = #320;
float(vector position, string text, vector scale, vector rgb, float alpha, float flag) drawstring = #321;
float(vector position, string pic, vector size, vector rgb, float alpha, float flag) drawpic = #322;
float(vector position, vector size, vector rgb, float alpha, float flag) drawfill = #323;
void(float x, float y, float width, float height) drawsetcliparea = #324;
void(void) drawresetcliparea = #325;
float drawcolorcodedstring(vector position, string text, vector scale, vector rgb, float alpha, float flag) = #326;

float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;

void(entity e, float mdlindex) setmodelindex = #333;
string(float mdlindex) modelnameforindex = #334;
float(string effectname) particleeffectnum = #335;
void(entity ent, float effectnum, vector start, vector end) trailparticles = #336;
void(float effectnum, vector origin [, vector dir, float count]) pointparticles = #337;
void(string s, ...) centerprint = #338;
void(string s, ...) print = #339;
string(float keynum) keynumtostring = #340;
float(string keyname) stringtokeynum = #341;
string(float keynum) getkeybind = #342;
void(float usecursor) setcursormode = #343;
vector() getmousepos = #344;
float(float framenum) getinputstate = #345;
void(float sens) setsensitivityscaler = #346;
void() runstandardplayerphysics = #347;
string(float playernum, string keyname) getplayerkeyvalue = #348;
float() isdemo = #349;
float() isserver = #350;
void(vector origin, vector forward, vector right, vector up) SetListener = #351;
void(string cmdname) registercommand = #352;
float(entity ent) wasfreed = #353;
string(string key) serverkey = #354;

float() ReadByte = #360;
float() ReadChar = #361;
float() ReadShort = #362;
float() ReadLong = #363;
float() ReadCoord = #364;
float() ReadAngle = #365;
string() ReadString = #366;	//warning: this returns a temporary!
float() ReadFloat = #367;
&lt;/pre&gt;
==Constants==
&lt;pre&gt;
// add-entity mask bits
float MASK_ENGINE           = 1;
float MASK_ENGINEVIEWMODELS = 2;
float MASK_NORMAL           = 4;

// renderflag bits
float RF_VIEWMODEL          = 1;
float RF_EXTERNALMODEL      = 2;
float RF_DEPTHHACK          = 4;
float RF_ADDITIVE           = 8;
float RF_USEAXIS            = 16;

// flags for 2d drawing
float DRAWFLAG_NORMAL       = 0;
float DRAWFLAG_ADDITIVE     = 1;
float DRAWFLAG_MODULATE     = 2;
float DRAWFLAG_2XMODULATE   = 3;

// setview parameter
float VF_MIN                = 1;    //(vector)
float VF_MIN_X              = 2;    //(float)
float VF_MIN_Y              = 3;    //(float)
float VF_SIZE               = 4;    //(vector) (viewport size)
float VF_SIZE_Y             = 5;    //(float)
float VF_SIZE_X             = 6;    //(float)
float VF_VIEWPORT           = 7;    //(vector, vector)
float VF_FOV                = 8;    //(vector)
float VF_FOVX               = 9;    //(float)
float VF_FOVY               = 10;   //(float)
float VF_ORIGIN             = 11;   //(vector)
float VF_ORIGIN_X           = 12;   //(float)
float VF_ORIGIN_Y           = 13;   //(float)
float VF_ORIGIN_Z           = 14;   //(float)
float VF_ANGLES             = 15;   //(vector)
float VF_ANGLES_X           = 16;   //(float)
float VF_ANGLES_Y           = 17;   //(float)
float VF_ANGLES_Z           = 18;   //(float)
float VF_DRAWWORLD          = 19;   //(float)
float VF_DRAWENGINESBAR     = 20;   //(float)
float VF_DRAWCROSSHAIR      = 21;   //(float)

float VF_CL_VIEWANGLES      = 33;   //(vector)
float VF_CL_VIEWANGLES_X    = 34;   //(float)
float VF_CL_VIEWANGLES_Y    = 35;   //(float)
float VF_CL_VIEWANGLES_Z    = 36;   //(float)

float VF_PERSPECTIVE        = 200;  //(float)

// stats
// 0 - 31 are reserved for standard engine stats
// 32 - 128 are for QuakeC modders
float STAT_HEALTH           = 0;
float STAT_WEAPONMODEL      = 2;
float STAT_AMMO             = 3;
float STAT_ARMOR            = 4;
float STAT_WEAPONFRAME      = 5;
float STAT_SHELLS           = 6;
float STAT_NAILS            = 7;
float STAT_ROCKETS          = 8;
float STAT_CELLS            = 9;
float STAT_ACTIVEWEAPON     = 10;
float STAT_TOTALSECRETS     = 11;
float STAT_TOTALMONSTERS    = 12;
float STAT_SECRETS          = 13; // bumped on client side by svc_foundsecret
float STAT_MONSTERS         = 14; // bumped by svc_killedmonster
float STAT_ITEMS            = 15; // self.items bitmask from server

// buttons for input_buttons
float BUTTON_ATTACK         = 1;
float BUTTON_JUMP           = 2;
float BUTTON_3              = 4;
float BUTTON_4              = 8;
float BUTTON_5              = 16;
float BUTTON_6              = 32;
float BUTTON_7              = 64;
float BUTTON_8              = 128;
&lt;/pre&gt;
==Non-System Fields and Globals==
&lt;pre&gt;
float  intermission; // initially FALSE, set to TRUE when the server sends the SVC_INTERMISSION command
&lt;/pre&gt;</text>
      <sha1>kdbkknc5ii6sa2axaqn2dzk8q3l0tdu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>570</id>
      <parentid>567</parentid>
      <timestamp>2008-03-25T16:10:31Z</timestamp>
      <contributor>
        <ip>79.69.19.41</ip>
      </contributor>
      <comment>/* Builtins */</comment>
      <text xml:space="preserve" bytes="10674">==System Globals==
&lt;pre&gt;
entity		self;
entity		other;
entity		world;
float		time;
float		frametime;

float 		player_localentnum;     //the entnum
float 		player_localnum;        //the playernum
float		maxclients;             //a constant filled in by the engine

float		clientcommandframe;     //player movement
float		servercommandframe;     //clientframe echoed off the server
string		mapname;

//
// global variables set by built in functions
//
vector		v_forward, v_up, v_right;  // set by makevectors()

// set by traceline / tracebox
float		trace_allsolid;
float		trace_startsolid;
float		trace_fraction;
vector		trace_endpos;
vector		trace_plane_normal;
float		trace_plane_dist;
entity		trace_ent;
float		trace_inopen;
float		trace_inwater;

//
// required prog functions
//
void()		CSQC_Init;
void()		CSQC_Shutdown;
float(float f, float t)	CSQC_InputEvent;
void()		CSQC_UpdateView;
float(string s)	CSQC_ConsoleCommand;

//these fields are read and set by the default player physics
vector		pmove_org;
vector		pmove_vel;
vector		pmove_mins;
vector		pmove_maxs;
//retrieved from the current movement commands (read by player physics)
float		input_timelength;
vector		input_angles;
vector		input_movevalues;  //forwards, right, up.
float		input_buttons;     //attack, use, jump (default physics only uses jump)

float		movevar_gravity;
float		movevar_stopspeed;
float		movevar_maxspeed;
float		movevar_spectatormaxspeed;  //used by NOCLIP movetypes.
float		movevar_accelerate;
float		movevar_airaccelerate;
float		movevar_wateraccelerate;
float		movevar_friction;
float		movevar_waterfriction;
float		movevar_entgravity;	//the local player's gravity field. Is a multiple
		                        //(1 is the normal value)
&lt;/pre&gt;

==System Fields==
&lt;pre&gt;
.float		modelindex;     // *** model index in the precached list
.vector		absmin, absmax;	// *** origin + mins / maxs

.float		entnum;         // *** the ent number as on the server
.float		drawmask;
.void()		predraw;
.float		movetype;
.float		solid;

.vector		origin;         // ***
.vector		oldorigin;      // ***
.vector		velocity;
.vector		angles;
.vector		avelocity;

.string		classname;      // spawn function
.string		model;
.float		frame;
.float		skin;
.float		effects;

.vector		mins, maxs;     // bounding box extents reletive to origin
.vector		size;           // maxs - mins

.void()		touch;
.void()		use;
.void()		think;
.void()		blocked;        // for doors or plats, called when can't push other

.float		nextthink;
.entity		chain;
.string		netname;
.entity 	enemy;
.float		flags;
.float		colormap;
.entity		owner;
&lt;/pre&gt;
==Builtins==

CSQC implements all the core quake functions except for:
    * checkclient

    * stuffcmd

    * bprint

    * sprint (use 'print' instead)

    * aim

    * writebyte

    * writechar

    * wruteshort

    * writelong

    * writecoord

    * writeangle

    * writestring

    * writeentity

    * precache_file

    * changelevel

    * logfrag (qw)

    * infokey (qw)

    * multicast (qw)

&lt;pre&gt;
// core functions from standard quake
void(vector ang) makevectors = #1;
void(entity e, vector o) setorigin = #2;
void(entity e, string m) setmodel = #3;
void(entity e, vector min, vector max) setsize = #4;
void(entity e, vector min, vector max) setabssize = #5;
void() break = #6;
float() random = #7;
void(entity e, float chan, string samp) sound = #8;
vector(vector v) normalize = #9;
void(string e) error = #10;
void(string e) objerror = #11;
float(vector v) vlen = #12;
float(vector v) vectoyaw = #13;
entity() spawn = #14;
void(entity e) remove = #15;
float(vector v1, vector v2, float tryents) traceline = #16;
entity() checkclient = #17;
entity(entity start, .string fld, string match) find = #18;
void(string s) precache_sound = #19;
void(string s) precache_model = #20;
void(entity client, string s, ...) stuffcmd = #21;
entity(vector org, float rad) findradius = #22;

string(float f) ftos = #26;
string(vector v) vtos = #27;
void() coredump = #28;
void() traceon = #29;
void() traceoff = #30;
void(entity e) eprint = #31;
float(float yaw, float dist) walkmove = #32;

float() droptofloor = #34;
void(float style, string value) lightstyle = #35;
float(float v) rint = #36;
float(float v) floor = #37;
float(float v) ceil = #38;

float(entity e) checkbottom = #40;
float(vector v) pointcontents = #41;

float(float f) fabs = #43;
float(string s) cvar = #45;
void(string s) localcmd = #46;
entity(entity e) nextent = #47;
void(vector o, vector d, float color, float count) particle = #48;
void() ChangeYaw = #49;

vector(vector v) vectoangles = #51;

string(string s) precache_file = #68;
void(entity e) makestatic = #69;

void(string var, string val) cvar_set = #72;

void(vector pos, string samp, float vol, float atten) ambientsound = #74;
string(string s) precache_model2 = #75;
string(string s) precache_sound2 = #76;
string(string s) precache_file2 = #77;



// core ext_csqc functions
void() R_ClearScene = #300;
void(float mask) R_AddEntities = #301;
void(entity ent) R_AddEntity = #302;
float(float property, ...) R_SetView = #303;
void() R_RenderScene = #304;
void(vector org, float radius, vector lightcolours) R_AddDynamicLight = #305;
void(string texturename, float flag[, float is2d, float lines]) R_BeginPolygon = #306;
void(vector org, vector texcoords, vector rgb, float alpha) R_PolygonVertex = #307;
void() R_EndPolygon = #308;

vector (vector v) cs_unproject = #310;
vector (vector v) cs_project = #311;

void(float width, vector pos1, vector pos2, float flag) drawline = #315;
float(string name) iscachedpic = #316;
string(string name, float trywad) precache_pic = #317;
vector(string picname) draw_getimagesize = #318;
void(string name) freepic = #319;
float(vector position, float character, vector scale, vector rgb, float alpha, float flag) drawcharacter = #320;
float(vector position, string text, vector scale, vector rgb, float alpha, float flag) drawstring = #321;
float(vector position, string pic, vector size, vector rgb, float alpha, float flag) drawpic = #322;
float(vector position, vector size, vector rgb, float alpha, float flag) drawfill = #323;
void(float x, float y, float width, float height) drawsetcliparea = #324;
void(void) drawresetcliparea = #325;
float drawcolorcodedstring(vector position, string text, vector scale, vector rgb, float alpha, float flag) = #326;

float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;

void(entity e, float mdlindex) setmodelindex = #333;
string(float mdlindex) modelnameforindex = #334;
float(string effectname) particleeffectnum = #335;
void(entity ent, float effectnum, vector start, vector end) trailparticles = #336;
void(float effectnum, vector origin [, vector dir, float count]) pointparticles = #337;
void(string s, ...) centerprint = #338;
void(string s, ...) print = #339;
string(float keynum) keynumtostring = #340;
float(string keyname) stringtokeynum = #341;
string(float keynum) getkeybind = #342;
void(float usecursor) setcursormode = #343;
vector() getmousepos = #344;
float(float framenum) getinputstate = #345;
void(float sens) setsensitivityscaler = #346;
void() runstandardplayerphysics = #347;
string(float playernum, string keyname) getplayerkeyvalue = #348;
float() isdemo = #349;
float() isserver = #350;
void(vector origin, vector forward, vector right, vector up) SetListener = #351;
void(string cmdname) registercommand = #352;
float(entity ent) wasfreed = #353;
string(string key) serverkey = #354;

float() ReadByte = #360;
float() ReadChar = #361;
float() ReadShort = #362;
float() ReadLong = #363;
float() ReadCoord = #364;
float() ReadAngle = #365;
string() ReadString = #366;	//warning: this returns a temporary!
float() ReadFloat = #367;
&lt;/pre&gt;

==Constants==
&lt;pre&gt;
// add-entity mask bits
float MASK_ENGINE           = 1;
float MASK_ENGINEVIEWMODELS = 2;
float MASK_NORMAL           = 4;

// renderflag bits
float RF_VIEWMODEL          = 1;
float RF_EXTERNALMODEL      = 2;
float RF_DEPTHHACK          = 4;
float RF_ADDITIVE           = 8;
float RF_USEAXIS            = 16;

// flags for 2d drawing
float DRAWFLAG_NORMAL       = 0;
float DRAWFLAG_ADDITIVE     = 1;
float DRAWFLAG_MODULATE     = 2;
float DRAWFLAG_2XMODULATE   = 3;

// setview parameter
float VF_MIN                = 1;    //(vector)
float VF_MIN_X              = 2;    //(float)
float VF_MIN_Y              = 3;    //(float)
float VF_SIZE               = 4;    //(vector) (viewport size)
float VF_SIZE_Y             = 5;    //(float)
float VF_SIZE_X             = 6;    //(float)
float VF_VIEWPORT           = 7;    //(vector, vector)
float VF_FOV                = 8;    //(vector)
float VF_FOVX               = 9;    //(float)
float VF_FOVY               = 10;   //(float)
float VF_ORIGIN             = 11;   //(vector)
float VF_ORIGIN_X           = 12;   //(float)
float VF_ORIGIN_Y           = 13;   //(float)
float VF_ORIGIN_Z           = 14;   //(float)
float VF_ANGLES             = 15;   //(vector)
float VF_ANGLES_X           = 16;   //(float)
float VF_ANGLES_Y           = 17;   //(float)
float VF_ANGLES_Z           = 18;   //(float)
float VF_DRAWWORLD          = 19;   //(float)
float VF_DRAWENGINESBAR     = 20;   //(float)
float VF_DRAWCROSSHAIR      = 21;   //(float)

float VF_CL_VIEWANGLES      = 33;   //(vector)
float VF_CL_VIEWANGLES_X    = 34;   //(float)
float VF_CL_VIEWANGLES_Y    = 35;   //(float)
float VF_CL_VIEWANGLES_Z    = 36;   //(float)

float VF_PERSPECTIVE        = 200;  //(float)

// stats
// 0 - 31 are reserved for standard engine stats
// 32 - 128 are for QuakeC modders
float STAT_HEALTH           = 0;
float STAT_WEAPONMODEL      = 2;
float STAT_AMMO             = 3;
float STAT_ARMOR            = 4;
float STAT_WEAPONFRAME      = 5;
float STAT_SHELLS           = 6;
float STAT_NAILS            = 7;
float STAT_ROCKETS          = 8;
float STAT_CELLS            = 9;
float STAT_ACTIVEWEAPON     = 10;
float STAT_TOTALSECRETS     = 11;
float STAT_TOTALMONSTERS    = 12;
float STAT_SECRETS          = 13; // bumped on client side by svc_foundsecret
float STAT_MONSTERS         = 14; // bumped by svc_killedmonster
float STAT_ITEMS            = 15; // self.items bitmask from server

// buttons for input_buttons
float BUTTON_ATTACK         = 1;
float BUTTON_JUMP           = 2;
float BUTTON_3              = 4;
float BUTTON_4              = 8;
float BUTTON_5              = 16;
float BUTTON_6              = 32;
float BUTTON_7              = 64;
float BUTTON_8              = 128;
&lt;/pre&gt;
==Non-System Fields and Globals==
&lt;pre&gt;
float  intermission; // initially FALSE, set to TRUE when the server sends the SVC_INTERMISSION command
&lt;/pre&gt;</text>
      <sha1>o48u5gc9z5x04baxjua77dezry3ba4n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>571</id>
      <parentid>570</parentid>
      <timestamp>2008-03-25T16:11:19Z</timestamp>
      <contributor>
        <ip>79.69.19.41</ip>
      </contributor>
      <comment>/* Builtins */</comment>
      <text xml:space="preserve" bytes="10585">==System Globals==
&lt;pre&gt;
entity		self;
entity		other;
entity		world;
float		time;
float		frametime;

float 		player_localentnum;     //the entnum
float 		player_localnum;        //the playernum
float		maxclients;             //a constant filled in by the engine

float		clientcommandframe;     //player movement
float		servercommandframe;     //clientframe echoed off the server
string		mapname;

//
// global variables set by built in functions
//
vector		v_forward, v_up, v_right;  // set by makevectors()

// set by traceline / tracebox
float		trace_allsolid;
float		trace_startsolid;
float		trace_fraction;
vector		trace_endpos;
vector		trace_plane_normal;
float		trace_plane_dist;
entity		trace_ent;
float		trace_inopen;
float		trace_inwater;

//
// required prog functions
//
void()		CSQC_Init;
void()		CSQC_Shutdown;
float(float f, float t)	CSQC_InputEvent;
void()		CSQC_UpdateView;
float(string s)	CSQC_ConsoleCommand;

//these fields are read and set by the default player physics
vector		pmove_org;
vector		pmove_vel;
vector		pmove_mins;
vector		pmove_maxs;
//retrieved from the current movement commands (read by player physics)
float		input_timelength;
vector		input_angles;
vector		input_movevalues;  //forwards, right, up.
float		input_buttons;     //attack, use, jump (default physics only uses jump)

float		movevar_gravity;
float		movevar_stopspeed;
float		movevar_maxspeed;
float		movevar_spectatormaxspeed;  //used by NOCLIP movetypes.
float		movevar_accelerate;
float		movevar_airaccelerate;
float		movevar_wateraccelerate;
float		movevar_friction;
float		movevar_waterfriction;
float		movevar_entgravity;	//the local player's gravity field. Is a multiple
		                        //(1 is the normal value)
&lt;/pre&gt;

==System Fields==
&lt;pre&gt;
.float		modelindex;     // *** model index in the precached list
.vector		absmin, absmax;	// *** origin + mins / maxs

.float		entnum;         // *** the ent number as on the server
.float		drawmask;
.void()		predraw;
.float		movetype;
.float		solid;

.vector		origin;         // ***
.vector		oldorigin;      // ***
.vector		velocity;
.vector		angles;
.vector		avelocity;

.string		classname;      // spawn function
.string		model;
.float		frame;
.float		skin;
.float		effects;

.vector		mins, maxs;     // bounding box extents reletive to origin
.vector		size;           // maxs - mins

.void()		touch;
.void()		use;
.void()		think;
.void()		blocked;        // for doors or plats, called when can't push other

.float		nextthink;
.entity		chain;
.string		netname;
.entity 	enemy;
.float		flags;
.float		colormap;
.entity		owner;
&lt;/pre&gt;
==Builtins==

CSQC implements all the core quake functions except for:
* checkclient
* stuffcmd
* bprint
* sprint (use 'print' instead)
* aim
* writebyte
* writechar
* wruteshort
* writelong
* writecoord
* writeangle
* writestring
* writeentity
* precache_file
* changelevel
* logfrag (qw)
* infokey (qw)
* multicast (qw)

&lt;pre&gt;
// core functions from standard quake
void(vector ang) makevectors = #1;
void(entity e, vector o) setorigin = #2;
void(entity e, string m) setmodel = #3;
void(entity e, vector min, vector max) setsize = #4;
void(entity e, vector min, vector max) setabssize = #5;
void() break = #6;
float() random = #7;
void(entity e, float chan, string samp) sound = #8;
vector(vector v) normalize = #9;
void(string e) error = #10;
void(string e) objerror = #11;
float(vector v) vlen = #12;
float(vector v) vectoyaw = #13;
entity() spawn = #14;
void(entity e) remove = #15;
float(vector v1, vector v2, float tryents) traceline = #16;
entity() checkclient = #17;
entity(entity start, .string fld, string match) find = #18;
void(string s) precache_sound = #19;
void(string s) precache_model = #20;
void(entity client, string s, ...) stuffcmd = #21;
entity(vector org, float rad) findradius = #22;

string(float f) ftos = #26;
string(vector v) vtos = #27;
void() coredump = #28;
void() traceon = #29;
void() traceoff = #30;
void(entity e) eprint = #31;
float(float yaw, float dist) walkmove = #32;

float() droptofloor = #34;
void(float style, string value) lightstyle = #35;
float(float v) rint = #36;
float(float v) floor = #37;
float(float v) ceil = #38;

float(entity e) checkbottom = #40;
float(vector v) pointcontents = #41;

float(float f) fabs = #43;
float(string s) cvar = #45;
void(string s) localcmd = #46;
entity(entity e) nextent = #47;
void(vector o, vector d, float color, float count) particle = #48;
void() ChangeYaw = #49;

vector(vector v) vectoangles = #51;

string(string s) precache_file = #68;
void(entity e) makestatic = #69;

void(string var, string val) cvar_set = #72;

void(vector pos, string samp, float vol, float atten) ambientsound = #74;
string(string s) precache_model2 = #75;
string(string s) precache_sound2 = #76;
string(string s) precache_file2 = #77;



// core ext_csqc functions
void() R_ClearScene = #300;
void(float mask) R_AddEntities = #301;
void(entity ent) R_AddEntity = #302;
float(float property, ...) R_SetView = #303;
void() R_RenderScene = #304;
void(vector org, float radius, vector lightcolours) R_AddDynamicLight = #305;
void(string texturename, float flag[, float is2d, float lines]) R_BeginPolygon = #306;
void(vector org, vector texcoords, vector rgb, float alpha) R_PolygonVertex = #307;
void() R_EndPolygon = #308;

vector (vector v) cs_unproject = #310;
vector (vector v) cs_project = #311;

void(float width, vector pos1, vector pos2, float flag) drawline = #315;
float(string name) iscachedpic = #316;
string(string name, float trywad) precache_pic = #317;
vector(string picname) draw_getimagesize = #318;
void(string name) freepic = #319;
float(vector position, float character, vector scale, vector rgb, float alpha, float flag) drawcharacter = #320;
float(vector position, string text, vector scale, vector rgb, float alpha, float flag) drawstring = #321;
float(vector position, string pic, vector size, vector rgb, float alpha, float flag) drawpic = #322;
float(vector position, vector size, vector rgb, float alpha, float flag) drawfill = #323;
void(float x, float y, float width, float height) drawsetcliparea = #324;
void(void) drawresetcliparea = #325;
float drawcolorcodedstring(vector position, string text, vector scale, vector rgb, float alpha, float flag) = #326;

float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;

void(entity e, float mdlindex) setmodelindex = #333;
string(float mdlindex) modelnameforindex = #334;
float(string effectname) particleeffectnum = #335;
void(entity ent, float effectnum, vector start, vector end) trailparticles = #336;
void(float effectnum, vector origin [, vector dir, float count]) pointparticles = #337;
void(string s, ...) centerprint = #338;
void(string s, ...) print = #339;
string(float keynum) keynumtostring = #340;
float(string keyname) stringtokeynum = #341;
string(float keynum) getkeybind = #342;
void(float usecursor) setcursormode = #343;
vector() getmousepos = #344;
float(float framenum) getinputstate = #345;
void(float sens) setsensitivityscaler = #346;
void() runstandardplayerphysics = #347;
string(float playernum, string keyname) getplayerkeyvalue = #348;
float() isdemo = #349;
float() isserver = #350;
void(vector origin, vector forward, vector right, vector up) SetListener = #351;
void(string cmdname) registercommand = #352;
float(entity ent) wasfreed = #353;
string(string key) serverkey = #354;

float() ReadByte = #360;
float() ReadChar = #361;
float() ReadShort = #362;
float() ReadLong = #363;
float() ReadCoord = #364;
float() ReadAngle = #365;
string() ReadString = #366;	//warning: this returns a temporary!
float() ReadFloat = #367;
&lt;/pre&gt;

==Constants==
&lt;pre&gt;
// add-entity mask bits
float MASK_ENGINE           = 1;
float MASK_ENGINEVIEWMODELS = 2;
float MASK_NORMAL           = 4;

// renderflag bits
float RF_VIEWMODEL          = 1;
float RF_EXTERNALMODEL      = 2;
float RF_DEPTHHACK          = 4;
float RF_ADDITIVE           = 8;
float RF_USEAXIS            = 16;

// flags for 2d drawing
float DRAWFLAG_NORMAL       = 0;
float DRAWFLAG_ADDITIVE     = 1;
float DRAWFLAG_MODULATE     = 2;
float DRAWFLAG_2XMODULATE   = 3;

// setview parameter
float VF_MIN                = 1;    //(vector)
float VF_MIN_X              = 2;    //(float)
float VF_MIN_Y              = 3;    //(float)
float VF_SIZE               = 4;    //(vector) (viewport size)
float VF_SIZE_Y             = 5;    //(float)
float VF_SIZE_X             = 6;    //(float)
float VF_VIEWPORT           = 7;    //(vector, vector)
float VF_FOV                = 8;    //(vector)
float VF_FOVX               = 9;    //(float)
float VF_FOVY               = 10;   //(float)
float VF_ORIGIN             = 11;   //(vector)
float VF_ORIGIN_X           = 12;   //(float)
float VF_ORIGIN_Y           = 13;   //(float)
float VF_ORIGIN_Z           = 14;   //(float)
float VF_ANGLES             = 15;   //(vector)
float VF_ANGLES_X           = 16;   //(float)
float VF_ANGLES_Y           = 17;   //(float)
float VF_ANGLES_Z           = 18;   //(float)
float VF_DRAWWORLD          = 19;   //(float)
float VF_DRAWENGINESBAR     = 20;   //(float)
float VF_DRAWCROSSHAIR      = 21;   //(float)

float VF_CL_VIEWANGLES      = 33;   //(vector)
float VF_CL_VIEWANGLES_X    = 34;   //(float)
float VF_CL_VIEWANGLES_Y    = 35;   //(float)
float VF_CL_VIEWANGLES_Z    = 36;   //(float)

float VF_PERSPECTIVE        = 200;  //(float)

// stats
// 0 - 31 are reserved for standard engine stats
// 32 - 128 are for QuakeC modders
float STAT_HEALTH           = 0;
float STAT_WEAPONMODEL      = 2;
float STAT_AMMO             = 3;
float STAT_ARMOR            = 4;
float STAT_WEAPONFRAME      = 5;
float STAT_SHELLS           = 6;
float STAT_NAILS            = 7;
float STAT_ROCKETS          = 8;
float STAT_CELLS            = 9;
float STAT_ACTIVEWEAPON     = 10;
float STAT_TOTALSECRETS     = 11;
float STAT_TOTALMONSTERS    = 12;
float STAT_SECRETS          = 13; // bumped on client side by svc_foundsecret
float STAT_MONSTERS         = 14; // bumped by svc_killedmonster
float STAT_ITEMS            = 15; // self.items bitmask from server

// buttons for input_buttons
float BUTTON_ATTACK         = 1;
float BUTTON_JUMP           = 2;
float BUTTON_3              = 4;
float BUTTON_4              = 8;
float BUTTON_5              = 16;
float BUTTON_6              = 32;
float BUTTON_7              = 64;
float BUTTON_8              = 128;
&lt;/pre&gt;
==Non-System Fields and Globals==
&lt;pre&gt;
float  intermission; // initially FALSE, set to TRUE when the server sends the SVC_INTERMISSION command
&lt;/pre&gt;</text>
      <sha1>crf6emqqdv3k5jwifzlezadj2dqyjqg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>915</id>
      <parentid>571</parentid>
      <timestamp>2008-08-04T23:59:50Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <comment>/* Constants */</comment>
      <text xml:space="preserve" bytes="10891">==System Globals==
&lt;pre&gt;
entity		self;
entity		other;
entity		world;
float		time;
float		frametime;

float 		player_localentnum;     //the entnum
float 		player_localnum;        //the playernum
float		maxclients;             //a constant filled in by the engine

float		clientcommandframe;     //player movement
float		servercommandframe;     //clientframe echoed off the server
string		mapname;

//
// global variables set by built in functions
//
vector		v_forward, v_up, v_right;  // set by makevectors()

// set by traceline / tracebox
float		trace_allsolid;
float		trace_startsolid;
float		trace_fraction;
vector		trace_endpos;
vector		trace_plane_normal;
float		trace_plane_dist;
entity		trace_ent;
float		trace_inopen;
float		trace_inwater;

//
// required prog functions
//
void()		CSQC_Init;
void()		CSQC_Shutdown;
float(float f, float t)	CSQC_InputEvent;
void()		CSQC_UpdateView;
float(string s)	CSQC_ConsoleCommand;

//these fields are read and set by the default player physics
vector		pmove_org;
vector		pmove_vel;
vector		pmove_mins;
vector		pmove_maxs;
//retrieved from the current movement commands (read by player physics)
float		input_timelength;
vector		input_angles;
vector		input_movevalues;  //forwards, right, up.
float		input_buttons;     //attack, use, jump (default physics only uses jump)

float		movevar_gravity;
float		movevar_stopspeed;
float		movevar_maxspeed;
float		movevar_spectatormaxspeed;  //used by NOCLIP movetypes.
float		movevar_accelerate;
float		movevar_airaccelerate;
float		movevar_wateraccelerate;
float		movevar_friction;
float		movevar_waterfriction;
float		movevar_entgravity;	//the local player's gravity field. Is a multiple
		                        //(1 is the normal value)
&lt;/pre&gt;

==System Fields==
&lt;pre&gt;
.float		modelindex;     // *** model index in the precached list
.vector		absmin, absmax;	// *** origin + mins / maxs

.float		entnum;         // *** the ent number as on the server
.float		drawmask;
.void()		predraw;
.float		movetype;
.float		solid;

.vector		origin;         // ***
.vector		oldorigin;      // ***
.vector		velocity;
.vector		angles;
.vector		avelocity;

.string		classname;      // spawn function
.string		model;
.float		frame;
.float		skin;
.float		effects;

.vector		mins, maxs;     // bounding box extents reletive to origin
.vector		size;           // maxs - mins

.void()		touch;
.void()		use;
.void()		think;
.void()		blocked;        // for doors or plats, called when can't push other

.float		nextthink;
.entity		chain;
.string		netname;
.entity 	enemy;
.float		flags;
.float		colormap;
.entity		owner;
&lt;/pre&gt;
==Builtins==

CSQC implements all the core quake functions except for:
* checkclient
* stuffcmd
* bprint
* sprint (use 'print' instead)
* aim
* writebyte
* writechar
* wruteshort
* writelong
* writecoord
* writeangle
* writestring
* writeentity
* precache_file
* changelevel
* logfrag (qw)
* infokey (qw)
* multicast (qw)

&lt;pre&gt;
// core functions from standard quake
void(vector ang) makevectors = #1;
void(entity e, vector o) setorigin = #2;
void(entity e, string m) setmodel = #3;
void(entity e, vector min, vector max) setsize = #4;
void(entity e, vector min, vector max) setabssize = #5;
void() break = #6;
float() random = #7;
void(entity e, float chan, string samp) sound = #8;
vector(vector v) normalize = #9;
void(string e) error = #10;
void(string e) objerror = #11;
float(vector v) vlen = #12;
float(vector v) vectoyaw = #13;
entity() spawn = #14;
void(entity e) remove = #15;
float(vector v1, vector v2, float tryents) traceline = #16;
entity() checkclient = #17;
entity(entity start, .string fld, string match) find = #18;
void(string s) precache_sound = #19;
void(string s) precache_model = #20;
void(entity client, string s, ...) stuffcmd = #21;
entity(vector org, float rad) findradius = #22;

string(float f) ftos = #26;
string(vector v) vtos = #27;
void() coredump = #28;
void() traceon = #29;
void() traceoff = #30;
void(entity e) eprint = #31;
float(float yaw, float dist) walkmove = #32;

float() droptofloor = #34;
void(float style, string value) lightstyle = #35;
float(float v) rint = #36;
float(float v) floor = #37;
float(float v) ceil = #38;

float(entity e) checkbottom = #40;
float(vector v) pointcontents = #41;

float(float f) fabs = #43;
float(string s) cvar = #45;
void(string s) localcmd = #46;
entity(entity e) nextent = #47;
void(vector o, vector d, float color, float count) particle = #48;
void() ChangeYaw = #49;

vector(vector v) vectoangles = #51;

string(string s) precache_file = #68;
void(entity e) makestatic = #69;

void(string var, string val) cvar_set = #72;

void(vector pos, string samp, float vol, float atten) ambientsound = #74;
string(string s) precache_model2 = #75;
string(string s) precache_sound2 = #76;
string(string s) precache_file2 = #77;



// core ext_csqc functions
void() R_ClearScene = #300;
void(float mask) R_AddEntities = #301;
void(entity ent) R_AddEntity = #302;
float(float property, ...) R_SetView = #303;
void() R_RenderScene = #304;
void(vector org, float radius, vector lightcolours) R_AddDynamicLight = #305;
void(string texturename, float flag[, float is2d, float lines]) R_BeginPolygon = #306;
void(vector org, vector texcoords, vector rgb, float alpha) R_PolygonVertex = #307;
void() R_EndPolygon = #308;

vector (vector v) cs_unproject = #310;
vector (vector v) cs_project = #311;

void(float width, vector pos1, vector pos2, float flag) drawline = #315;
float(string name) iscachedpic = #316;
string(string name, float trywad) precache_pic = #317;
vector(string picname) draw_getimagesize = #318;
void(string name) freepic = #319;
float(vector position, float character, vector scale, vector rgb, float alpha, float flag) drawcharacter = #320;
float(vector position, string text, vector scale, vector rgb, float alpha, float flag) drawstring = #321;
float(vector position, string pic, vector size, vector rgb, float alpha, float flag) drawpic = #322;
float(vector position, vector size, vector rgb, float alpha, float flag) drawfill = #323;
void(float x, float y, float width, float height) drawsetcliparea = #324;
void(void) drawresetcliparea = #325;
float drawcolorcodedstring(vector position, string text, vector scale, vector rgb, float alpha, float flag) = #326;

float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;

void(entity e, float mdlindex) setmodelindex = #333;
string(float mdlindex) modelnameforindex = #334;
float(string effectname) particleeffectnum = #335;
void(entity ent, float effectnum, vector start, vector end) trailparticles = #336;
void(float effectnum, vector origin [, vector dir, float count]) pointparticles = #337;
void(string s, ...) centerprint = #338;
void(string s, ...) print = #339;
string(float keynum) keynumtostring = #340;
float(string keyname) stringtokeynum = #341;
string(float keynum) getkeybind = #342;
void(float usecursor) setcursormode = #343;
vector() getmousepos = #344;
float(float framenum) getinputstate = #345;
void(float sens) setsensitivityscaler = #346;
void() runstandardplayerphysics = #347;
string(float playernum, string keyname) getplayerkeyvalue = #348;
float() isdemo = #349;
float() isserver = #350;
void(vector origin, vector forward, vector right, vector up) SetListener = #351;
void(string cmdname) registercommand = #352;
float(entity ent) wasfreed = #353;
string(string key) serverkey = #354;

float() ReadByte = #360;
float() ReadChar = #361;
float() ReadShort = #362;
float() ReadLong = #363;
float() ReadCoord = #364;
float() ReadAngle = #365;
string() ReadString = #366;	//warning: this returns a temporary!
float() ReadFloat = #367;
&lt;/pre&gt;

==Constants==
&lt;pre&gt;
// add-entity mask bits
float MASK_ENGINE           = 1;
float MASK_ENGINEVIEWMODELS = 2;
float MASK_NORMAL           = 4;

// renderflag bits
float RF_VIEWMODEL          = 1;
float RF_EXTERNALMODEL      = 2;
float RF_DEPTHHACK          = 4;
float RF_ADDITIVE           = 8;
float RF_USEAXIS            = 16;

// flags for 2d drawing
float DRAWFLAG_NORMAL       = 0;
float DRAWFLAG_ADDITIVE     = 1;
float DRAWFLAG_MODULATE     = 2;
float DRAWFLAG_2XMODULATE   = 3;

// setview parameter
float VF_MIN                = 1;    //(vector)
float VF_MIN_X              = 2;    //(float)
float VF_MIN_Y              = 3;    //(float)
float VF_SIZE               = 4;    //(vector) (viewport size)
float VF_SIZE_Y             = 5;    //(float)
float VF_SIZE_X             = 6;    //(float)
float VF_VIEWPORT           = 7;    //(vector, vector)
float VF_FOV                = 8;    //(vector)
float VF_FOVX               = 9;    //(float)
float VF_FOVY               = 10;   //(float)
float VF_ORIGIN             = 11;   //(vector)
float VF_ORIGIN_X           = 12;   //(float)
float VF_ORIGIN_Y           = 13;   //(float)
float VF_ORIGIN_Z           = 14;   //(float)
float VF_ANGLES             = 15;   //(vector)
float VF_ANGLES_X           = 16;   //(float)
float VF_ANGLES_Y           = 17;   //(float)
float VF_ANGLES_Z           = 18;   //(float)
float VF_DRAWWORLD          = 19;   //(float)
float VF_DRAWENGINESBAR     = 20;   //(float)
float VF_DRAWCROSSHAIR      = 21;   //(float)

float VF_CL_VIEWANGLES      = 33;   //(vector)
float VF_CL_VIEWANGLES_X    = 34;   //(float)
float VF_CL_VIEWANGLES_Y    = 35;   //(float)
float VF_CL_VIEWANGLES_Z    = 36;   //(float)

float VF_PERSPECTIVE        = 200;  //(float)

// stats
// 0 - 31 are reserved for standard engine stats
// 32 - 128 are for QuakeC modders
float STAT_HEALTH           = 0;
float STAT_WEAPONMODEL      = 2;
float STAT_AMMO             = 3;
float STAT_ARMOR            = 4;
float STAT_WEAPONFRAME      = 5;
float STAT_SHELLS           = 6;
float STAT_NAILS            = 7;
float STAT_ROCKETS          = 8;
float STAT_CELLS            = 9;
float STAT_ACTIVEWEAPON     = 10;
float STAT_TOTALSECRETS     = 11;
float STAT_TOTALMONSTERS    = 12;
float STAT_SECRETS          = 13; // bumped on client side by svc_foundsecret
float STAT_MONSTERS         = 14; // bumped by svc_killedmonster
float STAT_ITEMS            = 15; // self.items bitmask from server

// buttons for input_buttons
float BUTTON_ATTACK         = 1;
float BUTTON_JUMP           = 2;
float BUTTON_3              = 4;
float BUTTON_4              = 8;
float BUTTON_5              = 16;
float BUTTON_6              = 32;
float BUTTON_7              = 64;
float BUTTON_8              = 128;
// supported by DarkPlaces
float BUTTON_USE = 256;
float BUTTON_CHAT = 512;
float BUTTON_PRYDONCURSOR = 1024;
float BUTTON_9 = 2048;
float BUTTON_10 = 4096;
float BUTTON_11 = 8192;
float BUTTON_12 = 16384;
float BUTTON_13 = 32768;
float BUTTON_14 = 65536;
float BUTTON_15 = 131072;
float BUTTON_16 = 262;
&lt;/pre&gt;

==Non-System Fields and Globals==
&lt;pre&gt;
float  intermission; // initially FALSE, set to TRUE when the server sends the SVC_INTERMISSION command
&lt;/pre&gt;</text>
      <sha1>c2cau576jmib1kym9d8s79q13fpubl4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>916</id>
      <parentid>915</parentid>
      <timestamp>2008-08-05T00:02:53Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <comment>/* Constants */</comment>
      <text xml:space="preserve" bytes="11045">==System Globals==
&lt;pre&gt;
entity		self;
entity		other;
entity		world;
float		time;
float		frametime;

float 		player_localentnum;     //the entnum
float 		player_localnum;        //the playernum
float		maxclients;             //a constant filled in by the engine

float		clientcommandframe;     //player movement
float		servercommandframe;     //clientframe echoed off the server
string		mapname;

//
// global variables set by built in functions
//
vector		v_forward, v_up, v_right;  // set by makevectors()

// set by traceline / tracebox
float		trace_allsolid;
float		trace_startsolid;
float		trace_fraction;
vector		trace_endpos;
vector		trace_plane_normal;
float		trace_plane_dist;
entity		trace_ent;
float		trace_inopen;
float		trace_inwater;

//
// required prog functions
//
void()		CSQC_Init;
void()		CSQC_Shutdown;
float(float f, float t)	CSQC_InputEvent;
void()		CSQC_UpdateView;
float(string s)	CSQC_ConsoleCommand;

//these fields are read and set by the default player physics
vector		pmove_org;
vector		pmove_vel;
vector		pmove_mins;
vector		pmove_maxs;
//retrieved from the current movement commands (read by player physics)
float		input_timelength;
vector		input_angles;
vector		input_movevalues;  //forwards, right, up.
float		input_buttons;     //attack, use, jump (default physics only uses jump)

float		movevar_gravity;
float		movevar_stopspeed;
float		movevar_maxspeed;
float		movevar_spectatormaxspeed;  //used by NOCLIP movetypes.
float		movevar_accelerate;
float		movevar_airaccelerate;
float		movevar_wateraccelerate;
float		movevar_friction;
float		movevar_waterfriction;
float		movevar_entgravity;	//the local player's gravity field. Is a multiple
		                        //(1 is the normal value)
&lt;/pre&gt;

==System Fields==
&lt;pre&gt;
.float		modelindex;     // *** model index in the precached list
.vector		absmin, absmax;	// *** origin + mins / maxs

.float		entnum;         // *** the ent number as on the server
.float		drawmask;
.void()		predraw;
.float		movetype;
.float		solid;

.vector		origin;         // ***
.vector		oldorigin;      // ***
.vector		velocity;
.vector		angles;
.vector		avelocity;

.string		classname;      // spawn function
.string		model;
.float		frame;
.float		skin;
.float		effects;

.vector		mins, maxs;     // bounding box extents reletive to origin
.vector		size;           // maxs - mins

.void()		touch;
.void()		use;
.void()		think;
.void()		blocked;        // for doors or plats, called when can't push other

.float		nextthink;
.entity		chain;
.string		netname;
.entity 	enemy;
.float		flags;
.float		colormap;
.entity		owner;
&lt;/pre&gt;
==Builtins==

CSQC implements all the core quake functions except for:
* checkclient
* stuffcmd
* bprint
* sprint (use 'print' instead)
* aim
* writebyte
* writechar
* wruteshort
* writelong
* writecoord
* writeangle
* writestring
* writeentity
* precache_file
* changelevel
* logfrag (qw)
* infokey (qw)
* multicast (qw)

&lt;pre&gt;
// core functions from standard quake
void(vector ang) makevectors = #1;
void(entity e, vector o) setorigin = #2;
void(entity e, string m) setmodel = #3;
void(entity e, vector min, vector max) setsize = #4;
void(entity e, vector min, vector max) setabssize = #5;
void() break = #6;
float() random = #7;
void(entity e, float chan, string samp) sound = #8;
vector(vector v) normalize = #9;
void(string e) error = #10;
void(string e) objerror = #11;
float(vector v) vlen = #12;
float(vector v) vectoyaw = #13;
entity() spawn = #14;
void(entity e) remove = #15;
float(vector v1, vector v2, float tryents) traceline = #16;
entity() checkclient = #17;
entity(entity start, .string fld, string match) find = #18;
void(string s) precache_sound = #19;
void(string s) precache_model = #20;
void(entity client, string s, ...) stuffcmd = #21;
entity(vector org, float rad) findradius = #22;

string(float f) ftos = #26;
string(vector v) vtos = #27;
void() coredump = #28;
void() traceon = #29;
void() traceoff = #30;
void(entity e) eprint = #31;
float(float yaw, float dist) walkmove = #32;

float() droptofloor = #34;
void(float style, string value) lightstyle = #35;
float(float v) rint = #36;
float(float v) floor = #37;
float(float v) ceil = #38;

float(entity e) checkbottom = #40;
float(vector v) pointcontents = #41;

float(float f) fabs = #43;
float(string s) cvar = #45;
void(string s) localcmd = #46;
entity(entity e) nextent = #47;
void(vector o, vector d, float color, float count) particle = #48;
void() ChangeYaw = #49;

vector(vector v) vectoangles = #51;

string(string s) precache_file = #68;
void(entity e) makestatic = #69;

void(string var, string val) cvar_set = #72;

void(vector pos, string samp, float vol, float atten) ambientsound = #74;
string(string s) precache_model2 = #75;
string(string s) precache_sound2 = #76;
string(string s) precache_file2 = #77;



// core ext_csqc functions
void() R_ClearScene = #300;
void(float mask) R_AddEntities = #301;
void(entity ent) R_AddEntity = #302;
float(float property, ...) R_SetView = #303;
void() R_RenderScene = #304;
void(vector org, float radius, vector lightcolours) R_AddDynamicLight = #305;
void(string texturename, float flag[, float is2d, float lines]) R_BeginPolygon = #306;
void(vector org, vector texcoords, vector rgb, float alpha) R_PolygonVertex = #307;
void() R_EndPolygon = #308;

vector (vector v) cs_unproject = #310;
vector (vector v) cs_project = #311;

void(float width, vector pos1, vector pos2, float flag) drawline = #315;
float(string name) iscachedpic = #316;
string(string name, float trywad) precache_pic = #317;
vector(string picname) draw_getimagesize = #318;
void(string name) freepic = #319;
float(vector position, float character, vector scale, vector rgb, float alpha, float flag) drawcharacter = #320;
float(vector position, string text, vector scale, vector rgb, float alpha, float flag) drawstring = #321;
float(vector position, string pic, vector size, vector rgb, float alpha, float flag) drawpic = #322;
float(vector position, vector size, vector rgb, float alpha, float flag) drawfill = #323;
void(float x, float y, float width, float height) drawsetcliparea = #324;
void(void) drawresetcliparea = #325;
float drawcolorcodedstring(vector position, string text, vector scale, vector rgb, float alpha, float flag) = #326;

float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;

void(entity e, float mdlindex) setmodelindex = #333;
string(float mdlindex) modelnameforindex = #334;
float(string effectname) particleeffectnum = #335;
void(entity ent, float effectnum, vector start, vector end) trailparticles = #336;
void(float effectnum, vector origin [, vector dir, float count]) pointparticles = #337;
void(string s, ...) centerprint = #338;
void(string s, ...) print = #339;
string(float keynum) keynumtostring = #340;
float(string keyname) stringtokeynum = #341;
string(float keynum) getkeybind = #342;
void(float usecursor) setcursormode = #343;
vector() getmousepos = #344;
float(float framenum) getinputstate = #345;
void(float sens) setsensitivityscaler = #346;
void() runstandardplayerphysics = #347;
string(float playernum, string keyname) getplayerkeyvalue = #348;
float() isdemo = #349;
float() isserver = #350;
void(vector origin, vector forward, vector right, vector up) SetListener = #351;
void(string cmdname) registercommand = #352;
float(entity ent) wasfreed = #353;
string(string key) serverkey = #354;

float() ReadByte = #360;
float() ReadChar = #361;
float() ReadShort = #362;
float() ReadLong = #363;
float() ReadCoord = #364;
float() ReadAngle = #365;
string() ReadString = #366;	//warning: this returns a temporary!
float() ReadFloat = #367;
&lt;/pre&gt;

==Constants==
&lt;pre&gt;
// add-entity mask bits
float MASK_ENGINE           = 1;
float MASK_ENGINEVIEWMODELS = 2;
float MASK_NORMAL           = 4;

// renderflag bits
float RF_VIEWMODEL          = 1;
float RF_EXTERNALMODEL      = 2;
float RF_DEPTHHACK          = 4;
float RF_ADDITIVE           = 8;
float RF_USEAXIS            = 16;

// flags for 2d drawing
float DRAWFLAG_NORMAL       = 0;
float DRAWFLAG_ADDITIVE     = 1;
float DRAWFLAG_MODULATE     = 2;
float DRAWFLAG_2XMODULATE   = 3;

// setview parameter
float VF_MIN                = 1;    //(vector)
float VF_MIN_X              = 2;    //(float)
float VF_MIN_Y              = 3;    //(float)
float VF_SIZE               = 4;    //(vector) (viewport size)
float VF_SIZE_Y             = 5;    //(float)
float VF_SIZE_X             = 6;    //(float)
float VF_VIEWPORT           = 7;    //(vector, vector)
float VF_FOV                = 8;    //(vector)
float VF_FOVX               = 9;    //(float)
float VF_FOVY               = 10;   //(float)
float VF_ORIGIN             = 11;   //(vector)
float VF_ORIGIN_X           = 12;   //(float)
float VF_ORIGIN_Y           = 13;   //(float)
float VF_ORIGIN_Z           = 14;   //(float)
float VF_ANGLES             = 15;   //(vector)
float VF_ANGLES_X           = 16;   //(float)
float VF_ANGLES_Y           = 17;   //(float)
float VF_ANGLES_Z           = 18;   //(float)
float VF_DRAWWORLD          = 19;   //(float)
float VF_DRAWENGINESBAR     = 20;   //(float)
float VF_DRAWCROSSHAIR      = 21;   //(float)

float VF_CL_VIEWANGLES      = 33;   //(vector)
float VF_CL_VIEWANGLES_X    = 34;   //(float)
float VF_CL_VIEWANGLES_Y    = 35;   //(float)
float VF_CL_VIEWANGLES_Z    = 36;   //(float)

float VF_PERSPECTIVE        = 200;  //(float)

// stats
// 0 - 31 are reserved for standard engine stats
// 32 - 128 are for QuakeC modders
float STAT_HEALTH           = 0;
float STAT_WEAPONMODEL      = 2;
float STAT_AMMO             = 3;
float STAT_ARMOR            = 4;
float STAT_WEAPONFRAME      = 5;
float STAT_SHELLS           = 6;
float STAT_NAILS            = 7;
float STAT_ROCKETS          = 8;
float STAT_CELLS            = 9;
float STAT_ACTIVEWEAPON     = 10;
float STAT_TOTALSECRETS     = 11;
float STAT_TOTALMONSTERS    = 12;
float STAT_SECRETS          = 13; // bumped on client side by svc_foundsecret
float STAT_MONSTERS         = 14; // bumped by svc_killedmonster
float STAT_ITEMS            = 15; // self.items bitmask from server
float STAT_VIEWHEIGHT       = 16;

// buttons for input_buttons
float BUTTON_ATTACK         = 1;
float BUTTON_JUMP           = 2;
float BUTTON_3              = 4;
float BUTTON_4              = 8;
float BUTTON_5              = 16;
float BUTTON_6              = 32;
float BUTTON_7              = 64;
float BUTTON_8              = 128;
// supported by DarkPlaces
float BUTTON_USE            = 256;
float BUTTON_CHAT           = 512;
float BUTTON_PRYDONCURSOR   = 1024;
float BUTTON_9              = 2048;
float BUTTON_10             = 4096;
float BUTTON_11             = 8192;
float BUTTON_12             = 16384;
float BUTTON_13             = 32768;
float BUTTON_14             = 65536;
float BUTTON_15             = 131072;
float BUTTON_16             = 262;
&lt;/pre&gt;

==Non-System Fields and Globals==
&lt;pre&gt;
float  intermission; // initially FALSE, set to TRUE when the server sends the SVC_INTERMISSION command
&lt;/pre&gt;</text>
      <sha1>j1m0vwf3ulrhwcgkpb029xl7krr74bk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>917</id>
      <parentid>916</parentid>
      <timestamp>2008-08-24T05:07:22Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>some changes that i had to make to get it working (at least with darkplaces)</comment>
      <text xml:space="preserve" bytes="11040">==System Globals==
&lt;pre&gt;
entity		self;
entity		other;
entity		world;
float		time;
float		frametime;

float 		player_localentnum;     //the entnum
float 		player_localnum;        //the playernum
float		maxclients;             //a constant filled in by the engine

float		clientcommandframe;     //player movement
float		servercommandframe;     //clientframe echoed off the server
string		mapname;

//
// global variables set by built in functions
//
vector		v_forward, v_up, v_right;  // set by makevectors()

// set by traceline / tracebox
float		trace_allsolid;
float		trace_startsolid;
float		trace_fraction;
vector		trace_endpos;
vector		trace_plane_normal;
float		trace_plane_dist;
entity		trace_ent;
float		trace_inopen;
float		trace_inwater;

//
// required prog functions
//
void()		CSQC_Init;
void()		CSQC_Shutdown;
float(float f, float t, float n)	CSQC_InputEvent;
void()		CSQC_UpdateView;
float(string s)	CSQC_ConsoleCommand;

//these fields are read and set by the default player physics
vector		pmove_org;
vector		pmove_vel;
vector		pmove_mins;
vector		pmove_maxs;
//retrieved from the current movement commands (read by player physics)
float		input_timelength;
vector		input_angles;
vector		input_movevalues;  //forwards, right, up.
float		input_buttons;     //attack, use, jump (default physics only uses jump)

float		movevar_gravity;
float		movevar_stopspeed;
float		movevar_maxspeed;
float		movevar_spectatormaxspeed;  //used by NOCLIP movetypes.
float		movevar_accelerate;
float		movevar_airaccelerate;
float		movevar_wateraccelerate;
float		movevar_friction;
float		movevar_waterfriction;
float		movevar_entgravity;	//the local player's gravity field. Is a multiple
		                        //(1 is the normal value)
&lt;/pre&gt;

==System Fields==
&lt;pre&gt;
.float		modelindex;     // *** model index in the precached list
.vector		absmin, absmax;	// *** origin + mins / maxs

.float		entnum;         // *** the ent number as on the server
.float		drawmask;
.void()		predraw;
.float		movetype;
.float		solid;

.vector		origin;         // ***
.vector		oldorigin;      // ***
.vector		velocity;
.vector		angles;
.vector		avelocity;

.string		classname;      // spawn function
.string		model;
.float		frame;
.float		skin;
.float		effects;

.vector		mins, maxs;     // bounding box extents reletive to origin
.vector		size;           // maxs - mins

.void()		touch;
.void()		use;
.void()		think;
.void()		blocked;        // for doors or plats, called when can't push other

.float		nextthink;
.entity		chain;
.string		netname;
.entity 	enemy;
.float		flags;
.float		colormap;
.entity		owner;
&lt;/pre&gt;
==Builtins==

CSQC implements all the core quake functions except for:
* checkclient
* stuffcmd
* bprint
* sprint (use 'print' instead)
* aim
* writebyte
* writechar
* wruteshort
* writelong
* writecoord
* writeangle
* writestring
* writeentity
* precache_file
* changelevel
* logfrag (qw)
* infokey (qw)
* multicast (qw)

&lt;pre&gt;
// core functions from standard quake
void(vector ang) makevectors = #1;
void(entity e, vector o) setorigin = #2;
void(entity e, string m) setmodel = #3;
void(entity e, vector min, vector max) setsize = #4;
void(entity e, vector min, vector max) setabssize = #5;
void() break = #6;
float() random = #7;
void(entity e, float chan, string samp) sound = #8;
vector(vector v) normalize = #9;
void(string e) error = #10;
void(string e) objerror = #11;
float(vector v) vlen = #12;
float(vector v) vectoyaw = #13;
entity() spawn = #14;
void(entity e) remove = #15;
float(vector v1, vector v2, float tryents) traceline = #16;
entity() checkclient = #17;
entity(entity start, .string fld, string match) find = #18;
void(string s) precache_sound = #19;
void(string s) precache_model = #20;
void(entity client, string s, ...) stuffcmd = #21;
entity(vector org, float rad) findradius = #22;

string(float f) ftos = #26;
string(vector v) vtos = #27;
void() coredump = #28;
void() traceon = #29;
void() traceoff = #30;
void(entity e) eprint = #31;
float(float yaw, float dist) walkmove = #32;

float() droptofloor = #34;
void(float style, string value) lightstyle = #35;
float(float v) rint = #36;
float(float v) floor = #37;
float(float v) ceil = #38;

float(entity e) checkbottom = #40;
float(vector v) pointcontents = #41;

float(float f) fabs = #43;
float(string s) cvar = #45;
void(string s) localcmd = #46;
entity(entity e) nextent = #47;
void(vector o, vector d, float color, float count) particle = #48;
void() ChangeYaw = #49;

vector(vector v) vectoangles = #51;

string(string s) precache_file = #68;
void(entity e) makestatic = #69;

void(string var, string val) cvar_set = #72;

void(vector pos, string samp, float vol, float atten) ambientsound = #74;
string(string s) precache_model2 = #75;
string(string s) precache_sound2 = #76;
string(string s) precache_file2 = #77;



// core ext_csqc functions
void() R_ClearScene = #300;
void(float mask) R_AddEntities = #301;
void(entity ent) R_AddEntity = #302;
float(float property, ...) R_SetView = #303;
void() R_RenderScene = #304;
void(vector org, float radius, vector lightcolours) R_AddDynamicLight = #305;
void(string texturename, float flag[, float is2d, float lines]) R_BeginPolygon = #306;
void(vector org, vector texcoords, vector rgb, float alpha) R_PolygonVertex = #307;
void() R_EndPolygon = #308;

vector (vector v) cs_unproject = #310;
vector (vector v) cs_project = #311;

void(float width, vector pos1, vector pos2, float flag) drawline = #315;
float(string name) iscachedpic = #316;
string(string name) precache_pic = #317;
vector(string picname) draw_getimagesize = #318;
void(string name) freepic = #319;
float(vector position, float character, vector scale, vector rgb, float alpha, float flag) drawcharacter = #320;
float(vector position, string text, vector scale, vector rgb, float alpha, float flag) drawstring = #321;
float(vector position, string pic, vector size, vector rgb, float alpha, float flag) drawpic = #322;
float(vector position, vector size, vector rgb, float alpha, float flag) drawfill = #323;
void(float x, float y, float width, float height) drawsetcliparea = #324;
void(void) drawresetcliparea = #325;
float drawcolorcodedstring(vector position, string text, vector scale, vector rgb, float alpha, float flag) = #326;

float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;

void(entity e, float mdlindex) setmodelindex = #333;
string(float mdlindex) modelnameforindex = #334;
float(string effectname) particleeffectnum = #335;
void(entity ent, float effectnum, vector start, vector end) trailparticles = #336;
void(float effectnum, vector origin [, vector dir, float count]) pointparticles = #337;
void(string s, ...) centerprint = #338;
void(string s, ...) print = #339;
string(float keynum) keynumtostring = #340;
float(string keyname) stringtokeynum = #341;
string(float keynum) getkeybind = #342;
void(float usecursor) setcursormode = #343;
vector() getmousepos = #344;
float(float framenum) getinputstate = #345;
void(float sens) setsensitivityscaler = #346;
void() runstandardplayerphysics = #347;
string(float playernum, string keyname) getplayerkeyvalue = #348;
float() isdemo = #349;
float() isserver = #350;
void(vector origin, vector forward, vector right, vector up) SetListener = #351;
void(string cmdname) registercommand = #352;
float(entity ent) wasfreed = #353;
string(string key) serverkey = #354;

float() ReadByte = #360;
float() ReadChar = #361;
float() ReadShort = #362;
float() ReadLong = #363;
float() ReadCoord = #364;
float() ReadAngle = #365;
string() ReadString = #366;	//warning: this returns a temporary!
float() ReadFloat = #367;
&lt;/pre&gt;

==Constants==
&lt;pre&gt;
// add-entity mask bits
float MASK_ENGINE           = 1;
float MASK_ENGINEVIEWMODELS = 2;
float MASK_NORMAL           = 4;

// renderflag bits
float RF_VIEWMODEL          = 1;
float RF_EXTERNALMODEL      = 2;
float RF_DEPTHHACK          = 4;
float RF_ADDITIVE           = 8;
float RF_USEAXIS            = 16;

// flags for 2d drawing
float DRAWFLAG_NORMAL       = 0;
float DRAWFLAG_ADDITIVE     = 1;
float DRAWFLAG_MODULATE     = 2;
float DRAWFLAG_2XMODULATE   = 3;

// setview parameter
float VF_MIN                = 1;    //(vector)
float VF_MIN_X              = 2;    //(float)
float VF_MIN_Y              = 3;    //(float)
float VF_SIZE               = 4;    //(vector) (viewport size)
float VF_SIZE_Y             = 5;    //(float)
float VF_SIZE_X             = 6;    //(float)
float VF_VIEWPORT           = 7;    //(vector, vector)
float VF_FOV                = 8;    //(vector)
float VF_FOVX               = 9;    //(float)
float VF_FOVY               = 10;   //(float)
float VF_ORIGIN             = 11;   //(vector)
float VF_ORIGIN_X           = 12;   //(float)
float VF_ORIGIN_Y           = 13;   //(float)
float VF_ORIGIN_Z           = 14;   //(float)
float VF_ANGLES             = 15;   //(vector)
float VF_ANGLES_X           = 16;   //(float)
float VF_ANGLES_Y           = 17;   //(float)
float VF_ANGLES_Z           = 18;   //(float)
float VF_DRAWWORLD          = 19;   //(float)
float VF_DRAWENGINESBAR     = 20;   //(float)
float VF_DRAWCROSSHAIR      = 21;   //(float)

float VF_CL_VIEWANGLES      = 33;   //(vector)
float VF_CL_VIEWANGLES_X    = 34;   //(float)
float VF_CL_VIEWANGLES_Y    = 35;   //(float)
float VF_CL_VIEWANGLES_Z    = 36;   //(float)

float VF_PERSPECTIVE        = 200;  //(float)

// stats
// 0 - 31 are reserved for standard engine stats
// 32 - 128 are for QuakeC modders
float STAT_HEALTH           = 0;
float STAT_WEAPONMODEL      = 2;
float STAT_AMMO             = 3;
float STAT_ARMOR            = 4;
float STAT_WEAPONFRAME      = 5;
float STAT_SHELLS           = 6;
float STAT_NAILS            = 7;
float STAT_ROCKETS          = 8;
float STAT_CELLS            = 9;
float STAT_ACTIVEWEAPON     = 10;
float STAT_TOTALSECRETS     = 11;
float STAT_TOTALMONSTERS    = 12;
float STAT_SECRETS          = 13; // bumped on client side by svc_foundsecret
float STAT_MONSTERS         = 14; // bumped by svc_killedmonster
float STAT_ITEMS            = 15; // self.items bitmask from server
float STAT_VIEWHEIGHT       = 16;

// buttons for input_buttons
float BUTTON_ATTACK         = 1;
float BUTTON_JUMP           = 2;
float BUTTON_3              = 4;
float BUTTON_4              = 8;
float BUTTON_5              = 16;
float BUTTON_6              = 32;
float BUTTON_7              = 64;
float BUTTON_8              = 128;
// supported by DarkPlaces
float BUTTON_USE            = 256;
float BUTTON_CHAT           = 512;
float BUTTON_PRYDONCURSOR   = 1024;
float BUTTON_9              = 2048;
float BUTTON_10             = 4096;
float BUTTON_11             = 8192;
float BUTTON_12             = 16384;
float BUTTON_13             = 32768;
float BUTTON_14             = 65536;
float BUTTON_15             = 131072;
float BUTTON_16             = 262;
&lt;/pre&gt;

==Non-System Fields and Globals==
&lt;pre&gt;
float  intermission; // initially FALSE, set to TRUE when the server sends the SVC_INTERMISSION command
&lt;/pre&gt;</text>
      <sha1>ooe2sz83pvi2fnvfh1zrpxhc5966xac</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>919</id>
      <parentid>917</parentid>
      <timestamp>2008-08-24T06:06:17Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>no stuffcmd on client</comment>
      <text xml:space="preserve" bytes="10989">==System Globals==
&lt;pre&gt;
entity		self;
entity		other;
entity		world;
float		time;
float		frametime;

float 		player_localentnum;     //the entnum
float 		player_localnum;        //the playernum
float		maxclients;             //a constant filled in by the engine

float		clientcommandframe;     //player movement
float		servercommandframe;     //clientframe echoed off the server
string		mapname;

//
// global variables set by built in functions
//
vector		v_forward, v_up, v_right;  // set by makevectors()

// set by traceline / tracebox
float		trace_allsolid;
float		trace_startsolid;
float		trace_fraction;
vector		trace_endpos;
vector		trace_plane_normal;
float		trace_plane_dist;
entity		trace_ent;
float		trace_inopen;
float		trace_inwater;

//
// required prog functions
//
void()		CSQC_Init;
void()		CSQC_Shutdown;
float(float f, float t, float n)	CSQC_InputEvent;
void()		CSQC_UpdateView;
float(string s)	CSQC_ConsoleCommand;

//these fields are read and set by the default player physics
vector		pmove_org;
vector		pmove_vel;
vector		pmove_mins;
vector		pmove_maxs;
//retrieved from the current movement commands (read by player physics)
float		input_timelength;
vector		input_angles;
vector		input_movevalues;  //forwards, right, up.
float		input_buttons;     //attack, use, jump (default physics only uses jump)

float		movevar_gravity;
float		movevar_stopspeed;
float		movevar_maxspeed;
float		movevar_spectatormaxspeed;  //used by NOCLIP movetypes.
float		movevar_accelerate;
float		movevar_airaccelerate;
float		movevar_wateraccelerate;
float		movevar_friction;
float		movevar_waterfriction;
float		movevar_entgravity;	//the local player's gravity field. Is a multiple
		                        //(1 is the normal value)
&lt;/pre&gt;

==System Fields==
&lt;pre&gt;
.float		modelindex;     // *** model index in the precached list
.vector		absmin, absmax;	// *** origin + mins / maxs

.float		entnum;         // *** the ent number as on the server
.float		drawmask;
.void()		predraw;
.float		movetype;
.float		solid;

.vector		origin;         // ***
.vector		oldorigin;      // ***
.vector		velocity;
.vector		angles;
.vector		avelocity;

.string		classname;      // spawn function
.string		model;
.float		frame;
.float		skin;
.float		effects;

.vector		mins, maxs;     // bounding box extents reletive to origin
.vector		size;           // maxs - mins

.void()		touch;
.void()		use;
.void()		think;
.void()		blocked;        // for doors or plats, called when can't push other

.float		nextthink;
.entity		chain;
.string		netname;
.entity 	enemy;
.float		flags;
.float		colormap;
.entity		owner;
&lt;/pre&gt;
==Builtins==

CSQC implements all the core quake functions except for:
* checkclient
* stuffcmd
* bprint
* sprint (use 'print' instead)
* aim
* writebyte
* writechar
* wruteshort
* writelong
* writecoord
* writeangle
* writestring
* writeentity
* precache_file
* changelevel
* logfrag (qw)
* infokey (qw)
* multicast (qw)

&lt;pre&gt;
// core functions from standard quake
void(vector ang) makevectors = #1;
void(entity e, vector o) setorigin = #2;
void(entity e, string m) setmodel = #3;
void(entity e, vector min, vector max) setsize = #4;
void(entity e, vector min, vector max) setabssize = #5;
void() break = #6;
float() random = #7;
void(entity e, float chan, string samp) sound = #8;
vector(vector v) normalize = #9;
void(string e) error = #10;
void(string e) objerror = #11;
float(vector v) vlen = #12;
float(vector v) vectoyaw = #13;
entity() spawn = #14;
void(entity e) remove = #15;
float(vector v1, vector v2, float tryents) traceline = #16;
entity() checkclient = #17;
entity(entity start, .string fld, string match) find = #18;
void(string s) precache_sound = #19;
void(string s) precache_model = #20;
entity(vector org, float rad) findradius = #22;

string(float f) ftos = #26;
string(vector v) vtos = #27;
void() coredump = #28;
void() traceon = #29;
void() traceoff = #30;
void(entity e) eprint = #31;
float(float yaw, float dist) walkmove = #32;

float() droptofloor = #34;
void(float style, string value) lightstyle = #35;
float(float v) rint = #36;
float(float v) floor = #37;
float(float v) ceil = #38;

float(entity e) checkbottom = #40;
float(vector v) pointcontents = #41;

float(float f) fabs = #43;
float(string s) cvar = #45;
void(string s) localcmd = #46;
entity(entity e) nextent = #47;
void(vector o, vector d, float color, float count) particle = #48;
void() ChangeYaw = #49;

vector(vector v) vectoangles = #51;

string(string s) precache_file = #68;
void(entity e) makestatic = #69;

void(string var, string val) cvar_set = #72;

void(vector pos, string samp, float vol, float atten) ambientsound = #74;
string(string s) precache_model2 = #75;
string(string s) precache_sound2 = #76;
string(string s) precache_file2 = #77;



// core ext_csqc functions
void() R_ClearScene = #300;
void(float mask) R_AddEntities = #301;
void(entity ent) R_AddEntity = #302;
float(float property, ...) R_SetView = #303;
void() R_RenderScene = #304;
void(vector org, float radius, vector lightcolours) R_AddDynamicLight = #305;
void(string texturename, float flag[, float is2d, float lines]) R_BeginPolygon = #306;
void(vector org, vector texcoords, vector rgb, float alpha) R_PolygonVertex = #307;
void() R_EndPolygon = #308;

vector (vector v) cs_unproject = #310;
vector (vector v) cs_project = #311;

void(float width, vector pos1, vector pos2, float flag) drawline = #315;
float(string name) iscachedpic = #316;
string(string name) precache_pic = #317;
vector(string picname) draw_getimagesize = #318;
void(string name) freepic = #319;
float(vector position, float character, vector scale, vector rgb, float alpha, float flag) drawcharacter = #320;
float(vector position, string text, vector scale, vector rgb, float alpha, float flag) drawstring = #321;
float(vector position, string pic, vector size, vector rgb, float alpha, float flag) drawpic = #322;
float(vector position, vector size, vector rgb, float alpha, float flag) drawfill = #323;
void(float x, float y, float width, float height) drawsetcliparea = #324;
void(void) drawresetcliparea = #325;
float drawcolorcodedstring(vector position, string text, vector scale, vector rgb, float alpha, float flag) = #326;

float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;

void(entity e, float mdlindex) setmodelindex = #333;
string(float mdlindex) modelnameforindex = #334;
float(string effectname) particleeffectnum = #335;
void(entity ent, float effectnum, vector start, vector end) trailparticles = #336;
void(float effectnum, vector origin [, vector dir, float count]) pointparticles = #337;
void(string s, ...) centerprint = #338;
void(string s, ...) print = #339;
string(float keynum) keynumtostring = #340;
float(string keyname) stringtokeynum = #341;
string(float keynum) getkeybind = #342;
void(float usecursor) setcursormode = #343;
vector() getmousepos = #344;
float(float framenum) getinputstate = #345;
void(float sens) setsensitivityscaler = #346;
void() runstandardplayerphysics = #347;
string(float playernum, string keyname) getplayerkeyvalue = #348;
float() isdemo = #349;
float() isserver = #350;
void(vector origin, vector forward, vector right, vector up) SetListener = #351;
void(string cmdname) registercommand = #352;
float(entity ent) wasfreed = #353;
string(string key) serverkey = #354;

float() ReadByte = #360;
float() ReadChar = #361;
float() ReadShort = #362;
float() ReadLong = #363;
float() ReadCoord = #364;
float() ReadAngle = #365;
string() ReadString = #366;	//warning: this returns a temporary!
float() ReadFloat = #367;
&lt;/pre&gt;

==Constants==
&lt;pre&gt;
// add-entity mask bits
float MASK_ENGINE           = 1;
float MASK_ENGINEVIEWMODELS = 2;
float MASK_NORMAL           = 4;

// renderflag bits
float RF_VIEWMODEL          = 1;
float RF_EXTERNALMODEL      = 2;
float RF_DEPTHHACK          = 4;
float RF_ADDITIVE           = 8;
float RF_USEAXIS            = 16;

// flags for 2d drawing
float DRAWFLAG_NORMAL       = 0;
float DRAWFLAG_ADDITIVE     = 1;
float DRAWFLAG_MODULATE     = 2;
float DRAWFLAG_2XMODULATE   = 3;

// setview parameter
float VF_MIN                = 1;    //(vector)
float VF_MIN_X              = 2;    //(float)
float VF_MIN_Y              = 3;    //(float)
float VF_SIZE               = 4;    //(vector) (viewport size)
float VF_SIZE_Y             = 5;    //(float)
float VF_SIZE_X             = 6;    //(float)
float VF_VIEWPORT           = 7;    //(vector, vector)
float VF_FOV                = 8;    //(vector)
float VF_FOVX               = 9;    //(float)
float VF_FOVY               = 10;   //(float)
float VF_ORIGIN             = 11;   //(vector)
float VF_ORIGIN_X           = 12;   //(float)
float VF_ORIGIN_Y           = 13;   //(float)
float VF_ORIGIN_Z           = 14;   //(float)
float VF_ANGLES             = 15;   //(vector)
float VF_ANGLES_X           = 16;   //(float)
float VF_ANGLES_Y           = 17;   //(float)
float VF_ANGLES_Z           = 18;   //(float)
float VF_DRAWWORLD          = 19;   //(float)
float VF_DRAWENGINESBAR     = 20;   //(float)
float VF_DRAWCROSSHAIR      = 21;   //(float)

float VF_CL_VIEWANGLES      = 33;   //(vector)
float VF_CL_VIEWANGLES_X    = 34;   //(float)
float VF_CL_VIEWANGLES_Y    = 35;   //(float)
float VF_CL_VIEWANGLES_Z    = 36;   //(float)

float VF_PERSPECTIVE        = 200;  //(float)

// stats
// 0 - 31 are reserved for standard engine stats
// 32 - 128 are for QuakeC modders
float STAT_HEALTH           = 0;
float STAT_WEAPONMODEL      = 2;
float STAT_AMMO             = 3;
float STAT_ARMOR            = 4;
float STAT_WEAPONFRAME      = 5;
float STAT_SHELLS           = 6;
float STAT_NAILS            = 7;
float STAT_ROCKETS          = 8;
float STAT_CELLS            = 9;
float STAT_ACTIVEWEAPON     = 10;
float STAT_TOTALSECRETS     = 11;
float STAT_TOTALMONSTERS    = 12;
float STAT_SECRETS          = 13; // bumped on client side by svc_foundsecret
float STAT_MONSTERS         = 14; // bumped by svc_killedmonster
float STAT_ITEMS            = 15; // self.items bitmask from server
float STAT_VIEWHEIGHT       = 16;

// buttons for input_buttons
float BUTTON_ATTACK         = 1;
float BUTTON_JUMP           = 2;
float BUTTON_3              = 4;
float BUTTON_4              = 8;
float BUTTON_5              = 16;
float BUTTON_6              = 32;
float BUTTON_7              = 64;
float BUTTON_8              = 128;
// supported by DarkPlaces
float BUTTON_USE            = 256;
float BUTTON_CHAT           = 512;
float BUTTON_PRYDONCURSOR   = 1024;
float BUTTON_9              = 2048;
float BUTTON_10             = 4096;
float BUTTON_11             = 8192;
float BUTTON_12             = 16384;
float BUTTON_13             = 32768;
float BUTTON_14             = 65536;
float BUTTON_15             = 131072;
float BUTTON_16             = 262;
&lt;/pre&gt;

==Non-System Fields and Globals==
&lt;pre&gt;
float  intermission; // initially FALSE, set to TRUE when the server sends the SVC_INTERMISSION command
&lt;/pre&gt;</text>
      <sha1>ne8g1ebo2pn38kc6tju657piqiu6cvf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>966</id>
      <parentid>919</parentid>
      <timestamp>2008-12-10T20:57:19Z</timestamp>
      <contributor>
        <ip>79.69.68.185</ip>
      </contributor>
      <comment>/* Constants */</comment>
      <text xml:space="preserve" bytes="10989">==System Globals==
&lt;pre&gt;
entity		self;
entity		other;
entity		world;
float		time;
float		frametime;

float 		player_localentnum;     //the entnum
float 		player_localnum;        //the playernum
float		maxclients;             //a constant filled in by the engine

float		clientcommandframe;     //player movement
float		servercommandframe;     //clientframe echoed off the server
string		mapname;

//
// global variables set by built in functions
//
vector		v_forward, v_up, v_right;  // set by makevectors()

// set by traceline / tracebox
float		trace_allsolid;
float		trace_startsolid;
float		trace_fraction;
vector		trace_endpos;
vector		trace_plane_normal;
float		trace_plane_dist;
entity		trace_ent;
float		trace_inopen;
float		trace_inwater;

//
// required prog functions
//
void()		CSQC_Init;
void()		CSQC_Shutdown;
float(float f, float t, float n)	CSQC_InputEvent;
void()		CSQC_UpdateView;
float(string s)	CSQC_ConsoleCommand;

//these fields are read and set by the default player physics
vector		pmove_org;
vector		pmove_vel;
vector		pmove_mins;
vector		pmove_maxs;
//retrieved from the current movement commands (read by player physics)
float		input_timelength;
vector		input_angles;
vector		input_movevalues;  //forwards, right, up.
float		input_buttons;     //attack, use, jump (default physics only uses jump)

float		movevar_gravity;
float		movevar_stopspeed;
float		movevar_maxspeed;
float		movevar_spectatormaxspeed;  //used by NOCLIP movetypes.
float		movevar_accelerate;
float		movevar_airaccelerate;
float		movevar_wateraccelerate;
float		movevar_friction;
float		movevar_waterfriction;
float		movevar_entgravity;	//the local player's gravity field. Is a multiple
		                        //(1 is the normal value)
&lt;/pre&gt;

==System Fields==
&lt;pre&gt;
.float		modelindex;     // *** model index in the precached list
.vector		absmin, absmax;	// *** origin + mins / maxs

.float		entnum;         // *** the ent number as on the server
.float		drawmask;
.void()		predraw;
.float		movetype;
.float		solid;

.vector		origin;         // ***
.vector		oldorigin;      // ***
.vector		velocity;
.vector		angles;
.vector		avelocity;

.string		classname;      // spawn function
.string		model;
.float		frame;
.float		skin;
.float		effects;

.vector		mins, maxs;     // bounding box extents reletive to origin
.vector		size;           // maxs - mins

.void()		touch;
.void()		use;
.void()		think;
.void()		blocked;        // for doors or plats, called when can't push other

.float		nextthink;
.entity		chain;
.string		netname;
.entity 	enemy;
.float		flags;
.float		colormap;
.entity		owner;
&lt;/pre&gt;
==Builtins==

CSQC implements all the core quake functions except for:
* checkclient
* stuffcmd
* bprint
* sprint (use 'print' instead)
* aim
* writebyte
* writechar
* wruteshort
* writelong
* writecoord
* writeangle
* writestring
* writeentity
* precache_file
* changelevel
* logfrag (qw)
* infokey (qw)
* multicast (qw)

&lt;pre&gt;
// core functions from standard quake
void(vector ang) makevectors = #1;
void(entity e, vector o) setorigin = #2;
void(entity e, string m) setmodel = #3;
void(entity e, vector min, vector max) setsize = #4;
void(entity e, vector min, vector max) setabssize = #5;
void() break = #6;
float() random = #7;
void(entity e, float chan, string samp) sound = #8;
vector(vector v) normalize = #9;
void(string e) error = #10;
void(string e) objerror = #11;
float(vector v) vlen = #12;
float(vector v) vectoyaw = #13;
entity() spawn = #14;
void(entity e) remove = #15;
float(vector v1, vector v2, float tryents) traceline = #16;
entity() checkclient = #17;
entity(entity start, .string fld, string match) find = #18;
void(string s) precache_sound = #19;
void(string s) precache_model = #20;
entity(vector org, float rad) findradius = #22;

string(float f) ftos = #26;
string(vector v) vtos = #27;
void() coredump = #28;
void() traceon = #29;
void() traceoff = #30;
void(entity e) eprint = #31;
float(float yaw, float dist) walkmove = #32;

float() droptofloor = #34;
void(float style, string value) lightstyle = #35;
float(float v) rint = #36;
float(float v) floor = #37;
float(float v) ceil = #38;

float(entity e) checkbottom = #40;
float(vector v) pointcontents = #41;

float(float f) fabs = #43;
float(string s) cvar = #45;
void(string s) localcmd = #46;
entity(entity e) nextent = #47;
void(vector o, vector d, float color, float count) particle = #48;
void() ChangeYaw = #49;

vector(vector v) vectoangles = #51;

string(string s) precache_file = #68;
void(entity e) makestatic = #69;

void(string var, string val) cvar_set = #72;

void(vector pos, string samp, float vol, float atten) ambientsound = #74;
string(string s) precache_model2 = #75;
string(string s) precache_sound2 = #76;
string(string s) precache_file2 = #77;



// core ext_csqc functions
void() R_ClearScene = #300;
void(float mask) R_AddEntities = #301;
void(entity ent) R_AddEntity = #302;
float(float property, ...) R_SetView = #303;
void() R_RenderScene = #304;
void(vector org, float radius, vector lightcolours) R_AddDynamicLight = #305;
void(string texturename, float flag[, float is2d, float lines]) R_BeginPolygon = #306;
void(vector org, vector texcoords, vector rgb, float alpha) R_PolygonVertex = #307;
void() R_EndPolygon = #308;

vector (vector v) cs_unproject = #310;
vector (vector v) cs_project = #311;

void(float width, vector pos1, vector pos2, float flag) drawline = #315;
float(string name) iscachedpic = #316;
string(string name) precache_pic = #317;
vector(string picname) draw_getimagesize = #318;
void(string name) freepic = #319;
float(vector position, float character, vector scale, vector rgb, float alpha, float flag) drawcharacter = #320;
float(vector position, string text, vector scale, vector rgb, float alpha, float flag) drawstring = #321;
float(vector position, string pic, vector size, vector rgb, float alpha, float flag) drawpic = #322;
float(vector position, vector size, vector rgb, float alpha, float flag) drawfill = #323;
void(float x, float y, float width, float height) drawsetcliparea = #324;
void(void) drawresetcliparea = #325;
float drawcolorcodedstring(vector position, string text, vector scale, vector rgb, float alpha, float flag) = #326;

float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;

void(entity e, float mdlindex) setmodelindex = #333;
string(float mdlindex) modelnameforindex = #334;
float(string effectname) particleeffectnum = #335;
void(entity ent, float effectnum, vector start, vector end) trailparticles = #336;
void(float effectnum, vector origin [, vector dir, float count]) pointparticles = #337;
void(string s, ...) centerprint = #338;
void(string s, ...) print = #339;
string(float keynum) keynumtostring = #340;
float(string keyname) stringtokeynum = #341;
string(float keynum) getkeybind = #342;
void(float usecursor) setcursormode = #343;
vector() getmousepos = #344;
float(float framenum) getinputstate = #345;
void(float sens) setsensitivityscaler = #346;
void() runstandardplayerphysics = #347;
string(float playernum, string keyname) getplayerkeyvalue = #348;
float() isdemo = #349;
float() isserver = #350;
void(vector origin, vector forward, vector right, vector up) SetListener = #351;
void(string cmdname) registercommand = #352;
float(entity ent) wasfreed = #353;
string(string key) serverkey = #354;

float() ReadByte = #360;
float() ReadChar = #361;
float() ReadShort = #362;
float() ReadLong = #363;
float() ReadCoord = #364;
float() ReadAngle = #365;
string() ReadString = #366;	//warning: this returns a temporary!
float() ReadFloat = #367;
&lt;/pre&gt;

==Constants==
&lt;pre&gt;
// add-entity mask bits
float MASK_ENGINE           = 1;
float MASK_ENGINEVIEWMODELS = 2;
float MASK_NORMAL           = 4;

// renderflag bits
float RF_VIEWMODEL          = 1;
float RF_EXTERNALMODEL      = 2;
float RF_DEPTHHACK          = 4;
float RF_ADDITIVE           = 8;
float RF_USEAXIS            = 16;

// flags for 2d drawing
float DRAWFLAG_NORMAL       = 0;
float DRAWFLAG_ADDITIVE     = 1;
float DRAWFLAG_MODULATE     = 2;
float DRAWFLAG_2XMODULATE   = 3;

// setview parameter
float VF_MIN                = 1;    //(vector)
float VF_MIN_X              = 2;    //(float)
float VF_MIN_Y              = 3;    //(float)
float VF_SIZE               = 4;    //(vector) (viewport size)
float VF_SIZE_X             = 5;    //(float)
float VF_SIZE_Y             = 6;    //(float)
float VF_VIEWPORT           = 7;    //(vector, vector)
float VF_FOV                = 8;    //(vector)
float VF_FOVX               = 9;    //(float)
float VF_FOVY               = 10;   //(float)
float VF_ORIGIN             = 11;   //(vector)
float VF_ORIGIN_X           = 12;   //(float)
float VF_ORIGIN_Y           = 13;   //(float)
float VF_ORIGIN_Z           = 14;   //(float)
float VF_ANGLES             = 15;   //(vector)
float VF_ANGLES_X           = 16;   //(float)
float VF_ANGLES_Y           = 17;   //(float)
float VF_ANGLES_Z           = 18;   //(float)
float VF_DRAWWORLD          = 19;   //(float)
float VF_DRAWENGINESBAR     = 20;   //(float)
float VF_DRAWCROSSHAIR      = 21;   //(float)

float VF_CL_VIEWANGLES      = 33;   //(vector)
float VF_CL_VIEWANGLES_X    = 34;   //(float)
float VF_CL_VIEWANGLES_Y    = 35;   //(float)
float VF_CL_VIEWANGLES_Z    = 36;   //(float)

float VF_PERSPECTIVE        = 200;  //(float)

// stats
// 0 - 31 are reserved for standard engine stats
// 32 - 128 are for QuakeC modders
float STAT_HEALTH           = 0;
float STAT_WEAPONMODEL      = 2;
float STAT_AMMO             = 3;
float STAT_ARMOR            = 4;
float STAT_WEAPONFRAME      = 5;
float STAT_SHELLS           = 6;
float STAT_NAILS            = 7;
float STAT_ROCKETS          = 8;
float STAT_CELLS            = 9;
float STAT_ACTIVEWEAPON     = 10;
float STAT_TOTALSECRETS     = 11;
float STAT_TOTALMONSTERS    = 12;
float STAT_SECRETS          = 13; // bumped on client side by svc_foundsecret
float STAT_MONSTERS         = 14; // bumped by svc_killedmonster
float STAT_ITEMS            = 15; // self.items bitmask from server
float STAT_VIEWHEIGHT       = 16;

// buttons for input_buttons
float BUTTON_ATTACK         = 1;
float BUTTON_JUMP           = 2;
float BUTTON_3              = 4;
float BUTTON_4              = 8;
float BUTTON_5              = 16;
float BUTTON_6              = 32;
float BUTTON_7              = 64;
float BUTTON_8              = 128;
// supported by DarkPlaces
float BUTTON_USE            = 256;
float BUTTON_CHAT           = 512;
float BUTTON_PRYDONCURSOR   = 1024;
float BUTTON_9              = 2048;
float BUTTON_10             = 4096;
float BUTTON_11             = 8192;
float BUTTON_12             = 16384;
float BUTTON_13             = 32768;
float BUTTON_14             = 65536;
float BUTTON_15             = 131072;
float BUTTON_16             = 262;
&lt;/pre&gt;

==Non-System Fields and Globals==
&lt;pre&gt;
float  intermission; // initially FALSE, set to TRUE when the server sends the SVC_INTERMISSION command
&lt;/pre&gt;</text>
      <sha1>a0ftkl35ywlz70junh4lukjirfv2bvt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>968</id>
      <parentid>966</parentid>
      <timestamp>2009-01-03T16:52:22Z</timestamp>
      <contributor>
        <ip>68.14.80.6</ip>
      </contributor>
      <comment>/* Builtins */</comment>
      <text xml:space="preserve" bytes="10989">==System Globals==
&lt;pre&gt;
entity		self;
entity		other;
entity		world;
float		time;
float		frametime;

float 		player_localentnum;     //the entnum
float 		player_localnum;        //the playernum
float		maxclients;             //a constant filled in by the engine

float		clientcommandframe;     //player movement
float		servercommandframe;     //clientframe echoed off the server
string		mapname;

//
// global variables set by built in functions
//
vector		v_forward, v_up, v_right;  // set by makevectors()

// set by traceline / tracebox
float		trace_allsolid;
float		trace_startsolid;
float		trace_fraction;
vector		trace_endpos;
vector		trace_plane_normal;
float		trace_plane_dist;
entity		trace_ent;
float		trace_inopen;
float		trace_inwater;

//
// required prog functions
//
void()		CSQC_Init;
void()		CSQC_Shutdown;
float(float f, float t, float n)	CSQC_InputEvent;
void()		CSQC_UpdateView;
float(string s)	CSQC_ConsoleCommand;

//these fields are read and set by the default player physics
vector		pmove_org;
vector		pmove_vel;
vector		pmove_mins;
vector		pmove_maxs;
//retrieved from the current movement commands (read by player physics)
float		input_timelength;
vector		input_angles;
vector		input_movevalues;  //forwards, right, up.
float		input_buttons;     //attack, use, jump (default physics only uses jump)

float		movevar_gravity;
float		movevar_stopspeed;
float		movevar_maxspeed;
float		movevar_spectatormaxspeed;  //used by NOCLIP movetypes.
float		movevar_accelerate;
float		movevar_airaccelerate;
float		movevar_wateraccelerate;
float		movevar_friction;
float		movevar_waterfriction;
float		movevar_entgravity;	//the local player's gravity field. Is a multiple
		                        //(1 is the normal value)
&lt;/pre&gt;

==System Fields==
&lt;pre&gt;
.float		modelindex;     // *** model index in the precached list
.vector		absmin, absmax;	// *** origin + mins / maxs

.float		entnum;         // *** the ent number as on the server
.float		drawmask;
.void()		predraw;
.float		movetype;
.float		solid;

.vector		origin;         // ***
.vector		oldorigin;      // ***
.vector		velocity;
.vector		angles;
.vector		avelocity;

.string		classname;      // spawn function
.string		model;
.float		frame;
.float		skin;
.float		effects;

.vector		mins, maxs;     // bounding box extents reletive to origin
.vector		size;           // maxs - mins

.void()		touch;
.void()		use;
.void()		think;
.void()		blocked;        // for doors or plats, called when can't push other

.float		nextthink;
.entity		chain;
.string		netname;
.entity 	enemy;
.float		flags;
.float		colormap;
.entity		owner;
&lt;/pre&gt;
==Builtins==

CSQC implements all the core quake functions except for:
* checkclient
* stuffcmd
* bprint
* sprint (use 'print' instead)
* aim
* writebyte
* writechar
* writeshort
* writelong
* writecoord
* writeangle
* writestring
* writeentity
* precache_file
* changelevel
* logfrag (qw)
* infokey (qw)
* multicast (qw)

&lt;pre&gt;
// core functions from standard quake
void(vector ang) makevectors = #1;
void(entity e, vector o) setorigin = #2;
void(entity e, string m) setmodel = #3;
void(entity e, vector min, vector max) setsize = #4;
void(entity e, vector min, vector max) setabssize = #5;
void() break = #6;
float() random = #7;
void(entity e, float chan, string samp) sound = #8;
vector(vector v) normalize = #9;
void(string e) error = #10;
void(string e) objerror = #11;
float(vector v) vlen = #12;
float(vector v) vectoyaw = #13;
entity() spawn = #14;
void(entity e) remove = #15;
float(vector v1, vector v2, float tryents) traceline = #16;
entity() checkclient = #17;
entity(entity start, .string fld, string match) find = #18;
void(string s) precache_sound = #19;
void(string s) precache_model = #20;
entity(vector org, float rad) findradius = #22;

string(float f) ftos = #26;
string(vector v) vtos = #27;
void() coredump = #28;
void() traceon = #29;
void() traceoff = #30;
void(entity e) eprint = #31;
float(float yaw, float dist) walkmove = #32;

float() droptofloor = #34;
void(float style, string value) lightstyle = #35;
float(float v) rint = #36;
float(float v) floor = #37;
float(float v) ceil = #38;

float(entity e) checkbottom = #40;
float(vector v) pointcontents = #41;

float(float f) fabs = #43;
float(string s) cvar = #45;
void(string s) localcmd = #46;
entity(entity e) nextent = #47;
void(vector o, vector d, float color, float count) particle = #48;
void() ChangeYaw = #49;

vector(vector v) vectoangles = #51;

string(string s) precache_file = #68;
void(entity e) makestatic = #69;

void(string var, string val) cvar_set = #72;

void(vector pos, string samp, float vol, float atten) ambientsound = #74;
string(string s) precache_model2 = #75;
string(string s) precache_sound2 = #76;
string(string s) precache_file2 = #77;



// core ext_csqc functions
void() R_ClearScene = #300;
void(float mask) R_AddEntities = #301;
void(entity ent) R_AddEntity = #302;
float(float property, ...) R_SetView = #303;
void() R_RenderScene = #304;
void(vector org, float radius, vector lightcolours) R_AddDynamicLight = #305;
void(string texturename, float flag[, float is2d, float lines]) R_BeginPolygon = #306;
void(vector org, vector texcoords, vector rgb, float alpha) R_PolygonVertex = #307;
void() R_EndPolygon = #308;

vector (vector v) cs_unproject = #310;
vector (vector v) cs_project = #311;

void(float width, vector pos1, vector pos2, float flag) drawline = #315;
float(string name) iscachedpic = #316;
string(string name) precache_pic = #317;
vector(string picname) draw_getimagesize = #318;
void(string name) freepic = #319;
float(vector position, float character, vector scale, vector rgb, float alpha, float flag) drawcharacter = #320;
float(vector position, string text, vector scale, vector rgb, float alpha, float flag) drawstring = #321;
float(vector position, string pic, vector size, vector rgb, float alpha, float flag) drawpic = #322;
float(vector position, vector size, vector rgb, float alpha, float flag) drawfill = #323;
void(float x, float y, float width, float height) drawsetcliparea = #324;
void(void) drawresetcliparea = #325;
float drawcolorcodedstring(vector position, string text, vector scale, vector rgb, float alpha, float flag) = #326;

float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;

void(entity e, float mdlindex) setmodelindex = #333;
string(float mdlindex) modelnameforindex = #334;
float(string effectname) particleeffectnum = #335;
void(entity ent, float effectnum, vector start, vector end) trailparticles = #336;
void(float effectnum, vector origin [, vector dir, float count]) pointparticles = #337;
void(string s, ...) centerprint = #338;
void(string s, ...) print = #339;
string(float keynum) keynumtostring = #340;
float(string keyname) stringtokeynum = #341;
string(float keynum) getkeybind = #342;
void(float usecursor) setcursormode = #343;
vector() getmousepos = #344;
float(float framenum) getinputstate = #345;
void(float sens) setsensitivityscaler = #346;
void() runstandardplayerphysics = #347;
string(float playernum, string keyname) getplayerkeyvalue = #348;
float() isdemo = #349;
float() isserver = #350;
void(vector origin, vector forward, vector right, vector up) SetListener = #351;
void(string cmdname) registercommand = #352;
float(entity ent) wasfreed = #353;
string(string key) serverkey = #354;

float() ReadByte = #360;
float() ReadChar = #361;
float() ReadShort = #362;
float() ReadLong = #363;
float() ReadCoord = #364;
float() ReadAngle = #365;
string() ReadString = #366;	//warning: this returns a temporary!
float() ReadFloat = #367;
&lt;/pre&gt;

==Constants==
&lt;pre&gt;
// add-entity mask bits
float MASK_ENGINE           = 1;
float MASK_ENGINEVIEWMODELS = 2;
float MASK_NORMAL           = 4;

// renderflag bits
float RF_VIEWMODEL          = 1;
float RF_EXTERNALMODEL      = 2;
float RF_DEPTHHACK          = 4;
float RF_ADDITIVE           = 8;
float RF_USEAXIS            = 16;

// flags for 2d drawing
float DRAWFLAG_NORMAL       = 0;
float DRAWFLAG_ADDITIVE     = 1;
float DRAWFLAG_MODULATE     = 2;
float DRAWFLAG_2XMODULATE   = 3;

// setview parameter
float VF_MIN                = 1;    //(vector)
float VF_MIN_X              = 2;    //(float)
float VF_MIN_Y              = 3;    //(float)
float VF_SIZE               = 4;    //(vector) (viewport size)
float VF_SIZE_X             = 5;    //(float)
float VF_SIZE_Y             = 6;    //(float)
float VF_VIEWPORT           = 7;    //(vector, vector)
float VF_FOV                = 8;    //(vector)
float VF_FOVX               = 9;    //(float)
float VF_FOVY               = 10;   //(float)
float VF_ORIGIN             = 11;   //(vector)
float VF_ORIGIN_X           = 12;   //(float)
float VF_ORIGIN_Y           = 13;   //(float)
float VF_ORIGIN_Z           = 14;   //(float)
float VF_ANGLES             = 15;   //(vector)
float VF_ANGLES_X           = 16;   //(float)
float VF_ANGLES_Y           = 17;   //(float)
float VF_ANGLES_Z           = 18;   //(float)
float VF_DRAWWORLD          = 19;   //(float)
float VF_DRAWENGINESBAR     = 20;   //(float)
float VF_DRAWCROSSHAIR      = 21;   //(float)

float VF_CL_VIEWANGLES      = 33;   //(vector)
float VF_CL_VIEWANGLES_X    = 34;   //(float)
float VF_CL_VIEWANGLES_Y    = 35;   //(float)
float VF_CL_VIEWANGLES_Z    = 36;   //(float)

float VF_PERSPECTIVE        = 200;  //(float)

// stats
// 0 - 31 are reserved for standard engine stats
// 32 - 128 are for QuakeC modders
float STAT_HEALTH           = 0;
float STAT_WEAPONMODEL      = 2;
float STAT_AMMO             = 3;
float STAT_ARMOR            = 4;
float STAT_WEAPONFRAME      = 5;
float STAT_SHELLS           = 6;
float STAT_NAILS            = 7;
float STAT_ROCKETS          = 8;
float STAT_CELLS            = 9;
float STAT_ACTIVEWEAPON     = 10;
float STAT_TOTALSECRETS     = 11;
float STAT_TOTALMONSTERS    = 12;
float STAT_SECRETS          = 13; // bumped on client side by svc_foundsecret
float STAT_MONSTERS         = 14; // bumped by svc_killedmonster
float STAT_ITEMS            = 15; // self.items bitmask from server
float STAT_VIEWHEIGHT       = 16;

// buttons for input_buttons
float BUTTON_ATTACK         = 1;
float BUTTON_JUMP           = 2;
float BUTTON_3              = 4;
float BUTTON_4              = 8;
float BUTTON_5              = 16;
float BUTTON_6              = 32;
float BUTTON_7              = 64;
float BUTTON_8              = 128;
// supported by DarkPlaces
float BUTTON_USE            = 256;
float BUTTON_CHAT           = 512;
float BUTTON_PRYDONCURSOR   = 1024;
float BUTTON_9              = 2048;
float BUTTON_10             = 4096;
float BUTTON_11             = 8192;
float BUTTON_12             = 16384;
float BUTTON_13             = 32768;
float BUTTON_14             = 65536;
float BUTTON_15             = 131072;
float BUTTON_16             = 262;
&lt;/pre&gt;

==Non-System Fields and Globals==
&lt;pre&gt;
float  intermission; // initially FALSE, set to TRUE when the server sends the SVC_INTERMISSION command
&lt;/pre&gt;</text>
      <sha1>52psco6r9lfenpvmazwrkdsptdh08ve</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1852</id>
      <parentid>968</parentid>
      <timestamp>2013-03-25T00:32:05Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="11013">==System Globals==
&lt;pre&gt;
entity		self;
entity		other;
entity		world;
float		time;
float		frametime;

float 		player_localentnum;     //the entnum
float 		player_localnum;        //the playernum
float		maxclients;             //a constant filled in by the engine

float		clientcommandframe;     //player movement
float		servercommandframe;     //clientframe echoed off the server
string		mapname;

//
// global variables set by built in functions
//
vector		v_forward, v_up, v_right;  // set by makevectors()

// set by traceline / tracebox
float		trace_allsolid;
float		trace_startsolid;
float		trace_fraction;
vector		trace_endpos;
vector		trace_plane_normal;
float		trace_plane_dist;
entity		trace_ent;
float		trace_inopen;
float		trace_inwater;

//
// required prog functions
//
void()		CSQC_Init;
void()		CSQC_Shutdown;
float(float f, float t, float n)	CSQC_InputEvent;
void()		CSQC_UpdateView;
float(string s)	CSQC_ConsoleCommand;

//these fields are read and set by the default player physics
vector		pmove_org;
vector		pmove_vel;
vector		pmove_mins;
vector		pmove_maxs;
//retrieved from the current movement commands (read by player physics)
float		input_timelength;
vector		input_angles;
vector		input_movevalues;  //forwards, right, up.
float		input_buttons;     //attack, use, jump (default physics only uses jump)

float		movevar_gravity;
float		movevar_stopspeed;
float		movevar_maxspeed;
float		movevar_spectatormaxspeed;  //used by NOCLIP movetypes.
float		movevar_accelerate;
float		movevar_airaccelerate;
float		movevar_wateraccelerate;
float		movevar_friction;
float		movevar_waterfriction;
float		movevar_entgravity;	//the local player's gravity field. Is a multiple
		                        //(1 is the normal value)
&lt;/pre&gt;

==System Fields==
&lt;pre&gt;
.float		modelindex;     // *** model index in the precached list
.vector		absmin, absmax;	// *** origin + mins / maxs

.float		entnum;         // *** the ent number as on the server
.float		drawmask;
.void()		predraw;
.float		movetype;
.float		solid;

.vector		origin;         // ***
.vector		oldorigin;      // ***
.vector		velocity;
.vector		angles;
.vector		avelocity;

.string		classname;      // spawn function
.string		model;
.float		frame;
.float		skin;
.float		effects;

.vector		mins, maxs;     // bounding box extents reletive to origin
.vector		size;           // maxs - mins

.void()		touch;
.void()		use;
.void()		think;
.void()		blocked;        // for doors or plats, called when can't push other

.float		nextthink;
.entity		chain;
.string		netname;
.entity 	enemy;
.float		flags;
.float		colormap;
.entity		owner;
&lt;/pre&gt;
==Builtins==

CSQC implements all the core quake functions except for:
* checkclient
* stuffcmd
* bprint
* sprint (use 'print' instead)
* aim
* writebyte
* writechar
* writeshort
* writelong
* writecoord
* writeangle
* writestring
* writeentity
* precache_file
* changelevel
* logfrag (qw)
* infokey (qw)
* multicast (qw)

&lt;pre&gt;
// core functions from standard quake
void(vector ang) makevectors = #1;
void(entity e, vector o) setorigin = #2;
void(entity e, string m) setmodel = #3;
void(entity e, vector min, vector max) setsize = #4;
void(entity e, vector min, vector max) setabssize = #5;
void() break = #6;
float() random = #7;
void(entity e, float chan, string samp) sound = #8;
vector(vector v) normalize = #9;
void(string e) error = #10;
void(string e) objerror = #11;
float(vector v) vlen = #12;
float(vector v) vectoyaw = #13;
entity() spawn = #14;
void(entity e) remove = #15;
float(vector v1, vector v2, float tryents) traceline = #16;
entity() checkclient = #17;
entity(entity start, .string fld, string match) find = #18;
void(string s) precache_sound = #19;
void(string s) precache_model = #20;
entity(vector org, float rad) findradius = #22;

string(float f) ftos = #26;
string(vector v) vtos = #27;
void() coredump = #28;
void() traceon = #29;
void() traceoff = #30;
void(entity e) eprint = #31;
float(float yaw, float dist) walkmove = #32;

float() droptofloor = #34;
void(float style, string value) lightstyle = #35;
float(float v) rint = #36;
float(float v) floor = #37;
float(float v) ceil = #38;

float(entity e) checkbottom = #40;
float(vector v) pointcontents = #41;

float(float f) fabs = #43;
float(string s) cvar = #45;
void(string s) localcmd = #46;
entity(entity e) nextent = #47;
void(vector o, vector d, float color, float count) particle = #48;
void() ChangeYaw = #49;

vector(vector v) vectoangles = #51;

string(string s) precache_file = #68;
void(entity e) makestatic = #69;

void(string var, string val) cvar_set = #72;

void(vector pos, string samp, float vol, float atten) ambientsound = #74;
string(string s) precache_model2 = #75;
string(string s) precache_sound2 = #76;
string(string s) precache_file2 = #77;



// core ext_csqc functions
void() R_ClearScene = #300;
void(float mask) R_AddEntities = #301;
void(entity ent) R_AddEntity = #302;
float(float property, ...) R_SetView = #303;
void() R_RenderScene = #304;
void(vector org, float radius, vector lightcolours) R_AddDynamicLight = #305;
void(string texturename, float flag[, float is2d, float lines]) R_BeginPolygon = #306;
void(vector org, vector texcoords, vector rgb, float alpha) R_PolygonVertex = #307;
void() R_EndPolygon = #308;

vector (vector v) cs_unproject = #310;
vector (vector v) cs_project = #311;

void(float width, vector pos1, vector pos2, float flag) drawline = #315;
float(string name) iscachedpic = #316;
string(string name) precache_pic = #317;
vector(string picname) draw_getimagesize = #318;
void(string name) freepic = #319;
float(vector position, float character, vector scale, vector rgb, float alpha, float flag) drawcharacter = #320;
float(vector position, string text, vector scale, vector rgb, float alpha, float flag) drawstring = #321;
float(vector position, string pic, vector size, vector rgb, float alpha, float flag) drawpic = #322;
float(vector position, vector size, vector rgb, float alpha, float flag) drawfill = #323;
void(float x, float y, float width, float height) drawsetcliparea = #324;
void(void) drawresetcliparea = #325;
float drawcolorcodedstring(vector position, string text, vector scale, vector rgb, float alpha, float flag) = #326;

float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;

void(entity e, float mdlindex) setmodelindex = #333;
string(float mdlindex) modelnameforindex = #334;
float(string effectname) particleeffectnum = #335;
void(entity ent, float effectnum, vector start, vector end) trailparticles = #336;
void(float effectnum, vector origin [, vector dir, float count]) pointparticles = #337;
void(string s, ...) centerprint = #338;
void(string s, ...) print = #339;
string(float keynum) keynumtostring = #340;
float(string keyname) stringtokeynum = #341;
string(float keynum) getkeybind = #342;
void(float usecursor) setcursormode = #343;
vector() getmousepos = #344;
float(float framenum) getinputstate = #345;
void(float sens) setsensitivityscaler = #346;
void() runstandardplayerphysics = #347;
string(float playernum, string keyname) getplayerkeyvalue = #348;
float() isdemo = #349;
float() isserver = #350;
void(vector origin, vector forward, vector right, vector up) SetListener = #351;
void(string cmdname) registercommand = #352;
float(entity ent) wasfreed = #353;
string(string key) serverkey = #354;

float() ReadByte = #360;
float() ReadChar = #361;
float() ReadShort = #362;
float() ReadLong = #363;
float() ReadCoord = #364;
float() ReadAngle = #365;
string() ReadString = #366;	//warning: this returns a temporary!
float() ReadFloat = #367;
&lt;/pre&gt;

==Constants==
&lt;pre&gt;
// add-entity mask bits
float MASK_ENGINE           = 1;
float MASK_ENGINEVIEWMODELS = 2;
float MASK_NORMAL           = 4;

// renderflag bits
float RF_VIEWMODEL          = 1;
float RF_EXTERNALMODEL      = 2;
float RF_DEPTHHACK          = 4;
float RF_ADDITIVE           = 8;
float RF_USEAXIS            = 16;

// flags for 2d drawing
float DRAWFLAG_NORMAL       = 0;
float DRAWFLAG_ADDITIVE     = 1;
float DRAWFLAG_MODULATE     = 2;
float DRAWFLAG_2XMODULATE   = 3;

// setview parameter
float VF_MIN                = 1;    //(vector)
float VF_MIN_X              = 2;    //(float)
float VF_MIN_Y              = 3;    //(float)
float VF_SIZE               = 4;    //(vector) (viewport size)
float VF_SIZE_X             = 5;    //(float)
float VF_SIZE_Y             = 6;    //(float)
float VF_VIEWPORT           = 7;    //(vector, vector)
float VF_FOV                = 8;    //(vector)
float VF_FOVX               = 9;    //(float)
float VF_FOVY               = 10;   //(float)
float VF_ORIGIN             = 11;   //(vector)
float VF_ORIGIN_X           = 12;   //(float)
float VF_ORIGIN_Y           = 13;   //(float)
float VF_ORIGIN_Z           = 14;   //(float)
float VF_ANGLES             = 15;   //(vector)
float VF_ANGLES_X           = 16;   //(float)
float VF_ANGLES_Y           = 17;   //(float)
float VF_ANGLES_Z           = 18;   //(float)
float VF_DRAWWORLD          = 19;   //(float)
float VF_DRAWENGINESBAR     = 20;   //(float)
float VF_DRAWCROSSHAIR      = 21;   //(float)

float VF_CL_VIEWANGLES      = 33;   //(vector)
float VF_CL_VIEWANGLES_X    = 34;   //(float)
float VF_CL_VIEWANGLES_Y    = 35;   //(float)
float VF_CL_VIEWANGLES_Z    = 36;   //(float)

float VF_PERSPECTIVE        = 200;  //(float)

// stats
// 0 - 31 are reserved for standard engine stats
// 32 - 128 are for QuakeC modders
float STAT_HEALTH           = 0;
float STAT_WEAPONMODEL      = 2;
float STAT_AMMO             = 3;
float STAT_ARMOR            = 4;
float STAT_WEAPONFRAME      = 5;
float STAT_SHELLS           = 6;
float STAT_NAILS            = 7;
float STAT_ROCKETS          = 8;
float STAT_CELLS            = 9;
float STAT_ACTIVEWEAPON     = 10;
float STAT_TOTALSECRETS     = 11;
float STAT_TOTALMONSTERS    = 12;
float STAT_SECRETS          = 13; // bumped on client side by svc_foundsecret
float STAT_MONSTERS         = 14; // bumped by svc_killedmonster
float STAT_ITEMS            = 15; // self.items bitmask from server
float STAT_VIEWHEIGHT       = 16;

// buttons for input_buttons
float BUTTON_ATTACK         = 1;
float BUTTON_JUMP           = 2;
float BUTTON_3              = 4;
float BUTTON_4              = 8;
float BUTTON_5              = 16;
float BUTTON_6              = 32;
float BUTTON_7              = 64;
float BUTTON_8              = 128;
// supported by DarkPlaces
float BUTTON_USE            = 256;
float BUTTON_CHAT           = 512;
float BUTTON_PRYDONCURSOR   = 1024;
float BUTTON_9              = 2048;
float BUTTON_10             = 4096;
float BUTTON_11             = 8192;
float BUTTON_12             = 16384;
float BUTTON_13             = 32768;
float BUTTON_14             = 65536;
float BUTTON_15             = 131072;
float BUTTON_16             = 262;
&lt;/pre&gt;

==Non-System Fields and Globals==
&lt;pre&gt;
float  intermission; // initially FALSE, set to TRUE when the server sends the SVC_INTERMISSION command
&lt;/pre&gt;
[[Category:DarkPlaces]]</text>
      <sha1>k4pic2kmc39gxjlx55ubau8d6pwm1b4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Efrags</title>
    <ns>0</ns>
    <id>877</id>
    <redirect title="efrags" />
    <revision>
      <id>2521</id>
      <timestamp>2013-03-29T14:22:01Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Efrags]] to [[efrags]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="20">#REDIRECT [[efrags]]</text>
      <sha1>ns6gyu30zx01znm9i1a704cuvnmd4ev</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Enforcer</title>
    <ns>0</ns>
    <id>134</id>
    <revision>
      <id>216</id>
      <timestamp>2007-11-02T19:34:09Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: [[Grunt]], Mark Two. Grunts who are surlier and beefier than the rest get outfitted in combat armour and built-in blasters.  * '''Weapon:''' Blaster * '''Health:''' 80 * '''Treasure:''' 5 ...</comment>
      <text xml:space="preserve" bytes="598">[[Grunt]], Mark Two. Grunts who are surlier and beefier than the rest get outfitted in combat armour and built-in blasters.

* '''Weapon:''' Blaster
* '''Health:''' 80
* '''Treasure:''' 5 cells

'''Tips:''' They pack blasters and have perfect aim, but the blaster projectiles are slow-moving, so you must be fast-moving. Take them out with two good [[Double-Barrelled Shotgun]] hits or attack with the [[Nailgun]], [[Super Nailgun]], [[Grenade Launcher]] or [[Rocket Launcher]].

'''Entity name:''' [[monster_enforcer]]

[http://frikqcc.quakesrc.org/files/enforcer.gif]

==See Also==
* [[Monsters]]</text>
      <sha1>qhr0z8zy20ef0grbda65kvek836wl6b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>270</id>
      <parentid>216</parentid>
      <timestamp>2007-11-05T22:11:09Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <text xml:space="preserve" bytes="477">[[Grunt]], Mark Two. Grunts who are surlier and beefier than the rest get outfitted in combat armour and built-in blasters.

* '''Weapon:''' Blaster
* '''Health:''' 80
* '''Treasure:''' 5 cells

'''Tips:''' They pack blasters and have perfect aim, but the blaster projectiles are slow-moving, so you must be fast-moving. Take them out with two good [[Double-Barrelled Shotgun]] hits.

[[Image:Enforcer.gif]]

'''Entity name:''' [[monster_enforcer]]

==See Also==
* [[Monsters]]</text>
      <sha1>lk2hs0uwqf5zlm0qgqk40l32yex58zn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>735</id>
      <parentid>270</parentid>
      <timestamp>2008-05-07T20:26:11Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="578">[[Grunt]], Mark Two. Grunts who are surlier and beefier than the rest get outfitted in combat armour and built-in blasters.

* '''Weapon:''' Blaster
* '''Health:''' 80
* '''Treasure:''' 5 cells

'''Tips:''' They pack blasters and have perfect aim, but the blaster projectiles are slow-moving, so you must be fast-moving. Take them out with two good [[Double-Barrelled Shotgun]] hits.
*'''Best Weapons:''' Double-Barreled Shotgun, Nailgun
*'''Worst Weapons:''' Shotgun, Rocket Launcher

[[Image:Enforcer.gif]]

'''Entity name:''' [[monster_enforcer]]

==See Also==
* [[Monsters]]</text>
      <sha1>qklx6fzl6g5nw8cvl4am061nqqdtj2f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>812</id>
      <parentid>735</parentid>
      <timestamp>2008-05-09T17:48:04Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <text xml:space="preserve" bytes="1886">{{Infobox Monster
|monstername=Enforcer
|entityname=monster_enforcer
|monsterhealth=80
|monstermelee=N/A
|monstermissile=Laser
|movetype=MOVETYPE_STEP
|monsterspeed=2.56, 12.12
|monsterclass=Base, registered
}}

[[Image:Enforcer.gif|left]]The brutes of the military base maps, you can tell them apart by their beefier build, helmets and backpack. Wielding a laser cannon with perfect aim, they fire in two shot bursts, ensuring that you have to step quickly to avoid harm. On death they will drop a backpack containing five cells.

Enforcers are the only Quake monster showing Earth human intelligence, as some of their sounds bear a strong resemblance to English words, typically used by guards of any sort. This suggests that in their strength, they were less assimilated as a whole by Quake's forces, and thus retained a bit more of their minds. 

Interestingly, their uniform bears a strong resemblance to the [[Biosuit]], which can be used as rationale for their underwater excursions in [[The Sewage System]], though the [[Grunt|Grunts]] doing the same are a mystery. Easy to be knocked into a pain frame, and lacking a melee attack, Enforcers are generally best dealt with by the [[Double-Barreled Shotgun]] as the normal one would be wasteful of shells, but the [[Nailgun]] can work well on a group.

Their projectile can also be found as an option for the [[trap_shooter]] entity, which can be seen used to an extreme extent in the first level of [[Beyond Belief]] where a tight cluster of them act as a security system to prevent the player from passing. Beyond Belief also modified the Enforcer to drop only two cells on death, making them less of a boon to the player at a later point upon finding the [[Thunderbolt]].

''&quot;Grunt, Mark Two. Grunts who are surlier and beefier than the rest get outfitted in combat armour and built-in blasters.&quot;''

==See Also==
* [[Monsters]]</text>
      <sha1>n0mnte0ozdjk5v0z5zascc8heqes1ew</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>866</id>
      <parentid>812</parentid>
      <timestamp>2008-05-17T18:54:10Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1907">{{Infobox Monster
|monstername=Enforcer
|entityname=monster_enforcer
|monsterhealth=80
|monstermelee=N/A
|monstermissile=Laser
|movetype=MOVETYPE_STEP
|monsterspeed=2.56, 12.12
|monsterclass=Base, registered
|monsterdrop=5 cells
}}

[[Image:Enforcer.gif|left]]The brutes of the military base maps, you can tell them apart by their beefier build, helmets and backpack. Wielding a laser cannon with perfect aim, they fire in two shot bursts, ensuring that you have to step quickly to avoid harm. On death they will drop a backpack containing five cells.

Enforcers are the only Quake monster showing Earth human intelligence, as some of their sounds bear a strong resemblance to English words, typically used by guards of any sort. This suggests that in their strength, they were less assimilated as a whole by Quake's forces, and thus retained a bit more of their minds. 

Interestingly, their uniform bears a strong resemblance to the [[Biosuit]], which can be used as rationale for their underwater excursions in [[The Sewage System]], though the [[Grunt|Grunts]] doing the same are a mystery. Easy to be knocked into a pain frame, and lacking a melee attack, Enforcers are generally best dealt with by the [[Double-Barreled Shotgun]] as the normal one would be wasteful of shells, but the [[Nailgun]] can work well on a group.

Their projectile can also be found as an option for the [[trap_shooter]] entity, which can be seen used to an extreme extent in the first level of [[Beyond Belief]] where a tight cluster of them act as a security system to prevent the player from passing. Beyond Belief also modified the Enforcer to drop only two cells on death, making them less of a boon to the player at a later point upon finding the [[Thunderbolt]].

''&quot;Grunt, Mark Two. Grunts who are surlier and beefier than the rest get outfitted in combat armour and built-in blasters.&quot;''

==See Also==
* [[Monsters]]</text>
      <sha1>5yjaakut4co3w9gtgi04c6bholtegzd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1232</id>
      <parentid>866</parentid>
      <timestamp>2009-09-25T07:49:55Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="1818">{{Infobox Monster
|name=Enforcer
|entity=monster_enforcer
|model=enforcer.mdl, h_mega.mdl
|health=80
|attacks=Laser gun
|drop=5 cells
}}
[[Image:Enforcer.gif|left]]
The '''Enforcer''' is the brute of the military base maps. You can tell them apart by their beefier build, helmets and backpack. Wielding a laser cannon with perfect aim, they fire in two shot bursts, ensuring that you have to step quickly to avoid harm. On death they will drop a backpack containing five cells.

Enforcers are the only Quake monster showing Earth human intelligence, as some of their sounds bear a strong resemblance to English words, typically used by guards of any sort. This suggests that in their strength, they were less assimilated as a whole by Quake's forces, and thus retained a bit more of their minds. 

Interestingly, their uniform bears a strong resemblance to the [[Biosuit]], which can be used as rationale for their underwater excursions in [[The Sewage System]], though the [[Grunt|Grunts]] doing the same are a mystery. Easy to be knocked into a pain frame, and lacking a melee attack, Enforcers are generally best dealt with by the [[Double-Barreled Shotgun]] as the normal one would be wasteful of shells, but the [[Nailgun]] can work well on a group.

Their projectile can also be found as an option for the [[trap_shooter]] entity, which can be seen used to an extreme extent in the first level of [[Beyond Belief]] where a tight cluster of them act as a security system to prevent the player from passing. Beyond Belief also modified the Enforcer to drop only two cells on death, making them less of a boon to the player at a later point upon finding the [[Thunderbolt]].

''&quot;Grunt, Mark Two. Grunts who are surlier and beefier than the rest get outfitted in combat armour and built-in blasters.&quot;''

{{Monsters}}</text>
      <sha1>sqlwn52nkoa0bww32qb63r11qapucwg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1237</id>
      <parentid>1232</parentid>
      <timestamp>2009-09-25T07:55:12Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1842">{{Infobox Monster
|name=Enforcer
|entity=monster_enforcer
|model=enforcer.mdl, h_mega.mdl
|health=80
|attacks=Laser gun
|drop=5 cells
|gameversion=Registered
}}
[[Image:Enforcer.gif|left]]
The '''Enforcer''' is the brute of the military base maps. You can tell them apart by their beefier build, helmets and backpack. Wielding a laser cannon with perfect aim, they fire in two shot bursts, ensuring that you have to step quickly to avoid harm. On death they will drop a backpack containing five cells.

Enforcers are the only Quake monster showing Earth human intelligence, as some of their sounds bear a strong resemblance to English words, typically used by guards of any sort. This suggests that in their strength, they were less assimilated as a whole by Quake's forces, and thus retained a bit more of their minds. 

Interestingly, their uniform bears a strong resemblance to the [[Biosuit]], which can be used as rationale for their underwater excursions in [[The Sewage System]], though the [[Grunt|Grunts]] doing the same are a mystery. Easy to be knocked into a pain frame, and lacking a melee attack, Enforcers are generally best dealt with by the [[Double-Barreled Shotgun]] as the normal one would be wasteful of shells, but the [[Nailgun]] can work well on a group.

Their projectile can also be found as an option for the [[trap_shooter]] entity, which can be seen used to an extreme extent in the first level of [[Beyond Belief]] where a tight cluster of them act as a security system to prevent the player from passing. Beyond Belief also modified the Enforcer to drop only two cells on death, making them less of a boon to the player at a later point upon finding the [[Thunderbolt]].

''&quot;Grunt, Mark Two. Grunts who are surlier and beefier than the rest get outfitted in combat armour and built-in blasters.&quot;''

{{Monsters}}</text>
      <sha1>8q674k7ziyqd197l6wda42cum49mkwn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1238</id>
      <parentid>1237</parentid>
      <timestamp>2009-09-25T07:55:37Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1857">{{Infobox Monster
|name=Enforcer
|entity=monster_enforcer
|model=enforcer.mdl&lt;br /&gt;h_mega.mdl (head gib)
|health=80
|attacks=Laser gun
|drop=5 cells
|gameversion=Registered
}}
[[Image:Enforcer.gif|left]]
The '''Enforcer''' is the brute of the military base maps. You can tell them apart by their beefier build, helmets and backpack. Wielding a laser cannon with perfect aim, they fire in two shot bursts, ensuring that you have to step quickly to avoid harm. On death they will drop a backpack containing five cells.

Enforcers are the only Quake monster showing Earth human intelligence, as some of their sounds bear a strong resemblance to English words, typically used by guards of any sort. This suggests that in their strength, they were less assimilated as a whole by Quake's forces, and thus retained a bit more of their minds. 

Interestingly, their uniform bears a strong resemblance to the [[Biosuit]], which can be used as rationale for their underwater excursions in [[The Sewage System]], though the [[Grunt|Grunts]] doing the same are a mystery. Easy to be knocked into a pain frame, and lacking a melee attack, Enforcers are generally best dealt with by the [[Double-Barreled Shotgun]] as the normal one would be wasteful of shells, but the [[Nailgun]] can work well on a group.

Their projectile can also be found as an option for the [[trap_shooter]] entity, which can be seen used to an extreme extent in the first level of [[Beyond Belief]] where a tight cluster of them act as a security system to prevent the player from passing. Beyond Belief also modified the Enforcer to drop only two cells on death, making them less of a boon to the player at a later point upon finding the [[Thunderbolt]].

''&quot;Grunt, Mark Two. Grunts who are surlier and beefier than the rest get outfitted in combat armour and built-in blasters.&quot;''

{{Monsters}}</text>
      <sha1>rpubk6y97ix4piaooprj87fgd562dyn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1380</id>
      <parentid>1238</parentid>
      <timestamp>2009-10-08T23:20:09Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1881">{{Infobox Monster
|name=Enforcer
|entity=monster_enforcer
|model=enforcer.mdl&lt;br /&gt;h_mega.mdl (head gib)
|health=80
|attacks=Laser gun
|drop=5 cells
|1stappearance=[[e2m1]]
|gameversion=Registered
}}
[[Image:Enforcer.gif|left]]
The '''Enforcer''' is the brute of the military base maps. You can tell them apart by their beefier build, helmets and backpack. Wielding a laser cannon with perfect aim, they fire in two shot bursts, ensuring that you have to step quickly to avoid harm. On death they will drop a backpack containing five cells.

Enforcers are the only Quake monster showing Earth human intelligence, as some of their sounds bear a strong resemblance to English words, typically used by guards of any sort. This suggests that in their strength, they were less assimilated as a whole by Quake's forces, and thus retained a bit more of their minds. 

Interestingly, their uniform bears a strong resemblance to the [[Biosuit]], which can be used as rationale for their underwater excursions in [[The Sewage System]], though the [[Grunt|Grunts]] doing the same are a mystery. Easy to be knocked into a pain frame, and lacking a melee attack, Enforcers are generally best dealt with by the [[Double-Barreled Shotgun]] as the normal one would be wasteful of shells, but the [[Nailgun]] can work well on a group.

Their projectile can also be found as an option for the [[trap_shooter]] entity, which can be seen used to an extreme extent in the first level of [[Beyond Belief]] where a tight cluster of them act as a security system to prevent the player from passing. Beyond Belief also modified the Enforcer to drop only two cells on death, making them less of a boon to the player at a later point upon finding the [[Thunderbolt]].

''&quot;Grunt, Mark Two. Grunts who are surlier and beefier than the rest get outfitted in combat armour and built-in blasters.&quot;''

{{Monsters}}</text>
      <sha1>r28rwqm3d4dtzjjl30vzob262m6a62q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1394</id>
      <parentid>1380</parentid>
      <timestamp>2009-10-08T23:43:18Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1922">{{Infobox Monster
|name=Enforcer
|entity=monster_enforcer
|model=enforcer.mdl&lt;br /&gt;h_mega.mdl (head gib)
|health=80
|attacks=Laser gun
|drop=5 cells
|1stappearance=[[e2m1]]
|gameversion=Registered
}}
[[Image:Enforcer.gif|left]]
''&quot;Grunt, Mark Two. Grunts who are surlier and beefier than the rest get outfitted in combat armour and built-in blasters.&quot;''

The '''Enforcer''' is the brute of the military base maps. You can tell them apart by their beefier build, helmets and backpack. Wielding a laser cannon with perfect aim, they fire in two shot bursts, ensuring that you have to step quickly to avoid harm. On death they will drop a backpack containing five cells.

Enforcers are the only Quake monster showing Earth human intelligence, as some of their sounds bear a strong resemblance to English words, typically used by guards of any sort. This suggests that in their strength, they were less assimilated as a whole by Quake's forces, and thus retained a bit more of their minds. 

Interestingly, their uniform bears a strong resemblance to the [[Biosuit]], which can be used as rationale for their underwater excursions in [[The Sewage System]], though the [[Grunt|Grunts]] doing the same are a mystery. Easy to be knocked into a pain frame, and lacking a melee attack, Enforcers are generally best dealt with by the [[Double-Barreled Shotgun]] as the normal one would be wasteful of shells, but the [[Nailgun]] can work well on a group.

Their projectile can also be found as an option for the [[trap_shooter]] entity, which can be seen used to an extreme extent in the first level of [[Beyond Belief]] where a tight cluster of them act as a security system to prevent the player from passing. Beyond Belief also modified the Enforcer to drop only two cells on death, making them less of a boon to the player at a later point upon finding the [[Thunderbolt]].

''&quot;Player was blasted by an Enforcer&quot;''

{{Monsters}}</text>
      <sha1>06d8qmhkd1r7ndfeo9wdyxnr6xjfszj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1919</id>
      <parentid>1394</parentid>
      <timestamp>2013-03-25T03:35:30Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>fixed image location and file link</comment>
      <text xml:space="preserve" bytes="1923">[[Image:Enforcer.gif|left]]
{{Infobox Monster
|name=Enforcer
|entity=monster_enforcer
|model=enforcer.mdl&lt;br /&gt;h_mega.mdl (head gib)
|health=80
|attacks=Laser gun
|drop=5 cells
|1stappearance=[[e2m1]]
|gameversion=Registered
}}

''&quot;Grunt, Mark Two. Grunts who are surlier and beefier than the rest get outfitted in combat armour and built-in blasters.&quot;''

The '''Enforcer''' is the brute of the military base maps. You can tell them apart by their beefier build, helmets and backpack. Wielding a laser cannon with perfect aim, they fire in two shot bursts, ensuring that you have to step quickly to avoid harm. On death they will drop a backpack containing five cells.

Enforcers are the only Quake monster showing Earth human intelligence, as some of their sounds bear a strong resemblance to English words, typically used by guards of any sort. This suggests that in their strength, they were less assimilated as a whole by Quake's forces, and thus retained a bit more of their minds. 

Interestingly, their uniform bears a strong resemblance to the [[Biosuit]], which can be used as rationale for their underwater excursions in [[The Sewage System]], though the [[Grunt|Grunts]] doing the same are a mystery. Easy to be knocked into a pain frame, and lacking a melee attack, Enforcers are generally best dealt with by the [[Double-Barreled Shotgun]] as the normal one would be wasteful of shells, but the [[Nailgun]] can work well on a group.

Their projectile can also be found as an option for the [[trap_shooter]] entity, which can be seen used to an extreme extent in the first level of [[Beyond Belief]] where a tight cluster of them act as a security system to prevent the player from passing. Beyond Belief also modified the Enforcer to drop only two cells on death, making them less of a boon to the player at a later point upon finding the [[Thunderbolt]].

''&quot;Player was blasted by an Enforcer&quot;''

{{Monsters}}</text>
      <sha1>jkqhz4uk3tzng7f8il9vqqtx7wturve</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2833</id>
      <parentid>1919</parentid>
      <timestamp>2013-04-08T13:44:00Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>updated infobox</comment>
      <text xml:space="preserve" bytes="1896">{{Infobox Monster
| name = Enforcer
| image = monster_quake_enforcer.png
| manualtext = Grunt, Mark Two. Grunts who are surlier and beefier than the rest get outfitted in combat armour and built-in blasters.
| health = 80
| attacks = Laser gun
| drop = 5 cells
| 1stappearance = [[e2m1]]
| gameversion = Registered
| deathmessage = Player was blasted by an Enforcer
}}

The '''Enforcer''' is the brute of the military base maps. You can tell them apart by their beefier build, helmets and backpack. Wielding a laser cannon with perfect aim, they fire in two shot bursts, ensuring that you have to step quickly to avoid harm. On death they will drop a backpack containing five cells.

Enforcers are the only Quake monster showing Earth human intelligence, as some of their sounds bear a strong resemblance to English words, typically used by guards of any sort. This suggests that in their strength, they were less assimilated as a whole by Quake's forces, and thus retained a bit more of their minds. 

Interestingly, their uniform bears a strong resemblance to the [[Biosuit]], which can be used as rationale for their underwater excursions in [[The Sewage System]], though the [[Grunt|Grunts]] doing the same are a mystery. Easy to be knocked into a pain frame, and lacking a melee attack, Enforcers are generally best dealt with by the [[Double-Barreled Shotgun]] as the normal one would be wasteful of shells, but the [[Nailgun]] can work well on a group.

Their projectile can also be found as an option for the [[trap_shooter]] entity, which can be seen used to an extreme extent in the first level of [[Beyond Belief]] where a tight cluster of them act as a security system to prevent the player from passing. Beyond Belief also modified the Enforcer to drop only two cells on death, making them less of a boon to the player at a later point upon finding the [[Thunderbolt]].

{{Monsters}}</text>
      <sha1>pfazosa80agenxsq0lx4ne40saaz344</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2872</id>
      <parentid>2833</parentid>
      <timestamp>2013-04-09T03:50:03Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>added entity info</comment>
      <text xml:space="preserve" bytes="4061">{{Infobox Monster
| name = Enforcer
| image = monster_quake_enforcer.png
| manualtext = Grunt, Mark Two. Grunts who are surlier and beefier than the rest get outfitted in combat armour and built-in blasters.
| health = 80
| attacks = Laser gun
| drop = 5 cells
| 1stappearance = [[e2m1]]
| gameversion = Registered
| deathmessage = Player was blasted by an Enforcer
}}

The '''Enforcer''' is the brute of the military base maps. You can tell them apart by their beefier build, helmets and backpack. Wielding a laser cannon with perfect aim, they fire in two shot bursts, ensuring that you have to step quickly to avoid harm. On death they will drop a backpack containing five cells.

Enforcers are the only Quake monster showing Earth human intelligence, as some of their sounds bear a strong resemblance to English words, typically used by guards of any sort. This suggests that in their strength, they were less assimilated as a whole by Quake's forces, and thus retained a bit more of their minds. 

Interestingly, their uniform bears a strong resemblance to the [[Biosuit]], which can be used as rationale for their underwater excursions in [[The Sewage System]], though the [[Grunt|Grunts]] doing the same are a mystery. Easy to be knocked into a pain frame, and lacking a melee attack, Enforcers are generally best dealt with by the [[Double-Barreled Shotgun]] as the normal one would be wasteful of shells, but the [[Nailgun]] can work well on a group.

Their projectile can also be found as an option for the [[trap_shooter]] entity, which can be seen used to an extreme extent in the first level of [[Beyond Belief]] where a tight cluster of them act as a security system to prevent the player from passing. Beyond Belief also modified the Enforcer to drop only two cells on death, making them less of a boon to the player at a later point upon finding the [[Thunderbolt]].

==Tactics==


&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_enforcer
| commonname = [[Enforcer]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 32 x 32 x 64
| quakec = [[enforcer.qc]]
| precaches =
progs/enforcer.mdl&lt;br&gt;
progs/h_mega.mdl&lt;br&gt;
progs/laser.mdl&lt;br&gt;
enforcer/death1.wav&lt;br&gt;
enforcer/enfire.wav&lt;br&gt;
enforcer/enfstop.wav&lt;br&gt;
enforcer/idle1.wav&lt;br&gt;
enforcer/pain1.wav&lt;br&gt;
enforcer/pain2.wav&lt;br&gt;
enforcer/sight1.wav&lt;br&gt;
enforcer/sight2.wav&lt;br&gt;
enforcer/sight3.wav&lt;br&gt;
enforcer/sight4.wav
}}

==Entity information==

'''monster_enforcer''' is the [[Entity|entity]] for placing '''Enforcers''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Enforcer. When triggered, the Enforcer will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Enforcer dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Enforcer dies.
|}

====Spawnflags====
The monster_enforcer entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Grunt will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Enforcer
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model(&quot;:progs/enforcer.mdl&quot;)
    = monster_enforcer : &quot;Enforcer&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_enforcer (1 0 0) (-16 -16 -24) (16 16 40) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>e0m44d3rvfktoiltih447usvs5bu2xe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2947</id>
      <parentid>2872</parentid>
      <timestamp>2013-05-04T16:02:23Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <minor/>
      <comment>gibs</comment>
      <text xml:space="preserve" bytes="4079">{{Infobox Monster
| name = Enforcer
| image = monster_quake_enforcer.png
| manualtext = Grunt, Mark Two. Grunts who are surlier and beefier than the rest get outfitted in combat armour and built-in blasters.
| health = 80
| gibthresh = -35
| attacks = Laser gun
| drop = 5 cells
| 1stappearance = [[e2m1]]
| gameversion = Registered
| deathmessage = Player was blasted by an Enforcer
}}

The '''Enforcer''' is the brute of the military base maps. You can tell them apart by their beefier build, helmets and backpack. Wielding a laser cannon with perfect aim, they fire in two shot bursts, ensuring that you have to step quickly to avoid harm. On death they will drop a backpack containing five cells.

Enforcers are the only Quake monster showing Earth human intelligence, as some of their sounds bear a strong resemblance to English words, typically used by guards of any sort. This suggests that in their strength, they were less assimilated as a whole by Quake's forces, and thus retained a bit more of their minds. 

Interestingly, their uniform bears a strong resemblance to the [[Biosuit]], which can be used as rationale for their underwater excursions in [[The Sewage System]], though the [[Grunt|Grunts]] doing the same are a mystery. Easy to be knocked into a pain frame, and lacking a melee attack, Enforcers are generally best dealt with by the [[Double-Barreled Shotgun]] as the normal one would be wasteful of shells, but the [[Nailgun]] can work well on a group.

Their projectile can also be found as an option for the [[trap_shooter]] entity, which can be seen used to an extreme extent in the first level of [[Beyond Belief]] where a tight cluster of them act as a security system to prevent the player from passing. Beyond Belief also modified the Enforcer to drop only two cells on death, making them less of a boon to the player at a later point upon finding the [[Thunderbolt]].

==Tactics==


&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_enforcer
| commonname = [[Enforcer]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 32 x 32 x 64
| quakec = [[enforcer.qc]]
| precaches =
progs/enforcer.mdl&lt;br&gt;
progs/h_mega.mdl&lt;br&gt;
progs/laser.mdl&lt;br&gt;
enforcer/death1.wav&lt;br&gt;
enforcer/enfire.wav&lt;br&gt;
enforcer/enfstop.wav&lt;br&gt;
enforcer/idle1.wav&lt;br&gt;
enforcer/pain1.wav&lt;br&gt;
enforcer/pain2.wav&lt;br&gt;
enforcer/sight1.wav&lt;br&gt;
enforcer/sight2.wav&lt;br&gt;
enforcer/sight3.wav&lt;br&gt;
enforcer/sight4.wav
}}

==Entity information==

'''monster_enforcer''' is the [[Entity|entity]] for placing '''Enforcers''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Enforcer. When triggered, the Enforcer will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Enforcer dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Enforcer dies.
|}

====Spawnflags====
The monster_enforcer entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Grunt will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Enforcer
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model(&quot;:progs/enforcer.mdl&quot;)
    = monster_enforcer : &quot;Enforcer&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_enforcer (1 0 0) (-16 -16 -24) (16 16 40) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>60fq2udgucdmsnqkmsdx690u56fo4do</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Engine</title>
    <ns>0</ns>
    <id>502</id>
    <redirect title="Engines" />
    <revision>
      <id>1059</id>
      <timestamp>2009-07-09T08:31:15Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>redirect to [[Engines]]</comment>
      <text xml:space="preserve" bytes="21">#REDIRECT [[Engines]]</text>
      <sha1>q40gmiclpueomrs7yzh84z7z3yguuck</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Engine Limits</title>
    <ns>0</ns>
    <id>513</id>
    <revision>
      <id>1156</id>
      <timestamp>2009-09-23T11:48:00Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>New page: Please add your engine's limits here.  This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interes...</comment>
      <text xml:space="preserve" bytes="2691">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Link to engines page
*Nicer table look


 * means: Check engine's readme for comments and details

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clipnodes !! Faces !! Lightmaps !! Marksurfaces !! Nodes !! Planes !! Static entities !! Surface extents !! Texinfo !! Visleafs !! Vis/light data
|-
! Normal limit
| 32k || 32k || 64 || 32k || 32k || 32k || 128 || 512/256 || 32k || 8k || heapsize
|-
! aguirRe's
|~64k* || 64k || 1024 || 64k || ~32-64k* || &gt;32k || 256 || &gt;512/256 || &gt;32k || 32k || 2048M*
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Channels !! Dynamic channels
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clients !! Packet size !! Progs globals !! Runaway loop, QC !! Signon buffer size !! Stack size, QC !! Static client message
|-
! Normal limit
| 16 || 1k || 32k || 100000 || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5000000 || ~64k || 256 || 8192
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Beams !! Console background !! Far clip distance !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! Video modes !! Visible edicts !! WinQ bmodel edges !! WinQ bmodel vertices
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! Edicts !! Efrags !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! Zone size, default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|}</text>
      <sha1>asvi1yh1b3vejm2groxzwzprm3k9cu2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1158</id>
      <parentid>1156</parentid>
      <timestamp>2009-09-23T13:02:03Z</timestamp>
      <contributor>
        <ip>137.191.242.106</ip>
      </contributor>
      <text xml:space="preserve" bytes="3286">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Link to engines page
*Nicer table look


 * means: Check engine's readme for comments and details

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clipnodes !! Faces !! Lightmaps !! Marksurfaces !! Nodes !! Planes !! Static entities !! Surface extents !! Texinfo !! Visleafs !! Vis/light data
|-
! Normal limit
| 32k || 32k || 64 || 32k || 32k || 32k || 128 || 512/256 || 32k || 8k || heapsize
|-
! aguirRe's
|~64k* || 64k || 1024 || 64k || ~32-64k* || &gt;32k || 256 || &gt;512/256 || &gt;32k || 32k || 2048M*
|-
! DirectQ
| 64k || 64k || Unlimited || 64k || 32k || 32k || Unlimited || 512/256 || 32k || 32k || Unlimited
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! DirectQ
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Channels !! Dynamic channels
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! DirectQ
|516 || 128
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clients !! Packet size !! Progs globals !! Runaway loop, QC !! Signon buffer size !! Stack size, QC !! Static client message
|-
! Normal limit
| 16 || 1k || 32k || 100000 || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5000000 || ~64k || 256 || 8192
|-
! DirectQ
|16 || ~64k || ? (check) || 5000000 || ~64k || 256 || 8192
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Beams !! Console background !! Far clip distance !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! Video modes !! Visible edicts !! WinQ bmodel edges !! WinQ bmodel vertices !! Particles
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || ?
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || ?
|-
! DirectQ
| ? (check) || ? (check) || Unlimited || Unlimited || ? (check) || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! Edicts !! Efrags !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! Zone size, default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! DirectQ
| ? (check) || ? (check) || 8192 || N/A (unused) || N/A (unused) || 8192 || 8192 || 8192 || ? (check) || Unlimited || 32 MB
|}</text>
      <sha1>gdxfvcxogs2qn1jukymdi6v2ebhrpfj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1178</id>
      <parentid>1158</parentid>
      <timestamp>2009-09-24T10:56:18Z</timestamp>
      <contributor>
        <ip>193.49.97.126</ip>
      </contributor>
      <comment>Added Quore engine defaulting to normal limit when unknown</comment>
      <text xml:space="preserve" bytes="3710">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Link to engines page
*Nicer table look


 * means: Check engine's readme for comments and details

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clipnodes !! Faces !! Lightmaps !! Marksurfaces !! Nodes !! Planes !! Static entities !! Surface extents !! Texinfo !! Visleafs !! Vis/light data
|-
! Normal limit
| 32k || 32k || 64 || 32k || 32k || 32k || 128 || 512/256 || 32k || 8k || heapsize
|-
! aguirRe's
|~64k* || 64k || 1024 || 64k || ~32-64k* || &gt;32k || 256 || &gt;512/256 || &gt;32k || 32k || 2048M*
|-
! DirectQ
| 64k || 64k || Unlimited || 64k || 32k || 32k || Unlimited || 512/256 || 32k || 32k || Unlimited
|-
! Quore
| 32k || 64k || 256 || 64k || 32k || 32k || 1024 || 512 || 4k || 16k || heapsize
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! DirectQ
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! Quore
| 8192 || 128 || 480 || 2048 || 2048
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Channels !! Dynamic channels
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! DirectQ
|516 || 128
|-
! Quore
| 128 || 8
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clients !! Packet size !! Progs globals !! Runaway loop, QC !! Signon buffer size !! Stack size, QC !! Static client message
|-
! Normal limit
| 16 || 1k || 32k || 100k || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M || ~64k || 256 || 8192
|-
! DirectQ
|16 || ~64k || ? (check) || 5M || ~64k || 256 || 8192
|-
! Quore
| 32 || ~32k || 32k || 1M || ~32k || ? || ?
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Beams !! Console background !! Far clip distance !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! Video modes !! Visible edicts !! WinQ bmodel edges !! WinQ bmodel vertices !! Particles
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || ?
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || ?
|-
! DirectQ
| ? (check) || ? (check) || Unlimited || Unlimited || ? (check) || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! Quore
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! Edicts !! Efrags !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! Zone size, default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! DirectQ
| ? (check) || ? (check) || 8192 || N/A (unused) || N/A (unused) || 8192 || 8192 || 8192 || ? (check) || Unlimited || 32 MB
|-
! Quore
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|}</text>
      <sha1>ao8s7r2dk48dqn2zlvvop4xouym6nj4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1179</id>
      <parentid>1178</parentid>
      <timestamp>2009-09-24T14:26:23Z</timestamp>
      <contributor>
        <ip>69.59.212.88</ip>
      </contributor>
      <comment>/* BSP */</comment>
      <text xml:space="preserve" bytes="3837">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Link to engines page
*Nicer table look


 * means: Check engine's readme for comments and details

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clipnodes !! Faces !! Lightmaps !! Marksurfaces !! Nodes !! Planes !! Static entities !! Surface extents !! Texinfo !! Visleafs !! Vis/light data
|-
! Normal limit
| 32k || 32k || 64 || 32k || 32k || 32k || 128 || 512/256 || 32k || 8k || heapsize
|-
! aguirRe's
|~64k* || 64k || 1024 || 64k || ~32-64k* || &gt;32k || 256 || &gt;512/256 || &gt;32k || 32k || 2048M*
|-
! DirectQ
| 64k || 64k || Unlimited || 64k || 32k || 32k || Unlimited || 512/256 || 32k || 32k || Unlimited
|-
! Quore
| 32k || 64k || 256 || 64k || 32k || 32k || 1024 || 512 || 4k || 16k || heapsize
|-
! DarkPlaces
|~64k* || Unlimited || Unlimited || Unlimited || ~32-64k* || 64k* || ~6000* || 4080 || 64k || 32k || Unlimited
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! DirectQ
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! Quore
| 8192 || 128 || 480 || 2048 || 2048
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Channels !! Dynamic channels
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! DirectQ
|516 || 128
|-
! Quore
| 128 || 8
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clients !! Packet size !! Progs globals !! Runaway loop, QC !! Signon buffer size !! Stack size, QC !! Static client message
|-
! Normal limit
| 16 || 1k || 32k || 100k || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M || ~64k || 256 || 8192
|-
! DirectQ
|16 || ~64k || ? (check) || 5M || ~64k || 256 || 8192
|-
! Quore
| 32 || ~32k || 32k || 1M || ~32k || ? || ?
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Beams !! Console background !! Far clip distance !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! Video modes !! Visible edicts !! WinQ bmodel edges !! WinQ bmodel vertices !! Particles
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || ?
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || ?
|-
! DirectQ
| ? (check) || ? (check) || Unlimited || Unlimited || ? (check) || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! Quore
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! Edicts !! Efrags !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! Zone size, default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! DirectQ
| ? (check) || ? (check) || 8192 || N/A (unused) || N/A (unused) || 8192 || 8192 || 8192 || ? (check) || Unlimited || 32 MB
|-
! Quore
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|}</text>
      <sha1>p72ll7v7lkesupxfj8hvkk7sme8av4g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1180</id>
      <parentid>1179</parentid>
      <timestamp>2009-09-24T14:57:16Z</timestamp>
      <contributor>
        <ip>69.59.212.88</ip>
      </contributor>
      <comment>/* MDL */</comment>
      <text xml:space="preserve" bytes="3905">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Link to engines page
*Nicer table look


 * means: Check engine's readme for comments and details

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clipnodes !! Faces !! Lightmaps !! Marksurfaces !! Nodes !! Planes !! Static entities !! Surface extents !! Texinfo !! Visleafs !! Vis/light data
|-
! Normal limit
| 32k || 32k || 64 || 32k || 32k || 32k || 128 || 512/256 || 32k || 8k || heapsize
|-
! aguirRe's
|~64k* || 64k || 1024 || 64k || ~32-64k* || &gt;32k || 256 || &gt;512/256 || &gt;32k || 32k || 2048M*
|-
! DirectQ
| 64k || 64k || Unlimited || 64k || 32k || 32k || Unlimited || 512/256 || 32k || 32k || Unlimited
|-
! Quore
| 32k || 64k || 256 || 64k || 32k || 32k || 1024 || 512 || 4k || 16k || heapsize
|-
! DarkPlaces
|~64k* || Unlimited || Unlimited || Unlimited || ~32-64k* || 64k* || ~6000* || 4080 || 64k || 32k || Unlimited
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! DirectQ
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! Quore
| 8192 || 128 || 480 || 2048 || 2048
|-
! DarkPlaces
| Unlimited || Unlimited || 65536 || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Channels !! Dynamic channels
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! DirectQ
|516 || 128
|-
! Quore
| 128 || 8
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clients !! Packet size !! Progs globals !! Runaway loop, QC !! Signon buffer size !! Stack size, QC !! Static client message
|-
! Normal limit
| 16 || 1k || 32k || 100k || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M || ~64k || 256 || 8192
|-
! DirectQ
|16 || ~64k || ? (check) || 5M || ~64k || 256 || 8192
|-
! Quore
| 32 || ~32k || 32k || 1M || ~32k || ? || ?
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Beams !! Console background !! Far clip distance !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! Video modes !! Visible edicts !! WinQ bmodel edges !! WinQ bmodel vertices !! Particles
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || ?
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || ?
|-
! DirectQ
| ? (check) || ? (check) || Unlimited || Unlimited || ? (check) || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! Quore
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! Edicts !! Efrags !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! Zone size, default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! DirectQ
| ? (check) || ? (check) || 8192 || N/A (unused) || N/A (unused) || 8192 || 8192 || 8192 || ? (check) || Unlimited || 32 MB
|-
! Quore
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|}</text>
      <sha1>0a8261tp49910wivp0rb55xhsrjmj4i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1181</id>
      <parentid>1180</parentid>
      <timestamp>2009-09-24T14:59:27Z</timestamp>
      <contributor>
        <ip>69.59.212.88</ip>
      </contributor>
      <comment>/* BSP */</comment>
      <text xml:space="preserve" bytes="3899">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Link to engines page
*Nicer table look


 * means: Check engine's readme for comments and details

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clipnodes !! Faces !! Lightmaps !! Marksurfaces !! Nodes !! Planes !! Static entities !! Surface extents !! Texinfo !! Visleafs !! Vis/light data
|-
! Normal limit
| 32k || 32k || 64 || 32k || 32k || 32k || 128 || 512/256 || 32k || 8k || heapsize
|-
! aguirRe's
|~64k* || 64k || 1024 || 64k || ~32-64k* || &gt;32k || 256 || &gt;512/256 || &gt;32k || 32k || 2048M*
|-
! DirectQ
| 64k || 64k || Unlimited || 64k || 32k || 32k || Unlimited || 512/256 || 32k || 32k || Unlimited
|-
! Quore
| 32k || 64k || 256 || 64k || 32k || 32k || 1024 || 512 || 4k || 16k || heapsize
|-
! DarkPlaces
|~64k || Unlimited || Unlimited || Unlimited || ~32-64k || 64k || 256 || 4080 || 64k || 32k || Unlimited
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! DirectQ
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! Quore
| 8192 || 128 || 480 || 2048 || 2048
|-
! DarkPlaces
| Unlimited || Unlimited || 65536 || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Channels !! Dynamic channels
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! DirectQ
|516 || 128
|-
! Quore
| 128 || 8
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clients !! Packet size !! Progs globals !! Runaway loop, QC !! Signon buffer size !! Stack size, QC !! Static client message
|-
! Normal limit
| 16 || 1k || 32k || 100k || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M || ~64k || 256 || 8192
|-
! DirectQ
|16 || ~64k || ? (check) || 5M || ~64k || 256 || 8192
|-
! Quore
| 32 || ~32k || 32k || 1M || ~32k || ? || ?
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Beams !! Console background !! Far clip distance !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! Video modes !! Visible edicts !! WinQ bmodel edges !! WinQ bmodel vertices !! Particles
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || ?
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || ?
|-
! DirectQ
| ? (check) || ? (check) || Unlimited || Unlimited || ? (check) || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! Quore
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! Edicts !! Efrags !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! Zone size, default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! DirectQ
| ? (check) || ? (check) || 8192 || N/A (unused) || N/A (unused) || 8192 || 8192 || 8192 || ? (check) || Unlimited || 32 MB
|-
! Quore
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|}</text>
      <sha1>ju1ivax4zcgq2id7qm27b195eg9mc4n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1182</id>
      <parentid>1181</parentid>
      <timestamp>2009-09-24T15:02:10Z</timestamp>
      <contributor>
        <ip>69.59.212.88</ip>
      </contributor>
      <comment>/* Sounds */</comment>
      <text xml:space="preserve" bytes="3928">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Link to engines page
*Nicer table look


 * means: Check engine's readme for comments and details

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clipnodes !! Faces !! Lightmaps !! Marksurfaces !! Nodes !! Planes !! Static entities !! Surface extents !! Texinfo !! Visleafs !! Vis/light data
|-
! Normal limit
| 32k || 32k || 64 || 32k || 32k || 32k || 128 || 512/256 || 32k || 8k || heapsize
|-
! aguirRe's
|~64k* || 64k || 1024 || 64k || ~32-64k* || &gt;32k || 256 || &gt;512/256 || &gt;32k || 32k || 2048M*
|-
! DirectQ
| 64k || 64k || Unlimited || 64k || 32k || 32k || Unlimited || 512/256 || 32k || 32k || Unlimited
|-
! Quore
| 32k || 64k || 256 || 64k || 32k || 32k || 1024 || 512 || 4k || 16k || heapsize
|-
! DarkPlaces
|~64k || Unlimited || Unlimited || Unlimited || ~32-64k || 64k || 256 || 4080 || 64k || 32k || Unlimited
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! DirectQ
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! Quore
| 8192 || 128 || 480 || 2048 || 2048
|-
! DarkPlaces
| Unlimited || Unlimited || 65536 || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Channels !! Dynamic channels
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! DirectQ
|516 || 128
|-
! Quore
| 128 || 8
|-
! DarkPlaces
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clients !! Packet size !! Progs globals !! Runaway loop, QC !! Signon buffer size !! Stack size, QC !! Static client message
|-
! Normal limit
| 16 || 1k || 32k || 100k || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M || ~64k || 256 || 8192
|-
! DirectQ
|16 || ~64k || ? (check) || 5M || ~64k || 256 || 8192
|-
! Quore
| 32 || ~32k || 32k || 1M || ~32k || ? || ?
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Beams !! Console background !! Far clip distance !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! Video modes !! Visible edicts !! WinQ bmodel edges !! WinQ bmodel vertices !! Particles
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || ?
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || ?
|-
! DirectQ
| ? (check) || ? (check) || Unlimited || Unlimited || ? (check) || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! Quore
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! Edicts !! Efrags !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! Zone size, default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! DirectQ
| ? (check) || ? (check) || 8192 || N/A (unused) || N/A (unused) || 8192 || 8192 || 8192 || ? (check) || Unlimited || 32 MB
|-
! Quore
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|}</text>
      <sha1>80b40i2o6ftzx7vj9a4qx2hepbvwdby</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1183</id>
      <parentid>1182</parentid>
      <timestamp>2009-09-24T15:06:56Z</timestamp>
      <contributor>
        <ip>69.59.212.88</ip>
      </contributor>
      <comment>/* Client/Server */</comment>
      <text xml:space="preserve" bytes="4014">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Link to engines page
*Nicer table look


 * means: Check engine's readme for comments and details

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clipnodes !! Faces !! Lightmaps !! Marksurfaces !! Nodes !! Planes !! Static entities !! Surface extents !! Texinfo !! Visleafs !! Vis/light data
|-
! Normal limit
| 32k || 32k || 64 || 32k || 32k || 32k || 128 || 512/256 || 32k || 8k || heapsize
|-
! aguirRe's
|~64k* || 64k || 1024 || 64k || ~32-64k* || &gt;32k || 256 || &gt;512/256 || &gt;32k || 32k || 2048M*
|-
! DirectQ
| 64k || 64k || Unlimited || 64k || 32k || 32k || Unlimited || 512/256 || 32k || 32k || Unlimited
|-
! Quore
| 32k || 64k || 256 || 64k || 32k || 32k || 1024 || 512 || 4k || 16k || heapsize
|-
! DarkPlaces
|~64k || Unlimited || Unlimited || Unlimited || ~32-64k || 64k || 256 || 4080 || 64k || 32k || Unlimited
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! DirectQ
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! Quore
| 8192 || 128 || 480 || 2048 || 2048
|-
! DarkPlaces
| Unlimited || Unlimited || 65536 || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Channels !! Dynamic channels
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! DirectQ
|516 || 128
|-
! Quore
| 128 || 8
|-
! DarkPlaces
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clients !! Packet size !! Progs globals !! Runaway loop, QC !! Signon buffer size !! Stack size, QC !! Static client message
|-
! Normal limit
| 16 || 8k (1024) || 32k || 100k || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M || ~64k || 256 || 8192
|-
! DirectQ
|16 || ~64k || ? (check) || 5M || ~64k || 256 || 8192
|-
! Quore
| 32 || ~32k || 32k || 1M || ~32k || ? || ?
|-
! DarkPlaces
| 255 || 64k (1400) || 64k || 10m jumps || 64k || 16384 || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Beams !! Console background !! Far clip distance !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! Video modes !! Visible edicts !! WinQ bmodel edges !! WinQ bmodel vertices !! Particles
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || ?
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || ?
|-
! DirectQ
| ? (check) || ? (check) || Unlimited || Unlimited || ? (check) || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! Quore
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! Edicts !! Efrags !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! Zone size, default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! DirectQ
| ? (check) || ? (check) || 8192 || N/A (unused) || N/A (unused) || 8192 || 8192 || 8192 || ? (check) || Unlimited || 32 MB
|-
! Quore
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|}</text>
      <sha1>rzj8q2c7jxjwmr4uuimmztqmeda5i23</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1184</id>
      <parentid>1183</parentid>
      <timestamp>2009-09-24T15:10:15Z</timestamp>
      <contributor>
        <ip>69.59.212.88</ip>
      </contributor>
      <comment>/* Graphics */</comment>
      <text xml:space="preserve" bytes="4150">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Link to engines page
*Nicer table look


 * means: Check engine's readme for comments and details

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clipnodes !! Faces !! Lightmaps !! Marksurfaces !! Nodes !! Planes !! Static entities !! Surface extents !! Texinfo !! Visleafs !! Vis/light data
|-
! Normal limit
| 32k || 32k || 64 || 32k || 32k || 32k || 128 || 512/256 || 32k || 8k || heapsize
|-
! aguirRe's
|~64k* || 64k || 1024 || 64k || ~32-64k* || &gt;32k || 256 || &gt;512/256 || &gt;32k || 32k || 2048M*
|-
! DirectQ
| 64k || 64k || Unlimited || 64k || 32k || 32k || Unlimited || 512/256 || 32k || 32k || Unlimited
|-
! Quore
| 32k || 64k || 256 || 64k || 32k || 32k || 1024 || 512 || 4k || 16k || heapsize
|-
! DarkPlaces
|~64k || Unlimited || Unlimited || Unlimited || ~32-64k || 64k || 256 || 4080 || 64k || 32k || Unlimited
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! DirectQ
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! Quore
| 8192 || 128 || 480 || 2048 || 2048
|-
! DarkPlaces
| Unlimited || Unlimited || 65536 || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Channels !! Dynamic channels
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! DirectQ
|516 || 128
|-
! Quore
| 128 || 8
|-
! DarkPlaces
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clients !! Packet size !! Progs globals !! Runaway loop, QC !! Signon buffer size !! Stack size, QC !! Static client message
|-
! Normal limit
| 16 || 8k (1024) || 32k || 100k || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M || ~64k || 256 || 8192
|-
! DirectQ
|16 || ~64k || ? (check) || 5M || ~64k || 256 || 8192
|-
! Quore
| 32 || ~32k || 32k || 1M || ~32k || ? || ?
|-
! DarkPlaces
| 255 || 64k (1400) || 64k || 10m jumps || 64k || 16384 || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Beams !! Console background !! Far clip distance !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! Video modes !! Visible edicts !! WinQ bmodel edges !! WinQ bmodel vertices !! Particles
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || ?
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || ?
|-
! DirectQ
| ? (check) || ? (check) || Unlimited || Unlimited || ? (check) || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! Quore
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|-
! DarkPlaces
| 256 || Unlimited || Infinite || Unlimited || 64k || Unlimited || =256x128 || System || 32k || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! Edicts !! Efrags !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! Zone size, default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! DirectQ
| ? (check) || ? (check) || 8192 || N/A (unused) || N/A (unused) || 8192 || 8192 || 8192 || ? (check) || Unlimited || 32 MB
|-
! Quore
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|}</text>
      <sha1>2o0g4la13j8hi66x2nrq37d7nu7h55e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1185</id>
      <parentid>1184</parentid>
      <timestamp>2009-09-24T15:15:46Z</timestamp>
      <contributor>
        <ip>69.59.212.88</ip>
      </contributor>
      <comment>/* Misc. */</comment>
      <text xml:space="preserve" bytes="4274">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Link to engines page
*Nicer table look


 * means: Check engine's readme for comments and details

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clipnodes !! Faces !! Lightmaps !! Marksurfaces !! Nodes !! Planes !! Static entities !! Surface extents !! Texinfo !! Visleafs !! Vis/light data
|-
! Normal limit
| 32k || 32k || 64 || 32k || 32k || 32k || 128 || 512/256 || 32k || 8k || heapsize
|-
! aguirRe's
|~64k* || 64k || 1024 || 64k || ~32-64k* || &gt;32k || 256 || &gt;512/256 || &gt;32k || 32k || 2048M*
|-
! DirectQ
| 64k || 64k || Unlimited || 64k || 32k || 32k || Unlimited || 512/256 || 32k || 32k || Unlimited
|-
! Quore
| 32k || 64k || 256 || 64k || 32k || 32k || 1024 || 512 || 4k || 16k || heapsize
|-
! DarkPlaces
|~64k || Unlimited || Unlimited || Unlimited || ~32-64k || 64k || 256 || 4080 || 64k || 32k || Unlimited
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! DirectQ
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! Quore
| 8192 || 128 || 480 || 2048 || 2048
|-
! DarkPlaces
| Unlimited || Unlimited || 65536 || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Channels !! Dynamic channels
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! DirectQ
|516 || 128
|-
! Quore
| 128 || 8
|-
! DarkPlaces
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clients !! Packet size !! Progs globals !! Runaway loop, QC !! Signon buffer size !! Stack size, QC !! Static client message
|-
! Normal limit
| 16 || 8k (1024) || 32k || 100k || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M || ~64k || 256 || 8192
|-
! DirectQ
|16 || ~64k || ? (check) || 5M || ~64k || 256 || 8192
|-
! Quore
| 32 || ~32k || 32k || 1M || ~32k || ? || ?
|-
! DarkPlaces
| 255 || 64k (1400) || 64k || 10m jumps || 64k || 16384 || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Beams !! Console background !! Far clip distance !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! Video modes !! Visible edicts !! WinQ bmodel edges !! WinQ bmodel vertices !! Particles
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || ?
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || ?
|-
! DirectQ
| ? (check) || ? (check) || Unlimited || Unlimited || ? (check) || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! Quore
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|-
! DarkPlaces
| 256 || Unlimited || Infinite || Unlimited || 64k || Unlimited || =256x128 || System || 32k || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! Edicts !! Efrags !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! Zone size, default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! DirectQ
| ? (check) || ? (check) || 8192 || N/A (unused) || N/A (unused) || 8192 || 8192 || 8192 || ? (check) || Unlimited || 32 MB
|-
! Quore
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! DarkPlaces
| 640k || 1024k || 32768 || Unlimited || Unlimited || 8k || 8k || 4k || Unlimited || Unlimited || Unlimited
|}</text>
      <sha1>83xl42m32vrkc8onag0708h84t8wsx7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1186</id>
      <parentid>1185</parentid>
      <timestamp>2009-09-24T15:17:53Z</timestamp>
      <contributor>
        <ip>69.59.212.88</ip>
      </contributor>
      <comment>/* BSP */</comment>
      <text xml:space="preserve" bytes="4325">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Link to engines page
*Nicer table look


 * means: Check engine's readme for comments and details

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clipnodes !! Faces !! Lightmaps !! Marksurfaces !! Nodes !! Planes !! Static entities !! Surface extents !! Texinfo !! Visleafs !! Vis/light data !! Dimensions
|-
! Normal limit
| 32k || 32k || 64 || 32k || 32k || 32k || 128 || 512/256 || 32k || 8k || heapsize || 4096
|-
! aguirRe's
|~64k* || 64k || 1024 || 64k || ~32-64k* || &gt;32k || 256 || &gt;512/256 || &gt;32k || 32k || 2048M* || ?
|-
! DirectQ
| 64k || 64k || Unlimited || 64k || 32k || 32k || Unlimited || 512/256 || 32k || 32k || Unlimited || ?
|-
! Quore
| 32k || 64k || 256 || 64k || 32k || 32k || 1024 || 512 || 4k || 16k || heapsize || ?
|-
! DarkPlaces
|~64k || Unlimited || Unlimited || Unlimited || ~32-64k || 64k || 256 || 4080 || 64k || 32k || Unlimited || 1073741824
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! DirectQ
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! Quore
| 8192 || 128 || 480 || 2048 || 2048
|-
! DarkPlaces
| Unlimited || Unlimited || 65536 || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Channels !! Dynamic channels
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! DirectQ
|516 || 128
|-
! Quore
| 128 || 8
|-
! DarkPlaces
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clients !! Packet size !! Progs globals !! Runaway loop, QC !! Signon buffer size !! Stack size, QC !! Static client message
|-
! Normal limit
| 16 || 8k (1024) || 32k || 100k || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M || ~64k || 256 || 8192
|-
! DirectQ
|16 || ~64k || ? (check) || 5M || ~64k || 256 || 8192
|-
! Quore
| 32 || ~32k || 32k || 1M || ~32k || ? || ?
|-
! DarkPlaces
| 255 || 64k (1400) || 64k || 10m jumps || 64k || 16384 || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Beams !! Console background !! Far clip distance !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! Video modes !! Visible edicts !! WinQ bmodel edges !! WinQ bmodel vertices !! Particles
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || ?
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || ?
|-
! DirectQ
| ? (check) || ? (check) || Unlimited || Unlimited || ? (check) || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! Quore
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|-
! DarkPlaces
| 256 || Unlimited || Infinite || Unlimited || 64k || Unlimited || =256x128 || System || 32k || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! Edicts !! Efrags !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! Zone size, default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! DirectQ
| ? (check) || ? (check) || 8192 || N/A (unused) || N/A (unused) || 8192 || 8192 || 8192 || ? (check) || Unlimited || 32 MB
|-
! Quore
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! DarkPlaces
| 640k || 1024k || 32768 || Unlimited || Unlimited || 8k || 8k || 4k || Unlimited || Unlimited || Unlimited
|}</text>
      <sha1>2yw85cij5vh34074qo15oa6cud4rgd8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1187</id>
      <parentid>1186</parentid>
      <timestamp>2009-09-24T15:21:13Z</timestamp>
      <contributor>
        <ip>69.59.212.88</ip>
      </contributor>
      <comment>/* MDL */</comment>
      <text xml:space="preserve" bytes="4329">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Link to engines page
*Nicer table look


 * means: Check engine's readme for comments and details

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clipnodes !! Faces !! Lightmaps !! Marksurfaces !! Nodes !! Planes !! Static entities !! Surface extents !! Texinfo !! Visleafs !! Vis/light data !! Dimensions
|-
! Normal limit
| 32k || 32k || 64 || 32k || 32k || 32k || 128 || 512/256 || 32k || 8k || heapsize || 4096
|-
! aguirRe's
|~64k* || 64k || 1024 || 64k || ~32-64k* || &gt;32k || 256 || &gt;512/256 || &gt;32k || 32k || 2048M* || ?
|-
! DirectQ
| 64k || 64k || Unlimited || 64k || 32k || 32k || Unlimited || 512/256 || 32k || 32k || Unlimited || ?
|-
! Quore
| 32k || 64k || 256 || 64k || 32k || 32k || 1024 || 512 || 4k || 16k || heapsize || ?
|-
! DarkPlaces
|~64k || Unlimited || Unlimited || Unlimited || ~32-64k || 64k || 256 || 4080 || 64k || 32k || Unlimited || 1073741824
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! DirectQ
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! Quore
| 8192 || 128 || 480 || 2048 || 2048
|-
! DarkPlaces
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Channels !! Dynamic channels
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! DirectQ
|516 || 128
|-
! Quore
| 128 || 8
|-
! DarkPlaces
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clients !! Packet size !! Progs globals !! Runaway loop, QC !! Signon buffer size !! Stack size, QC !! Static client message
|-
! Normal limit
| 16 || 8k (1024) || 32k || 100k || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M || ~64k || 256 || 8192
|-
! DirectQ
|16 || ~64k || ? (check) || 5M || ~64k || 256 || 8192
|-
! Quore
| 32 || ~32k || 32k || 1M || ~32k || ? || ?
|-
! DarkPlaces
| 255 || 64k (1400) || 64k || 10m jumps || 64k || 16384 || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Beams !! Console background !! Far clip distance !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! Video modes !! Visible edicts !! WinQ bmodel edges !! WinQ bmodel vertices !! Particles
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || ?
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || ?
|-
! DirectQ
| ? (check) || ? (check) || Unlimited || Unlimited || ? (check) || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! Quore
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|-
! DarkPlaces
| 256 || Unlimited || Infinite || Unlimited || 64k || Unlimited || =256x128 || System || 32k || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! Edicts !! Efrags !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! Zone size, default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! DirectQ
| ? (check) || ? (check) || 8192 || N/A (unused) || N/A (unused) || 8192 || 8192 || 8192 || ? (check) || Unlimited || 32 MB
|-
! Quore
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! DarkPlaces
| 640k || 1024k || 32768 || Unlimited || Unlimited || 8k || 8k || 4k || Unlimited || Unlimited || Unlimited
|}</text>
      <sha1>r9gmupt2cr7xzhkoqjh1yhauodv6q5c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1188</id>
      <parentid>1187</parentid>
      <timestamp>2009-09-24T15:24:54Z</timestamp>
      <contributor>
        <ip>69.59.212.88</ip>
      </contributor>
      <comment>/* BSP */</comment>
      <text xml:space="preserve" bytes="4359">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Link to engines page
*Nicer table look


 * means: Check engine's readme for comments and details

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clipnodes !! Faces !! Lightmaps !! Marksurfaces !! Nodes !! Planes !! Static entities !! Surface extents !! Texinfo !! Visleafs !! Vis/light data !! Dimensions
|-
! Normal limit
| 32k || 32k || 64 || 32k || 32k || 32k || 128 || 512/256 || 32k || 8k || heapsize || 4096
|-
! aguirRe's
|~64k* || 64k || 1024 || 64k || ~32-64k* || &gt;32k || 256 || &gt;512/256 || &gt;32k || 32k || 2048M* || ?
|-
! DirectQ
| 64k || 64k || Unlimited || 64k || 32k || 32k || Unlimited || 512/256 || 32k || 32k || Unlimited || ?
|-
! Quore
| 32k || 64k || 256 || 64k || 32k || 32k || 1024 || 512 || 4k || 16k || heapsize || ?
|-
! DarkPlaces
|65528 (Q1BSP) || Unlimited || Unlimited || Unlimited || ~45000 (Q1BSP) || 65536 || 256 || 4080 || 65536 (Q1BSP) || 32768 || Unlimited || 1073741824
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! DirectQ
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! Quore
| 8192 || 128 || 480 || 2048 || 2048
|-
! DarkPlaces
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Channels !! Dynamic channels
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! DirectQ
|516 || 128
|-
! Quore
| 128 || 8
|-
! DarkPlaces
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clients !! Packet size !! Progs globals !! Runaway loop, QC !! Signon buffer size !! Stack size, QC !! Static client message
|-
! Normal limit
| 16 || 8k (1024) || 32k || 100k || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M || ~64k || 256 || 8192
|-
! DirectQ
|16 || ~64k || ? (check) || 5M || ~64k || 256 || 8192
|-
! Quore
| 32 || ~32k || 32k || 1M || ~32k || ? || ?
|-
! DarkPlaces
| 255 || 64k (1400) || 64k || 10m jumps || 64k || 16384 || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Beams !! Console background !! Far clip distance !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! Video modes !! Visible edicts !! WinQ bmodel edges !! WinQ bmodel vertices !! Particles
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || ?
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || ?
|-
! DirectQ
| ? (check) || ? (check) || Unlimited || Unlimited || ? (check) || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! Quore
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|-
! DarkPlaces
| 256 || Unlimited || Infinite || Unlimited || 64k || Unlimited || =256x128 || System || 32k || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! Edicts !! Efrags !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! Zone size, default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! DirectQ
| ? (check) || ? (check) || 8192 || N/A (unused) || N/A (unused) || 8192 || 8192 || 8192 || ? (check) || Unlimited || 32 MB
|-
! Quore
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! DarkPlaces
| 640k || 1024k || 32768 || Unlimited || Unlimited || 8k || 8k || 4k || Unlimited || Unlimited || Unlimited
|}</text>
      <sha1>gxx3z0qshneucfkx377259bo0stciha</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1189</id>
      <parentid>1188</parentid>
      <timestamp>2009-09-24T15:26:14Z</timestamp>
      <contributor>
        <ip>69.59.212.88</ip>
      </contributor>
      <comment>/* Client/Server */</comment>
      <text xml:space="preserve" bytes="4397">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Link to engines page
*Nicer table look


 * means: Check engine's readme for comments and details

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clipnodes !! Faces !! Lightmaps !! Marksurfaces !! Nodes !! Planes !! Static entities !! Surface extents !! Texinfo !! Visleafs !! Vis/light data !! Dimensions
|-
! Normal limit
| 32k || 32k || 64 || 32k || 32k || 32k || 128 || 512/256 || 32k || 8k || heapsize || 4096
|-
! aguirRe's
|~64k* || 64k || 1024 || 64k || ~32-64k* || &gt;32k || 256 || &gt;512/256 || &gt;32k || 32k || 2048M* || ?
|-
! DirectQ
| 64k || 64k || Unlimited || 64k || 32k || 32k || Unlimited || 512/256 || 32k || 32k || Unlimited || ?
|-
! Quore
| 32k || 64k || 256 || 64k || 32k || 32k || 1024 || 512 || 4k || 16k || heapsize || ?
|-
! DarkPlaces
|65528 (Q1BSP) || Unlimited || Unlimited || Unlimited || ~45000 (Q1BSP) || 65536 || 256 || 4080 || 65536 (Q1BSP) || 32768 || Unlimited || 1073741824
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! DirectQ
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! Quore
| 8192 || 128 || 480 || 2048 || 2048
|-
! DarkPlaces
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Channels !! Dynamic channels
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! DirectQ
|516 || 128
|-
! Quore
| 128 || 8
|-
! DarkPlaces
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clients !! Packet size (Reliable, Unreliable) !! Progs globals !! Runaway loop, QC !! Signon buffer size !! Stack size, QC !! Static client message
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M || ~64k || 256 || 8192
|-
! DirectQ
|16 || ~64k || ? (check) || 5M || ~64k || 256 || 8192
|-
! Quore
| 32 || ~32k || 32k || 1M || ~32k || ? || ?
|-
! DarkPlaces
| 255 || 65536 / 1400 || 65536 || 10000000 jumps || 65536 || 16384 || 65536
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Beams !! Console background !! Far clip distance !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! Video modes !! Visible edicts !! WinQ bmodel edges !! WinQ bmodel vertices !! Particles
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || ?
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || ?
|-
! DirectQ
| ? (check) || ? (check) || Unlimited || Unlimited || ? (check) || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! Quore
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|-
! DarkPlaces
| 256 || Unlimited || Infinite || Unlimited || 64k || Unlimited || =256x128 || System || 32k || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! Edicts !! Efrags !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! Zone size, default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! DirectQ
| ? (check) || ? (check) || 8192 || N/A (unused) || N/A (unused) || 8192 || 8192 || 8192 || ? (check) || Unlimited || 32 MB
|-
! Quore
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! DarkPlaces
| 640k || 1024k || 32768 || Unlimited || Unlimited || 8k || 8k || 4k || Unlimited || Unlimited || Unlimited
|}</text>
      <sha1>ge6xynmix0fu5jim7dpn9huidsbih1k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1190</id>
      <parentid>1189</parentid>
      <timestamp>2009-09-24T15:28:18Z</timestamp>
      <contributor>
        <ip>69.59.212.88</ip>
      </contributor>
      <comment>/* Graphics */</comment>
      <text xml:space="preserve" bytes="4399">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Link to engines page
*Nicer table look


 * means: Check engine's readme for comments and details

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clipnodes !! Faces !! Lightmaps !! Marksurfaces !! Nodes !! Planes !! Static entities !! Surface extents !! Texinfo !! Visleafs !! Vis/light data !! Dimensions
|-
! Normal limit
| 32k || 32k || 64 || 32k || 32k || 32k || 128 || 512/256 || 32k || 8k || heapsize || 4096
|-
! aguirRe's
|~64k* || 64k || 1024 || 64k || ~32-64k* || &gt;32k || 256 || &gt;512/256 || &gt;32k || 32k || 2048M* || ?
|-
! DirectQ
| 64k || 64k || Unlimited || 64k || 32k || 32k || Unlimited || 512/256 || 32k || 32k || Unlimited || ?
|-
! Quore
| 32k || 64k || 256 || 64k || 32k || 32k || 1024 || 512 || 4k || 16k || heapsize || ?
|-
! DarkPlaces
|65528 (Q1BSP) || Unlimited || Unlimited || Unlimited || ~45000 (Q1BSP) || 65536 || 256 || 4080 || 65536 (Q1BSP) || 32768 || Unlimited || 1073741824
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! DirectQ
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! Quore
| 8192 || 128 || 480 || 2048 || 2048
|-
! DarkPlaces
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Channels !! Dynamic channels
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! DirectQ
|516 || 128
|-
! Quore
| 128 || 8
|-
! DarkPlaces
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clients !! Packet size (Reliable, Unreliable) !! Progs globals !! Runaway loop, QC !! Signon buffer size !! Stack size, QC !! Static client message
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M || ~64k || 256 || 8192
|-
! DirectQ
|16 || ~64k || ? (check) || 5M || ~64k || 256 || 8192
|-
! Quore
| 32 || ~32k || 32k || 1M || ~32k || ? || ?
|-
! DarkPlaces
| 255 || 65536 / 1400 || 65536 || 10000000 jumps || 65536 || 16384 || 65536
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Beams !! Console background !! Far clip distance !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! Video modes !! Visible edicts !! WinQ bmodel edges !! WinQ bmodel vertices !! Particles
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || ?
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || ?
|-
! DirectQ
| ? (check) || ? (check) || Unlimited || Unlimited || ? (check) || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! Quore
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|-
! DarkPlaces
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || System || 32k || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! Edicts !! Efrags !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! Zone size, default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! DirectQ
| ? (check) || ? (check) || 8192 || N/A (unused) || N/A (unused) || 8192 || 8192 || 8192 || ? (check) || Unlimited || 32 MB
|-
! Quore
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! DarkPlaces
| 640k || 1024k || 32768 || Unlimited || Unlimited || 8k || 8k || 4k || Unlimited || Unlimited || Unlimited
|}</text>
      <sha1>a5xzfk4wj7cp10f6em7ib93nbfszsl6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1191</id>
      <parentid>1190</parentid>
      <timestamp>2009-09-24T15:28:49Z</timestamp>
      <contributor>
        <ip>69.59.212.88</ip>
      </contributor>
      <comment>/* Misc. */</comment>
      <text xml:space="preserve" bytes="4409">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Link to engines page
*Nicer table look


 * means: Check engine's readme for comments and details

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clipnodes !! Faces !! Lightmaps !! Marksurfaces !! Nodes !! Planes !! Static entities !! Surface extents !! Texinfo !! Visleafs !! Vis/light data !! Dimensions
|-
! Normal limit
| 32k || 32k || 64 || 32k || 32k || 32k || 128 || 512/256 || 32k || 8k || heapsize || 4096
|-
! aguirRe's
|~64k* || 64k || 1024 || 64k || ~32-64k* || &gt;32k || 256 || &gt;512/256 || &gt;32k || 32k || 2048M* || ?
|-
! DirectQ
| 64k || 64k || Unlimited || 64k || 32k || 32k || Unlimited || 512/256 || 32k || 32k || Unlimited || ?
|-
! Quore
| 32k || 64k || 256 || 64k || 32k || 32k || 1024 || 512 || 4k || 16k || heapsize || ?
|-
! DarkPlaces
|65528 (Q1BSP) || Unlimited || Unlimited || Unlimited || ~45000 (Q1BSP) || 65536 || 256 || 4080 || 65536 (Q1BSP) || 32768 || Unlimited || 1073741824
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! DirectQ
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! Quore
| 8192 || 128 || 480 || 2048 || 2048
|-
! DarkPlaces
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Channels !! Dynamic channels
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! DirectQ
|516 || 128
|-
! Quore
| 128 || 8
|-
! DarkPlaces
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clients !! Packet size (Reliable, Unreliable) !! Progs globals !! Runaway loop, QC !! Signon buffer size !! Stack size, QC !! Static client message
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M || ~64k || 256 || 8192
|-
! DirectQ
|16 || ~64k || ? (check) || 5M || ~64k || 256 || 8192
|-
! Quore
| 32 || ~32k || 32k || 1M || ~32k || ? || ?
|-
! DarkPlaces
| 255 || 65536 / 1400 || 65536 || 10000000 jumps || 65536 || 16384 || 65536
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Beams !! Console background !! Far clip distance !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! Video modes !! Visible edicts !! WinQ bmodel edges !! WinQ bmodel vertices !! Particles
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || ?
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || ?
|-
! DirectQ
| ? (check) || ? (check) || Unlimited || Unlimited || ? (check) || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! Quore
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|-
! DarkPlaces
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || System || 32k || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! Edicts !! Efrags !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! Zone size, default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! DirectQ
| ? (check) || ? (check) || 8192 || N/A (unused) || N/A (unused) || 8192 || 8192 || 8192 || ? (check) || Unlimited || 32 MB
|-
! Quore
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! DarkPlaces
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}</text>
      <sha1>2osxjp3iyv2v9v226301zf78b3bsxgj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1192</id>
      <parentid>1191</parentid>
      <timestamp>2009-09-24T15:29:05Z</timestamp>
      <contributor>
        <ip>69.59.212.88</ip>
      </contributor>
      <comment>/* Graphics */</comment>
      <text xml:space="preserve" bytes="4415">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Link to engines page
*Nicer table look


 * means: Check engine's readme for comments and details

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clipnodes !! Faces !! Lightmaps !! Marksurfaces !! Nodes !! Planes !! Static entities !! Surface extents !! Texinfo !! Visleafs !! Vis/light data !! Dimensions
|-
! Normal limit
| 32k || 32k || 64 || 32k || 32k || 32k || 128 || 512/256 || 32k || 8k || heapsize || 4096
|-
! aguirRe's
|~64k* || 64k || 1024 || 64k || ~32-64k* || &gt;32k || 256 || &gt;512/256 || &gt;32k || 32k || 2048M* || ?
|-
! DirectQ
| 64k || 64k || Unlimited || 64k || 32k || 32k || Unlimited || 512/256 || 32k || 32k || Unlimited || ?
|-
! Quore
| 32k || 64k || 256 || 64k || 32k || 32k || 1024 || 512 || 4k || 16k || heapsize || ?
|-
! DarkPlaces
|65528 (Q1BSP) || Unlimited || Unlimited || Unlimited || ~45000 (Q1BSP) || 65536 || 256 || 4080 || 65536 (Q1BSP) || 32768 || Unlimited || 1073741824
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! DirectQ
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! Quore
| 8192 || 128 || 480 || 2048 || 2048
|-
! DarkPlaces
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Channels !! Dynamic channels
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! DirectQ
|516 || 128
|-
! Quore
| 128 || 8
|-
! DarkPlaces
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clients !! Packet size (Reliable, Unreliable) !! Progs globals !! Runaway loop, QC !! Signon buffer size !! Stack size, QC !! Static client message
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M || ~64k || 256 || 8192
|-
! DirectQ
|16 || ~64k || ? (check) || 5M || ~64k || 256 || 8192
|-
! Quore
| 32 || ~32k || 32k || 1M || ~32k || ? || ?
|-
! DarkPlaces
| 255 || 65536 / 1400 || 65536 || 10000000 jumps || 65536 || 16384 || 65536
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Beams !! Console background !! Far clip distance !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! Video modes !! Visible edicts !! WinQ bmodel edges !! WinQ bmodel vertices !! Particles
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || ?
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || ?
|-
! DirectQ
| ? (check) || ? (check) || Unlimited || Unlimited || ? (check) || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! Quore
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|-
! DarkPlaces
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || System || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! Edicts !! Efrags !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! Zone size, default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! DirectQ
| ? (check) || ? (check) || 8192 || N/A (unused) || N/A (unused) || 8192 || 8192 || 8192 || ? (check) || Unlimited || 32 MB
|-
! Quore
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! DarkPlaces
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}</text>
      <sha1>pm6amihayuazz49u9yt5qfo21xk52kn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1193</id>
      <parentid>1192</parentid>
      <timestamp>2009-09-24T15:29:32Z</timestamp>
      <contributor>
        <ip>69.59.212.88</ip>
      </contributor>
      <comment>/* Graphics */</comment>
      <text xml:space="preserve" bytes="4418">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Link to engines page
*Nicer table look


 * means: Check engine's readme for comments and details

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clipnodes !! Faces !! Lightmaps !! Marksurfaces !! Nodes !! Planes !! Static entities !! Surface extents !! Texinfo !! Visleafs !! Vis/light data !! Dimensions
|-
! Normal limit
| 32k || 32k || 64 || 32k || 32k || 32k || 128 || 512/256 || 32k || 8k || heapsize || 4096
|-
! aguirRe's
|~64k* || 64k || 1024 || 64k || ~32-64k* || &gt;32k || 256 || &gt;512/256 || &gt;32k || 32k || 2048M* || ?
|-
! DirectQ
| 64k || 64k || Unlimited || 64k || 32k || 32k || Unlimited || 512/256 || 32k || 32k || Unlimited || ?
|-
! Quore
| 32k || 64k || 256 || 64k || 32k || 32k || 1024 || 512 || 4k || 16k || heapsize || ?
|-
! DarkPlaces
|65528 (Q1BSP) || Unlimited || Unlimited || Unlimited || ~45000 (Q1BSP) || 65536 || 256 || 4080 || 65536 (Q1BSP) || 32768 || Unlimited || 1073741824
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! DirectQ
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! Quore
| 8192 || 128 || 480 || 2048 || 2048
|-
! DarkPlaces
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Channels !! Dynamic channels
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! DirectQ
|516 || 128
|-
! Quore
| 128 || 8
|-
! DarkPlaces
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Clients !! Packet size (Reliable, Unreliable) !! Progs globals !! Runaway loop, QC !! Signon buffer size !! Stack size, QC !! Static client message
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M || ~64k || 256 || 8192
|-
! DirectQ
|16 || ~64k || ? (check) || 5M || ~64k || 256 || 8192
|-
! Quore
| 32 || ~32k || 32k || 1M || ~32k || ? || ?
|-
! DarkPlaces
| 255 || 65536 / 1400 || 65536 || 10000000 jumps || 65536 || 16384 || 65536
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Beams !! Console background !! Far clip distance !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! Video modes !! Visible edicts !! WinQ bmodel edges !! WinQ bmodel vertices !! Particles
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || ?
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || ?
|-
! DirectQ
| ? (check) || ? (check) || Unlimited || Unlimited || ? (check) || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! Quore
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|-
! DarkPlaces
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! Edicts !! Efrags !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! Zone size, default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! DirectQ
| ? (check) || ? (check) || 8192 || N/A (unused) || N/A (unused) || 8192 || 8192 || 8192 || ? (check) || Unlimited || 32 MB
|-
! Quore
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! DarkPlaces
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}</text>
      <sha1>el8afe1h7bf2hbk3aaj8jlne02owtnq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1194</id>
      <parentid>1193</parentid>
      <timestamp>2009-09-24T16:11:02Z</timestamp>
      <contributor>
        <ip>209.180.238.66</ip>
      </contributor>
      <comment>made some terms into links to increase connectivity</comment>
      <text xml:space="preserve" bytes="4621">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32k || 32k || 64 || 32k || 32k || 32k || 128 || 512/256 || 32k || 8k || heapsize || 4096
|-
! aguirRe's
|~64k* || 64k || 1024 || 64k || ~32-64k* || &gt;32k || 256 || &gt;512/256 || &gt;32k || 32k || 2048M* || ?
|-
! [[DirectQ]]
| 64k || 64k || Unlimited || 64k || 32k || 32k || Unlimited || 512/256 || 32k || 32k || Unlimited || ?
|-
! [[Quore]]
| 32k || 64k || 256 || 64k || 32k || 32k || 1024 || 512 || 4k || 16k || heapsize || ?
|-
! [[DarkPlaces]]
|65528 (Q1BSP) || Unlimited || Unlimited || Unlimited || ~45000 (Q1BSP) || 65536 || 256 || 4080 || 65536 (Q1BSP) || 32768 || Unlimited || 1073741824
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M || ~64k || 256 || 8192
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 65536 / 1400 || 65536 || 10000000 jumps || 65536 || 16384 || 65536
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || ?
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || ?
|-
! [[DirectQ]]
| ? (check) || ? (check) || Unlimited || Unlimited || ? (check) || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[Quore]]
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| ? (check) || ? (check) || 8192 || N/A (unused) || N/A (unused) || 8192 || 8192 || 8192 || ? (check) || Unlimited || 32 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]</text>
      <sha1>q2hu4brd4naryhpz39q096jyui9plaz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1195</id>
      <parentid>1194</parentid>
      <timestamp>2009-09-24T17:31:03Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>standardised some dp limits from full numeric to XXk. dunno what is better but it has to be one (for sorting and easy comprehension)</comment>
      <text xml:space="preserve" bytes="4600">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32k || 32k || 64 || 32k || 32k || 32k || 128 || 512/256 || 32k || 8k || heapsize || 4096
|-
! aguirRe's
|~64k* || 64k || 1024 || 64k || ~32-64k* || &gt;32k || 256 || &gt;512/256 || &gt;32k || 32k || 2048M* || ?
|-
! [[DirectQ]]
| 64k || 64k || Unlimited || 64k || 32k || 32k || Unlimited || 512/256 || 32k || 32k || Unlimited || ?
|-
! [[Quore]]
| 32k || 64k || 256 || 64k || 32k || 32k || 1024 || 512 || 4k || 16k || heapsize || ?
|-
! [[DarkPlaces]]
|65528 (Q1BSP) || Unlimited || Unlimited || Unlimited || ~45000 (Q1BSP) || 64k || 256 || 4080 || 64k (Q1BSP) || 32k || Unlimited || 1073741824
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M || ~64k || 256 || 8192
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || ?
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || ?
|-
! [[DirectQ]]
| ? (check) || ? (check) || Unlimited || Unlimited || ? (check) || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[Quore]]
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| ? (check) || ? (check) || 8192 || N/A (unused) || N/A (unused) || 8192 || 8192 || 8192 || ? (check) || Unlimited || 32 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]</text>
      <sha1>mt9dqw2eelgqn3fq95i222j14rxk0d9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1196</id>
      <parentid>1195</parentid>
      <timestamp>2009-09-24T17:39:24Z</timestamp>
      <contributor>
        <ip>89.19.67.48</ip>
      </contributor>
      <comment>Updated DirectQ Limits</comment>
      <text xml:space="preserve" bytes="4570">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32k || 32k || 64 || 32k || 32k || 32k || 128 || 512/256 || 32k || 8k || heapsize || 4096
|-
! aguirRe's
|~64k* || 64k || 1024 || 64k || ~32-64k* || &gt;32k || 256 || &gt;512/256 || &gt;32k || 32k || 2048M* || ?
|-
! [[DirectQ]]
| 64k || 64k || Unlimited || 64k || 32k || 64k || Unlimited || 512/256 || 64k || 32k || Unlimited || ?
|-
! [[Quore]]
| 32k || 64k || 256 || 64k || 32k || 32k || 1024 || 512 || 4k || 16k || heapsize || ?
|-
! [[DarkPlaces]]
|65528 (Q1BSP) || Unlimited || Unlimited || Unlimited || ~45000 (Q1BSP) || 64k || 256 || 4080 || 64k (Q1BSP) || 32k || Unlimited || 1073741824
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M || ~64k || 256 || 8192
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || ?
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || ?
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[Quore]]
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 256k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]</text>
      <sha1>e4f41cy0fnza8ljdk4dzh30s4iul6pl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1197</id>
      <parentid>1196</parentid>
      <timestamp>2009-09-24T17:42:03Z</timestamp>
      <contributor>
        <ip>89.19.67.48</ip>
      </contributor>
      <comment>Particle limits for normal and arguiRe</comment>
      <text xml:space="preserve" bytes="4580">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32k || 32k || 64 || 32k || 32k || 32k || 128 || 512/256 || 32k || 8k || heapsize || 4096
|-
! aguirRe's
|~64k* || 64k || 1024 || 64k || ~32-64k* || &gt;32k || 256 || &gt;512/256 || &gt;32k || 32k || 2048M* || ?
|-
! [[DirectQ]]
| 64k || 64k || Unlimited || 64k || 32k || 64k || Unlimited || 512/256 || 64k || 32k || Unlimited || ?
|-
! [[Quore]]
| 32k || 64k || 256 || 64k || 32k || 32k || 1024 || 512 || 4k || 16k || heapsize || ?
|-
! [[DarkPlaces]]
|65528 (Q1BSP) || Unlimited || Unlimited || Unlimited || ~45000 (Q1BSP) || 64k || 256 || 4080 || 64k (Q1BSP) || 32k || Unlimited || 1073741824
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M || ~64k || 256 || 8192
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[Quore]]
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 256k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]</text>
      <sha1>gw03x8ibkt54qbt8hqqwtth4ye5yt9k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1206</id>
      <parentid>1197</parentid>
      <timestamp>2009-09-24T19:47:51Z</timestamp>
      <contributor>
        <ip>69.59.212.88</ip>
      </contributor>
      <comment>/* BSP */</comment>
      <text xml:space="preserve" bytes="4566">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32k || 32k || 64 || 32k || 32k || 32k || 128 || 512/256 || 32k || 8k || heapsize || 4096
|-
! aguirRe's
|65530 F || 64k || 1024 || 64k || 65535 F || &gt;32k || 256 || &gt;512/256 || &gt;32k || 32k || 2048M* || ?
|-
! [[DirectQ]]
| 64k || 64k || Unlimited || 64k || 32k || 64k || Unlimited || 512/256 || 64k || 32k || Unlimited || ?
|-
! [[Quore]]
| 32k || 64k || 256 || 64k || 32k || 32k || 1024 || 512 || 4k || 16k || heapsize || ?
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 64k || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M || ~64k || 256 || 8192
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[Quore]]
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 256k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]</text>
      <sha1>1cxgbyke227n5owrrmbbzv41k8n3k07</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1207</id>
      <parentid>1206</parentid>
      <timestamp>2009-09-24T19:51:06Z</timestamp>
      <contributor>
        <ip>69.59.212.88</ip>
      </contributor>
      <comment>/* BSP */</comment>
      <text xml:space="preserve" bytes="4634">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65536 || 65536 || Unlimited || 65536 || 32768 || 65536 F || Unlimited || 512/256 || 65536 || 32768 || Unlimited || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 1024 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M || ~64k || 256 || 8192
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[Quore]]
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 256k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]</text>
      <sha1>9v8wjzk2459z1z67lncjjilhrprxhrh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1208</id>
      <parentid>1207</parentid>
      <timestamp>2009-09-24T20:02:22Z</timestamp>
      <contributor>
        <username>LordHavoc</username>
        <id>21</id>
      </contributor>
      <comment>/* BSP */</comment>
      <text xml:space="preserve" bytes="4636">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65536 || 65536 || Unlimited || 65536 || 32768 || 65536 F || Unlimited || 512/256 || 65536 F || 32768 || Unlimited || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 1024 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M || ~64k || 256 || 8192
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[Quore]]
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 256k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]</text>
      <sha1>m7lg8ogutdu76ukfnhhgqqs7xp1bre4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1209</id>
      <parentid>1208</parentid>
      <timestamp>2009-09-24T20:04:56Z</timestamp>
      <contributor>
        <username>LordHavoc</username>
        <id>21</id>
      </contributor>
      <comment>/* Client/Server */</comment>
      <text xml:space="preserve" bytes="4652">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65536 || 65536 || Unlimited || 65536 || 32768 || 65536 F || Unlimited || 512/256 || 65536 F || 32768 || Unlimited || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 1024 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 256 || 8192
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[Quore]]
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 256k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]</text>
      <sha1>857x3g5epczvinogobqqjj9k7mh7imj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1211</id>
      <parentid>1209</parentid>
      <timestamp>2009-09-24T21:52:35Z</timestamp>
      <contributor>
        <username>Mh</username>
        <id>20</id>
      </contributor>
      <comment>/* TODO */</comment>
      <text xml:space="preserve" bytes="4763">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65536 || 65536 || Unlimited || 65536 || 32768 || 65536 F || Unlimited || 512/256 || 65536 F || 32768 || Unlimited || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 1024 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 256 || 8192
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[Quore]]
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 256k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]</text>
      <sha1>00yrczqspqcyq9453p4h4iv1unkc333</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1212</id>
      <parentid>1211</parentid>
      <timestamp>2009-09-24T21:55:51Z</timestamp>
      <contributor>
        <username>Mh</username>
        <id>20</id>
      </contributor>
      <comment>/* BSP */</comment>
      <text xml:space="preserve" bytes="4762">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 32768 || 65536 F || Unlimited || 2032 || 65536 F || 32768 || Unlimited || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 1024 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 256 || 8192
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[Quore]]
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 256k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]</text>
      <sha1>dzapmanz8goxnq9acgd390vbry383cg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1213</id>
      <parentid>1212</parentid>
      <timestamp>2009-09-24T22:04:19Z</timestamp>
      <contributor>
        <username>Mh</username>
        <id>20</id>
      </contributor>
      <comment>/* BSP */</comment>
      <text xml:space="preserve" bytes="4764">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || 2032 || 65536 F || 32768 || Unlimited || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 1024 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 256 || 8192
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[Quore]]
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 256k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]</text>
      <sha1>8ocdge7iwxhpyucfhil8qst4gl7hisy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1214</id>
      <parentid>1213</parentid>
      <timestamp>2009-09-24T22:15:27Z</timestamp>
      <contributor>
        <username>Mh</username>
        <id>20</id>
      </contributor>
      <comment>/* Client/Server */</comment>
      <text xml:space="preserve" bytes="4765">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || 2032 || 65536 F || 32768 || Unlimited || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 1024 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[Quore]]
| 24 || Current resolution || Unlimited || Unlimited || ? || 1200k || =256x128 || N/A || 1024 || 1000 || 500 || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 256k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]</text>
      <sha1>5am1u1obz6nh0ewq2z7yx3fubsdtw2d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1261</id>
      <parentid>1214</parentid>
      <timestamp>2009-09-25T09:30:02Z</timestamp>
      <contributor>
        <ip>193.49.97.126</ip>
      </contributor>
      <comment>/* Graphics */</comment>
      <text xml:space="preserve" bytes="4761">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || 2032 || 65536 F || 32768 || Unlimited || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 1024 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 256k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]</text>
      <sha1>eqc8s90gomzhirhpqh94ohzlafffcwl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1262</id>
      <parentid>1261</parentid>
      <timestamp>2009-09-25T09:33:18Z</timestamp>
      <contributor>
        <ip>193.49.97.126</ip>
      </contributor>
      <comment>/* BSP */</comment>
      <text xml:space="preserve" bytes="4760">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || 2032 || 65536 F || 32768 || Unlimited || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 256k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]</text>
      <sha1>fohdid2q5h9wg14pvzr0wdkufypxxj0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1324</id>
      <parentid>1262</parentid>
      <timestamp>2009-09-27T21:06:06Z</timestamp>
      <contributor>
        <username>Mh</username>
        <id>20</id>
      </contributor>
      <minor/>
      <comment>/* BSP */</comment>
      <text xml:space="preserve" bytes="4784">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 256k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]</text>
      <sha1>soabn3b4z63kvz4uaw4lr39pjpthqwa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1330</id>
      <parentid>1324</parentid>
      <timestamp>2009-09-29T08:09:00Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="4903">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[FitzQuake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 256k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]</text>
      <sha1>awce36jz47uy8kphg4lslh9kalx7e7h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1334</id>
      <parentid>1330</parentid>
      <timestamp>2009-09-30T17:21:16Z</timestamp>
      <contributor>
        <ip>75.118.7.231</ip>
      </contributor>
      <comment>/* BSP */</comment>
      <text xml:space="preserve" bytes="5023">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 4096
|-
! ProQuake 4
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[FitzQuake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 256k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]</text>
      <sha1>0m0thpz0s1s7tt4khh8k0l1byqqyavf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1335</id>
      <parentid>1334</parentid>
      <timestamp>2009-09-30T17:22:56Z</timestamp>
      <contributor>
        <ip>75.118.7.231</ip>
      </contributor>
      <comment>/* Sounds */</comment>
      <text xml:space="preserve" bytes="5054">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 4096
|-
! ProQuake 4
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[FitzQuake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 256k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]</text>
      <sha1>nff1qzyylx7kfmwqwcx8dito20vo20j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1336</id>
      <parentid>1335</parentid>
      <timestamp>2009-09-30T17:24:06Z</timestamp>
      <contributor>
        <ip>75.118.7.231</ip>
      </contributor>
      <comment>/* Client/Server */</comment>
      <text xml:space="preserve" bytes="5130">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 4096
|-
! ProQuake 4
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[FitzQuake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! ProQuake 4
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 256k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]</text>
      <sha1>ojppyo5mefsoho75qsnq8r4s1po22l7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1337</id>
      <parentid>1336</parentid>
      <timestamp>2009-09-30T17:27:15Z</timestamp>
      <contributor>
        <ip>75.118.7.231</ip>
      </contributor>
      <comment>/* Graphics */</comment>
      <text xml:space="preserve" bytes="5258">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 4096
|-
! ProQuake 4
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[FitzQuake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! ProQuake 4
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 3000 || 1000 || N/A || 32k
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 256k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]</text>
      <sha1>l9jasm24mdqo6cye6ixcu74fkhaynku</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1338</id>
      <parentid>1337</parentid>
      <timestamp>2009-09-30T17:28:16Z</timestamp>
      <contributor>
        <ip>75.118.7.231</ip>
      </contributor>
      <comment>/* Graphics */</comment>
      <text xml:space="preserve" bytes="5262">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 4096
|-
! ProQuake 4
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[FitzQuake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! ProQuake 4
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 256k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]</text>
      <sha1>2qm1ln6idj8ov87orcer2cokvbg08w6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1339</id>
      <parentid>1338</parentid>
      <timestamp>2009-09-30T17:29:12Z</timestamp>
      <contributor>
        <ip>75.118.7.231</ip>
      </contributor>
      <comment>/* Misc. */</comment>
      <text xml:space="preserve" bytes="5357">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 4096
|-
! ProQuake 4
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[FitzQuake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! ProQuake 4
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 256k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! ProQuake 4
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]</text>
      <sha1>ih2x0isw9utvc2lh1lvlewglna3ksru</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1340</id>
      <parentid>1339</parentid>
      <timestamp>2009-09-30T17:29:57Z</timestamp>
      <contributor>
        <ip>75.118.7.231</ip>
      </contributor>
      <comment>/* Misc. */</comment>
      <text xml:space="preserve" bytes="5359">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 4096
|-
! ProQuake 4
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[FitzQuake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! ProQuake 4
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 256k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! ProQuake 4
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]</text>
      <sha1>3325hjl2a8h5tpml1xy4fvlwuu2of09</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1341</id>
      <parentid>1340</parentid>
      <timestamp>2009-09-30T17:32:01Z</timestamp>
      <contributor>
        <ip>75.118.7.231</ip>
      </contributor>
      <comment>/* MDL */</comment>
      <text xml:space="preserve" bytes="5417">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 4096
|-
! ProQuake 4
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[FitzQuake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! ProQuake 4
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! ProQuake 4
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 256k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! ProQuake 4
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]</text>
      <sha1>4ek3y2v3jqfvc5r9m7omnfc6hj8o6ss</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1411</id>
      <parentid>1341</parentid>
      <timestamp>2009-10-10T14:59:59Z</timestamp>
      <contributor>
        <username>Lxndr</username>
        <id>19</id>
      </contributor>
      <comment>real runtime limits :-0</comment>
      <text xml:space="preserve" bytes="5475">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 4096
|-
! ProQuake 4
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[FitzQuake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! ProQuake 4
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! ProQuake 4
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 256k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! ProQuake 4
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>4pl3gmt8xott7bvldhhdjuu6ahnjo9j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1415</id>
      <parentid>1411</parentid>
      <timestamp>2009-10-10T22:51:09Z</timestamp>
      <contributor>
        <ip>82.254.166.210</ip>
      </contributor>
      <text xml:space="preserve" bytes="5443">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 4096
|-
! ProQuake 4
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[FitzQuake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! ProQuake 4
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! ProQuake 4
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 256k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! ProQuake 4
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>pbfkt1p49vywphhp7lq794z8xdbbm5f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1420</id>
      <parentid>1415</parentid>
      <timestamp>2009-10-17T10:26:57Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Reverted edits by [[Special:Contributions/82.254.166.210|82.254.166.210]] ([[User talk:82.254.166.210|Talk]]); changed back to last version by [[User:Lxndr|Lxndr]]</comment>
      <text xml:space="preserve" bytes="5475">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 4096
|-
! ProQuake 4
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[FitzQuake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! ProQuake 4
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! ProQuake 4
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 256k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! ProQuake 4
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>4pl3gmt8xott7bvldhhdjuu6ahnjo9j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1423</id>
      <parentid>1420</parentid>
      <timestamp>2009-10-21T19:58:38Z</timestamp>
      <contributor>
        <username>Mh</username>
        <id>20</id>
      </contributor>
      <comment>/* BSP */</comment>
      <text xml:space="preserve" bytes="5487">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 3.402823466e+38f
|-
! ProQuake 4
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[FitzQuake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! ProQuake 4
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! ProQuake 4
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 256k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! ProQuake 4
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 655360 || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>4xrxipaz9og3xoc35t1e2d7icb97mtj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1424</id>
      <parentid>1423</parentid>
      <timestamp>2009-10-21T20:00:09Z</timestamp>
      <contributor>
        <username>Mh</username>
        <id>20</id>
      </contributor>
      <comment>/* Misc. */</comment>
      <text xml:space="preserve" bytes="5486">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 3.402823466e+38f
|-
! ProQuake 4
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[FitzQuake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! ProQuake 4
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! ProQuake 4
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! ProQuake 4
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>qv0vuutfoj27enebogy5e85l7tlyvy0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1457</id>
      <parentid>1424</parentid>
      <timestamp>2009-11-17T08:40:22Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="5486">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 3.402823466e+38f
|-
! ProQuake 4
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[Fitzquake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! ProQuake 4
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! ProQuake 4
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || =256x128 || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! ProQuake 4
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>4j277tuf3wui2qabncxe6vgle25nxqj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1463</id>
      <parentid>1457</parentid>
      <timestamp>2009-11-30T22:08:59Z</timestamp>
      <contributor>
        <ip>109.79.197.233</ip>
      </contributor>
      <comment>/* Graphics */</comment>
      <text xml:space="preserve" bytes="5491">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 3.402823466e+38f
|-
! ProQuake 4
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[Fitzquake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! ProQuake 4
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! ProQuake 4
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || 4x2 or higher || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 16k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! ProQuake 4
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>dil3b8prr2p94chc6rbdk91usjs2910</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1464</id>
      <parentid>1463</parentid>
      <timestamp>2009-11-30T22:09:35Z</timestamp>
      <contributor>
        <ip>109.79.197.233</ip>
      </contributor>
      <comment>/* Misc. */</comment>
      <text xml:space="preserve" bytes="5492">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 3.402823466e+38f
|-
! ProQuake 4
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[Fitzquake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! ProQuake 4
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! ProQuake 4
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Infinite || Unlimited || 512 || Unlimited || 4x2 or higher || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! ProQuake 4
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>icw3h3zdn44ns8ftvm17lh1miys3y2s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1465</id>
      <parentid>1464</parentid>
      <timestamp>2009-11-30T22:11:44Z</timestamp>
      <contributor>
        <ip>109.79.197.233</ip>
      </contributor>
      <comment>/* Graphics */</comment>
      <text xml:space="preserve" bytes="5491">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 3.402823466e+38f
|-
! ProQuake 4
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[Fitzquake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! ProQuake 4
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! ProQuake 4
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Dynamic || Unlimited || 512 || Unlimited || 4x2 or higher || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! ProQuake 4
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>lnj066kz13japyohbm5ktojf4eivcw9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1501</id>
      <parentid>1465</parentid>
      <timestamp>2010-01-07T19:58:46Z</timestamp>
      <contributor>
        <ip>99.54.146.62</ip>
      </contributor>
      <text xml:space="preserve" bytes="5507">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[Fitzquake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unlimited || Unlimited || Unlimited || Unlimited || Unlimited
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Dynamic || Unlimited || 512 || Unlimited || 4x2 or higher || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>j93jxiga6lcbwsm9jshealc0jrn53t5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1548</id>
      <parentid>1501</parentid>
      <timestamp>2010-01-12T14:06:49Z</timestamp>
      <contributor>
        <ip>137.191.242.106</ip>
      </contributor>
      <comment>/* MDL */</comment>
      <text xml:space="preserve" bytes="5493">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[Fitzquake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused || Unlimited || 21845 || 65534
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 512 || 640x480 + || Dynamic || Unlimited || 512 || Unlimited || 4x2 or higher || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>8253wc0itwdcyh9go9mq4vr52y04ugc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1549</id>
      <parentid>1548</parentid>
      <timestamp>2010-01-12T14:08:56Z</timestamp>
      <contributor>
        <ip>137.191.242.106</ip>
      </contributor>
      <comment>/* Graphics */</comment>
      <text xml:space="preserve" bytes="5498">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[Fitzquake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused || Unlimited || 21845 || 65534
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 29127 || 640x480 + || Infinite || Unlimited || 21845 || Unlimited || 4x2 or higher || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>0tn5uqz11kwj54p0x6gl5oocmuovdgb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1552</id>
      <parentid>1549</parentid>
      <timestamp>2010-01-14T20:07:56Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <text xml:space="preserve" bytes="7038">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== QSB ===
Started adding [[QSB|Quake Standards Base]] limits to this article, comments and arguments are welcome in this I3D thread. The thread also contains my comments on each section. The standard isn't finished until the [[QSB|Quake Standards Base page]] says so, and is subject to change.

Green background means the engine passed the limit set up by the standard, thus making it compatible with that requirement. Feel free to alter the green backgrounds in case I've misinterpreted something!

=== TODO ===
*Nicer table look

 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
| 65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 512 || 2000 || 65536 F || 32768 || ? || 1073741824
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 1024 ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F || 256 || &gt;512/256 || &gt;32768 ||bgcolor=&quot;green&quot;| 32768 || 2048M* || 4096
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| Unlimited || (max texture size * 16) - 16 ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 ||bgcolor=&quot;green&quot;| 65536 || 64 ||bgcolor=&quot;green&quot;| 65536|| 32768 || 32768 || 128 || 512/256 ||bgcolor=&quot;green&quot;| 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 ||bgcolor=&quot;green&quot;| 65536 || 256 ||bgcolor=&quot;green&quot;| 65536 || 32768 || 32768 ||bgcolor=&quot;green&quot;| 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F || 256 ||bgcolor=&quot;green&quot;| 4080 ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| 32768 || Unlimited ||bgcolor=&quot;green&quot;| 1073741824
|-
! [[Fitzquake]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 || 256 ||bgcolor=&quot;green&quot;| 65535 || 65535-numfaces || ? ||bgcolor=&quot;green&quot;| 512 ||bgcolor=&quot;green&quot;| 2000 || ? ||bgcolor=&quot;green&quot;| 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|16384 || 256 || 1024 || 65536 || 65536
|-
! aguirRe's
|bgcolor=&quot;green&quot;|16384 ||bgcolor=&quot;green&quot;| 256 ||bgcolor=&quot;green&quot;| 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused ||bgcolor=&quot;green&quot;| Unlimited || 21845 ||bgcolor=&quot;green&quot;| 65534
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 29127 || 640x480 + || Infinite || Unlimited || 21845 || Unlimited || 4x2 or higher || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>01rq2jxszatbcht94mzowcm96rn9tdd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1553</id>
      <parentid>1552</parentid>
      <timestamp>2010-01-14T20:36:32Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <text xml:space="preserve" bytes="7205">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== QSB ===
Started adding [[QSB|Quake Standards Base]] limits to this article, comments and arguments are welcome in this I3D thread. The thread also contains my comments on each section. The standard isn't finished until the [[QSB|Quake Standards Base page]] says so, and is subject to change.

Green background means the engine passed the limit set up by the standard, thus making it compatible with that requirement. Feel free to alter the green backgrounds in case I've misinterpreted something!

=== TODO ===
*Nicer table look

 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
| 65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 512 || 2000 || 65536 F || 32768 || ? || 1073741824
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 1024 ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F || 256 || &gt;512/256 || &gt;32768 ||bgcolor=&quot;green&quot;| 32768 || 2048M* || 4096
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| Unlimited || (max texture size * 16) - 16 ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 ||bgcolor=&quot;green&quot;| 65536 || 64 ||bgcolor=&quot;green&quot;| 65536|| 32768 || 32768 || 128 || 512/256 ||bgcolor=&quot;green&quot;| 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 ||bgcolor=&quot;green&quot;| 65536 || 256 ||bgcolor=&quot;green&quot;| 65536 || 32768 || 32768 ||bgcolor=&quot;green&quot;| 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F || 256 ||bgcolor=&quot;green&quot;| 4080 ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| 32768 || Unlimited ||bgcolor=&quot;green&quot;| 1073741824
|-
! [[Fitzquake]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 || 256 ||bgcolor=&quot;green&quot;| 65535 || 65535-numfaces || ? ||bgcolor=&quot;green&quot;| 512 ||bgcolor=&quot;green&quot;| 2000 || ? ||bgcolor=&quot;green&quot;| 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|16384 || 256 || 1024 || 65536 || 65536
|-
! aguirRe's
|bgcolor=&quot;green&quot;|16384 ||bgcolor=&quot;green&quot;| 256 ||bgcolor=&quot;green&quot;| 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused ||bgcolor=&quot;green&quot;| Unlimited || 21845 ||bgcolor=&quot;green&quot;| 65534
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|516 || 128
|-
! aguirRe's
|bgcolor=&quot;green&quot;|516 ||bgcolor=&quot;green&quot;| 128
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;|516 ||bgcolor=&quot;green&quot;| 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;|1028 ||bgcolor=&quot;green&quot;| 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 29127 || 640x480 + || Infinite || Unlimited || 21845 || Unlimited || 4x2 or higher || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>028wbsvg8c7bi3ymjb3tdo4xvkt3bgy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1554</id>
      <parentid>1553</parentid>
      <timestamp>2010-01-14T20:39:09Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <text xml:space="preserve" bytes="7255">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== QSB ===
Started adding [[QSB|Quake Standards Base]] limits to this article, comments and arguments are [http://forums.inside3d.com/viewtopic.php?t=1953 welcome in this I3D thread]. The thread also contains my comments on each section. The standard isn't finished until the [[QSB|Quake Standards Base page]] says so, and is subject to change.

Green background means the engine passed the limit set up by the standard, thus making it compatible with that requirement. Feel free to alter the green backgrounds in case I've misinterpreted something!

=== TODO ===
*Nicer table look

 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
| 65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 512 || 2000 || 65536 F || 32768 || ? || 1073741824
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 1024 ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F || 256 || &gt;512/256 || &gt;32768 ||bgcolor=&quot;green&quot;| 32768 || 2048M* || 4096
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| Unlimited || (max texture size * 16) - 16 ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 ||bgcolor=&quot;green&quot;| 65536 || 64 ||bgcolor=&quot;green&quot;| 65536|| 32768 || 32768 || 128 || 512/256 ||bgcolor=&quot;green&quot;| 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 ||bgcolor=&quot;green&quot;| 65536 || 256 ||bgcolor=&quot;green&quot;| 65536 || 32768 || 32768 ||bgcolor=&quot;green&quot;| 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F || 256 ||bgcolor=&quot;green&quot;| 4080 ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| 32768 || Unlimited ||bgcolor=&quot;green&quot;| 1073741824
|-
! [[Fitzquake]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 || 256 ||bgcolor=&quot;green&quot;| 65535 || 65535-numfaces || ? ||bgcolor=&quot;green&quot;| 512 ||bgcolor=&quot;green&quot;| 2000 || ? ||bgcolor=&quot;green&quot;| 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|16384 || 256 || 1024 || 65536 || 65536
|-
! aguirRe's
|bgcolor=&quot;green&quot;|16384 ||bgcolor=&quot;green&quot;| 256 ||bgcolor=&quot;green&quot;| 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused ||bgcolor=&quot;green&quot;| Unlimited || 21845 ||bgcolor=&quot;green&quot;| 65534
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|516 || 128
|-
! aguirRe's
|bgcolor=&quot;green&quot;|516 ||bgcolor=&quot;green&quot;| 128
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;|516 ||bgcolor=&quot;green&quot;| 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;|1028 ||bgcolor=&quot;green&quot;| 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 29127 || 640x480 + || Infinite || Unlimited || 21845 || Unlimited || 4x2 or higher || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>7dq2zbx6gfbh4oqpw9ovcrgdlmeyznw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1555</id>
      <parentid>1554</parentid>
      <timestamp>2010-01-14T21:02:02Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <text xml:space="preserve" bytes="7538">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== QSB ===
Started adding [[QSB|Quake Standards Base]] limits to this article, comments and arguments are [http://forums.inside3d.com/viewtopic.php?t=1953 welcome in this I3D thread]. The thread also contains my comments on each section. The standard isn't finished until the [[QSB|Quake Standards Base page]] says so, and is subject to change.

Green background means the engine passed the limit set up by the standard, thus making it compatible with that requirement. Feel free to alter the green backgrounds in case I've misinterpreted something!

=== TODO ===
*Nicer table look

 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
| 65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 512 || 2000 || 65536 F || 32768 || ? || 1073741824
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 1024 ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F || 256 || &gt;512/256 || &gt;32768 ||bgcolor=&quot;green&quot;| 32768 || 2048M* || 4096
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| Unlimited || (max texture size * 16) - 16 ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 ||bgcolor=&quot;green&quot;| 65536 || 64 ||bgcolor=&quot;green&quot;| 65536|| 32768 || 32768 || 128 || 512/256 ||bgcolor=&quot;green&quot;| 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 ||bgcolor=&quot;green&quot;| 65536 || 256 ||bgcolor=&quot;green&quot;| 65536 || 32768 || 32768 ||bgcolor=&quot;green&quot;| 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F || 256 ||bgcolor=&quot;green&quot;| 4080 ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| 32768 || Unlimited ||bgcolor=&quot;green&quot;| 1073741824
|-
! [[Fitzquake]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 || 256 ||bgcolor=&quot;green&quot;| 65535 || 65535-numfaces || ? ||bgcolor=&quot;green&quot;| 512 ||bgcolor=&quot;green&quot;| 2000 || ? ||bgcolor=&quot;green&quot;| 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|16384 || 256 || 1024 || 65536 || 65536
|-
! aguirRe's
|bgcolor=&quot;green&quot;|16384 ||bgcolor=&quot;green&quot;| 256 ||bgcolor=&quot;green&quot;| 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused ||bgcolor=&quot;green&quot;| Unlimited || 21845 ||bgcolor=&quot;green&quot;| 65534
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|516 || 128
|-
! aguirRe's
|bgcolor=&quot;green&quot;|516 ||bgcolor=&quot;green&quot;| 128
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;|516 ||bgcolor=&quot;green&quot;| 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;|1028 ||bgcolor=&quot;green&quot;| 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|64 || ? || 64k || 5M ops || ? || 2048 || 8192
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 64 || ~64k ||bgcolor=&quot;green&quot;| 64k ||bgcolor=&quot;green&quot;| 5M ops || ~64k || 256 ||bgcolor=&quot;green&quot;| 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) ||bgcolor=&quot;green&quot;| 5M ops || ~64k ||bgcolor=&quot;green&quot;| 2048 ||bgcolor=&quot;green&quot;| 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 255 || 64k / 1400 ||bgcolor=&quot;green&quot;| 64k || 10M jumps || 64k ||bgcolor=&quot;green&quot;| 16k ||bgcolor=&quot;green&quot;| 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 29127 || 640x480 + || Infinite || Unlimited || 21845 || Unlimited || 4x2 or higher || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>qwifhygkb6vtwr78f1egtvwfsldnfyu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1556</id>
      <parentid>1555</parentid>
      <timestamp>2010-01-14T21:13:37Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <text xml:space="preserve" bytes="8035">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== QSB ===
Started adding [[QSB|Quake Standards Base]] limits to this article, comments and arguments are [http://forums.inside3d.com/viewtopic.php?t=1953 welcome in this I3D thread]. The thread also contains my comments on each section. The standard isn't finished until the [[QSB|Quake Standards Base page]] says so, and is subject to change.

Green background means the engine passed the limit set up by the standard, thus making it compatible with that requirement. Feel free to alter the green backgrounds in case I've misinterpreted something!

=== TODO ===
*Nicer table look

 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
| 65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 512 || 2000 || 65536 F || 32768 || ? || 1073741824
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 1024 ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F || 256 || &gt;512/256 || &gt;32768 ||bgcolor=&quot;green&quot;| 32768 || 2048M* || 4096
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| Unlimited || (max texture size * 16) - 16 ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 ||bgcolor=&quot;green&quot;| 65536 || 64 ||bgcolor=&quot;green&quot;| 65536|| 32768 || 32768 || 128 || 512/256 ||bgcolor=&quot;green&quot;| 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 ||bgcolor=&quot;green&quot;| 65536 || 256 ||bgcolor=&quot;green&quot;| 65536 || 32768 || 32768 ||bgcolor=&quot;green&quot;| 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F || 256 ||bgcolor=&quot;green&quot;| 4080 ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| 32768 || Unlimited ||bgcolor=&quot;green&quot;| 1073741824
|-
! [[Fitzquake]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 || 256 ||bgcolor=&quot;green&quot;| 65535 || 65535-numfaces || ? ||bgcolor=&quot;green&quot;| 512 ||bgcolor=&quot;green&quot;| 2000 || ? ||bgcolor=&quot;green&quot;| 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|16384 || 256 || 1024 || 65536 || 65536
|-
! aguirRe's
|bgcolor=&quot;green&quot;|16384 ||bgcolor=&quot;green&quot;| 256 ||bgcolor=&quot;green&quot;| 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused ||bgcolor=&quot;green&quot;| Unlimited || 21845 ||bgcolor=&quot;green&quot;| 65534
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|516 || 128
|-
! aguirRe's
|bgcolor=&quot;green&quot;|516 ||bgcolor=&quot;green&quot;| 128
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;|516 ||bgcolor=&quot;green&quot;| 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;|1028 ||bgcolor=&quot;green&quot;| 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|64 || ? || 64k || 5M ops || ? || 2048 || 8192
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 64 || ~64k ||bgcolor=&quot;green&quot;| 64k ||bgcolor=&quot;green&quot;| 5M ops || ~64k || 256 ||bgcolor=&quot;green&quot;| 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) ||bgcolor=&quot;green&quot;| 5M ops || ~64k ||bgcolor=&quot;green&quot;| 2048 ||bgcolor=&quot;green&quot;| 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 255 || 64k / 1400 ||bgcolor=&quot;green&quot;| 64k || 10M jumps || 64k ||bgcolor=&quot;green&quot;| 16k ||bgcolor=&quot;green&quot;| 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
| 256 || - || Infinite || Unlimited || 65536 || 1024M || 4x2 or higher || - || 4096 || ? || ? || 32k
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 256 || 1024M* || 16384 || 2048* || 512 ||bgcolor=&quot;green&quot;| 1024M* ||bgcolor=&quot;green&quot;| any* || 600 ||bgcolor=&quot;green&quot;| 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;| 29127 || 640x480 + ||bgcolor=&quot;green&quot;| Infinite ||bgcolor=&quot;green&quot;| Unlimited || 21845 ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 4x2 or higher || Unlimited ||bgcolor=&quot;green&quot;| 32768 || N/A || N/A ||bgcolor=&quot;green&quot;| Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 ||bgcolor=&quot;green&quot;| 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution ||bgcolor=&quot;green&quot;| Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A ||bgcolor=&quot;green&quot;| 32k
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 256 || Unlimited ||bgcolor=&quot;green&quot;| Infinite ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| Unlimited || =256x128 || Unlimited ||bgcolor=&quot;green&quot;| Unlimited || N/A || N/A ||bgcolor=&quot;green&quot;| Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>6n10b98ogamv3rx58cexcd5h77bn9w0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1557</id>
      <parentid>1556</parentid>
      <timestamp>2010-01-14T21:21:54Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <text xml:space="preserve" bytes="8546">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== QSB ===
Started adding [[QSB|Quake Standards Base]] limits to this article, comments and arguments are [http://forums.inside3d.com/viewtopic.php?t=1953 welcome in this I3D thread]. The thread also contains my comments on each section. The standard isn't finished until the [[QSB|Quake Standards Base page]] says so, and is subject to change.

Green background means the engine passed the limit set up by the standard, thus making it compatible with that requirement. Feel free to alter the green backgrounds in case I've misinterpreted something!

=== TODO ===
*Nicer table look

 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
| 65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 512 || 2000 || 65536 F || 32768 || ? || 1073741824
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 1024 ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F || 256 || &gt;512/256 || &gt;32768 ||bgcolor=&quot;green&quot;| 32768 || 2048M* || 4096
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| Unlimited || (max texture size * 16) - 16 ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 ||bgcolor=&quot;green&quot;| 65536 || 64 ||bgcolor=&quot;green&quot;| 65536|| 32768 || 32768 || 128 || 512/256 ||bgcolor=&quot;green&quot;| 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 ||bgcolor=&quot;green&quot;| 65536 || 256 ||bgcolor=&quot;green&quot;| 65536 || 32768 || 32768 ||bgcolor=&quot;green&quot;| 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F || 256 ||bgcolor=&quot;green&quot;| 4080 ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| 32768 || Unlimited ||bgcolor=&quot;green&quot;| 1073741824
|-
! [[Fitzquake]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 || 256 ||bgcolor=&quot;green&quot;| 65535 || 65535-numfaces || ? ||bgcolor=&quot;green&quot;| 512 ||bgcolor=&quot;green&quot;| 2000 || ? ||bgcolor=&quot;green&quot;| 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|16384 || 256 || 1024 || 65536 || 65536
|-
! aguirRe's
|bgcolor=&quot;green&quot;|16384 ||bgcolor=&quot;green&quot;| 256 ||bgcolor=&quot;green&quot;| 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused ||bgcolor=&quot;green&quot;| Unlimited || 21845 ||bgcolor=&quot;green&quot;| 65534
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|516 || 128
|-
! aguirRe's
|bgcolor=&quot;green&quot;|516 ||bgcolor=&quot;green&quot;| 128
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;|516 ||bgcolor=&quot;green&quot;| 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;|1028 ||bgcolor=&quot;green&quot;| 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|64 || ? || 64k || 5M ops || ? || 2048 || 8192
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 64 || ~64k ||bgcolor=&quot;green&quot;| 64k ||bgcolor=&quot;green&quot;| 5M ops || ~64k || 256 ||bgcolor=&quot;green&quot;| 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) ||bgcolor=&quot;green&quot;| 5M ops || ~64k ||bgcolor=&quot;green&quot;| 2048 ||bgcolor=&quot;green&quot;| 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 255 || 64k / 1400 ||bgcolor=&quot;green&quot;| 64k || 10M jumps || 64k ||bgcolor=&quot;green&quot;| 16k ||bgcolor=&quot;green&quot;| 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
| 256 || - || Infinite || Unlimited || 65536 || 1024M || 4x2 or higher || - || 4096 || ? || ? || 32k
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 256 || 1024M* || 16384 || 2048* || 512 ||bgcolor=&quot;green&quot;| 1024M* ||bgcolor=&quot;green&quot;| any* || 600 ||bgcolor=&quot;green&quot;| 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;| 29127 || 640x480 + ||bgcolor=&quot;green&quot;| Infinite ||bgcolor=&quot;green&quot;| Unlimited || 21845 ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 4x2 or higher || Unlimited ||bgcolor=&quot;green&quot;| 32768 || N/A || N/A ||bgcolor=&quot;green&quot;| Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 ||bgcolor=&quot;green&quot;| 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution ||bgcolor=&quot;green&quot;| Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A ||bgcolor=&quot;green&quot;| 32k
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 256 || Unlimited ||bgcolor=&quot;green&quot;| Infinite ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| Unlimited || =256x128 || Unlimited ||bgcolor=&quot;green&quot;| Unlimited || N/A || N/A ||bgcolor=&quot;green&quot;| Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
| 64k || 256k || 32768 || 2048 || 100 || 4096 || 4096 || 4096 || 2560 || ? || 1 MB
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 64k ||bgcolor=&quot;green&quot;| 256k || 4096 ||bgcolor=&quot;green&quot;| 2048 ||bgcolor=&quot;green&quot;| 100 || 1024 || 2048 || 1024* ||bgcolor=&quot;green&quot;| 2560 || 1024M* || 320k
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;| 1024k ||bgcolor=&quot;green&quot;| 256k || 8192 || N/A (unused) || N/A (unused) ||bgcolor=&quot;green&quot;| 4096 ||bgcolor=&quot;green&quot;| 4096 ||bgcolor=&quot;green&quot;| 4096 || 512 || Unlimited ||bgcolor=&quot;green&quot;| 32 MB
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize ||bgcolor=&quot;green&quot;| 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 ||bgcolor=&quot;green&quot;| 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 640k ||bgcolor=&quot;green&quot;| 1048576 ||bgcolor=&quot;green&quot;| 32768 ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 8192 ||bgcolor=&quot;green&quot;| 8192 ||bgcolor=&quot;green&quot;| 4096 ||bgcolor=&quot;green&quot;| Unlimited || Unlimited ||bgcolor=&quot;green&quot;| Unlimited
|}

==See Also==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>cvugb4qzeb40twz18axxr8yel14nv32</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1558</id>
      <parentid>1557</parentid>
      <timestamp>2010-01-14T21:30:19Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <comment>/* Misc. */</comment>
      <text xml:space="preserve" bytes="8512">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== QSB ===
Started adding [[QSB|Quake Standards Base]] limits to this article, comments and arguments are [http://forums.inside3d.com/viewtopic.php?t=1953 welcome in this I3D thread]. The thread also contains my comments on each section. The standard isn't finished until the [[QSB|Quake Standards Base page]] says so, and is subject to change.

Green background means the engine passed the limit set up by the standard, thus making it compatible with that requirement. Feel free to alter the green backgrounds in case I've misinterpreted something!

=== TODO ===
*Nicer table look

 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
| 65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 512 || 2000 || 65536 F || 32768 || ? || 1073741824
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 1024 ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F || 256 || &gt;512/256 || &gt;32768 ||bgcolor=&quot;green&quot;| 32768 || 2048M* || 4096
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| Unlimited || (max texture size * 16) - 16 ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 ||bgcolor=&quot;green&quot;| 65536 || 64 ||bgcolor=&quot;green&quot;| 65536|| 32768 || 32768 || 128 || 512/256 ||bgcolor=&quot;green&quot;| 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 ||bgcolor=&quot;green&quot;| 65536 || 256 ||bgcolor=&quot;green&quot;| 65536 || 32768 || 32768 ||bgcolor=&quot;green&quot;| 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F || 256 ||bgcolor=&quot;green&quot;| 4080 ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| 32768 || Unlimited ||bgcolor=&quot;green&quot;| 1073741824
|-
! [[Fitzquake]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 || 256 ||bgcolor=&quot;green&quot;| 65535 || 65535-numfaces || ? ||bgcolor=&quot;green&quot;| 512 ||bgcolor=&quot;green&quot;| 2000 || ? ||bgcolor=&quot;green&quot;| 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|16384 || 256 || 1024 || 65536 || 65536
|-
! aguirRe's
|bgcolor=&quot;green&quot;|16384 ||bgcolor=&quot;green&quot;| 256 ||bgcolor=&quot;green&quot;| 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused ||bgcolor=&quot;green&quot;| Unlimited || 21845 ||bgcolor=&quot;green&quot;| 65534
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|516 || 128
|-
! aguirRe's
|bgcolor=&quot;green&quot;|516 ||bgcolor=&quot;green&quot;| 128
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;|516 ||bgcolor=&quot;green&quot;| 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;|1028 ||bgcolor=&quot;green&quot;| 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|64 || ? || 64k || 5M ops || ? || 2048 || 8192
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 64 || ~64k ||bgcolor=&quot;green&quot;| 64k ||bgcolor=&quot;green&quot;| 5M ops || ~64k || 256 ||bgcolor=&quot;green&quot;| 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) ||bgcolor=&quot;green&quot;| 5M ops || ~64k ||bgcolor=&quot;green&quot;| 2048 ||bgcolor=&quot;green&quot;| 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 255 || 64k / 1400 ||bgcolor=&quot;green&quot;| 64k || 10M jumps || 64k ||bgcolor=&quot;green&quot;| 16k ||bgcolor=&quot;green&quot;| 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
| 256 || - || Infinite || Unlimited || 65536 || 1024M || 4x2 or higher || - || 4096 || ? || ? || 32k
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 256 || 1024M* || 16384 || 2048* || 512 ||bgcolor=&quot;green&quot;| 1024M* ||bgcolor=&quot;green&quot;| any* || 600 ||bgcolor=&quot;green&quot;| 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;| 29127 || 640x480 + ||bgcolor=&quot;green&quot;| Infinite ||bgcolor=&quot;green&quot;| Unlimited || 21845 ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 4x2 or higher || Unlimited ||bgcolor=&quot;green&quot;| 32768 || N/A || N/A ||bgcolor=&quot;green&quot;| Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 ||bgcolor=&quot;green&quot;| 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution ||bgcolor=&quot;green&quot;| Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A ||bgcolor=&quot;green&quot;| 32k
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 256 || Unlimited ||bgcolor=&quot;green&quot;| Infinite ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| Unlimited || =256x128 || Unlimited ||bgcolor=&quot;green&quot;| Unlimited || N/A || N/A ||bgcolor=&quot;green&quot;| Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
| 64k || 256k || 32768 || 2048 || ? || 4096 || 4096 || 4096 || 2560 || ? || 1 MB
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 64k ||bgcolor=&quot;green&quot;| 256k || 4096 ||bgcolor=&quot;green&quot;| 2048 || 100 || 1024 || 2048 || 1024* ||bgcolor=&quot;green&quot;| 2560 || 1024M* || 320k
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;| 1024k ||bgcolor=&quot;green&quot;| 256k || 8192 || N/A (unused) || N/A (unused) ||bgcolor=&quot;green&quot;| 4096 ||bgcolor=&quot;green&quot;| 4096 ||bgcolor=&quot;green&quot;| 4096 || 512 || Unlimited ||bgcolor=&quot;green&quot;| 32 MB
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize ||bgcolor=&quot;green&quot;| 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 ||bgcolor=&quot;green&quot;| 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 640k ||bgcolor=&quot;green&quot;| 1048576 ||bgcolor=&quot;green&quot;| 32768 ||bgcolor=&quot;green&quot;| Unlimited || Unlimited ||bgcolor=&quot;green&quot;| 8192 ||bgcolor=&quot;green&quot;| 8192 ||bgcolor=&quot;green&quot;| 4096 ||bgcolor=&quot;green&quot;| Unlimited || Unlimited ||bgcolor=&quot;green&quot;| Unlimited
|}

==See Also==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>kp68ft002jnt5xpotjgsm6yhu77o2mm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1580</id>
      <parentid>1558</parentid>
      <timestamp>2010-02-06T20:18:26Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <comment>Undo revision 1558 by [[Special:Contributions/Urre|Urre]] ([[User talk:Urre|Talk]])</comment>
      <text xml:space="preserve" bytes="8546">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== QSB ===
Started adding [[QSB|Quake Standards Base]] limits to this article, comments and arguments are [http://forums.inside3d.com/viewtopic.php?t=1953 welcome in this I3D thread]. The thread also contains my comments on each section. The standard isn't finished until the [[QSB|Quake Standards Base page]] says so, and is subject to change.

Green background means the engine passed the limit set up by the standard, thus making it compatible with that requirement. Feel free to alter the green backgrounds in case I've misinterpreted something!

=== TODO ===
*Nicer table look

 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
| 65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 512 || 2000 || 65536 F || 32768 || ? || 1073741824
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 1024 ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F || 256 || &gt;512/256 || &gt;32768 ||bgcolor=&quot;green&quot;| 32768 || 2048M* || 4096
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| Unlimited || (max texture size * 16) - 16 ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 ||bgcolor=&quot;green&quot;| 65536 || 64 ||bgcolor=&quot;green&quot;| 65536|| 32768 || 32768 || 128 || 512/256 ||bgcolor=&quot;green&quot;| 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 ||bgcolor=&quot;green&quot;| 65536 || 256 ||bgcolor=&quot;green&quot;| 65536 || 32768 || 32768 ||bgcolor=&quot;green&quot;| 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F || 256 ||bgcolor=&quot;green&quot;| 4080 ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| 32768 || Unlimited ||bgcolor=&quot;green&quot;| 1073741824
|-
! [[Fitzquake]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 || 256 ||bgcolor=&quot;green&quot;| 65535 || 65535-numfaces || ? ||bgcolor=&quot;green&quot;| 512 ||bgcolor=&quot;green&quot;| 2000 || ? ||bgcolor=&quot;green&quot;| 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|16384 || 256 || 1024 || 65536 || 65536
|-
! aguirRe's
|bgcolor=&quot;green&quot;|16384 ||bgcolor=&quot;green&quot;| 256 ||bgcolor=&quot;green&quot;| 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused ||bgcolor=&quot;green&quot;| Unlimited || 21845 ||bgcolor=&quot;green&quot;| 65534
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|516 || 128
|-
! aguirRe's
|bgcolor=&quot;green&quot;|516 ||bgcolor=&quot;green&quot;| 128
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;|516 ||bgcolor=&quot;green&quot;| 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;|1028 ||bgcolor=&quot;green&quot;| 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|64 || ? || 64k || 5M ops || ? || 2048 || 8192
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 64 || ~64k ||bgcolor=&quot;green&quot;| 64k ||bgcolor=&quot;green&quot;| 5M ops || ~64k || 256 ||bgcolor=&quot;green&quot;| 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) ||bgcolor=&quot;green&quot;| 5M ops || ~64k ||bgcolor=&quot;green&quot;| 2048 ||bgcolor=&quot;green&quot;| 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 255 || 64k / 1400 ||bgcolor=&quot;green&quot;| 64k || 10M jumps || 64k ||bgcolor=&quot;green&quot;| 16k ||bgcolor=&quot;green&quot;| 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
| 256 || - || Infinite || Unlimited || 65536 || 1024M || 4x2 or higher || - || 4096 || ? || ? || 32k
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 256 || 1024M* || 16384 || 2048* || 512 ||bgcolor=&quot;green&quot;| 1024M* ||bgcolor=&quot;green&quot;| any* || 600 ||bgcolor=&quot;green&quot;| 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;| 29127 || 640x480 + ||bgcolor=&quot;green&quot;| Infinite ||bgcolor=&quot;green&quot;| Unlimited || 21845 ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 4x2 or higher || Unlimited ||bgcolor=&quot;green&quot;| 32768 || N/A || N/A ||bgcolor=&quot;green&quot;| Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 ||bgcolor=&quot;green&quot;| 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution ||bgcolor=&quot;green&quot;| Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A ||bgcolor=&quot;green&quot;| 32k
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 256 || Unlimited ||bgcolor=&quot;green&quot;| Infinite ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| Unlimited || =256x128 || Unlimited ||bgcolor=&quot;green&quot;| Unlimited || N/A || N/A ||bgcolor=&quot;green&quot;| Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
| 64k || 256k || 32768 || 2048 || 100 || 4096 || 4096 || 4096 || 2560 || ? || 1 MB
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 64k ||bgcolor=&quot;green&quot;| 256k || 4096 ||bgcolor=&quot;green&quot;| 2048 ||bgcolor=&quot;green&quot;| 100 || 1024 || 2048 || 1024* ||bgcolor=&quot;green&quot;| 2560 || 1024M* || 320k
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;| 1024k ||bgcolor=&quot;green&quot;| 256k || 8192 || N/A (unused) || N/A (unused) ||bgcolor=&quot;green&quot;| 4096 ||bgcolor=&quot;green&quot;| 4096 ||bgcolor=&quot;green&quot;| 4096 || 512 || Unlimited ||bgcolor=&quot;green&quot;| 32 MB
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize ||bgcolor=&quot;green&quot;| 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 ||bgcolor=&quot;green&quot;| 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 640k ||bgcolor=&quot;green&quot;| 1048576 ||bgcolor=&quot;green&quot;| 32768 ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 8192 ||bgcolor=&quot;green&quot;| 8192 ||bgcolor=&quot;green&quot;| 4096 ||bgcolor=&quot;green&quot;| Unlimited || Unlimited ||bgcolor=&quot;green&quot;| Unlimited
|}

==See Also==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>cvugb4qzeb40twz18axxr8yel14nv32</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1581</id>
      <parentid>1580</parentid>
      <timestamp>2010-02-06T20:18:40Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <comment>Undo revision 1557 by [[Special:Contributions/Urre|Urre]] ([[User talk:Urre|Talk]])</comment>
      <text xml:space="preserve" bytes="8035">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== QSB ===
Started adding [[QSB|Quake Standards Base]] limits to this article, comments and arguments are [http://forums.inside3d.com/viewtopic.php?t=1953 welcome in this I3D thread]. The thread also contains my comments on each section. The standard isn't finished until the [[QSB|Quake Standards Base page]] says so, and is subject to change.

Green background means the engine passed the limit set up by the standard, thus making it compatible with that requirement. Feel free to alter the green backgrounds in case I've misinterpreted something!

=== TODO ===
*Nicer table look

 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
| 65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 512 || 2000 || 65536 F || 32768 || ? || 1073741824
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 1024 ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F || 256 || &gt;512/256 || &gt;32768 ||bgcolor=&quot;green&quot;| 32768 || 2048M* || 4096
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| Unlimited || (max texture size * 16) - 16 ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 ||bgcolor=&quot;green&quot;| 65536 || 64 ||bgcolor=&quot;green&quot;| 65536|| 32768 || 32768 || 128 || 512/256 ||bgcolor=&quot;green&quot;| 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 ||bgcolor=&quot;green&quot;| 65536 || 256 ||bgcolor=&quot;green&quot;| 65536 || 32768 || 32768 ||bgcolor=&quot;green&quot;| 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F || 256 ||bgcolor=&quot;green&quot;| 4080 ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| 32768 || Unlimited ||bgcolor=&quot;green&quot;| 1073741824
|-
! [[Fitzquake]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 || 256 ||bgcolor=&quot;green&quot;| 65535 || 65535-numfaces || ? ||bgcolor=&quot;green&quot;| 512 ||bgcolor=&quot;green&quot;| 2000 || ? ||bgcolor=&quot;green&quot;| 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|16384 || 256 || 1024 || 65536 || 65536
|-
! aguirRe's
|bgcolor=&quot;green&quot;|16384 ||bgcolor=&quot;green&quot;| 256 ||bgcolor=&quot;green&quot;| 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused ||bgcolor=&quot;green&quot;| Unlimited || 21845 ||bgcolor=&quot;green&quot;| 65534
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|516 || 128
|-
! aguirRe's
|bgcolor=&quot;green&quot;|516 ||bgcolor=&quot;green&quot;| 128
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;|516 ||bgcolor=&quot;green&quot;| 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;|1028 ||bgcolor=&quot;green&quot;| 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|64 || ? || 64k || 5M ops || ? || 2048 || 8192
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 64 || ~64k ||bgcolor=&quot;green&quot;| 64k ||bgcolor=&quot;green&quot;| 5M ops || ~64k || 256 ||bgcolor=&quot;green&quot;| 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) ||bgcolor=&quot;green&quot;| 5M ops || ~64k ||bgcolor=&quot;green&quot;| 2048 ||bgcolor=&quot;green&quot;| 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 255 || 64k / 1400 ||bgcolor=&quot;green&quot;| 64k || 10M jumps || 64k ||bgcolor=&quot;green&quot;| 16k ||bgcolor=&quot;green&quot;| 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
| 256 || - || Infinite || Unlimited || 65536 || 1024M || 4x2 or higher || - || 4096 || ? || ? || 32k
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 256 || 1024M* || 16384 || 2048* || 512 ||bgcolor=&quot;green&quot;| 1024M* ||bgcolor=&quot;green&quot;| any* || 600 ||bgcolor=&quot;green&quot;| 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;| 29127 || 640x480 + ||bgcolor=&quot;green&quot;| Infinite ||bgcolor=&quot;green&quot;| Unlimited || 21845 ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 4x2 or higher || Unlimited ||bgcolor=&quot;green&quot;| 32768 || N/A || N/A ||bgcolor=&quot;green&quot;| Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 ||bgcolor=&quot;green&quot;| 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution ||bgcolor=&quot;green&quot;| Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A ||bgcolor=&quot;green&quot;| 32k
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 256 || Unlimited ||bgcolor=&quot;green&quot;| Infinite ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| Unlimited || =256x128 || Unlimited ||bgcolor=&quot;green&quot;| Unlimited || N/A || N/A ||bgcolor=&quot;green&quot;| Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>6n10b98ogamv3rx58cexcd5h77bn9w0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1582</id>
      <parentid>1581</parentid>
      <timestamp>2010-02-06T20:18:50Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <comment>Undo revision 1556 by [[Special:Contributions/Urre|Urre]] ([[User talk:Urre|Talk]])</comment>
      <text xml:space="preserve" bytes="7538">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== QSB ===
Started adding [[QSB|Quake Standards Base]] limits to this article, comments and arguments are [http://forums.inside3d.com/viewtopic.php?t=1953 welcome in this I3D thread]. The thread also contains my comments on each section. The standard isn't finished until the [[QSB|Quake Standards Base page]] says so, and is subject to change.

Green background means the engine passed the limit set up by the standard, thus making it compatible with that requirement. Feel free to alter the green backgrounds in case I've misinterpreted something!

=== TODO ===
*Nicer table look

 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
| 65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 512 || 2000 || 65536 F || 32768 || ? || 1073741824
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 1024 ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F || 256 || &gt;512/256 || &gt;32768 ||bgcolor=&quot;green&quot;| 32768 || 2048M* || 4096
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| Unlimited || (max texture size * 16) - 16 ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 ||bgcolor=&quot;green&quot;| 65536 || 64 ||bgcolor=&quot;green&quot;| 65536|| 32768 || 32768 || 128 || 512/256 ||bgcolor=&quot;green&quot;| 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 ||bgcolor=&quot;green&quot;| 65536 || 256 ||bgcolor=&quot;green&quot;| 65536 || 32768 || 32768 ||bgcolor=&quot;green&quot;| 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F || 256 ||bgcolor=&quot;green&quot;| 4080 ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| 32768 || Unlimited ||bgcolor=&quot;green&quot;| 1073741824
|-
! [[Fitzquake]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 || 256 ||bgcolor=&quot;green&quot;| 65535 || 65535-numfaces || ? ||bgcolor=&quot;green&quot;| 512 ||bgcolor=&quot;green&quot;| 2000 || ? ||bgcolor=&quot;green&quot;| 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|16384 || 256 || 1024 || 65536 || 65536
|-
! aguirRe's
|bgcolor=&quot;green&quot;|16384 ||bgcolor=&quot;green&quot;| 256 ||bgcolor=&quot;green&quot;| 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused ||bgcolor=&quot;green&quot;| Unlimited || 21845 ||bgcolor=&quot;green&quot;| 65534
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|516 || 128
|-
! aguirRe's
|bgcolor=&quot;green&quot;|516 ||bgcolor=&quot;green&quot;| 128
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;|516 ||bgcolor=&quot;green&quot;| 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;|1028 ||bgcolor=&quot;green&quot;| 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|64 || ? || 64k || 5M ops || ? || 2048 || 8192
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 64 || ~64k ||bgcolor=&quot;green&quot;| 64k ||bgcolor=&quot;green&quot;| 5M ops || ~64k || 256 ||bgcolor=&quot;green&quot;| 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) ||bgcolor=&quot;green&quot;| 5M ops || ~64k ||bgcolor=&quot;green&quot;| 2048 ||bgcolor=&quot;green&quot;| 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 255 || 64k / 1400 ||bgcolor=&quot;green&quot;| 64k || 10M jumps || 64k ||bgcolor=&quot;green&quot;| 16k ||bgcolor=&quot;green&quot;| 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 29127 || 640x480 + || Infinite || Unlimited || 21845 || Unlimited || 4x2 or higher || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>qwifhygkb6vtwr78f1egtvwfsldnfyu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1583</id>
      <parentid>1582</parentid>
      <timestamp>2010-02-06T20:19:00Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <comment>Undo revision 1555 by [[Special:Contributions/Urre|Urre]] ([[User talk:Urre|Talk]])</comment>
      <text xml:space="preserve" bytes="7255">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== QSB ===
Started adding [[QSB|Quake Standards Base]] limits to this article, comments and arguments are [http://forums.inside3d.com/viewtopic.php?t=1953 welcome in this I3D thread]. The thread also contains my comments on each section. The standard isn't finished until the [[QSB|Quake Standards Base page]] says so, and is subject to change.

Green background means the engine passed the limit set up by the standard, thus making it compatible with that requirement. Feel free to alter the green backgrounds in case I've misinterpreted something!

=== TODO ===
*Nicer table look

 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
| 65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 512 || 2000 || 65536 F || 32768 || ? || 1073741824
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 1024 ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F || 256 || &gt;512/256 || &gt;32768 ||bgcolor=&quot;green&quot;| 32768 || 2048M* || 4096
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| Unlimited || (max texture size * 16) - 16 ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 ||bgcolor=&quot;green&quot;| 65536 || 64 ||bgcolor=&quot;green&quot;| 65536|| 32768 || 32768 || 128 || 512/256 ||bgcolor=&quot;green&quot;| 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 ||bgcolor=&quot;green&quot;| 65536 || 256 ||bgcolor=&quot;green&quot;| 65536 || 32768 || 32768 ||bgcolor=&quot;green&quot;| 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F || 256 ||bgcolor=&quot;green&quot;| 4080 ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| 32768 || Unlimited ||bgcolor=&quot;green&quot;| 1073741824
|-
! [[Fitzquake]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 || 256 ||bgcolor=&quot;green&quot;| 65535 || 65535-numfaces || ? ||bgcolor=&quot;green&quot;| 512 ||bgcolor=&quot;green&quot;| 2000 || ? ||bgcolor=&quot;green&quot;| 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|16384 || 256 || 1024 || 65536 || 65536
|-
! aguirRe's
|bgcolor=&quot;green&quot;|16384 ||bgcolor=&quot;green&quot;| 256 ||bgcolor=&quot;green&quot;| 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused ||bgcolor=&quot;green&quot;| Unlimited || 21845 ||bgcolor=&quot;green&quot;| 65534
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|516 || 128
|-
! aguirRe's
|bgcolor=&quot;green&quot;|516 ||bgcolor=&quot;green&quot;| 128
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;|516 ||bgcolor=&quot;green&quot;| 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;|1028 ||bgcolor=&quot;green&quot;| 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 29127 || 640x480 + || Infinite || Unlimited || 21845 || Unlimited || 4x2 or higher || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>7dq2zbx6gfbh4oqpw9ovcrgdlmeyznw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1584</id>
      <parentid>1583</parentid>
      <timestamp>2010-02-06T20:19:09Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <comment>Undo revision 1554 by [[Special:Contributions/Urre|Urre]] ([[User talk:Urre|Talk]])</comment>
      <text xml:space="preserve" bytes="7205">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== QSB ===
Started adding [[QSB|Quake Standards Base]] limits to this article, comments and arguments are welcome in this I3D thread. The thread also contains my comments on each section. The standard isn't finished until the [[QSB|Quake Standards Base page]] says so, and is subject to change.

Green background means the engine passed the limit set up by the standard, thus making it compatible with that requirement. Feel free to alter the green backgrounds in case I've misinterpreted something!

=== TODO ===
*Nicer table look

 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
| 65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 512 || 2000 || 65536 F || 32768 || ? || 1073741824
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 1024 ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F || 256 || &gt;512/256 || &gt;32768 ||bgcolor=&quot;green&quot;| 32768 || 2048M* || 4096
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| Unlimited || (max texture size * 16) - 16 ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 ||bgcolor=&quot;green&quot;| 65536 || 64 ||bgcolor=&quot;green&quot;| 65536|| 32768 || 32768 || 128 || 512/256 ||bgcolor=&quot;green&quot;| 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 ||bgcolor=&quot;green&quot;| 65536 || 256 ||bgcolor=&quot;green&quot;| 65536 || 32768 || 32768 ||bgcolor=&quot;green&quot;| 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F || 256 ||bgcolor=&quot;green&quot;| 4080 ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| 32768 || Unlimited ||bgcolor=&quot;green&quot;| 1073741824
|-
! [[Fitzquake]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 || 256 ||bgcolor=&quot;green&quot;| 65535 || 65535-numfaces || ? ||bgcolor=&quot;green&quot;| 512 ||bgcolor=&quot;green&quot;| 2000 || ? ||bgcolor=&quot;green&quot;| 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|16384 || 256 || 1024 || 65536 || 65536
|-
! aguirRe's
|bgcolor=&quot;green&quot;|16384 ||bgcolor=&quot;green&quot;| 256 ||bgcolor=&quot;green&quot;| 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused ||bgcolor=&quot;green&quot;| Unlimited || 21845 ||bgcolor=&quot;green&quot;| 65534
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|516 || 128
|-
! aguirRe's
|bgcolor=&quot;green&quot;|516 ||bgcolor=&quot;green&quot;| 128
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;|516 ||bgcolor=&quot;green&quot;| 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;|1028 ||bgcolor=&quot;green&quot;| 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 29127 || 640x480 + || Infinite || Unlimited || 21845 || Unlimited || 4x2 or higher || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>028wbsvg8c7bi3ymjb3tdo4xvkt3bgy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1585</id>
      <parentid>1584</parentid>
      <timestamp>2010-02-06T20:19:21Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <comment>Undo revision 1553 by [[Special:Contributions/Urre|Urre]] ([[User talk:Urre|Talk]])</comment>
      <text xml:space="preserve" bytes="7038">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== QSB ===
Started adding [[QSB|Quake Standards Base]] limits to this article, comments and arguments are welcome in this I3D thread. The thread also contains my comments on each section. The standard isn't finished until the [[QSB|Quake Standards Base page]] says so, and is subject to change.

Green background means the engine passed the limit set up by the standard, thus making it compatible with that requirement. Feel free to alter the green backgrounds in case I've misinterpreted something!

=== TODO ===
*Nicer table look

 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
| 65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 512 || 2000 || 65536 F || 32768 || ? || 1073741824
|-
! aguirRe's
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 1024 ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F || 256 || &gt;512/256 || &gt;32768 ||bgcolor=&quot;green&quot;| 32768 || 2048M* || 4096
|-
! [[DirectQ]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| Unlimited || (max texture size * 16) - 16 ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 ||bgcolor=&quot;green&quot;| 65536 || 64 ||bgcolor=&quot;green&quot;| 65536|| 32768 || 32768 || 128 || 512/256 ||bgcolor=&quot;green&quot;| 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 ||bgcolor=&quot;green&quot;| 65536 || 256 ||bgcolor=&quot;green&quot;| 65536 || 32768 || 32768 ||bgcolor=&quot;green&quot;| 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65535 F ||bgcolor=&quot;green&quot;| 65536 F || 256 ||bgcolor=&quot;green&quot;| 4080 ||bgcolor=&quot;green&quot;| 65536 F ||bgcolor=&quot;green&quot;| 32768 || Unlimited ||bgcolor=&quot;green&quot;| 1073741824
|-
! [[Fitzquake]]
|bgcolor=&quot;green&quot;| 65530 F ||bgcolor=&quot;green&quot;| 65536 || 256 ||bgcolor=&quot;green&quot;| 65535 || 65535-numfaces || ? ||bgcolor=&quot;green&quot;| 512 ||bgcolor=&quot;green&quot;| 2000 || ? ||bgcolor=&quot;green&quot;| 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|- style=&quot;font-weight:bold&quot;
! [[QSB|Quake Standards Base]]
|16384 || 256 || 1024 || 65536 || 65536
|-
! aguirRe's
|bgcolor=&quot;green&quot;|16384 ||bgcolor=&quot;green&quot;| 256 ||bgcolor=&quot;green&quot;| 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused ||bgcolor=&quot;green&quot;| Unlimited || 21845 ||bgcolor=&quot;green&quot;| 65534
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
|bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| Unlimited ||bgcolor=&quot;green&quot;| 65536 ||bgcolor=&quot;green&quot;| 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 29127 || 640x480 + || Infinite || Unlimited || 21845 || Unlimited || 4x2 or higher || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>01rq2jxszatbcht94mzowcm96rn9tdd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1586</id>
      <parentid>1585</parentid>
      <timestamp>2010-02-06T20:19:31Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <comment>Undo revision 1552 by [[Special:Contributions/Urre|Urre]] ([[User talk:Urre|Talk]])</comment>
      <text xml:space="preserve" bytes="5498">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[Fitzquake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused || Unlimited || 21845 || 65534
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 29127 || 640x480 + || Infinite || Unlimited || 21845 || Unlimited || 4x2 or higher || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>0tn5uqz11kwj54p0x6gl5oocmuovdgb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1602</id>
      <parentid>1586</parentid>
      <timestamp>2010-04-21T19:02:18Z</timestamp>
      <contributor>
        <ip>109.79.209.137</ip>
      </contributor>
      <comment>/* MDL */</comment>
      <text xml:space="preserve" bytes="5506">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[Fitzquake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused || Unlimited || Unlimited || Unlimited
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| 29127 || 640x480 + || Infinite || Unlimited || 21845 || Unlimited || 4x2 or higher || Unlimited || 32768 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>bd7rerv05xm7mon36fwbqbyq8789pgn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1603</id>
      <parentid>1602</parentid>
      <timestamp>2010-04-21T19:02:57Z</timestamp>
      <contributor>
        <ip>109.79.209.137</ip>
      </contributor>
      <comment>/* Graphics */</comment>
      <text xml:space="preserve" bytes="5514">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[Fitzquake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused || Unlimited || Unlimited || Unlimited
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| Unlimited || 640x480 + || Infinite || Unlimited || Unlimited || Unlimited || 4x2 or higher || Unlimited || 65536 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 8192 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || 32 MB
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>g6ymwlojcpb3h193vmbhu9dyws3siqb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1604</id>
      <parentid>1603</parentid>
      <timestamp>2010-04-21T19:03:50Z</timestamp>
      <contributor>
        <ip>109.79.209.137</ip>
      </contributor>
      <comment>/* Misc. */</comment>
      <text xml:space="preserve" bytes="5519">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[Fitzquake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused || Unlimited || Unlimited || Unlimited
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| Unlimited || 640x480 + || Infinite || Unlimited || Unlimited || Unlimited || 4x2 or higher || Unlimited || 65536 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 65536 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || Unlimited
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>jr3z5acd178pf8c8tdrjeo9a84dktod</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1617</id>
      <parentid>1604</parentid>
      <timestamp>2010-07-19T10:08:08Z</timestamp>
      <contributor>
        <ip>86.217.110.207</ip>
      </contributor>
      <text xml:space="preserve" bytes="5918">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[Fitzquake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused || Unlimited || Unlimited || Unlimited
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|-
! [[FTE]]
| NA || NA || Unlimited || Unlimited || Unlimited
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|-
! [[FTE]]
|256 || 8
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|-
! [[FTE]]
| 32 || 1k / 1k || 4B || 100M jumps || 1k || 64f,4kv || ?
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| Unlimited || 640x480 + || Infinite || Unlimited || Unlimited || Unlimited || 4x2 or higher || Unlimited || 65536 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|-
! [[FTE]]
| 64 || Unlimited || Infinite || Unlimited || 1024 || Unlimited || =256x128 || N/A || 1024 || N/A || N/A || 32k
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 65536 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || Unlimited
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|-
! [[FTE]]
| 64k(cvar) || 1024l(cvar) || 2048 || N/A || N/A || 512 || 2048 || 512 || 512 || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>mehmrstk1l52q516lg9kome20n6xhej</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1618</id>
      <parentid>1617</parentid>
      <timestamp>2010-07-19T10:16:07Z</timestamp>
      <contributor>
        <ip>86.217.110.207</ip>
      </contributor>
      <comment>/* Client/Server */</comment>
      <text xml:space="preserve" bytes="5920">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[Fitzquake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused || Unlimited || Unlimited || Unlimited
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|-
! [[FTE]]
| NA || NA || Unlimited || Unlimited || Unlimited
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|-
! [[FTE]]
|256 || 8
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|-
! [[FTE]]
| 32 || 1k / 1.4k || 4B || 100M jumps || 1k || 64f,4kv || ?
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| Unlimited || 640x480 + || Infinite || Unlimited || Unlimited || Unlimited || 4x2 or higher || Unlimited || 65536 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|-
! [[FTE]]
| 64 || Unlimited || Infinite || Unlimited || 1024 || Unlimited || =256x128 || N/A || 1024 || N/A || N/A || 32k
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 65536 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || Unlimited
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|-
! [[FTE]]
| 64k(cvar) || 1024l(cvar) || 2048 || N/A || N/A || 512 || 2048 || 512 || 512 || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>8zgq9frsehsr1n8wyd17k2t7e7be6ny</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1619</id>
      <parentid>1618</parentid>
      <timestamp>2010-07-19T10:17:01Z</timestamp>
      <contributor>
        <ip>86.217.110.207</ip>
      </contributor>
      <comment>/* Client/Server */</comment>
      <text xml:space="preserve" bytes="5923">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[Fitzquake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused || Unlimited || Unlimited || Unlimited
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|-
! [[FTE]]
| NA || NA || Unlimited || Unlimited || Unlimited
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|-
! [[FTE]]
|256 || 8
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|-
! [[FTE]]
| 32 || 1k / 1.4k || 4B || 100M jumps || 1k*16 || 64f,4kv || ?
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| Unlimited || 640x480 + || Infinite || Unlimited || Unlimited || Unlimited || 4x2 or higher || Unlimited || 65536 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|-
! [[FTE]]
| 64 || Unlimited || Infinite || Unlimited || 1024 || Unlimited || =256x128 || N/A || 1024 || N/A || N/A || 32k
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 65536 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || Unlimited
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|-
! [[FTE]]
| 64k(cvar) || 1024l(cvar) || 2048 || N/A || N/A || 512 || 2048 || 512 || 512 || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>j1ir4wxhfgigyys34dcsefsjbtehd9h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1620</id>
      <parentid>1619</parentid>
      <timestamp>2010-07-19T10:20:03Z</timestamp>
      <contributor>
        <ip>86.217.110.207</ip>
      </contributor>
      <comment>/* Client/Server */</comment>
      <text xml:space="preserve" bytes="5926">Please add your engine's limits here.

This page is based on aguirRe's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! aguirRe's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[Fitzquake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! aguirRe's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused || Unlimited || Unlimited || Unlimited
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|-
! [[FTE]]
| NA || NA || Unlimited || Unlimited || Unlimited
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! aguirRe's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|-
! [[FTE]]
|256 || 8
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! aguirRe's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|-
! [[FTE]]
| 32 || 1k*16 / 1.4k || 4B || 100M jumps || 1k*16 || 64f,4kv || ?
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! aguirRe's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| Unlimited || 640x480 + || Infinite || Unlimited || Unlimited || Unlimited || 4x2 or higher || Unlimited || 65536 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|-
! [[FTE]]
| 64 || Unlimited || Infinite || Unlimited || 1024 || Unlimited || =256x128 || N/A || 1024 || N/A || N/A || 32k
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! aguirRe's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 65536 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || Unlimited
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|-
! [[FTE]]
| 64k(cvar) || 1024l(cvar) || 2048 || N/A || N/A || 512 || 2048 || 512 || 512 || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>l53i9w36jz9kqcxsciw21cflt74dd4m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1621</id>
      <parentid>1620</parentid>
      <timestamp>2010-07-20T09:16:04Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Changed &quot;aguirRe&quot; to &quot;Bengt Jardrup&quot; since his source ports and tools are more readily associated with his real name, not his old forum nick</comment>
      <text xml:space="preserve" bytes="5968">Please add your engine's limits here.

This page is based on Bengt Jardrup's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! Bengt Jardrup's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[Fitzquake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! Bengt Jardrup's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused || Unlimited || Unlimited || Unlimited
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|-
! [[FTE]]
| NA || NA || Unlimited || Unlimited || Unlimited
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! Bengt Jardrup's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|-
! [[FTE]]
|256 || 8
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! Bengt Jardrup's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|-
! [[FTE]]
| 32 || 1k*16 / 1.4k || 4B || 100M jumps || 1k*16 || 64f,4kv || ?
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! Bengt Jardrup's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| Unlimited || 640x480 + || Infinite || Unlimited || Unlimited || Unlimited || 4x2 or higher || Unlimited || 65536 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|-
! [[FTE]]
| 64 || Unlimited || Infinite || Unlimited || 1024 || Unlimited || =256x128 || N/A || 1024 || N/A || N/A || 32k
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! Bengt Jardrup's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 65536 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || Unlimited
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|-
! [[FTE]]
| 64k(cvar) || 1024l(cvar) || 2048 || N/A || N/A || 512 || 2048 || 512 || 512 || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html</text>
      <sha1>6vbsoxoz0wwi88i3bqlg18pzl3w1toy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1857</id>
      <parentid>1621</parentid>
      <timestamp>2013-03-25T00:34:31Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="5992">Please add your engine's limits here.

This page is based on Bengt Jardrup's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! Bengt Jardrup's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[Fitzquake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! Bengt Jardrup's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused || Unlimited || Unlimited || Unlimited
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|-
! [[FTE]]
| NA || NA || Unlimited || Unlimited || Unlimited
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! Bengt Jardrup's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|-
! [[FTE]]
|256 || 8
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! Bengt Jardrup's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|-
! [[FTE]]
| 32 || 1k*16 / 1.4k || 4B || 100M jumps || 1k*16 || 64f,4kv || ?
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! Bengt Jardrup's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| Unlimited || 640x480 + || Infinite || Unlimited || Unlimited || Unlimited || 4x2 or higher || Unlimited || 65536 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|-
! [[FTE]]
| 64 || Unlimited || Infinite || Unlimited || 1024 || Unlimited || =256x128 || N/A || 1024 || N/A || N/A || 32k
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! Bengt Jardrup's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 65536 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || Unlimited
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|-
! [[FTE]]
| 64k(cvar) || 1024l(cvar) || 2048 || N/A || N/A || 512 || 2048 || 512 || 512 || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html
[[Category:DarkPlaces]]</text>
      <sha1>ac4pmz2lz1rn7z83b31r46g420fdg5s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2703</id>
      <parentid>1857</parentid>
      <timestamp>2013-03-30T16:10:41Z</timestamp>
      <contributor>
        <ip>86.140.150.18</ip>
      </contributor>
      <text xml:space="preserve" bytes="6003">Please add your engine's limits here.

This page is based on Bengt Jardrup's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! Bengt Jardrup's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[Fitzquake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! Bengt Jardrup's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused || Unlimited || Unlimited || Unlimited
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|-
! [[FTE]]
| NA || NA || Unlimited || Unlimited || Unlimited
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! Bengt Jardrup's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|-
! [[FTE]]
|256 || 8
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! Bengt Jardrup's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|-
! [[FTE]]
| 32 || 1k*16 / 1.4k || 4B || 100M jumps || 1k*16 || 64f,4kv || ?
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! Bengt Jardrup's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| Unlimited || 640x480 + || Infinite || Unlimited || Unlimited || Unlimited || 4x2 or higher || Unlimited || 65536 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|-
! [[FTE]]
| 64 || Unlimited || Infinite || Unlimited || Unlimited || Unlimited || =256x128 || N/A || Unlimited || N/A || N/A || 32k
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! Bengt Jardrup's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 65536 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || Unlimited
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|-
! [[FTE]]
| 64k(cvar) || 1024l(cvar) || 4m || N/A || N/A || 1024 || 2048 || 1024 || 2048 || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html
[[Category:DarkPlaces]]</text>
      <sha1>87uor7qc7wg9sbyif7klajs7f7fgr19</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3221</id>
      <parentid>2703</parentid>
      <timestamp>2014-01-19T10:48:02Z</timestamp>
      <contributor>
        <ip>86.173.174.166</ip>
      </contributor>
      <comment>/* Misc. */</comment>
      <text xml:space="preserve" bytes="6000">Please add your engine's limits here.

This page is based on Bengt Jardrup's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! Bengt Jardrup's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[Fitzquake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! Bengt Jardrup's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused || Unlimited || Unlimited || Unlimited
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|-
! [[FTE]]
| NA || NA || Unlimited || Unlimited || Unlimited
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! Bengt Jardrup's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|-
! [[FTE]]
|256 || 8
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! Bengt Jardrup's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|-
! [[FTE]]
| 32 || 1k*16 / 1.4k || 4B || 100M jumps || 1k*16 || 64f,4kv || ?
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! Bengt Jardrup's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| Unlimited || 640x480 + || Infinite || Unlimited || Unlimited || Unlimited || 4x2 or higher || Unlimited || 65536 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|-
! [[FTE]]
| 64 || Unlimited || Infinite || Unlimited || Unlimited || Unlimited || =256x128 || N/A || Unlimited || N/A || N/A || 32k
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! Bengt Jardrup's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 65536 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || Unlimited
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|-
! [[FTE]]
| 64k C || lines:1024 C || 4m || N/A || N/A || 1024 || 2048 || 1024 || 2048 || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html
[[Category:DarkPlaces]]</text>
      <sha1>rocr015l26yyuuwodbyfqs8zuzrgpx1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3222</id>
      <parentid>3221</parentid>
      <timestamp>2014-01-19T10:59:36Z</timestamp>
      <contributor>
        <ip>86.173.174.166</ip>
      </contributor>
      <comment>/* MDL */</comment>
      <text xml:space="preserve" bytes="5996">Please add your engine's limits here.

This page is based on Bengt Jardrup's http://user.tninet.se/~xir870k/readmegl.txt with kind permission. Brainstorm about what other limits might be interesting (if any) is welcome on the Talk page.

=== TODO ===
*Nicer table look


 * means: Check engine's readme for comments and details
 F means: Hard limit as a consequence of Q1 file format (typically BSP).  Increasing requires a format change.

== BSP ==

{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clipnodes]] !! [[Faces]] !! [[Lightmaps]] !! [[Marksurfaces]] !! [[Nodes]] !! [[Planes]] !! [[Static entities]] !! [[Surface extents]] !! [[Texinfo]] !! [[Visleafs]] !! [[Vis]]/[[light]] data !! Dimensions
|-
! Normal limit
| 32768 || 32768 || 64 || 32768 || 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! Bengt Jardrup's
|65530 F || 65536 || 1024 || 65536 || 65535 F || 65536 F || 256 || &gt;512/256 || &gt;32768 || 32768 || 2048M* || 4096
|-
! [[DirectQ]]
| 65530 F || 65536 || Unlimited || 65536 || 65535 F || 65536 F || Unlimited || (max texture size * 16) - 16 || 65536 F || 32768 || Unlimited || 3.402823466e+38f
|-
! [[ProQuake 4]]
| 32768 || 65536 || 64 || 65536|| 32768 || 32768 || 128 || 512/256 || 32768 || 8192 || heapsize || 4096
|-
! [[Quore]]
| 32768 || 65536 || 256 || 65536 || 32768 || 32768 || 512 || 512 || 4096 || 16384 || heapsize || 4096
|-
! [[DarkPlaces]]
|65530 F || Unlimited || Unlimited || Unlimited || 65535 F || 65536 F || 256 || 4080 || 65536 F || 32768 || Unlimited || 1073741824
|-
! [[Fitzquake]]
| 65530 F || 65536 || 256 || 65535 || 65535-numfaces || ? || 512 || 2000 || ? || 32768 || ? || 4096
|}

== MDL ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Mesh commands !! Mesh strips !! Skin height !! Triangles !! Vertices
|-
! Normal limit
| 8192 || 128 || 480 || 2048 || 1024/2000
|-
! Bengt Jardrup's
|16384 || 256 || 1024 || 4096 || 4096/3984
|-
! [[DirectQ]]
|Unused || Unused || Unlimited || Unlimited || Unlimited
|-
! [[ProQuake 4]]
| 8192 || 128 || 480 || 4096 || 4096/3984
|-
! [[Quore]]
| 8192 || 128 || 480 || 2048 || 2048
|-
! [[DarkPlaces]]
| Unlimited || Unlimited || Unlimited || 65536 || 65536
|-
! [[FTE]]
| NA || NA || Unlimited || Unlimited || 65536
|}

== Sounds ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Channels]] !! [[Dynamic channels]]
|-
! Normal limit
| 128 || 8
|-
! Bengt Jardrup's
|516 || 128
|-
! [[DirectQ]]
|516 || 128
|-
! [[ProQuake 4]]
| 128 || 8
|-
! [[Quore]]
| 128 || 8
|-
! [[DarkPlaces]]
|1028 || 512
|-
! [[FTE]]
|256 || 8
|}

== Client/Server ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Clients]] !! [[Packet size]] (Reliable, Unreliable) !! Progs [[globals]] !! [[Runaway loop]], QC !! [[Signon buffer size]] !! [[Stack size]], QC !! [[Static client message]]
|-
! Normal limit
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! Bengt Jardrup's
|64 || ~64k || 64k || 5M ops || ~64k || 256 || 8192
|-
! [[DirectQ]]
|16 || ~64k || ? (check) || 5M ops || ~64k || 2048 || 8192
|-
! [[ProQuake 4]]
| 16 || 8192 / 1024 || 32k || 100k ops || ~8k || 32 || 1024
|-
! [[Quore]]
| 32 || ~32k || 32k || 1M ops || ~32k || ? || ?
|-
! [[DarkPlaces]]
| 255 || 64k / 1400 || 64k || 10M jumps || 64k || 16k || 64k
|-
! [[FTE]]
| 32 || 1k*16 / 1.4k || 4B || 100M jumps || 1k*16 || 64f,4kv || ?
|}

== Graphics ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! [[Beams]] !! [[Console]] background !! [[Far clip distance]] !! GL textures !! Temporary entities !! Texture size !! Texture size, sky !! [[Video modes]] !! Visible edicts !! WinQ [[bmodel]] edges !! WinQ [[bmodel]] vertices !! [[Particles]]
|-
! Normal limit
| 24 || 640x480/320x200 || 4096 || 1024 || 64 || 1200k || =256x128 || 30 || 256 || 1000 || 500 || 2048 +
|-
! Bengt Jardrup's
|256 || 1024M* || 16384 || 2048* || 512 || 1024M* || any* || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[DirectQ]]
| Unlimited || 640x480 + || Infinite || Unlimited || Unlimited || Unlimited || 4x2 or higher || Unlimited || 65536 || N/A || N/A || Unlimited
|-
! [[ProQuake 4]]
| 24 || 640x480/320x200 || cvar set || 1024 || 64 || 1200k || =256x128 || 600 || 4096 || 3000 || 1000 || 2048 +
|-
! [[Quore]]
| 32 || Current resolution || Unlimited || 2048 || 256 || 1200k || =256x128 || N/A || 1024 || N/A || N/A || 32k
|-
! [[DarkPlaces]]
| 256 || Unlimited || Infinite || Unlimited || 65536 || Unlimited || =256x128 || Unlimited || Unlimited || N/A || N/A || Unlimited
|-
! [[FTE]]
| 64 || Unlimited || Infinite || Unlimited || Unlimited || Unlimited || =256x128 || N/A || Unlimited || N/A || N/A || 32k
|}

== Misc. ==
{| class=&quot;wikitable sortable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! !! Command/script buffer !! Console buffer size !! [[Edicts]] !! [[Efrags]] !! File handles !! Models, precached !! Mods, unique !! Sounds, precached !! Sounds, unique !! Temporary files !! [[Zone size]], default
|-
! Normal limit
| 8k || 16k || 600 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! Bengt Jardrup's
|64k || 256k || 4096 || 2048 || 100 || 1024 || 2048 || 1024* || 2560 || 1024M* || 320k
|-
! [[DirectQ]]
| 1024k || 256k || 65536 || N/A (unused) || N/A (unused) || 4096 || 4096 || 4096 || 512 || Unlimited || Unlimited
|-
! [[ProQuake 4]]
| 8k || 64k || 2048 || 640 || 10 || 256 || 512 || 256 || 512 || heapsize || 1 MB
|-
! [[Quore]]
| 8k || 64k || 8192 || 2048 || 10 || 256 || 512 || 256 || 512 || heapsize || 48k
|-
! [[DarkPlaces]]
| 640k || 1048576 || 32768 || Unlimited || Unlimited || 8192 || 8192 || 4096 || Unlimited || Unlimited || Unlimited
|-
! [[FTE]]
| 64k C || lines:1024 C || 4m || N/A || N/A || 1024 || 2048 || 1024 || 2048 || Unlimited || Unlimited
|}

==See Also:==
* [[Engines]]
* http://www.quaddicted.com/engines/engine_comparison.html
[[Category:DarkPlaces]]</text>
      <sha1>jxbvl0p11u40b8yab0lpa1gy86e9d1l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Engine Standards</title>
    <ns>0</ns>
    <id>372</id>
    <revision>
      <id>622</id>
      <timestamp>2008-04-14T20:38:11Z</timestamp>
      <contributor>
        <ip>85.134.153.142</ip>
      </contributor>
      <comment>New page: The purpose of this page is to document standards for enhanced engine or game content.  This way, we can ensure that all engines work in a broadly similar fashion, and that engine or game ...</comment>
      <text xml:space="preserve" bytes="263">The purpose of this page is to document standards for enhanced engine or game content.  This way, we can ensure that all engines work in a broadly similar fashion, and that engine or game content stands the best chance of working with as many engines as possible.</text>
      <sha1>gp3l51lj6zae4hsfh7ntxcat84frfy3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>623</id>
      <parentid>622</parentid>
      <timestamp>2008-04-14T20:41:24Z</timestamp>
      <contributor>
        <ip>85.134.153.142</ip>
      </contributor>
      <text xml:space="preserve" bytes="521">The purpose of this page is to document standards for enhanced engine or game content.  This way, we can ensure that all engines work in a broadly similar fashion, and that engine or game content stands the best chance of working with as many engines as possible.

Click on one of the links below to view the current standard, or contribute to the ongoing development of the standard.  Alternatively, feel free to edit this page to contribute your own proposed standard.

===Graphical Enhancement===

* [[Skybox Support]]</text>
      <sha1>dsylb51jpe6zboc31hgwbcfduqx0po0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1550</id>
      <parentid>623</parentid>
      <timestamp>2010-01-14T18:55:20Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <text xml:space="preserve" bytes="613">The purpose of this page is to document standards for enhanced engine or game content.  This way, we can ensure that all engines work in a broadly similar fashion, and that engine or game content stands the best chance of working with as many engines as possible.

Click on one of the links below to view the current standard, or contribute to the ongoing development of the standard.  Alternatively, feel free to edit this page to contribute your own proposed standard.

===Modding and mapping standards===

* [[QSB|Quake Standard Base for modding and mapping]]

===Graphical Enhancement===

* [[Skybox Support]]</text>
      <sha1>q4extr1chxao3bofr14pyi3fj67g3m3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1578</id>
      <parentid>1550</parentid>
      <timestamp>2010-02-06T19:11:58Z</timestamp>
      <contributor>
        <ip>83.226.254.64</ip>
      </contributor>
      <text xml:space="preserve" bytes="614">The purpose of this page is to document standards for enhanced engine or game content.  This way, we can ensure that all engines work in a broadly similar fashion, and that engine or game content stands the best chance of working with as many engines as possible.

Click on one of the links below to view the current standard, or contribute to the ongoing development of the standard.  Alternatively, feel free to edit this page to contribute your own proposed standard.

===Modding and mapping standards===

* [[QSB|Quake Standards Base for modding and mapping]]

===Graphical Enhancement===

* [[Skybox Support]]</text>
      <sha1>5stibdi94mq1nx91kj3aehqaisj2rrw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Engine getting started</title>
    <ns>0</ns>
    <id>69</id>
    <revision>
      <id>109</id>
      <timestamp>2007-10-30T21:44:39Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: ===Editing your own Quake engine=== * Get [http://www.mingw.org MinGW] or [http://msdn.microsoft.com/visualc/ buy Visual C++] * Dowload whatever you want engine sources * '''Suggestion''':...</comment>
      <text xml:space="preserve" bytes="3178">===Editing your own Quake engine===
* Get [http://www.mingw.org MinGW] or [http://msdn.microsoft.com/visualc/ buy Visual C++]
* Dowload whatever you want engine sources
* '''Suggestion''':
** [http://tomaz.quakesrc.org/q/files/Clean.zip CleanSrc] simple
** [[QMB]] [http://www.flyingsaucepan.com/QMB (web)] - another good start
** [[TomazQuake]] [http://tomaz.quakesrc.org/q/ (web)] - for TQ clones
** [[DarkPlaces]] [http://www.icculus.org/twilight/darkplaces/ (web)] - for level wizardry coders and huge enginemods
** [[FuhQuake]] [http://www.fuhquake.net/ (web)] - great starting point for QuakeWorld
* Unzip
* Open the *.dsw file (VC++) or the makefile (gcc/[http://www.mingw.org/ MinGW])
* Edit some files (VC IDE, Dev-C++ ide, [http://www.scintilla.org/SciTE.html SciTE], notepad,...)
* Recompile ( VC: build button, &quot;make&quot; command for gcc/mingw)
* If the build failed...
** Use your proyect *.s files? -&gt; then you have to build these with gas, also included often. Or [http://www.quakesrc.org/forum/viewtopic.php?t=148&amp;highlight=assembler+quake+build remove these and subst by c]
** Its your proyect for other compiler? (darkplaces run for both, vc an gcc, but others only run for vc (badly written) )
** Ask at [http://www.quakesrc.org QuakeSRC]
* [[Test Engine]]

===Understanding the code structure===
This is a list of source files and a list of some of the things done in them.

*cl_ - client files (demo playback, input, temp entities)
**_demo - demo playback
**_input - keyboard input (higher level)
**_main - assorted client functions
**_parse - server command parsing
**_tent - temp entitie parsing and beam parsing

*sv_ - server files (physics, collision detection, movement)
**_main - general server functions
**_move - movement related functions like movestep and moretogoal
**_phys - physics functions, gravity etc
**_user - user/client related functions

*net_ - network files&lt;br&gt;
**basicly convert quake client/server packets to be sent over a transport protocal like tcp or ipx, as well as network server/client stuff

*pr_ - qc virtual machine (runs progs.dat)
**_cmds - builtin commands
**_exec - qc executing
**_edict - loading progs.dat and other edict functions

*gl_ - opengl drawing files
**_rsurf - map and brush drawing
**_warp - sky, water etc drawing
**_mesh - alias model drawing
**_model - map and model loading
**_rlight - dynamic lights
**_screen - statis bar, console etc drawing
**_sprite - sprite drawing
**_vidnt - video init functions, and other startup functions
**_rmain, _rmisc - general draw stuff, cvar registering
**_draw - texture loading
**_rpart (for engines that dont use qmb partices its r_part.c or something) - Particle system, physics and drawing

*snd_ and cd_ - sound files

*and the rest are just bits and pieces, such as zone does memory managment
**menu - drawing menu and stuff
**sbar - sbar higher level drawing (calls functions from screen to do the actual drawing)
**mathlib - assorted maths functions
**wad - wad file loading
**world - map stuff
**console - console text control (calls functions from gl_screen to draw)
**cvar - cvar functions
**common - common low level functons (string compairs, file stuff)</text>
      <sha1>49jf7r6fyp8bcfbgxzxow05ladf6vqa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1851</id>
      <parentid>109</parentid>
      <timestamp>2013-03-25T00:31:07Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="3202">===Editing your own Quake engine===
* Get [http://www.mingw.org MinGW] or [http://msdn.microsoft.com/visualc/ buy Visual C++]
* Dowload whatever you want engine sources
* '''Suggestion''':
** [http://tomaz.quakesrc.org/q/files/Clean.zip CleanSrc] simple
** [[QMB]] [http://www.flyingsaucepan.com/QMB (web)] - another good start
** [[TomazQuake]] [http://tomaz.quakesrc.org/q/ (web)] - for TQ clones
** [[DarkPlaces]] [http://www.icculus.org/twilight/darkplaces/ (web)] - for level wizardry coders and huge enginemods
** [[FuhQuake]] [http://www.fuhquake.net/ (web)] - great starting point for QuakeWorld
* Unzip
* Open the *.dsw file (VC++) or the makefile (gcc/[http://www.mingw.org/ MinGW])
* Edit some files (VC IDE, Dev-C++ ide, [http://www.scintilla.org/SciTE.html SciTE], notepad,...)
* Recompile ( VC: build button, &quot;make&quot; command for gcc/mingw)
* If the build failed...
** Use your proyect *.s files? -&gt; then you have to build these with gas, also included often. Or [http://www.quakesrc.org/forum/viewtopic.php?t=148&amp;highlight=assembler+quake+build remove these and subst by c]
** Its your proyect for other compiler? (darkplaces run for both, vc an gcc, but others only run for vc (badly written) )
** Ask at [http://www.quakesrc.org QuakeSRC]
* [[Test Engine]]

===Understanding the code structure===
This is a list of source files and a list of some of the things done in them.

*cl_ - client files (demo playback, input, temp entities)
**_demo - demo playback
**_input - keyboard input (higher level)
**_main - assorted client functions
**_parse - server command parsing
**_tent - temp entitie parsing and beam parsing

*sv_ - server files (physics, collision detection, movement)
**_main - general server functions
**_move - movement related functions like movestep and moretogoal
**_phys - physics functions, gravity etc
**_user - user/client related functions

*net_ - network files&lt;br&gt;
**basicly convert quake client/server packets to be sent over a transport protocal like tcp or ipx, as well as network server/client stuff

*pr_ - qc virtual machine (runs progs.dat)
**_cmds - builtin commands
**_exec - qc executing
**_edict - loading progs.dat and other edict functions

*gl_ - opengl drawing files
**_rsurf - map and brush drawing
**_warp - sky, water etc drawing
**_mesh - alias model drawing
**_model - map and model loading
**_rlight - dynamic lights
**_screen - statis bar, console etc drawing
**_sprite - sprite drawing
**_vidnt - video init functions, and other startup functions
**_rmain, _rmisc - general draw stuff, cvar registering
**_draw - texture loading
**_rpart (for engines that dont use qmb partices its r_part.c or something) - Particle system, physics and drawing

*snd_ and cd_ - sound files

*and the rest are just bits and pieces, such as zone does memory managment
**menu - drawing menu and stuff
**sbar - sbar higher level drawing (calls functions from screen to do the actual drawing)
**mathlib - assorted maths functions
**wad - wad file loading
**world - map stuff
**console - console text control (calls functions from gl_screen to draw)
**cvar - cvar functions
**common - common low level functons (string compairs, file stuff)
[[Category:DarkPlaces]]</text>
      <sha1>t7nsw58ttdyu9gilpgy7y92rvh11lh3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2747</id>
      <parentid>1851</parentid>
      <timestamp>2013-04-03T02:01:05Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <minor/>
      <comment>/* Editing your own Quake engine */</comment>
      <text xml:space="preserve" bytes="3210">===Editing your own Quake engine===
* Get [http://www.mingw.org MinGW] or [http://msdn.microsoft.com/visualc/ buy Visual C++]
* Dowload whatever you want engine sources
* '''Suggestion''':
** [http://tomaz.quakesrc.org/q/files/Clean.zip CleanSrc] simple
** [[QMB]] [http://www.flyingsaucepan.com/QMB (web)] - another good start
** [[TomazQuake]] [http://tomaz.quakesrc.org/q/ (web)] - for TQ clones
** [[DarkPlaces]] [http://www.icculus.org/twilight/darkplaces/ (web)] - for level wizardry coders and huge enginemods
** [[FuhQuake]] [http://www.fuhquake.net/ (web)] - great starting point for QuakeWorld
* Unzip
* Open the *.dsw file (VC++) or the makefile (gcc/[http://www.mingw.org/ MinGW])
* Edit some files (VC IDE, Dev-C++ ide, [http://www.scintilla.org/SciTE.html SciTE], notepad,...)
* Recompile ( VC: build button, &quot;make&quot; command for gcc/mingw)
* If the build failed...
** Use your proyect *.s files? -&gt; then you have to build these with gas, also included often. Or [http://www.quakesrc.org/forum/viewtopic.php?t=148&amp;highlight=assembler+quake+build remove these and subst by c]
** Is your project for another compiler? (Darkplaces compiles on both VC an GCC for example, but some others only compile for VC)
** Ask at [http://www.quakesrc.org QuakeSRC]
* [[Test Engine]]

===Understanding the code structure===
This is a list of source files and a list of some of the things done in them.

*cl_ - client files (demo playback, input, temp entities)
**_demo - demo playback
**_input - keyboard input (higher level)
**_main - assorted client functions
**_parse - server command parsing
**_tent - temp entitie parsing and beam parsing

*sv_ - server files (physics, collision detection, movement)
**_main - general server functions
**_move - movement related functions like movestep and moretogoal
**_phys - physics functions, gravity etc
**_user - user/client related functions

*net_ - network files&lt;br&gt;
**basicly convert quake client/server packets to be sent over a transport protocal like tcp or ipx, as well as network server/client stuff

*pr_ - qc virtual machine (runs progs.dat)
**_cmds - builtin commands
**_exec - qc executing
**_edict - loading progs.dat and other edict functions

*gl_ - opengl drawing files
**_rsurf - map and brush drawing
**_warp - sky, water etc drawing
**_mesh - alias model drawing
**_model - map and model loading
**_rlight - dynamic lights
**_screen - statis bar, console etc drawing
**_sprite - sprite drawing
**_vidnt - video init functions, and other startup functions
**_rmain, _rmisc - general draw stuff, cvar registering
**_draw - texture loading
**_rpart (for engines that dont use qmb partices its r_part.c or something) - Particle system, physics and drawing

*snd_ and cd_ - sound files

*and the rest are just bits and pieces, such as zone does memory managment
**menu - drawing menu and stuff
**sbar - sbar higher level drawing (calls functions from screen to do the actual drawing)
**mathlib - assorted maths functions
**wad - wad file loading
**world - map stuff
**console - console text control (calls functions from gl_screen to draw)
**cvar - cvar functions
**common - common low level functons (string compairs, file stuff)
[[Category:DarkPlaces]]</text>
      <sha1>kt6spker7kozo0itt2ksa44awctl7jl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2909</id>
      <parentid>2747</parentid>
      <timestamp>2013-04-09T18:30:56Z</timestamp>
      <contributor>
        <ip>86.30.203.66</ip>
      </contributor>
      <comment>Fixed QMB link</comment>
      <text xml:space="preserve" bytes="3209">===Editing your own Quake engine===
* Get [http://www.mingw.org MinGW] or [http://msdn.microsoft.com/visualc/ buy Visual C++]
* Dowload whatever you want engine sources
* '''Suggestion''':
** [http://tomaz.quakesrc.org/q/files/Clean.zip CleanSrc] simple
** [[QMB]] [http://www.gluonporridge.net/QMB (web)] - another good start
** [[TomazQuake]] [http://tomaz.quakesrc.org/q/ (web)] - for TQ clones
** [[DarkPlaces]] [http://www.icculus.org/twilight/darkplaces/ (web)] - for level wizardry coders and huge enginemods
** [[FuhQuake]] [http://www.fuhquake.net/ (web)] - great starting point for QuakeWorld
* Unzip
* Open the *.dsw file (VC++) or the makefile (gcc/[http://www.mingw.org/ MinGW])
* Edit some files (VC IDE, Dev-C++ ide, [http://www.scintilla.org/SciTE.html SciTE], notepad,...)
* Recompile ( VC: build button, &quot;make&quot; command for gcc/mingw)
* If the build failed...
** Use your proyect *.s files? -&gt; then you have to build these with gas, also included often. Or [http://www.quakesrc.org/forum/viewtopic.php?t=148&amp;highlight=assembler+quake+build remove these and subst by c]
** Is your project for another compiler? (Darkplaces compiles on both VC an GCC for example, but some others only compile for VC)
** Ask at [http://www.quakesrc.org QuakeSRC]
* [[Test Engine]]

===Understanding the code structure===
This is a list of source files and a list of some of the things done in them.

*cl_ - client files (demo playback, input, temp entities)
**_demo - demo playback
**_input - keyboard input (higher level)
**_main - assorted client functions
**_parse - server command parsing
**_tent - temp entitie parsing and beam parsing

*sv_ - server files (physics, collision detection, movement)
**_main - general server functions
**_move - movement related functions like movestep and moretogoal
**_phys - physics functions, gravity etc
**_user - user/client related functions

*net_ - network files&lt;br&gt;
**basicly convert quake client/server packets to be sent over a transport protocal like tcp or ipx, as well as network server/client stuff

*pr_ - qc virtual machine (runs progs.dat)
**_cmds - builtin commands
**_exec - qc executing
**_edict - loading progs.dat and other edict functions

*gl_ - opengl drawing files
**_rsurf - map and brush drawing
**_warp - sky, water etc drawing
**_mesh - alias model drawing
**_model - map and model loading
**_rlight - dynamic lights
**_screen - statis bar, console etc drawing
**_sprite - sprite drawing
**_vidnt - video init functions, and other startup functions
**_rmain, _rmisc - general draw stuff, cvar registering
**_draw - texture loading
**_rpart (for engines that dont use qmb partices its r_part.c or something) - Particle system, physics and drawing

*snd_ and cd_ - sound files

*and the rest are just bits and pieces, such as zone does memory managment
**menu - drawing menu and stuff
**sbar - sbar higher level drawing (calls functions from screen to do the actual drawing)
**mathlib - assorted maths functions
**wad - wad file loading
**world - map stuff
**console - console text control (calls functions from gl_screen to draw)
**cvar - cvar functions
**common - common low level functons (string compairs, file stuff)
[[Category:DarkPlaces]]</text>
      <sha1>5vwkus66s1b9iz54ke2xq4hgrpj0eey</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2910</id>
      <parentid>2909</parentid>
      <timestamp>2013-04-09T18:45:24Z</timestamp>
      <contributor>
        <ip>86.30.203.66</ip>
      </contributor>
      <comment>Some updates, more needed</comment>
      <text xml:space="preserve" bytes="3731">===Editing your own Quake engine===
* Get [http://www.mingw.org MinGW] or [http://msdn.microsoft.com/visualc/ buy Visual C++]
* Dowload whatever you want engine sources
* '''Suggestion''':
** [http://tomaz.quakesrc.org/q/files/Clean.zip CleanSrc] Simple and most likely to fit with general information about the Quake engine.
** [[TomazQuake]] [http://tomaz.quakesrc.org/q/ (web)] - Like CleanSrc it will fit with general information about engine development but with enhancements and extra features already added. Will build on Windows (Visual Studio).
** [[QMB]] [http://www.gluonporridge.net/QMB (web)] [//https://github.com/DrLabman/QMB (git)] - Moving away from the standard source layout, originally based on CleanSrc. Will build on Unix and Windows (GMingW).
** [[DarkPlaces]] [http://www.icculus.org/twilight/darkplaces/ (web)] - One of the most comprehensive feature sets. Unlikely to fit with general information about Quake engines. Better suited to experienced programers who want the features it offers.
** [[FuhQuake]] [http://www.fuhquake.net/ (web)] - Great starting point for QuakeWorld
* Unzip
* Open the *.dsw file (VC++) or the makefile (gcc/[http://www.mingw.org/ MinGW])
* Edit some files (VC IDE, Dev-C++ ide, [http://www.scintilla.org/SciTE.html SciTE], notepad,...)
* Recompile ( VC: build button, &quot;make&quot; command for gcc/mingw)
* If the build failed...
** Use your project *.s files? -&gt; then you have to build these with Gas, also included often. Or [http://www.quakesrc.org/forum/viewtopic.php?t=148&amp;highlight=assembler+quake+build remove these and substitute by c]
** Is your project for another compiler? (Darkplaces compiles on both Visual C and GCC for example, but some others only compile for Visual C)
** Ask at [http://forums.inside3d.com Inside3D]
* [[Test Engine]]

===Understanding the code structure===
This is a list of source files and a list of some of the things done in them.

*cl_ - client files (demo playback, input, temp entities)
**_demo - demo playback
**_input - keyboard input (higher level)
**_main - assorted client functions
**_parse - server command parsing
**_tent - temp entitie parsing and beam parsing

*sv_ - server files (physics, collision detection, movement)
**_main - general server functions
**_move - movement related functions like movestep and moretogoal
**_phys - physics functions, gravity etc
**_user - user/client related functions

*net_ - network files&lt;br&gt;
**basicly convert quake client/server packets to be sent over a transport protocal like tcp or ipx, as well as network server/client stuff

*pr_ - qc virtual machine (runs progs.dat)
**_cmds - builtin commands
**_exec - qc executing
**_edict - loading progs.dat and other edict functions

*gl_ - opengl drawing files
**_rsurf - map and brush drawing
**_warp - sky, water etc drawing
**_mesh - alias model drawing
**_model - map and model loading
**_rlight - dynamic lights
**_screen - statis bar, console etc drawing
**_sprite - sprite drawing
**_vidnt - video init functions, and other startup functions
**_rmain, _rmisc - general draw stuff, cvar registering
**_draw - texture loading
**_rpart (for engines that dont use qmb partices its r_part.c or something) - Particle system, physics and drawing

*snd_ and cd_ - sound files

*and the rest are just bits and pieces, such as zone does memory managment
**menu - drawing menu and stuff
**sbar - sbar higher level drawing (calls functions from screen to do the actual drawing)
**mathlib - assorted maths functions
**wad - wad file loading
**world - map stuff
**console - console text control (calls functions from gl_screen to draw)
**cvar - cvar functions
**common - common low level functons (string compairs, file stuff)
[[Category:DarkPlaces]]</text>
      <sha1>p5gx5vyciyjei0h0raty6og9g7y8fj6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2919</id>
      <parentid>2910</parentid>
      <timestamp>2013-04-16T14:38:46Z</timestamp>
      <contributor>
        <username>Baker5</username>
        <id>30</id>
      </contributor>
      <comment>/* Editing your own Quake engine */</comment>
      <text xml:space="preserve" bytes="4512">===Editing your own Quake engine (2013)===

We are going to use FitzQuake Mark V's source code and Windows for this example as GLQuake's source code doesn't compile without many modifications.

What you need:
1. [http://sourceforge.net/projects/codeblocks/files/Binaries/10.05/Windows/codeblocks-10.05mingw-setup.exe]CodeBlocks + MinGW] (75MB) or [http://www.microsoft.com/visualstudio/eng/downloads]Free Visual Studio Express 2012] (5 GB).  Both are free.
2. [FitzQuake Mark V source code http://quake-1.com/docs/utils/fitzquake_mark_v_r9.zip]

Visual Studio Express 2012: Open Fitzquake_Visual_Studio_2012.vcxproj and press F7 (Build Solution) to compile or F5 to compile + run.

CodeBlocks + MinGW: Open Fitzquake_CodeBlocks.cbp and press F9 (or click Build-&gt;Build and Run).



===Editing your own Quake engine===
* Get [http://www.mingw.org MinGW] or [http://msdn.microsoft.com/visualc/ buy Visual C++]
* Dowload whatever you want engine sources
* '''Suggestion''':
** [http://tomaz.quakesrc.org/q/files/Clean.zip CleanSrc] Simple and most likely to fit with general information about the Quake engine.
** [[TomazQuake]] [http://tomaz.quakesrc.org/q/ (web)] - Like CleanSrc it will fit with general information about engine development but with enhancements and extra features already added. Will build on Windows (Visual Studio).
** [[QMB]] [http://www.gluonporridge.net/QMB (web)] [//https://github.com/DrLabman/QMB (git)] - Moving away from the standard source layout, originally based on CleanSrc. Will build on Unix and Windows (GMingW).
** [[DarkPlaces]] [http://www.icculus.org/twilight/darkplaces/ (web)] - One of the most comprehensive feature sets. Unlikely to fit with general information about Quake engines. Better suited to experienced programers who want the features it offers.
** [[FuhQuake]] [http://www.fuhquake.net/ (web)] - Great starting point for QuakeWorld
* Unzip
* Open the *.dsw file (VC++) or the makefile (gcc/[http://www.mingw.org/ MinGW])
* Edit some files (VC IDE, Dev-C++ ide, [http://www.scintilla.org/SciTE.html SciTE], notepad,...)
* Recompile ( VC: build button, &quot;make&quot; command for gcc/mingw)
* If the build failed...
** Use your project *.s files? -&gt; then you have to build these with Gas, also included often. Or [http://www.quakesrc.org/forum/viewtopic.php?t=148&amp;highlight=assembler+quake+build remove these and substitute by c]
** Is your project for another compiler? (Darkplaces compiles on both Visual C and GCC for example, but some others only compile for Visual C)
** Ask at [http://forums.inside3d.com Inside3D]
* [[Test Engine]]

===Understanding the code structure===
This is a list of source files and a list of some of the things done in them.

*cl_ - client files (demo playback, input, temp entities)
**_demo - demo playback
**_input - keyboard input (higher level)
**_main - assorted client functions
**_parse - server command parsing
**_tent - temp entitie parsing and beam parsing

*sv_ - server files (physics, collision detection, movement)
**_main - general server functions
**_move - movement related functions like movestep and moretogoal
**_phys - physics functions, gravity etc
**_user - user/client related functions

*net_ - network files&lt;br&gt;
**basicly convert quake client/server packets to be sent over a transport protocal like tcp or ipx, as well as network server/client stuff

*pr_ - qc virtual machine (runs progs.dat)
**_cmds - builtin commands
**_exec - qc executing
**_edict - loading progs.dat and other edict functions

*gl_ - opengl drawing files
**_rsurf - map and brush drawing
**_warp - sky, water etc drawing
**_mesh - alias model drawing
**_model - map and model loading
**_rlight - dynamic lights
**_screen - statis bar, console etc drawing
**_sprite - sprite drawing
**_vidnt - video init functions, and other startup functions
**_rmain, _rmisc - general draw stuff, cvar registering
**_draw - texture loading
**_rpart (for engines that dont use qmb partices its r_part.c or something) - Particle system, physics and drawing

*snd_ and cd_ - sound files

*and the rest are just bits and pieces, such as zone does memory managment
**menu - drawing menu and stuff
**sbar - sbar higher level drawing (calls functions from screen to do the actual drawing)
**mathlib - assorted maths functions
**wad - wad file loading
**world - map stuff
**console - console text control (calls functions from gl_screen to draw)
**cvar - cvar functions
**common - common low level functons (string compairs, file stuff)
[[Category:DarkPlaces]]</text>
      <sha1>hggkkn2kbne0jkrd4640du88em75gr2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2920</id>
      <parentid>2919</parentid>
      <timestamp>2013-04-16T14:41:12Z</timestamp>
      <contributor>
        <username>Baker5</username>
        <id>30</id>
      </contributor>
      <comment>/* Editing your own Quake engine (2013) */</comment>
      <text xml:space="preserve" bytes="4511">===Editing your own Quake engine (2013)===

We are going to use FitzQuake Mark V's source code and Windows for this example as GLQuake's source code doesn't compile without many modifications.

What you need:
1. [http://sourceforge.net/projects/codeblocks/files/Binaries/10.05/Windows/codeblocks-10.05mingw-setup.exe]CodeBlocks + MinGW] (75MB) or [http://www.microsoft.com/visualstudio/eng/downloads]Free Visual Studio Express 2012] (5 GB).  Both are free.

2. [FitzQuake Mark V source code http://quake-1.com/docs/utils/fitzquake_mark_v_r9.zip]

Visual Studio Express 2012: Open Fitzquake_Visual_Studio_2012.vcxproj and press F7 (Build Solution) to compile or F5 to compile + run.

CodeBlocks + MinGW: Open Fitzquake_CodeBlocks.cbp and press F9 (or click Build-&gt;Build and Run).

===Editing your own Quake engine===
* Get [http://www.mingw.org MinGW] or [http://msdn.microsoft.com/visualc/ buy Visual C++]
* Dowload whatever you want engine sources
* '''Suggestion''':
** [http://tomaz.quakesrc.org/q/files/Clean.zip CleanSrc] Simple and most likely to fit with general information about the Quake engine.
** [[TomazQuake]] [http://tomaz.quakesrc.org/q/ (web)] - Like CleanSrc it will fit with general information about engine development but with enhancements and extra features already added. Will build on Windows (Visual Studio).
** [[QMB]] [http://www.gluonporridge.net/QMB (web)] [//https://github.com/DrLabman/QMB (git)] - Moving away from the standard source layout, originally based on CleanSrc. Will build on Unix and Windows (GMingW).
** [[DarkPlaces]] [http://www.icculus.org/twilight/darkplaces/ (web)] - One of the most comprehensive feature sets. Unlikely to fit with general information about Quake engines. Better suited to experienced programers who want the features it offers.
** [[FuhQuake]] [http://www.fuhquake.net/ (web)] - Great starting point for QuakeWorld
* Unzip
* Open the *.dsw file (VC++) or the makefile (gcc/[http://www.mingw.org/ MinGW])
* Edit some files (VC IDE, Dev-C++ ide, [http://www.scintilla.org/SciTE.html SciTE], notepad,...)
* Recompile ( VC: build button, &quot;make&quot; command for gcc/mingw)
* If the build failed...
** Use your project *.s files? -&gt; then you have to build these with Gas, also included often. Or [http://www.quakesrc.org/forum/viewtopic.php?t=148&amp;highlight=assembler+quake+build remove these and substitute by c]
** Is your project for another compiler? (Darkplaces compiles on both Visual C and GCC for example, but some others only compile for Visual C)
** Ask at [http://forums.inside3d.com Inside3D]
* [[Test Engine]]

===Understanding the code structure===
This is a list of source files and a list of some of the things done in them.

*cl_ - client files (demo playback, input, temp entities)
**_demo - demo playback
**_input - keyboard input (higher level)
**_main - assorted client functions
**_parse - server command parsing
**_tent - temp entitie parsing and beam parsing

*sv_ - server files (physics, collision detection, movement)
**_main - general server functions
**_move - movement related functions like movestep and moretogoal
**_phys - physics functions, gravity etc
**_user - user/client related functions

*net_ - network files&lt;br&gt;
**basicly convert quake client/server packets to be sent over a transport protocal like tcp or ipx, as well as network server/client stuff

*pr_ - qc virtual machine (runs progs.dat)
**_cmds - builtin commands
**_exec - qc executing
**_edict - loading progs.dat and other edict functions

*gl_ - opengl drawing files
**_rsurf - map and brush drawing
**_warp - sky, water etc drawing
**_mesh - alias model drawing
**_model - map and model loading
**_rlight - dynamic lights
**_screen - statis bar, console etc drawing
**_sprite - sprite drawing
**_vidnt - video init functions, and other startup functions
**_rmain, _rmisc - general draw stuff, cvar registering
**_draw - texture loading
**_rpart (for engines that dont use qmb partices its r_part.c or something) - Particle system, physics and drawing

*snd_ and cd_ - sound files

*and the rest are just bits and pieces, such as zone does memory managment
**menu - drawing menu and stuff
**sbar - sbar higher level drawing (calls functions from screen to do the actual drawing)
**mathlib - assorted maths functions
**wad - wad file loading
**world - map stuff
**console - console text control (calls functions from gl_screen to draw)
**cvar - cvar functions
**common - common low level functons (string compairs, file stuff)
[[Category:DarkPlaces]]</text>
      <sha1>k4kozzldcq2p4cvdjlajt51u3tjhf97</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2921</id>
      <parentid>2920</parentid>
      <timestamp>2013-04-16T14:41:37Z</timestamp>
      <contributor>
        <username>Baker5</username>
        <id>30</id>
      </contributor>
      <comment>/* Editing your own Quake engine (2013) */</comment>
      <text xml:space="preserve" bytes="4512">===Editing your own Quake engine (2013)===

We are going to use FitzQuake Mark V's source code and Windows for this example as GLQuake's source code doesn't compile without many modifications.

What you need:

1. [http://sourceforge.net/projects/codeblocks/files/Binaries/10.05/Windows/codeblocks-10.05mingw-setup.exe]CodeBlocks + MinGW] (75MB) or [http://www.microsoft.com/visualstudio/eng/downloads]Free Visual Studio Express 2012] (5 GB).  Both are free.

2. [FitzQuake Mark V source code http://quake-1.com/docs/utils/fitzquake_mark_v_r9.zip]

Visual Studio Express 2012: Open Fitzquake_Visual_Studio_2012.vcxproj and press F7 (Build Solution) to compile or F5 to compile + run.

CodeBlocks + MinGW: Open Fitzquake_CodeBlocks.cbp and press F9 (or click Build-&gt;Build and Run).

===Editing your own Quake engine===
* Get [http://www.mingw.org MinGW] or [http://msdn.microsoft.com/visualc/ buy Visual C++]
* Dowload whatever you want engine sources
* '''Suggestion''':
** [http://tomaz.quakesrc.org/q/files/Clean.zip CleanSrc] Simple and most likely to fit with general information about the Quake engine.
** [[TomazQuake]] [http://tomaz.quakesrc.org/q/ (web)] - Like CleanSrc it will fit with general information about engine development but with enhancements and extra features already added. Will build on Windows (Visual Studio).
** [[QMB]] [http://www.gluonporridge.net/QMB (web)] [//https://github.com/DrLabman/QMB (git)] - Moving away from the standard source layout, originally based on CleanSrc. Will build on Unix and Windows (GMingW).
** [[DarkPlaces]] [http://www.icculus.org/twilight/darkplaces/ (web)] - One of the most comprehensive feature sets. Unlikely to fit with general information about Quake engines. Better suited to experienced programers who want the features it offers.
** [[FuhQuake]] [http://www.fuhquake.net/ (web)] - Great starting point for QuakeWorld
* Unzip
* Open the *.dsw file (VC++) or the makefile (gcc/[http://www.mingw.org/ MinGW])
* Edit some files (VC IDE, Dev-C++ ide, [http://www.scintilla.org/SciTE.html SciTE], notepad,...)
* Recompile ( VC: build button, &quot;make&quot; command for gcc/mingw)
* If the build failed...
** Use your project *.s files? -&gt; then you have to build these with Gas, also included often. Or [http://www.quakesrc.org/forum/viewtopic.php?t=148&amp;highlight=assembler+quake+build remove these and substitute by c]
** Is your project for another compiler? (Darkplaces compiles on both Visual C and GCC for example, but some others only compile for Visual C)
** Ask at [http://forums.inside3d.com Inside3D]
* [[Test Engine]]

===Understanding the code structure===
This is a list of source files and a list of some of the things done in them.

*cl_ - client files (demo playback, input, temp entities)
**_demo - demo playback
**_input - keyboard input (higher level)
**_main - assorted client functions
**_parse - server command parsing
**_tent - temp entitie parsing and beam parsing

*sv_ - server files (physics, collision detection, movement)
**_main - general server functions
**_move - movement related functions like movestep and moretogoal
**_phys - physics functions, gravity etc
**_user - user/client related functions

*net_ - network files&lt;br&gt;
**basicly convert quake client/server packets to be sent over a transport protocal like tcp or ipx, as well as network server/client stuff

*pr_ - qc virtual machine (runs progs.dat)
**_cmds - builtin commands
**_exec - qc executing
**_edict - loading progs.dat and other edict functions

*gl_ - opengl drawing files
**_rsurf - map and brush drawing
**_warp - sky, water etc drawing
**_mesh - alias model drawing
**_model - map and model loading
**_rlight - dynamic lights
**_screen - statis bar, console etc drawing
**_sprite - sprite drawing
**_vidnt - video init functions, and other startup functions
**_rmain, _rmisc - general draw stuff, cvar registering
**_draw - texture loading
**_rpart (for engines that dont use qmb partices its r_part.c or something) - Particle system, physics and drawing

*snd_ and cd_ - sound files

*and the rest are just bits and pieces, such as zone does memory managment
**menu - drawing menu and stuff
**sbar - sbar higher level drawing (calls functions from screen to do the actual drawing)
**mathlib - assorted maths functions
**wad - wad file loading
**world - map stuff
**console - console text control (calls functions from gl_screen to draw)
**cvar - cvar functions
**common - common low level functons (string compairs, file stuff)
[[Category:DarkPlaces]]</text>
      <sha1>qw8t0y6jkn1jppc1z6wi7vu7oi2d7sf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2922</id>
      <parentid>2921</parentid>
      <timestamp>2013-04-16T14:46:18Z</timestamp>
      <contributor>
        <username>Baker5</username>
        <id>30</id>
      </contributor>
      <comment>/* Editing your own Quake engine (2013) */</comment>
      <text xml:space="preserve" bytes="4542">===Editing your own Quake engine (2013)===

We are going to use FitzQuake Mark V's source code and Windows for this example as GLQuake's source code doesn't compile without many modifications.

What you need:

1. [http://sourceforge.net/projects/codeblocks/files/Binaries/10.05/Windows/codeblocks-10.05mingw-setup.exe CodeBlocks + MinGW] (75MB) or [http://www.microsoft.com/visualstudio/eng/downloads Visual Studio Express 2012] (5 GB).  Both are free.

2. [http://quake-1.com/docs/utils/fitzquake_mark_v_r9.zip FitzQuake Mark V source code] Decompress the source.zip included.

Visual Studio Express 2012: Open Fitzquake_Visual_Studio_2012.vcxproj and press F5 [or click Build-&gt;Build Solution] to compile + run.

CodeBlocks + MinGW: Open Fitzquake_CodeBlocks.cbp and press F9 (or click Build-&gt;Build and Run).

===Editing your own Quake engine===
* Get [http://www.mingw.org MinGW] or [http://msdn.microsoft.com/visualc/ buy Visual C++]
* Dowload whatever you want engine sources
* '''Suggestion''':
** [http://tomaz.quakesrc.org/q/files/Clean.zip CleanSrc] Simple and most likely to fit with general information about the Quake engine.
** [[TomazQuake]] [http://tomaz.quakesrc.org/q/ (web)] - Like CleanSrc it will fit with general information about engine development but with enhancements and extra features already added. Will build on Windows (Visual Studio).
** [[QMB]] [http://www.gluonporridge.net/QMB (web)] [//https://github.com/DrLabman/QMB (git)] - Moving away from the standard source layout, originally based on CleanSrc. Will build on Unix and Windows (GMingW).
** [[DarkPlaces]] [http://www.icculus.org/twilight/darkplaces/ (web)] - One of the most comprehensive feature sets. Unlikely to fit with general information about Quake engines. Better suited to experienced programers who want the features it offers.
** [[FuhQuake]] [http://www.fuhquake.net/ (web)] - Great starting point for QuakeWorld
* Unzip
* Open the *.dsw file (VC++) or the makefile (gcc/[http://www.mingw.org/ MinGW])
* Edit some files (VC IDE, Dev-C++ ide, [http://www.scintilla.org/SciTE.html SciTE], notepad,...)
* Recompile ( VC: build button, &quot;make&quot; command for gcc/mingw)
* If the build failed...
** Use your project *.s files? -&gt; then you have to build these with Gas, also included often. Or [http://www.quakesrc.org/forum/viewtopic.php?t=148&amp;highlight=assembler+quake+build remove these and substitute by c]
** Is your project for another compiler? (Darkplaces compiles on both Visual C and GCC for example, but some others only compile for Visual C)
** Ask at [http://forums.inside3d.com Inside3D]
* [[Test Engine]]

===Understanding the code structure===
This is a list of source files and a list of some of the things done in them.

*cl_ - client files (demo playback, input, temp entities)
**_demo - demo playback
**_input - keyboard input (higher level)
**_main - assorted client functions
**_parse - server command parsing
**_tent - temp entitie parsing and beam parsing

*sv_ - server files (physics, collision detection, movement)
**_main - general server functions
**_move - movement related functions like movestep and moretogoal
**_phys - physics functions, gravity etc
**_user - user/client related functions

*net_ - network files&lt;br&gt;
**basicly convert quake client/server packets to be sent over a transport protocal like tcp or ipx, as well as network server/client stuff

*pr_ - qc virtual machine (runs progs.dat)
**_cmds - builtin commands
**_exec - qc executing
**_edict - loading progs.dat and other edict functions

*gl_ - opengl drawing files
**_rsurf - map and brush drawing
**_warp - sky, water etc drawing
**_mesh - alias model drawing
**_model - map and model loading
**_rlight - dynamic lights
**_screen - statis bar, console etc drawing
**_sprite - sprite drawing
**_vidnt - video init functions, and other startup functions
**_rmain, _rmisc - general draw stuff, cvar registering
**_draw - texture loading
**_rpart (for engines that dont use qmb partices its r_part.c or something) - Particle system, physics and drawing

*snd_ and cd_ - sound files

*and the rest are just bits and pieces, such as zone does memory managment
**menu - drawing menu and stuff
**sbar - sbar higher level drawing (calls functions from screen to do the actual drawing)
**mathlib - assorted maths functions
**wad - wad file loading
**world - map stuff
**console - console text control (calls functions from gl_screen to draw)
**cvar - cvar functions
**common - common low level functons (string compairs, file stuff)
[[Category:DarkPlaces]]</text>
      <sha1>8dayfnatgx7et1d0ves2e7uah8rksto</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2923</id>
      <parentid>2922</parentid>
      <timestamp>2013-04-16T14:49:24Z</timestamp>
      <contributor>
        <username>Baker5</username>
        <id>30</id>
      </contributor>
      <comment>/* Editing your own Quake engine (2013) */</comment>
      <text xml:space="preserve" bytes="4762">===Editing your own Quake engine (2013)===

We are going to use FitzQuake Mark V's source code and Windows for this example as GLQuake's source code doesn't compile without many modifications.

What you need:

1. [http://sourceforge.net/projects/codeblocks/files/Binaries/10.05/Windows/codeblocks-10.05mingw-setup.exe CodeBlocks + MinGW] (75MB) or [http://www.microsoft.com/visualstudio/eng/downloads Visual Studio Express 2012] (5 GB).  Both are free.

2. [http://quake-1.com/docs/utils/fitzquake_mark_v_r9.zip FitzQuake Mark V source code] Decompress the source.zip included.

Visual Studio Express 2012: Open Fitzquake_Visual_Studio_2012.vcxproj and press F5 [or click Build-&gt;Build Solution] to compile + run.

CodeBlocks + MinGW: Open Fitzquake_CodeBlocks.cbp and press F9 (or click Build-&gt;Build and Run).

That's it, the Mark V source compiles out-of-the-box.  There are [http://forums.inside3d.com/viewforum.php?f=12 engine tutorials here] and [http://forums.inside3d.com/viewforum.php?f=3 an engine discussion forum here].

===Editing your own Quake engine===
* Get [http://www.mingw.org MinGW] or [http://msdn.microsoft.com/visualc/ buy Visual C++]
* Dowload whatever you want engine sources
* '''Suggestion''':
** [http://tomaz.quakesrc.org/q/files/Clean.zip CleanSrc] Simple and most likely to fit with general information about the Quake engine.
** [[TomazQuake]] [http://tomaz.quakesrc.org/q/ (web)] - Like CleanSrc it will fit with general information about engine development but with enhancements and extra features already added. Will build on Windows (Visual Studio).
** [[QMB]] [http://www.gluonporridge.net/QMB (web)] [//https://github.com/DrLabman/QMB (git)] - Moving away from the standard source layout, originally based on CleanSrc. Will build on Unix and Windows (GMingW).
** [[DarkPlaces]] [http://www.icculus.org/twilight/darkplaces/ (web)] - One of the most comprehensive feature sets. Unlikely to fit with general information about Quake engines. Better suited to experienced programers who want the features it offers.
** [[FuhQuake]] [http://www.fuhquake.net/ (web)] - Great starting point for QuakeWorld
* Unzip
* Open the *.dsw file (VC++) or the makefile (gcc/[http://www.mingw.org/ MinGW])
* Edit some files (VC IDE, Dev-C++ ide, [http://www.scintilla.org/SciTE.html SciTE], notepad,...)
* Recompile ( VC: build button, &quot;make&quot; command for gcc/mingw)
* If the build failed...
** Use your project *.s files? -&gt; then you have to build these with Gas, also included often. Or [http://www.quakesrc.org/forum/viewtopic.php?t=148&amp;highlight=assembler+quake+build remove these and substitute by c]
** Is your project for another compiler? (Darkplaces compiles on both Visual C and GCC for example, but some others only compile for Visual C)
** Ask at [http://forums.inside3d.com Inside3D]
* [[Test Engine]]

===Understanding the code structure===
This is a list of source files and a list of some of the things done in them.

*cl_ - client files (demo playback, input, temp entities)
**_demo - demo playback
**_input - keyboard input (higher level)
**_main - assorted client functions
**_parse - server command parsing
**_tent - temp entitie parsing and beam parsing

*sv_ - server files (physics, collision detection, movement)
**_main - general server functions
**_move - movement related functions like movestep and moretogoal
**_phys - physics functions, gravity etc
**_user - user/client related functions

*net_ - network files&lt;br&gt;
**basicly convert quake client/server packets to be sent over a transport protocal like tcp or ipx, as well as network server/client stuff

*pr_ - qc virtual machine (runs progs.dat)
**_cmds - builtin commands
**_exec - qc executing
**_edict - loading progs.dat and other edict functions

*gl_ - opengl drawing files
**_rsurf - map and brush drawing
**_warp - sky, water etc drawing
**_mesh - alias model drawing
**_model - map and model loading
**_rlight - dynamic lights
**_screen - statis bar, console etc drawing
**_sprite - sprite drawing
**_vidnt - video init functions, and other startup functions
**_rmain, _rmisc - general draw stuff, cvar registering
**_draw - texture loading
**_rpart (for engines that dont use qmb partices its r_part.c or something) - Particle system, physics and drawing

*snd_ and cd_ - sound files

*and the rest are just bits and pieces, such as zone does memory managment
**menu - drawing menu and stuff
**sbar - sbar higher level drawing (calls functions from screen to do the actual drawing)
**mathlib - assorted maths functions
**wad - wad file loading
**world - map stuff
**console - console text control (calls functions from gl_screen to draw)
**cvar - cvar functions
**common - common low level functons (string compairs, file stuff)
[[Category:DarkPlaces]]</text>
      <sha1>agl483k0c1paa9f8aesa7bt64oqboyc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Engine tutorials</title>
    <ns>0</ns>
    <id>50</id>
    <revision>
      <id>62</id>
      <timestamp>2007-10-30T18:23:52Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: ===Tutorials=== * [[Engine RoadMap]] * [[Improving Teamplay]] * [[Changing Graphics]] * [[Solved Bugs]] * [[New Console features]] * [[QuakeC implementations]] * [[Demos Editing]] * [[Othe...</comment>
      <text xml:space="preserve" bytes="419">===Tutorials===
* [[Engine RoadMap]]
* [[Improving Teamplay]]
* [[Changing Graphics]]
* [[Solved Bugs]]
* [[New Console features]]
* [[QuakeC implementations]]
* [[Demos Editing]]
* [[Others Tutorials]]

Note: Certain syntax in the code may conflict with wiki, and cause copy-paste problems.  Please
check the code carefully.

===See Also===
* [http://www.quakesrc.org/?Page=tutorials&amp;Dir=engine QuakeSrc.org tutorials]</text>
      <sha1>g8cmhml6l9b948tqyea0gwwnlht2l85</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1874</id>
      <parentid>62</parentid>
      <timestamp>2013-03-25T01:29:05Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="506">===Tutorials===
* [[Engine RoadMap]]
* [[Improving Teamplay]]
* [[Changing Graphics]]
* [[Solved Bugs]]
* [[New Console features]]
* [[QuakeC implementations]]
* [[Demos Editing]]
* [[Others Tutorials]]

Note: Certain syntax in the code may conflict with wiki, and cause copy-paste problems.  Please
check the code carefully. An ideal solution is to use the &quot;&lt;nowiki&gt;&lt;nowiki&gt;&lt;/nowiki&gt;&quot; tag to format pasted code.

===See Also===
* [http://www.quakesrc.org/?Page=tutorials&amp;Dir=engine QuakeSrc.org tutorials]</text>
      <sha1>7z5wulzurvog7vktmmtrobe7ul3v9sc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2926</id>
      <parentid>1874</parentid>
      <timestamp>2013-04-16T15:05:15Z</timestamp>
      <contributor>
        <username>Baker5</username>
        <id>30</id>
      </contributor>
      <comment>/* See Also */</comment>
      <text xml:space="preserve" bytes="575">===Tutorials===
* [[Engine RoadMap]]
* [[Improving Teamplay]]
* [[Changing Graphics]]
* [[Solved Bugs]]
* [[New Console features]]
* [[QuakeC implementations]]
* [[Demos Editing]]
* [[Others Tutorials]]

Note: Certain syntax in the code may conflict with wiki, and cause copy-paste problems.  Please
check the code carefully. An ideal solution is to use the &quot;&lt;nowiki&gt;&lt;nowiki&gt;&lt;/nowiki&gt;&quot; tag to format pasted code.

===See Also===
* [http://forums.inside3d.com/viewforum.php?f=12 Inside3D tutorials]
* [http://www.quake-1.com/docs/quakesrc.org/ Good Old QuakeSrc.org tutorials]</text>
      <sha1>clja88ei439tgure61axiaq1dbzzq3o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Engines</title>
    <ns>0</ns>
    <id>360</id>
    <revision>
      <id>589</id>
      <timestamp>2008-04-11T02:34:40Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: DarkPlaces FTEQW Makaqu</comment>
      <text xml:space="preserve" bytes="23">DarkPlaces
FTEQW
Makaqu</text>
      <sha1>e8wpivyn6bgujnfpy57ex4yffmgy4iu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>590</id>
      <parentid>589</parentid>
      <timestamp>2008-04-11T02:35:28Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="25">DarkPlaces

FTEQW

Makaqu</text>
      <sha1>qf7up5069simvw9xl3ggp3mkt92b8f6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>802</id>
      <parentid>590</parentid>
      <timestamp>2008-05-09T17:33:27Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="58">[[DarkPlaces]]
[[FTEQW]]
[[Makaqu]]
[[JoeQuake]]
[[Qrack]]</text>
      <sha1>qlsazh70vm3mnc2w9tfna2s7uzhnva7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>804</id>
      <parentid>802</parentid>
      <timestamp>2008-05-09T17:33:37Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="62">[[DarkPlaces]]

[[FTEQW]]

[[Makaqu]]

[[JoeQuake]]

[[Qrack]]</text>
      <sha1>pe8o0xrutxbgv6qlrqgosltytm0qdpx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>806</id>
      <parentid>804</parentid>
      <timestamp>2008-05-09T17:36:03Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="80">[[DarkPlaces]]

[[FTEQW]]

[[Makaqu]]

[[JoeQuake]]

[[Qrack]]

ZQuake

FuhQuake</text>
      <sha1>ir5bztpk6gzfcmiuq0ccapwa8kpzoxm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>807</id>
      <parentid>806</parentid>
      <timestamp>2008-05-09T17:36:17Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="88">[[DarkPlaces]]

[[FTEQW]]

[[Makaqu]]

[[JoeQuake]]

[[Qrack]]

[[ZQuake]]

[[FuhQuake]]</text>
      <sha1>h6jh90m6ne9wty713tl1l3nytezwl30</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>815</id>
      <parentid>807</parentid>
      <timestamp>2008-05-12T04:46:11Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <text xml:space="preserve" bytes="173">This should be a page describing what engines are, how they differ from mods and how to install and use them. Save the promotional listing for automatic wiki categorization.</text>
      <sha1>azyrvuapvtnwxlqer8ocavha8xgcqyj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>824</id>
      <parentid>815</parentid>
      <timestamp>2008-05-14T23:54:12Z</timestamp>
      <contributor>
        <ip>74.76.3.9</ip>
      </contributor>
      <text xml:space="preserve" bytes="304">This should be a page describing what engines are, how they differ from mods and how to install and use them. Save the promotional listing for automatic wiki categorization.

==Engine list==

* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://telejano.berlios.de/ Telejano]
* [[TomazQuake]]</text>
      <sha1>dzpr2l08r8cxtkcx651mifupe88ne9k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>825</id>
      <parentid>824</parentid>
      <timestamp>2008-05-14T23:55:49Z</timestamp>
      <contributor>
        <ip>74.76.3.9</ip>
      </contributor>
      <text xml:space="preserve" bytes="380">This should be a page describing what engines are, how they differ from mods and how to install and use them. Save the promotional listing for automatic wiki categorization.

Engine mods are made from customizing the original id Quake source code...

==Engine list==

* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://telejano.berlios.de/ Telejano]
* [[TomazQuake]]</text>
      <sha1>0kmfrfu1vtjfhfhi65gh013y09kn7z4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>826</id>
      <parentid>825</parentid>
      <timestamp>2008-05-14T23:56:31Z</timestamp>
      <contributor>
        <ip>74.76.3.9</ip>
      </contributor>
      <text xml:space="preserve" bytes="205">Engine mods are made from customizing the original id Quake source code...

==Engine list==

* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://telejano.berlios.de/ Telejano]
* [[TomazQuake]]</text>
      <sha1>mfhupdjybm216erh14h01970fpuriu7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>828</id>
      <parentid>826</parentid>
      <timestamp>2008-05-15T00:00:19Z</timestamp>
      <contributor>
        <ip>74.76.3.9</ip>
      </contributor>
      <text xml:space="preserve" bytes="504">Engine mods are made from customizing the original id Quake source code. There quite a few and each one has there different features, fixes, additions, and changes to the origin commercial source. Some require very little to do on your part to make them work with Quake. This section will help people step by step to get, install, and run these Quake engine replacements...

==Engine list==

* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://telejano.berlios.de/ Telejano]
* [[TomazQuake]]</text>
      <sha1>4ps22oyburw6yvbxmw18rrw332inly3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>829</id>
      <parentid>828</parentid>
      <timestamp>2008-05-15T00:02:01Z</timestamp>
      <contributor>
        <ip>74.76.3.9</ip>
      </contributor>
      <text xml:space="preserve" bytes="506">..Engine mods are made from customizing the original id Quake source code. There quite a few and each one has there different features, fixes, additions, and changes to the origin commercial source. Some require very little to do on your part to make them work with Quake. This section will help people step by step to get, install, and run these Quake engine replacements...

==Engine list==

* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://telejano.berlios.de/ Telejano]
* [[TomazQuake]]</text>
      <sha1>kqx0bbdzuj4q3z0qwawv7cwkaums34p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>831</id>
      <parentid>829</parentid>
      <timestamp>2008-05-15T12:43:58Z</timestamp>
      <contributor>
        <ip>151.141.64.36</ip>
      </contributor>
      <comment>/* Engine list */</comment>
      <text xml:space="preserve" bytes="522">..Engine mods are made from customizing the original id Quake source code. There quite a few and each one has there different features, fixes, additions, and changes to the origin commercial source. Some require very little to do on your part to make them work with Quake. This section will help people step by step to get, install, and run these Quake engine replacements...

==Engine list==

* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://telejano.berlios.de/ Telejano]
* [[TomazQuake]]
* [[FitzQuake]]</text>
      <sha1>p03t8sh1wesxinb5z86bs7lbyyaau7d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>832</id>
      <parentid>831</parentid>
      <timestamp>2008-05-15T17:20:53Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="560">..Engine mods are made from customizing the original id Quake source code. There quite a few and each one has there different features, fixes, additions, and changes to the origin commercial source. Some require very little to do on your part to make them work with Quake. This section will help people step by step to get, install, and run these Quake engine replacements...

==Engine list==

* [[Aguirre]]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [[FitzQuake]]
* [[Makaqu]]
* [[Q2K4]]
* [http://telejano.berlios.de/ Telejano]
* [[TomazQuake]]</text>
      <sha1>ceiekzwizloobyujwn8tkiidlbuwacy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>833</id>
      <parentid>832</parentid>
      <timestamp>2008-05-15T17:31:52Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="678">..Engine mods are made from customizing the original id Quake source code. There quite a few and each one has there different features, fixes, additions, and changes to the origin commercial source. Some require very little to do on your part to make them work with Quake. This section will help people step by step to get, install, and run these Quake engine replacements...

==Engine list==

* [[Aguirre]]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://www.celephais.net/fitzquake/ FitzQuake]
* [[JoeQuake]]
* [[Makaqu]]
* [[MHQuake]]
* [[Proquake]]
* [[Q2K4]]
* [[QMB]]
* [[Qrack]]
* [http://telejano.berlios.de/ Telejano]
* [[TomazQuake]]
* [[Tyr-glquake]]</text>
      <sha1>2i6uzagxqlmh9p209iwtuhxyhg1sjtp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>834</id>
      <parentid>833</parentid>
      <timestamp>2008-05-15T17:37:06Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="722">..Engine mods are made from customizing the original id Quake source code. There quite a few and each one has there different features, fixes, additions, and changes to the origin commercial source. Some require very little to do on your part to make them work with Quake. This section will help people step by step to get, install, and run these Quake engine replacements...

==Engine list==

* [[Aguirre]]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://www.celephais.net/fitzquake/ FitzQuake]
* [[JoeQuake]]
* [[Makaqu]]
* [[MHQuake]]
* [[Proquake]]
* [[Q2K4]]
* [[QMB]]
* [[Qrack]]
* [http://telejano.berlios.de/ Telejano]
* [[TomazQuake]]
* [[Tyr-glquake]]
* [http://entar.quakedev.com/ Vengeance r2]</text>
      <sha1>ad7aunstgk15qus18qkc4t7u045lpha</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>842</id>
      <parentid>834</parentid>
      <timestamp>2008-05-16T10:33:58Z</timestamp>
      <contributor>
        <username>DrLabman</username>
        <id>11</id>
      </contributor>
      <minor/>
      <comment>Updated qmb link</comment>
      <text xml:space="preserve" bytes="755">..Engine mods are made from customizing the original id Quake source code. There quite a few and each one has there different features, fixes, additions, and changes to the origin commercial source. Some require very little to do on your part to make them work with Quake. This section will help people step by step to get, install, and run these Quake engine replacements...

==Engine list==

* [[Aguirre]]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://www.celephais.net/fitzquake/ FitzQuake]
* [[JoeQuake]]
* [[Makaqu]]
* [[MHQuake]]
* [[Proquake]]
* [[Q2K4]]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [[Qrack]]
* [http://telejano.berlios.de/ Telejano]
* [[TomazQuake]]
* [[Tyr-glquake]]
* [http://entar.quakedev.com/ Vengeance r2]</text>
      <sha1>fo97m4en6xi4febkp3170risgwesctj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>843</id>
      <parentid>842</parentid>
      <timestamp>2008-05-16T10:42:50Z</timestamp>
      <contributor>
        <username>DrLabman</username>
        <id>11</id>
      </contributor>
      <comment>Fixed qrack's link</comment>
      <text xml:space="preserve" bytes="784">..Engine mods are made from customizing the original id Quake source code. There quite a few and each one has there different features, fixes, additions, and changes to the origin commercial source. Some require very little to do on your part to make them work with Quake. This section will help people step by step to get, install, and run these Quake engine replacements...

==Engine list==

* [[Aguirre]]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://www.celephais.net/fitzquake/ FitzQuake]
* [[JoeQuake]]
* [[Makaqu]]
* [[MHQuake]]
* [[Proquake]]
* [[Q2K4]]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://telejano.berlios.de/ Telejano]
* [[TomazQuake]]
* [[Tyr-glquake]]
* [http://entar.quakedev.com/ Vengeance r2]</text>
      <sha1>1zoiiz1auuu89c89cpainjsruxbdehq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>967</id>
      <parentid>843</parentid>
      <timestamp>2008-12-17T16:38:50Z</timestamp>
      <contributor>
        <ip>82.250.171.195</ip>
      </contributor>
      <comment>/* Engine list */  ezQuake</comment>
      <text xml:space="preserve" bytes="828">..Engine mods are made from customizing the original id Quake source code. There quite a few and each one has there different features, fixes, additions, and changes to the origin commercial source. Some require very little to do on your part to make them work with Quake. This section will help people step by step to get, install, and run these Quake engine replacements...

==Engine list==

* [[Aguirre]]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://ezquake.sourceforge.net/ ezQuake]
* [http://www.celephais.net/fitzquake/ FitzQuake]
* [[JoeQuake]]
* [[Makaqu]]
* [[MHQuake]]
* [[Proquake]]
* [[Q2K4]]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://telejano.berlios.de/ Telejano]
* [[TomazQuake]]
* [[Tyr-glquake]]
* [http://entar.quakedev.com/ Vengeance r2]</text>
      <sha1>50sqbsdxgjgojvc0kt0nrtpxt5fbqnu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>971</id>
      <parentid>967</parentid>
      <timestamp>2009-02-25T07:38:50Z</timestamp>
      <contributor>
        <ip>83.24.160.187</ip>
      </contributor>
      <comment>WTF where was that?!</comment>
      <text xml:space="preserve" bytes="843">..Engine mods are made from customizing the original id Quake source code. There quite a few and each one has there different features, fixes, additions, and changes to the origin commercial source. Some require very little to do on your part to make them work with Quake. This section will help people step by step to get, install, and run these Quake engine replacements...

==Engine list==

* [[Aguirre]]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://ezquake.sourceforge.net/ ezQuake]
* [http://www.celephais.net/fitzquake/ FitzQuake]
* [[JoeQuake]]
* [[Makaqu]]
* [[MHQuake]]
* [[Proquake]]
* [[Q2K4]]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://telejano.berlios.de/ Telejano]
* [[Tenebrae]]
* [[TomazQuake]]
* [[Tyr-glquake]]
* [http://entar.quakedev.com/ Vengeance r2]</text>
      <sha1>0x4i6d0t8kl1hdhs6i7j1cr4jepn1ut</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>974</id>
      <parentid>971</parentid>
      <timestamp>2009-03-22T03:01:45Z</timestamp>
      <contributor>
        <ip>64.123.239.223</ip>
      </contributor>
      <text xml:space="preserve" bytes="841">Engine mods are made from customizing the original id Quake source code. There quite a few and each one has there different features, fixes, additions, and changes to the origin commercial source. Some require very little to do on your part to make them work with Quake. This section will help people step by step to get, install, and run these Quake engine replacements...

==Engine list==

* [[Aguirre]]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://ezquake.sourceforge.net/ ezQuake]
* [http://www.celephais.net/fitzquake/ FitzQuake]
* [[JoeQuake]]
* [[Makaqu]]
* [[MHQuake]]
* [[Proquake]]
* [[Q2K4]]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://telejano.berlios.de/ Telejano]
* [[Tenebrae]]
* [[TomazQuake]]
* [[Tyr-glquake]]
* [http://entar.quakedev.com/ Vengeance r2]</text>
      <sha1>sgpykev38tj7zr1oy33swe901v2t2fz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>981</id>
      <parentid>974</parentid>
      <timestamp>2009-04-17T23:21:45Z</timestamp>
      <contributor>
        <ip>88.70.232.110</ip>
      </contributor>
      <comment>/* Engine list */ Missing links added</comment>
      <text xml:space="preserve" bytes="1206">Engine mods are made from customizing the original id Quake source code. There quite a few and each one has there different features, fixes, additions, and changes to the origin commercial source. Some require very little to do on your part to make them work with Quake. This section will help people step by step to get, install, and run these Quake engine replacements...

==Engine list==

* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://ezquake.sourceforge.net/ ezQuake]
* [http://www.celephais.net/fitzquake/ FitzQuake]
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [http://mhquake.blogspot.com/ MHQuake]
* [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]</text>
      <sha1>huwrthgtg52x1t0ipfxplbucofdu0oc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1037</id>
      <parentid>981</parentid>
      <timestamp>2009-07-05T08:28:47Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>Added info about what an engine is, added info about the official &amp; semi-official engines (QUAKE.EXE, WinQuake, GLQuake, and the Unix versions), and added comments about ezQuake and FitzQuake.</comment>
      <text xml:space="preserve" bytes="6666">The game engine is the program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

===QUAKE.EXE===
The first official engine found on every Quake CD and in the shareware distribution is QUAKE.EXE. If your computer was built after 1997, you probably have no need for QUAKE.EXE.

This engine only runs under MS-DOS, because it expects to have direct access to your computer's hardware, which is something modern operating systems like Windows and Linux don't allow. So, to run the official engine, your computer must boot from the Quake CD, or you must boot into DOS or one of the DOS-based versions of Windows (Windows 95/98/Me) and then run QUAKE.EXE from the command line. The DOS-like command console in Windows NT/2000/XP/2003/Vista won't work for this.

QUAKE.EXE provides software-based graphics rendering only; the graphics hardware will not provide accelerated rendering (using its own CPU), or any texture or lighting features. It's all done in the software. It's still fast, but slows down noticeably at higher resolutions and when there's a lot of action.

Official distributions:
* v1.06 of QUAKE.EXE (Oct. 1996) is contained in [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip quake106.zip]. This is the full shareware distribution of Quake, includes all the Episode 1 files (ID1\pak0.pak), not just the engine.
* v1.08 of QUAKE.EXE (Oct. 1997) fixes some minor bugs in 1.06, and is in [ftp://ftp.idsoftware.com/idstuff/quake/quake108.zip quake108.zip]. This zip contains the updated QUAKE.EXE engine only.

===WinQuake===
id Software released a replacement for QUAKE.EXE called WinQuake (WINQUAKE.EXE). Instead of being for DOS, it is for any version of Windows (95/98/Me/NT/XP/2003/Vista). It's the first, most basic and most widely compatible Quake engine for Windows.

WinQuake accesses your computer's hardware through Windows APIs. It includes support for DirectX 3.0 and up, and VESA VBE video modes, if available. It looks and runs just like the DOS engine but has more video modes which you can access via the Options menu in the game. It also lets you choose between running full-screen or in a window. It removes support for serial and modem-to-modem networking.

Official distribution:
* v1.00 of WinQuake (Quake 1.09; March 1997) is contained, along with support files, in [ftp://ftp.idsoftware.com/idstuff/quake/wq100.zip wq100.zip].

===GLQuake===
One of Quake's original developers created GLQuake, which provides hardware-accelerated graphics using OpenGL APIs. It's known to be buggy.

GLQuake has one big usability problem: The game's built-in brightness/gamma setting doesn't do anything, and the visuals tend to be way too dark unless you first run a program to increase your display adapter's gamma setting (which then makes everything else appear too bright). This isn't a showstopper, but it can be inconvenient. Also, the video mode can only be changed at the command line, not in-game.

GLQuake is official, but is not supported by id Software. It runs on DOS, any version of Windows, or Linux. It is said to require the 'registered' Quake (that is, with ID1\pak1.pak present), but it will actually run on the shareware version, possibly with quirky startup behavior.

Official distributions:
* v0.97 of GLQuake (Quake 1.09; November 1997) is in [ftp://ftp.idsoftware.com/idstuff/unsup/glq1114.exe glq1114.exe]. This is an installer app for DOS or Windows. It will prompt you whether to install a 3dfx driver; don't do this unless you want the engine to be dependent on having a 3dfx-based graphics card's Glide drivers already installed.

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z quake1.09-sparc-sun-solaris2.5.1.tar.Z].
* GLQuake 0.97 for Linux 2.0 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz glquake-0.97-i386-unknown-linux2.0.tar.gz].
* SVGALib Quake for Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz quake.x11-1.0-i386-unknown-linux2.0.tar.gz]. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for something that will work with a modern system.

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [http://www.celephais.net/fitzquake/ FitzQuake] - probably the most widely compatible OpenGL engine for Windows.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [http://mhquake.blogspot.com/ MHQuake]
* [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]</text>
      <sha1>9d3pze63rkdh9w1k0jfx04sl7krjl4g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1038</id>
      <parentid>1037</parentid>
      <timestamp>2009-07-05T08:50:19Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>/* QUAKE.EXE */ added detail about networking and made a minor copy edit.</comment>
      <text xml:space="preserve" bytes="6974">The game engine is the program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

===QUAKE.EXE===
The first official engine is QUAKE.EXE. It is found on every Quake CD and in the shareware distribution. If your computer was built after 1997, you probably have no need for QUAKE.EXE.

This engine only runs under MS-DOS, because it expects to have direct access to your computer's hardware, which is something modern operating systems like Windows and Linux don't allow. So, to run the official engine, your computer must boot from the Quake CD, or you must boot into DOS or one of the DOS-based versions of Windows (Windows 95/98/Me) and then run QUAKE.EXE from the command line. The DOS-like command console in Windows NT/2000/XP/2003/Vista won't work for this.

QUAKE.EXE provides software-based graphics rendering only; the graphics hardware will not provide accelerated rendering (using its own CPU), or any texture or lighting features. It's all done in the software. It's still fast, but slows down noticeably at higher resolutions and when there's a lot of action.

This engine's multiplayer networking capabilities are limited to serial cable (direct), modem-to-modem (direct), or on a LAN via TCP/IP or IPX (Novell NetWare protocol). LAN play is highly affected by ping &amp; latency between the clients and server. This was greatly improved in the QuakeWorld engine.

Official distributions:
* v1.06 of QUAKE.EXE (Oct. 1996) is contained in [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip quake106.zip]. This is the full shareware distribution of Quake, includes all the Episode 1 files (ID1\pak0.pak), not just the engine.
* v1.08 of QUAKE.EXE (Oct. 1997) fixes some minor bugs in 1.06, and is in [ftp://ftp.idsoftware.com/idstuff/quake/quake108.zip quake108.zip]. This zip contains the updated QUAKE.EXE engine only.

===WinQuake===
id Software released a replacement for QUAKE.EXE called WinQuake (WINQUAKE.EXE). Instead of being for DOS, it is for any version of Windows (95/98/Me/NT/XP/2003/Vista). It's the first, most basic and most widely compatible Quake engine for Windows.

WinQuake accesses your computer's hardware through Windows APIs. It includes support for DirectX 3.0 and up, and VESA VBE video modes, if available. It looks and runs just like the DOS engine but has more video modes which you can access via the Options menu in the game. It also lets you choose between running full-screen or in a window. It removes support for serial and modem-to-modem networking.

Official distribution:
* v1.00 of WinQuake (Quake 1.09; March 1997) is contained, along with support files, in [ftp://ftp.idsoftware.com/idstuff/quake/wq100.zip wq100.zip].

===GLQuake===
One of Quake's original developers created GLQuake, which provides hardware-accelerated graphics using OpenGL APIs. It's known to be buggy.

GLQuake has one big usability problem: The game's built-in brightness/gamma setting doesn't do anything, and the visuals tend to be way too dark unless you first run a program to increase your display adapter's gamma setting (which then makes everything else appear too bright). This isn't a showstopper, but it can be inconvenient. Also, the video mode can only be changed at the command line, not in-game.

GLQuake is official, but is not supported by id Software. It runs on DOS, any version of Windows, or Linux. It is said to require the 'registered' Quake (that is, with ID1\pak1.pak present), but it will actually run on the shareware version, possibly with quirky startup behavior.

Official distributions:
* v0.97 of GLQuake (Quake 1.09; November 1997) is in [ftp://ftp.idsoftware.com/idstuff/unsup/glq1114.exe glq1114.exe]. This is an installer app for DOS or Windows. It will prompt you whether to install a 3dfx driver; don't do this unless you want the engine to be dependent on having a 3dfx-based graphics card's Glide drivers already installed.

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z quake1.09-sparc-sun-solaris2.5.1.tar.Z].
* GLQuake 0.97 for Linux 2.0 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz glquake-0.97-i386-unknown-linux2.0.tar.gz].
* SVGALib Quake for Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz quake.x11-1.0-i386-unknown-linux2.0.tar.gz]. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for something that will work with a modern system.

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [http://www.celephais.net/fitzquake/ FitzQuake] - probably the most widely compatible OpenGL engine for Windows.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [http://mhquake.blogspot.com/ MHQuake]
* [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]</text>
      <sha1>2wmncjmuq7bzw4ezsw8j0i1m3gn21hu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1039</id>
      <parentid>1038</parentid>
      <timestamp>2009-07-05T09:03:49Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>/* Official engines */ added info about Mac OS engines</comment>
      <text xml:space="preserve" bytes="7527">The game engine is the program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

===QUAKE.EXE===
The first official engine is QUAKE.EXE. It is found on every Quake CD and in the shareware distribution. If your computer was built after 1997, you probably have no need for QUAKE.EXE.

This engine only runs under MS-DOS, because it expects to have direct access to your computer's hardware, which is something modern operating systems like Windows and Linux don't allow. So, to run the official engine, your computer must boot from the Quake CD, or you must boot into DOS or one of the DOS-based versions of Windows (Windows 95/98/Me) and then run QUAKE.EXE from the command line. The DOS-like command console in Windows NT/2000/XP/2003/Vista won't work for this.

QUAKE.EXE provides software-based graphics rendering only; the graphics hardware will not provide accelerated rendering (using its own CPU), or any texture or lighting features. It's all done in the software. It's still fast, but slows down noticeably at higher resolutions and when there's a lot of action.

This engine's multiplayer networking capabilities are limited to serial cable (direct), modem-to-modem (direct), or on a LAN via TCP/IP or IPX (Novell NetWare protocol). LAN play is highly affected by ping &amp; latency between the clients and server. This was greatly improved in the QuakeWorld engine.

Official distributions:
* v1.06 of QUAKE.EXE (Oct. 1996) is contained in [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip quake106.zip]. This is the full shareware distribution of Quake, includes all the Episode 1 files (ID1\pak0.pak), not just the engine.
* v1.08 of QUAKE.EXE (Oct. 1997) fixes some minor bugs in 1.06, and is in [ftp://ftp.idsoftware.com/idstuff/quake/quake108.zip quake108.zip]. This zip contains the updated QUAKE.EXE engine only.

===WinQuake===
id Software released a replacement for QUAKE.EXE called WinQuake (WINQUAKE.EXE). Instead of being for DOS, it is for any version of Windows (95/98/Me/NT/XP/2003/Vista). It's the first, most basic and most widely compatible Quake engine for Windows.

WinQuake accesses your computer's hardware through Windows APIs. It includes support for DirectX 3.0 and up, and VESA VBE video modes, if available. It looks and runs just like the DOS engine but has more video modes which you can access via the Options menu in the game. It also lets you choose between running full-screen or in a window. It removes support for serial and modem-to-modem networking.

Official distribution:
* v1.00 of WinQuake (Quake 1.09; March 1997) is contained, along with support files, in [ftp://ftp.idsoftware.com/idstuff/quake/wq100.zip wq100.zip].

===GLQuake===
One of Quake's original developers created GLQuake, which provides hardware-accelerated graphics using OpenGL APIs. It's known to be buggy.

GLQuake has one big usability problem: The game's built-in brightness/gamma setting doesn't do anything, and the visuals tend to be way too dark unless you first run a program to increase your display adapter's gamma setting (which then makes everything else appear too bright). This isn't a showstopper, but it can be inconvenient. Also, the video mode can only be changed at the command line, not in-game.

GLQuake is official, but is not supported by id Software. It runs on DOS, any version of Windows, or Linux. It is said to require the 'registered' Quake (that is, with ID1\pak1.pak present), but it will actually run on the shareware version, possibly with quirky startup behavior.

Official distributions:
* v0.97 of GLQuake (Quake 1.09; November 1997) is in [ftp://ftp.idsoftware.com/idstuff/unsup/glq1114.exe glq1114.exe]. This is an installer app for DOS or Windows. It will prompt you whether to install a 3dfx driver; don't do this unless you want the engine to be dependent on having a 3dfx-based graphics card's Glide drivers already installed.

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, Fruitz of Dojo: http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z quake1.09-sparc-sun-solaris2.5.1.tar.Z].
* GLQuake 0.97 for Linux 2.0 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz glquake-0.97-i386-unknown-linux2.0.tar.gz].
* SVGALib Quake for Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz quake.x11-1.0-i386-unknown-linux2.0.tar.gz]. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for something that will work with a modern system.

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [http://www.celephais.net/fitzquake/ FitzQuake] - probably the most widely compatible OpenGL engine for Windows.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [http://mhquake.blogspot.com/ MHQuake]
* [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]</text>
      <sha1>n0t88yejbjkvwnn5sc5caox46cbsyp3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1040</id>
      <parentid>1039</parentid>
      <timestamp>2009-07-05T09:05:51Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>Added link to Wikipedia</comment>
      <text xml:space="preserve" bytes="7723">The game engine is the program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network.

Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

===QUAKE.EXE===
The first official engine is QUAKE.EXE. It is found on every Quake CD and in the shareware distribution. If your computer was built after 1997, you probably have no need for QUAKE.EXE.

This engine only runs under MS-DOS, because it expects to have direct access to your computer's hardware, which is something modern operating systems like Windows and Linux don't allow. So, to run the official engine, your computer must boot from the Quake CD, or you must boot into DOS or one of the DOS-based versions of Windows (Windows 95/98/Me) and then run QUAKE.EXE from the command line. The DOS-like command console in Windows NT/2000/XP/2003/Vista won't work for this.

QUAKE.EXE provides software-based graphics rendering only; the graphics hardware will not provide accelerated rendering (using its own CPU), or any texture or lighting features. It's all done in the software. It's still fast, but slows down noticeably at higher resolutions and when there's a lot of action.

This engine's multiplayer networking capabilities are limited to serial cable (direct), modem-to-modem (direct), or on a LAN via TCP/IP or IPX (Novell NetWare protocol). LAN play is highly affected by ping &amp; latency between the clients and server. This was greatly improved in the QuakeWorld engine.

Official distributions:
* v1.06 of QUAKE.EXE (Oct. 1996) is contained in [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip quake106.zip]. This is the full shareware distribution of Quake, includes all the Episode 1 files (ID1\pak0.pak), not just the engine.
* v1.08 of QUAKE.EXE (Oct. 1997) fixes some minor bugs in 1.06, and is in [ftp://ftp.idsoftware.com/idstuff/quake/quake108.zip quake108.zip]. This zip contains the updated QUAKE.EXE engine only.

===WinQuake===
id Software released a replacement for QUAKE.EXE called WinQuake (WINQUAKE.EXE). Instead of being for DOS, it is for any version of Windows (95/98/Me/NT/XP/2003/Vista). It's the first, most basic and most widely compatible Quake engine for Windows.

WinQuake accesses your computer's hardware through Windows APIs. It includes support for DirectX 3.0 and up, and VESA VBE video modes, if available. It looks and runs just like the DOS engine but has more video modes which you can access via the Options menu in the game. It also lets you choose between running full-screen or in a window. It removes support for serial and modem-to-modem networking.

Official distribution:
* v1.00 of WinQuake (Quake 1.09; March 1997) is contained, along with support files, in [ftp://ftp.idsoftware.com/idstuff/quake/wq100.zip wq100.zip].

===GLQuake===
One of Quake's original developers created GLQuake, which provides hardware-accelerated graphics using OpenGL APIs. It's known to be buggy.

GLQuake has one big usability problem: The game's built-in brightness/gamma setting doesn't do anything, and the visuals tend to be way too dark unless you first run a program to increase your display adapter's gamma setting (which then makes everything else appear too bright). This isn't a showstopper, but it can be inconvenient. Also, the video mode can only be changed at the command line, not in-game.

GLQuake is official, but is not supported by id Software. It runs on DOS, any version of Windows, or Linux. It is said to require the 'registered' Quake (that is, with ID1\pak1.pak present), but it will actually run on the shareware version, possibly with quirky startup behavior.

Official distributions:
* v0.97 of GLQuake (Quake 1.09; November 1997) is in [ftp://ftp.idsoftware.com/idstuff/unsup/glq1114.exe glq1114.exe]. This is an installer app for DOS or Windows. It will prompt you whether to install a 3dfx driver; don't do this unless you want the engine to be dependent on having a 3dfx-based graphics card's Glide drivers already installed.

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, Fruitz of Dojo: http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z quake1.09-sparc-sun-solaris2.5.1.tar.Z].
* GLQuake 0.97 for Linux 2.0 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz glquake-0.97-i386-unknown-linux2.0.tar.gz].
* SVGALib Quake for Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz quake.x11-1.0-i386-unknown-linux2.0.tar.gz]. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for something that will work with a modern system.

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [http://www.celephais.net/fitzquake/ FitzQuake] - probably the most widely compatible OpenGL engine for Windows.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [http://mhquake.blogspot.com/ MHQuake]
* [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]</text>
      <sha1>buaq30vx1xouonm4ncqalyzdctwyf23</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1042</id>
      <parentid>1040</parentid>
      <timestamp>2009-07-05T09:37:11Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <minor/>
      <comment>/* QUAKE.EXE */ clarify it's for PC</comment>
      <text xml:space="preserve" bytes="7756">The game engine is the program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network.

Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

===QUAKE.EXE===
The first official engine is QUAKE.EXE. It is found on the official Quake CD-ROM (for the PC) and in the official shareware distribution. If your computer was built after 1997, you probably have no need for QUAKE.EXE.

This engine only runs under MS-DOS, because it expects to have direct access to your computer's hardware, which is something modern operating systems like Windows and Linux don't allow. So, to run the official engine, your computer must boot from the Quake CD, or you must boot into DOS or one of the DOS-based versions of Windows (Windows 95/98/Me) and then run QUAKE.EXE from the command line. The DOS-like command console in Windows NT/2000/XP/2003/Vista won't work for this.

QUAKE.EXE provides software-based graphics rendering only; the graphics hardware will not provide accelerated rendering (using its own CPU), or any texture or lighting features. It's all done in the software. It's still fast, but slows down noticeably at higher resolutions and when there's a lot of action.

This engine's multiplayer networking capabilities are limited to serial cable (direct), modem-to-modem (direct), or on a LAN via TCP/IP or IPX (Novell NetWare protocol). LAN play is highly affected by ping &amp; latency between the clients and server. This was greatly improved in the QuakeWorld engine.

Official distributions:
* v1.06 of QUAKE.EXE (Oct. 1996) is contained in [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip quake106.zip]. This is the full shareware distribution of Quake, includes all the Episode 1 files (ID1\pak0.pak), not just the engine.
* v1.08 of QUAKE.EXE (Oct. 1997) fixes some minor bugs in 1.06, and is in [ftp://ftp.idsoftware.com/idstuff/quake/quake108.zip quake108.zip]. This zip contains the updated QUAKE.EXE engine only.

===WinQuake===
id Software released a replacement for QUAKE.EXE called WinQuake (WINQUAKE.EXE). Instead of being for DOS, it is for any version of Windows (95/98/Me/NT/XP/2003/Vista). It's the first, most basic and most widely compatible Quake engine for Windows.

WinQuake accesses your computer's hardware through Windows APIs. It includes support for DirectX 3.0 and up, and VESA VBE video modes, if available. It looks and runs just like the DOS engine but has more video modes which you can access via the Options menu in the game. It also lets you choose between running full-screen or in a window. It removes support for serial and modem-to-modem networking.

Official distribution:
* v1.00 of WinQuake (Quake 1.09; March 1997) is contained, along with support files, in [ftp://ftp.idsoftware.com/idstuff/quake/wq100.zip wq100.zip].

===GLQuake===
One of Quake's original developers created GLQuake, which provides hardware-accelerated graphics using OpenGL APIs. It's known to be buggy.

GLQuake has one big usability problem: The game's built-in brightness/gamma setting doesn't do anything, and the visuals tend to be way too dark unless you first run a program to increase your display adapter's gamma setting (which then makes everything else appear too bright). This isn't a showstopper, but it can be inconvenient. Also, the video mode can only be changed at the command line, not in-game.

GLQuake is official, but is not supported by id Software. It runs on DOS, any version of Windows, or Linux. It is said to require the 'registered' Quake (that is, with ID1\pak1.pak present), but it will actually run on the shareware version, possibly with quirky startup behavior.

Official distributions:
* v0.97 of GLQuake (Quake 1.09; November 1997) is in [ftp://ftp.idsoftware.com/idstuff/unsup/glq1114.exe glq1114.exe]. This is an installer app for DOS or Windows. It will prompt you whether to install a 3dfx driver; don't do this unless you want the engine to be dependent on having a 3dfx-based graphics card's Glide drivers already installed.

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, Fruitz of Dojo: http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z quake1.09-sparc-sun-solaris2.5.1.tar.Z].
* GLQuake 0.97 for Linux 2.0 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz glquake-0.97-i386-unknown-linux2.0.tar.gz].
* SVGALib Quake for Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz quake.x11-1.0-i386-unknown-linux2.0.tar.gz]. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for something that will work with a modern system.

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [http://www.celephais.net/fitzquake/ FitzQuake] - probably the most widely compatible OpenGL engine for Windows.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [http://mhquake.blogspot.com/ MHQuake]
* [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]</text>
      <sha1>f15sb7yivkqb3xl98k8lvx9swsqa1ao</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1045</id>
      <parentid>1042</parentid>
      <timestamp>2009-07-06T04:49:40Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <minor/>
      <comment>/* QUAKE.EXE */ minor additions</comment>
      <text xml:space="preserve" bytes="7961">The game engine is the program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network.

Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

===QUAKE.EXE===
The first official engine is QUAKE.EXE, sometimes informally referred to as DOS Quake. It is found on the official Quake CD-ROM (for the PC) and in the official shareware distribution. If your computer was built after 1997, you probably have no need for QUAKE.EXE.

This engine only runs under MS-DOS, because it expects to have direct access to your computer's hardware, which is something modern operating systems like Windows and Linux don't allow. So, to run the official engine, your computer must boot from the Quake CD, or you must boot into DOS or one of the DOS-based versions of Windows (Windows 95/98/Me) and then run QUAKE.EXE from the command line. The DOS-like command console in Windows NT/2000/XP/2003/Vista won't work for this, even in Win95 compatibility mode.

QUAKE.EXE provides software-based graphics rendering only; the graphics hardware will not provide accelerated rendering (using its own CPU), or any texture or lighting features. It's all done in the software. It's still fast, but slows down noticeably at higher resolutions and when there's a lot of action.

This engine's multiplayer networking capabilities are limited to serial cable (direct), modem-to-modem (direct), or on a LAN via TCP/IP or IPX (Novell NetWare protocol). LAN play is highly affected by ping &amp; latency between the clients and server. This was greatly improved in the QuakeWorld engine.

Official distributions:
* v1.06 of QUAKE.EXE (Oct. 1996) is contained in a [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip quake106.zip], which contains an installer script which needs to be run in order to unpack all the files. This zip contains the full shareware distribution of Quake; it includes documentation and all the Episode 1 files (ID1\pak0.pak), not just the engine.
* v1.08 of QUAKE.EXE (Oct. 1997) fixes some minor bugs in 1.06, and is in [ftp://ftp.idsoftware.com/idstuff/quake/quake108.zip quake108.zip]. This zip contains the updated QUAKE.EXE engine only.

===WinQuake===
id Software released a replacement for QUAKE.EXE called WinQuake (WINQUAKE.EXE). Instead of being for DOS, it is for any version of Windows (95/98/Me/NT/XP/2003/Vista). It's the first, most basic and most widely compatible Quake engine for Windows.

WinQuake accesses your computer's hardware through Windows APIs. It includes support for DirectX 3.0 and up, and VESA VBE video modes, if available. It looks and runs just like the DOS engine but has more video modes which you can access via the Options menu in the game. It also lets you choose between running full-screen or in a window. It removes support for serial and modem-to-modem networking.

Official distribution:
* v1.00 of WinQuake (Quake 1.09; March 1997) is contained, along with support files, in [ftp://ftp.idsoftware.com/idstuff/quake/wq100.zip wq100.zip].

===GLQuake===
One of Quake's original developers created GLQuake, which provides hardware-accelerated graphics using OpenGL APIs. It's known to be buggy.

GLQuake has one big usability problem: The game's built-in brightness/gamma setting doesn't do anything, and the visuals tend to be way too dark unless you first run a program to increase your display adapter's gamma setting (which then makes everything else appear too bright). This isn't a showstopper, but it can be inconvenient. Also, the video mode can only be changed at the command line, not in-game.

GLQuake is official, but is not supported by id Software. It runs on DOS, any version of Windows, or Linux. It is said to require the 'registered' Quake (that is, with ID1\pak1.pak present), but it will actually run on the shareware version, possibly with quirky startup behavior.

Official distributions:
* v0.97 of GLQuake (Quake 1.09; November 1997) is in [ftp://ftp.idsoftware.com/idstuff/unsup/glq1114.exe glq1114.exe]. This is an installer app for DOS or Windows. It will prompt you whether to install a 3dfx driver; don't do this unless you want the engine to be dependent on having a 3dfx-based graphics card's Glide drivers already installed.

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, Fruitz of Dojo: http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z quake1.09-sparc-sun-solaris2.5.1.tar.Z].
* GLQuake 0.97 for Linux 2.0 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz glquake-0.97-i386-unknown-linux2.0.tar.gz].
* SVGALib Quake for Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz quake.x11-1.0-i386-unknown-linux2.0.tar.gz]. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for something that will work with a modern system.

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [http://www.celephais.net/fitzquake/ FitzQuake] - probably the most widely compatible OpenGL engine for Windows.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [http://mhquake.blogspot.com/ MHQuake]
* [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]</text>
      <sha1>m2dt1xsqei5we3mioh0x53qf6yi5gcq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1046</id>
      <parentid>1045</parentid>
      <timestamp>2009-07-06T05:26:39Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>/* QUAKE.EXE */ added detail about DOSBox compatibility</comment>
      <text xml:space="preserve" bytes="8262">The game engine is the program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network.

Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

===QUAKE.EXE===
The first official engine is QUAKE.EXE, sometimes informally referred to as DOS Quake. It is found on the official Quake CD-ROM (for the PC) and in the official shareware distribution. If your computer was built after 1997, you probably have no need for QUAKE.EXE.

This engine only runs under MS-DOS, because it expects to have direct access to your computer's hardware, which is something modern operating systems like Windows and Linux don't allow. So, to run the official engine, your computer must boot from the Quake CD, or you must boot into DOS or one of the DOS-based versions of Windows (Windows 95/98/Me) and then run QUAKE.EXE from the command line. The DOS-like command console in Windows NT/2000/XP/2003/Vista won't work for this, even in Win95 compatibility mode. QUAKE.EXE is able to run within [http://www.dosbox.com/ DOSBox], the free emulator which runs on pretty much any OS, but its performance there is much worse than running in actual DOS, so much worse that it may be unplayable at all but the lowest resolutions, even on relatively fast, modern systems.

QUAKE.EXE provides software-based graphics rendering only; the graphics hardware will not provide accelerated rendering (using its own CPU), or any texture or lighting features. It's all done in the software. It's still fast, but slows down noticeably at higher resolutions and when there's a lot of action.

This engine's multiplayer networking capabilities are limited to serial cable (direct), modem-to-modem (direct), or on a LAN via TCP/IP or IPX (Novell NetWare protocol). LAN play is highly affected by ping &amp; latency between the clients and server. This was greatly improved in the QuakeWorld engine.

Official distributions:
* v1.06 of QUAKE.EXE (Oct. 1996) is contained in a [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip quake106.zip], which contains an installer script which needs to be run in order to unpack all the files. This zip contains the full shareware distribution of Quake; it includes documentation and all the Episode 1 files (ID1\pak0.pak), not just the engine.
* v1.08 of QUAKE.EXE (Oct. 1997) fixes some minor bugs in 1.06, and is in [ftp://ftp.idsoftware.com/idstuff/quake/quake108.zip quake108.zip]. This zip contains the updated QUAKE.EXE engine only.

===WinQuake===
id Software released a replacement for QUAKE.EXE called WinQuake (WINQUAKE.EXE). Instead of being for DOS, it is for any version of Windows (95/98/Me/NT/XP/2003/Vista). It's the first, most basic and most widely compatible Quake engine for Windows.

WinQuake accesses your computer's hardware through Windows APIs. It includes support for DirectX 3.0 and up, and VESA VBE video modes, if available. It looks and runs just like the DOS engine but has more video modes which you can access via the Options menu in the game. It also lets you choose between running full-screen or in a window. It removes support for serial and modem-to-modem networking.

Official distribution:
* v1.00 of WinQuake (Quake 1.09; March 1997) is contained, along with support files, in [ftp://ftp.idsoftware.com/idstuff/quake/wq100.zip wq100.zip].

===GLQuake===
One of Quake's original developers created GLQuake, which provides hardware-accelerated graphics using OpenGL APIs. It's known to be buggy.

GLQuake has one big usability problem: The game's built-in brightness/gamma setting doesn't do anything, and the visuals tend to be way too dark unless you first run a program to increase your display adapter's gamma setting (which then makes everything else appear too bright). This isn't a showstopper, but it can be inconvenient. Also, the video mode can only be changed at the command line, not in-game.

GLQuake is official, but is not supported by id Software. It runs on DOS, any version of Windows, or Linux. It is said to require the 'registered' Quake (that is, with ID1\pak1.pak present), but it will actually run on the shareware version, possibly with quirky startup behavior.

Official distributions:
* v0.97 of GLQuake (Quake 1.09; November 1997) is in [ftp://ftp.idsoftware.com/idstuff/unsup/glq1114.exe glq1114.exe]. This is an installer app for DOS or Windows. It will prompt you whether to install a 3dfx driver; don't do this unless you want the engine to be dependent on having a 3dfx-based graphics card's Glide drivers already installed.

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, Fruitz of Dojo: http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z quake1.09-sparc-sun-solaris2.5.1.tar.Z].
* GLQuake 0.97 for Linux 2.0 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz glquake-0.97-i386-unknown-linux2.0.tar.gz].
* SVGALib Quake for Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz quake.x11-1.0-i386-unknown-linux2.0.tar.gz]. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for something that will work with a modern system.

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [http://www.celephais.net/fitzquake/ FitzQuake] - probably the most widely compatible OpenGL engine for Windows.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [http://mhquake.blogspot.com/ MHQuake]
* [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]</text>
      <sha1>cvuoq1gsihxmtwb35h5enwson8lpqqd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1047</id>
      <parentid>1046</parentid>
      <timestamp>2009-07-06T05:36:13Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>/* GLQuake */ whoops, GLQuake is Windows only</comment>
      <text xml:space="preserve" bytes="8269">The game engine is the program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network.

Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

===QUAKE.EXE===
The first official engine is QUAKE.EXE, sometimes informally referred to as DOS Quake. It is found on the official Quake CD-ROM (for the PC) and in the official shareware distribution. If your computer was built after 1997, you probably have no need for QUAKE.EXE.

This engine only runs under MS-DOS, because it expects to have direct access to your computer's hardware, which is something modern operating systems like Windows and Linux don't allow. So, to run the official engine, your computer must boot from the Quake CD, or you must boot into DOS or one of the DOS-based versions of Windows (Windows 95/98/Me) and then run QUAKE.EXE from the command line. The DOS-like command console in Windows NT/2000/XP/2003/Vista won't work for this, even in Win95 compatibility mode. QUAKE.EXE is able to run within [http://www.dosbox.com/ DOSBox], the free emulator which runs on pretty much any OS, but its performance there is much worse than running in actual DOS, so much worse that it may be unplayable at all but the lowest resolutions, even on relatively fast, modern systems.

QUAKE.EXE provides software-based graphics rendering only; the graphics hardware will not provide accelerated rendering (using its own CPU), or any texture or lighting features. It's all done in the software. It's still fast, but slows down noticeably at higher resolutions and when there's a lot of action.

This engine's multiplayer networking capabilities are limited to serial cable (direct), modem-to-modem (direct), or on a LAN via TCP/IP or IPX (Novell NetWare protocol). LAN play is highly affected by ping &amp; latency between the clients and server. This was greatly improved in the QuakeWorld engine.

Official distributions:
* v1.06 of QUAKE.EXE (Oct. 1996) is contained in a [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip quake106.zip], which contains an installer script which needs to be run in order to unpack all the files. This zip contains the full shareware distribution of Quake; it includes documentation and all the Episode 1 files (ID1\pak0.pak), not just the engine.
* v1.08 of QUAKE.EXE (Oct. 1997) fixes some minor bugs in 1.06, and is in [ftp://ftp.idsoftware.com/idstuff/quake/quake108.zip quake108.zip]. This zip contains the updated QUAKE.EXE engine only.

===WinQuake===
id Software released a replacement for QUAKE.EXE called WinQuake (WINQUAKE.EXE). Instead of being for DOS, it is for any version of Windows (95/98/Me/NT/XP/2003/Vista). It's the first, most basic and most widely compatible Quake engine for Windows.

WinQuake accesses your computer's hardware through Windows APIs. It includes support for DirectX 3.0 and up, and VESA VBE video modes, if available. It looks and runs just like the DOS engine but has more video modes which you can access via the Options menu in the game. It also lets you choose between running full-screen or in a window. It removes support for serial and modem-to-modem networking.

Official distribution:
* v1.00 of WinQuake (Quake 1.09; March 1997) is contained, along with support files, in [ftp://ftp.idsoftware.com/idstuff/quake/wq100.zip wq100.zip].

===GLQuake===
One of Quake's original developers created GLQuake, which provides hardware-accelerated graphics using OpenGL APIs. It's known to be buggy.

GLQuake has one big usability problem: The game's built-in brightness/gamma setting doesn't do anything, and the visuals tend to be way too dark unless you first run a program to increase your display adapter's gamma setting (which then makes everything else appear too bright). This isn't a showstopper, but it can be inconvenient. Also, the video mode can only be changed at the command line, not in-game.

GLQuake is official, but is not supported by id Software. It runs any version of Windows (Win95 and up), or Linux. It is said to require the 'registered' Quake (that is, with ID1\pak1.pak present), but it will actually run on the shareware version, possibly with quirky startup behavior.

Official distributions:
* v0.97 of GLQuake (Quake 1.09; November 1997) is in [ftp://ftp.idsoftware.com/idstuff/unsup/glq1114.exe glq1114.exe]. This is an installer app for DOS or Windows. It will prompt you whether to install a 3dfx driver; don't do this unless you want the engine to be dependent on having a 3dfx-based graphics card's Glide drivers already installed.

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, Fruitz of Dojo: http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z quake1.09-sparc-sun-solaris2.5.1.tar.Z].
* GLQuake 0.97 for Linux 2.0 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz glquake-0.97-i386-unknown-linux2.0.tar.gz].
* SVGALib Quake for Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz quake.x11-1.0-i386-unknown-linux2.0.tar.gz]. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for something that will work with a modern system.

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [http://www.celephais.net/fitzquake/ FitzQuake] - probably the most widely compatible OpenGL engine for Windows.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [http://mhquake.blogspot.com/ MHQuake]
* [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]</text>
      <sha1>j71ban7l0h601d9fv4x9i5hwmm0n43k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1050</id>
      <parentid>1047</parentid>
      <timestamp>2009-07-07T04:20:44Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>Added note about where game engines live. +formatting &amp; copy edits</comment>
      <text xml:space="preserve" bytes="8740">The game engine is the program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

===QUAKE.EXE===
The first official engine is ''QUAKE.EXE'', sometimes informally referred to as DOS Quake. It is found on the official Quake CD-ROM (for the PC) and in the official shareware distribution. If your computer was built after 1997, you probably have no need for ''QUAKE.EXE''.

This engine is designed to only run from MS-DOS, because it expects to have direct access to your computer's hardware, which is something modern operating systems like Windows and Linux don't allow. So, to run the official engine, your computer must boot from the Quake CD, or you must boot into DOS or one of the DOS-based versions of Windows (Windows 95/98/Me) and then run ''QUAKE.EXE'' from the command line. The DOS-like command console in Windows NT/2000/XP/2003/Vista won't work for this, even in Win95 compatibility mode. ''QUAKE.EXE'' is able to run within [http://www.dosbox.com/ DOSBox], the free DOS-like emulator which runs on pretty much any OS, but its performance there is much worse than running in actual DOS — so much worse that it may be unplayable at all but the lowest resolutions, even on relatively fast, modern systems. Reportedly the engine does somewhat better under [http://en.wikipedia.org/wiki/Microsoft_Virtual_PC Microsoft Virtual PC].

''QUAKE.EXE'' provides software-based graphics rendering only; the graphics hardware will not provide accelerated rendering (using its own CPU), or any texture or lighting features. It's all done in the software. It's still fast, but slows down noticeably at higher resolutions and when there's a lot of action.

This engine's multiplayer networking capabilities are limited to serial cable (direct), modem-to-modem (direct), or on a LAN via TCP/IP or IPX (Novell NetWare protocol). LAN play is highly affected by ping &amp; latency between the clients and server. This was greatly improved in the QuakeWorld engine.

Official distributions:
* v1.06 of ''QUAKE.EXE'' (Oct. 1996) is contained in a [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip ''quake106.zip''], which contains an installer that unpacks all the files from an lh5 LZH-encoded archive. This is the full shareware distribution of Quake, including documentation and all the Episode 1 files (''ID1\pak0.pak''), not just the engine.
* v1.08 of ''QUAKE.EXE'' (Oct. 1997) fixes some minor bugs in 1.06, and is in [ftp://ftp.idsoftware.com/idstuff/quake/quake108.zip ''quake108.zip'']. This zip contains the updated QUAKE.EXE engine only.

===WinQuake===
id Software released a replacement for QUAKE.EXE called WinQuake (''WINQUAKE.EXE''). Instead of being for DOS, it is for any version of Windows (95/98/Me/NT/XP/2003/Vista). It's the first, most basic and most widely compatible Quake engine for Windows.

WinQuake accesses your computer's hardware through Windows APIs. It includes support for DirectX 3.0 and up, and VESA VBE video modes, if available. It looks and runs just like the DOS engine but has more video modes which you can access via the Options menu in the game. It also lets you choose between running full-screen or in a window. It removes support for serial and modem-to-modem networking.

Official distribution:
* v1.00 of WinQuake (Quake 1.09; March 1997) is contained, along with support files, in [ftp://ftp.idsoftware.com/idstuff/quake/wq100.zip ''wq100.zip''].

===GLQuake===
One of Quake's original developers created GLQuake, which provides hardware-accelerated graphics using OpenGL APIs. It's known to be buggy.

GLQuake has one big usability problem: The game's built-in brightness/gamma setting doesn't do anything, and the visuals tend to be way too dark unless you first run a program to increase your display adapter's gamma setting (which then makes everything else appear too bright). This isn't a showstopper, but it can be inconvenient. Also, the video mode can only be changed at the command line, not in-game.

GLQuake is official, but is not supported by id Software. It runs any version of Windows (Win95 and up), or Linux. It is said to require the 'registered' Quake (that is, with ''ID1\pak1.pak'' present), but it will actually run on the shareware version, possibly with quirky startup behavior.

Official distributions:
* v0.97 of GLQuake (Quake 1.09; November 1997) is in [ftp://ftp.idsoftware.com/idstuff/unsup/glq1114.exe ''glq1114.exe'']. This is an installer app for DOS or Windows. It will prompt you whether to install a 3dfx driver; don't do this unless you want the engine to be dependent on having a 3dfx-based graphics card's Glide drivers already installed.
* There is also an official distribution for Linux 2.0; see below.

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for Linux 2.0 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for something that will work with a modern system.

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [http://www.celephais.net/fitzquake/ FitzQuake] - probably the most widely compatible OpenGL engine for Windows.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [http://mhquake.blogspot.com/ MHQuake]
* [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]</text>
      <sha1>9zixpyfnzutm9t9otkgugjljubm4k87</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1051</id>
      <parentid>1050</parentid>
      <timestamp>2009-07-07T05:02:06Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>/* Unix engines */ Added links to Linux Quake HOWTO.</comment>
      <text xml:space="preserve" bytes="8941">The game engine is the program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

===QUAKE.EXE===
The first official engine is ''QUAKE.EXE'', sometimes informally referred to as DOS Quake. It is found on the official Quake CD-ROM (for the PC) and in the official shareware distribution. If your computer was built after 1997, you probably have no need for ''QUAKE.EXE''.

This engine is designed to only run from MS-DOS, because it expects to have direct access to your computer's hardware, which is something modern operating systems like Windows and Linux don't allow. So, to run the official engine, your computer must boot from the Quake CD, or you must boot into DOS or one of the DOS-based versions of Windows (Windows 95/98/Me) and then run ''QUAKE.EXE'' from the command line. The DOS-like command console in Windows NT/2000/XP/2003/Vista won't work for this, even in Win95 compatibility mode. ''QUAKE.EXE'' is able to run within [http://www.dosbox.com/ DOSBox], the free DOS-like emulator which runs on pretty much any OS, but its performance there is much worse than running in actual DOS — so much worse that it may be unplayable at all but the lowest resolutions, even on relatively fast, modern systems. Reportedly the engine does somewhat better under [http://en.wikipedia.org/wiki/Microsoft_Virtual_PC Microsoft Virtual PC].

''QUAKE.EXE'' provides software-based graphics rendering only; the graphics hardware will not provide accelerated rendering (using its own CPU), or any texture or lighting features. It's all done in the software. It's still fast, but slows down noticeably at higher resolutions and when there's a lot of action.

This engine's multiplayer networking capabilities are limited to serial cable (direct), modem-to-modem (direct), or on a LAN via TCP/IP or IPX (Novell NetWare protocol). LAN play is highly affected by ping &amp; latency between the clients and server. This was greatly improved in the QuakeWorld engine.

Official distributions:
* v1.06 of ''QUAKE.EXE'' (Oct. 1996) is contained in a [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip ''quake106.zip''], which contains an installer that unpacks all the files from an lh5 LZH-encoded archive. This is the full shareware distribution of Quake, including documentation and all the Episode 1 files (''ID1\pak0.pak''), not just the engine.
* v1.08 of ''QUAKE.EXE'' (Oct. 1997) fixes some minor bugs in 1.06, and is in [ftp://ftp.idsoftware.com/idstuff/quake/quake108.zip ''quake108.zip'']. This zip contains the updated QUAKE.EXE engine only.

===WinQuake===
id Software released a replacement for QUAKE.EXE called WinQuake (''WINQUAKE.EXE''). Instead of being for DOS, it is for any version of Windows (95/98/Me/NT/XP/2003/Vista). It's the first, most basic and most widely compatible Quake engine for Windows.

WinQuake accesses your computer's hardware through Windows APIs. It includes support for DirectX 3.0 and up, and VESA VBE video modes, if available. It looks and runs just like the DOS engine but has more video modes which you can access via the Options menu in the game. It also lets you choose between running full-screen or in a window. It removes support for serial and modem-to-modem networking.

Official distribution:
* v1.00 of WinQuake (Quake 1.09; March 1997) is contained, along with support files, in [ftp://ftp.idsoftware.com/idstuff/quake/wq100.zip ''wq100.zip''].

===GLQuake===
One of Quake's original developers created GLQuake, which provides hardware-accelerated graphics using OpenGL APIs. It's known to be buggy.

GLQuake has one big usability problem: The game's built-in brightness/gamma setting doesn't do anything, and the visuals tend to be way too dark unless you first run a program to increase your display adapter's gamma setting (which then makes everything else appear too bright). This isn't a showstopper, but it can be inconvenient. Also, the video mode can only be changed at the command line, not in-game.

GLQuake is official, but is not supported by id Software. It runs any version of Windows (Win95 and up), or Linux. It is said to require the 'registered' Quake (that is, with ''ID1\pak1.pak'' present), but it will actually run on the shareware version, possibly with quirky startup behavior.

Official distributions:
* v0.97 of GLQuake (Quake 1.09; November 1997) is in [ftp://ftp.idsoftware.com/idstuff/unsup/glq1114.exe ''glq1114.exe'']. This is an installer app for DOS or Windows. It will prompt you whether to install a 3dfx driver; don't do this unless you want the engine to be dependent on having a 3dfx-based graphics card's Glide drivers already installed.
* There is also an official distribution for Linux 2.0; see below.

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

A comprehensive overview of engines for Linux can be found in the [http://tldp.org/HOWTO/Quake-HOWTO-3.html Game Engines section] of the [http://tldp.org/HOWTO/ Linux Quake HOWTO] by Stevenaaus.

There were also a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for Linux 2.0 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for something that will work with a modern system.

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [http://www.celephais.net/fitzquake/ FitzQuake] - probably the most widely compatible OpenGL engine for Windows.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [http://mhquake.blogspot.com/ MHQuake]
* [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]</text>
      <sha1>32wxnyqwhhw32twi295rt0ls1oukaoe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1052</id>
      <parentid>1051</parentid>
      <timestamp>2009-07-07T05:03:50Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>moved Linux Quake HOWTO info</comment>
      <text xml:space="preserve" bytes="8958">The game engine is the program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

===QUAKE.EXE===
The first official engine is ''QUAKE.EXE'', sometimes informally referred to as DOS Quake. It is found on the official Quake CD-ROM (for the PC) and in the official shareware distribution. If your computer was built after 1997, you probably have no need for ''QUAKE.EXE''.

This engine is designed to only run from MS-DOS, because it expects to have direct access to your computer's hardware, which is something modern operating systems like Windows and Linux don't allow. So, to run the official engine, your computer must boot from the Quake CD, or you must boot into DOS or one of the DOS-based versions of Windows (Windows 95/98/Me) and then run ''QUAKE.EXE'' from the command line. The DOS-like command console in Windows NT/2000/XP/2003/Vista won't work for this, even in Win95 compatibility mode. ''QUAKE.EXE'' is able to run within [http://www.dosbox.com/ DOSBox], the free DOS-like emulator which runs on pretty much any OS, but its performance there is much worse than running in actual DOS — so much worse that it may be unplayable at all but the lowest resolutions, even on relatively fast, modern systems. Reportedly the engine does somewhat better under [http://en.wikipedia.org/wiki/Microsoft_Virtual_PC Microsoft Virtual PC].

''QUAKE.EXE'' provides software-based graphics rendering only; the graphics hardware will not provide accelerated rendering (using its own CPU), or any texture or lighting features. It's all done in the software. It's still fast, but slows down noticeably at higher resolutions and when there's a lot of action.

This engine's multiplayer networking capabilities are limited to serial cable (direct), modem-to-modem (direct), or on a LAN via TCP/IP or IPX (Novell NetWare protocol). LAN play is highly affected by ping &amp; latency between the clients and server. This was greatly improved in the QuakeWorld engine.

Official distributions:
* v1.06 of ''QUAKE.EXE'' (Oct. 1996) is contained in a [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip ''quake106.zip''], which contains an installer that unpacks all the files from an lh5 LZH-encoded archive. This is the full shareware distribution of Quake, including documentation and all the Episode 1 files (''ID1\pak0.pak''), not just the engine.
* v1.08 of ''QUAKE.EXE'' (Oct. 1997) fixes some minor bugs in 1.06, and is in [ftp://ftp.idsoftware.com/idstuff/quake/quake108.zip ''quake108.zip'']. This zip contains the updated QUAKE.EXE engine only.

===WinQuake===
id Software released a replacement for QUAKE.EXE called WinQuake (''WINQUAKE.EXE''). Instead of being for DOS, it is for any version of Windows (95/98/Me/NT/XP/2003/Vista). It's the first, most basic and most widely compatible Quake engine for Windows.

WinQuake accesses your computer's hardware through Windows APIs. It includes support for DirectX 3.0 and up, and VESA VBE video modes, if available. It looks and runs just like the DOS engine but has more video modes which you can access via the Options menu in the game. It also lets you choose between running full-screen or in a window. It removes support for serial and modem-to-modem networking.

Official distribution:
* v1.00 of WinQuake (Quake 1.09; March 1997) is contained, along with support files, in [ftp://ftp.idsoftware.com/idstuff/quake/wq100.zip ''wq100.zip''].

===GLQuake===
One of Quake's original developers created GLQuake, which provides hardware-accelerated graphics using OpenGL APIs. It's known to be buggy.

GLQuake has one big usability problem: The game's built-in brightness/gamma setting doesn't do anything, and the visuals tend to be way too dark unless you first run a program to increase your display adapter's gamma setting (which then makes everything else appear too bright). This isn't a showstopper, but it can be inconvenient. Also, the video mode can only be changed at the command line, not in-game.

GLQuake is official, but is not supported by id Software. It runs any version of Windows (Win95 and up), or Linux. It is said to require the 'registered' Quake (that is, with ''ID1\pak1.pak'' present), but it will actually run on the shareware version, possibly with quirky startup behavior.

Official distributions:
* v0.97 of GLQuake (Quake 1.09; November 1997) is in [ftp://ftp.idsoftware.com/idstuff/unsup/glq1114.exe ''glq1114.exe'']. This is an installer app for DOS or Windows. It will prompt you whether to install a 3dfx driver; don't do this unless you want the engine to be dependent on having a 3dfx-based graphics card's Glide drivers already installed.
* There is also an official distribution for Linux 2.0; see below.

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for Linux 2.0 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for an unofficial engine that will work with a modern system.

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [http://www.celephais.net/fitzquake/ FitzQuake] - probably the most widely compatible OpenGL engine for Windows.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [http://mhquake.blogspot.com/ MHQuake]
* [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]

A comprehensive overview of unofficial engines for Linux can be found in the [http://tldp.org/HOWTO/Quake-HOWTO-3.html Game Engines section] of the [http://tldp.org/HOWTO/ Linux Quake HOWTO] by Stevenaaus.</text>
      <sha1>dmmuiwys21nqezhb11kcb9v6jwutdrc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1056</id>
      <parentid>1052</parentid>
      <timestamp>2009-07-09T06:43:21Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>added client-server info</comment>
      <text xml:space="preserve" bytes="9691">The '''game engine''' (a.k.a. '''Quake engine''' or just '''engine''') is the 'executable' program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

Quake engines operate on a client-server model. The client and server are normally both in the same file. When you run the engine, the server always runs. The client normally runs, too, unless you did something special to launch the engine in a server-only mode (e.g., for other people to connect to for playing over a network). So when you play a single-player game of Quake, the client portion of your engine communicates with the server portion. When you play a multiplayer game over a network, the client portion of your engine instead communicates with a remote server, which naturally will be subject to speed limits and delays inherent in the network.

Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing more technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

===QUAKE.EXE===
The first official engine is ''QUAKE.EXE'', sometimes informally referred to as DOS Quake. It is found on the official Quake CD-ROM (for the PC) and in the official shareware distribution. If your computer was built after 1997, you probably have no need for ''QUAKE.EXE''.

This engine is designed to only run from MS-DOS, because it expects to have direct access to your computer's hardware, which is something modern operating systems like Windows and Linux don't allow. So, to run the official engine, your computer must boot from the Quake CD, or you must boot into DOS or one of the DOS-based versions of Windows (Windows 95/98/Me) and then run ''QUAKE.EXE'' from the command line. The DOS-like command console in Windows NT/2000/XP/2003/Vista won't work for this, even in Win95 compatibility mode. ''QUAKE.EXE'' is able to run within [http://www.dosbox.com/ DOSBox], the free DOS-like emulator which runs on pretty much any OS, but its performance there is much worse than running in actual DOS — so much worse that it may be unplayable at all but the lowest resolutions, even on relatively fast, modern systems. Reportedly the engine does somewhat better under [http://en.wikipedia.org/wiki/Microsoft_Virtual_PC Microsoft Virtual PC].

''QUAKE.EXE'' provides software-based graphics rendering only; the graphics hardware will not provide accelerated rendering (using its own CPU), or any texture or lighting features. It's all done in the software. It's still fast, but slows down noticeably at higher resolutions and when there's a lot of action.

This engine's multiplayer networking capabilities are limited to serial cable (direct), modem-to-modem (direct), or on a LAN via TCP/IP or IPX (Novell NetWare protocol). LAN play is highly affected by ping &amp; latency between the clients and server. This was greatly improved in the QuakeWorld engine.

Official distributions:
* v1.06 of ''QUAKE.EXE'' (Oct. 1996) is contained in a [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip ''quake106.zip''], which contains an installer that unpacks all the files from an lh5 LZH-encoded archive. This is the full shareware distribution of Quake, including documentation and all the Episode 1 files (''ID1\pak0.pak''), not just the engine.
* v1.08 of ''QUAKE.EXE'' (Oct. 1997) fixes some minor bugs in 1.06, and is in [ftp://ftp.idsoftware.com/idstuff/quake/quake108.zip ''quake108.zip'']. This zip contains the updated QUAKE.EXE engine only.

===WinQuake===
id Software released a replacement for QUAKE.EXE called WinQuake (''WINQUAKE.EXE''). Instead of being for DOS, it is for any version of Windows (95/98/Me/NT/XP/2003/Vista). It's the first, most basic and most widely compatible Quake engine for Windows.

WinQuake accesses your computer's hardware through Windows APIs. It includes support for DirectX 3.0 and up, and VESA VBE video modes, if available. It looks and runs just like the DOS engine but has more video modes which you can access via the Options menu in the game. It also lets you choose between running full-screen or in a window. It removes support for serial and modem-to-modem networking.

Official distribution:
* v1.00 of WinQuake (Quake 1.09; March 1997) is contained, along with support files, in [ftp://ftp.idsoftware.com/idstuff/quake/wq100.zip ''wq100.zip''].

===GLQuake===
One of Quake's original developers created GLQuake, which provides hardware-accelerated graphics using OpenGL APIs. It's known to be buggy.

GLQuake has one big usability problem: The game's built-in brightness/gamma setting doesn't do anything, and the visuals tend to be way too dark unless you first run a program to increase your display adapter's gamma setting (which then makes everything else appear too bright). This isn't a showstopper, but it can be inconvenient. Also, the video mode can only be changed at the command line, not in-game.

GLQuake is official, but is not supported by id Software. It runs any version of Windows (Win95 and up), or Linux. It is said to require the 'registered' Quake (that is, with ''ID1\pak1.pak'' present), but it will actually run on the shareware version, possibly with quirky startup behavior.

Official distributions:
* v0.97 of GLQuake (Quake 1.09; November 1997) is in [ftp://ftp.idsoftware.com/idstuff/unsup/glq1114.exe ''glq1114.exe'']. This is an installer app for DOS or Windows. It will prompt you whether to install a 3dfx driver; don't do this unless you want the engine to be dependent on having a 3dfx-based graphics card's Glide drivers already installed.
* There is also an official distribution for Linux 2.0; see below.

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for Linux 2.0 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for an unofficial engine that will work with a modern system.

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [http://www.celephais.net/fitzquake/ FitzQuake] - probably the most widely compatible OpenGL engine for Windows.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [http://mhquake.blogspot.com/ MHQuake]
* [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]

A comprehensive overview of unofficial engines for Linux can be found in the [http://tldp.org/HOWTO/Quake-HOWTO-3.html Game Engines section] of the [http://tldp.org/HOWTO/ Linux Quake HOWTO] by Stevenaaus.</text>
      <sha1>bjlo9jqmep6mz559t5fhkkin8aigxb3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1057</id>
      <parentid>1056</parentid>
      <timestamp>2009-07-09T08:24:14Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>Added info about networking and graphics</comment>
      <text xml:space="preserve" bytes="11026">==Overview==
The '''game engine''' (a.k.a. '''Quake engine''' or just '''engine''') is the 'executable' program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

===Client-server model===
Quake engines operate on a client-server model. The client and server are normally both in the same file. When you run the engine, the server always runs. The client normally runs, too, unless you did something special to launch the engine in a server-only mode (e.g., for other people to connect to for playing over a network). So when you play a single-player game of Quake, the client portion of your engine communicates with the server portion. When you play a multiplayer game over a network, the client portion of your engine instead communicates with a remote server, which naturally will be subject to speed limits and delays inherent in the network.

===Networking and graphics===
Engines generally fall into two categories:
* &quot;[[NetQuake]]&quot; engines: engines with networking code compatible with that of the original Quake engine.
* &quot;[[QuakeWorld]]&quot; engines: engines with networking code compatible with that of the original QuakeWorld engine.

Additionally, all engines use one of two graphics rendering technologies:
* Software rendering: rendering is done entirely in software, without the help of graphics hardware, as in the original Quake and QuakeWorld engines.
* OpenGL rendering: rendering is done with the help of graphics hardware, as in the original GLQuake and GLQuakeWorld engines.

QuakeWorld-style networking code and OpenGL-style rendering are standard nowadays in pretty much every first-person shooter, but at the time Quake was released in 1996, both were new technologies.

You will probably want to use an engine with OpenGL support, if your hardware is compatible (pretty much any computer built after 1997 will be). And you will probably want to use a QuakeWorld engine for playing over the Internet. However, for single-player games, especially when you're just getting started, a NetQuake engine may be ideal, for the simple reason that QuakeWorld engines often don't support single-player games.

===More information===
Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing more technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

===QUAKE.EXE===
The first official engine is ''QUAKE.EXE'', sometimes informally referred to as DOS Quake. It is found on the official Quake CD-ROM (for the PC) and in the official shareware distribution. If your computer was built after 1997, you probably have no need for ''QUAKE.EXE''.

This engine is designed to only run from MS-DOS, because it expects to have direct access to your computer's hardware, which is something modern operating systems like Windows and Linux don't allow. So, to run the official engine, your computer must boot from the Quake CD, or you must boot into DOS or one of the DOS-based versions of Windows (Windows 95/98/Me) and then run ''QUAKE.EXE'' from the command line. The DOS-like command console in Windows NT/2000/XP/2003/Vista won't work for this, even in Win95 compatibility mode. ''QUAKE.EXE'' is able to run within [http://www.dosbox.com/ DOSBox], the free DOS-like emulator which runs on pretty much any OS, but its performance there is much worse than running in actual DOS — so much worse that it may be unplayable at all but the lowest resolutions, even on relatively fast, modern systems. Reportedly the engine does somewhat better under [http://en.wikipedia.org/wiki/Microsoft_Virtual_PC Microsoft Virtual PC].

''QUAKE.EXE'' provides software-based graphics rendering only; the graphics hardware will not provide accelerated rendering (using its own CPU), or any texture or lighting features. It's all done in the software. It's still fast, but slows down noticeably at higher resolutions and when there's a lot of action.

This engine's multiplayer networking capabilities are limited to serial cable (direct), modem-to-modem (direct), or on a LAN via TCP/IP or IPX (Novell NetWare protocol). LAN play is highly affected by ping &amp; latency between the clients and server. This was greatly improved in the QuakeWorld engine.

Official distributions:
* v1.06 of ''QUAKE.EXE'' (Oct. 1996) is contained in a [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip ''quake106.zip''], which contains an installer that unpacks all the files from an lh5 LZH-encoded archive. This is the full shareware distribution of Quake, including documentation and all the Episode 1 files (''ID1\pak0.pak''), not just the engine.
* v1.08 of ''QUAKE.EXE'' (Oct. 1997) fixes some minor bugs in 1.06, and is in [ftp://ftp.idsoftware.com/idstuff/quake/quake108.zip ''quake108.zip'']. This zip contains the updated QUAKE.EXE engine only.

===WinQuake===
id Software released a replacement for QUAKE.EXE called WinQuake (''WINQUAKE.EXE''). Instead of being for DOS, it is for any version of Windows (95/98/Me/NT/XP/2003/Vista). It's the first, most basic and most widely compatible Quake engine for Windows.

WinQuake accesses your computer's hardware through Windows APIs. It includes support for DirectX 3.0 and up, and VESA VBE video modes, if available. It looks and runs just like the DOS engine but has more video modes which you can access via the Options menu in the game. It also lets you choose between running full-screen or in a window. It removes support for serial and modem-to-modem networking.

Official distribution:
* v1.00 of WinQuake (Quake 1.09; March 1997) is contained, along with support files, in [ftp://ftp.idsoftware.com/idstuff/quake/wq100.zip ''wq100.zip''].

===GLQuake===
One of Quake's original developers created GLQuake, which provides hardware-accelerated graphics using OpenGL APIs. It's known to be buggy.

GLQuake has one big usability problem: The game's built-in brightness/gamma setting doesn't do anything, and the visuals tend to be way too dark unless you first run a program to increase your display adapter's gamma setting (which then makes everything else appear too bright). This isn't a showstopper, but it can be inconvenient. Also, the video mode can only be changed at the command line, not in-game.

GLQuake is official, but is not supported by id Software. It runs any version of Windows (Win95 and up), or Linux. It is said to require the 'registered' Quake (that is, with ''ID1\pak1.pak'' present), but it will actually run on the shareware version, possibly with quirky startup behavior.

Official distributions:
* v0.97 of GLQuake (Quake 1.09; November 1997) is in [ftp://ftp.idsoftware.com/idstuff/unsup/glq1114.exe ''glq1114.exe'']. This is an installer app for DOS or Windows. It will prompt you whether to install a 3dfx driver; don't do this unless you want the engine to be dependent on having a 3dfx-based graphics card's Glide drivers already installed.
* There is also an official distribution for Linux 2.0; see below.

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for Linux 2.0 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for an unofficial engine that will work with a modern system.

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [http://www.celephais.net/fitzquake/ FitzQuake] - probably the most widely compatible OpenGL engine for Windows.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [http://mhquake.blogspot.com/ MHQuake]
* [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]

A comprehensive overview of unofficial engines for Linux can be found in the [http://tldp.org/HOWTO/Quake-HOWTO-3.html Game Engines section] of the [http://tldp.org/HOWTO/ Linux Quake HOWTO] by Stevenaaus.</text>
      <sha1>1qv187rnk9pxvqtw4rl775hxh267erv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1061</id>
      <parentid>1057</parentid>
      <timestamp>2009-07-09T09:01:10Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>/* Client-server model */ corrected my info; sometimes the client &amp; server are separate</comment>
      <text xml:space="preserve" bytes="11330">==Overview==
The '''game engine''' (a.k.a. '''Quake engine''' or just '''engine''') is the 'executable' program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

===Client-server model===
Quake engines operate on a client-server model. Depending on the engine, the client and server can be in the same file, or can be separate.

If they're in the same file, then when you run the engine, the server always runs. The client normally runs, too, unless you did something special to launch the engine in a server-only mode (e.g., for other people to connect to for playing over a network). So when you play a single-player game of Quake, the client portion of your engine communicates with the server portion. When you play a multiplayer game over a network, the client portion of your engine instead communicates with a remote server, which naturally will be subject to speed limits and delays inherent in the network.

If they're separate programs, then you only run the client, and you tell it where a server is running that you want to connect to. A [[server browser]] can help you locate servers where you can join a game and play with other people.

===Networking and graphics===
Engines generally fall into two categories:
* &quot;[[NetQuake]]&quot; engines: engines with networking code compatible with that of the original Quake engine.
* &quot;[[QuakeWorld]]&quot; engines: engines with networking code compatible with that of the original QuakeWorld engine.

Additionally, all engines use one of two graphics rendering technologies:
* Software rendering: rendering is done entirely in software, without the help of graphics hardware, as in the original Quake and QuakeWorld engines.
* OpenGL rendering: rendering is done with the help of graphics hardware, as in the original GLQuake and GLQuakeWorld engines.

QuakeWorld-style networking code and OpenGL-style rendering are standard nowadays in pretty much every first-person shooter, but at the time Quake was released in 1996, both were new technologies.

You will probably want to use an engine with OpenGL support, if your hardware is compatible (pretty much any computer built after 1997 will be). And you will probably want to use a QuakeWorld engine for playing over the Internet. However, for single-player games, especially when you're just getting started, a NetQuake engine may be ideal, for the simple reason that QuakeWorld engines often don't support single-player games.

===More information===
Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing more technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

===QUAKE.EXE===
The first official engine is ''QUAKE.EXE'', sometimes informally referred to as DOS Quake. It is found on the official Quake CD-ROM (for the PC) and in the official shareware distribution. If your computer was built after 1997, you probably have no need for ''QUAKE.EXE''.

This engine is designed to only run from MS-DOS, because it expects to have direct access to your computer's hardware, which is something modern operating systems like Windows and Linux don't allow. So, to run the official engine, your computer must boot from the Quake CD, or you must boot into DOS or one of the DOS-based versions of Windows (Windows 95/98/Me) and then run ''QUAKE.EXE'' from the command line. The DOS-like command console in Windows NT/2000/XP/2003/Vista won't work for this, even in Win95 compatibility mode. ''QUAKE.EXE'' is able to run within [http://www.dosbox.com/ DOSBox], the free DOS-like emulator which runs on pretty much any OS, but its performance there is much worse than running in actual DOS — so much worse that it may be unplayable at all but the lowest resolutions, even on relatively fast, modern systems. Reportedly the engine does somewhat better under [http://en.wikipedia.org/wiki/Microsoft_Virtual_PC Microsoft Virtual PC].

''QUAKE.EXE'' provides software-based graphics rendering only; the graphics hardware will not provide accelerated rendering (using its own CPU), or any texture or lighting features. It's all done in the software. It's still fast, but slows down noticeably at higher resolutions and when there's a lot of action.

This engine's multiplayer networking capabilities are limited to serial cable (direct), modem-to-modem (direct), or on a LAN via TCP/IP or IPX (Novell NetWare protocol). LAN play is highly affected by ping &amp; latency between the clients and server. This was greatly improved in the QuakeWorld engine.

Official distributions:
* v1.06 of ''QUAKE.EXE'' (Oct. 1996) is contained in a [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip ''quake106.zip''], which contains an installer that unpacks all the files from an lh5 LZH-encoded archive. This is the full shareware distribution of Quake, including documentation and all the Episode 1 files (''ID1\pak0.pak''), not just the engine.
* v1.08 of ''QUAKE.EXE'' (Oct. 1997) fixes some minor bugs in 1.06, and is in [ftp://ftp.idsoftware.com/idstuff/quake/quake108.zip ''quake108.zip'']. This zip contains the updated QUAKE.EXE engine only.

===WinQuake===
id Software released a replacement for QUAKE.EXE called WinQuake (''WINQUAKE.EXE''). Instead of being for DOS, it is for any version of Windows (95/98/Me/NT/XP/2003/Vista). It's the first, most basic and most widely compatible Quake engine for Windows.

WinQuake accesses your computer's hardware through Windows APIs. It includes support for DirectX 3.0 and up, and VESA VBE video modes, if available. It looks and runs just like the DOS engine but has more video modes which you can access via the Options menu in the game. It also lets you choose between running full-screen or in a window. It removes support for serial and modem-to-modem networking.

Official distribution:
* v1.00 of WinQuake (Quake 1.09; March 1997) is contained, along with support files, in [ftp://ftp.idsoftware.com/idstuff/quake/wq100.zip ''wq100.zip''].

===GLQuake===
One of Quake's original developers created GLQuake, which provides hardware-accelerated graphics using OpenGL APIs. It's known to be buggy.

GLQuake has one big usability problem: The game's built-in brightness/gamma setting doesn't do anything, and the visuals tend to be way too dark unless you first run a program to increase your display adapter's gamma setting (which then makes everything else appear too bright). This isn't a showstopper, but it can be inconvenient. Also, the video mode can only be changed at the command line, not in-game.

GLQuake is official, but is not supported by id Software. It runs any version of Windows (Win95 and up), or Linux. It is said to require the 'registered' Quake (that is, with ''ID1\pak1.pak'' present), but it will actually run on the shareware version, possibly with quirky startup behavior.

Official distributions:
* v0.97 of GLQuake (Quake 1.09; November 1997) is in [ftp://ftp.idsoftware.com/idstuff/unsup/glq1114.exe ''glq1114.exe'']. This is an installer app for DOS or Windows. It will prompt you whether to install a 3dfx driver; don't do this unless you want the engine to be dependent on having a 3dfx-based graphics card's Glide drivers already installed.
* There is also an official distribution for Linux 2.0; see below.

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for Linux 2.0 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for an unofficial engine that will work with a modern system.

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [http://www.celephais.net/fitzquake/ FitzQuake] - probably the most widely compatible OpenGL engine for Windows.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [http://mhquake.blogspot.com/ MHQuake]
* [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]

A comprehensive overview of unofficial engines for Linux can be found in the [http://tldp.org/HOWTO/Quake-HOWTO-3.html Game Engines section] of the [http://tldp.org/HOWTO/ Linux Quake HOWTO] by Stevenaaus.</text>
      <sha1>db9ojcl24i5wr48g15nv582io9y4pet</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1082</id>
      <parentid>1061</parentid>
      <timestamp>2009-07-12T00:36:52Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>/* Official engines */ moved content to their own articles</comment>
      <text xml:space="preserve" bytes="7010">==Overview==
The '''game engine''' (a.k.a. '''Quake engine''' or just '''engine''') is the 'executable' program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

===Client-server model===
Quake engines operate on a client-server model. Depending on the engine, the client and server can be in the same file, or can be separate.

If they're in the same file, then when you run the engine, the server always runs. The client normally runs, too, unless you did something special to launch the engine in a server-only mode (e.g., for other people to connect to for playing over a network). So when you play a single-player game of Quake, the client portion of your engine communicates with the server portion. When you play a multiplayer game over a network, the client portion of your engine instead communicates with a remote server, which naturally will be subject to speed limits and delays inherent in the network.

If they're separate programs, then you only run the client, and you tell it where a server is running that you want to connect to. A [[server browser]] can help you locate servers where you can join a game and play with other people.

===Networking and graphics===
Engines generally fall into two categories:
* &quot;[[NetQuake]]&quot; engines: engines with networking code compatible with that of the original Quake engine.
* &quot;[[QuakeWorld]]&quot; engines: engines with networking code compatible with that of the original QuakeWorld engine.

Additionally, all engines use one of two graphics rendering technologies:
* Software rendering: rendering is done entirely in software, without the help of graphics hardware, as in the original Quake and QuakeWorld engines.
* OpenGL rendering: rendering is done with the help of graphics hardware, as in the original GLQuake and GLQuakeWorld engines.

QuakeWorld-style networking code and OpenGL-style rendering are standard nowadays in pretty much every first-person shooter, but at the time Quake was released in 1996, both were new technologies.

You will probably want to use an engine with OpenGL support, if your hardware is compatible (pretty much any computer built after 1997 will be). And you will probably want to use a QuakeWorld engine for playing over the Internet. However, for single-player games, especially when you're just getting started, a NetQuake engine may be ideal, for the simple reason that QuakeWorld engines often don't support single-player games.

===More information===
Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing more technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

* ''[[QUAKE.EXE]]'' aka DOS Quake — for DOS or Win95/98/Me only; software rendering
* [[WinQuake]] — native Win32 (Win95 through Vista) version of ''QUAKE.EXE''; software rendering
* [[GLQuake]] — Win32 (Win95 through Vista) and Linux 2.0 version of ''QUAKE.EXE''; OpenGL rendering

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for Linux 2.0 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for an unofficial engine that will work with a modern system.

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [http://www.celephais.net/fitzquake/ FitzQuake] - probably the most widely compatible OpenGL engine for Windows.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [http://mhquake.blogspot.com/ MHQuake]
* [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]

A comprehensive overview of unofficial engines for Linux can be found in the [http://tldp.org/HOWTO/Quake-HOWTO-3.html Game Engines section] of the [http://tldp.org/HOWTO/ Linux Quake HOWTO] by Stevenaaus.</text>
      <sha1>t2y6ycs7botvv21yxaf9vh0kyh1k3qo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1086</id>
      <parentid>1082</parentid>
      <timestamp>2009-07-12T06:59:40Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>/* Unofficial engine list */ link FitzQuake to local article first</comment>
      <text xml:space="preserve" bytes="7017">==Overview==
The '''game engine''' (a.k.a. '''Quake engine''' or just '''engine''') is the 'executable' program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

===Client-server model===
Quake engines operate on a client-server model. Depending on the engine, the client and server can be in the same file, or can be separate.

If they're in the same file, then when you run the engine, the server always runs. The client normally runs, too, unless you did something special to launch the engine in a server-only mode (e.g., for other people to connect to for playing over a network). So when you play a single-player game of Quake, the client portion of your engine communicates with the server portion. When you play a multiplayer game over a network, the client portion of your engine instead communicates with a remote server, which naturally will be subject to speed limits and delays inherent in the network.

If they're separate programs, then you only run the client, and you tell it where a server is running that you want to connect to. A [[server browser]] can help you locate servers where you can join a game and play with other people.

===Networking and graphics===
Engines generally fall into two categories:
* &quot;[[NetQuake]]&quot; engines: engines with networking code compatible with that of the original Quake engine.
* &quot;[[QuakeWorld]]&quot; engines: engines with networking code compatible with that of the original QuakeWorld engine.

Additionally, all engines use one of two graphics rendering technologies:
* Software rendering: rendering is done entirely in software, without the help of graphics hardware, as in the original Quake and QuakeWorld engines.
* OpenGL rendering: rendering is done with the help of graphics hardware, as in the original GLQuake and GLQuakeWorld engines.

QuakeWorld-style networking code and OpenGL-style rendering are standard nowadays in pretty much every first-person shooter, but at the time Quake was released in 1996, both were new technologies.

You will probably want to use an engine with OpenGL support, if your hardware is compatible (pretty much any computer built after 1997 will be). And you will probably want to use a QuakeWorld engine for playing over the Internet. However, for single-player games, especially when you're just getting started, a NetQuake engine may be ideal, for the simple reason that QuakeWorld engines often don't support single-player games.

===More information===
Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing more technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

* ''[[QUAKE.EXE]]'' aka DOS Quake — for DOS or Win95/98/Me only; software rendering
* [[WinQuake]] — native Win32 (Win95 through Vista) version of ''QUAKE.EXE''; software rendering
* [[GLQuake]] — Win32 (Win95 through Vista) and Linux 2.0 version of ''QUAKE.EXE''; OpenGL rendering

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for Linux 2.0 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for an unofficial engine that will work with a modern system.

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [[FitzQuake]] - probably the most widely compatible OpenGL engine for Windows; SDL port available for Linux &amp; Mac OS X.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [http://mhquake.blogspot.com/ MHQuake]
* [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]

A comprehensive overview of unofficial engines for Linux can be found in the [http://tldp.org/HOWTO/Quake-HOWTO-3.html Game Engines section] of the [http://tldp.org/HOWTO/ Linux Quake HOWTO] by Stevenaaus.</text>
      <sha1>r2wmx6rd02em7p012prk9le71h6pmo1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1087</id>
      <parentid>1086</parentid>
      <timestamp>2009-07-12T07:00:13Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>/* Unofficial engine list */ clarify that FitzQuake is a NetQuake engine</comment>
      <text xml:space="preserve" bytes="7026">==Overview==
The '''game engine''' (a.k.a. '''Quake engine''' or just '''engine''') is the 'executable' program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

===Client-server model===
Quake engines operate on a client-server model. Depending on the engine, the client and server can be in the same file, or can be separate.

If they're in the same file, then when you run the engine, the server always runs. The client normally runs, too, unless you did something special to launch the engine in a server-only mode (e.g., for other people to connect to for playing over a network). So when you play a single-player game of Quake, the client portion of your engine communicates with the server portion. When you play a multiplayer game over a network, the client portion of your engine instead communicates with a remote server, which naturally will be subject to speed limits and delays inherent in the network.

If they're separate programs, then you only run the client, and you tell it where a server is running that you want to connect to. A [[server browser]] can help you locate servers where you can join a game and play with other people.

===Networking and graphics===
Engines generally fall into two categories:
* &quot;[[NetQuake]]&quot; engines: engines with networking code compatible with that of the original Quake engine.
* &quot;[[QuakeWorld]]&quot; engines: engines with networking code compatible with that of the original QuakeWorld engine.

Additionally, all engines use one of two graphics rendering technologies:
* Software rendering: rendering is done entirely in software, without the help of graphics hardware, as in the original Quake and QuakeWorld engines.
* OpenGL rendering: rendering is done with the help of graphics hardware, as in the original GLQuake and GLQuakeWorld engines.

QuakeWorld-style networking code and OpenGL-style rendering are standard nowadays in pretty much every first-person shooter, but at the time Quake was released in 1996, both were new technologies.

You will probably want to use an engine with OpenGL support, if your hardware is compatible (pretty much any computer built after 1997 will be). And you will probably want to use a QuakeWorld engine for playing over the Internet. However, for single-player games, especially when you're just getting started, a NetQuake engine may be ideal, for the simple reason that QuakeWorld engines often don't support single-player games.

===More information===
Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing more technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

* ''[[QUAKE.EXE]]'' aka DOS Quake — for DOS or Win95/98/Me only; software rendering
* [[WinQuake]] — native Win32 (Win95 through Vista) version of ''QUAKE.EXE''; software rendering
* [[GLQuake]] — Win32 (Win95 through Vista) and Linux 2.0 version of ''QUAKE.EXE''; OpenGL rendering

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for Linux 2.0 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for an unofficial engine that will work with a modern system.

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [[FitzQuake]] - probably the most widely compatible OpenGL NetQuake engine for Windows; SDL port available for Linux &amp; Mac OS X.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [http://mhquake.blogspot.com/ MHQuake]
* [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]

A comprehensive overview of unofficial engines for Linux can be found in the [http://tldp.org/HOWTO/Quake-HOWTO-3.html Game Engines section] of the [http://tldp.org/HOWTO/ Linux Quake HOWTO] by Stevenaaus.</text>
      <sha1>4t3jt85tobbvp0fvb4p3vrvr1x1jo0e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1088</id>
      <parentid>1087</parentid>
      <timestamp>2009-07-12T07:07:38Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>/* Official engines */ +QuakeWorld</comment>
      <text xml:space="preserve" bytes="7163">==Overview==
The '''game engine''' (a.k.a. '''Quake engine''' or just '''engine''') is the 'executable' program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

===Client-server model===
Quake engines operate on a client-server model. Depending on the engine, the client and server can be in the same file, or can be separate.

If they're in the same file, then when you run the engine, the server always runs. The client normally runs, too, unless you did something special to launch the engine in a server-only mode (e.g., for other people to connect to for playing over a network). So when you play a single-player game of Quake, the client portion of your engine communicates with the server portion. When you play a multiplayer game over a network, the client portion of your engine instead communicates with a remote server, which naturally will be subject to speed limits and delays inherent in the network.

If they're separate programs, then you only run the client, and you tell it where a server is running that you want to connect to. A [[server browser]] can help you locate servers where you can join a game and play with other people.

===Networking and graphics===
Engines generally fall into two categories:
* &quot;[[NetQuake]]&quot; engines: engines with networking code compatible with that of the original Quake engine.
* &quot;[[QuakeWorld]]&quot; engines: engines with networking code compatible with that of the original QuakeWorld engine.

Additionally, all engines use one of two graphics rendering technologies:
* Software rendering: rendering is done entirely in software, without the help of graphics hardware, as in the original Quake and QuakeWorld engines.
* OpenGL rendering: rendering is done with the help of graphics hardware, as in the original GLQuake and GLQuakeWorld engines.

QuakeWorld-style networking code and OpenGL-style rendering are standard nowadays in pretty much every first-person shooter, but at the time Quake was released in 1996, both were new technologies.

You will probably want to use an engine with OpenGL support, if your hardware is compatible (pretty much any computer built after 1997 will be). And you will probably want to use a QuakeWorld engine for playing over the Internet. However, for single-player games, especially when you're just getting started, a NetQuake engine may be ideal, for the simple reason that QuakeWorld engines often don't support single-player games.

===More information===
Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing more technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

* ''[[QUAKE.EXE]]'' aka DOS Quake — for DOS or Win95/98/Me only; software rendering
* [[WinQuake]] — Win32 (Win95 through Vista) version of ''QUAKE.EXE''; software rendering
* [[GLQuake]] — Win32 (Win95 through Vista) and Linux 2.0 version of ''QUAKE.EXE''; OpenGL rendering
* [[QuakeWorld]] — Win32 (Win95 through Vista), Linux 2.0, BSDI 3.0, Solaris 2.5.1 alternative to ''QUAKE.EXE''; software or OpenGL rendering

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for Linux 2.0 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for an unofficial engine that will work with a modern system.

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [[FitzQuake]] - probably the most widely compatible OpenGL NetQuake engine for Windows; SDL port available for Linux &amp; Mac OS X.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [http://mhquake.blogspot.com/ MHQuake]
* [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]

A comprehensive overview of unofficial engines for Linux can be found in the [http://tldp.org/HOWTO/Quake-HOWTO-3.html Game Engines section] of the [http://tldp.org/HOWTO/ Linux Quake HOWTO] by Stevenaaus.</text>
      <sha1>j8gvkhadj0didrha2c2bkmnl1hxjcls</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1090</id>
      <parentid>1088</parentid>
      <timestamp>2009-07-12T07:12:43Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>/* Official engines */ clarify official engines are NetQuake except for QuakeWorld</comment>
      <text xml:space="preserve" bytes="7262">==Overview==
The '''game engine''' (a.k.a. '''Quake engine''' or just '''engine''') is the 'executable' program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

===Client-server model===
Quake engines operate on a client-server model. Depending on the engine, the client and server can be in the same file, or can be separate.

If they're in the same file, then when you run the engine, the server always runs. The client normally runs, too, unless you did something special to launch the engine in a server-only mode (e.g., for other people to connect to for playing over a network). So when you play a single-player game of Quake, the client portion of your engine communicates with the server portion. When you play a multiplayer game over a network, the client portion of your engine instead communicates with a remote server, which naturally will be subject to speed limits and delays inherent in the network.

If they're separate programs, then you only run the client, and you tell it where a server is running that you want to connect to. A [[server browser]] can help you locate servers where you can join a game and play with other people.

===Networking and graphics===
Engines generally fall into two categories:
* &quot;[[NetQuake]]&quot; engines: engines with networking code compatible with that of the original Quake engine.
* &quot;[[QuakeWorld]]&quot; engines: engines with networking code compatible with that of the original QuakeWorld engine.

Additionally, all engines use one of two graphics rendering technologies:
* Software rendering: rendering is done entirely in software, without the help of graphics hardware, as in the original Quake and QuakeWorld engines.
* OpenGL rendering: rendering is done with the help of graphics hardware, as in the original GLQuake and GLQuakeWorld engines.

QuakeWorld-style networking code and OpenGL-style rendering are standard nowadays in pretty much every first-person shooter, but at the time Quake was released in 1996, both were new technologies.

You will probably want to use an engine with OpenGL support, if your hardware is compatible (pretty much any computer built after 1997 will be). And you will probably want to use a QuakeWorld engine for playing over the Internet. However, for single-player games, especially when you're just getting started, a NetQuake engine may be ideal, for the simple reason that QuakeWorld engines often don't support single-player games.

===More information===
Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing more technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

These three are NetQuake engines:
* ''[[QUAKE.EXE]]'' aka DOS Quake — for DOS or Win95/98/Me only; software rendering
* [[WinQuake]] — Win32 (Win95 through Vista) version of ''QUAKE.EXE''; software rendering
* [[GLQuake]] — Win32 (Win95 through Vista) and Linux 2.0 version of ''QUAKE.EXE''; OpenGL rendering

And then there's the original QuakeWorld engine:
* [[QuakeWorld]] — Win32 (Win95 through Vista), Linux 2.0, BSDI 3.0, Solaris 2.5.1; software or OpenGL rendering (clients for both are distributed together)

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for Linux 2.0 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for an unofficial engine that will work with a modern system.

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [[FitzQuake]] - probably the most widely compatible OpenGL NetQuake engine for Windows; SDL port available for Linux &amp; Mac OS X.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [http://mhquake.blogspot.com/ MHQuake]
* [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]

A comprehensive overview of unofficial engines for Linux can be found in the [http://tldp.org/HOWTO/Quake-HOWTO-3.html Game Engines section] of the [http://tldp.org/HOWTO/ Linux Quake HOWTO] by Stevenaaus.</text>
      <sha1>pif3nv5t9zj27x04mka1zx9dx43oslb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1202</id>
      <parentid>1090</parentid>
      <timestamp>2009-09-24T18:11:04Z</timestamp>
      <contributor>
        <username>Mh</username>
        <id>20</id>
      </contributor>
      <comment>Updated for DirectQ</comment>
      <text xml:space="preserve" bytes="7278">==Overview==
The '''game engine''' (a.k.a. '''Quake engine''' or just '''engine''') is the 'executable' program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

===Client-server model===
Quake engines operate on a client-server model. Depending on the engine, the client and server can be in the same file, or can be separate.

If they're in the same file, then when you run the engine, the server always runs. The client normally runs, too, unless you did something special to launch the engine in a server-only mode (e.g., for other people to connect to for playing over a network). So when you play a single-player game of Quake, the client portion of your engine communicates with the server portion. When you play a multiplayer game over a network, the client portion of your engine instead communicates with a remote server, which naturally will be subject to speed limits and delays inherent in the network.

If they're separate programs, then you only run the client, and you tell it where a server is running that you want to connect to. A [[server browser]] can help you locate servers where you can join a game and play with other people.

===Networking and graphics===
Engines generally fall into two categories:
* &quot;[[NetQuake]]&quot; engines: engines with networking code compatible with that of the original Quake engine.
* &quot;[[QuakeWorld]]&quot; engines: engines with networking code compatible with that of the original QuakeWorld engine.

Additionally, all engines use one of two graphics rendering technologies:
* Software rendering: rendering is done entirely in software, without the help of graphics hardware, as in the original Quake and QuakeWorld engines.
* OpenGL rendering: rendering is done with the help of graphics hardware, as in the original GLQuake and GLQuakeWorld engines.

QuakeWorld-style networking code and OpenGL-style rendering are standard nowadays in pretty much every first-person shooter, but at the time Quake was released in 1996, both were new technologies.

You will probably want to use an engine with OpenGL support, if your hardware is compatible (pretty much any computer built after 1997 will be). And you will probably want to use a QuakeWorld engine for playing over the Internet. However, for single-player games, especially when you're just getting started, a NetQuake engine may be ideal, for the simple reason that QuakeWorld engines often don't support single-player games.

===More information===
Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing more technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

These three are NetQuake engines:
* ''[[QUAKE.EXE]]'' aka DOS Quake — for DOS or Win95/98/Me only; software rendering
* [[WinQuake]] — Win32 (Win95 through Vista) version of ''QUAKE.EXE''; software rendering
* [[GLQuake]] — Win32 (Win95 through Vista) and Linux 2.0 version of ''QUAKE.EXE''; OpenGL rendering

And then there's the original QuakeWorld engine:
* [[QuakeWorld]] — Win32 (Win95 through Vista), Linux 2.0, BSDI 3.0, Solaris 2.5.1; software or OpenGL rendering (clients for both are distributed together)

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for Linux 2.0 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for an unofficial engine that will work with a modern system.

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [[FitzQuake]] - probably the most widely compatible OpenGL NetQuake engine for Windows; SDL port available for Linux &amp; Mac OS X.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [http://mhquake.blogspot.com/ DirectQ] - Direct3D port
* [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]

A comprehensive overview of unofficial engines for Linux can be found in the [http://tldp.org/HOWTO/Quake-HOWTO-3.html Game Engines section] of the [http://tldp.org/HOWTO/ Linux Quake HOWTO] by Stevenaaus.</text>
      <sha1>k5su4w0vnns7tauprs0rjqcm2ymbjwd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1203</id>
      <parentid>1202</parentid>
      <timestamp>2009-09-24T18:11:49Z</timestamp>
      <contributor>
        <username>Mh</username>
        <id>20</id>
      </contributor>
      <comment>Fixed sorting</comment>
      <text xml:space="preserve" bytes="7278">==Overview==
The '''game engine''' (a.k.a. '''Quake engine''' or just '''engine''') is the 'executable' program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

===Client-server model===
Quake engines operate on a client-server model. Depending on the engine, the client and server can be in the same file, or can be separate.

If they're in the same file, then when you run the engine, the server always runs. The client normally runs, too, unless you did something special to launch the engine in a server-only mode (e.g., for other people to connect to for playing over a network). So when you play a single-player game of Quake, the client portion of your engine communicates with the server portion. When you play a multiplayer game over a network, the client portion of your engine instead communicates with a remote server, which naturally will be subject to speed limits and delays inherent in the network.

If they're separate programs, then you only run the client, and you tell it where a server is running that you want to connect to. A [[server browser]] can help you locate servers where you can join a game and play with other people.

===Networking and graphics===
Engines generally fall into two categories:
* &quot;[[NetQuake]]&quot; engines: engines with networking code compatible with that of the original Quake engine.
* &quot;[[QuakeWorld]]&quot; engines: engines with networking code compatible with that of the original QuakeWorld engine.

Additionally, all engines use one of two graphics rendering technologies:
* Software rendering: rendering is done entirely in software, without the help of graphics hardware, as in the original Quake and QuakeWorld engines.
* OpenGL rendering: rendering is done with the help of graphics hardware, as in the original GLQuake and GLQuakeWorld engines.

QuakeWorld-style networking code and OpenGL-style rendering are standard nowadays in pretty much every first-person shooter, but at the time Quake was released in 1996, both were new technologies.

You will probably want to use an engine with OpenGL support, if your hardware is compatible (pretty much any computer built after 1997 will be). And you will probably want to use a QuakeWorld engine for playing over the Internet. However, for single-player games, especially when you're just getting started, a NetQuake engine may be ideal, for the simple reason that QuakeWorld engines often don't support single-player games.

===More information===
Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing more technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

These three are NetQuake engines:
* ''[[QUAKE.EXE]]'' aka DOS Quake — for DOS or Win95/98/Me only; software rendering
* [[WinQuake]] — Win32 (Win95 through Vista) version of ''QUAKE.EXE''; software rendering
* [[GLQuake]] — Win32 (Win95 through Vista) and Linux 2.0 version of ''QUAKE.EXE''; OpenGL rendering

And then there's the original QuakeWorld engine:
* [[QuakeWorld]] — Win32 (Win95 through Vista), Linux 2.0, BSDI 3.0, Solaris 2.5.1; software or OpenGL rendering (clients for both are distributed together)

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for Linux 2.0 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for an unofficial engine that will work with a modern system.

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://mhquake.blogspot.com/ DirectQ] - Direct3D port
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [[FitzQuake]] - probably the most widely compatible OpenGL NetQuake engine for Windows; SDL port available for Linux &amp; Mac OS X.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]

A comprehensive overview of unofficial engines for Linux can be found in the [http://tldp.org/HOWTO/Quake-HOWTO-3.html Game Engines section] of the [http://tldp.org/HOWTO/ Linux Quake HOWTO] by Stevenaaus.</text>
      <sha1>hhnx2n9ljs7qfwk3zeh0byo3az52r9m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1260</id>
      <parentid>1203</parentid>
      <timestamp>2009-09-25T09:24:28Z</timestamp>
      <contributor>
        <ip>193.49.97.126</ip>
      </contributor>
      <comment>/* Unofficial engine list */</comment>
      <text xml:space="preserve" bytes="7310">==Overview==
The '''game engine''' (a.k.a. '''Quake engine''' or just '''engine''') is the 'executable' program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

===Client-server model===
Quake engines operate on a client-server model. Depending on the engine, the client and server can be in the same file, or can be separate.

If they're in the same file, then when you run the engine, the server always runs. The client normally runs, too, unless you did something special to launch the engine in a server-only mode (e.g., for other people to connect to for playing over a network). So when you play a single-player game of Quake, the client portion of your engine communicates with the server portion. When you play a multiplayer game over a network, the client portion of your engine instead communicates with a remote server, which naturally will be subject to speed limits and delays inherent in the network.

If they're separate programs, then you only run the client, and you tell it where a server is running that you want to connect to. A [[server browser]] can help you locate servers where you can join a game and play with other people.

===Networking and graphics===
Engines generally fall into two categories:
* &quot;[[NetQuake]]&quot; engines: engines with networking code compatible with that of the original Quake engine.
* &quot;[[QuakeWorld]]&quot; engines: engines with networking code compatible with that of the original QuakeWorld engine.

Additionally, all engines use one of two graphics rendering technologies:
* Software rendering: rendering is done entirely in software, without the help of graphics hardware, as in the original Quake and QuakeWorld engines.
* OpenGL rendering: rendering is done with the help of graphics hardware, as in the original GLQuake and GLQuakeWorld engines.

QuakeWorld-style networking code and OpenGL-style rendering are standard nowadays in pretty much every first-person shooter, but at the time Quake was released in 1996, both were new technologies.

You will probably want to use an engine with OpenGL support, if your hardware is compatible (pretty much any computer built after 1997 will be). And you will probably want to use a QuakeWorld engine for playing over the Internet. However, for single-player games, especially when you're just getting started, a NetQuake engine may be ideal, for the simple reason that QuakeWorld engines often don't support single-player games.

===More information===
Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing more technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

These three are NetQuake engines:
* ''[[QUAKE.EXE]]'' aka DOS Quake — for DOS or Win95/98/Me only; software rendering
* [[WinQuake]] — Win32 (Win95 through Vista) version of ''QUAKE.EXE''; software rendering
* [[GLQuake]] — Win32 (Win95 through Vista) and Linux 2.0 version of ''QUAKE.EXE''; OpenGL rendering

And then there's the original QuakeWorld engine:
* [[QuakeWorld]] — Win32 (Win95 through Vista), Linux 2.0, BSDI 3.0, Solaris 2.5.1; software or OpenGL rendering (clients for both are distributed together)

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for Linux 2.0 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for an unofficial engine that will work with a modern system.

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://mhquake.blogspot.com/ DirectQ] - Direct3D port
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [[FitzQuake]] - probably the most widely compatible OpenGL NetQuake engine for Windows; SDL port available for Linux &amp; Mac OS X.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://quore.free.fr/ Quore]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]

A comprehensive overview of unofficial engines for Linux can be found in the [http://tldp.org/HOWTO/Quake-HOWTO-3.html Game Engines section] of the [http://tldp.org/HOWTO/ Linux Quake HOWTO] by Stevenaaus.</text>
      <sha1>birp4c28hlev5olkxd2kpatccxiz4gk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1455</id>
      <parentid>1260</parentid>
      <timestamp>2009-11-17T08:39:19Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="7310">==Overview==
The '''game engine''' (a.k.a. '''Quake engine''' or just '''engine''') is the 'executable' program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

===Client-server model===
Quake engines operate on a client-server model. Depending on the engine, the client and server can be in the same file, or can be separate.

If they're in the same file, then when you run the engine, the server always runs. The client normally runs, too, unless you did something special to launch the engine in a server-only mode (e.g., for other people to connect to for playing over a network). So when you play a single-player game of Quake, the client portion of your engine communicates with the server portion. When you play a multiplayer game over a network, the client portion of your engine instead communicates with a remote server, which naturally will be subject to speed limits and delays inherent in the network.

If they're separate programs, then you only run the client, and you tell it where a server is running that you want to connect to. A [[server browser]] can help you locate servers where you can join a game and play with other people.

===Networking and graphics===
Engines generally fall into two categories:
* &quot;[[NetQuake]]&quot; engines: engines with networking code compatible with that of the original Quake engine.
* &quot;[[QuakeWorld]]&quot; engines: engines with networking code compatible with that of the original QuakeWorld engine.

Additionally, all engines use one of two graphics rendering technologies:
* Software rendering: rendering is done entirely in software, without the help of graphics hardware, as in the original Quake and QuakeWorld engines.
* OpenGL rendering: rendering is done with the help of graphics hardware, as in the original GLQuake and GLQuakeWorld engines.

QuakeWorld-style networking code and OpenGL-style rendering are standard nowadays in pretty much every first-person shooter, but at the time Quake was released in 1996, both were new technologies.

You will probably want to use an engine with OpenGL support, if your hardware is compatible (pretty much any computer built after 1997 will be). And you will probably want to use a QuakeWorld engine for playing over the Internet. However, for single-player games, especially when you're just getting started, a NetQuake engine may be ideal, for the simple reason that QuakeWorld engines often don't support single-player games.

===More information===
Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing more technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

These three are NetQuake engines:
* ''[[QUAKE.EXE]]'' aka DOS Quake — for DOS or Win95/98/Me only; software rendering
* [[WinQuake]] — Win32 (Win95 through Vista) version of ''QUAKE.EXE''; software rendering
* [[GLQuake]] — Win32 (Win95 through Vista) and Linux 2.0 version of ''QUAKE.EXE''; OpenGL rendering

And then there's the original QuakeWorld engine:
* [[QuakeWorld]] — Win32 (Win95 through Vista), Linux 2.0, BSDI 3.0, Solaris 2.5.1; software or OpenGL rendering (clients for both are distributed together)

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for Linux 2.0 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for an unofficial engine that will work with a modern system.

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://mhquake.blogspot.com/ DirectQ] - Direct3D port
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [[Fitzquake]] - probably the most widely compatible OpenGL NetQuake engine for Windows; SDL port available for Linux &amp; Mac OS X.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://quore.free.fr/ Quore]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]

A comprehensive overview of unofficial engines for Linux can be found in the [http://tldp.org/HOWTO/Quake-HOWTO-3.html Game Engines section] of the [http://tldp.org/HOWTO/ Linux Quake HOWTO] by Stevenaaus.</text>
      <sha1>hdnoqnvdampptyy4dex0f4yv1lvq562</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1460</id>
      <parentid>1455</parentid>
      <timestamp>2009-11-25T04:29:27Z</timestamp>
      <contributor>
        <ip>75.38.157.126</ip>
      </contributor>
      <comment>/* Official engines */</comment>
      <text xml:space="preserve" bytes="7302">==Overview==
The '''game engine''' (a.k.a. '''Quake engine''' or just '''engine''') is the 'executable' program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

===Client-server model===
Quake engines operate on a client-server model. Depending on the engine, the client and server can be in the same file, or can be separate.

If they're in the same file, then when you run the engine, the server always runs. The client normally runs, too, unless you did something special to launch the engine in a server-only mode (e.g., for other people to connect to for playing over a network). So when you play a single-player game of Quake, the client portion of your engine communicates with the server portion. When you play a multiplayer game over a network, the client portion of your engine instead communicates with a remote server, which naturally will be subject to speed limits and delays inherent in the network.

If they're separate programs, then you only run the client, and you tell it where a server is running that you want to connect to. A [[server browser]] can help you locate servers where you can join a game and play with other people.

===Networking and graphics===
Engines generally fall into two categories:
* &quot;[[NetQuake]]&quot; engines: engines with networking code compatible with that of the original Quake engine.
* &quot;[[QuakeWorld]]&quot; engines: engines with networking code compatible with that of the original QuakeWorld engine.

Additionally, all engines use one of two graphics rendering technologies:
* Software rendering: rendering is done entirely in software, without the help of graphics hardware, as in the original Quake and QuakeWorld engines.
* OpenGL rendering: rendering is done with the help of graphics hardware, as in the original GLQuake and GLQuakeWorld engines.

QuakeWorld-style networking code and OpenGL-style rendering are standard nowadays in pretty much every first-person shooter, but at the time Quake was released in 1996, both were new technologies.

You will probably want to use an engine with OpenGL support, if your hardware is compatible (pretty much any computer built after 1997 will be). And you will probably want to use a QuakeWorld engine for playing over the Internet. However, for single-player games, especially when you're just getting started, a NetQuake engine may be ideal, for the simple reason that QuakeWorld engines often don't support single-player games.

===More information===
Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing more technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

These three are NetQuake engines:
* ''[[QUAKE.EXE]]'' aka DOS Quake — for DOS or Win95/98/Me only; software rendering
* [[WinQuake]] — Win32 (Win95 through 7) version of ''QUAKE.EXE''; software rendering
* [[GLQuake]] — Win32 (Win95 through 7) and Linux 2.0 version of ''QUAKE.EXE''; OpenGL rendering

And then there's the original QuakeWorld engine:
* [[QuakeWorld]] — Win32 (Win95 through Vista), Linux 2.0, BSDI 3.0, Solaris 2.5.1; software or OpenGL rendering (clients for both are distributed together)

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for Linux 2.0 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for an unofficial engine that will work with a modern system.

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://mhquake.blogspot.com/ DirectQ] - Direct3D port
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [[Fitzquake]] - probably the most widely compatible OpenGL NetQuake engine for Windows; SDL port available for Linux &amp; Mac OS X.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://quore.free.fr/ Quore]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]

A comprehensive overview of unofficial engines for Linux can be found in the [http://tldp.org/HOWTO/Quake-HOWTO-3.html Game Engines section] of the [http://tldp.org/HOWTO/ Linux Quake HOWTO] by Stevenaaus.</text>
      <sha1>afgh8m6ol6x2a061kcb4njn2dpg11hm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1544</id>
      <parentid>1460</parentid>
      <timestamp>2010-01-12T13:05:45Z</timestamp>
      <contributor>
        <ip>99.54.146.62</ip>
      </contributor>
      <comment>/* Unofficial engine list */</comment>
      <text xml:space="preserve" bytes="7354">==Overview==
The '''game engine''' (a.k.a. '''Quake engine''' or just '''engine''') is the 'executable' program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

===Client-server model===
Quake engines operate on a client-server model. Depending on the engine, the client and server can be in the same file, or can be separate.

If they're in the same file, then when you run the engine, the server always runs. The client normally runs, too, unless you did something special to launch the engine in a server-only mode (e.g., for other people to connect to for playing over a network). So when you play a single-player game of Quake, the client portion of your engine communicates with the server portion. When you play a multiplayer game over a network, the client portion of your engine instead communicates with a remote server, which naturally will be subject to speed limits and delays inherent in the network.

If they're separate programs, then you only run the client, and you tell it where a server is running that you want to connect to. A [[server browser]] can help you locate servers where you can join a game and play with other people.

===Networking and graphics===
Engines generally fall into two categories:
* &quot;[[NetQuake]]&quot; engines: engines with networking code compatible with that of the original Quake engine.
* &quot;[[QuakeWorld]]&quot; engines: engines with networking code compatible with that of the original QuakeWorld engine.

Additionally, all engines use one of two graphics rendering technologies:
* Software rendering: rendering is done entirely in software, without the help of graphics hardware, as in the original Quake and QuakeWorld engines.
* OpenGL rendering: rendering is done with the help of graphics hardware, as in the original GLQuake and GLQuakeWorld engines.

QuakeWorld-style networking code and OpenGL-style rendering are standard nowadays in pretty much every first-person shooter, but at the time Quake was released in 1996, both were new technologies.

You will probably want to use an engine with OpenGL support, if your hardware is compatible (pretty much any computer built after 1997 will be). And you will probably want to use a QuakeWorld engine for playing over the Internet. However, for single-player games, especially when you're just getting started, a NetQuake engine may be ideal, for the simple reason that QuakeWorld engines often don't support single-player games.

===More information===
Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing more technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

These three are NetQuake engines:
* ''[[QUAKE.EXE]]'' aka DOS Quake — for DOS or Win95/98/Me only; software rendering
* [[WinQuake]] — Win32 (Win95 through 7) version of ''QUAKE.EXE''; software rendering
* [[GLQuake]] — Win32 (Win95 through 7) and Linux 2.0 version of ''QUAKE.EXE''; OpenGL rendering

And then there's the original QuakeWorld engine:
* [[QuakeWorld]] — Win32 (Win95 through Vista), Linux 2.0, BSDI 3.0, Solaris 2.5.1; software or OpenGL rendering (clients for both are distributed together)

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for Linux 2.0 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for an unofficial engine that will work with a modern system.

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [[DarkPlaces]] [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [[DirectQ]] [http://mhquake.blogspot.com/ DirectQ] - Direct3D port
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [[FitzQuake]] - probably the most widely compatible OpenGL NetQuake engine for Windows; SDL port available for Linux &amp; Mac OS X.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [[ProQuake 4]] [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [[Quore]] [http://quore.free.fr/ Quore]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]

A comprehensive overview of unofficial engines for Linux can be found in the [http://tldp.org/HOWTO/Quake-HOWTO-3.html Game Engines section] of the [http://tldp.org/HOWTO/ Linux Quake HOWTO] by Stevenaaus.</text>
      <sha1>e33amby07l4t9ck7m6hmxcatcex0nko</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1597</id>
      <parentid>1544</parentid>
      <timestamp>2010-02-09T01:12:04Z</timestamp>
      <contributor>
        <ip>67.176.79.127</ip>
      </contributor>
      <comment>/* Unofficial engine list */ +Direct3D ports; nQuake</comment>
      <text xml:space="preserve" bytes="7557">==Overview==
The '''game engine''' (a.k.a. '''Quake engine''' or just '''engine''') is the 'executable' program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

===Client-server model===
Quake engines operate on a client-server model. Depending on the engine, the client and server can be in the same file, or can be separate.

If they're in the same file, then when you run the engine, the server always runs. The client normally runs, too, unless you did something special to launch the engine in a server-only mode (e.g., for other people to connect to for playing over a network). So when you play a single-player game of Quake, the client portion of your engine communicates with the server portion. When you play a multiplayer game over a network, the client portion of your engine instead communicates with a remote server, which naturally will be subject to speed limits and delays inherent in the network.

If they're separate programs, then you only run the client, and you tell it where a server is running that you want to connect to. A [[server browser]] can help you locate servers where you can join a game and play with other people.

===Networking and graphics===
Engines generally fall into two categories:
* &quot;[[NetQuake]]&quot; engines: engines with networking code compatible with that of the original Quake engine.
* &quot;[[QuakeWorld]]&quot; engines: engines with networking code compatible with that of the original QuakeWorld engine.

Additionally, all engines use one of two graphics rendering technologies:
* Software rendering: rendering is done entirely in software, without the help of graphics hardware, as in the original Quake and QuakeWorld engines.
* OpenGL rendering: rendering is done with the help of graphics hardware, as in the original GLQuake and GLQuakeWorld engines.

QuakeWorld-style networking code and OpenGL-style rendering are standard nowadays in pretty much every first-person shooter, but at the time Quake was released in 1996, both were new technologies.

You will probably want to use an engine with OpenGL support, if your hardware is compatible (pretty much any computer built after 1997 will be). And you will probably want to use a QuakeWorld engine for playing over the Internet. However, for single-player games, especially when you're just getting started, a NetQuake engine may be ideal, for the simple reason that QuakeWorld engines often don't support single-player games.

===More information===
Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing more technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

These three are NetQuake engines:
* ''[[QUAKE.EXE]]'' aka DOS Quake — for DOS or Win95/98/Me only; software rendering
* [[WinQuake]] — Win32 (Win95 through 7) version of ''QUAKE.EXE''; software rendering
* [[GLQuake]] — Win32 (Win95 through 7) and Linux 2.0 version of ''QUAKE.EXE''; OpenGL rendering

And then there's the original QuakeWorld engine:
* [[QuakeWorld]] — Win32 (Win95 through Vista), Linux 2.0, BSDI 3.0, Solaris 2.5.1; software or OpenGL rendering (clients for both are distributed together)

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for Linux 2.0 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for an unofficial engine that will work with a modern system.

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [[DarkPlaces]] [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [[DirectQ]] [http://mhquake.blogspot.com/ DirectQ] - Direct3D port
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [[FitzQuake]] - probably the most widely compatible OpenGL NetQuake engine for Windows; SDL port available for Linux &amp; Mac OS X.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [http://www.nquake.com/ nQuake] (f.k.a. eQuake and fQuake) - a preconfigured distribution of ezQuake + bots, demos, &amp; minor enhancements
* [[ProQuake 4]] [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [[Quore]] [http://quore.free.fr/ Quore]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]
* [http://quakeone.com/mh/ Direct3D 8 ports of several engines]

A comprehensive overview of unofficial engines for Linux can be found in the [http://tldp.org/HOWTO/Quake-HOWTO-3.html Game Engines section] of the [http://tldp.org/HOWTO/ Linux Quake HOWTO] by Stevenaaus.</text>
      <sha1>nxzvj92o4f0a6mi4c390cjb9n0tjzag</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1599</id>
      <parentid>1597</parentid>
      <timestamp>2010-02-23T13:46:20Z</timestamp>
      <contributor>
        <ip>85.132.153.171</ip>
      </contributor>
      <comment>/* Unix engines */</comment>
      <text xml:space="preserve" bytes="7702">==Overview==
The '''game engine''' (a.k.a. '''Quake engine''' or just '''engine''') is the 'executable' program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

===Client-server model===
Quake engines operate on a client-server model. Depending on the engine, the client and server can be in the same file, or can be separate.

If they're in the same file, then when you run the engine, the server always runs. The client normally runs, too, unless you did something special to launch the engine in a server-only mode (e.g., for other people to connect to for playing over a network). So when you play a single-player game of Quake, the client portion of your engine communicates with the server portion. When you play a multiplayer game over a network, the client portion of your engine instead communicates with a remote server, which naturally will be subject to speed limits and delays inherent in the network.

If they're separate programs, then you only run the client, and you tell it where a server is running that you want to connect to. A [[server browser]] can help you locate servers where you can join a game and play with other people.

===Networking and graphics===
Engines generally fall into two categories:
* &quot;[[NetQuake]]&quot; engines: engines with networking code compatible with that of the original Quake engine.
* &quot;[[QuakeWorld]]&quot; engines: engines with networking code compatible with that of the original QuakeWorld engine.

Additionally, all engines use one of two graphics rendering technologies:
* Software rendering: rendering is done entirely in software, without the help of graphics hardware, as in the original Quake and QuakeWorld engines.
* OpenGL rendering: rendering is done with the help of graphics hardware, as in the original GLQuake and GLQuakeWorld engines.

QuakeWorld-style networking code and OpenGL-style rendering are standard nowadays in pretty much every first-person shooter, but at the time Quake was released in 1996, both were new technologies.

You will probably want to use an engine with OpenGL support, if your hardware is compatible (pretty much any computer built after 1997 will be). And you will probably want to use a QuakeWorld engine for playing over the Internet. However, for single-player games, especially when you're just getting started, a NetQuake engine may be ideal, for the simple reason that QuakeWorld engines often don't support single-player games.

===More information===
Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing more technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

These three are NetQuake engines:
* ''[[QUAKE.EXE]]'' aka DOS Quake — for DOS or Win95/98/Me only; software rendering
* [[WinQuake]] — Win32 (Win95 through 7) version of ''QUAKE.EXE''; software rendering
* [[GLQuake]] — Win32 (Win95 through 7) and Linux 2.0 version of ''QUAKE.EXE''; OpenGL rendering

And then there's the original QuakeWorld engine:
* [[QuakeWorld]] — Win32 (Win95 through Vista), Linux 2.0, BSDI 3.0, Solaris 2.5.1; software or OpenGL rendering (clients for both are distributed together)

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for GNU/Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for GNU/Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].
* SDLQuake 1.0.9 is in [http://www.libsdl.org/projects/quake/ ''libsdl.org/projects/'']. Software-rendering port. Requires libSDL 1.0.1.

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for an unofficial engine that will work with a modern system.
%%%

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [[DarkPlaces]] [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [[DirectQ]] [http://mhquake.blogspot.com/ DirectQ] - Direct3D port
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [[FitzQuake]] - probably the most widely compatible OpenGL NetQuake engine for Windows; SDL port available for Linux &amp; Mac OS X.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://www.dcemu.co.uk/vbulletin/showthread.php?t=100308 Makaqu]
* [http://www.nquake.com/ nQuake] (f.k.a. eQuake and fQuake) - a preconfigured distribution of ezQuake + bots, demos, &amp; minor enhancements
* [[ProQuake 4]] [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [[Quore]] [http://quore.free.fr/ Quore]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]
* [http://quakeone.com/mh/ Direct3D 8 ports of several engines]

A comprehensive overview of unofficial engines for Linux can be found in the [http://tldp.org/HOWTO/Quake-HOWTO-3.html Game Engines section] of the [http://tldp.org/HOWTO/ Linux Quake HOWTO] by Stevenaaus.</text>
      <sha1>eigs2zgd7n67ti0jqjoztcnmseo0jbr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1688</id>
      <parentid>1599</parentid>
      <timestamp>2013-03-24T18:11:02Z</timestamp>
      <contributor>
        <ip>189.84.179.15</ip>
      </contributor>
      <comment>Updated Makaqu's link.</comment>
      <text xml:space="preserve" bytes="7738">==Overview==
The '''game engine''' (a.k.a. '''Quake engine''' or just '''engine''') is the 'executable' program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

===Client-server model===
Quake engines operate on a client-server model. Depending on the engine, the client and server can be in the same file, or can be separate.

If they're in the same file, then when you run the engine, the server always runs. The client normally runs, too, unless you did something special to launch the engine in a server-only mode (e.g., for other people to connect to for playing over a network). So when you play a single-player game of Quake, the client portion of your engine communicates with the server portion. When you play a multiplayer game over a network, the client portion of your engine instead communicates with a remote server, which naturally will be subject to speed limits and delays inherent in the network.

If they're separate programs, then you only run the client, and you tell it where a server is running that you want to connect to. A [[server browser]] can help you locate servers where you can join a game and play with other people.

===Networking and graphics===
Engines generally fall into two categories:
* &quot;[[NetQuake]]&quot; engines: engines with networking code compatible with that of the original Quake engine.
* &quot;[[QuakeWorld]]&quot; engines: engines with networking code compatible with that of the original QuakeWorld engine.

Additionally, all engines use one of two graphics rendering technologies:
* Software rendering: rendering is done entirely in software, without the help of graphics hardware, as in the original Quake and QuakeWorld engines.
* OpenGL rendering: rendering is done with the help of graphics hardware, as in the original GLQuake and GLQuakeWorld engines.

QuakeWorld-style networking code and OpenGL-style rendering are standard nowadays in pretty much every first-person shooter, but at the time Quake was released in 1996, both were new technologies.

You will probably want to use an engine with OpenGL support, if your hardware is compatible (pretty much any computer built after 1997 will be). And you will probably want to use a QuakeWorld engine for playing over the Internet. However, for single-player games, especially when you're just getting started, a NetQuake engine may be ideal, for the simple reason that QuakeWorld engines often don't support single-player games.

===More information===
Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing more technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

These three are NetQuake engines:
* ''[[QUAKE.EXE]]'' aka DOS Quake — for DOS or Win95/98/Me only; software rendering
* [[WinQuake]] — Win32 (Win95 through 7) version of ''QUAKE.EXE''; software rendering
* [[GLQuake]] — Win32 (Win95 through 7) and Linux 2.0 version of ''QUAKE.EXE''; OpenGL rendering

And then there's the original QuakeWorld engine:
* [[QuakeWorld]] — Win32 (Win95 through Vista), Linux 2.0, BSDI 3.0, Solaris 2.5.1; software or OpenGL rendering (clients for both are distributed together)

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for GNU/Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for GNU/Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].
* SDLQuake 1.0.9 is in [http://www.libsdl.org/projects/quake/ ''libsdl.org/projects/'']. Software-rendering port. Requires libSDL 1.0.1.

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for an unofficial engine that will work with a modern system.
%%%

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* [[DarkPlaces]] [http://icculus.org/twilight/darkplaces/ DarkPlaces]
* [[DirectQ]] [http://mhquake.blogspot.com/ DirectQ] - Direct3D port
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* [[FitzQuake]] - probably the most widely compatible OpenGL NetQuake engine for Windows; SDL port available for Linux &amp; Mac OS X.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://code.google.com/p/makaqu/ Makaqu] - software-rendered NetQuake engine with advanced features.
* [http://www.nquake.com/ nQuake] (f.k.a. eQuake and fQuake) - a preconfigured distribution of ezQuake + bots, demos, &amp; minor enhancements
* [[ProQuake 4]] [http://quakeone.com/proquake/ Proquake]
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [[Quore]] [http://quore.free.fr/ Quore]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]
* [http://quakeone.com/mh/ Direct3D 8 ports of several engines]

A comprehensive overview of unofficial engines for Linux can be found in the [http://tldp.org/HOWTO/Quake-HOWTO-3.html Game Engines section] of the [http://tldp.org/HOWTO/ Linux Quake HOWTO] by Stevenaaus.</text>
      <sha1>2st30z9q9obbnfa14be5h0fsjdjiqix</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1858</id>
      <parentid>1688</parentid>
      <timestamp>2013-03-25T00:41:27Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>/* Unofficial engine list */ modifying links so internal and external ones stand out separately and to reduce redundancy</comment>
      <text xml:space="preserve" bytes="7774">==Overview==
The '''game engine''' (a.k.a. '''Quake engine''' or just '''engine''') is the 'executable' program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

===Client-server model===
Quake engines operate on a client-server model. Depending on the engine, the client and server can be in the same file, or can be separate.

If they're in the same file, then when you run the engine, the server always runs. The client normally runs, too, unless you did something special to launch the engine in a server-only mode (e.g., for other people to connect to for playing over a network). So when you play a single-player game of Quake, the client portion of your engine communicates with the server portion. When you play a multiplayer game over a network, the client portion of your engine instead communicates with a remote server, which naturally will be subject to speed limits and delays inherent in the network.

If they're separate programs, then you only run the client, and you tell it where a server is running that you want to connect to. A [[server browser]] can help you locate servers where you can join a game and play with other people.

===Networking and graphics===
Engines generally fall into two categories:
* &quot;[[NetQuake]]&quot; engines: engines with networking code compatible with that of the original Quake engine.
* &quot;[[QuakeWorld]]&quot; engines: engines with networking code compatible with that of the original QuakeWorld engine.

Additionally, all engines use one of two graphics rendering technologies:
* Software rendering: rendering is done entirely in software, without the help of graphics hardware, as in the original Quake and QuakeWorld engines.
* OpenGL rendering: rendering is done with the help of graphics hardware, as in the original GLQuake and GLQuakeWorld engines.

QuakeWorld-style networking code and OpenGL-style rendering are standard nowadays in pretty much every first-person shooter, but at the time Quake was released in 1996, both were new technologies.

You will probably want to use an engine with OpenGL support, if your hardware is compatible (pretty much any computer built after 1997 will be). And you will probably want to use a QuakeWorld engine for playing over the Internet. However, for single-player games, especially when you're just getting started, a NetQuake engine may be ideal, for the simple reason that QuakeWorld engines often don't support single-player games.

===More information===
Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing more technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

These three are NetQuake engines:
* ''[[QUAKE.EXE]]'' aka DOS Quake — for DOS or Win95/98/Me only; software rendering
* [[WinQuake]] — Win32 (Win95 through 7) version of ''QUAKE.EXE''; software rendering
* [[GLQuake]] — Win32 (Win95 through 7) and Linux 2.0 version of ''QUAKE.EXE''; OpenGL rendering

And then there's the original QuakeWorld engine:
* [[QuakeWorld]] — Win32 (Win95 through Vista), Linux 2.0, BSDI 3.0, Solaris 2.5.1; software or OpenGL rendering (clients for both are distributed together)

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for GNU/Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for GNU/Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].
* SDLQuake 1.0.9 is in [http://www.libsdl.org/projects/quake/ ''libsdl.org/projects/'']. Software-rendering port. Requires libSDL 1.0.1.

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for an unofficial engine that will work with a modern system.
%%%

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* '''[[DarkPlaces]]''' ([http://icculus.org/twilight/darkplaces/ website])
* '''[[DirectQ]]''' ([http://mhquake.blogspot.com/ website]) - Direct3D port
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* '''[[FitzQuake]]''' - probably the most widely compatible OpenGL NetQuake engine for Windows; SDL port available for Linux &amp; Mac OS X.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://code.google.com/p/makaqu/ Makaqu] - software-rendered NetQuake engine with advanced features.
* [http://www.nquake.com/ nQuake] (f.k.a. eQuake and fQuake) - a preconfigured distribution of ezQuake + bots, demos, &amp; minor enhancements
* '''[[ProQuake 4]]''' ([http://quakeone.com/proquake/ website])
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* '''[[Quore]]''' ([http://quore.free.fr/ website])
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]
* [http://quakeone.com/mh/ Direct3D 8 ports of several engines]

A comprehensive overview of unofficial engines for Linux can be found in the [http://tldp.org/HOWTO/Quake-HOWTO-3.html Game Engines section] of the [http://tldp.org/HOWTO/ Linux Quake HOWTO] by Stevenaaus.</text>
      <sha1>6c5ghmju7lsoslyuywdhd11b3yduau4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2079</id>
      <parentid>1858</parentid>
      <timestamp>2013-03-25T15:11:25Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>/* Overview */ terms &quot;client&quot; and &quot;source port&quot;</comment>
      <text xml:space="preserve" bytes="8039">==Overview==
The '''game engine''' (a.k.a. '''Quake engine''' or just '''engine''') is the 'executable' program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

Other common names are &quot;client&quot; or &quot;source port&quot;. &quot;Client&quot; is a correct yet overly technical title unless you are talking about a [[QuakeWorld]] client. A &quot;source port&quot; would technically be a port of a Quake engine to another architecture like Linux or a console.

===Client-server model===
Quake engines operate on a client-server model. Depending on the engine, the client and server can be in the same file, or can be separate.

If they're in the same file, then when you run the engine, the server always runs. The client normally runs, too, unless you did something special to launch the engine in a server-only mode (e.g., for other people to connect to for playing over a network). So when you play a single-player game of Quake, the client portion of your engine communicates with the server portion. When you play a multiplayer game over a network, the client portion of your engine instead communicates with a remote server, which naturally will be subject to speed limits and delays inherent in the network.

If they're separate programs, then you only run the client, and you tell it where a server is running that you want to connect to. A [[server browser]] can help you locate servers where you can join a game and play with other people.

===Networking and graphics===
Engines generally fall into two categories:
* &quot;[[NetQuake]]&quot; engines: engines with networking code compatible with that of the original Quake engine.
* &quot;[[QuakeWorld]]&quot; engines: engines with networking code compatible with that of the original QuakeWorld engine.

Additionally, all engines use one of two graphics rendering technologies:
* Software rendering: rendering is done entirely in software, without the help of graphics hardware, as in the original Quake and QuakeWorld engines.
* OpenGL rendering: rendering is done with the help of graphics hardware, as in the original GLQuake and GLQuakeWorld engines.

QuakeWorld-style networking code and OpenGL-style rendering are standard nowadays in pretty much every first-person shooter, but at the time Quake was released in 1996, both were new technologies.

You will probably want to use an engine with OpenGL support, if your hardware is compatible (pretty much any computer built after 1997 will be). And you will probably want to use a QuakeWorld engine for playing over the Internet. However, for single-player games, especially when you're just getting started, a NetQuake engine may be ideal, for the simple reason that QuakeWorld engines often don't support single-player games.

===More information===
Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing more technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

These three are NetQuake engines:
* ''[[QUAKE.EXE]]'' aka DOS Quake — for DOS or Win95/98/Me only; software rendering
* [[WinQuake]] — Win32 (Win95 through 7) version of ''QUAKE.EXE''; software rendering
* [[GLQuake]] — Win32 (Win95 through 7) and Linux 2.0 version of ''QUAKE.EXE''; OpenGL rendering

And then there's the original QuakeWorld engine:
* [[QuakeWorld]] — Win32 (Win95 through Vista), Linux 2.0, BSDI 3.0, Solaris 2.5.1; software or OpenGL rendering (clients for both are distributed together)

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for GNU/Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for GNU/Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].
* SDLQuake 1.0.9 is in [http://www.libsdl.org/projects/quake/ ''libsdl.org/projects/'']. Software-rendering port. Requires libSDL 1.0.1.

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for an unofficial engine that will work with a modern system.
%%%

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

''TODO: This section will help people step by step to get, install, and run these Quake engine replacements.''

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* '''[[DarkPlaces]]''' ([http://icculus.org/twilight/darkplaces/ website])
* '''[[DirectQ]]''' ([http://mhquake.blogspot.com/ website]) - Direct3D port
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* '''[[FitzQuake]]''' - probably the most widely compatible OpenGL NetQuake engine for Windows; SDL port available for Linux &amp; Mac OS X.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://code.google.com/p/makaqu/ Makaqu] - software-rendered NetQuake engine with advanced features.
* [http://www.nquake.com/ nQuake] (f.k.a. eQuake and fQuake) - a preconfigured distribution of ezQuake + bots, demos, &amp; minor enhancements
* '''[[ProQuake 4]]''' ([http://quakeone.com/proquake/ website])
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* '''[[Quore]]''' ([http://quore.free.fr/ website])
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]
* [http://quakeone.com/mh/ Direct3D 8 ports of several engines]

A comprehensive overview of unofficial engines for Linux can be found in the [http://tldp.org/HOWTO/Quake-HOWTO-3.html Game Engines section] of the [http://tldp.org/HOWTO/ Linux Quake HOWTO] by Stevenaaus.</text>
      <sha1>45eg08prfd6z1x7emzbm32k4stwevrh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2227</id>
      <parentid>2079</parentid>
      <timestamp>2013-03-26T13:17:33Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>/* Unofficial engines */</comment>
      <text xml:space="preserve" bytes="8043">==Overview==
The '''game engine''' (a.k.a. '''Quake engine''' or just '''engine''') is the 'executable' program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

Other common names are &quot;client&quot; or &quot;source port&quot;. &quot;Client&quot; is a correct yet overly technical title unless you are talking about a [[QuakeWorld]] client. A &quot;source port&quot; would technically be a port of a Quake engine to another architecture like Linux or a console.

===Client-server model===
Quake engines operate on a client-server model. Depending on the engine, the client and server can be in the same file, or can be separate.

If they're in the same file, then when you run the engine, the server always runs. The client normally runs, too, unless you did something special to launch the engine in a server-only mode (e.g., for other people to connect to for playing over a network). So when you play a single-player game of Quake, the client portion of your engine communicates with the server portion. When you play a multiplayer game over a network, the client portion of your engine instead communicates with a remote server, which naturally will be subject to speed limits and delays inherent in the network.

If they're separate programs, then you only run the client, and you tell it where a server is running that you want to connect to. A [[server browser]] can help you locate servers where you can join a game and play with other people.

===Networking and graphics===
Engines generally fall into two categories:
* &quot;[[NetQuake]]&quot; engines: engines with networking code compatible with that of the original Quake engine.
* &quot;[[QuakeWorld]]&quot; engines: engines with networking code compatible with that of the original QuakeWorld engine.

Additionally, all engines use one of two graphics rendering technologies:
* Software rendering: rendering is done entirely in software, without the help of graphics hardware, as in the original Quake and QuakeWorld engines.
* OpenGL rendering: rendering is done with the help of graphics hardware, as in the original GLQuake and GLQuakeWorld engines.

QuakeWorld-style networking code and OpenGL-style rendering are standard nowadays in pretty much every first-person shooter, but at the time Quake was released in 1996, both were new technologies.

You will probably want to use an engine with OpenGL support, if your hardware is compatible (pretty much any computer built after 1997 will be). And you will probably want to use a QuakeWorld engine for playing over the Internet. However, for single-player games, especially when you're just getting started, a NetQuake engine may be ideal, for the simple reason that QuakeWorld engines often don't support single-player games.

===More information===
Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing more technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

These three are NetQuake engines:
* ''[[QUAKE.EXE]]'' aka DOS Quake — for DOS or Win95/98/Me only; software rendering
* [[WinQuake]] — Win32 (Win95 through 7) version of ''QUAKE.EXE''; software rendering
* [[GLQuake]] — Win32 (Win95 through 7) and Linux 2.0 version of ''QUAKE.EXE''; OpenGL rendering

And then there's the original QuakeWorld engine:
* [[QuakeWorld]] — Win32 (Win95 through Vista), Linux 2.0, BSDI 3.0, Solaris 2.5.1; software or OpenGL rendering (clients for both are distributed together)

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for GNU/Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for GNU/Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].
* SDLQuake 1.0.9 is in [http://www.libsdl.org/projects/quake/ ''libsdl.org/projects/'']. Software-rendering port. Requires libSDL 1.0.1.

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for an unofficial engine that will work with a modern system.
%%%

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

{{todo|todo=This section will help people step by step to get, install, and run these Quake engine replacements.}}

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* '''[[DarkPlaces]]''' ([http://icculus.org/twilight/darkplaces/ website])
* '''[[DirectQ]]''' ([http://mhquake.blogspot.com/ website]) - Direct3D port
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* '''[[FitzQuake]]''' - probably the most widely compatible OpenGL NetQuake engine for Windows; SDL port available for Linux &amp; Mac OS X.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://code.google.com/p/makaqu/ Makaqu] - software-rendered NetQuake engine with advanced features.
* [http://www.nquake.com/ nQuake] (f.k.a. eQuake and fQuake) - a preconfigured distribution of ezQuake + bots, demos, &amp; minor enhancements
* '''[[ProQuake 4]]''' ([http://quakeone.com/proquake/ website])
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* '''[[Quore]]''' ([http://quore.free.fr/ website])
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://tyrann.planetquake.gamespy.com/ Tyr-glquake]
* [http://entar.quakedev.com/ Vengeance r2]
* [http://quakeone.com/mh/ Direct3D 8 ports of several engines]

A comprehensive overview of unofficial engines for Linux can be found in the [http://tldp.org/HOWTO/Quake-HOWTO-3.html Game Engines section] of the [http://tldp.org/HOWTO/ Linux Quake HOWTO] by Stevenaaus.</text>
      <sha1>fkat0lbvrjitb0rvwingido90ws1a4q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2464</id>
      <parentid>2227</parentid>
      <timestamp>2013-03-29T10:48:18Z</timestamp>
      <contributor>
        <ip>203.122.220.108</ip>
      </contributor>
      <comment>/* Unofficial engine list */</comment>
      <text xml:space="preserve" bytes="8023">==Overview==
The '''game engine''' (a.k.a. '''Quake engine''' or just '''engine''') is the 'executable' program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

Other common names are &quot;client&quot; or &quot;source port&quot;. &quot;Client&quot; is a correct yet overly technical title unless you are talking about a [[QuakeWorld]] client. A &quot;source port&quot; would technically be a port of a Quake engine to another architecture like Linux or a console.

===Client-server model===
Quake engines operate on a client-server model. Depending on the engine, the client and server can be in the same file, or can be separate.

If they're in the same file, then when you run the engine, the server always runs. The client normally runs, too, unless you did something special to launch the engine in a server-only mode (e.g., for other people to connect to for playing over a network). So when you play a single-player game of Quake, the client portion of your engine communicates with the server portion. When you play a multiplayer game over a network, the client portion of your engine instead communicates with a remote server, which naturally will be subject to speed limits and delays inherent in the network.

If they're separate programs, then you only run the client, and you tell it where a server is running that you want to connect to. A [[server browser]] can help you locate servers where you can join a game and play with other people.

===Networking and graphics===
Engines generally fall into two categories:
* &quot;[[NetQuake]]&quot; engines: engines with networking code compatible with that of the original Quake engine.
* &quot;[[QuakeWorld]]&quot; engines: engines with networking code compatible with that of the original QuakeWorld engine.

Additionally, all engines use one of two graphics rendering technologies:
* Software rendering: rendering is done entirely in software, without the help of graphics hardware, as in the original Quake and QuakeWorld engines.
* OpenGL rendering: rendering is done with the help of graphics hardware, as in the original GLQuake and GLQuakeWorld engines.

QuakeWorld-style networking code and OpenGL-style rendering are standard nowadays in pretty much every first-person shooter, but at the time Quake was released in 1996, both were new technologies.

You will probably want to use an engine with OpenGL support, if your hardware is compatible (pretty much any computer built after 1997 will be). And you will probably want to use a QuakeWorld engine for playing over the Internet. However, for single-player games, especially when you're just getting started, a NetQuake engine may be ideal, for the simple reason that QuakeWorld engines often don't support single-player games.

===More information===
Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing more technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

These three are NetQuake engines:
* ''[[QUAKE.EXE]]'' aka DOS Quake — for DOS or Win95/98/Me only; software rendering
* [[WinQuake]] — Win32 (Win95 through 7) version of ''QUAKE.EXE''; software rendering
* [[GLQuake]] — Win32 (Win95 through 7) and Linux 2.0 version of ''QUAKE.EXE''; OpenGL rendering

And then there's the original QuakeWorld engine:
* [[QuakeWorld]] — Win32 (Win95 through Vista), Linux 2.0, BSDI 3.0, Solaris 2.5.1; software or OpenGL rendering (clients for both are distributed together)

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for GNU/Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for GNU/Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].
* SDLQuake 1.0.9 is in [http://www.libsdl.org/projects/quake/ ''libsdl.org/projects/'']. Software-rendering port. Requires libSDL 1.0.1.

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for an unofficial engine that will work with a modern system.
%%%

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

{{todo|todo=This section will help people step by step to get, install, and run these Quake engine replacements.}}

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* '''[[DarkPlaces]]''' ([http://icculus.org/twilight/darkplaces/ website])
* '''[[DirectQ]]''' ([http://mhquake.blogspot.com/ website]) - Direct3D port
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* '''[[FitzQuake]]''' - probably the most widely compatible OpenGL NetQuake engine for Windows; SDL port available for Linux &amp; Mac OS X.
* [http://joequake.runecentral.com/ JoeQuake]
* [http://code.google.com/p/makaqu/ Makaqu] - software-rendered NetQuake engine with advanced features.
* [http://www.nquake.com/ nQuake] (f.k.a. eQuake and fQuake) - a preconfigured distribution of ezQuake + bots, demos, &amp; minor enhancements
* '''[[ProQuake 4]]''' ([http://quakeone.com/proquake/ website])
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* '''[[Quore]]''' ([http://quore.free.fr/ website])
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://disenchant.net TyrQuake]
* [http://entar.quakedev.com/ Vengeance r2]
* [http://quakeone.com/mh/ Direct3D 8 ports of several engines]

A comprehensive overview of unofficial engines for Linux can be found in the [http://tldp.org/HOWTO/Quake-HOWTO-3.html Game Engines section] of the [http://tldp.org/HOWTO/ Linux Quake HOWTO] by Stevenaaus.</text>
      <sha1>jeo3585xntz5atriezsu0lnu52zy4q3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2704</id>
      <parentid>2464</parentid>
      <timestamp>2013-03-30T17:31:58Z</timestamp>
      <contributor>
        <ip>86.140.150.18</ip>
      </contributor>
      <comment>/* Unofficial engine list */</comment>
      <text xml:space="preserve" bytes="8073">==Overview==
The '''game engine''' (a.k.a. '''Quake engine''' or just '''engine''') is the 'executable' program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

Other common names are &quot;client&quot; or &quot;source port&quot;. &quot;Client&quot; is a correct yet overly technical title unless you are talking about a [[QuakeWorld]] client. A &quot;source port&quot; would technically be a port of a Quake engine to another architecture like Linux or a console.

===Client-server model===
Quake engines operate on a client-server model. Depending on the engine, the client and server can be in the same file, or can be separate.

If they're in the same file, then when you run the engine, the server always runs. The client normally runs, too, unless you did something special to launch the engine in a server-only mode (e.g., for other people to connect to for playing over a network). So when you play a single-player game of Quake, the client portion of your engine communicates with the server portion. When you play a multiplayer game over a network, the client portion of your engine instead communicates with a remote server, which naturally will be subject to speed limits and delays inherent in the network.

If they're separate programs, then you only run the client, and you tell it where a server is running that you want to connect to. A [[server browser]] can help you locate servers where you can join a game and play with other people.

===Networking and graphics===
Engines generally fall into two categories:
* &quot;[[NetQuake]]&quot; engines: engines with networking code compatible with that of the original Quake engine.
* &quot;[[QuakeWorld]]&quot; engines: engines with networking code compatible with that of the original QuakeWorld engine.

Additionally, all engines use one of two graphics rendering technologies:
* Software rendering: rendering is done entirely in software, without the help of graphics hardware, as in the original Quake and QuakeWorld engines.
* OpenGL rendering: rendering is done with the help of graphics hardware, as in the original GLQuake and GLQuakeWorld engines.

QuakeWorld-style networking code and OpenGL-style rendering are standard nowadays in pretty much every first-person shooter, but at the time Quake was released in 1996, both were new technologies.

You will probably want to use an engine with OpenGL support, if your hardware is compatible (pretty much any computer built after 1997 will be). And you will probably want to use a QuakeWorld engine for playing over the Internet. However, for single-player games, especially when you're just getting started, a NetQuake engine may be ideal, for the simple reason that QuakeWorld engines often don't support single-player games.

===More information===
Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing more technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

These three are NetQuake engines:
* ''[[QUAKE.EXE]]'' aka DOS Quake — for DOS or Win95/98/Me only; software rendering
* [[WinQuake]] — Win32 (Win95 through 7) version of ''QUAKE.EXE''; software rendering
* [[GLQuake]] — Win32 (Win95 through 7) and Linux 2.0 version of ''QUAKE.EXE''; OpenGL rendering

And then there's the original QuakeWorld engine:
* [[QuakeWorld]] — Win32 (Win95 through Vista), Linux 2.0, BSDI 3.0, Solaris 2.5.1; software or OpenGL rendering (clients for both are distributed together)

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for GNU/Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for GNU/Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].
* SDLQuake 1.0.9 is in [http://www.libsdl.org/projects/quake/ ''libsdl.org/projects/'']. Software-rendering port. Requires libSDL 1.0.1.

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for an unofficial engine that will work with a modern system.
%%%

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

{{todo|todo=This section will help people step by step to get, install, and run these Quake engine replacements.}}

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* '''[[DarkPlaces]]''' ([http://icculus.org/twilight/darkplaces/ website])
* '''[[DirectQ]]''' ([http://mhquake.blogspot.com/ website]) - Direct3D port
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* '''[[FitzQuake]]''' - probably the most widely compatible OpenGL NetQuake engine for Windows; SDL port available for Linux &amp; Mac OS X.
* '''[[FTE]]''' ([http://www.fteqw.com/ website])
* [http://joequake.runecentral.com/ JoeQuake]
* [http://code.google.com/p/makaqu/ Makaqu] - software-rendered NetQuake engine with advanced features.
* [http://www.nquake.com/ nQuake] (f.k.a. eQuake and fQuake) - a preconfigured distribution of ezQuake + bots, demos, &amp; minor enhancements
* '''[[ProQuake 4]]''' ([http://quakeone.com/proquake/ website])
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* '''[[Quore]]''' ([http://quore.free.fr/ website])
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://disenchant.net TyrQuake]
* [http://entar.quakedev.com/ Vengeance r2]
* [http://quakeone.com/mh/ Direct3D 8 ports of several engines]

A comprehensive overview of unofficial engines for Linux can be found in the [http://tldp.org/HOWTO/Quake-HOWTO-3.html Game Engines section] of the [http://tldp.org/HOWTO/ Linux Quake HOWTO] by Stevenaaus.</text>
      <sha1>snfeu6bildlqyhkuof0jende9n28ms1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2748</id>
      <parentid>2704</parentid>
      <timestamp>2013-04-03T10:26:25Z</timestamp>
      <contributor>
        <username>SleepwalkR</username>
        <id>37</id>
      </contributor>
      <minor/>
      <comment>Added QuakeSpasm</comment>
      <text xml:space="preserve" bytes="8123">==Overview==
The '''game engine''' (a.k.a. '''Quake engine''' or just '''engine''') is the 'executable' program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

Other common names are &quot;client&quot; or &quot;source port&quot;. &quot;Client&quot; is a correct yet overly technical title unless you are talking about a [[QuakeWorld]] client. A &quot;source port&quot; would technically be a port of a Quake engine to another architecture like Linux or a console.

===Client-server model===
Quake engines operate on a client-server model. Depending on the engine, the client and server can be in the same file, or can be separate.

If they're in the same file, then when you run the engine, the server always runs. The client normally runs, too, unless you did something special to launch the engine in a server-only mode (e.g., for other people to connect to for playing over a network). So when you play a single-player game of Quake, the client portion of your engine communicates with the server portion. When you play a multiplayer game over a network, the client portion of your engine instead communicates with a remote server, which naturally will be subject to speed limits and delays inherent in the network.

If they're separate programs, then you only run the client, and you tell it where a server is running that you want to connect to. A [[server browser]] can help you locate servers where you can join a game and play with other people.

===Networking and graphics===
Engines generally fall into two categories:
* &quot;[[NetQuake]]&quot; engines: engines with networking code compatible with that of the original Quake engine.
* &quot;[[QuakeWorld]]&quot; engines: engines with networking code compatible with that of the original QuakeWorld engine.

Additionally, all engines use one of two graphics rendering technologies:
* Software rendering: rendering is done entirely in software, without the help of graphics hardware, as in the original Quake and QuakeWorld engines.
* OpenGL rendering: rendering is done with the help of graphics hardware, as in the original GLQuake and GLQuakeWorld engines.

QuakeWorld-style networking code and OpenGL-style rendering are standard nowadays in pretty much every first-person shooter, but at the time Quake was released in 1996, both were new technologies.

You will probably want to use an engine with OpenGL support, if your hardware is compatible (pretty much any computer built after 1997 will be). And you will probably want to use a QuakeWorld engine for playing over the Internet. However, for single-player games, especially when you're just getting started, a NetQuake engine may be ideal, for the simple reason that QuakeWorld engines often don't support single-player games.

===More information===
Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing more technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

These three are NetQuake engines:
* ''[[QUAKE.EXE]]'' aka DOS Quake — for DOS or Win95/98/Me only; software rendering
* [[WinQuake]] — Win32 (Win95 through 7) version of ''QUAKE.EXE''; software rendering
* [[GLQuake]] — Win32 (Win95 through 7) and Linux 2.0 version of ''QUAKE.EXE''; OpenGL rendering

And then there's the original QuakeWorld engine:
* [[QuakeWorld]] — Win32 (Win95 through Vista), Linux 2.0, BSDI 3.0, Solaris 2.5.1; software or OpenGL rendering (clients for both are distributed together)

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for GNU/Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for GNU/Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].
* SDLQuake 1.0.9 is in [http://www.libsdl.org/projects/quake/ ''libsdl.org/projects/'']. Software-rendering port. Requires libSDL 1.0.1.

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for an unofficial engine that will work with a modern system.
%%%

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

{{todo|todo=This section will help people step by step to get, install, and run these Quake engine replacements.}}

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* '''[[DarkPlaces]]''' ([http://icculus.org/twilight/darkplaces/ website])
* '''[[DirectQ]]''' ([http://mhquake.blogspot.com/ website]) - Direct3D port
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* '''[[FitzQuake]]''' - probably the most widely compatible OpenGL NetQuake engine for Windows; SDL port available for Linux &amp; Mac OS X.
* '''[[FTE]]''' ([http://www.fteqw.com/ website])
* [http://joequake.runecentral.com/ JoeQuake]
* [http://code.google.com/p/makaqu/ Makaqu] - software-rendered NetQuake engine with advanced features.
* [http://www.nquake.com/ nQuake] (f.k.a. eQuake and fQuake) - a preconfigured distribution of ezQuake + bots, demos, &amp; minor enhancements
* '''[[ProQuake 4]]''' ([http://quakeone.com/proquake/ website])
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* [http://quakespasm.sourceforge.net/ QuakeSpasm]
* '''[[Quore]]''' ([http://quore.free.fr/ website])
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://disenchant.net TyrQuake]
* [http://entar.quakedev.com/ Vengeance r2]
* [http://quakeone.com/mh/ Direct3D 8 ports of several engines]

A comprehensive overview of unofficial engines for Linux can be found in the [http://tldp.org/HOWTO/Quake-HOWTO-3.html Game Engines section] of the [http://tldp.org/HOWTO/ Linux Quake HOWTO] by Stevenaaus.</text>
      <sha1>fwfvwpmy7t98j0t9jjcbgjuaia6xols</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2749</id>
      <parentid>2748</parentid>
      <timestamp>2013-04-03T10:28:21Z</timestamp>
      <contributor>
        <username>SleepwalkR</username>
        <id>37</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="8144">==Overview==
The '''game engine''' (a.k.a. '''Quake engine''' or just '''engine''') is the 'executable' program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

Other common names are &quot;client&quot; or &quot;source port&quot;. &quot;Client&quot; is a correct yet overly technical title unless you are talking about a [[QuakeWorld]] client. A &quot;source port&quot; would technically be a port of a Quake engine to another architecture like Linux or a console.

===Client-server model===
Quake engines operate on a client-server model. Depending on the engine, the client and server can be in the same file, or can be separate.

If they're in the same file, then when you run the engine, the server always runs. The client normally runs, too, unless you did something special to launch the engine in a server-only mode (e.g., for other people to connect to for playing over a network). So when you play a single-player game of Quake, the client portion of your engine communicates with the server portion. When you play a multiplayer game over a network, the client portion of your engine instead communicates with a remote server, which naturally will be subject to speed limits and delays inherent in the network.

If they're separate programs, then you only run the client, and you tell it where a server is running that you want to connect to. A [[server browser]] can help you locate servers where you can join a game and play with other people.

===Networking and graphics===
Engines generally fall into two categories:
* &quot;[[NetQuake]]&quot; engines: engines with networking code compatible with that of the original Quake engine.
* &quot;[[QuakeWorld]]&quot; engines: engines with networking code compatible with that of the original QuakeWorld engine.

Additionally, all engines use one of two graphics rendering technologies:
* Software rendering: rendering is done entirely in software, without the help of graphics hardware, as in the original Quake and QuakeWorld engines.
* OpenGL rendering: rendering is done with the help of graphics hardware, as in the original GLQuake and GLQuakeWorld engines.

QuakeWorld-style networking code and OpenGL-style rendering are standard nowadays in pretty much every first-person shooter, but at the time Quake was released in 1996, both were new technologies.

You will probably want to use an engine with OpenGL support, if your hardware is compatible (pretty much any computer built after 1997 will be). And you will probably want to use a QuakeWorld engine for playing over the Internet. However, for single-player games, especially when you're just getting started, a NetQuake engine may be ideal, for the simple reason that QuakeWorld engines often don't support single-player games.

===More information===
Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing more technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

These three are NetQuake engines:
* ''[[QUAKE.EXE]]'' aka DOS Quake — for DOS or Win95/98/Me only; software rendering
* [[WinQuake]] — Win32 (Win95 through 7) version of ''QUAKE.EXE''; software rendering
* [[GLQuake]] — Win32 (Win95 through 7) and Linux 2.0 version of ''QUAKE.EXE''; OpenGL rendering

And then there's the original QuakeWorld engine:
* [[QuakeWorld]] — Win32 (Win95 through Vista), Linux 2.0, BSDI 3.0, Solaris 2.5.1; software or OpenGL rendering (clients for both are distributed together)

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for GNU/Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for GNU/Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].
* SDLQuake 1.0.9 is in [http://www.libsdl.org/projects/quake/ ''libsdl.org/projects/'']. Software-rendering port. Requires libSDL 1.0.1.

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for an unofficial engine that will work with a modern system.
%%%

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

{{todo|todo=This section will help people step by step to get, install, and run these Quake engine replacements.}}

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* '''[[DarkPlaces]]''' ([http://icculus.org/twilight/darkplaces/ website])
* '''[[DirectQ]]''' ([http://mhquake.blogspot.com/ website]) - Direct3D port
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* '''[[FitzQuake]]''' - probably the most widely compatible OpenGL NetQuake engine for Windows; SDL port available for Linux &amp; Mac OS X.
* '''[[FTE]]''' ([http://www.fteqw.com/ website])
* [http://joequake.runecentral.com/ JoeQuake]
* [http://code.google.com/p/makaqu/ Makaqu] - software-rendered NetQuake engine with advanced features.
* [http://www.nquake.com/ nQuake] (f.k.a. eQuake and fQuake) - a preconfigured distribution of ezQuake + bots, demos, &amp; minor enhancements
* '''[[ProQuake 4]]''' ([http://quakeone.com/proquake/ website])
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* '''[[QuakeSpasm]]''' [http://quakespasm.sourceforge.net/ QuakeSpasm]
* '''[[Quore]]''' ([http://quore.free.fr/ website])
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://disenchant.net TyrQuake]
* [http://entar.quakedev.com/ Vengeance r2]
* [http://quakeone.com/mh/ Direct3D 8 ports of several engines]

A comprehensive overview of unofficial engines for Linux can be found in the [http://tldp.org/HOWTO/Quake-HOWTO-3.html Game Engines section] of the [http://tldp.org/HOWTO/ Linux Quake HOWTO] by Stevenaaus.</text>
      <sha1>7drnpsykeijjvronfacwz15x015v5wx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2908</id>
      <parentid>2749</parentid>
      <timestamp>2013-04-09T18:28:47Z</timestamp>
      <contributor>
        <ip>86.30.203.66</ip>
      </contributor>
      <comment>Fixed QMB link</comment>
      <text xml:space="preserve" bytes="8143">==Overview==
The '''game engine''' (a.k.a. '''Quake engine''' or just '''engine''') is the 'executable' program you run to actually play Quake. It loads the game's maps/models/skins/etc., figures out what to draw on the screen, responds to your keyboard/mouse input, sends sounds to your sound device, and communicates over the network. The game engine normally resides in the root Quake folder and expects to have access to the ID1 subfolder which contains, at the very least, the files needed to play Episode 1 (normally ''pak0.pak'').

Other common names are &quot;client&quot; or &quot;source port&quot;. &quot;Client&quot; is a correct yet overly technical title unless you are talking about a [[QuakeWorld]] client. A &quot;source port&quot; would technically be a port of a Quake engine to another architecture like Linux or a console.

===Client-server model===
Quake engines operate on a client-server model. Depending on the engine, the client and server can be in the same file, or can be separate.

If they're in the same file, then when you run the engine, the server always runs. The client normally runs, too, unless you did something special to launch the engine in a server-only mode (e.g., for other people to connect to for playing over a network). So when you play a single-player game of Quake, the client portion of your engine communicates with the server portion. When you play a multiplayer game over a network, the client portion of your engine instead communicates with a remote server, which naturally will be subject to speed limits and delays inherent in the network.

If they're separate programs, then you only run the client, and you tell it where a server is running that you want to connect to. A [[server browser]] can help you locate servers where you can join a game and play with other people.

===Networking and graphics===
Engines generally fall into two categories:
* &quot;[[NetQuake]]&quot; engines: engines with networking code compatible with that of the original Quake engine.
* &quot;[[QuakeWorld]]&quot; engines: engines with networking code compatible with that of the original QuakeWorld engine.

Additionally, all engines use one of two graphics rendering technologies:
* Software rendering: rendering is done entirely in software, without the help of graphics hardware, as in the original Quake and QuakeWorld engines.
* OpenGL rendering: rendering is done with the help of graphics hardware, as in the original GLQuake and GLQuakeWorld engines.

QuakeWorld-style networking code and OpenGL-style rendering are standard nowadays in pretty much every first-person shooter, but at the time Quake was released in 1996, both were new technologies.

You will probably want to use an engine with OpenGL support, if your hardware is compatible (pretty much any computer built after 1997 will be). And you will probably want to use a QuakeWorld engine for playing over the Internet. However, for single-player games, especially when you're just getting started, a NetQuake engine may be ideal, for the simple reason that QuakeWorld engines often don't support single-player games.

===More information===
Wikipedia has a [http://en.wikipedia.org/wiki/Quake_engine Quake engine article] containing more technical info about Quake engines, and nice diagrams showing all the engines and how they're related.

==Official engines==
''Instead of messing with these engines, most new Quake users, unless running on very old hardware (pre-1997), should probably start with one of the unofficial engines.''

These three are NetQuake engines:
* ''[[QUAKE.EXE]]'' aka DOS Quake — for DOS or Win95/98/Me only; software rendering
* [[WinQuake]] — Win32 (Win95 through 7) version of ''QUAKE.EXE''; software rendering
* [[GLQuake]] — Win32 (Win95 through 7) and Linux 2.0 version of ''QUAKE.EXE''; OpenGL rendering

And then there's the original QuakeWorld engine:
* [[QuakeWorld]] — Win32 (Win95 through Vista), Linux 2.0, BSDI 3.0, Solaris 2.5.1; software or OpenGL rendering (clients for both are distributed together)

===Mac OS engines===
* Quake for Mac is the official port of GLQuake 0.97 / Quake 1.09 for the classic Mac OS (not OS X). It was released on CD-ROM in 1997 by MacSoft, now owned by Atari. For multiplayer play, it supports TCP/IP or IPX via AppleTalk or Ethernet. It is commercial software, not free.
* Quake 1.1 is an unofficial port of both the OpenGL and original software renderer versions of both Quake and QuakeWorld for Mac OS X. It is available for free from the developers, [http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2 Fruitz of Dojo].

===Unix engines===
Quake ports exist for various Unix-like operating systems, such as those based on the GNU/Linux kernel. If you need one of these, check with your particular OS's software package or port archives; chances are, someone has already made it easy for you to install and at least run a port of the basic Quake engine, if not an OpenGL one.

There were a few official, unsupported distributions released around the same time as GLQuake in late 1997:
* Quake &amp; QuakeWorld 1.09 for Solaris 2.5.2 is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake1.09-sparc-sun-solaris2.5.1.tar.Z ''quake1.09-sparc-sun-solaris2.5.1.tar.Z''].
* SVGALib Quake for GNU/Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/quake.x11-1.0-i386-unknown-linux2.0.tar.gz ''quake.x11-1.0-i386-unknown-linux2.0.tar.gz'']. It runs in an X11 window and requires libc 5.2.18, X11R5, and kernel 2.0.24 or later.
* GLQuake 0.97 for GNU/Linux is in [ftp://ftp.idsoftware.com/idstuff/unsup/unix/glquake-0.97-i386-unknown-linux2.0.tar.gz ''glquake-0.97-i386-unknown-linux2.0.tar.gz''].
* SDLQuake 1.0.9 is in [http://www.libsdl.org/projects/quake/ ''libsdl.org/projects/'']. Software-rendering port. Requires libSDL 1.0.1.

You probably don't want any of these old distributions; your OS's current package or port archive is the place to look for an unofficial engine that will work with a modern system.
%%%

==Unofficial engines==
Other engine mods are made by customizing the original id Quake source code. Nearly all of them are based on GLQuake. There quite a few and each one has there different features, fixes, additions, and changes to the original source. Some require very little to do on your part to make them work with Quake. Some of them may not work with your hardware, even if your hardware is very new.

{{todo|todo=This section will help people step by step to get, install, and run these Quake engine replacements.}}

===Unofficial engine list===
* [http://user.tninet.se/xir870k/ Enhanced Winquake/glQuake/NehQuake (BJP)]
* '''[[DarkPlaces]]''' ([http://icculus.org/twilight/darkplaces/ website])
* '''[[DirectQ]]''' ([http://mhquake.blogspot.com/ website]) - Direct3D port
* [http://ezquake.sourceforge.net/ ezQuake] - a QuakeWorld engine with limited single-player support.
* '''[[FitzQuake]]''' - probably the most widely compatible OpenGL NetQuake engine for Windows; SDL port available for Linux &amp; Mac OS X.
* '''[[FTE]]''' ([http://www.fteqw.com/ website])
* [http://joequake.runecentral.com/ JoeQuake]
* [http://code.google.com/p/makaqu/ Makaqu] - software-rendered NetQuake engine with advanced features.
* [http://www.nquake.com/ nQuake] (f.k.a. eQuake and fQuake) - a preconfigured distribution of ezQuake + bots, demos, &amp; minor enhancements
* '''[[ProQuake 4]]''' ([http://quakeone.com/proquake/ website])
* [http://fragmachine.quakedev.com/ Q2K4]
* [http://www.gluonporridge.net/QMB/ QMB]
* [http://www.quakeone.com/qrack/ Qrack]
* '''[[QuakeSpasm]]''' [http://quakespasm.sourceforge.net/ QuakeSpasm]
* '''[[Quore]]''' ([http://quore.free.fr/ website])
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net/ Tenebrae]
* [http://planetquake.gamespy.com/View.php?view=Quake.Detail&amp;id=184 TomazQuake]
* [http://disenchant.net TyrQuake]
* [http://entar.quakedev.com/ Vengeance r2]
* [http://quakeone.com/mh/ Direct3D 8 ports of several engines]

A comprehensive overview of unofficial engines for Linux can be found in the [http://tldp.org/HOWTO/Quake-HOWTO-3.html Game Engines section] of the [http://tldp.org/HOWTO/ Linux Quake HOWTO] by Stevenaaus.</text>
      <sha1>696tapxbq87cmkqrdhxc35wx2n766w3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Engoo</title>
    <ns>0</ns>
    <id>1072</id>
    <revision>
      <id>3219</id>
      <timestamp>2014-01-08T15:54:01Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Created page with &quot;{{Infobox Engine |name=Engoo |based-on=[[QIP Quake]] |author=[[leilei]] |first-release=[] |newest-release=[] |website=http://leileilol.mancubus.net/engoo/ }}  Engoo is a Quake...&quot;</comment>
      <text xml:space="preserve" bytes="567">{{Infobox Engine
|name=Engoo
|based-on=[[QIP Quake]]
|author=[[leilei]]
|first-release=[]
|newest-release=[]
|website=http://leileilol.mancubus.net/engoo/
}}

Engoo is a Quake engine that runs on Windows and DOS. Features include translucent refractive water, color control, enhanced shading, fog, water reflections, &quot;GL&quot; style rendering, N64-style rendering, colored lighting, pixel upscaling, gore modes and more.

:''&quot;It's a software renderer based on QIP Quake based on WinQuake. It's pretty I guess.&quot;''


{{Engines}}
{{DOS Engines}}
{{Software rendered Engines}}</text>
      <sha1>m9wpnread03iweymlot0v175xwblfdb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3220</id>
      <parentid>3219</parentid>
      <timestamp>2014-01-08T15:54:51Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <text xml:space="preserve" bytes="521">{{Infobox Engine
|name=Engoo
|based-on=[[QIP Quake]]
|author=[[leilei]]
|first-release=[]
|newest-release=[]
|website=http://leileilol.mancubus.net/engoo/
}}

Engoo is a Quake engine that runs on Windows and DOS. Features include translucent refractive water, color control, enhanced shading, fog, water reflections, &quot;GL&quot; style rendering, N64-style rendering, colored lighting, pixel upscaling, gore modes and more.

:''&quot;It's a software renderer based on QIP Quake based on WinQuake. It's pretty I guess.&quot;''


{{Engines}}</text>
      <sha1>1nul415mwl1kd7n1mqsrkzia4v4vvbl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Enhanced engine features</title>
    <ns>0</ns>
    <id>45</id>
    <revision>
      <id>54</id>
      <timestamp>2007-10-30T18:09:22Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: * [[RScripts]] * [[LocalMenus]] * [[ModelScripts]] * [[HudModels]] * [[Console HUD Control]] * [[ENV Heighfields]], [[ENVs]] * [[SHOWLmp]] * [[Client Side Mods]] * [[EntFiles]]</comment>
      <text xml:space="preserve" bytes="176">* [[RScripts]]
* [[LocalMenus]]
* [[ModelScripts]]
* [[HudModels]]
* [[Console HUD Control]]
* [[ENV Heighfields]], [[ENVs]]
* [[SHOWLmp]]
* [[Client Side Mods]]
* [[EntFiles]]</text>
      <sha1>kb4vxy0xk99kkbhxdcvx4kmrn4u8nvy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Entity</title>
    <ns>0</ns>
    <id>358</id>
    <revision>
      <id>587</id>
      <timestamp>2008-04-11T02:29:12Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: Any object other than a solid wall brush used in maps. These include point entities such as lights, powerups, and player spawn points, as well as &quot;brush entities&quot;, which are brushes conver...</comment>
      <text xml:space="preserve" bytes="231">Any object other than a solid wall brush used in maps. These include point entities such as lights, powerups, and player spawn points, as well as &quot;brush entities&quot;, which are brushes converted to entities to serve a special purpose.</text>
      <sha1>cv0dh4nncjuv8juy75c2kbgi4ut4m9z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1932</id>
      <parentid>587</parentid>
      <timestamp>2013-03-25T04:00:08Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>rewrote as part of splitting this information off from Entity Guide</comment>
      <text xml:space="preserve" bytes="4477">In [[Mapping|Quake map making]], an entity is any object defined in the [[map_file_format|.map file]] of a level, and are used to define the position and parameters of all the things that will appear in the level, such as monsters, items, doors, teleporters, lights and sounds.

==Overview==
Entities can be broadly defined as belonging to one of two different types, '''point entities''' and '''solid entities''' (also known as brush entities).

A point entity is an entity that can be thought of as being at a specific point in the level, and its geometry (if any) is predefined. For example, a monster is a point entity. A level author might place many [[monster_ogre|ogres]] in their level, but each ogre will be the same shape and behave the same way because they are defined by the game already.

Solid entities, on the other hand, are entities which are made by the level author out of [[brush|brushes]] and can take any shape the author wishes. A [[func_door|door]], for example, is something that the level author needs to be able to make out of brushes in order to fit into different [[themes|level_theme]], different sized holes etc.

The static level geometry itself is also defined as a [[worldspawn]] entity, but it is a special entity that is treated differently by the [[Map_compiling|compilers]], and depending on the [[Mapping_tools#Level_Editors|level editor]] being used, its settings might be accessed from a different place to that of other entities. The worldspawn is always the first entity defined in a .map file.

==Entity Settings==
In order to change their behaviour, appearance etc. all entities have settings that can be modfied by the level author. The following section contains general information about these settings. For specific entity setting information, see [[Entity_guide#Entities|Entities]].

===Key/Value Pairs===
A key/value pair is the name given to a single entity parameter; The key is the name of the parameter and the value is what it is set to. For example, a [[func_door]] entity has a parameter that sets how fast it moves. The key is named &quot;speed&quot; and it's value can be set by the user to alter the speed of the door. For the purposes of this wiki, we will use the format (key : value) as notation for key/value pairs in text passages. (speed : 100) would mean the speed parameter of the door would be set to 100 [[unit|units]] per second.

Note that sometimes the naming of keys is not particularly intuitive, so some editors hide the real key name and show the user something more easily understood. The names used in the wiki are the actual key names used by Quake, and are correct.

===Origin and Angle===
Origin and angle are keys supported by every single entity with the exception of the [[worldspawn]], since it does not ever move and does not need them. Origin is used to define the position of an entity in the level, and angle is a value between 0 and 360 that sets its rotation. Both of these keys are usually hidden from direct editing by level editors; origin is almost always set only by moving the object around in the editor, and some editors (such as [[TrenchBroom]]) allow direct rotation of the entity to set the angle, wheras others (such as [[Worldcraft]]) have some kind of visual representation in their entity property editing tool as well as the ability to manually set the angle numerically.

===Spawnflags===
Spawnflags is the name given to a particular key that all entities support and is used to store multiple boolean parameters (flags) in a single key/value pair. The value of spawnflags is a number typically between 0 and 4096 and is calculated by adding the values given to each flag together. The value for any single flag is always a power of two. This is so that when loading a level, Quake can understand from the value of spawnflags which flags were set and which were not.

One of the uses of spawnflags is to tell Quake whether or not to spawn entities into the level on level load. These flags are listed below:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
Other flags are only valid when used with certain entities, but these four are universal and work with every entity.

Most [[Mapping_tools#Level_Editors|level editors]] have a simple visual representation of spawnflags with checkboxes for each flag, so that the user does not need to calculate its value manually.</text>
      <sha1>1v0gur7n9nup3qafcl2o9axusg854wa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1933</id>
      <parentid>1932</parentid>
      <timestamp>2013-03-25T04:01:13Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>/* Key/Value Pairs */</comment>
      <text xml:space="preserve" bytes="4466">In [[Mapping|Quake map making]], an entity is any object defined in the [[map_file_format|.map file]] of a level, and are used to define the position and parameters of all the things that will appear in the level, such as monsters, items, doors, teleporters, lights and sounds.

==Overview==
Entities can be broadly defined as belonging to one of two different types, '''point entities''' and '''solid entities''' (also known as brush entities).

A point entity is an entity that can be thought of as being at a specific point in the level, and its geometry (if any) is predefined. For example, a monster is a point entity. A level author might place many [[monster_ogre|ogres]] in their level, but each ogre will be the same shape and behave the same way because they are defined by the game already.

Solid entities, on the other hand, are entities which are made by the level author out of [[brush|brushes]] and can take any shape the author wishes. A [[func_door|door]], for example, is something that the level author needs to be able to make out of brushes in order to fit into different [[themes|level_theme]], different sized holes etc.

The static level geometry itself is also defined as a [[worldspawn]] entity, but it is a special entity that is treated differently by the [[Map_compiling|compilers]], and depending on the [[Mapping_tools#Level_Editors|level editor]] being used, its settings might be accessed from a different place to that of other entities. The worldspawn is always the first entity defined in a .map file.

==Entity Settings==
In order to change their behaviour, appearance etc. all entities have settings that can be modfied by the level author. The following section contains general information about these settings. For specific entity setting information, see [[Entity_guide#Entities|Entities]].

===Key/Value Pairs===
A key/value pair is the name given to a single entity parameter; The key is the name of the parameter and the value is what it is set to. For example, a [[func_door]] entity has a parameter that sets how fast it moves. The key is named &quot;speed&quot; and it's value can be set by the user to alter the speed of the door. For the purposes of this wiki, we will use the format (key : value) as notation for key/value pairs in text passages. (speed : 100) means the speed parameter of the door is set to 100 [[unit|units]] per second.

Note that sometimes the naming of keys is not particularly intuitive, so some editors hide the real key name and show the user something more easily understood. The names used in the wiki are the actual key names used by Quake, and are correct.

===Origin and Angle===
Origin and angle are keys supported by every single entity with the exception of the [[worldspawn]], since it does not ever move and does not need them. Origin is used to define the position of an entity in the level, and angle is a value between 0 and 360 that sets its rotation. Both of these keys are usually hidden from direct editing by level editors; origin is almost always set only by moving the object around in the editor, and some editors (such as [[TrenchBroom]]) allow direct rotation of the entity to set the angle, wheras others (such as [[Worldcraft]]) have some kind of visual representation in their entity property editing tool as well as the ability to manually set the angle numerically.

===Spawnflags===
Spawnflags is the name given to a particular key that all entities support and is used to store multiple boolean parameters (flags) in a single key/value pair. The value of spawnflags is a number typically between 0 and 4096 and is calculated by adding the values given to each flag together. The value for any single flag is always a power of two. This is so that when loading a level, Quake can understand from the value of spawnflags which flags were set and which were not.

One of the uses of spawnflags is to tell Quake whether or not to spawn entities into the level on level load. These flags are listed below:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
Other flags are only valid when used with certain entities, but these four are universal and work with every entity.

Most [[Mapping_tools#Level_Editors|level editors]] have a simple visual representation of spawnflags with checkboxes for each flag, so that the user does not need to calculate its value manually.</text>
      <sha1>icxctaq6id8ck26v6r0x28t6a8ej6e4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1939</id>
      <parentid>1933</parentid>
      <timestamp>2013-03-25T04:33:23Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>made entity bold</comment>
      <text xml:space="preserve" bytes="4472">In [[Mapping|Quake map making]], an '''entity''' is any object defined in the [[map_file_format|.map file]] of a level, and are used to define the position and parameters of all the things that will appear in the level, such as monsters, items, doors, teleporters, lights and sounds.

==Overview==
Entities can be broadly defined as belonging to one of two different types, '''point entities''' and '''solid entities''' (also known as brush entities).

A point entity is an entity that can be thought of as being at a specific point in the level, and its geometry (if any) is predefined. For example, a monster is a point entity. A level author might place many [[monster_ogre|ogres]] in their level, but each ogre will be the same shape and behave the same way because they are defined by the game already.

Solid entities, on the other hand, are entities which are made by the level author out of [[brush|brushes]] and can take any shape the author wishes. A [[func_door|door]], for example, is something that the level author needs to be able to make out of brushes in order to fit into different [[themes|level_theme]], different sized holes etc.

The static level geometry itself is also defined as a [[worldspawn]] entity, but it is a special entity that is treated differently by the [[Map_compiling|compilers]], and depending on the [[Mapping_tools#Level_Editors|level editor]] being used, its settings might be accessed from a different place to that of other entities. The worldspawn is always the first entity defined in a .map file.

==Entity Settings==
In order to change their behaviour, appearance etc. all entities have settings that can be modfied by the level author. The following section contains general information about these settings. For specific entity setting information, see [[Entity_guide#Entities|Entities]].

===Key/Value Pairs===
A key/value pair is the name given to a single entity parameter; The key is the name of the parameter and the value is what it is set to. For example, a [[func_door]] entity has a parameter that sets how fast it moves. The key is named &quot;speed&quot; and it's value can be set by the user to alter the speed of the door. For the purposes of this wiki, we will use the format (key : value) as notation for key/value pairs in text passages. (speed : 100) means the speed parameter of the door is set to 100 [[unit|units]] per second.

Note that sometimes the naming of keys is not particularly intuitive, so some editors hide the real key name and show the user something more easily understood. The names used in the wiki are the actual key names used by Quake, and are correct.

===Origin and Angle===
Origin and angle are keys supported by every single entity with the exception of the [[worldspawn]], since it does not ever move and does not need them. Origin is used to define the position of an entity in the level, and angle is a value between 0 and 360 that sets its rotation. Both of these keys are usually hidden from direct editing by level editors; origin is almost always set only by moving the object around in the editor, and some editors (such as [[TrenchBroom]]) allow direct rotation of the entity to set the angle, wheras others (such as [[Worldcraft]]) have some kind of visual representation in their entity property editing tool as well as the ability to manually set the angle numerically.

===Spawnflags===
Spawnflags is the name given to a particular key that all entities support and is used to store multiple boolean parameters (flags) in a single key/value pair. The value of spawnflags is a number typically between 0 and 4096 and is calculated by adding the values given to each flag together. The value for any single flag is always a power of two. This is so that when loading a level, Quake can understand from the value of spawnflags which flags were set and which were not.

One of the uses of spawnflags is to tell Quake whether or not to spawn entities into the level on level load. These flags are listed below:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
Other flags are only valid when used with certain entities, but these four are universal and work with every entity.

Most [[Mapping_tools#Level_Editors|level editors]] have a simple visual representation of spawnflags with checkboxes for each flag, so that the user does not need to calculate its value manually.</text>
      <sha1>0dictwb9oxcbt5cmbngxatnbd1xele7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1952</id>
      <parentid>1939</parentid>
      <timestamp>2013-03-25T06:21:47Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>/* Origin and Angle */  added small amount about -1 and -2 for angles and the mangle key</comment>
      <text xml:space="preserve" bytes="4707">In [[Mapping|Quake map making]], an '''entity''' is any object defined in the [[map_file_format|.map file]] of a level, and are used to define the position and parameters of all the things that will appear in the level, such as monsters, items, doors, teleporters, lights and sounds.

==Overview==
Entities can be broadly defined as belonging to one of two different types, '''point entities''' and '''solid entities''' (also known as brush entities).

A point entity is an entity that can be thought of as being at a specific point in the level, and its geometry (if any) is predefined. For example, a monster is a point entity. A level author might place many [[monster_ogre|ogres]] in their level, but each ogre will be the same shape and behave the same way because they are defined by the game already.

Solid entities, on the other hand, are entities which are made by the level author out of [[brush|brushes]] and can take any shape the author wishes. A [[func_door|door]], for example, is something that the level author needs to be able to make out of brushes in order to fit into different [[themes|level_theme]], different sized holes etc.

The static level geometry itself is also defined as a [[worldspawn]] entity, but it is a special entity that is treated differently by the [[Map_compiling|compilers]], and depending on the [[Mapping_tools#Level_Editors|level editor]] being used, its settings might be accessed from a different place to that of other entities. The worldspawn is always the first entity defined in a .map file.

==Entity Settings==
In order to change their behaviour, appearance etc. all entities have settings that can be modfied by the level author. The following section contains general information about these settings. For specific entity setting information, see [[Entity_guide#Entities|Entities]].

===Key/Value Pairs===
A key/value pair is the name given to a single entity parameter; The key is the name of the parameter and the value is what it is set to. For example, a [[func_door]] entity has a parameter that sets how fast it moves. The key is named &quot;speed&quot; and it's value can be set by the user to alter the speed of the door. For the purposes of this wiki, we will use the format (key : value) as notation for key/value pairs in text passages. (speed : 100) means the speed parameter of the door is set to 100 [[unit|units]] per second.

Note that sometimes the naming of keys is not particularly intuitive, so some editors hide the real key name and show the user something more easily understood. The names used in the wiki are the actual key names used by Quake, and are correct.

===Origin and Angle===
Origin and angle are keys supported by every single entity with the exception of the [[worldspawn]], since it does not ever move and does not need them. Origin is used to define the position of an entity in the level, and angle is a value between 0 and 360 that sets its rotation. Both of these keys are usually hidden from direct editing by level editors; origin is almost always set only by moving the object around in the editor, and some editors (such as [[TrenchBroom]]) allow direct rotation of the entity to set the angle, wheras others (such as [[Worldcraft]]) have some kind of visual representation in their entity property editing tool as well as the ability to manually set the angle numerically.

Some entities may support setting angle to up or down by using the values -1 for up and -2 for down. Other entities, such is [[info_intermission]] might require a more complex angle. This can often be specified with a [[mangle]] key.

===Spawnflags===
Spawnflags is the name given to a particular key that all entities support and is used to store multiple boolean parameters (flags) in a single key/value pair. The value of spawnflags is a number typically between 0 and 4096 and is calculated by adding the values given to each flag together. The value for any single flag is always a power of two. This is so that when loading a level, Quake can understand from the value of spawnflags which flags were set and which were not.

One of the uses of spawnflags is to tell Quake whether or not to spawn entities into the level on level load. These flags are listed below:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
Other flags are only valid when used with certain entities, but these four are universal and work with every entity.

Most [[Mapping_tools#Level_Editors|level editors]] have a simple visual representation of spawnflags with checkboxes for each flag, so that the user does not need to calculate its value manually.</text>
      <sha1>fbcbq5suls1zn6hmln2hakow25nmeoq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2071</id>
      <parentid>1952</parentid>
      <timestamp>2013-03-25T14:29:23Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>added a small section about target, killtarget and targetname</comment>
      <text xml:space="preserve" bytes="6463">In [[Mapping|Quake map making]], an '''entity''' is any object defined in the [[map_file_format|.map file]] of a level, and are used to define the position and parameters of all the things that will appear in the level, such as monsters, items, doors, teleporters, lights and sounds.

==Overview==
Entities can be broadly defined as belonging to one of two different types, '''point entities''' and '''solid entities''' (also known as brush entities).

A point entity is an entity that can be thought of as being at a specific point in the level, and its geometry (if any) is predefined. For example, a monster is a point entity. A level author might place many [[monster_ogre|ogres]] in their level, but each ogre will be the same shape and behave the same way because they are defined by the game already.

Solid entities, on the other hand, are entities which are made by the level author out of [[brush|brushes]] and can take any shape the author wishes. A [[func_door|door]], for example, is something that the level author needs to be able to make out of brushes in order to fit into different [[themes|level_theme]], different sized holes etc.

The static level geometry itself is also defined as a [[worldspawn]] entity, but it is a special entity that is treated differently by the [[Map_compiling|compilers]], and depending on the [[Mapping_tools#Level_Editors|level editor]] being used, its settings might be accessed from a different place to that of other entities. The worldspawn is always the first entity defined in a .map file.

==Entity Settings==
In order to change their behaviour, appearance etc. all entities have settings that can be modfied by the level author. The following section contains general information about these settings. For specific entity setting information, see [[Entity_guide#Entities|Entities]].

===Key/Value Pairs===
A key/value pair is the name given to a single entity parameter; The key is the name of the parameter and the value is what it is set to. For example, a [[func_door]] entity has a parameter that sets how fast it moves. The key is named &quot;speed&quot; and it's value can be set by the user to alter the speed of the door. For the purposes of this wiki, we will use the format (key : value) as notation for key/value pairs in text passages. (speed : 100) means the speed parameter of the door is set to 100 [[unit|units]] per second.

Note that sometimes the naming of keys is not particularly intuitive, so some editors hide the real key name and show the user something more easily understood. The names used in the wiki are the actual key names used by Quake, and are correct.

====Origin and Angle====
Origin and angle are keys supported by every single entity with the exception of the [[worldspawn]], since it does not ever move and does not need them. Origin is used to define the position of an entity in the level, and angle is a value between 0 and 360 that sets its rotation. Both of these keys are usually hidden from direct editing by level editors; origin is almost always set only by moving the object around in the editor, and some editors (such as [[TrenchBroom]]) allow direct rotation of the entity to set the angle, wheras others (such as [[Worldcraft]]) have some kind of visual representation in their entity property editing tool as well as the ability to manually set the angle numerically.

Some entities may support setting angle to up or down by using the values -1 for up and -2 for down. Other entities, such is [[info_intermission]] might require a more complex angle. This can often be specified with a [[mangle]] key.

====Targetname, Target and Killtarget====
Quake features a very basic form of event scripting via triggers that can be placed in levels and used to activate other entities. For example, the [[func_button]] entity is used to make a usable button object in a level which will trigger a targeted event when when pressed. This event system is not limited to the obvious trigger entities and buttons, monsters can fire events when they are killed, and items when they are picked up. In order to use this system, the keys '''targetname''' and '''target''' must be understood.

The '''targetname''' key is used to establish a name for an entity so that it can be linked to triggers that are targeting it. The value of targetname needn't be unique, though multiple entities using the same targetname will all be activated at once by anything that triggers them.

The value of '''target''' should be set to the targetname of the entity that needs to be activated. For example. a [[func_door]] with (targetname : door1) can be activated by a func_button with (target : door1).

'''killtarget''' is a key used in a similar way to target, but instead of activating the target, the targeted entity will be removed from the level when the killtarget event is fired.

In [[vanilla Quake]], a single trigger cannot target multiple entities another at the same time. This is true even if one entity is targeted and another is killtargeted. In order to do this, multiple triggers (see [[trigger_relay]]) must be used for each different target or killtarget. Some [[mod|mods]], such as [[Quoth]] support multi-targeting, which allows multiple targets to be set for a single trigger, and also enables targets and killtargets to both be fired when the trigger is triggered.

===Spawnflags===
Spawnflags is the name given to a particular key that all entities support and is used to store multiple boolean parameters (flags) in a single key/value pair. The value of spawnflags is a number typically between 0 and 4096 and is calculated by adding the values given to each flag together. The value for any single flag is always a power of two. This is so that when loading a level, Quake can understand from the value of spawnflags which flags were set and which were not.

One of the uses of spawnflags is to tell Quake whether or not to spawn entities into the level on level load. These flags are listed below:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
Other flags are only valid when used with certain entities, but these four are universal and work with every entity.

Most [[Mapping_tools#Level_Editors|level editors]] have a simple visual representation of spawnflags with checkboxes for each flag, so that the user does not need to calculate its value manually.</text>
      <sha1>ba7btkv5vadk0s9b0v5m3214bk6x9b6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2072</id>
      <parentid>2071</parentid>
      <timestamp>2013-03-25T14:31:13Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>/* Targetname, Target and Killtarget */</comment>
      <text xml:space="preserve" bytes="6452">In [[Mapping|Quake map making]], an '''entity''' is any object defined in the [[map_file_format|.map file]] of a level, and are used to define the position and parameters of all the things that will appear in the level, such as monsters, items, doors, teleporters, lights and sounds.

==Overview==
Entities can be broadly defined as belonging to one of two different types, '''point entities''' and '''solid entities''' (also known as brush entities).

A point entity is an entity that can be thought of as being at a specific point in the level, and its geometry (if any) is predefined. For example, a monster is a point entity. A level author might place many [[monster_ogre|ogres]] in their level, but each ogre will be the same shape and behave the same way because they are defined by the game already.

Solid entities, on the other hand, are entities which are made by the level author out of [[brush|brushes]] and can take any shape the author wishes. A [[func_door|door]], for example, is something that the level author needs to be able to make out of brushes in order to fit into different [[themes|level_theme]], different sized holes etc.

The static level geometry itself is also defined as a [[worldspawn]] entity, but it is a special entity that is treated differently by the [[Map_compiling|compilers]], and depending on the [[Mapping_tools#Level_Editors|level editor]] being used, its settings might be accessed from a different place to that of other entities. The worldspawn is always the first entity defined in a .map file.

==Entity Settings==
In order to change their behaviour, appearance etc. all entities have settings that can be modfied by the level author. The following section contains general information about these settings. For specific entity setting information, see [[Entity_guide#Entities|Entities]].

===Key/Value Pairs===
A key/value pair is the name given to a single entity parameter; The key is the name of the parameter and the value is what it is set to. For example, a [[func_door]] entity has a parameter that sets how fast it moves. The key is named &quot;speed&quot; and it's value can be set by the user to alter the speed of the door. For the purposes of this wiki, we will use the format (key : value) as notation for key/value pairs in text passages. (speed : 100) means the speed parameter of the door is set to 100 [[unit|units]] per second.

Note that sometimes the naming of keys is not particularly intuitive, so some editors hide the real key name and show the user something more easily understood. The names used in the wiki are the actual key names used by Quake, and are correct.

====Origin and Angle====
Origin and angle are keys supported by every single entity with the exception of the [[worldspawn]], since it does not ever move and does not need them. Origin is used to define the position of an entity in the level, and angle is a value between 0 and 360 that sets its rotation. Both of these keys are usually hidden from direct editing by level editors; origin is almost always set only by moving the object around in the editor, and some editors (such as [[TrenchBroom]]) allow direct rotation of the entity to set the angle, wheras others (such as [[Worldcraft]]) have some kind of visual representation in their entity property editing tool as well as the ability to manually set the angle numerically.

Some entities may support setting angle to up or down by using the values -1 for up and -2 for down. Other entities, such is [[info_intermission]] might require a more complex angle. This can often be specified with a [[mangle]] key.

====Targetname, Target and Killtarget====
Quake features a very basic form of event scripting via triggers that can be placed in levels and used to activate other entities. For example, the [[func_button]] entity is used to make a usable button object in a level which will trigger a targeted event when when pressed. This event system is not limited to the obvious trigger entities and buttons - monsters can fire events when they are killed, and items when they are picked up. In order to use this system, the keys targetname and target must be understood.

The '''targetname''' key is used to establish a name for an entity so that it can be linked to triggers that are targeting it. The value of targetname needn't be unique, though multiple entities using the same targetname will all be activated at once by anything that triggers them.

The value of '''target''' should be set to the targetname of the entity that needs to be activated. For example. a [[func_door]] with (targetname : door1) can be activated by a func_button with (target : door1).

'''killtarget''' is a key used in a similar way to target, but instead of activating the target, the targeted entity will be removed from the level when the killtarget event is fired.

In [[vanilla Quake]], a single trigger cannot target multiple entities another at the same time. This is true even if one entity is targeted and another is killtargeted. In order to do this, multiple triggers (see [[trigger_relay]]) must be used for each different target or killtarget. Some [[mod|mods]], such as [[Quoth]] support multi-targeting, which allows multiple targets to be set for a single trigger, and also enables targets and killtargets to both be fired when the trigger is triggered.

===Spawnflags===
Spawnflags is the name given to a particular key that all entities support and is used to store multiple boolean parameters (flags) in a single key/value pair. The value of spawnflags is a number typically between 0 and 4096 and is calculated by adding the values given to each flag together. The value for any single flag is always a power of two. This is so that when loading a level, Quake can understand from the value of spawnflags which flags were set and which were not.

One of the uses of spawnflags is to tell Quake whether or not to spawn entities into the level on level load. These flags are listed below:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
Other flags are only valid when used with certain entities, but these four are universal and work with every entity.

Most [[Mapping_tools#Level_Editors|level editors]] have a simple visual representation of spawnflags with checkboxes for each flag, so that the user does not need to calculate its value manually.</text>
      <sha1>l3pr5qgn3uo97ajvcqtmf87ess3kozm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2131</id>
      <parentid>2072</parentid>
      <timestamp>2013-03-25T23:31:49Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <minor/>
      <comment>/* Spawnflags */</comment>
      <text xml:space="preserve" bytes="6499">In [[Mapping|Quake map making]], an '''entity''' is any object defined in the [[map_file_format|.map file]] of a level, and are used to define the position and parameters of all the things that will appear in the level, such as monsters, items, doors, teleporters, lights and sounds.

==Overview==
Entities can be broadly defined as belonging to one of two different types, '''point entities''' and '''solid entities''' (also known as brush entities).

A point entity is an entity that can be thought of as being at a specific point in the level, and its geometry (if any) is predefined. For example, a monster is a point entity. A level author might place many [[monster_ogre|ogres]] in their level, but each ogre will be the same shape and behave the same way because they are defined by the game already.

Solid entities, on the other hand, are entities which are made by the level author out of [[brush|brushes]] and can take any shape the author wishes. A [[func_door|door]], for example, is something that the level author needs to be able to make out of brushes in order to fit into different [[themes|level_theme]], different sized holes etc.

The static level geometry itself is also defined as a [[worldspawn]] entity, but it is a special entity that is treated differently by the [[Map_compiling|compilers]], and depending on the [[Mapping_tools#Level_Editors|level editor]] being used, its settings might be accessed from a different place to that of other entities. The worldspawn is always the first entity defined in a .map file.

==Entity Settings==
In order to change their behaviour, appearance etc. all entities have settings that can be modfied by the level author. The following section contains general information about these settings. For specific entity setting information, see [[Entity_guide#Entities|Entities]].

===Key/Value Pairs===
A key/value pair is the name given to a single entity parameter; The key is the name of the parameter and the value is what it is set to. For example, a [[func_door]] entity has a parameter that sets how fast it moves. The key is named &quot;speed&quot; and it's value can be set by the user to alter the speed of the door. For the purposes of this wiki, we will use the format (key : value) as notation for key/value pairs in text passages. (speed : 100) means the speed parameter of the door is set to 100 [[unit|units]] per second.

Note that sometimes the naming of keys is not particularly intuitive, so some editors hide the real key name and show the user something more easily understood. The names used in the wiki are the actual key names used by Quake, and are correct.

====Origin and Angle====
Origin and angle are keys supported by every single entity with the exception of the [[worldspawn]], since it does not ever move and does not need them. Origin is used to define the position of an entity in the level, and angle is a value between 0 and 360 that sets its rotation. Both of these keys are usually hidden from direct editing by level editors; origin is almost always set only by moving the object around in the editor, and some editors (such as [[TrenchBroom]]) allow direct rotation of the entity to set the angle, wheras others (such as [[Worldcraft]]) have some kind of visual representation in their entity property editing tool as well as the ability to manually set the angle numerically.

Some entities may support setting angle to up or down by using the values -1 for up and -2 for down. Other entities, such is [[info_intermission]] might require a more complex angle. This can often be specified with a [[mangle]] key.

====Targetname, Target and Killtarget====
Quake features a very basic form of event scripting via triggers that can be placed in levels and used to activate other entities. For example, the [[func_button]] entity is used to make a usable button object in a level which will trigger a targeted event when when pressed. This event system is not limited to the obvious trigger entities and buttons - monsters can fire events when they are killed, and items when they are picked up. In order to use this system, the keys targetname and target must be understood.

The '''targetname''' key is used to establish a name for an entity so that it can be linked to triggers that are targeting it. The value of targetname needn't be unique, though multiple entities using the same targetname will all be activated at once by anything that triggers them.

The value of '''target''' should be set to the targetname of the entity that needs to be activated. For example. a [[func_door]] with (targetname : door1) can be activated by a func_button with (target : door1).

'''killtarget''' is a key used in a similar way to target, but instead of activating the target, the targeted entity will be removed from the level when the killtarget event is fired.

In [[vanilla Quake]], a single trigger cannot target multiple entities another at the same time. This is true even if one entity is targeted and another is killtargeted. In order to do this, multiple triggers (see [[trigger_relay]]) must be used for each different target or killtarget. Some [[mod|mods]], such as [[Quoth]] support multi-targeting, which allows multiple targets to be set for a single trigger, and also enables targets and killtargets to both be fired when the trigger is triggered.

===Spawnflags===
Spawnflags is the name given to a particular key that all entities support and is used to store multiple boolean parameters (flags) in a single key/value pair. The value of spawnflags is a number typically between 0 and 4096 (although a bit value up to 8388608 is allowed)and is calculated by adding the values given to each flag together. The value for any single flag is always a power of two. This is so that when loading a level, Quake can understand from the value of spawnflags which flags were set and which were not.

One of the uses of spawnflags is to tell Quake whether or not to spawn entities into the level on level load. These flags are listed below:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
Other flags are only valid when used with certain entities, but these four are universal and work with every entity.

Most [[Mapping_tools#Level_Editors|level editors]] have a simple visual representation of spawnflags with checkboxes for each flag, so that the user does not need to calculate its value manually.</text>
      <sha1>kwvvgd9lr8l74vbzu8yq5xin2wqv9xb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2190</id>
      <parentid>2131</parentid>
      <timestamp>2013-03-26T04:22:55Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="6552">[[File:Entity.png|thumb|upright=1.25|Some Entities]]
In [[Mapping|Quake map making]], an '''entity''' is any object defined in the [[map_file_format|.map file]] of a level, and are used to define the position and parameters of all the things that will appear in the level, such as monsters, items, doors, teleporters, lights and sounds.

==Overview==
Entities can be broadly defined as belonging to one of two different types, '''point entities''' and '''solid entities''' (also known as brush entities).

A point entity is an entity that can be thought of as being at a specific point in the level, and its geometry (if any) is predefined. For example, a monster is a point entity. A level author might place many [[monster_ogre|ogres]] in their level, but each ogre will be the same shape and behave the same way because they are defined by the game already.

Solid entities, on the other hand, are entities which are made by the level author out of [[brush|brushes]] and can take any shape the author wishes. A [[func_door|door]], for example, is something that the level author needs to be able to make out of brushes in order to fit into different [[themes|level_theme]], different sized holes etc.

The static level geometry itself is also defined as a [[worldspawn]] entity, but it is a special entity that is treated differently by the [[Map_compiling|compilers]], and depending on the [[Mapping_tools#Level_Editors|level editor]] being used, its settings might be accessed from a different place to that of other entities. The worldspawn is always the first entity defined in a .map file.

==Entity Settings==
In order to change their behaviour, appearance etc. all entities have settings that can be modfied by the level author. The following section contains general information about these settings. For specific entity setting information, see [[Entity_guide#Entities|Entities]].

===Key/Value Pairs===
A key/value pair is the name given to a single entity parameter; The key is the name of the parameter and the value is what it is set to. For example, a [[func_door]] entity has a parameter that sets how fast it moves. The key is named &quot;speed&quot; and it's value can be set by the user to alter the speed of the door. For the purposes of this wiki, we will use the format (key : value) as notation for key/value pairs in text passages. (speed : 100) means the speed parameter of the door is set to 100 [[unit|units]] per second.

Note that sometimes the naming of keys is not particularly intuitive, so some editors hide the real key name and show the user something more easily understood. The names used in the wiki are the actual key names used by Quake, and are correct.

====Origin and Angle====
Origin and angle are keys supported by every single entity with the exception of the [[worldspawn]], since it does not ever move and does not need them. Origin is used to define the position of an entity in the level, and angle is a value between 0 and 360 that sets its rotation. Both of these keys are usually hidden from direct editing by level editors; origin is almost always set only by moving the object around in the editor, and some editors (such as [[TrenchBroom]]) allow direct rotation of the entity to set the angle, wheras others (such as [[Worldcraft]]) have some kind of visual representation in their entity property editing tool as well as the ability to manually set the angle numerically.

Some entities may support setting angle to up or down by using the values -1 for up and -2 for down. Other entities, such is [[info_intermission]] might require a more complex angle. This can often be specified with a [[mangle]] key.

====Targetname, Target and Killtarget====
Quake features a very basic form of event scripting via triggers that can be placed in levels and used to activate other entities. For example, the [[func_button]] entity is used to make a usable button object in a level which will trigger a targeted event when when pressed. This event system is not limited to the obvious trigger entities and buttons - monsters can fire events when they are killed, and items when they are picked up. In order to use this system, the keys targetname and target must be understood.

The '''targetname''' key is used to establish a name for an entity so that it can be linked to triggers that are targeting it. The value of targetname needn't be unique, though multiple entities using the same targetname will all be activated at once by anything that triggers them.

The value of '''target''' should be set to the targetname of the entity that needs to be activated. For example. a [[func_door]] with (targetname : door1) can be activated by a func_button with (target : door1).

'''killtarget''' is a key used in a similar way to target, but instead of activating the target, the targeted entity will be removed from the level when the killtarget event is fired.

In [[vanilla Quake]], a single trigger cannot target multiple entities another at the same time. This is true even if one entity is targeted and another is killtargeted. In order to do this, multiple triggers (see [[trigger_relay]]) must be used for each different target or killtarget. Some [[mod|mods]], such as [[Quoth]] support multi-targeting, which allows multiple targets to be set for a single trigger, and also enables targets and killtargets to both be fired when the trigger is triggered.

===Spawnflags===
Spawnflags is the name given to a particular key that all entities support and is used to store multiple boolean parameters (flags) in a single key/value pair. The value of spawnflags is a number typically between 0 and 4096 (although a bit value up to 8388608 is allowed)and is calculated by adding the values given to each flag together. The value for any single flag is always a power of two. This is so that when loading a level, Quake can understand from the value of spawnflags which flags were set and which were not.

One of the uses of spawnflags is to tell Quake whether or not to spawn entities into the level on level load. These flags are listed below:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
Other flags are only valid when used with certain entities, but these four are universal and work with every entity.

Most [[Mapping_tools#Level_Editors|level editors]] have a simple visual representation of spawnflags with checkboxes for each flag, so that the user does not need to calculate its value manually.</text>
      <sha1>jbyofvb6hwthrvwueyqqezxpnk5v6j0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2285</id>
      <parentid>2190</parentid>
      <timestamp>2013-03-26T17:32:12Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Targetname, Target and Killtarget */</comment>
      <text xml:space="preserve" bytes="6566">[[File:Entity.png|thumb|upright=1.25|Some Entities]]
In [[Mapping|Quake map making]], an '''entity''' is any object defined in the [[map_file_format|.map file]] of a level, and are used to define the position and parameters of all the things that will appear in the level, such as monsters, items, doors, teleporters, lights and sounds.

==Overview==
Entities can be broadly defined as belonging to one of two different types, '''point entities''' and '''solid entities''' (also known as brush entities).

A point entity is an entity that can be thought of as being at a specific point in the level, and its geometry (if any) is predefined. For example, a monster is a point entity. A level author might place many [[monster_ogre|ogres]] in their level, but each ogre will be the same shape and behave the same way because they are defined by the game already.

Solid entities, on the other hand, are entities which are made by the level author out of [[brush|brushes]] and can take any shape the author wishes. A [[func_door|door]], for example, is something that the level author needs to be able to make out of brushes in order to fit into different [[themes|level_theme]], different sized holes etc.

The static level geometry itself is also defined as a [[worldspawn]] entity, but it is a special entity that is treated differently by the [[Map_compiling|compilers]], and depending on the [[Mapping_tools#Level_Editors|level editor]] being used, its settings might be accessed from a different place to that of other entities. The worldspawn is always the first entity defined in a .map file.

==Entity Settings==
In order to change their behaviour, appearance etc. all entities have settings that can be modfied by the level author. The following section contains general information about these settings. For specific entity setting information, see [[Entity_guide#Entities|Entities]].

===Key/Value Pairs===
A key/value pair is the name given to a single entity parameter; The key is the name of the parameter and the value is what it is set to. For example, a [[func_door]] entity has a parameter that sets how fast it moves. The key is named &quot;speed&quot; and it's value can be set by the user to alter the speed of the door. For the purposes of this wiki, we will use the format (key : value) as notation for key/value pairs in text passages. (speed : 100) means the speed parameter of the door is set to 100 [[unit|units]] per second.

Note that sometimes the naming of keys is not particularly intuitive, so some editors hide the real key name and show the user something more easily understood. The names used in the wiki are the actual key names used by Quake, and are correct.

====Origin and Angle====
Origin and angle are keys supported by every single entity with the exception of the [[worldspawn]], since it does not ever move and does not need them. Origin is used to define the position of an entity in the level, and angle is a value between 0 and 360 that sets its rotation. Both of these keys are usually hidden from direct editing by level editors; origin is almost always set only by moving the object around in the editor, and some editors (such as [[TrenchBroom]]) allow direct rotation of the entity to set the angle, wheras others (such as [[Worldcraft]]) have some kind of visual representation in their entity property editing tool as well as the ability to manually set the angle numerically.

Some entities may support setting angle to up or down by using the values -1 for up and -2 for down. Other entities, such is [[info_intermission]] might require a more complex angle. This can often be specified with a [[mangle]] key.

====Targetname, Target and Killtarget====
Quake features a very basic form of event scripting via triggers that can be placed in levels and used to activate other entities. For example, the [[func_button]] entity is used to make a usable button object in a level which will trigger a targeted event when when pressed. This event system is not limited to the obvious trigger entities and buttons - monsters can fire events when they are killed, and items when they are picked up. In order to use this system, the keys targetname and target must be understood.

The '''targetname''' key is used to establish a name for an entity so that it can be linked to triggers that are targeting it. The value of targetname needn't be unique, though multiple entities using the same targetname will all be activated at once by anything that triggers them.

The value of '''target''' should be set to the targetname of the entity that needs to be activated. For example. a [[func_door]] with (targetname : door1) can be activated by a func_button with (target : door1).

'''killtarget''' is a key used in a similar way to target, but instead of activating the target, the targeted entity will be removed from the level when the killtarget event is fired.

In [[Vanilla Quake|vanilla Quake]], a single trigger cannot target multiple entities another at the same time. This is true even if one entity is targeted and another is killtargeted. In order to do this, multiple triggers (see [[trigger_relay]]) must be used for each different target or killtarget. Some [[mod|mods]], such as [[Quoth]] support multi-targeting, which allows multiple targets to be set for a single trigger, and also enables targets and killtargets to both be fired when the trigger is triggered.

===Spawnflags===
Spawnflags is the name given to a particular key that all entities support and is used to store multiple boolean parameters (flags) in a single key/value pair. The value of spawnflags is a number typically between 0 and 4096 (although a bit value up to 8388608 is allowed)and is calculated by adding the values given to each flag together. The value for any single flag is always a power of two. This is so that when loading a level, Quake can understand from the value of spawnflags which flags were set and which were not.

One of the uses of spawnflags is to tell Quake whether or not to spawn entities into the level on level load. These flags are listed below:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
Other flags are only valid when used with certain entities, but these four are universal and work with every entity.

Most [[Mapping_tools#Level_Editors|level editors]] have a simple visual representation of spawnflags with checkboxes for each flag, so that the user does not need to calculate its value manually.</text>
      <sha1>j8a7rg77m589l84zxt6p9xdk1lmuny7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2360</id>
      <parentid>2285</parentid>
      <timestamp>2013-03-27T15:37:11Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>tweaked text to sound less lame and fixed some links</comment>
      <text xml:space="preserve" bytes="6562">[[File:Entity.png|thumb|upright=1.25|Some Entities]]
In [[Mapping|Quake map making]], an '''entity''' is any object defined in the [[Quake Map Format|.map file]] of a level, and are used to define the position and parameters of all the things that will appear in the level, such as monsters, items, doors, teleporters, lights and sounds.

==Overview==
Entities can be broadly defined as belonging to one of two different types, '''point entities''' and '''solid entities''' (also known as brush entities).

A point entity is an entity that can be placed at any point in the level, and its geometry (if any) is predefined in the game data. For example, a monster is a point entity. A level author might place many [[monster_ogre|ogres]] in their level, but each ogre will be the same shape and behave the same way because they are defined by the game already.

Solid entities, on the other hand, are entities which are made by the level author out of [[Brush|brushes]] and can take any shape the author wishes. A [[func_door|door]], for example, is something that the level author needs to be able to design themselves in order to fit into different [[level_theme|themes]], different sized holes etc.

The static level geometry itself is also defined as a [[worldspawn]] entity, but it is a special entity that is treated differently by the [[Map_compiling|compilers]], and depending on the [[Mapping_tools#Level_Editors|level editor]] being used, its settings might be accessed from a different place to that of other entities. The worldspawn is always the first entity defined in a .map file.

==Entity Settings==
In order to change their behaviour, appearance etc. all entities have settings that can be modfied by the level author. The following section contains general information about these settings. For specific entity setting information, see [[Entity_guide#Entities|Entities]].

===Key/Value Pairs===
A key/value pair is the name given to a single entity parameter; The key is the name of the parameter and the value is what it is set to. For example, a [[func_door]] entity has a parameter that sets how fast it moves. The key is named &quot;speed&quot; and it's value can be set by the user to alter the speed of the door. For the purposes of this wiki, we will use the format (key : value) as notation for key/value pairs in text passages. (speed : 100) means the speed parameter of the door is set to 100 [[unit|units]] per second.

Note that sometimes the naming of keys is not particularly intuitive, so some editors hide the real key name and show the user something more easily understood. The names used in the wiki are the actual key names used by Quake, and are correct.

====Origin and Angle====
Origin and angle are keys supported by every single entity with the exception of the [[worldspawn]], since it does not ever move and does not need them. Origin is used to define the position of an entity in the level, and angle is a value between 0 and 360 that sets its rotation. Both of these keys are usually hidden from direct editing by level editors; origin is almost always set only by moving the object around in the editor, and some editors (such as [[TrenchBroom]]) allow direct rotation of the entity to set the angle, wheras others (such as [[Worldcraft]]) have some kind of visual representation in their entity property editing tool as well as the ability to manually set the angle numerically.

Some entities may support setting angle to up or down by using the values -1 for up and -2 for down. Other entities, such is [[info_intermission]] might require a more complex angle. This can often be specified with a [[mangle]] key.

====Targetname, Target and Killtarget====
Quake features a very basic form of event scripting via triggers that can be placed in levels and used to activate other entities. For example, the [[func_button]] entity is used to make a usable button object in a level which will trigger a targeted event when when pressed. This event system is not limited to the obvious trigger entities and buttons - monsters can fire events when they are killed, and items when they are picked up. In order to use this system, the keys targetname and target must be understood.

The '''targetname''' key is used to establish a name for an entity so that it can be linked to triggers that are targeting it. The value of targetname needn't be unique, though multiple entities using the same targetname will all be activated at once by anything that triggers them.

The value of '''target''' should be set to the targetname of the entity that needs to be activated. For example. a [[func_door]] with (targetname : door1) can be activated by a func_button with (target : door1).

'''killtarget''' is a key used in a similar way to target, but instead of activating the target, the targeted entity will be removed from the level when the killtarget event is fired.

In [[Vanilla Quake|vanilla Quake]], a single trigger cannot target multiple entities another at the same time. This is true even if one entity is targeted and another is killtargeted. In order to do this, multiple triggers (see [[trigger_relay]]) must be used for each different target or killtarget. Some [[mod|mods]], such as [[Quoth]] support multi-targeting, which allows multiple targets to be set for a single trigger, and also enables targets and killtargets to both be fired when the trigger is triggered.

===Spawnflags===
Spawnflags is the name given to a particular key that all entities support and is used to store multiple boolean parameters (flags) in a single key/value pair. The value of spawnflags is a number typically between 0 and 4096 (although a bit value up to 8388608 is allowed)and is calculated by adding the values given to each flag together. The value for any single flag is always a power of two. This is so that when loading a level, Quake can understand from the value of spawnflags which flags were set and which were not.

One of the uses of spawnflags is to tell Quake whether or not to spawn entities into the level on level load. These flags are listed below:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
Other flags are only valid when used with certain entities, but these four are universal and work with every entity.

Most [[Mapping_tools#Level_Editors|level editors]] have a simple visual representation of spawnflags with checkboxes for each flag, so that the user does not need to calculate its value manually.</text>
      <sha1>mopxgyuv1roqzc2xkds76wp2awyw6k5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2361</id>
      <parentid>2360</parentid>
      <timestamp>2013-03-27T19:15:24Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>/* Overview */ explained the name &quot;point entity&quot;</comment>
      <text xml:space="preserve" bytes="6673">[[File:Entity.png|thumb|upright=1.25|Some Entities]]
In [[Mapping|Quake map making]], an '''entity''' is any object defined in the [[Quake Map Format|.map file]] of a level, and are used to define the position and parameters of all the things that will appear in the level, such as monsters, items, doors, teleporters, lights and sounds.

==Overview==
Entities can be broadly defined as belonging to one of two different types, '''point entities''' and '''solid entities''' (also known as brush entities).

A point entity is an entity that can be placed at any point in the level, and its geometry (if any) is predefined in the game data. For example, a monster is a point entity. A level author might place many [[monster_ogre|ogres]] in their level, but each ogre will be the same shape and behave the same way because they are defined by the game already. The name stems from the fact that a point entity has one single coordinate (a point) determining its position.

Solid entities, on the other hand, are entities which are made by the level author out of [[Brush|brushes]] and can take any shape the author wishes. A [[func_door|door]], for example, is something that the level author needs to be able to design themselves in order to fit into different [[level_theme|themes]], different sized holes etc.

The static level geometry itself is also defined as a [[worldspawn]] entity, but it is a special entity that is treated differently by the [[Map_compiling|compilers]], and depending on the [[Mapping_tools#Level_Editors|level editor]] being used, its settings might be accessed from a different place to that of other entities. The worldspawn is always the first entity defined in a .map file.

==Entity Settings==
In order to change their behaviour, appearance etc. all entities have settings that can be modfied by the level author. The following section contains general information about these settings. For specific entity setting information, see [[Entity_guide#Entities|Entities]].

===Key/Value Pairs===
A key/value pair is the name given to a single entity parameter; The key is the name of the parameter and the value is what it is set to. For example, a [[func_door]] entity has a parameter that sets how fast it moves. The key is named &quot;speed&quot; and it's value can be set by the user to alter the speed of the door. For the purposes of this wiki, we will use the format (key : value) as notation for key/value pairs in text passages. (speed : 100) means the speed parameter of the door is set to 100 [[unit|units]] per second.

Note that sometimes the naming of keys is not particularly intuitive, so some editors hide the real key name and show the user something more easily understood. The names used in the wiki are the actual key names used by Quake, and are correct.

====Origin and Angle====
Origin and angle are keys supported by every single entity with the exception of the [[worldspawn]], since it does not ever move and does not need them. Origin is used to define the position of an entity in the level, and angle is a value between 0 and 360 that sets its rotation. Both of these keys are usually hidden from direct editing by level editors; origin is almost always set only by moving the object around in the editor, and some editors (such as [[TrenchBroom]]) allow direct rotation of the entity to set the angle, wheras others (such as [[Worldcraft]]) have some kind of visual representation in their entity property editing tool as well as the ability to manually set the angle numerically.

Some entities may support setting angle to up or down by using the values -1 for up and -2 for down. Other entities, such is [[info_intermission]] might require a more complex angle. This can often be specified with a [[mangle]] key.

====Targetname, Target and Killtarget====
Quake features a very basic form of event scripting via triggers that can be placed in levels and used to activate other entities. For example, the [[func_button]] entity is used to make a usable button object in a level which will trigger a targeted event when when pressed. This event system is not limited to the obvious trigger entities and buttons - monsters can fire events when they are killed, and items when they are picked up. In order to use this system, the keys targetname and target must be understood.

The '''targetname''' key is used to establish a name for an entity so that it can be linked to triggers that are targeting it. The value of targetname needn't be unique, though multiple entities using the same targetname will all be activated at once by anything that triggers them.

The value of '''target''' should be set to the targetname of the entity that needs to be activated. For example. a [[func_door]] with (targetname : door1) can be activated by a func_button with (target : door1).

'''killtarget''' is a key used in a similar way to target, but instead of activating the target, the targeted entity will be removed from the level when the killtarget event is fired.

In [[Vanilla Quake|vanilla Quake]], a single trigger cannot target multiple entities another at the same time. This is true even if one entity is targeted and another is killtargeted. In order to do this, multiple triggers (see [[trigger_relay]]) must be used for each different target or killtarget. Some [[mod|mods]], such as [[Quoth]] support multi-targeting, which allows multiple targets to be set for a single trigger, and also enables targets and killtargets to both be fired when the trigger is triggered.

===Spawnflags===
Spawnflags is the name given to a particular key that all entities support and is used to store multiple boolean parameters (flags) in a single key/value pair. The value of spawnflags is a number typically between 0 and 4096 (although a bit value up to 8388608 is allowed)and is calculated by adding the values given to each flag together. The value for any single flag is always a power of two. This is so that when loading a level, Quake can understand from the value of spawnflags which flags were set and which were not.

One of the uses of spawnflags is to tell Quake whether or not to spawn entities into the level on level load. These flags are listed below:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
Other flags are only valid when used with certain entities, but these four are universal and work with every entity.

Most [[Mapping_tools#Level_Editors|level editors]] have a simple visual representation of spawnflags with checkboxes for each flag, so that the user does not need to calculate its value manually.</text>
      <sha1>cxd3d0oeoug0491xh3lc92b1hsgccas</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2497</id>
      <parentid>2361</parentid>
      <timestamp>2013-03-29T13:29:53Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>small change to point/solid entity type section to be a little more readable and ripe for linking</comment>
      <text xml:space="preserve" bytes="6653">[[File:Entity.png|thumb|upright=1.25|Some Entities]]
In [[Mapping|Quake map making]], an '''entity''' is any object defined in the [[Quake Map Format|.map file]] of a level, and are used to define the position and parameters of all the things that will appear in the level, such as monsters, items, doors, teleporters, lights and sounds.

==Overview==
Entities can be broadly defined as belonging to one of two different types, point entities and solid entities (also known as brush entities).

A '''point entity''' is an entity that can be placed at any point in the level, and its geometry (if any) is predefined in the game data. For example, a monster is a point entity. A level author might place many [[monster_ogre|ogres]] in their level, but each ogre will be the same shape and behave the same way because they are defined by the game already. The name stems from the fact that a point entity has one single coordinate (a point) determining its position.

A '''solid entity''', on the other hand, is made by the level author out of [[Brush|brushes]] and can take any shape the author wishes. A [[func_door|door]], for example, is something that the level author needs to be able to design themselves in order to fit into different [[level_theme|themes]], different sized holes etc.

The static level geometry itself is also defined as a [[worldspawn]] entity, but it is a special entity that is treated differently by the [[Map_compiling|compilers]], and depending on the [[Mapping_tools#Level_Editors|level editor]] being used, its settings might be accessed from a different place to that of other entities. The worldspawn is always the first entity defined in a .map file.

==Entity Settings==
In order to change their behaviour, appearance etc. all entities have settings that can be modfied by the level author. The following section contains general information about these settings. For specific entity setting information, see [[Entity_guide#Entities|Entities]].

===Key/Value Pairs===
A key/value pair is the name given to a single entity parameter; The key is the name of the parameter and the value is what it is set to. For example, a [[func_door]] entity has a parameter that sets how fast it moves. The key is named &quot;speed&quot; and it's value can be set by the user to alter the speed of the door. For the purposes of this wiki, we will use the format (key : value) as notation for key/value pairs in text passages. (speed : 100) means the speed parameter of the door is set to 100 [[unit|units]] per second.

Note that sometimes the naming of keys is not particularly intuitive, so some editors hide the real key name and show the user something more easily understood. The names used in the wiki are the actual key names used by Quake, and are correct.

====Origin and Angle====
Origin and angle are keys supported by every single entity with the exception of the [[worldspawn]], since it does not ever move and does not need them. Origin is used to define the position of an entity in the level, and angle is a value between 0 and 360 that sets its rotation. Both of these keys are usually hidden from direct editing by level editors; origin is almost always set only by moving the object around in the editor, and some editors (such as [[TrenchBroom]]) allow direct rotation of the entity to set the angle, wheras others (such as [[Worldcraft]]) have some kind of visual representation in their entity property editing tool as well as the ability to manually set the angle numerically.

Some entities may support setting angle to up or down by using the values -1 for up and -2 for down. Other entities, such is [[info_intermission]] might require a more complex angle. This can often be specified with a [[mangle]] key.

====Targetname, Target and Killtarget====
Quake features a very basic form of event scripting via triggers that can be placed in levels and used to activate other entities. For example, the [[func_button]] entity is used to make a usable button object in a level which will trigger a targeted event when when pressed. This event system is not limited to the obvious trigger entities and buttons - monsters can fire events when they are killed, and items when they are picked up. In order to use this system, the keys targetname and target must be understood.

The '''targetname''' key is used to establish a name for an entity so that it can be linked to triggers that are targeting it. The value of targetname needn't be unique, though multiple entities using the same targetname will all be activated at once by anything that triggers them.

The value of '''target''' should be set to the targetname of the entity that needs to be activated. For example. a [[func_door]] with (targetname : door1) can be activated by a func_button with (target : door1).

'''killtarget''' is a key used in a similar way to target, but instead of activating the target, the targeted entity will be removed from the level when the killtarget event is fired.

In [[Vanilla Quake|vanilla Quake]], a single trigger cannot target multiple entities another at the same time. This is true even if one entity is targeted and another is killtargeted. In order to do this, multiple triggers (see [[trigger_relay]]) must be used for each different target or killtarget. Some [[mod|mods]], such as [[Quoth]] support multi-targeting, which allows multiple targets to be set for a single trigger, and also enables targets and killtargets to both be fired when the trigger is triggered.

===Spawnflags===
Spawnflags is the name given to a particular key that all entities support and is used to store multiple boolean parameters (flags) in a single key/value pair. The value of spawnflags is a number typically between 0 and 4096 (although a bit value up to 8388608 is allowed)and is calculated by adding the values given to each flag together. The value for any single flag is always a power of two. This is so that when loading a level, Quake can understand from the value of spawnflags which flags were set and which were not.

One of the uses of spawnflags is to tell Quake whether or not to spawn entities into the level on level load. These flags are listed below:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
Other flags are only valid when used with certain entities, but these four are universal and work with every entity.

Most [[Mapping_tools#Level_Editors|level editors]] have a simple visual representation of spawnflags with checkboxes for each flag, so that the user does not need to calculate its value manually.</text>
      <sha1>89t4j7178iknkz7vm5c20kanpji7bna</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Entity guide</title>
    <ns>0</ns>
    <id>19</id>
    <revision>
      <id>25</id>
      <timestamp>2007-10-30T16:54:24Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: Here is a good site to grab the info to fill these pages with: http://web.archive.org/web/*/http://www.annihilator.com/gameediting/quake/editing/editing_lvlentities.html  * [[worldspawn]] ...</comment>
      <text xml:space="preserve" bytes="2208">Here is a good site to grab the info to fill these pages with: http://web.archive.org/web/*/http://www.annihilator.com/gameediting/quake/editing/editing_lvlentities.html

* [[worldspawn]]
* [[info_player_start]]
* [[info_player_deathmatch]]
* [[info_player_coop]]
* [[info_player_start2]]
* [[info_teleport destination]]
* [[info_null]]
* [[info_intermission]]
* [[item_cells]]
* [[item_rockets]]
* [[item_shells]]
* [[item_spikes]]
* [[item_health]]
* [[item_artifact_envirosuit]]
* [[item_artifact_super_damage]]
* [[item_artifact_invulnerability]]
* [[item_artifact_invisibility]]
* [[item_armorInv]]
* [[item_armor2]]
* [[item_armor1]]
* [[item_key1]]
* [[item_key2]]
* [[item_sigil]]
* [[weapon_supershotgun]]
* [[weapon_nailgun]]
* [[weapon_supernailgun]]
* [[weapon_grenadelauncher]]
* [[weapon_rocketlauncher]]
* [[weapon_lightning]]
* [[monster_army]]
* [[monster_dog]]
* [[monster_ogre]]
* [[monster_ogre_marksman]]
* [[monster_knight]]
* [[monster_hell_knight]]
* [[monster_wizard]]
* [[monster_demon1]]
* [[monster_shambler]]
* [[monster_boss]]
* [[monster_enforcer]]
* [[monster_shalrath]]
* [[monster_tarbaby]]
* [[monster_fish]]
* [[monster_oldone]]
* [[monster_zombie]]
* [[light]]
* [[light_fluoro]]
* [[light_fluorospark]]
* [[light_globe]]
* [[light_flame_large_yellow]]
* [[light_flame_small_yellow]]
* [[light_flame_small_white]]
* [[light_torch_small_walltorch]]
* [[air_bubbles]]
* [[event_lightning]]
* [[misc_fireball]]
* [[misc_explobox]]
* [[misc_explobox2]]
* [[trap_spikeshooter]]
* [[trap_shooter]]
* [[ambient_drip]]
* [[ambient_drone]]
* [[ambient_comp_hum]]
* [[ambient_flouro_buzz]]
* [[ambient_light_buzz]]
* [[ambient_suck_wind]]
* [[ambient_swamp1]]
* [[ambient_swamp2]]
* [[ambient_thunder]]
* [[func_door]]
* [[func_door_secret]]
* [[func_wall]]
* [[func_button]]
* [[func_train]]
* [[path_corner]]
* [[func_plat]]
* [[func_dm_only]]
* [[func_illusionary]]
* [[func_episodegate]]
* [[func_bossgate]]
* [[trigger_changelevel]]
* [[trigger_once]]
* [[trigger_multiple]]
* [[trigger_onlyregistered]]
* [[trigger_secret]]
* [[trigger_teleport]]
* [[trigger_setskill]]
* [[trigger_relay]]
* [[trigger_monsterjump]]
* [[trigger_counter]]
* [[trigger_push]]
* [[trigger_hurt]]</text>
      <sha1>j14ft5tx59fjijkaoecjp6tdt9b4tum</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1227</id>
      <parentid>25</parentid>
      <timestamp>2009-09-25T07:29:41Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>fixed link</comment>
      <text xml:space="preserve" bytes="2221">Here is a good site to grab the info to fill these pages with: http://web.archive.org/web/20040607020324/http://www.annihilator.com/gameediting/quake/editing/editing_lvlentities.html

* [[worldspawn]]
* [[info_player_start]]
* [[info_player_deathmatch]]
* [[info_player_coop]]
* [[info_player_start2]]
* [[info_teleport destination]]
* [[info_null]]
* [[info_intermission]]
* [[item_cells]]
* [[item_rockets]]
* [[item_shells]]
* [[item_spikes]]
* [[item_health]]
* [[item_artifact_envirosuit]]
* [[item_artifact_super_damage]]
* [[item_artifact_invulnerability]]
* [[item_artifact_invisibility]]
* [[item_armorInv]]
* [[item_armor2]]
* [[item_armor1]]
* [[item_key1]]
* [[item_key2]]
* [[item_sigil]]
* [[weapon_supershotgun]]
* [[weapon_nailgun]]
* [[weapon_supernailgun]]
* [[weapon_grenadelauncher]]
* [[weapon_rocketlauncher]]
* [[weapon_lightning]]
* [[monster_army]]
* [[monster_dog]]
* [[monster_ogre]]
* [[monster_ogre_marksman]]
* [[monster_knight]]
* [[monster_hell_knight]]
* [[monster_wizard]]
* [[monster_demon1]]
* [[monster_shambler]]
* [[monster_boss]]
* [[monster_enforcer]]
* [[monster_shalrath]]
* [[monster_tarbaby]]
* [[monster_fish]]
* [[monster_oldone]]
* [[monster_zombie]]
* [[light]]
* [[light_fluoro]]
* [[light_fluorospark]]
* [[light_globe]]
* [[light_flame_large_yellow]]
* [[light_flame_small_yellow]]
* [[light_flame_small_white]]
* [[light_torch_small_walltorch]]
* [[air_bubbles]]
* [[event_lightning]]
* [[misc_fireball]]
* [[misc_explobox]]
* [[misc_explobox2]]
* [[trap_spikeshooter]]
* [[trap_shooter]]
* [[ambient_drip]]
* [[ambient_drone]]
* [[ambient_comp_hum]]
* [[ambient_flouro_buzz]]
* [[ambient_light_buzz]]
* [[ambient_suck_wind]]
* [[ambient_swamp1]]
* [[ambient_swamp2]]
* [[ambient_thunder]]
* [[func_door]]
* [[func_door_secret]]
* [[func_wall]]
* [[func_button]]
* [[func_train]]
* [[path_corner]]
* [[func_plat]]
* [[func_dm_only]]
* [[func_illusionary]]
* [[func_episodegate]]
* [[func_bossgate]]
* [[trigger_changelevel]]
* [[trigger_once]]
* [[trigger_multiple]]
* [[trigger_onlyregistered]]
* [[trigger_secret]]
* [[trigger_teleport]]
* [[trigger_setskill]]
* [[trigger_relay]]
* [[trigger_monsterjump]]
* [[trigger_counter]]
* [[trigger_push]]
* [[trigger_hurt]]</text>
      <sha1>mt6ehv9tdkm39204to3kg6vkh8cpbvp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1482</id>
      <parentid>1227</parentid>
      <timestamp>2009-12-21T09:44:55Z</timestamp>
      <contributor>
        <ip>88.70.236.217</ip>
      </contributor>
      <comment>info_notnull added</comment>
      <text xml:space="preserve" bytes="2240">Here is a good site to grab the info to fill these pages with: http://web.archive.org/web/20040607020324/http://www.annihilator.com/gameediting/quake/editing/editing_lvlentities.html

* [[worldspawn]]
* [[info_player_start]]
* [[info_player_deathmatch]]
* [[info_player_coop]]
* [[info_player_start2]]
* [[info_teleport destination]]
* [[info_null]]
* [[info_notnull]]
* [[info_intermission]]
* [[item_cells]]
* [[item_rockets]]
* [[item_shells]]
* [[item_spikes]]
* [[item_health]]
* [[item_artifact_envirosuit]]
* [[item_artifact_super_damage]]
* [[item_artifact_invulnerability]]
* [[item_artifact_invisibility]]
* [[item_armorInv]]
* [[item_armor2]]
* [[item_armor1]]
* [[item_key1]]
* [[item_key2]]
* [[item_sigil]]
* [[weapon_supershotgun]]
* [[weapon_nailgun]]
* [[weapon_supernailgun]]
* [[weapon_grenadelauncher]]
* [[weapon_rocketlauncher]]
* [[weapon_lightning]]
* [[monster_army]]
* [[monster_dog]]
* [[monster_ogre]]
* [[monster_ogre_marksman]]
* [[monster_knight]]
* [[monster_hell_knight]]
* [[monster_wizard]]
* [[monster_demon1]]
* [[monster_shambler]]
* [[monster_boss]]
* [[monster_enforcer]]
* [[monster_shalrath]]
* [[monster_tarbaby]]
* [[monster_fish]]
* [[monster_oldone]]
* [[monster_zombie]]
* [[light]]
* [[light_fluoro]]
* [[light_fluorospark]]
* [[light_globe]]
* [[light_flame_large_yellow]]
* [[light_flame_small_yellow]]
* [[light_flame_small_white]]
* [[light_torch_small_walltorch]]
* [[air_bubbles]]
* [[event_lightning]]
* [[misc_fireball]]
* [[misc_explobox]]
* [[misc_explobox2]]
* [[trap_spikeshooter]]
* [[trap_shooter]]
* [[ambient_drip]]
* [[ambient_drone]]
* [[ambient_comp_hum]]
* [[ambient_flouro_buzz]]
* [[ambient_light_buzz]]
* [[ambient_suck_wind]]
* [[ambient_swamp1]]
* [[ambient_swamp2]]
* [[ambient_thunder]]
* [[func_door]]
* [[func_door_secret]]
* [[func_wall]]
* [[func_button]]
* [[func_train]]
* [[path_corner]]
* [[func_plat]]
* [[func_dm_only]]
* [[func_illusionary]]
* [[func_episodegate]]
* [[func_bossgate]]
* [[trigger_changelevel]]
* [[trigger_once]]
* [[trigger_multiple]]
* [[trigger_onlyregistered]]
* [[trigger_secret]]
* [[trigger_teleport]]
* [[trigger_setskill]]
* [[trigger_relay]]
* [[trigger_monsterjump]]
* [[trigger_counter]]
* [[trigger_push]]
* [[trigger_hurt]]</text>
      <sha1>ncala5p0pjd3zqz3ty2epasfs6v0w48</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1887</id>
      <parentid>1482</parentid>
      <timestamp>2013-03-25T02:22:08Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="4151">Here is a good site to grab the info to fill these pages with: http://web.archive.org/web/20040607020324/http://www.annihilator.com/gameediting/quake/editing/editing_lvlentities.html

==Entity Settings==
===Key/Value Pairs===
A key/value pair is the name given to a single entity parameter; The key is the name of the parameter and the value is what it is set to. For example, a [[func_door]] entity has a parameter that sets how fast it moves. The key is named &quot;speed&quot; and it's value can be set by the user to alter the speed of the door. For the purposes of this wiki, we will use the format (key : value) as notation for key/value pairs in text passages. (speed : 100) would mean the speed parameter of the door would be set to 100 [[units]] per second.

Note that sometimes the naming of keys is not particularly intuitive, so some editors hide the real key name and show the user something more easily understood. The names used in the wiki are the actual key names used by Quake, and are correct.

===Spawnflags===
Spawnflags is the name given to a particular key that all entities support and is used to store multiple boolean parameters (flags) in a single key/value pair. The value of spawnflags is a number typically between 0 and 4096 and is calculated by adding the values given to each flag together. The value for any single flag is always a power of two. This is so that when loading a level, Quake can understand from the value of spawnflags which flags were set and which were not.

One of the uses of spawnflags is to tell Quake whether or not to spawn entities into the level on level load. These flags are listed below:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
Other flags are only valid when used with certain entities, but these four are universal and work with every entity.

Most [[level editors]] have a simple visual representation of spawnflags with checkboxes for each flag, so that the user does not need to calculate its value manually.

==Entities==
* [[worldspawn]]
* [[info_player_start]]
* [[info_player_deathmatch]]
* [[info_player_coop]]
* [[info_player_start2]]
* [[info_teleport destination]]
* [[info_null]]
* [[info_notnull]]
* [[info_intermission]]
* [[item_cells]]
* [[item_rockets]]
* [[item_shells]]
* [[item_spikes]]
* [[item_health]]
* [[item_artifact_envirosuit]]
* [[item_artifact_super_damage]]
* [[item_artifact_invulnerability]]
* [[item_artifact_invisibility]]
* [[item_armorInv]]
* [[item_armor2]]
* [[item_armor1]]
* [[item_key1]]
* [[item_key2]]
* [[item_sigil]]
* [[weapon_supershotgun]]
* [[weapon_nailgun]]
* [[weapon_supernailgun]]
* [[weapon_grenadelauncher]]
* [[weapon_rocketlauncher]]
* [[weapon_lightning]]
* [[monster_army]]
* [[monster_dog]]
* [[monster_ogre]]
* [[monster_ogre_marksman]]
* [[monster_knight]]
* [[monster_hell_knight]]
* [[monster_wizard]]
* [[monster_demon1]]
* [[monster_shambler]]
* [[monster_boss]]
* [[monster_enforcer]]
* [[monster_shalrath]]
* [[monster_tarbaby]]
* [[monster_fish]]
* [[monster_oldone]]
* [[monster_zombie]]
* [[light]]
* [[light_fluoro]]
* [[light_fluorospark]]
* [[light_globe]]
* [[light_flame_large_yellow]]
* [[light_flame_small_yellow]]
* [[light_flame_small_white]]
* [[light_torch_small_walltorch]]
* [[air_bubbles]]
* [[event_lightning]]
* [[misc_fireball]]
* [[misc_explobox]]
* [[misc_explobox2]]
* [[trap_spikeshooter]]
* [[trap_shooter]]
* [[ambient_drip]]
* [[ambient_drone]]
* [[ambient_comp_hum]]
* [[ambient_flouro_buzz]]
* [[ambient_light_buzz]]
* [[ambient_suck_wind]]
* [[ambient_swamp1]]
* [[ambient_swamp2]]
* [[ambient_thunder]]
* [[func_door]]
* [[func_door_secret]]
* [[func_wall]]
* [[func_button]]
* [[func_train]]
* [[path_corner]]
* [[func_plat]]
* [[func_dm_only]]
* [[func_illusionary]]
* [[func_episodegate]]
* [[func_bossgate]]
* [[trigger_changelevel]]
* [[trigger_once]]
* [[trigger_multiple]]
* [[trigger_onlyregistered]]
* [[trigger_secret]]
* [[trigger_teleport]]
* [[trigger_setskill]]
* [[trigger_relay]]
* [[trigger_monsterjump]]
* [[trigger_counter]]
* [[trigger_push]]
* [[trigger_hurt]]</text>
      <sha1>ol1ufdk00528h3d56u8nz36yyswu71l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1889</id>
      <parentid>1887</parentid>
      <timestamp>2013-03-25T02:23:47Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="4180">Here is a good site to grab the info to fill these pages with: http://web.archive.org/web/20040607020324/http://www.annihilator.com/gameediting/quake/editing/editing_lvlentities.html

==Entity Settings==
===Key/Value Pairs===
A key/value pair is the name given to a single entity parameter; The key is the name of the parameter and the value is what it is set to. For example, a [[func_door]] entity has a parameter that sets how fast it moves. The key is named &quot;speed&quot; and it's value can be set by the user to alter the speed of the door. For the purposes of this wiki, we will use the format (key : value) as notation for key/value pairs in text passages. (speed : 100) would mean the speed parameter of the door would be set to 100 [[units]] per second.

Note that sometimes the naming of keys is not particularly intuitive, so some editors hide the real key name and show the user something more easily understood. The names used in the wiki are the actual key names used by Quake, and are correct.

===Spawnflags===
Spawnflags is the name given to a particular key that all entities support and is used to store multiple boolean parameters (flags) in a single key/value pair. The value of spawnflags is a number typically between 0 and 4096 and is calculated by adding the values given to each flag together. The value for any single flag is always a power of two. This is so that when loading a level, Quake can understand from the value of spawnflags which flags were set and which were not.

One of the uses of spawnflags is to tell Quake whether or not to spawn entities into the level on level load. These flags are listed below:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
Other flags are only valid when used with certain entities, but these four are universal and work with every entity.

Most [[level editors]] have a simple visual representation of spawnflags with checkboxes for each flag, so that the user does not need to calculate its value manually.

==Entities==
* [[worldspawn]]
* [[info_player_start]]
* [[info_player_deathmatch]]
* [[info_player_coop]]
* [[info_player_start2]]
* [[info_teleport destination]]
* [[info_null]]
* [[info_notnull]]
* [[info_intermission]]
* [[item_cells]]
* [[item_rockets]]
* [[item_shells]]
* [[item_spikes]]
* [[item_health]]
* [[item_artifact_envirosuit]]
* [[item_artifact_super_damage]]
* [[item_artifact_invulnerability]]
* [[item_artifact_invisibility]]
* [[item_armorInv]]
* [[item_armor2]]
* [[item_armor1]]
* [[item_key1]]
* [[item_key2]]
* [[item_sigil]]
* [[weapon_supershotgun]]
* [[weapon_nailgun]]
* [[weapon_supernailgun]]
* [[weapon_grenadelauncher]]
* [[weapon_rocketlauncher]]
* [[weapon_lightning]]
* [[monster_army]]
* [[monster_dog]]
* [[monster_ogre]]
* [[monster_ogre_marksman]]
* [[monster_knight]]
* [[monster_hell_knight]]
* [[monster_wizard]]
* [[monster_demon1]]
* [[monster_shambler]]
* [[monster_boss]]
* [[monster_enforcer]]
* [[monster_shalrath]]
* [[monster_tarbaby]]
* [[monster_fish]]
* [[monster_oldone]]
* [[monster_zombie]]
* [[light]]
* [[light_fluoro]]
* [[light_fluorospark]]
* [[light_globe]]
* [[light_flame_large_yellow]]
* [[light_flame_small_yellow]]
* [[light_flame_small_white]]
* [[light_torch_small_walltorch]]
* [[air_bubbles]]
* [[event_lightning]]
* [[misc_fireball]]
* [[misc_explobox]]
* [[misc_explobox2]]
* [[trap_spikeshooter]]
* [[trap_shooter]]
* [[ambient_drip]]
* [[ambient_drone]]
* [[ambient_comp_hum]]
* [[ambient_flouro_buzz]]
* [[ambient_light_buzz]]
* [[ambient_suck_wind]]
* [[ambient_swamp1]]
* [[ambient_swamp2]]
* [[ambient_thunder]]
* [[func_door]]
* [[func_door_secret]]
* [[func_wall]]
* [[func_button]]
* [[func_train]]
* [[path_corner]]
* [[func_plat]]
* [[func_dm_only]]
* [[func_illusionary]]
* [[func_episodegate]]
* [[func_bossgate]]
* [[trigger_changelevel]]
* [[trigger_once]]
* [[trigger_multiple]]
* [[trigger_onlyregistered]]
* [[trigger_secret]]
* [[trigger_teleport]]
* [[trigger_setskill]]
* [[trigger_relay]]
* [[trigger_monsterjump]]
* [[trigger_counter]]
* [[trigger_push]]
* [[trigger_hurt]]

[[Category:Quake entities]]</text>
      <sha1>kaq4f9d9nxp9l9xsecud92ua7043r4x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1897</id>
      <parentid>1889</parentid>
      <timestamp>2013-03-25T02:53:40Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>added some basic information about entities, key/values and spawnflags</comment>
      <text xml:space="preserve" bytes="5476">'''Note from Spirit: Here is a good site to grab the info to fill these pages with: http://web.archive.org/web/20040607020324/http://www.annihilator.com/gameediting/quake/editing/editing_lvlentities.html'''

----

In [[Mapping|Quake map making]], an entity is any object defined in the [[map_file_format|.map file]] of a level, and can be divided into two types, point entities and solid entities.

A point entity is an entity that can be thought of as being at a specific point in the level, and its geometry (if any) is predefined. For example, a monster is a point entity. A level author might place many [[monster_ogre|ogres]] in their level, but each ogre will be the same shape and behave the same way because they are defined by the game already.

Solid entities, on the other hand, are entities which are made by the level author out of [[brush|brushes]] and can take any shape the author wishes. A [[func_door|door]], for example, is something that the level author needs to be able to make out of brushes in order to fit into different themes, different sized holes etc.

The static level geometry itself is also defined as a [[worldspawn]] entity, but it is a special entity that is treated differently by the [[Map_compiling|compilers]], and depending on the [[Mapping_tools#Level_Editors|level editor]] being used, its settings might be accessed from a different place to that of other entities. The worldspawn is always the first entity defined in a .map file.

==Entity Settings==
===Key/Value Pairs===
A key/value pair is the name given to a single entity parameter; The key is the name of the parameter and the value is what it is set to. For example, a [[func_door]] entity has a parameter that sets how fast it moves. The key is named &quot;speed&quot; and it's value can be set by the user to alter the speed of the door. For the purposes of this wiki, we will use the format (key : value) as notation for key/value pairs in text passages. (speed : 100) would mean the speed parameter of the door would be set to 100 [[unit|units]] per second.

Note that sometimes the naming of keys is not particularly intuitive, so some editors hide the real key name and show the user something more easily understood. The names used in the wiki are the actual key names used by Quake, and are correct.

===Spawnflags===
Spawnflags is the name given to a particular key that all entities support and is used to store multiple boolean parameters (flags) in a single key/value pair. The value of spawnflags is a number typically between 0 and 4096 and is calculated by adding the values given to each flag together. The value for any single flag is always a power of two. This is so that when loading a level, Quake can understand from the value of spawnflags which flags were set and which were not.

One of the uses of spawnflags is to tell Quake whether or not to spawn entities into the level on level load. These flags are listed below:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
Other flags are only valid when used with certain entities, but these four are universal and work with every entity.

Most [[Mapping_tools#Level_Editors|level editors]] have a simple visual representation of spawnflags with checkboxes for each flag, so that the user does not need to calculate its value manually.

==Entities==
* [[worldspawn]]
* [[info_player_start]]
* [[info_player_deathmatch]]
* [[info_player_coop]]
* [[info_player_start2]]
* [[info_teleport destination]]
* [[info_null]]
* [[info_notnull]]
* [[info_intermission]]
* [[item_cells]]
* [[item_rockets]]
* [[item_shells]]
* [[item_spikes]]
* [[item_health]]
* [[item_artifact_envirosuit]]
* [[item_artifact_super_damage]]
* [[item_artifact_invulnerability]]
* [[item_artifact_invisibility]]
* [[item_armorInv]]
* [[item_armor2]]
* [[item_armor1]]
* [[item_key1]]
* [[item_key2]]
* [[item_sigil]]
* [[weapon_supershotgun]]
* [[weapon_nailgun]]
* [[weapon_supernailgun]]
* [[weapon_grenadelauncher]]
* [[weapon_rocketlauncher]]
* [[weapon_lightning]]
* [[monster_army]]
* [[monster_dog]]
* [[monster_ogre]]
* [[monster_ogre_marksman]]
* [[monster_knight]]
* [[monster_hell_knight]]
* [[monster_wizard]]
* [[monster_demon1]]
* [[monster_shambler]]
* [[monster_boss]]
* [[monster_enforcer]]
* [[monster_shalrath]]
* [[monster_tarbaby]]
* [[monster_fish]]
* [[monster_oldone]]
* [[monster_zombie]]
* [[light]]
* [[light_fluoro]]
* [[light_fluorospark]]
* [[light_globe]]
* [[light_flame_large_yellow]]
* [[light_flame_small_yellow]]
* [[light_flame_small_white]]
* [[light_torch_small_walltorch]]
* [[air_bubbles]]
* [[event_lightning]]
* [[misc_fireball]]
* [[misc_explobox]]
* [[misc_explobox2]]
* [[trap_spikeshooter]]
* [[trap_shooter]]
* [[ambient_drip]]
* [[ambient_drone]]
* [[ambient_comp_hum]]
* [[ambient_flouro_buzz]]
* [[ambient_light_buzz]]
* [[ambient_suck_wind]]
* [[ambient_swamp1]]
* [[ambient_swamp2]]
* [[ambient_thunder]]
* [[func_door]]
* [[func_door_secret]]
* [[func_wall]]
* [[func_button]]
* [[func_train]]
* [[path_corner]]
* [[func_plat]]
* [[func_dm_only]]
* [[func_illusionary]]
* [[func_episodegate]]
* [[func_bossgate]]
* [[trigger_changelevel]]
* [[trigger_once]]
* [[trigger_multiple]]
* [[trigger_onlyregistered]]
* [[trigger_secret]]
* [[trigger_teleport]]
* [[trigger_setskill]]
* [[trigger_relay]]
* [[trigger_monsterjump]]
* [[trigger_counter]]
* [[trigger_push]]
* [[trigger_hurt]]</text>
      <sha1>cdvrl28hc96bkved1wnyltvqlfkng1v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1901</id>
      <parentid>1897</parentid>
      <timestamp>2013-03-25T03:08:09Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>/* Entity Settings */  Added small summary and origin and angle</comment>
      <text xml:space="preserve" bytes="6423">'''Note from Spirit: Here is a good site to grab the info to fill these pages with: http://web.archive.org/web/20040607020324/http://www.annihilator.com/gameediting/quake/editing/editing_lvlentities.html'''

----

In [[Mapping|Quake map making]], an entity is any object defined in the [[map_file_format|.map file]] of a level, and can be divided into two types, point entities and solid entities.

A point entity is an entity that can be thought of as being at a specific point in the level, and its geometry (if any) is predefined. For example, a monster is a point entity. A level author might place many [[monster_ogre|ogres]] in their level, but each ogre will be the same shape and behave the same way because they are defined by the game already.

Solid entities, on the other hand, are entities which are made by the level author out of [[brush|brushes]] and can take any shape the author wishes. A [[func_door|door]], for example, is something that the level author needs to be able to make out of brushes in order to fit into different themes, different sized holes etc.

The static level geometry itself is also defined as a [[worldspawn]] entity, but it is a special entity that is treated differently by the [[Map_compiling|compilers]], and depending on the [[Mapping_tools#Level_Editors|level editor]] being used, its settings might be accessed from a different place to that of other entities. The worldspawn is always the first entity defined in a .map file.

==Entity Settings==
In order to change their behaviour, appearance etc. all entities have settings that can be modfied by the level author. The following section contains general information about these settings. For specific entity setting information, see [[Entity_guide#Entities|Entities]].

===Key/Value Pairs===
A key/value pair is the name given to a single entity parameter; The key is the name of the parameter and the value is what it is set to. For example, a [[func_door]] entity has a parameter that sets how fast it moves. The key is named &quot;speed&quot; and it's value can be set by the user to alter the speed of the door. For the purposes of this wiki, we will use the format (key : value) as notation for key/value pairs in text passages. (speed : 100) would mean the speed parameter of the door would be set to 100 [[unit|units]] per second.

Note that sometimes the naming of keys is not particularly intuitive, so some editors hide the real key name and show the user something more easily understood. The names used in the wiki are the actual key names used by Quake, and are correct.

===Origin and Angle===
Origin and angle are keys supported by every single entity with the exception of the [[worldspawn]], since it does not ever move and does not need them. Origin is used to define the position of an entity in the level, and angle is a value between 0 and 360 that sets its rotation. Both of these keys are usually hidden from direct editing by level editors; origin is almost always set only by moving the object around in the editor, and some editors (such as [[TrenchBroom]]) allow direct rotation of the entity to set the angle, wheras others (such as [[Worldcraft]]) have some kind of visual representation in their entity property editing tool.

===Spawnflags===
Spawnflags is the name given to a particular key that all entities support and is used to store multiple boolean parameters (flags) in a single key/value pair. The value of spawnflags is a number typically between 0 and 4096 and is calculated by adding the values given to each flag together. The value for any single flag is always a power of two. This is so that when loading a level, Quake can understand from the value of spawnflags which flags were set and which were not.

One of the uses of spawnflags is to tell Quake whether or not to spawn entities into the level on level load. These flags are listed below:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
Other flags are only valid when used with certain entities, but these four are universal and work with every entity.

Most [[Mapping_tools#Level_Editors|level editors]] have a simple visual representation of spawnflags with checkboxes for each flag, so that the user does not need to calculate its value manually.

==Entities==
* [[worldspawn]]
* [[info_player_start]]
* [[info_player_deathmatch]]
* [[info_player_coop]]
* [[info_player_start2]]
* [[info_teleport destination]]
* [[info_null]]
* [[info_notnull]]
* [[info_intermission]]
* [[item_cells]]
* [[item_rockets]]
* [[item_shells]]
* [[item_spikes]]
* [[item_health]]
* [[item_artifact_envirosuit]]
* [[item_artifact_super_damage]]
* [[item_artifact_invulnerability]]
* [[item_artifact_invisibility]]
* [[item_armorInv]]
* [[item_armor2]]
* [[item_armor1]]
* [[item_key1]]
* [[item_key2]]
* [[item_sigil]]
* [[weapon_supershotgun]]
* [[weapon_nailgun]]
* [[weapon_supernailgun]]
* [[weapon_grenadelauncher]]
* [[weapon_rocketlauncher]]
* [[weapon_lightning]]
* [[monster_army]]
* [[monster_dog]]
* [[monster_ogre]]
* [[monster_ogre_marksman]]
* [[monster_knight]]
* [[monster_hell_knight]]
* [[monster_wizard]]
* [[monster_demon1]]
* [[monster_shambler]]
* [[monster_boss]]
* [[monster_enforcer]]
* [[monster_shalrath]]
* [[monster_tarbaby]]
* [[monster_fish]]
* [[monster_oldone]]
* [[monster_zombie]]
* [[light]]
* [[light_fluoro]]
* [[light_fluorospark]]
* [[light_globe]]
* [[light_flame_large_yellow]]
* [[light_flame_small_yellow]]
* [[light_flame_small_white]]
* [[light_torch_small_walltorch]]
* [[air_bubbles]]
* [[event_lightning]]
* [[misc_fireball]]
* [[misc_explobox]]
* [[misc_explobox2]]
* [[trap_spikeshooter]]
* [[trap_shooter]]
* [[ambient_drip]]
* [[ambient_drone]]
* [[ambient_comp_hum]]
* [[ambient_flouro_buzz]]
* [[ambient_light_buzz]]
* [[ambient_suck_wind]]
* [[ambient_swamp1]]
* [[ambient_swamp2]]
* [[ambient_thunder]]
* [[func_door]]
* [[func_door_secret]]
* [[func_wall]]
* [[func_button]]
* [[func_train]]
* [[path_corner]]
* [[func_plat]]
* [[func_dm_only]]
* [[func_illusionary]]
* [[func_episodegate]]
* [[func_bossgate]]
* [[trigger_changelevel]]
* [[trigger_once]]
* [[trigger_multiple]]
* [[trigger_onlyregistered]]
* [[trigger_secret]]
* [[trigger_teleport]]
* [[trigger_setskill]]
* [[trigger_relay]]
* [[trigger_monsterjump]]
* [[trigger_counter]]
* [[trigger_push]]
* [[trigger_hurt]]</text>
      <sha1>rswpwl3lhzsebzxt2rxpvshyjpq7n2l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1909</id>
      <parentid>1901</parentid>
      <timestamp>2013-03-25T03:18:04Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <minor/>
      <comment>/* Origin and Angle */</comment>
      <text xml:space="preserve" bytes="6484">'''Note from Spirit: Here is a good site to grab the info to fill these pages with: http://web.archive.org/web/20040607020324/http://www.annihilator.com/gameediting/quake/editing/editing_lvlentities.html'''

----

In [[Mapping|Quake map making]], an entity is any object defined in the [[map_file_format|.map file]] of a level, and can be divided into two types, point entities and solid entities.

A point entity is an entity that can be thought of as being at a specific point in the level, and its geometry (if any) is predefined. For example, a monster is a point entity. A level author might place many [[monster_ogre|ogres]] in their level, but each ogre will be the same shape and behave the same way because they are defined by the game already.

Solid entities, on the other hand, are entities which are made by the level author out of [[brush|brushes]] and can take any shape the author wishes. A [[func_door|door]], for example, is something that the level author needs to be able to make out of brushes in order to fit into different themes, different sized holes etc.

The static level geometry itself is also defined as a [[worldspawn]] entity, but it is a special entity that is treated differently by the [[Map_compiling|compilers]], and depending on the [[Mapping_tools#Level_Editors|level editor]] being used, its settings might be accessed from a different place to that of other entities. The worldspawn is always the first entity defined in a .map file.

==Entity Settings==
In order to change their behaviour, appearance etc. all entities have settings that can be modfied by the level author. The following section contains general information about these settings. For specific entity setting information, see [[Entity_guide#Entities|Entities]].

===Key/Value Pairs===
A key/value pair is the name given to a single entity parameter; The key is the name of the parameter and the value is what it is set to. For example, a [[func_door]] entity has a parameter that sets how fast it moves. The key is named &quot;speed&quot; and it's value can be set by the user to alter the speed of the door. For the purposes of this wiki, we will use the format (key : value) as notation for key/value pairs in text passages. (speed : 100) would mean the speed parameter of the door would be set to 100 [[unit|units]] per second.

Note that sometimes the naming of keys is not particularly intuitive, so some editors hide the real key name and show the user something more easily understood. The names used in the wiki are the actual key names used by Quake, and are correct.

===Origin and Angle===
Origin and angle are keys supported by every single entity with the exception of the [[worldspawn]], since it does not ever move and does not need them. Origin is used to define the position of an entity in the level, and angle is a value between 0 and 360 that sets its rotation. Both of these keys are usually hidden from direct editing by level editors; origin is almost always set only by moving the object around in the editor, and some editors (such as [[TrenchBroom]]) allow direct rotation of the entity to set the angle, wheras others (such as [[Worldcraft]]) have some kind of visual representation in their entity property editing tool as well as the ability to manually set the angle numerically.

===Spawnflags===
Spawnflags is the name given to a particular key that all entities support and is used to store multiple boolean parameters (flags) in a single key/value pair. The value of spawnflags is a number typically between 0 and 4096 and is calculated by adding the values given to each flag together. The value for any single flag is always a power of two. This is so that when loading a level, Quake can understand from the value of spawnflags which flags were set and which were not.

One of the uses of spawnflags is to tell Quake whether or not to spawn entities into the level on level load. These flags are listed below:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
Other flags are only valid when used with certain entities, but these four are universal and work with every entity.

Most [[Mapping_tools#Level_Editors|level editors]] have a simple visual representation of spawnflags with checkboxes for each flag, so that the user does not need to calculate its value manually.

==Entities==
* [[worldspawn]]
* [[info_player_start]]
* [[info_player_deathmatch]]
* [[info_player_coop]]
* [[info_player_start2]]
* [[info_teleport destination]]
* [[info_null]]
* [[info_notnull]]
* [[info_intermission]]
* [[item_cells]]
* [[item_rockets]]
* [[item_shells]]
* [[item_spikes]]
* [[item_health]]
* [[item_artifact_envirosuit]]
* [[item_artifact_super_damage]]
* [[item_artifact_invulnerability]]
* [[item_artifact_invisibility]]
* [[item_armorInv]]
* [[item_armor2]]
* [[item_armor1]]
* [[item_key1]]
* [[item_key2]]
* [[item_sigil]]
* [[weapon_supershotgun]]
* [[weapon_nailgun]]
* [[weapon_supernailgun]]
* [[weapon_grenadelauncher]]
* [[weapon_rocketlauncher]]
* [[weapon_lightning]]
* [[monster_army]]
* [[monster_dog]]
* [[monster_ogre]]
* [[monster_ogre_marksman]]
* [[monster_knight]]
* [[monster_hell_knight]]
* [[monster_wizard]]
* [[monster_demon1]]
* [[monster_shambler]]
* [[monster_boss]]
* [[monster_enforcer]]
* [[monster_shalrath]]
* [[monster_tarbaby]]
* [[monster_fish]]
* [[monster_oldone]]
* [[monster_zombie]]
* [[light]]
* [[light_fluoro]]
* [[light_fluorospark]]
* [[light_globe]]
* [[light_flame_large_yellow]]
* [[light_flame_small_yellow]]
* [[light_flame_small_white]]
* [[light_torch_small_walltorch]]
* [[air_bubbles]]
* [[event_lightning]]
* [[misc_fireball]]
* [[misc_explobox]]
* [[misc_explobox2]]
* [[trap_spikeshooter]]
* [[trap_shooter]]
* [[ambient_drip]]
* [[ambient_drone]]
* [[ambient_comp_hum]]
* [[ambient_flouro_buzz]]
* [[ambient_light_buzz]]
* [[ambient_suck_wind]]
* [[ambient_swamp1]]
* [[ambient_swamp2]]
* [[ambient_thunder]]
* [[func_door]]
* [[func_door_secret]]
* [[func_wall]]
* [[func_button]]
* [[func_train]]
* [[path_corner]]
* [[func_plat]]
* [[func_dm_only]]
* [[func_illusionary]]
* [[func_episodegate]]
* [[func_bossgate]]
* [[trigger_changelevel]]
* [[trigger_once]]
* [[trigger_multiple]]
* [[trigger_onlyregistered]]
* [[trigger_secret]]
* [[trigger_teleport]]
* [[trigger_setskill]]
* [[trigger_relay]]
* [[trigger_monsterjump]]
* [[trigger_counter]]
* [[trigger_push]]
* [[trigger_hurt]]</text>
      <sha1>7tk1b6x3hb12mj3co66tp3qcvo5aedu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1936</id>
      <parentid>1909</parentid>
      <timestamp>2013-03-25T04:21:31Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>split off all the entity information (see Entity) I added earlier and cleaned up the page a little</comment>
      <text xml:space="preserve" bytes="2479">'''Note from Spirit: Here is a good site to grab the info to fill these pages with: http://web.archive.org/web/20040607020324/http://www.annihilator.com/gameediting/quake/editing/editing_lvlentities.html'''

----

This is a list of all the [[Entity|entities]] in standard ([[vanilla_quake|vanilla]]) Quake. For information on entities used in specific [[Modification|mods]], please see the relevant mod page.

==Entities==
* [[worldspawn]]
* [[info_player_start]]
* [[info_player_deathmatch]]
* [[info_player_coop]]
* [[info_player_start2]]
* [[info_teleport destination]]
* [[info_null]]
* [[info_notnull]]
* [[info_intermission]]
* [[item_cells]]
* [[item_rockets]]
* [[item_shells]]
* [[item_spikes]]
* [[item_health]]
* [[item_artifact_envirosuit]]
* [[item_artifact_super_damage]]
* [[item_artifact_invulnerability]]
* [[item_artifact_invisibility]]
* [[item_armorInv]]
* [[item_armor2]]
* [[item_armor1]]
* [[item_key1]]
* [[item_key2]]
* [[item_sigil]]
* [[weapon_supershotgun]]
* [[weapon_nailgun]]
* [[weapon_supernailgun]]
* [[weapon_grenadelauncher]]
* [[weapon_rocketlauncher]]
* [[weapon_lightning]]
* [[monster_army]]
* [[monster_dog]]
* [[monster_ogre]]
* [[monster_ogre_marksman]]
* [[monster_knight]]
* [[monster_hell_knight]]
* [[monster_wizard]]
* [[monster_demon1]]
* [[monster_shambler]]
* [[monster_boss]]
* [[monster_enforcer]]
* [[monster_shalrath]]
* [[monster_tarbaby]]
* [[monster_fish]]
* [[monster_oldone]]
* [[monster_zombie]]
* [[light]]
* [[light_fluoro]]
* [[light_fluorospark]]
* [[light_globe]]
* [[light_flame_large_yellow]]
* [[light_flame_small_yellow]]
* [[light_flame_small_white]]
* [[light_torch_small_walltorch]]
* [[air_bubbles]]
* [[event_lightning]]
* [[misc_fireball]]
* [[misc_explobox]]
* [[misc_explobox2]]
* [[trap_spikeshooter]]
* [[trap_shooter]]
* [[ambient_drip]]
* [[ambient_drone]]
* [[ambient_comp_hum]]
* [[ambient_flouro_buzz]]
* [[ambient_light_buzz]]
* [[ambient_suck_wind]]
* [[ambient_swamp1]]
* [[ambient_swamp2]]
* [[ambient_thunder]]
* [[func_door]]
* [[func_door_secret]]
* [[func_wall]]
* [[func_button]]
* [[func_train]]
* [[path_corner]]
* [[func_plat]]
* [[func_dm_only]]
* [[func_illusionary]]
* [[func_episodegate]]
* [[func_bossgate]]
* [[trigger_changelevel]]
* [[trigger_once]]
* [[trigger_multiple]]
* [[trigger_onlyregistered]]
* [[trigger_secret]]
* [[trigger_teleport]]
* [[trigger_setskill]]
* [[trigger_relay]]
* [[trigger_monsterjump]]
* [[trigger_counter]]
* [[trigger_push]]
* [[trigger_hurt]]</text>
      <sha1>eomrsq3272tw5fzaikoz7g4q4h3kvhg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1938</id>
      <parentid>1936</parentid>
      <timestamp>2013-03-25T04:32:46Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>changed link</comment>
      <text xml:space="preserve" bytes="2470">'''Note from Spirit: Here is a good site to grab the info to fill these pages with: http://web.archive.org/web/20040607020324/http://www.annihilator.com/gameediting/quake/editing/editing_lvlentities.html'''

----

This is a list of all the [[Entity|entities]] in standard ([[vanilla_quake|vanilla]]) Quake. For information on entities used in specific [[mod|mods]], please see the relevant mod page.

==Entities==
* [[worldspawn]]
* [[info_player_start]]
* [[info_player_deathmatch]]
* [[info_player_coop]]
* [[info_player_start2]]
* [[info_teleport destination]]
* [[info_null]]
* [[info_notnull]]
* [[info_intermission]]
* [[item_cells]]
* [[item_rockets]]
* [[item_shells]]
* [[item_spikes]]
* [[item_health]]
* [[item_artifact_envirosuit]]
* [[item_artifact_super_damage]]
* [[item_artifact_invulnerability]]
* [[item_artifact_invisibility]]
* [[item_armorInv]]
* [[item_armor2]]
* [[item_armor1]]
* [[item_key1]]
* [[item_key2]]
* [[item_sigil]]
* [[weapon_supershotgun]]
* [[weapon_nailgun]]
* [[weapon_supernailgun]]
* [[weapon_grenadelauncher]]
* [[weapon_rocketlauncher]]
* [[weapon_lightning]]
* [[monster_army]]
* [[monster_dog]]
* [[monster_ogre]]
* [[monster_ogre_marksman]]
* [[monster_knight]]
* [[monster_hell_knight]]
* [[monster_wizard]]
* [[monster_demon1]]
* [[monster_shambler]]
* [[monster_boss]]
* [[monster_enforcer]]
* [[monster_shalrath]]
* [[monster_tarbaby]]
* [[monster_fish]]
* [[monster_oldone]]
* [[monster_zombie]]
* [[light]]
* [[light_fluoro]]
* [[light_fluorospark]]
* [[light_globe]]
* [[light_flame_large_yellow]]
* [[light_flame_small_yellow]]
* [[light_flame_small_white]]
* [[light_torch_small_walltorch]]
* [[air_bubbles]]
* [[event_lightning]]
* [[misc_fireball]]
* [[misc_explobox]]
* [[misc_explobox2]]
* [[trap_spikeshooter]]
* [[trap_shooter]]
* [[ambient_drip]]
* [[ambient_drone]]
* [[ambient_comp_hum]]
* [[ambient_flouro_buzz]]
* [[ambient_light_buzz]]
* [[ambient_suck_wind]]
* [[ambient_swamp1]]
* [[ambient_swamp2]]
* [[ambient_thunder]]
* [[func_door]]
* [[func_door_secret]]
* [[func_wall]]
* [[func_button]]
* [[func_train]]
* [[path_corner]]
* [[func_plat]]
* [[func_dm_only]]
* [[func_illusionary]]
* [[func_episodegate]]
* [[func_bossgate]]
* [[trigger_changelevel]]
* [[trigger_once]]
* [[trigger_multiple]]
* [[trigger_onlyregistered]]
* [[trigger_secret]]
* [[trigger_teleport]]
* [[trigger_setskill]]
* [[trigger_relay]]
* [[trigger_monsterjump]]
* [[trigger_counter]]
* [[trigger_push]]
* [[trigger_hurt]]</text>
      <sha1>jh1pxafu2vp7prdhs45xgqhc8vhxnhj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1942</id>
      <parentid>1938</parentid>
      <timestamp>2013-03-25T04:41:10Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>fixed capitalisation of Entity Guide</comment>
      <text xml:space="preserve" bytes="2487">=Entity Guide=


'''Note from Spirit: Here is a good site to grab the info to fill these pages with: http://web.archive.org/web/20040607020324/http://www.annihilator.com/gameediting/quake/editing/editing_lvlentities.html'''

----

This is a list of all the [[Entity|entities]] in standard ([[vanilla_quake|vanilla]]) Quake. For information on entities used in specific [[mod|mods]], please see the relevant mod page.

==Entities==
* [[worldspawn]]
* [[info_player_start]]
* [[info_player_deathmatch]]
* [[info_player_coop]]
* [[info_player_start2]]
* [[info_teleport destination]]
* [[info_null]]
* [[info_notnull]]
* [[info_intermission]]
* [[item_cells]]
* [[item_rockets]]
* [[item_shells]]
* [[item_spikes]]
* [[item_health]]
* [[item_artifact_envirosuit]]
* [[item_artifact_super_damage]]
* [[item_artifact_invulnerability]]
* [[item_artifact_invisibility]]
* [[item_armorInv]]
* [[item_armor2]]
* [[item_armor1]]
* [[item_key1]]
* [[item_key2]]
* [[item_sigil]]
* [[weapon_supershotgun]]
* [[weapon_nailgun]]
* [[weapon_supernailgun]]
* [[weapon_grenadelauncher]]
* [[weapon_rocketlauncher]]
* [[weapon_lightning]]
* [[monster_army]]
* [[monster_dog]]
* [[monster_ogre]]
* [[monster_ogre_marksman]]
* [[monster_knight]]
* [[monster_hell_knight]]
* [[monster_wizard]]
* [[monster_demon1]]
* [[monster_shambler]]
* [[monster_boss]]
* [[monster_enforcer]]
* [[monster_shalrath]]
* [[monster_tarbaby]]
* [[monster_fish]]
* [[monster_oldone]]
* [[monster_zombie]]
* [[light]]
* [[light_fluoro]]
* [[light_fluorospark]]
* [[light_globe]]
* [[light_flame_large_yellow]]
* [[light_flame_small_yellow]]
* [[light_flame_small_white]]
* [[light_torch_small_walltorch]]
* [[air_bubbles]]
* [[event_lightning]]
* [[misc_fireball]]
* [[misc_explobox]]
* [[misc_explobox2]]
* [[trap_spikeshooter]]
* [[trap_shooter]]
* [[ambient_drip]]
* [[ambient_drone]]
* [[ambient_comp_hum]]
* [[ambient_flouro_buzz]]
* [[ambient_light_buzz]]
* [[ambient_suck_wind]]
* [[ambient_swamp1]]
* [[ambient_swamp2]]
* [[ambient_thunder]]
* [[func_door]]
* [[func_door_secret]]
* [[func_wall]]
* [[func_button]]
* [[func_train]]
* [[path_corner]]
* [[func_plat]]
* [[func_dm_only]]
* [[func_illusionary]]
* [[func_episodegate]]
* [[func_bossgate]]
* [[trigger_changelevel]]
* [[trigger_once]]
* [[trigger_multiple]]
* [[trigger_onlyregistered]]
* [[trigger_secret]]
* [[trigger_teleport]]
* [[trigger_setskill]]
* [[trigger_relay]]
* [[trigger_monsterjump]]
* [[trigger_counter]]
* [[trigger_push]]
* [[trigger_hurt]]</text>
      <sha1>9z0cm9s43kgribxmerdbghd6vam58gs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1943</id>
      <parentid>1942</parentid>
      <timestamp>2013-03-25T04:47:17Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>testing DISPLAYNAME</comment>
      <text xml:space="preserve" bytes="2502">{{DISPLAYTITLE:Entity Guide}}


'''Note from Spirit: Here is a good site to grab the info to fill these pages with: http://web.archive.org/web/20040607020324/http://www.annihilator.com/gameediting/quake/editing/editing_lvlentities.html'''

----

This is a list of all the [[Entity|entities]] in standard ([[vanilla_quake|vanilla]]) Quake. For information on entities used in specific [[mod|mods]], please see the relevant mod page.

==Entities==
* [[worldspawn]]
* [[info_player_start]]
* [[info_player_deathmatch]]
* [[info_player_coop]]
* [[info_player_start2]]
* [[info_teleport destination]]
* [[info_null]]
* [[info_notnull]]
* [[info_intermission]]
* [[item_cells]]
* [[item_rockets]]
* [[item_shells]]
* [[item_spikes]]
* [[item_health]]
* [[item_artifact_envirosuit]]
* [[item_artifact_super_damage]]
* [[item_artifact_invulnerability]]
* [[item_artifact_invisibility]]
* [[item_armorInv]]
* [[item_armor2]]
* [[item_armor1]]
* [[item_key1]]
* [[item_key2]]
* [[item_sigil]]
* [[weapon_supershotgun]]
* [[weapon_nailgun]]
* [[weapon_supernailgun]]
* [[weapon_grenadelauncher]]
* [[weapon_rocketlauncher]]
* [[weapon_lightning]]
* [[monster_army]]
* [[monster_dog]]
* [[monster_ogre]]
* [[monster_ogre_marksman]]
* [[monster_knight]]
* [[monster_hell_knight]]
* [[monster_wizard]]
* [[monster_demon1]]
* [[monster_shambler]]
* [[monster_boss]]
* [[monster_enforcer]]
* [[monster_shalrath]]
* [[monster_tarbaby]]
* [[monster_fish]]
* [[monster_oldone]]
* [[monster_zombie]]
* [[light]]
* [[light_fluoro]]
* [[light_fluorospark]]
* [[light_globe]]
* [[light_flame_large_yellow]]
* [[light_flame_small_yellow]]
* [[light_flame_small_white]]
* [[light_torch_small_walltorch]]
* [[air_bubbles]]
* [[event_lightning]]
* [[misc_fireball]]
* [[misc_explobox]]
* [[misc_explobox2]]
* [[trap_spikeshooter]]
* [[trap_shooter]]
* [[ambient_drip]]
* [[ambient_drone]]
* [[ambient_comp_hum]]
* [[ambient_flouro_buzz]]
* [[ambient_light_buzz]]
* [[ambient_suck_wind]]
* [[ambient_swamp1]]
* [[ambient_swamp2]]
* [[ambient_thunder]]
* [[func_door]]
* [[func_door_secret]]
* [[func_wall]]
* [[func_button]]
* [[func_train]]
* [[path_corner]]
* [[func_plat]]
* [[func_dm_only]]
* [[func_illusionary]]
* [[func_episodegate]]
* [[func_bossgate]]
* [[trigger_changelevel]]
* [[trigger_once]]
* [[trigger_multiple]]
* [[trigger_onlyregistered]]
* [[trigger_secret]]
* [[trigger_teleport]]
* [[trigger_setskill]]
* [[trigger_relay]]
* [[trigger_monsterjump]]
* [[trigger_counter]]
* [[trigger_push]]
* [[trigger_hurt]]</text>
      <sha1>9qsseufsm0smu9ys76dpyh58mza0eo7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2068</id>
      <parentid>1943</parentid>
      <timestamp>2013-03-25T13:21:27Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <text xml:space="preserve" bytes="2682">{{DISPLAYTITLE:Entity Guide}}


'''Note from the old wiki: Here is a good site to grab the info to fill these pages with: http://web.archive.org/web/20040607020324/http://www.annihilator.com/gameediting/quake/editing/editing_lvlentities.html'''
* I did not say this, above link and test is from the original wiki. Do NOT copy and paste from non-free licensed sources. [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]])

----

This is a list of all the [[Entity|entities]] in standard ([[vanilla_quake|vanilla]]) Quake. For information on entities used in specific [[mod|mods]], please see the relevant mod page.

==Entities==
* [[worldspawn]]
* [[info_player_start]]
* [[info_player_deathmatch]]
* [[info_player_coop]]
* [[info_player_start2]]
* [[info_teleport destination]]
* [[info_null]]
* [[info_notnull]]
* [[info_intermission]]
* [[item_cells]]
* [[item_rockets]]
* [[item_shells]]
* [[item_spikes]]
* [[item_health]]
* [[item_artifact_envirosuit]]
* [[item_artifact_super_damage]]
* [[item_artifact_invulnerability]]
* [[item_artifact_invisibility]]
* [[item_armorInv]]
* [[item_armor2]]
* [[item_armor1]]
* [[item_key1]]
* [[item_key2]]
* [[item_sigil]]
* [[weapon_supershotgun]]
* [[weapon_nailgun]]
* [[weapon_supernailgun]]
* [[weapon_grenadelauncher]]
* [[weapon_rocketlauncher]]
* [[weapon_lightning]]
* [[monster_army]]
* [[monster_dog]]
* [[monster_ogre]]
* [[monster_ogre_marksman]]
* [[monster_knight]]
* [[monster_hell_knight]]
* [[monster_wizard]]
* [[monster_demon1]]
* [[monster_shambler]]
* [[monster_boss]]
* [[monster_enforcer]]
* [[monster_shalrath]]
* [[monster_tarbaby]]
* [[monster_fish]]
* [[monster_oldone]]
* [[monster_zombie]]
* [[light]]
* [[light_fluoro]]
* [[light_fluorospark]]
* [[light_globe]]
* [[light_flame_large_yellow]]
* [[light_flame_small_yellow]]
* [[light_flame_small_white]]
* [[light_torch_small_walltorch]]
* [[air_bubbles]]
* [[event_lightning]]
* [[misc_fireball]]
* [[misc_explobox]]
* [[misc_explobox2]]
* [[trap_spikeshooter]]
* [[trap_shooter]]
* [[ambient_drip]]
* [[ambient_drone]]
* [[ambient_comp_hum]]
* [[ambient_flouro_buzz]]
* [[ambient_light_buzz]]
* [[ambient_suck_wind]]
* [[ambient_swamp1]]
* [[ambient_swamp2]]
* [[ambient_thunder]]
* [[func_door]]
* [[func_door_secret]]
* [[func_wall]]
* [[func_button]]
* [[func_train]]
* [[path_corner]]
* [[func_plat]]
* [[func_dm_only]]
* [[func_illusionary]]
* [[func_episodegate]]
* [[func_bossgate]]
* [[trigger_changelevel]]
* [[trigger_once]]
* [[trigger_multiple]]
* [[trigger_onlyregistered]]
* [[trigger_secret]]
* [[trigger_teleport]]
* [[trigger_setskill]]
* [[trigger_relay]]
* [[trigger_monsterjump]]
* [[trigger_counter]]
* [[trigger_push]]
* [[trigger_hurt]]</text>
      <sha1>28kqp1isq6xuli0wo0etigpb46hx36o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2438</id>
      <parentid>2068</parentid>
      <timestamp>2013-03-28T20:43:46Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>project note</comment>
      <text xml:space="preserve" bytes="3020">{{DISPLAYTITLE:Entity Guide}}
{| style=&quot;border-top:1px solid #FF0000; border-right:1px solid red; border-bottom:2px solid red; border-left:1px solid red; background:yellow;&quot;
|The Entity Guide is currently the focus of a Quake Wiki project. See more information (including style guidelines) on the [[Quake Wiki:Entity documentation project|Entity Doc Project page]].
|}

'''Note from the old wiki: Here is a good site to grab the info to fill these pages with: http://web.archive.org/web/20040607020324/http://www.annihilator.com/gameediting/quake/editing/editing_lvlentities.html'''
* I did not say this, above link and test is from the original wiki. Do NOT copy and paste from non-free licensed sources. [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]])

----

This is a list of all the [[Entity|entities]] in standard ([[vanilla_quake|vanilla]]) Quake. For information on entities used in specific [[mod|mods]], please see the relevant mod page.

==Entities==
* [[worldspawn]]
* [[info_player_start]]
* [[info_player_deathmatch]]
* [[info_player_coop]]
* [[info_player_start2]]
* [[info_teleport destination]]
* [[info_null]]
* [[info_notnull]]
* [[info_intermission]]
* [[item_cells]]
* [[item_rockets]]
* [[item_shells]]
* [[item_spikes]]
* [[item_health]]
* [[item_artifact_envirosuit]]
* [[item_artifact_super_damage]]
* [[item_artifact_invulnerability]]
* [[item_artifact_invisibility]]
* [[item_armorInv]]
* [[item_armor2]]
* [[item_armor1]]
* [[item_key1]]
* [[item_key2]]
* [[item_sigil]]
* [[weapon_supershotgun]]
* [[weapon_nailgun]]
* [[weapon_supernailgun]]
* [[weapon_grenadelauncher]]
* [[weapon_rocketlauncher]]
* [[weapon_lightning]]
* [[monster_army]]
* [[monster_dog]]
* [[monster_ogre]]
* [[monster_ogre_marksman]]
* [[monster_knight]]
* [[monster_hell_knight]]
* [[monster_wizard]]
* [[monster_demon1]]
* [[monster_shambler]]
* [[monster_boss]]
* [[monster_enforcer]]
* [[monster_shalrath]]
* [[monster_tarbaby]]
* [[monster_fish]]
* [[monster_oldone]]
* [[monster_zombie]]
* [[light]]
* [[light_fluoro]]
* [[light_fluorospark]]
* [[light_globe]]
* [[light_flame_large_yellow]]
* [[light_flame_small_yellow]]
* [[light_flame_small_white]]
* [[light_torch_small_walltorch]]
* [[air_bubbles]]
* [[event_lightning]]
* [[misc_fireball]]
* [[misc_explobox]]
* [[misc_explobox2]]
* [[trap_spikeshooter]]
* [[trap_shooter]]
* [[ambient_drip]]
* [[ambient_drone]]
* [[ambient_comp_hum]]
* [[ambient_flouro_buzz]]
* [[ambient_light_buzz]]
* [[ambient_suck_wind]]
* [[ambient_swamp1]]
* [[ambient_swamp2]]
* [[ambient_thunder]]
* [[func_door]]
* [[func_door_secret]]
* [[func_wall]]
* [[func_button]]
* [[func_train]]
* [[path_corner]]
* [[func_plat]]
* [[func_dm_only]]
* [[func_illusionary]]
* [[func_episodegate]]
* [[func_bossgate]]
* [[trigger_changelevel]]
* [[trigger_once]]
* [[trigger_multiple]]
* [[trigger_onlyregistered]]
* [[trigger_secret]]
* [[trigger_teleport]]
* [[trigger_setskill]]
* [[trigger_relay]]
* [[trigger_monsterjump]]
* [[trigger_counter]]
* [[trigger_push]]
* [[trigger_hurt]]</text>
      <sha1>k5yxt2av4xun2q2nw1egat34n6gf9jw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2671</id>
      <parentid>2438</parentid>
      <timestamp>2013-03-29T15:51:13Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <minor/>
      <comment>/* Entities */ misc_noisemaker and viewthing added, func_dm_only removed</comment>
      <text xml:space="preserve" bytes="3039">{{DISPLAYTITLE:Entity Guide}}
{| style=&quot;border-top:1px solid #FF0000; border-right:1px solid red; border-bottom:2px solid red; border-left:1px solid red; background:yellow;&quot;
|The Entity Guide is currently the focus of a Quake Wiki project. See more information (including style guidelines) on the [[Quake Wiki:Entity documentation project|Entity Doc Project page]].
|}

'''Note from the old wiki: Here is a good site to grab the info to fill these pages with: http://web.archive.org/web/20040607020324/http://www.annihilator.com/gameediting/quake/editing/editing_lvlentities.html'''
* I did not say this, above link and test is from the original wiki. Do NOT copy and paste from non-free licensed sources. [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]])

----

This is a list of all the [[Entity|entities]] in standard ([[vanilla_quake|vanilla]]) Quake. For information on entities used in specific [[mod|mods]], please see the relevant mod page.

==Entities==
* [[worldspawn]]
* [[info_player_start]]
* [[info_player_deathmatch]]
* [[info_player_coop]]
* [[info_player_start2]]
* [[info_teleport destination]]
* [[info_null]]
* [[info_notnull]]
* [[info_intermission]]
* [[item_cells]]
* [[item_rockets]]
* [[item_shells]]
* [[item_spikes]]
* [[item_health]]
* [[item_artifact_envirosuit]]
* [[item_artifact_super_damage]]
* [[item_artifact_invulnerability]]
* [[item_artifact_invisibility]]
* [[item_armorInv]]
* [[item_armor2]]
* [[item_armor1]]
* [[item_key1]]
* [[item_key2]]
* [[item_sigil]]
* [[weapon_supershotgun]]
* [[weapon_nailgun]]
* [[weapon_supernailgun]]
* [[weapon_grenadelauncher]]
* [[weapon_rocketlauncher]]
* [[weapon_lightning]]
* [[monster_army]]
* [[monster_dog]]
* [[monster_ogre]]
* [[monster_ogre_marksman]]
* [[monster_knight]]
* [[monster_hell_knight]]
* [[monster_wizard]]
* [[monster_demon1]]
* [[monster_shambler]]
* [[monster_boss]]
* [[monster_enforcer]]
* [[monster_shalrath]]
* [[monster_tarbaby]]
* [[monster_fish]]
* [[monster_oldone]]
* [[monster_zombie]]
* [[light]]
* [[light_fluoro]]
* [[light_fluorospark]]
* [[light_globe]]
* [[light_flame_large_yellow]]
* [[light_flame_small_yellow]]
* [[light_flame_small_white]]
* [[light_torch_small_walltorch]]
* [[air_bubbles]]
* [[event_lightning]]
* [[misc_fireball]]
* [[misc_explobox]]
* [[misc_explobox2]]
* [[misc_noisemaker]]
* [[trap_spikeshooter]]
* [[trap_shooter]]
* [[ambient_drip]]
* [[ambient_drone]]
* [[ambient_comp_hum]]
* [[ambient_flouro_buzz]]
* [[ambient_light_buzz]]
* [[ambient_suck_wind]]
* [[ambient_swamp1]]
* [[ambient_swamp2]]
* [[ambient_thunder]]
* [[func_door]]
* [[func_door_secret]]
* [[func_wall]]
* [[func_button]]
* [[func_train]]
* [[path_corner]]
* [[func_plat]]
* [[func_illusionary]]
* [[func_episodegate]]
* [[func_bossgate]]
* [[trigger_changelevel]]
* [[trigger_once]]
* [[trigger_multiple]]
* [[trigger_onlyregistered]]
* [[trigger_secret]]
* [[trigger_teleport]]
* [[trigger_setskill]]
* [[trigger_relay]]
* [[trigger_monsterjump]]
* [[trigger_counter]]
* [[trigger_push]]
* [[trigger_hurt]]
* [[viewthing]]</text>
      <sha1>hl86wtlpzjzxqztpe90vgzcdxqt7yc0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2898</id>
      <parentid>2671</parentid>
      <timestamp>2013-04-09T10:03:54Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>/* Entities */  fixed spawn link to avoid disambig page</comment>
      <text xml:space="preserve" bytes="3048">{{DISPLAYTITLE:Entity Guide}}
{| style=&quot;border-top:1px solid #FF0000; border-right:1px solid red; border-bottom:2px solid red; border-left:1px solid red; background:yellow;&quot;
|The Entity Guide is currently the focus of a Quake Wiki project. See more information (including style guidelines) on the [[Quake Wiki:Entity documentation project|Entity Doc Project page]].
|}

'''Note from the old wiki: Here is a good site to grab the info to fill these pages with: http://web.archive.org/web/20040607020324/http://www.annihilator.com/gameediting/quake/editing/editing_lvlentities.html'''
* I did not say this, above link and test is from the original wiki. Do NOT copy and paste from non-free licensed sources. [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]])

----

This is a list of all the [[Entity|entities]] in standard ([[vanilla_quake|vanilla]]) Quake. For information on entities used in specific [[mod|mods]], please see the relevant mod page.

==Entities==
* [[worldspawn]]
* [[info_player_start]]
* [[info_player_deathmatch]]
* [[info_player_coop]]
* [[info_player_start2]]
* [[info_teleport destination]]
* [[info_null]]
* [[info_notnull]]
* [[info_intermission]]
* [[item_cells]]
* [[item_rockets]]
* [[item_shells]]
* [[item_spikes]]
* [[item_health]]
* [[item_artifact_envirosuit]]
* [[item_artifact_super_damage]]
* [[item_artifact_invulnerability]]
* [[item_artifact_invisibility]]
* [[item_armorInv]]
* [[item_armor2]]
* [[item_armor1]]
* [[item_key1]]
* [[item_key2]]
* [[item_sigil]]
* [[weapon_supershotgun]]
* [[weapon_nailgun]]
* [[weapon_supernailgun]]
* [[weapon_grenadelauncher]]
* [[weapon_rocketlauncher]]
* [[weapon_lightning]]
* [[monster_army]]
* [[monster_dog]]
* [[monster_ogre]]
* [[monster_ogre_marksman]]
* [[monster_knight]]
* [[monster_hell_knight]]
* [[monster_wizard]]
* [[monster_demon1]]
* [[monster_shambler]]
* [[monster_boss]]
* [[monster_enforcer]]
* [[monster_shalrath]]
* [[Spawn#Entity_information]]
* [[monster_fish]]
* [[monster_oldone]]
* [[monster_zombie]]
* [[light]]
* [[light_fluoro]]
* [[light_fluorospark]]
* [[light_globe]]
* [[light_flame_large_yellow]]
* [[light_flame_small_yellow]]
* [[light_flame_small_white]]
* [[light_torch_small_walltorch]]
* [[air_bubbles]]
* [[event_lightning]]
* [[misc_fireball]]
* [[misc_explobox]]
* [[misc_explobox2]]
* [[misc_noisemaker]]
* [[trap_spikeshooter]]
* [[trap_shooter]]
* [[ambient_drip]]
* [[ambient_drone]]
* [[ambient_comp_hum]]
* [[ambient_flouro_buzz]]
* [[ambient_light_buzz]]
* [[ambient_suck_wind]]
* [[ambient_swamp1]]
* [[ambient_swamp2]]
* [[ambient_thunder]]
* [[func_door]]
* [[func_door_secret]]
* [[func_wall]]
* [[func_button]]
* [[func_train]]
* [[path_corner]]
* [[func_plat]]
* [[func_illusionary]]
* [[func_episodegate]]
* [[func_bossgate]]
* [[trigger_changelevel]]
* [[trigger_once]]
* [[trigger_multiple]]
* [[trigger_onlyregistered]]
* [[trigger_secret]]
* [[trigger_teleport]]
* [[trigger_setskill]]
* [[trigger_relay]]
* [[trigger_monsterjump]]
* [[trigger_counter]]
* [[trigger_push]]
* [[trigger_hurt]]
* [[viewthing]]</text>
      <sha1>po4wfes28ao26d5vsp8bor1t2ig7j3d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2899</id>
      <parentid>2898</parentid>
      <timestamp>2013-04-09T10:04:32Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>/* Entities */ fixed link text for monster_tarbaby</comment>
      <text xml:space="preserve" bytes="3064">{{DISPLAYTITLE:Entity Guide}}
{| style=&quot;border-top:1px solid #FF0000; border-right:1px solid red; border-bottom:2px solid red; border-left:1px solid red; background:yellow;&quot;
|The Entity Guide is currently the focus of a Quake Wiki project. See more information (including style guidelines) on the [[Quake Wiki:Entity documentation project|Entity Doc Project page]].
|}

'''Note from the old wiki: Here is a good site to grab the info to fill these pages with: http://web.archive.org/web/20040607020324/http://www.annihilator.com/gameediting/quake/editing/editing_lvlentities.html'''
* I did not say this, above link and test is from the original wiki. Do NOT copy and paste from non-free licensed sources. [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]])

----

This is a list of all the [[Entity|entities]] in standard ([[vanilla_quake|vanilla]]) Quake. For information on entities used in specific [[mod|mods]], please see the relevant mod page.

==Entities==
* [[worldspawn]]
* [[info_player_start]]
* [[info_player_deathmatch]]
* [[info_player_coop]]
* [[info_player_start2]]
* [[info_teleport destination]]
* [[info_null]]
* [[info_notnull]]
* [[info_intermission]]
* [[item_cells]]
* [[item_rockets]]
* [[item_shells]]
* [[item_spikes]]
* [[item_health]]
* [[item_artifact_envirosuit]]
* [[item_artifact_super_damage]]
* [[item_artifact_invulnerability]]
* [[item_artifact_invisibility]]
* [[item_armorInv]]
* [[item_armor2]]
* [[item_armor1]]
* [[item_key1]]
* [[item_key2]]
* [[item_sigil]]
* [[weapon_supershotgun]]
* [[weapon_nailgun]]
* [[weapon_supernailgun]]
* [[weapon_grenadelauncher]]
* [[weapon_rocketlauncher]]
* [[weapon_lightning]]
* [[monster_army]]
* [[monster_dog]]
* [[monster_ogre]]
* [[monster_ogre_marksman]]
* [[monster_knight]]
* [[monster_hell_knight]]
* [[monster_wizard]]
* [[monster_demon1]]
* [[monster_shambler]]
* [[monster_boss]]
* [[monster_enforcer]]
* [[monster_shalrath]]
* [[Spawn#Entity_information|monster_tarbaby]]
* [[monster_fish]]
* [[monster_oldone]]
* [[monster_zombie]]
* [[light]]
* [[light_fluoro]]
* [[light_fluorospark]]
* [[light_globe]]
* [[light_flame_large_yellow]]
* [[light_flame_small_yellow]]
* [[light_flame_small_white]]
* [[light_torch_small_walltorch]]
* [[air_bubbles]]
* [[event_lightning]]
* [[misc_fireball]]
* [[misc_explobox]]
* [[misc_explobox2]]
* [[misc_noisemaker]]
* [[trap_spikeshooter]]
* [[trap_shooter]]
* [[ambient_drip]]
* [[ambient_drone]]
* [[ambient_comp_hum]]
* [[ambient_flouro_buzz]]
* [[ambient_light_buzz]]
* [[ambient_suck_wind]]
* [[ambient_swamp1]]
* [[ambient_swamp2]]
* [[ambient_thunder]]
* [[func_door]]
* [[func_door_secret]]
* [[func_wall]]
* [[func_button]]
* [[func_train]]
* [[path_corner]]
* [[func_plat]]
* [[func_illusionary]]
* [[func_episodegate]]
* [[func_bossgate]]
* [[trigger_changelevel]]
* [[trigger_once]]
* [[trigger_multiple]]
* [[trigger_onlyregistered]]
* [[trigger_secret]]
* [[trigger_teleport]]
* [[trigger_setskill]]
* [[trigger_relay]]
* [[trigger_monsterjump]]
* [[trigger_counter]]
* [[trigger_push]]
* [[trigger_hurt]]
* [[viewthing]]</text>
      <sha1>f1dkib368aspdbc1azcn0i5mwaa93s3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2900</id>
      <parentid>2899</parentid>
      <timestamp>2013-04-09T11:50:23Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>/* Entities */  headings per type</comment>
      <text xml:space="preserve" bytes="3311">{{DISPLAYTITLE:Entity Guide}}
{| style=&quot;border-top:1px solid #FF0000; border-right:1px solid red; border-bottom:2px solid red; border-left:1px solid red; background:yellow;&quot;
|The Entity Guide is currently the focus of a Quake Wiki project. See more information (including style guidelines) on the [[Quake Wiki:Entity documentation project|Entity Doc Project page]].
|}

'''Note from the old wiki: Here is a good site to grab the info to fill these pages with: http://web.archive.org/web/20040607020324/http://www.annihilator.com/gameediting/quake/editing/editing_lvlentities.html'''
* I did not say this, above link and test is from the original wiki. Do NOT copy and paste from non-free licensed sources. [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]])

----

This is a list of all the [[Entity|entities]] in standard ([[vanilla_quake|vanilla]]) Quake. For information on entities used in specific [[mod|mods]], please see the relevant mod page.

==Entities==
* '''Worldspawn'''
** [[worldspawn]]
* '''Info'''
** [[info_player_start]]
** [[info_player_start2]]
** [[info_player_deathmatch]]
** [[info_player_coop]]
** [[info_teleport_destination]]
** [[info_intermission]]
** [[info_notnull]]
** [[info_null]]
* '''Items'''
** [[item_cells]]
** [[item_rockets]]
** [[item_shells]]
** [[item_spikes]]
** [[item_health]]
** [[item_artifact_envirosuit]]
** [[item_artifact_super_damage]]
** [[item_artifact_invulnerability]]
** [[item_artifact_invisibility]]
** [[item_armorInv]]
** [[item_armor2]]
** [[item_armor1]]
** [[item_key1]]
** [[item_key2]]
** [[item_sigil]]
* '''Weapons'''
** [[weapon_supershotgun]]
** [[weapon_nailgun]]
** [[weapon_supernailgun]]
** [[weapon_grenadelauncher]]
** [[weapon_rocketlauncher]]
** [[weapon_lightning]]
* '''Monsters'''
** [[monster_army]]
** [[monster_dog]]
** [[monster_ogre]]
** [[monster_ogre_marksman]]
** [[monster_knight]]
** [[monster_hell_knight]]
** [[monster_wizard]]
** [[monster_demon1]]
** [[monster_shambler]]
** [[monster_boss]]
** [[monster_enforcer]]
** [[monster_shalrath]]
** [[Spawn#Entity_information|monster_tarbaby]]
** [[monster_fish]]
** [[monster_oldone]]
** [[monster_zombie]]
* '''Lights'''
** [[light]]
** [[light_fluoro]]
** [[light_fluorospark]]
** [[light_globe]]
** [[light_flame_large_yellow]]
** [[light_flame_small_yellow]]
** [[light_flame_small_white]]
** [[light_torch_small_walltorch]]
* '''Sounds'''
** [[ambient_drip]]
** [[ambient_drone]]
** [[ambient_comp_hum]]
** [[ambient_flouro_buzz]]
** [[ambient_light_buzz]]
** [[ambient_suck_wind]]
** [[ambient_swamp1]]
** [[ambient_swamp2]]
** [[ambient_thunder]]
* '''Funcs'''
** [[func_door]]
** [[func_door_secret]]
** [[func_wall]]
** [[func_button]]
** [[func_train]]
** [[func_plat]]
** [[func_illusionary]]
** [[func_episodegate]]
** [[func_bossgate]]
* '''Misc'''
** [[path_corner]]
** [[misc_fireball]]
** [[misc_explobox]]
** [[misc_explobox2]]
** [[misc_noisemaker]]
** [[trap_spikeshooter]]
** [[trap_shooter]]
** [[event_lightning]]
** [[air_bubbles]]
** [[viewthing]]
* '''Triggers'''
** [[trigger_changelevel]]
** [[trigger_once]]
** [[trigger_multiple]]
** [[trigger_onlyregistered]]
** [[trigger_secret]]
** [[trigger_teleport]]
** [[trigger_setskill]]
** [[trigger_relay]]
** [[trigger_monsterjump]]
** [[trigger_counter]]
** [[trigger_push]]
** [[trigger_hurt]]</text>
      <sha1>eusx4jbo8kj0zopwicbw37ks911gcg6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2901</id>
      <parentid>2900</parentid>
      <timestamp>2013-04-09T11:52:33Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>/* Entities */  tweaked formatting</comment>
      <text xml:space="preserve" bytes="3197">{{DISPLAYTITLE:Entity Guide}}
{| style=&quot;border-top:1px solid #FF0000; border-right:1px solid red; border-bottom:2px solid red; border-left:1px solid red; background:yellow;&quot;
|The Entity Guide is currently the focus of a Quake Wiki project. See more information (including style guidelines) on the [[Quake Wiki:Entity documentation project|Entity Doc Project page]].
|}

'''Note from the old wiki: Here is a good site to grab the info to fill these pages with: http://web.archive.org/web/20040607020324/http://www.annihilator.com/gameediting/quake/editing/editing_lvlentities.html'''
* I did not say this, above link and test is from the original wiki. Do NOT copy and paste from non-free licensed sources. [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]])

----

This is a list of all the [[Entity|entities]] in standard ([[vanilla_quake|vanilla]]) Quake. For information on entities used in specific [[mod|mods]], please see the relevant mod page.

==Entities==
'''Worldspawn'''
* [[worldspawn]]
'''Info'''
* [[info_player_start]]
* [[info_player_start2]]
* [[info_player_deathmatch]]
* [[info_player_coop]]
* [[info_teleport_destination]]
* [[info_intermission]]
* [[info_notnull]]
* [[info_null]]
'''Items'''
* [[item_cells]]
* [[item_rockets]]
* [[item_shells]]
* [[item_spikes]]
* [[item_health]]
* [[item_artifact_envirosuit]]
* [[item_artifact_super_damage]]
* [[item_artifact_invulnerability]]
* [[item_artifact_invisibility]]
* [[item_armorInv]]
* [[item_armor2]]
* [[item_armor1]]
* [[item_key1]]
* [[item_key2]]
* [[item_sigil]]
'''Weapons'''
* [[weapon_supershotgun]]
* [[weapon_nailgun]]
* [[weapon_supernailgun]]
* [[weapon_grenadelauncher]]
* [[weapon_rocketlauncher]]
* [[weapon_lightning]]
'''Monsters'''
* [[monster_army]]
* [[monster_dog]]
* [[monster_ogre]]
* [[monster_ogre_marksman]]
* [[monster_knight]]
* [[monster_hell_knight]]
* [[monster_wizard]]
* [[monster_demon1]]
* [[monster_shambler]]
* [[monster_boss]]
* [[monster_enforcer]]
* [[monster_shalrath]]
* [[Spawn#Entity_information|monster_tarbaby]]
* [[monster_fish]]
* [[monster_oldone]]
* [[monster_zombie]]
'''Lights'''
* [[light]]
* [[light_fluoro]]
* [[light_fluorospark]]
* [[light_globe]]
* [[light_flame_large_yellow]]
* [[light_flame_small_yellow]]
* [[light_flame_small_white]]
* [[light_torch_small_walltorch]]
'''Sounds'''
* [[ambient_drip]]
* [[ambient_drone]]
* [[ambient_comp_hum]]
* [[ambient_flouro_buzz]]
* [[ambient_light_buzz]]
* [[ambient_suck_wind]]
* [[ambient_swamp1]]
* [[ambient_swamp2]]
* [[ambient_thunder]]
'''Funcs'''
* [[func_door]]
* [[func_door_secret]]
* [[func_wall]]
* [[func_button]]
* [[func_train]]
* [[func_plat]]
* [[func_illusionary]]
* [[func_episodegate]]
* [[func_bossgate]]
'''Misc'''
* [[path_corner]]
* [[misc_fireball]]
* [[misc_explobox]]
* [[misc_explobox2]]
* [[misc_noisemaker]]
* [[trap_spikeshooter]]
* [[trap_shooter]]
* [[event_lightning]]
* [[air_bubbles]]
* [[viewthing]]
'''Triggers'''
* [[trigger_changelevel]]
* [[trigger_once]]
* [[trigger_multiple]]
* [[trigger_onlyregistered]]
* [[trigger_secret]]
* [[trigger_teleport]]
* [[trigger_setskill]]
* [[trigger_relay]]
* [[trigger_monsterjump]]
* [[trigger_counter]]
* [[trigger_push]]
* [[trigger_hurt]]</text>
      <sha1>94hlvwgp4tglafsf6bntf1335xmk2yh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2987</id>
      <parentid>2901</parentid>
      <timestamp>2013-06-16T05:42:22Z</timestamp>
      <contributor>
        <username>Deqer</username>
        <id>42</id>
      </contributor>
      <minor/>
      <comment>Added note about entity placement and spacing around the entity for collision/stuck.</comment>
      <text xml:space="preserve" bytes="3662">{{DISPLAYTITLE:Entity Guide}}
{| style=&quot;border-top:1px solid #FF0000; border-right:1px solid red; border-bottom:2px solid red; border-left:1px solid red; background:yellow;&quot;
|The Entity Guide is currently the focus of a Quake Wiki project. See more information (including style guidelines) on the [[Quake Wiki:Entity documentation project|Entity Doc Project page]].
|}

'''Note from the old wiki: Here is a good site to grab the info to fill these pages with: http://web.archive.org/web/20040607020324/http://www.annihilator.com/gameediting/quake/editing/editing_lvlentities.html'''
* I did not say this, above link and test is from the original wiki. Do NOT copy and paste from non-free licensed sources. [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]])

----

This is a list of all the [[Entity|entities]] in standard ([[vanilla_quake|vanilla]]) Quake. For information on entities used in specific [[mod|mods]], please see the relevant mod page.

'''NOTE:''' When placing entities in your map, remember to account for 1 unit spacing around the entity; because the engine checks for collision in a &gt;= way (as opposed to &gt;). E.g. Monsters have to be at least 1 unit away from walls to avoid getting stuck and have to be on platforms at least 2 units wider to avoid falling off.  Also, narrow pathways will be very difficult for monsters to move into because the checks (for movement) are done in discreet steps. 

==Entities==
'''Worldspawn'''
* [[worldspawn]]
'''Info'''
* [[info_player_start]]
* [[info_player_start2]]
* [[info_player_deathmatch]]
* [[info_player_coop]]
* [[info_teleport_destination]]
* [[info_intermission]]
* [[info_notnull]]
* [[info_null]]
'''Items'''
* [[item_cells]]
* [[item_rockets]]
* [[item_shells]]
* [[item_spikes]]
* [[item_health]]
* [[item_artifact_envirosuit]]
* [[item_artifact_super_damage]]
* [[item_artifact_invulnerability]]
* [[item_artifact_invisibility]]
* [[item_armorInv]]
* [[item_armor2]]
* [[item_armor1]]
* [[item_key1]]
* [[item_key2]]
* [[item_sigil]]
'''Weapons'''
* [[weapon_supershotgun]]
* [[weapon_nailgun]]
* [[weapon_supernailgun]]
* [[weapon_grenadelauncher]]
* [[weapon_rocketlauncher]]
* [[weapon_lightning]]
'''Monsters'''
* [[monster_army]]
* [[monster_dog]]
* [[monster_ogre]]
* [[monster_ogre_marksman]]
* [[monster_knight]]
* [[monster_hell_knight]]
* [[monster_wizard]]
* [[monster_demon1]]
* [[monster_shambler]]
* [[monster_boss]]
* [[monster_enforcer]]
* [[monster_shalrath]]
* [[Spawn#Entity_information|monster_tarbaby]]
* [[monster_fish]]
* [[monster_oldone]]
* [[monster_zombie]]
'''Lights'''
* [[light]]
* [[light_fluoro]]
* [[light_fluorospark]]
* [[light_globe]]
* [[light_flame_large_yellow]]
* [[light_flame_small_yellow]]
* [[light_flame_small_white]]
* [[light_torch_small_walltorch]]
'''Sounds'''
* [[ambient_drip]]
* [[ambient_drone]]
* [[ambient_comp_hum]]
* [[ambient_flouro_buzz]]
* [[ambient_light_buzz]]
* [[ambient_suck_wind]]
* [[ambient_swamp1]]
* [[ambient_swamp2]]
* [[ambient_thunder]]
'''Funcs'''
* [[func_door]]
* [[func_door_secret]]
* [[func_wall]]
* [[func_button]]
* [[func_train]]
* [[func_plat]]
* [[func_illusionary]]
* [[func_episodegate]]
* [[func_bossgate]]
'''Misc'''
* [[path_corner]]
* [[misc_fireball]]
* [[misc_explobox]]
* [[misc_explobox2]]
* [[misc_noisemaker]]
* [[trap_spikeshooter]]
* [[trap_shooter]]
* [[event_lightning]]
* [[air_bubbles]]
* [[viewthing]]
'''Triggers'''
* [[trigger_changelevel]]
* [[trigger_once]]
* [[trigger_multiple]]
* [[trigger_onlyregistered]]
* [[trigger_secret]]
* [[trigger_teleport]]
* [[trigger_setskill]]
* [[trigger_relay]]
* [[trigger_monsterjump]]
* [[trigger_counter]]
* [[trigger_push]]
* [[trigger_hurt]]</text>
      <sha1>s37qaecnjqcovaaac2d7ea5q9x5sig9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Eprint</title>
    <ns>0</ns>
    <id>878</id>
    <redirect title="eprint" />
    <revision>
      <id>2523</id>
      <timestamp>2013-03-29T14:22:01Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Eprint]] to [[eprint]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="20">#REDIRECT [[eprint]]</text>
      <sha1>8elj2aneb5qhsl1xbtdm0weq0k6u5xo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Error</title>
    <ns>0</ns>
    <id>212</id>
    <revision>
      <id>393</id>
      <timestamp>2008-02-23T18:46:56Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  void '''error''' (string ''text'')  Prints an error message.</comment>
      <text xml:space="preserve" bytes="61"> void '''error''' (string ''text'')

Prints an error message.</text>
      <sha1>ldju35skxnbjknym1omyu6vttgp7h46</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Extensions</title>
    <ns>0</ns>
    <id>473</id>
    <revision>
      <id>937</id>
      <timestamp>2008-11-12T11:47:43Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>New page: This page is about engine extensions.  * [[EXT CSQC]]</comment>
      <text xml:space="preserve" bytes="53">This page is about engine extensions.

* [[EXT CSQC]]</text>
      <sha1>9ay25uxwdmf53065td90lmiqce7bgrl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>945</id>
      <parentid>937</parentid>
      <timestamp>2008-11-12T12:03:34Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="79">This page is about engine extensions.

===List of Extensions===

* [[EXT CSQC]]</text>
      <sha1>g95t35rqtft12omu2t5ux2hpzje1cey</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1561</id>
      <parentid>945</parentid>
      <timestamp>2010-01-25T13:07:18Z</timestamp>
      <contributor>
        <ip>83.226.254.64</ip>
      </contributor>
      <text xml:space="preserve" bytes="100">This page is about engine extensions.

===List of Extensions===

* [[EXT CSQC]]
* [[QSG Extensions]]</text>
      <sha1>awct6cfewgl791np2kf5n664x5nhu2x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1562</id>
      <parentid>1561</parentid>
      <timestamp>2010-01-25T13:07:30Z</timestamp>
      <contributor>
        <ip>83.226.254.64</ip>
      </contributor>
      <text xml:space="preserve" bytes="100">This page is about engine extensions.

===List of Extensions===

* [[EXT CSQC]]
* [[QSG extensions]]</text>
      <sha1>pfuzj1o7r5hxi2ug3g9uky7vaj310i4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>FRIK FILE</title>
    <ns>0</ns>
    <id>339</id>
    <revision>
      <id>547</id>
      <timestamp>2008-02-29T12:05:34Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; float(string s) stof = #81; // get numerical value from a string float(string filename, float mode) fopen = #110; // opens a file inside quake/gamedir/data/ (mod...</comment>
      <text xml:space="preserve" bytes="1847">Builtin definitions:
&lt;pre&gt;
float(string s) stof = #81; // get numerical value from a string
float(string filename, float mode) fopen = #110; // opens a file inside quake/gamedir/data/ (mode is FILE_READ, FILE_APPEND, or FILE_WRITE), returns fhandle &gt;= 0 if successful, or fhandle &lt; 0 if unable to open file for any reason
void(float fhandle) fclose = #111; // closes a file
string(float fhandle) fgets = #112; // reads a line of text from the file and returns as a tempstring
void(float fhandle, string s, ...) fputs = #113; // writes a line of text to the end of the file
float(string s) strlen = #114; // returns how many characters are in a string
string(string s1, string s2, ...) strcat = #115; // concatenates two or more strings (for example &quot;abc&quot;, &quot;def&quot; would return &quot;abcdef&quot;) and returns as a tempstring
string(string s, float start, float length) substring = #116; // returns a section of a string as a tempstring
vector(string s) stov = #117; // returns vector value from a string
string(string s, ...) strzone = #118; // makes a copy of a string into the string zone and returns it, this is often used to keep around a tempstring for longer periods of time (tempstrings are replaced often)
void(string s) strunzone = #119; // removes a copy of a string from the string zone (you can not use that string again or it may crash!!!)
&lt;/pre&gt;

Constants:
&lt;pre&gt;
float FILE_READ = 0;
float FILE_APPEND = 1;
float FILE_WRITE = 2;
&lt;/pre&gt;

Cvars:
&lt;pre&gt;
pr_zone_min_strings : default 64 (64k), min 64 (64k), max 8192 (8mb)
&lt;/pre&gt;

Provides text file access functions and string manipulation functions, note that you may want to set pr_zone_min_strings in the worldspawn function if 64k is not enough string zone space.

NOTE: If present, [[DP_QC_UNLIMITEDTEMPSTRINGS]] partially supersedes strzone functionality when longterm storage is not needed.</text>
      <sha1>dj5x67wo4w4skfapsjp8328qjse5vtp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>FTE</title>
    <ns>0</ns>
    <id>954</id>
    <revision>
      <id>2705</id>
      <timestamp>2013-03-30T18:14:37Z</timestamp>
      <contributor>
        <ip>86.140.150.18</ip>
      </contributor>
      <comment>yay, my engine, woo.</comment>
      <text xml:space="preserve" bytes="946">{{Infobox Engine
|author=Spike et al
|name=FTE
|based-on=[[QuakeWorld]]
|first-release=?
|newest-release=?
|website=[http://www.fteqw.com/ here]
}}

As implied by its name FTE started out as a QuakeWorld-only engine, however over time it has gained full compatibility with NQ clients, NQ servers, and more importantly NQ mods.

Player features:
#prediction
#delta compression
#no nat issues
#compatible with a wide range of servers.
#commandline-less configuration.
#no mouse accel (even in linux)
#wide range of presents, allowing it to look awesome, or to get awesome framerates.

Modding features:
#csqc
#built in qcc
#step-by-step qc debugger.
#extended map limits (bsp2, q3bsp support)
#extended protocol limits (ent counts, ent limits, precache limits, etc)
#numerous qc extensions - see http://triptohell.info/moodles/fteqcc/fteextensions.qc
#skeletal model support

Ports:
#win64 (64bit native)
#win32
#linux
#android
#npapi/activex
#nacl</text>
      <sha1>tml2ng1zx9w2lng8v0njj5r5kc7yhz0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2706</id>
      <parentid>2705</parentid>
      <timestamp>2013-03-30T18:16:38Z</timestamp>
      <contributor>
        <ip>86.140.150.18</ip>
      </contributor>
      <text xml:space="preserve" bytes="1009">{{Infobox Engine
|author=Spike et al
|name=FTE
|based-on=[[QuakeWorld]]
|first-release=?
|newest-release=?
|website=[http://www.fteqw.com/ here]
}}

As implied by its name FTE started out as a QuakeWorld-only engine, however over time it has gained full compatibility with NQ clients, NQ servers, and more importantly NQ mods.

Player features:
#prediction
#delta compression
#no nat issues
#compatible with a wide range of servers.
#commandline-less configuration.
#no mouse accel (even in linux)
#wide range of presents, allowing it to look awesome, or to get awesome framerates.

Modding features:
#csqc
#built in qcc
#step-by-step qc debugger.
#extended map limits (bsp2, q3bsp support)
#extended protocol limits (ent counts, ent limits, precache limits, etc)
#numerous qc extensions - see http://triptohell.info/moodles/fteqcc/fteextensions.qc
#skeletal model support

Ports:
#win64 (64bit native)
#win32
#linux
#android
#npapi/activex
#nacl

{{Engines}}
{{GL NetQuake Engines}}
{{GL QuakeWorld Engines}}</text>
      <sha1>1ltda03i45m8p4muqcynnol41cukkkr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2707</id>
      <parentid>2706</parentid>
      <timestamp>2013-03-30T18:18:36Z</timestamp>
      <contributor>
        <ip>86.140.150.18</ip>
      </contributor>
      <text xml:space="preserve" bytes="1046">{{Infobox Engine
|author=Spike et al
|name=FTE
|based-on=[[QuakeWorld]]
|first-release=?
|newest-release=[http://triptohell.info/moodles/ here]
|website=[http://www.fteqw.com/ here]
}}

As implied by its name FTE started out as a QuakeWorld-only engine, however over time it has gained full compatibility with NQ clients, NQ servers, and more importantly NQ mods.

Player features:
#prediction
#delta compression
#no nat issues
#compatible with a wide range of servers.
#commandline-less configuration.
#no mouse accel (even in linux)
#wide range of presents, allowing it to look awesome, or to get awesome framerates.

Modding features:
#csqc
#built in qcc
#step-by-step qc debugger.
#extended map limits (bsp2, q3bsp support)
#extended protocol limits (ent counts, ent limits, precache limits, etc)
#numerous qc extensions - see http://triptohell.info/moodles/fteqcc/fteextensions.qc
#skeletal model support

Ports:
#win64 (64bit native)
#win32
#linux
#android
#npapi/activex
#nacl

{{Engines}}
{{GL NetQuake Engines}}
{{GL QuakeWorld Engines}}</text>
      <sha1>95drj76etmw70n46wtz8w3so82vocqv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>FTE QC CHECKPVS</title>
    <ns>0</ns>
    <id>591</id>
    <revision>
      <id>1571</id>
      <timestamp>2010-02-06T17:38:38Z</timestamp>
      <contributor>
        <ip>83.226.254.64</ip>
      </contributor>
      <comment>New page: Builtin definitions:  float checkpvs(vector viewpos, entity viewee) = #240;  Returns true if viewee can be seen from viewpos according to PVS data</comment>
      <text xml:space="preserve" bytes="146">Builtin definitions:

float checkpvs(vector viewpos, entity viewee) = #240;

Returns true if viewee can be seen from viewpos according to PVS data</text>
      <sha1>3grkw56g82v69jfug4zwcdxcoa89yhr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>FTE STRINGS</title>
    <ns>0</ns>
    <id>348</id>
    <revision>
      <id>557</id>
      <timestamp>2008-02-29T12:16:49Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Builtin definitions: &lt;pre&gt; float(string str, string sub, float startpos) strstrofs = #221; float(string str, float ofs) str2chr = #222; string(float c, ...) chr2str = #223; string(float cc...</comment>
      <text xml:space="preserve" bytes="582">Builtin definitions:
&lt;pre&gt;
float(string str, string sub, float startpos) strstrofs = #221;
float(string str, float ofs) str2chr = #222;
string(float c, ...) chr2str = #223;
string(float ccase, float calpha, float cnum, string s, ...) strconv = #224;
string(float chars, string s, ...) strpad = #225;
string(string info, string key, string value, ...) infoadd = #226;
string(string info, string key) infoget = #227;
float(string s1, string s2, float len) strncmp = #228;
float(string s1, string s2) strcasecmp = #229;
float(string s1, string s2, float len) strncasecmp = #230;
&lt;/pre&gt;</text>
      <sha1>5a4j4qfxmkf8daooztt65nrougfb8tw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>FTE TE STANDARDEFFECTBUILTINS</title>
    <ns>0</ns>
    <id>592</id>
    <revision>
      <id>1572</id>
      <timestamp>2010-02-06T17:40:06Z</timestamp>
      <contributor>
        <ip>83.226.254.64</ip>
      </contributor>
      <comment>New page: A modification of DP_TE_STANDARDEFFECTBUILTINS to cover temporary entity changes in QuakeWorld.   '''Builtins:'''  void(vector org) te_lightningblood = #219;  void(vector org, float count)...</comment>
      <text xml:space="preserve" bytes="762">A modification of DP_TE_STANDARDEFFECTBUILTINS to cover temporary entity changes in QuakeWorld.


'''Builtins:'''

void(vector org) te_lightningblood = #219;

void(vector org, float count) te_bloodqw = #239;

void(vector org, float count) te_gunshot = #418;

void(vector org) te_spike = #419;

void(vector org) te_superspike = #420;

void(vector org) te_explosion = #421;

void(vector org) te_tarexplosion = #422;

void(vector org) te_wizspike = #423;

void(vector org) te_knightspike = #424;

void(vector org) te_lavasplash = #425;

void(vector org) te_teleport = #426;

void(entity ent, vector org, vector end) te_lightning1 = #428;

void(entity ent, vector org, vector end) te_lightning2 = #429;

void(entity ent, vector org, vector end) te_lightning3 = #430;</text>
      <sha1>mgld85uybc5gtl3745erx07ty6vbcm9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Fabs</title>
    <ns>0</ns>
    <id>820</id>
    <redirect title="fabs" />
    <revision>
      <id>2402</id>
      <timestamp>2013-03-28T15:03:12Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Spirit moved page [[Fabs]] to [[fabs]]: lowercase</comment>
      <text xml:space="preserve" bytes="18">#REDIRECT [[fabs]]</text>
      <sha1>b5vgk7vjyjrjdt1mk9p82sw0aqwucb3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Fatal error: Hunk Alloc: bad size</title>
    <ns>0</ns>
    <id>489</id>
    <revision>
      <id>1004</id>
      <timestamp>2009-05-23T13:28:46Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>quick and from the top of my head. is -winmem correct?</comment>
      <text xml:space="preserve" bytes="517">The map or mod you tried to play requires more memory than Quake allocated by itself. You need to tell the engine to use more memory, append the following option to the commandline:

{| class=&quot;wikitable&quot; border=&quot;1&quot;
|-
!  Engine/EXE
!  32 Megabytes
!  64 Megabytes
|-
|  quake.exe
|  -mem 32
|  -mem 64
|-
|  winquake.exe
|  -winmem 32
|  -winmem 64
|-
|  glquake.exe and any glquake derivate
|  -heapsize 32000
|  -heapsize 64000
|}

64 Megabytes should be more than enough, 32 Megabytes will be enough in most cases.</text>
      <sha1>smrm0vaaa04l5sdv37i2n3jnvh96ewl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Fiend</title>
    <ns>0</ns>
    <id>142</id>
    <revision>
      <id>224</id>
      <timestamp>2007-11-02T19:42:37Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: In essence, organic buzzsaws, rife with pummeling power!  * '''Weapon:''' Arms, Leap * '''Health:''' 300 * '''Treasure:''' Nothing  '''Tips:''' Fiends are definitely a tough cookie to crac...</comment>
      <text xml:space="preserve" bytes="646">In essence, organic buzzsaws, rife with pummeling power!

* '''Weapon:''' Arms, Leap
* '''Health:''' 300
* '''Treasure:''' Nothing

'''Tips:''' Fiends are definitely a tough cookie to crack. Get ready to strafe alot, because they leap fast and do major damage if they hit you. When they're close, they'll use their razor-sharp handless arms to rip the flesh from your bones. About four good hits from the [[Double-Barrelled Shotgun]] is a good way to take them out, or, if you're far enough away, three [[Rocket Launcher|Rockets]].

'''Entity name:''' [[monster_demon1]]

[http://frikqcc.quakesrc.org/files/fiend.gif]

==See Also==
* [[Monsters]]</text>
      <sha1>glneqmre60j2eb0ipofmrbf52eygqxm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>286</id>
      <parentid>224</parentid>
      <timestamp>2007-11-05T22:22:14Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <text xml:space="preserve" bytes="620">In essence, organic buzzsaws, rife with pummeling power!

* '''Weapon:''' Arms, Leap
* '''Health:''' 300
* '''Treasure:''' Nothing

'''Tips:''' Fiends are definitely a tough cookie to crack. Get ready to strafe alot, because they leap fast and do major damage if they hit you. When they're close, they'll use their razor-sharp handless arms to rip the flesh from your bones. About four good hits from the [[Double-Barrelled Shotgun]] is a good way to take them out, or, if you're far enough away, three [[Rocket Launcher|Rockets]].

[[Image:Fiend.gif]]

'''Entity name:''' [[monster_demon1]]

==See Also==
* [[Monsters]]</text>
      <sha1>hxha1yq9wenoohe8f9cdrpkfchushr9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>729</id>
      <parentid>286</parentid>
      <timestamp>2008-05-07T20:15:35Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="624">In essence, organic buzzsaws, rife with pummeling power!

* '''Weapon:''' Arms, Leap
* '''Health:''' 300
* '''Treasure:''' Nothing
'''Tips:'''
----
Fiends are definitely a tough cookie to crack. Get ready to strafe alot, because they leap fast and do major damage if they hit you. When they're close, they'll use their razor-sharp handless arms to rip the flesh from your bones. About four good hits from the [[Double-Barrelled Shotgun]] is a good way to take them out, or, if you're far enough away, three [[Rocket Launcher|Rockets]].

[[Image:Fiend.gif]]

'''Entity name:''' [[monster_demon1]]

==See Also==
* [[Monsters]]</text>
      <sha1>o4fi55e8ee7wzubywkirlb3swu671pu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>730</id>
      <parentid>729</parentid>
      <timestamp>2008-05-07T20:16:16Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="715">In essence, organic buzzsaws, rife with pummeling power!

* '''Weapon:''' Arms, Leap
* '''Health:''' 300
* '''Treasure:''' Nothing
'''Tips:'''
----
Fiends are definitely a tough cookie to crack. Get ready to strafe alot, because they leap fast and do major damage if they hit you. When they're close, they'll use their razor-sharp handless arms to rip the flesh from your bones. About four good hits from the [[Double-Barrelled Shotgun]] is a good way to take them out, or, if you're far enough away, three [[Rocket Launcher|Rockets]].
*'''Best Weapons:''' Nailgun, Super Nailgun
*'''Worst Weapons:''' Shotgun, Rocket Launcher

[[Image:Fiend.gif]]

'''Entity name:''' [[monster_demon1]]

==See Also==
* [[Monsters]]</text>
      <sha1>55qs8i5dc00e0oz2ea4thc7jbtmlsg6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>813</id>
      <parentid>730</parentid>
      <timestamp>2008-05-09T19:43:01Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <text xml:space="preserve" bytes="1139">{{Infobox Monster
|monstername=Fiend
|entityname=monster_demon1
|monsterhealth=300
|monstermelee=Claws
|monstermissile=Leap
|movetype=MOVETYPE_STEP
|monsterspeed=7.12, 23.66
|monsterclass=Medieval, shareware
}}

[[Image:Fiend.gif|left]]Fiends appear almost small the way they position their bodies at rest, and not much larger when walking, but when you see them run, let alone leap, you will appreciate their size - and ferocity.

Fiends make their first appearance in [[The Castle of the Damned]] as a literal monster closet, leaping out at you while you observe the floating stone blocks. They are quite potent in their slashing, but also can take a handful of rockets. However those hooved legs should be your concern. The leap is fast and powerful (bare minimum of 40 damage) and quick to recover. Be swift on your feet, particularly with sidestepping and take advantage of its exposed back during the jump. If you can keep close enough in range, they will generally not leap, but they do take small steps forward as they slash, so be careful.

''In essence, organic buzzsaws, rife with pummeling power!''

==See Also==
* [[Monsters]]</text>
      <sha1>4quq77d6yf8hbftz6i60f8r3exrnt2q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>847</id>
      <parentid>813</parentid>
      <timestamp>2008-05-17T18:00:34Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1141">{{Infobox Monster
|monstername=Fiend
|entityname=monster_demon1
|monsterhealth=300
|monstermelee=Claws
|monstermissile=Leap
|movetype=MOVETYPE_STEP
|monsterspeed=7.12, 23.66
|monsterclass=Medieval, shareware
}}

[[Image:Fiend.gif|left]]Fiends appear almost small the way they position their bodies at rest, and not much larger when walking, but when you see them run, let alone leap, you will appreciate their size - and ferocity.

Fiends make their first appearance in [[The Castle of the Damned]] as a literal monster closet, leaping out at you while you observe the floating stone blocks. They are quite potent in their slashing, but also can take a handful of rockets. However those hooved legs should be your concern. The leap is fast and powerful (bare minimum of 40 damage) and quick to recover. Be swift on your feet, particularly with sidestepping and take advantage of its exposed back during the jump. If you can keep close enough in range, they will generally not leap, but they do take small steps forward as they slash, so be careful.

''&quot;In essence, organic buzzsaws, rife with pummeling power!&quot;''

==See Also==
* [[Monsters]]</text>
      <sha1>o4d8vpa42wyyyho5qiob5472iyauxcx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>865</id>
      <parentid>847</parentid>
      <timestamp>2008-05-17T18:53:40Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1162">{{Infobox Monster
|monstername=Fiend
|entityname=monster_demon1
|monsterhealth=300
|monstermelee=Claws
|monstermissile=Leap
|movetype=MOVETYPE_STEP
|monsterspeed=7.12, 23.66
|monsterclass=Medieval, shareware
|monsterdrop=nothing
}}

[[Image:Fiend.gif|left]]Fiends appear almost small the way they position their bodies at rest, and not much larger when walking, but when you see them run, let alone leap, you will appreciate their size - and ferocity.

Fiends make their first appearance in [[The Castle of the Damned]] as a literal monster closet, leaping out at you while you observe the floating stone blocks. They are quite potent in their slashing, but also can take a handful of rockets. However those hooved legs should be your concern. The leap is fast and powerful (bare minimum of 40 damage) and quick to recover. Be swift on your feet, particularly with sidestepping and take advantage of its exposed back during the jump. If you can keep close enough in range, they will generally not leap, but they do take small steps forward as they slash, so be careful.

''&quot;In essence, organic buzzsaws, rife with pummeling power!&quot;''

==See Also==
* [[Monsters]]</text>
      <sha1>152uyip0wk4v4ocl4aqby2cjpfucro7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1242</id>
      <parentid>865</parentid>
      <timestamp>2009-09-25T07:57:42Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="1092">{{Infobox Monster
|name=Fiend
|entity=monster_demon1
|model=demon.mdl&lt;br /&gt;h_demon.mdl (head gib)
|health=300
|attacks=Claws, leap
|drop=nothing
|gameversion=Shareware
}}
[[Image:Fiend.gif|left]]
'''Fiends''' appear almost small the way they position their bodies at rest, and not much larger when walking, but when you see them run, let alone leap, you will appreciate their size - and ferocity.

Fiends make their first appearance in [[The Castle of the Damned]] as a literal monster closet, leaping out at you while you observe the floating stone blocks. They are quite potent in their slashing, but also can take a handful of rockets. However those hooved legs should be your concern. The leap is fast and powerful (bare minimum of 40 damage) and quick to recover. Be swift on your feet, particularly with sidestepping and take advantage of its exposed back during the jump. If you can keep close enough in range, they will generally not leap, but they do take small steps forward as they slash, so be careful.

''&quot;In essence, organic buzzsaws, rife with pummeling power!&quot;''

{{Monsters}}</text>
      <sha1>svb3oj0h63ld6wurzt1zfgdd6dhdew9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1381</id>
      <parentid>1242</parentid>
      <timestamp>2009-10-08T23:20:32Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1116">{{Infobox Monster
|name=Fiend
|entity=monster_demon1
|model=demon.mdl&lt;br /&gt;h_demon.mdl (head gib)
|health=300
|attacks=Claws, leap
|drop=nothing
|1stappearance=[[e1m2]]
|gameversion=Shareware
}}
[[Image:Fiend.gif|left]]
'''Fiends''' appear almost small the way they position their bodies at rest, and not much larger when walking, but when you see them run, let alone leap, you will appreciate their size - and ferocity.

Fiends make their first appearance in [[The Castle of the Damned]] as a literal monster closet, leaping out at you while you observe the floating stone blocks. They are quite potent in their slashing, but also can take a handful of rockets. However those hooved legs should be your concern. The leap is fast and powerful (bare minimum of 40 damage) and quick to recover. Be swift on your feet, particularly with sidestepping and take advantage of its exposed back during the jump. If you can keep close enough in range, they will generally not leap, but they do take small steps forward as they slash, so be careful.

''&quot;In essence, organic buzzsaws, rife with pummeling power!&quot;''

{{Monsters}}</text>
      <sha1>406coxi9qs2l8eeercj5jvfri4gmu65</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1395</id>
      <parentid>1381</parentid>
      <timestamp>2009-10-08T23:44:06Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1157">{{Infobox Monster
|name=Fiend
|entity=monster_demon1
|model=demon.mdl&lt;br /&gt;h_demon.mdl (head gib)
|health=300
|attacks=Claws, leap
|drop=nothing
|1stappearance=[[e1m2]]
|gameversion=Shareware
}}
[[Image:Fiend.gif|left]]
''&quot;In essence, organic buzzsaws, rife with pummeling power!&quot;''

'''Fiends''' appear almost small the way they position their bodies at rest, and not much larger when walking, but when you see them run, let alone leap, you will appreciate their size - and ferocity.

Fiends make their first appearance in [[The Castle of the Damned]] as a literal monster closet, leaping out at you while you observe the floating stone blocks. They are quite potent in their slashing, but also can take a handful of rockets. However those hooved legs should be your concern. The leap is fast and powerful (bare minimum of 40 damage) and quick to recover. Be swift on your feet, particularly with sidestepping and take advantage of its exposed back during the jump. If you can keep close enough in range, they will generally not leap, but they do take small steps forward as they slash, so be careful.

''&quot;Player was eviscerated by a Fiend&quot;''

{{Monsters}}</text>
      <sha1>b2mlmzzdd2fxfls22hi73i9tt2x97vt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1920</id>
      <parentid>1395</parentid>
      <timestamp>2013-03-25T03:36:48Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>fixed image location and file link</comment>
      <text xml:space="preserve" bytes="1158">[[Image:Fiend.gif|left]]
{{Infobox Monster
|name=Fiend
|entity=monster_demon1
|model=demon.mdl&lt;br /&gt;h_demon.mdl (head gib)
|health=300
|attacks=Claws, leap
|drop=nothing
|1stappearance=[[e1m2]]
|gameversion=Shareware
}}

''&quot;In essence, organic buzzsaws, rife with pummeling power!&quot;''

'''Fiends''' appear almost small the way they position their bodies at rest, and not much larger when walking, but when you see them run, let alone leap, you will appreciate their size - and ferocity.

Fiends make their first appearance in [[The Castle of the Damned]] as a literal monster closet, leaping out at you while you observe the floating stone blocks. They are quite potent in their slashing, but also can take a handful of rockets. However those hooved legs should be your concern. The leap is fast and powerful (bare minimum of 40 damage) and quick to recover. Be swift on your feet, particularly with sidestepping and take advantage of its exposed back during the jump. If you can keep close enough in range, they will generally not leap, but they do take small steps forward as they slash, so be careful.

''&quot;Player was eviscerated by a Fiend&quot;''

{{Monsters}}</text>
      <sha1>jbggda1isv7pkgxfucuemumwzudaf62</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2834</id>
      <parentid>1920</parentid>
      <timestamp>2013-04-08T13:45:34Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>updated infobox</comment>
      <text xml:space="preserve" bytes="1135">{{Infobox Monster
| name = Fiend
| image = monster_quake_fiend.png
| manualtext = In essence, organic buzzsaws, rife with pummeling power!
| health = 300
| attacks = Claws, leap
| drop = nothing
| 1stappearance = [[e1m2]]
| gameversion = Shareware
| deathmessage = Player was eviscerated by a Fiend
}}

'''Fiends''' appear almost small the way they position their bodies at rest, and not much larger when walking, but when you see them run, let alone leap, you will appreciate their size - and ferocity.

Fiends make their first appearance in [[The Castle of the Damned]] as a literal monster closet, leaping out at you while you observe the floating stone blocks. They are quite potent in their slashing, but also can take a handful of rockets. However those hooved legs should be your concern. The leap is fast and powerful (bare minimum of 40 damage) and quick to recover. Be swift on your feet, particularly with sidestepping and take advantage of its exposed back during the jump. If you can keep close enough in range, they will generally not leap, but they do take small steps forward as they slash, so be careful.

{{Monsters}}</text>
      <sha1>m7lo0pzhuo6cohmp0iskqz2zrgoa628</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2873</id>
      <parentid>2834</parentid>
      <timestamp>2013-04-09T03:55:48Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>added entity information</comment>
      <text xml:space="preserve" bytes="3123">{{Infobox Monster
| name = Fiend
| image = monster_quake_fiend.png
| manualtext = In essence, organic buzzsaws, rife with pummeling power!
| health = 300
| attacks = Claws, leap
| drop = nothing
| 1stappearance = [[e1m2]]
| gameversion = Shareware
| deathmessage = Player was eviscerated by a Fiend
}}

'''Fiends''' appear almost small the way they position their bodies at rest, and not much larger when walking, but when you see them run, let alone leap, you will appreciate their size - and ferocity.

Fiends make their first appearance in [[The Castle of the Damned]] as a literal monster closet, leaping out at you while you observe the floating stone blocks. They are quite potent in their slashing, but also can take a handful of rockets. However those hooved legs should be your concern. The leap is fast and powerful (bare minimum of 40 damage) and quick to recover. Be swift on your feet, particularly with sidestepping and take advantage of its exposed back during the jump. If you can keep close enough in range, they will generally not leap, but they do take small steps forward as they slash, so be careful.

==Tactics==


&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_demon1
| commonname = [[Fiend]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 88
| quakec = [[demon.qc]]
| precaches =
progs/demon.mdl&lt;br&gt;
progs/h_demon.mdl&lt;br&gt;
demon/ddeath.wav&lt;br&gt;
demon/dhit2.wav&lt;br&gt;
demon/djump.wav&lt;br&gt;
demon/dpain1.wav&lt;br&gt;
demon/idle1.wav&lt;br&gt;
demon/sight2.wav
}}

==Entity information==

'''monster_demon1''' is the [[Entity|entity]] for placing '''Fiends''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Fiend. When triggered, the Fiend will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Fiend dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Fiend dies.
|}

====Spawnflags====
The monster_demon1 entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Fiend will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Fiend
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-32 -32 -24, 32 32 64) model(&quot;:progs/demon.mdl&quot;)
    = monster_demon1 : &quot;Fiend&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_demon1 (1 0 0) (-32 -32 -24) (32 32 64) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>fuv14qswwvs2esam29ts7h122rxizap</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2949</id>
      <parentid>2873</parentid>
      <timestamp>2013-05-04T16:19:09Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <minor/>
      <comment>gibs</comment>
      <text xml:space="preserve" bytes="3185">{{Infobox Monster
| name = Fiend
| image = monster_quake_fiend.png
| manualtext = In essence, organic buzzsaws, rife with pummeling power!
| health = 300
| gibthresh = -80
| attacks = Claws, leap
| drop = nothing
| 1stappearance = [[e1m2]]
| gameversion = Shareware
| deathmessage = Player was eviscerated by a Fiend
}}

'''Fiends''' (also called ''demons'' in the [[QC]] code) appear almost small the way they position their bodies at rest, and not much larger when walking, but when you see them run, let alone leap, you will appreciate their size - and ferocity.

Fiends make their first appearance in [[The Castle of the Damned]] as a literal monster closet, leaping out at you while you observe the floating stone blocks. They are quite potent in their slashing, but also can take a handful of rockets. However those hooved legs should be your concern. The leap is fast and powerful (bare minimum of 40 damage) and quick to recover. Be swift on your feet, particularly with sidestepping and take advantage of its exposed back during the jump. If you can keep close enough in range, they will generally not leap, but they do take small steps forward as they slash, so be careful.

==Tactics==


&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_demon1
| commonname = [[Fiend]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 88
| quakec = [[demon.qc]]
| precaches =
progs/demon.mdl&lt;br&gt;
progs/h_demon.mdl&lt;br&gt;
demon/ddeath.wav&lt;br&gt;
demon/dhit2.wav&lt;br&gt;
demon/djump.wav&lt;br&gt;
demon/dpain1.wav&lt;br&gt;
demon/idle1.wav&lt;br&gt;
demon/sight2.wav
}}

==Entity information==

'''monster_demon1''' is the [[Entity|entity]] for placing '''Fiends''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Fiend. When triggered, the Fiend will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Fiend dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Fiend dies.
|}

====Spawnflags====
The monster_demon1 entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Fiend will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Fiend
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-32 -32 -24, 32 32 64) model(&quot;:progs/demon.mdl&quot;)
    = monster_demon1 : &quot;Fiend&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_demon1 (1 0 0) (-32 -32 -24) (32 32 64) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>4u2evft6ydcn8kowhuyei0tax6jkfp7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File talk:soldier.gif</title>
    <ns>7</ns>
    <id>984</id>
    <revision>
      <id>2743</id>
      <timestamp>2013-03-31T21:33:28Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Created page with &quot;Looks really weird and out of proportion from that angle. :P ~~~~&quot;</comment>
      <text xml:space="preserve" bytes="138">Looks really weird and out of proportion from that angle. :P [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 21:33, 31 March 2013 (UTC)</text>
      <sha1>4rsu79554vaoeosh8w656acnotuu0er</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Ati bpp16 graphics corruption.jpg</title>
    <ns>6</ns>
    <id>495</id>
    <revision>
      <id>1026</id>
      <timestamp>2009-06-10T09:59:39Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Corrupted graphics on ATI hardware without -bpp 32.</comment>
      <text xml:space="preserve" bytes="51">Corrupted graphics on ATI hardware without -bpp 32.</text>
      <sha1>0t31hscgc9d82a0g1qho8tokxnoh5um</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Background-concrete.jpg</title>
    <ns>6</ns>
    <id>603</id>
    <revision>
      <id>1678</id>
      <timestamp>2013-03-24T16:34:36Z</timestamp>
      <contributor>
        <ip>127.0.0.1</ip>
      </contributor>
      <comment>(recovered file, missing upload log entry)</comment>
      <text xml:space="preserve" bytes="42">(recovered file, missing upload log entry)</text>
      <sha1>5m6p96j5aop1izynx8qh062wtdu1be4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2973</id>
      <parentid>1678</parentid>
      <timestamp>2013-05-28T15:56:57Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Spirit uploaded a new version of &amp;quot;[[File:Background-concrete.jpg]]&amp;quot;: background image for the Quakewiki by Starbuck</comment>
      <text xml:space="preserve" bytes="42">(recovered file, missing upload log entry)</text>
      <sha1>5m6p96j5aop1izynx8qh062wtdu1be4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Background-concrete2.jpg</title>
    <ns>6</ns>
    <id>605</id>
    <revision>
      <id>1680</id>
      <timestamp>2013-03-24T16:34:37Z</timestamp>
      <contributor>
        <ip>127.0.0.1</ip>
      </contributor>
      <comment>(recovered file, missing upload log entry)</comment>
      <text xml:space="preserve" bytes="42">(recovered file, missing upload log entry)</text>
      <sha1>5m6p96j5aop1izynx8qh062wtdu1be4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Background-concrete3.jpg</title>
    <ns>6</ns>
    <id>607</id>
    <revision>
      <id>1682</id>
      <timestamp>2013-03-24T16:34:39Z</timestamp>
      <contributor>
        <ip>127.0.0.1</ip>
      </contributor>
      <comment>(recovered file, missing upload log entry)</comment>
      <text xml:space="preserve" bytes="42">(recovered file, missing upload log entry)</text>
      <sha1>5m6p96j5aop1izynx8qh062wtdu1be4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Brush.jpg</title>
    <ns>6</ns>
    <id>735</id>
    <revision>
      <id>2101</id>
      <timestamp>2013-03-25T20:50:22Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>An image of a brush in Trenchbroom.</comment>
      <text xml:space="preserve" bytes="35">An image of a brush in Trenchbroom.</text>
      <sha1>lfwpidwrh63a1b6kqa1arymk002tsh0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Brush.png</title>
    <ns>6</ns>
    <id>758</id>
    <revision>
      <id>2178</id>
      <timestamp>2013-03-26T04:10:19Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>It's a brush.

PNG CUZ SPIRIT HATES JPG</comment>
      <text xml:space="preserve" bytes="39">It's a brush.

PNG CUZ SPIRIT HATES JPG</text>
      <sha1>8bmf3uxx94da0a9i46omkcxeyt2lvqh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Chthon.gif</title>
    <ns>6</ns>
    <id>452</id>
    <revision>
      <id>796</id>
      <timestamp>2008-05-09T16:49:41Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Colormap.png</title>
    <ns>6</ns>
    <id>515</id>
    <revision>
      <id>1162</id>
      <timestamp>2009-09-23T21:23:26Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Dog.gif</title>
    <ns>6</ns>
    <id>165</id>
    <revision>
      <id>265</id>
      <timestamp>2007-11-05T22:06:58Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>Rottweiler</comment>
      <text xml:space="preserve" bytes="10">Rottweiler</text>
      <sha1>97vycxg5nymc3llnwvg5bwc6nzryjyu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:E1m1 1.jpg</title>
    <ns>6</ns>
    <id>553</id>
    <revision>
      <id>1407</id>
      <timestamp>2009-10-09T20:24:11Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>Standing upon the initial slipgate, looking into the brief 'tutorial' area.</comment>
      <text xml:space="preserve" bytes="75">Standing upon the initial slipgate, looking into the brief 'tutorial' area.</text>
      <sha1>mojhtfpahy0gnjj7nassxwqkxxh54ls</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:E1m1 2.jpg</title>
    <ns>6</ns>
    <id>554</id>
    <revision>
      <id>1408</id>
      <timestamp>2009-10-09T20:24:50Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>The bridge leading into the Slipgate Complex.</comment>
      <text xml:space="preserve" bytes="45">The bridge leading into the Slipgate Complex.</text>
      <sha1>93vd7j1n3kj63cji436jroxxekag7di</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:E1m1 3.jpg</title>
    <ns>6</ns>
    <id>555</id>
    <revision>
      <id>1409</id>
      <timestamp>2009-10-09T20:25:50Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>The ramp room, a grunt guarding an already pressed button, indicating the player is using [[notarget]].</comment>
      <text xml:space="preserve" bytes="103">The ramp room, a grunt guarding an already pressed button, indicating the player is using [[notarget]].</text>
      <sha1>b7zq8vvj8dfp1v734p85ln766au4lry</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Enforcer.gif</title>
    <ns>6</ns>
    <id>167</id>
    <revision>
      <id>269</id>
      <timestamp>2007-11-05T22:10:18Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>Enforcer</comment>
      <text xml:space="preserve" bytes="8">Enforcer</text>
      <sha1>8mw3ggf3oa3y4rtwv8sxc3n4mo1otmx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Entity.jpg</title>
    <ns>6</ns>
    <id>736</id>
    <revision>
      <id>2103</id>
      <timestamp>2013-03-25T20:59:03Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Some Entities in Trenchbroom</comment>
      <text xml:space="preserve" bytes="28">Some Entities in Trenchbroom</text>
      <sha1>dgaaggr8oz87lxo0nzf3jsa7rdc5dee</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Entity.png</title>
    <ns>6</ns>
    <id>759</id>
    <revision>
      <id>2179</id>
      <timestamp>2013-03-26T04:10:48Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Some Entities

PNG CUZ SPIRIT HATES JPG</comment>
      <text xml:space="preserve" bytes="39">Some Entities

PNG CUZ SPIRIT HATES JPG</text>
      <sha1>27pai06alkhxq96agu2fsndtbjnfd6w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Fiend.gif</title>
    <ns>6</ns>
    <id>175</id>
    <revision>
      <id>285</id>
      <timestamp>2007-11-05T22:21:32Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>Fiend</comment>
      <text xml:space="preserve" bytes="5">Fiend</text>
      <sha1>8zj91q2b5zrci38jrjgklqk1k415rf1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Fimg.JPG</title>
    <ns>6</ns>
    <id>1046</id>
    <revision>
      <id>3006</id>
      <timestamp>2013-09-13T05:18:34Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>Screenshot of Fimg loading a spr32 from the DarkPlaces Mod.</comment>
      <text xml:space="preserve" bytes="59">Screenshot of Fimg loading a spr32 from the DarkPlaces Mod.</text>
      <sha1>3lsc5q6r56pyvrucdlihm2jwkybvml1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Fish.gif</title>
    <ns>6</ns>
    <id>170</id>
    <revision>
      <id>275</id>
      <timestamp>2007-11-05T22:16:16Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>Rotfish</comment>
      <text xml:space="preserve" bytes="7">Rotfish</text>
      <sha1>949up28v66rf8yh4030d66mvbkhqbp4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Hknight.gif</title>
    <ns>6</ns>
    <id>169</id>
    <revision>
      <id>273</id>
      <timestamp>2007-11-05T22:12:55Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>Death Knight</comment>
      <text xml:space="preserve" bytes="12">Death Knight</text>
      <sha1>ai31wuol0sm1692u48muc5jo6zqwbb3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Knight.gif</title>
    <ns>6</ns>
    <id>168</id>
    <revision>
      <id>271</id>
      <timestamp>2007-11-05T22:11:32Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>Knight</comment>
      <text xml:space="preserve" bytes="6">Knight</text>
      <sha1>44jf43l146tgb721bby7zhc8zzw9gxm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Lastcupofsorrow.jpg</title>
    <ns>6</ns>
    <id>777</id>
    <revision>
      <id>2262</id>
      <timestamp>2013-03-26T15:13:39Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>A level in Nehahra</comment>
      <text xml:space="preserve" bytes="18">A level in Nehahra</text>
      <sha1>c34kf4kwctryqhgus7o03zph7yf6eo9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Logo.png</title>
    <ns>6</ns>
    <id>609</id>
    <revision>
      <id>1684</id>
      <timestamp>2013-03-24T16:34:40Z</timestamp>
      <contributor>
        <ip>127.0.0.1</ip>
      </contributor>
      <comment>(recovered file, missing upload log entry)</comment>
      <text xml:space="preserve" bytes="42">(recovered file, missing upload log entry)</text>
      <sha1>5m6p96j5aop1izynx8qh062wtdu1be4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Logo2.png</title>
    <ns>6</ns>
    <id>606</id>
    <revision>
      <id>1681</id>
      <timestamp>2013-03-24T16:34:38Z</timestamp>
      <contributor>
        <ip>127.0.0.1</ip>
      </contributor>
      <comment>(recovered file, missing upload log entry)</comment>
      <text xml:space="preserve" bytes="42">(recovered file, missing upload log entry)</text>
      <sha1>5m6p96j5aop1izynx8qh062wtdu1be4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:MapConverter.zip</title>
    <ns>6</ns>
    <id>1051</id>
    <revision>
      <id>3015</id>
      <timestamp>2013-10-23T18:42:45Z</timestamp>
      <contributor>
        <username>Spiney</username>
        <id>40</id>
      </contributor>
      <comment>Scrama's .map conversion tool
Borrowed from http://scrama.3dn.ru/tmp/MapConverter.zip</comment>
      <text xml:space="preserve" bytes="85">Scrama's .map conversion tool
Borrowed from http://scrama.3dn.ru/tmp/MapConverter.zip</text>
      <sha1>8qsqw7r8ajpoffu299mr0xz6c6hsza5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Nehahra.jpg</title>
    <ns>6</ns>
    <id>776</id>
    <revision>
      <id>2260</id>
      <timestamp>2013-03-26T15:11:02Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>From The Seal of Nehahra</comment>
      <text xml:space="preserve" bytes="24">From The Seal of Nehahra</text>
      <sha1>q4eqbz55k8vzd1j55pjbo5a5fkz5grl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Ogre.png</title>
    <ns>6</ns>
    <id>540</id>
    <revision>
      <id>1302</id>
      <timestamp>2009-09-27T12:58:56Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Qpalette.png</title>
    <ns>6</ns>
    <id>516</id>
    <revision>
      <id>1163</id>
      <timestamp>2009-09-23T21:30:02Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Qped.png</title>
    <ns>6</ns>
    <id>523</id>
    <revision>
      <id>1215</id>
      <timestamp>2009-09-25T05:17:15Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Quake Wiki Logo by Scampie.png</title>
    <ns>6</ns>
    <id>604</id>
    <revision>
      <id>1679</id>
      <timestamp>2013-03-24T16:34:36Z</timestamp>
      <contributor>
        <ip>127.0.0.1</ip>
      </contributor>
      <comment>(recovered file, missing upload log entry)</comment>
      <text xml:space="preserve" bytes="42">(recovered file, missing upload log entry)</text>
      <sha1>5m6p96j5aop1izynx8qh062wtdu1be4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Quake palette.zip</title>
    <ns>6</ns>
    <id>514</id>
    <revision>
      <id>1161</id>
      <timestamp>2009-09-23T20:41:23Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Quake wiki 135.jpg</title>
    <ns>6</ns>
    <id>602</id>
    <revision>
      <id>1677</id>
      <timestamp>2013-03-24T16:34:35Z</timestamp>
      <contributor>
        <ip>127.0.0.1</ip>
      </contributor>
      <comment>(recovered file, missing upload log entry)</comment>
      <text xml:space="preserve" bytes="42">(recovered file, missing upload log entry)</text>
      <sha1>5m6p96j5aop1izynx8qh062wtdu1be4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Quakefont.gif</title>
    <ns>6</ns>
    <id>37</id>
    <revision>
      <id>44</id>
      <timestamp>2007-10-30T17:40:20Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Quakeguy.png</title>
    <ns>6</ns>
    <id>773</id>
    <revision>
      <id>2245</id>
      <timestamp>2013-03-26T14:21:59Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Gimmie some suger suger baby!</comment>
      <text xml:space="preserve" bytes="29">Gimmie some suger suger baby!</text>
      <sha1>bka5v8pk4724s4t4xpon8lxublykey8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2246</id>
      <parentid>2245</parentid>
      <timestamp>2013-03-26T14:22:28Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="29">Gimmie some sugar sugar baby!</text>
      <sha1>eirx3jjflds1hknrmyb4lj9xm6j8bts</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Shalrath.gif</title>
    <ns>6</ns>
    <id>176</id>
    <revision>
      <id>287</id>
      <timestamp>2007-11-05T22:22:34Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>Vore</comment>
      <text xml:space="preserve" bytes="4">Vore</text>
      <sha1>inrzqoiqg4o7twvygs2u6in7wxqnpr0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Shambler.png</title>
    <ns>6</ns>
    <id>542</id>
    <revision>
      <id>1318</id>
      <timestamp>2009-09-27T18:55:31Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Soldier.gif</title>
    <ns>6</ns>
    <id>166</id>
    <revision>
      <id>267</id>
      <timestamp>2007-11-05T22:09:22Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>Grunt</comment>
      <text xml:space="preserve" bytes="5">Grunt</text>
      <sha1>mh6l8zksaobgpq4eov2g3j9p7cway9p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Start 1.jpg</title>
    <ns>6</ns>
    <id>548</id>
    <revision>
      <id>1361</id>
      <timestamp>2009-10-01T16:29:05Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>The first thing you see in Quake, the skill select of Introduction. Image courtesy of Spirit @ quaddicted.com</comment>
      <text xml:space="preserve" bytes="109">The first thing you see in Quake, the skill select of Introduction. Image courtesy of Spirit @ quaddicted.com</text>
      <sha1>7tse2v09lp7an3d1n4xqvo63jemgazq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Start 2.jpg</title>
    <ns>6</ns>
    <id>549</id>
    <revision>
      <id>1365</id>
      <timestamp>2009-10-01T16:38:40Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>The episode selection area of Introduction.</comment>
      <text xml:space="preserve" bytes="43">The episode selection area of Introduction.</text>
      <sha1>gyss3omlgc2o7ubzq9or4jkl7950xex</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Start 3.jpg</title>
    <ns>6</ns>
    <id>550</id>
    <revision>
      <id>1366</id>
      <timestamp>2009-10-01T16:40:47Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>The episode 4 selection area with the bars closed, and a glimpse of the Nightmare skill hall. Note the suspended pool of water.</comment>
      <text xml:space="preserve" bytes="127">The episode 4 selection area with the bars closed, and a glimpse of the Nightmare skill hall. Note the suspended pool of water.</text>
      <sha1>h23o28t4rsl3d3zi468ibo1dz4vm0zl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Tarbaby.gif</title>
    <ns>6</ns>
    <id>174</id>
    <revision>
      <id>283</id>
      <timestamp>2007-11-05T22:20:29Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>Spawn</comment>
      <text xml:space="preserve" bytes="5">Spawn</text>
      <sha1>4w2cdwihmf0lch3cdsp6nq1m622x5vw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Textures.jpg</title>
    <ns>6</ns>
    <id>737</id>
    <revision>
      <id>2107</id>
      <timestamp>2013-03-25T21:12:04Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Some Quake textures</comment>
      <text xml:space="preserve" bytes="19">Some Quake textures</text>
      <sha1>q5btpid58idzxrrqaiqqvpggfd8geyz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Textures.png</title>
    <ns>6</ns>
    <id>766</id>
    <revision>
      <id>2194</id>
      <timestamp>2013-03-26T04:33:49Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Wizard.gif</title>
    <ns>6</ns>
    <id>172</id>
    <revision>
      <id>279</id>
      <timestamp>2007-11-05T22:17:55Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>Scrag</comment>
      <text xml:space="preserve" bytes="5">Scrag</text>
      <sha1>m9eaq4qvz2zuhf1xbbatweg55sia3ae</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:Zombie.gif</title>
    <ns>6</ns>
    <id>171</id>
    <revision>
      <id>277</id>
      <timestamp>2007-11-05T22:17:10Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>Zombie</comment>
      <text xml:space="preserve" bytes="6">Zombie</text>
      <sha1>8j5w2h6g6vp43r412ndy8h9mmi83yyb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:armor1.gif</title>
    <ns>6</ns>
    <id>966</id>
    <revision>
      <id>2725</id>
      <timestamp>2013-03-31T16:37:33Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Green armor</comment>
      <text xml:space="preserve" bytes="11">Green armor</text>
      <sha1>hf1i7uch6cvxaz5m4g40ny7newaau6e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:armor2.gif</title>
    <ns>6</ns>
    <id>967</id>
    <revision>
      <id>2726</id>
      <timestamp>2013-03-31T16:37:49Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Yellow armor</comment>
      <text xml:space="preserve" bytes="12">Yellow armor</text>
      <sha1>2kgaje2mndpc3ufns76q6j1llzwoa44</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:armor3.gif</title>
    <ns>6</ns>
    <id>968</id>
    <revision>
      <id>2727</id>
      <timestamp>2013-03-31T16:38:08Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Red armor</comment>
      <text xml:space="preserve" bytes="9">Red armor</text>
      <sha1>3ti65xmz208rbs1m1dh4oigb06euwyk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:cells0.gif</title>
    <ns>6</ns>
    <id>961</id>
    <revision>
      <id>2720</id>
      <timestamp>2013-03-31T16:11:50Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Small box of cells</comment>
      <text xml:space="preserve" bytes="18">Small box of cells</text>
      <sha1>c8ed2089bv7o463j5vk06spnvwr73yz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:cells1.gif</title>
    <ns>6</ns>
    <id>962</id>
    <revision>
      <id>2721</id>
      <timestamp>2013-03-31T16:12:06Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Large box of cells</comment>
      <text xml:space="preserve" bytes="18">Large box of cells</text>
      <sha1>ps75u6zb1y3gnorzaosovhh45c65agx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:compile gui prefs.png</title>
    <ns>6</ns>
    <id>753</id>
    <revision>
      <id>2146</id>
      <timestamp>2013-03-26T01:40:30Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Compilin' GUI Preferences.</comment>
      <text xml:space="preserve" bytes="26">Compilin' GUI Preferences.</text>
      <sha1>gvd7jhlyldb4sua88qm51ve6u67325e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:compile gui.png</title>
    <ns>6</ns>
    <id>752</id>
    <revision>
      <id>2145</id>
      <timestamp>2013-03-26T01:31:54Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Necros' Compiling GUI</comment>
      <text xml:space="preserve" bytes="21">Necros' Compiling GUI</text>
      <sha1>g1t3cnyy79zo0pxmb82gm98lyks258z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:dm1.jpg</title>
    <ns>6</ns>
    <id>708</id>
    <revision>
      <id>2038</id>
      <timestamp>2013-03-25T11:04:30Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:dm2.jpg</title>
    <ns>6</ns>
    <id>709</id>
    <revision>
      <id>2039</id>
      <timestamp>2013-03-25T11:04:44Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:dm3.jpg</title>
    <ns>6</ns>
    <id>710</id>
    <revision>
      <id>2040</id>
      <timestamp>2013-03-25T11:04:56Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:dm4.jpg</title>
    <ns>6</ns>
    <id>711</id>
    <revision>
      <id>2041</id>
      <timestamp>2013-03-25T11:05:11Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:dm5.jpg</title>
    <ns>6</ns>
    <id>712</id>
    <revision>
      <id>2042</id>
      <timestamp>2013-03-25T11:05:24Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:dm6.jpg</title>
    <ns>6</ns>
    <id>713</id>
    <revision>
      <id>2043</id>
      <timestamp>2013-03-25T11:05:38Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:dm7.jpg</title>
    <ns>6</ns>
    <id>714</id>
    <revision>
      <id>2044</id>
      <timestamp>2013-03-25T11:06:00Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e1m1.jpg</title>
    <ns>6</ns>
    <id>661</id>
    <revision>
      <id>1986</id>
      <timestamp>2013-03-25T10:31:24Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>e1m1</comment>
      <text xml:space="preserve" bytes="4">e1m1</text>
      <sha1>85xt7lv4ahrye87i3y216peoatfy2b5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e1m2.jpg</title>
    <ns>6</ns>
    <id>662</id>
    <revision>
      <id>1987</id>
      <timestamp>2013-03-25T10:31:43Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e1m3.jpg</title>
    <ns>6</ns>
    <id>663</id>
    <revision>
      <id>1988</id>
      <timestamp>2013-03-25T10:32:03Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e1m4.jpg</title>
    <ns>6</ns>
    <id>664</id>
    <revision>
      <id>1989</id>
      <timestamp>2013-03-25T10:32:17Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e1m5.jpg</title>
    <ns>6</ns>
    <id>665</id>
    <revision>
      <id>1990</id>
      <timestamp>2013-03-25T10:32:32Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e1m6.jpg</title>
    <ns>6</ns>
    <id>666</id>
    <revision>
      <id>1991</id>
      <timestamp>2013-03-25T10:32:46Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e1m7.jpg</title>
    <ns>6</ns>
    <id>667</id>
    <revision>
      <id>1992</id>
      <timestamp>2013-03-25T10:33:13Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e1m8.jpg</title>
    <ns>6</ns>
    <id>668</id>
    <revision>
      <id>1993</id>
      <timestamp>2013-03-25T10:33:26Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e2m1.jpg</title>
    <ns>6</ns>
    <id>669</id>
    <revision>
      <id>1994</id>
      <timestamp>2013-03-25T10:33:45Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e2m2.jpg</title>
    <ns>6</ns>
    <id>670</id>
    <revision>
      <id>1995</id>
      <timestamp>2013-03-25T10:34:00Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2023</id>
      <parentid>1995</parentid>
      <timestamp>2013-03-25T11:00:13Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>Than uploaded a new version of &amp;quot;[[File:e2m2.jpg]]&amp;quot;</comment>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e2m3.jpg</title>
    <ns>6</ns>
    <id>671</id>
    <revision>
      <id>1996</id>
      <timestamp>2013-03-25T10:34:14Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e2m4.jpg</title>
    <ns>6</ns>
    <id>672</id>
    <revision>
      <id>1997</id>
      <timestamp>2013-03-25T10:34:27Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e2m5.jpg</title>
    <ns>6</ns>
    <id>673</id>
    <revision>
      <id>1998</id>
      <timestamp>2013-03-25T10:34:39Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e2m6.jpg</title>
    <ns>6</ns>
    <id>674</id>
    <revision>
      <id>1999</id>
      <timestamp>2013-03-25T10:34:52Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e2m7.jpg</title>
    <ns>6</ns>
    <id>675</id>
    <revision>
      <id>2000</id>
      <timestamp>2013-03-25T10:35:06Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e3m1.jpg</title>
    <ns>6</ns>
    <id>693</id>
    <revision>
      <id>2022</id>
      <timestamp>2013-03-25T10:59:50Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e3m2.jpg</title>
    <ns>6</ns>
    <id>694</id>
    <revision>
      <id>2024</id>
      <timestamp>2013-03-25T11:00:53Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e3m3.jpg</title>
    <ns>6</ns>
    <id>695</id>
    <revision>
      <id>2025</id>
      <timestamp>2013-03-25T11:01:22Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e3m4.jpg</title>
    <ns>6</ns>
    <id>696</id>
    <revision>
      <id>2026</id>
      <timestamp>2013-03-25T11:01:33Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e3m5.jpg</title>
    <ns>6</ns>
    <id>697</id>
    <revision>
      <id>2027</id>
      <timestamp>2013-03-25T11:01:46Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e3m6.jpg</title>
    <ns>6</ns>
    <id>698</id>
    <revision>
      <id>2028</id>
      <timestamp>2013-03-25T11:01:59Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e3m7.jpg</title>
    <ns>6</ns>
    <id>699</id>
    <revision>
      <id>2029</id>
      <timestamp>2013-03-25T11:02:14Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e4m1.jpg</title>
    <ns>6</ns>
    <id>700</id>
    <revision>
      <id>2030</id>
      <timestamp>2013-03-25T11:02:40Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e4m2.jpg</title>
    <ns>6</ns>
    <id>701</id>
    <revision>
      <id>2031</id>
      <timestamp>2013-03-25T11:02:52Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e4m3.jpg</title>
    <ns>6</ns>
    <id>702</id>
    <revision>
      <id>2032</id>
      <timestamp>2013-03-25T11:03:11Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e4m4.jpg</title>
    <ns>6</ns>
    <id>703</id>
    <revision>
      <id>2033</id>
      <timestamp>2013-03-25T11:03:25Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e4m5.jpg</title>
    <ns>6</ns>
    <id>704</id>
    <revision>
      <id>2034</id>
      <timestamp>2013-03-25T11:03:39Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e4m6.jpg</title>
    <ns>6</ns>
    <id>705</id>
    <revision>
      <id>2035</id>
      <timestamp>2013-03-25T11:03:52Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e4m7.jpg</title>
    <ns>6</ns>
    <id>706</id>
    <revision>
      <id>2036</id>
      <timestamp>2013-03-25T11:04:05Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:e4m8.jpg</title>
    <ns>6</ns>
    <id>707</id>
    <revision>
      <id>2037</id>
      <timestamp>2013-03-25T11:04:17Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:end.jpg</title>
    <ns>6</ns>
    <id>657</id>
    <revision>
      <id>1968</id>
      <timestamp>2013-03-25T09:19:22Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>end.bsp</comment>
      <text xml:space="preserve" bytes="7">end.bsp</text>
      <sha1>ryem4ht6obw4mtljfnb4lcgwbskyrg8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:enforcer.gif</title>
    <ns>6</ns>
    <id>981</id>
    <revision>
      <id>2740</id>
      <timestamp>2013-03-31T18:31:53Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Enforcer</comment>
      <text xml:space="preserve" bytes="8">Enforcer</text>
      <sha1>8mw3ggf3oa3y4rtwv8sxc3n4mo1otmx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:explo1.gif</title>
    <ns>6</ns>
    <id>979</id>
    <revision>
      <id>2738</id>
      <timestamp>2013-03-31T18:08:01Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Large exploding container</comment>
      <text xml:space="preserve" bytes="25">Large exploding container</text>
      <sha1>17qxvmgj4a80y6ttqrkl5xqa3cdjuvb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:explo2.gif</title>
    <ns>6</ns>
    <id>980</id>
    <revision>
      <id>2739</id>
      <timestamp>2013-03-31T18:08:31Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Small exploding container</comment>
      <text xml:space="preserve" bytes="25">Small exploding container</text>
      <sha1>gzpeorsb3zqc538wro0qzmu6vayo3b3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:health0.gif</title>
    <ns>6</ns>
    <id>963</id>
    <revision>
      <id>2722</id>
      <timestamp>2013-03-31T16:12:34Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Small medkit</comment>
      <text xml:space="preserve" bytes="12">Small medkit</text>
      <sha1>5d1c9w0uk498p9w48igjsvi7u4juk4g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:health1.gif</title>
    <ns>6</ns>
    <id>964</id>
    <revision>
      <id>2723</id>
      <timestamp>2013-03-31T16:12:51Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Large medkit</comment>
      <text xml:space="preserve" bytes="12">Large medkit</text>
      <sha1>pc2syshmwjwou0rovpahsyr043ty7qy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:health2.gif</title>
    <ns>6</ns>
    <id>965</id>
    <revision>
      <id>2724</id>
      <timestamp>2013-03-31T16:13:15Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Megahealth</comment>
      <text xml:space="preserve" bytes="10">Megahealth</text>
      <sha1>kyac51ui94lz4734qyjowvji23eyogw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:key g base.gif</title>
    <ns>6</ns>
    <id>978</id>
    <revision>
      <id>2737</id>
      <timestamp>2013-03-31T18:07:01Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Gold keycard</comment>
      <text xml:space="preserve" bytes="12">Gold keycard</text>
      <sha1>iny1azuqssypsev6u5gri4b8j6bnl6j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:key g med.gif</title>
    <ns>6</ns>
    <id>974</id>
    <revision>
      <id>2733</id>
      <timestamp>2013-03-31T18:04:39Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Gold key</comment>
      <text xml:space="preserve" bytes="8">Gold key</text>
      <sha1>9xgj8ezrc2v5k1sgltb01dw1vlr79re</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:key g wiz.gif</title>
    <ns>6</ns>
    <id>976</id>
    <revision>
      <id>2735</id>
      <timestamp>2013-03-31T18:06:17Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Gold runekey</comment>
      <text xml:space="preserve" bytes="12">Gold runekey</text>
      <sha1>7bct7g4eovzypkan62s8bljj1gpp25z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:key s base.gif</title>
    <ns>6</ns>
    <id>977</id>
    <revision>
      <id>2736</id>
      <timestamp>2013-03-31T18:06:42Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Silver keycard</comment>
      <text xml:space="preserve" bytes="14">Silver keycard</text>
      <sha1>2mwse1xo51sf7ium7yoebn257ill20o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:key s med.gif</title>
    <ns>6</ns>
    <id>973</id>
    <revision>
      <id>2732</id>
      <timestamp>2013-03-31T18:04:14Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Silver key</comment>
      <text xml:space="preserve" bytes="10">Silver key</text>
      <sha1>l54n7n5j7zwaxi0s2so0qqtyelg3e5a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:key s wiz.gif</title>
    <ns>6</ns>
    <id>975</id>
    <revision>
      <id>2734</id>
      <timestamp>2013-03-31T18:05:56Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Silver runekey</comment>
      <text xml:space="preserve" bytes="14">Silver runekey</text>
      <sha1>hjhsef1ws9op6p414x0vg72q3wdktuu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:knight.gif</title>
    <ns>6</ns>
    <id>983</id>
    <revision>
      <id>2742</id>
      <timestamp>2013-03-31T18:32:25Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Knight</comment>
      <text xml:space="preserve" bytes="6">Knight</text>
      <sha1>44jf43l146tgb721bby7zhc8zzw9gxm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:map tutorial 1.jpg</title>
    <ns>6</ns>
    <id>738</id>
    <revision>
      <id>2111</id>
      <timestamp>2013-03-25T21:21:51Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Default view when opening Trenchbroom</comment>
      <text xml:space="preserve" bytes="37">Default view when opening Trenchbroom</text>
      <sha1>owblm8ycf0ya8aze9o4tvpsyopckttc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:map tutorial 1.png</title>
    <ns>6</ns>
    <id>760</id>
    <revision>
      <id>2181</id>
      <timestamp>2013-03-26T04:14:20Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Default view of Trenchbroom</comment>
      <text xml:space="preserve" bytes="27">Default view of Trenchbroom</text>
      <sha1>rdputvhvdz5udv0kvqhouud8qnew9uo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:map tutorial 2.jpg</title>
    <ns>6</ns>
    <id>739</id>
    <revision>
      <id>2112</id>
      <timestamp>2013-03-25T21:51:35Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Selecting a brush, applying a texture</comment>
      <text xml:space="preserve" bytes="37">Selecting a brush, applying a texture</text>
      <sha1>67kia7j4nz35ronk6q6300ld07t2o0e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:map tutorial 2.png</title>
    <ns>6</ns>
    <id>761</id>
    <revision>
      <id>2182</id>
      <timestamp>2013-03-26T04:14:58Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Selecting a brush, applying a texture</comment>
      <text xml:space="preserve" bytes="37">Selecting a brush, applying a texture</text>
      <sha1>67kia7j4nz35ronk6q6300ld07t2o0e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:map tutorial 3.jpg</title>
    <ns>6</ns>
    <id>740</id>
    <revision>
      <id>2116</id>
      <timestamp>2013-03-25T22:18:15Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Resizing a brush</comment>
      <text xml:space="preserve" bytes="16">Resizing a brush</text>
      <sha1>1olhuncammsa3bpfq365cgp1o88li5y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:map tutorial 3.png</title>
    <ns>6</ns>
    <id>762</id>
    <revision>
      <id>2183</id>
      <timestamp>2013-03-26T04:15:35Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Resizing a brush</comment>
      <text xml:space="preserve" bytes="16">Resizing a brush</text>
      <sha1>1olhuncammsa3bpfq365cgp1o88li5y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:map tutorial 4.jpg</title>
    <ns>6</ns>
    <id>741</id>
    <revision>
      <id>2117</id>
      <timestamp>2013-03-25T22:54:56Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Creating a new brush, and positioning it.</comment>
      <text xml:space="preserve" bytes="41">Creating a new brush, and positioning it.</text>
      <sha1>k4ggdkpg66jha9vnl3o0ahvz3q1vkyz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:map tutorial 4.png</title>
    <ns>6</ns>
    <id>763</id>
    <revision>
      <id>2184</id>
      <timestamp>2013-03-26T04:16:12Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Creating and positioning a new brush</comment>
      <text xml:space="preserve" bytes="36">Creating and positioning a new brush</text>
      <sha1>1gj6hjko7hl7uclatv5igxqimkbwtrz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:map tutorial 5.jpg</title>
    <ns>6</ns>
    <id>742</id>
    <revision>
      <id>2118</id>
      <timestamp>2013-03-25T22:58:10Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Duplication and Vertical movement</comment>
      <text xml:space="preserve" bytes="33">Duplication and Vertical movement</text>
      <sha1>pqtrdjggsiprjglnqadzp3vfbk4n3zc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:map tutorial 5.png</title>
    <ns>6</ns>
    <id>764</id>
    <revision>
      <id>2185</id>
      <timestamp>2013-03-26T04:17:03Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Duplicating brushes and vertical movement</comment>
      <text xml:space="preserve" bytes="41">Duplicating brushes and vertical movement</text>
      <sha1>frhbu7nphjr35f10r1nb4vuwhqqua41</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:map tutorial 6.png</title>
    <ns>6</ns>
    <id>749</id>
    <revision>
      <id>2137</id>
      <timestamp>2013-03-26T00:13:13Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Placing entities</comment>
      <text xml:space="preserve" bytes="16">Placing entities</text>
      <sha1>es0usmjw8s9ppeu6ywddqvgdwsylotp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:map tutorial 7.png</title>
    <ns>6</ns>
    <id>750</id>
    <revision>
      <id>2138</id>
      <timestamp>2013-03-26T00:24:52Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Editing properties</comment>
      <text xml:space="preserve" bytes="18">Editing properties</text>
      <sha1>jnex4yhjky3lsi85ipe9b1nle623084</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:map tutorial 8.png</title>
    <ns>6</ns>
    <id>751</id>
    <revision>
      <id>2141</id>
      <timestamp>2013-03-26T00:57:03Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>A Brush entity... the trigger!</comment>
      <text xml:space="preserve" bytes="30">A Brush entity... the trigger!</text>
      <sha1>shjnj7oom8fzfe2eozmdc99v1njrwmw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:map tutorial light.jpg</title>
    <ns>6</ns>
    <id>755</id>
    <revision>
      <id>2148</id>
      <timestamp>2013-03-26T02:24:03Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Lighted Tutorial map!</comment>
      <text xml:space="preserve" bytes="21">Lighted Tutorial map!</text>
      <sha1>02hf28ve9tjltj9sg69jc7dxqz8pmj3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:map tutorial qbsp.jpg</title>
    <ns>6</ns>
    <id>754</id>
    <revision>
      <id>2147</id>
      <timestamp>2013-03-26T02:15:57Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>QBSP'd map</comment>
      <text xml:space="preserve" bytes="10">QBSP'd map</text>
      <sha1>64vn3bi8h6danvcu8rob2vga2b3rxbp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:map tutorial vis1.jpg</title>
    <ns>6</ns>
    <id>756</id>
    <revision>
      <id>2149</id>
      <timestamp>2013-03-26T02:54:43Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Unvised map in R_Showtris 1</comment>
      <text xml:space="preserve" bytes="27">Unvised map in R_Showtris 1</text>
      <sha1>lzplotd084xuckl69hly6vts6yr56bp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:map tutorial vis2.jpg</title>
    <ns>6</ns>
    <id>757</id>
    <revision>
      <id>2150</id>
      <timestamp>2013-03-26T03:01:31Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>A vis'd map!</comment>
      <text xml:space="preserve" bytes="12">A vis'd map!</text>
      <sha1>9ph9iaa8u70ytpcvl1jj9ou3x1n3wjf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:monster hipnotic gremlin.png</title>
    <ns>6</ns>
    <id>1032</id>
    <revision>
      <id>2938</id>
      <timestamp>2013-05-04T15:31:25Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <comment>Made with Noesis. Not the best frame but it'll do the job anyway.</comment>
      <text xml:space="preserve" bytes="65">Made with Noesis. Not the best frame but it'll do the job anyway.</text>
      <sha1>jctj3fpv28v7kplar8ekhm0yyzrzxqa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:monster hipnotic scourge.png</title>
    <ns>6</ns>
    <id>1034</id>
    <revision>
      <id>2956</id>
      <timestamp>2013-05-04T17:02:52Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <comment>Made with Noesis.</comment>
      <text xml:space="preserve" bytes="17">Made with Noesis.</text>
      <sha1>ialtq2a3e4x5w11jv0e5f17hy564ph4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:monster quake chthon.png</title>
    <ns>6</ns>
    <id>1006</id>
    <revision>
      <id>2817</id>
      <timestamp>2013-04-08T13:28:56Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2903</id>
      <parentid>2817</parentid>
      <timestamp>2013-04-09T11:59:19Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>Than moved page [[File:monster quake cthon.png]] to [[File:monster quake chthon.png]] without leaving a redirect: fixed spelling of chthon</comment>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:monster quake death knight.png</title>
    <ns>6</ns>
    <id>1007</id>
    <revision>
      <id>2818</id>
      <timestamp>2013-04-08T13:29:24Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:monster quake dog.png</title>
    <ns>6</ns>
    <id>1020</id>
    <redirect title="File:monster quake rottweiler.png" />
    <revision>
      <id>2842</id>
      <timestamp>2013-04-08T13:57:46Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>Than moved page [[File:monster quake dog.png]] to [[File:monster quake rottweiler.png]]: the in game name is rottweiler, and all the other monster images use the in game name</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[File:monster quake rottweiler.png]]</text>
      <sha1>jffw877xi78zex72h4yb0rjr964w3du</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:monster quake enforcer.png</title>
    <ns>6</ns>
    <id>1009</id>
    <revision>
      <id>2820</id>
      <timestamp>2013-04-08T13:30:12Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:monster quake fiend.png</title>
    <ns>6</ns>
    <id>1010</id>
    <revision>
      <id>2821</id>
      <timestamp>2013-04-08T13:30:33Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:monster quake grunt.png</title>
    <ns>6</ns>
    <id>1011</id>
    <revision>
      <id>2822</id>
      <timestamp>2013-04-08T13:30:51Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:monster quake knight.png</title>
    <ns>6</ns>
    <id>1012</id>
    <revision>
      <id>2823</id>
      <timestamp>2013-04-08T13:30:57Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:monster quake ogre.png</title>
    <ns>6</ns>
    <id>1013</id>
    <revision>
      <id>2824</id>
      <timestamp>2013-04-08T13:31:12Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:monster quake rotfish.png</title>
    <ns>6</ns>
    <id>1014</id>
    <revision>
      <id>2825</id>
      <timestamp>2013-04-08T13:31:18Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:monster quake rottweiler.png</title>
    <ns>6</ns>
    <id>1008</id>
    <revision>
      <id>2819</id>
      <timestamp>2013-04-08T13:29:45Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2841</id>
      <parentid>2819</parentid>
      <timestamp>2013-04-08T13:57:46Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>Than moved page [[File:monster quake dog.png]] to [[File:monster quake rottweiler.png]]: the in game name is rottweiler, and all the other monster images use the in game name</comment>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:monster quake scrag.png</title>
    <ns>6</ns>
    <id>1015</id>
    <revision>
      <id>2826</id>
      <timestamp>2013-04-08T13:31:35Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:monster quake shambler.png</title>
    <ns>6</ns>
    <id>1016</id>
    <revision>
      <id>2827</id>
      <timestamp>2013-04-08T13:31:41Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:monster quake shub niggurath.png</title>
    <ns>6</ns>
    <id>1017</id>
    <revision>
      <id>2828</id>
      <timestamp>2013-04-08T13:31:58Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:monster quake spawn.png</title>
    <ns>6</ns>
    <id>1018</id>
    <revision>
      <id>2829</id>
      <timestamp>2013-04-08T13:32:02Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:monster quake vore.png</title>
    <ns>6</ns>
    <id>1005</id>
    <revision>
      <id>2814</id>
      <timestamp>2013-04-08T13:26:40Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:monster quake zombie.png</title>
    <ns>6</ns>
    <id>1019</id>
    <revision>
      <id>2830</id>
      <timestamp>2013-04-08T13:32:36Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:nails0.gif</title>
    <ns>6</ns>
    <id>957</id>
    <revision>
      <id>2715</id>
      <timestamp>2013-03-31T15:35:27Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Small box of nails</comment>
      <text xml:space="preserve" bytes="18">Small box of nails</text>
      <sha1>mamae246tscz05ubjqvvwxrdbf77a1i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:nails1.gif</title>
    <ns>6</ns>
    <id>958</id>
    <revision>
      <id>2716</id>
      <timestamp>2013-03-31T15:35:49Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Large box of nails</comment>
      <text xml:space="preserve" bytes="18">Large box of nails</text>
      <sha1>3mzn66jtcfp6f1vk0wmpmxyyrfyam8m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:pent.gif</title>
    <ns>6</ns>
    <id>969</id>
    <revision>
      <id>2728</id>
      <timestamp>2013-03-31T17:06:33Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Pentagram of Protection</comment>
      <text xml:space="preserve" bytes="23">Pentagram of Protection</text>
      <sha1>7nwma4czhdlqv8n4488ir4q3jrmb08y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:portal.png</title>
    <ns>6</ns>
    <id>807</id>
    <revision>
      <id>2375</id>
      <timestamp>2013-03-28T14:18:51Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>Portal image from [[e1m5]] level end.</comment>
      <text xml:space="preserve" bytes="37">Portal image from [[e1m5]] level end.</text>
      <sha1>kgb9tvnjvx7qgjurs3v8tnu7fdkm80e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:quad.gif</title>
    <ns>6</ns>
    <id>970</id>
    <revision>
      <id>2729</id>
      <timestamp>2013-03-31T17:06:57Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Quad Damage</comment>
      <text xml:space="preserve" bytes="11">Quad Damage</text>
      <sha1>e973hjtnpm7av6il2kevhv1ak3f7pob</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:quake palette.zip</title>
    <ns>6</ns>
    <id>952</id>
    <revision>
      <id>2691</id>
      <timestamp>2013-03-30T13:47:25Z</timestamp>
      <contributor>
        <username>Spiney</username>
        <id>40</id>
      </contributor>
      <comment>quake palette in the following formats:
.lmp .aco .act .ase .pal .txt (for 'painter' or something)

.riff is not included, someone should append it to the archive.
Also included is the png preview from this page.

I've converted them using an app calli...</comment>
      <text xml:space="preserve" bytes="324">quake palette in the following formats:
.lmp .aco .act .ase .pal .txt (for 'painter' or something)

.riff is not included, someone should append it to the archive.
Also included is the png preview from this page.

I've converted them using an app calling PEdit
http://www.softpedia.com/progDownload/PEdit-Download-80494.html</text>
      <sha1>0t08c1zikuk3s3meyu72o9dnjaxt7br</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:quake1slipgate.png</title>
    <ns>6</ns>
    <id>744</id>
    <revision>
      <id>2127</id>
      <timestamp>2013-03-25T23:20:06Z</timestamp>
      <contributor>
        <username>Text Fish</username>
        <id>36</id>
      </contributor>
      <comment>A bog-standard Quake 1 Slipgate</comment>
      <text xml:space="preserve" bytes="31">A bog-standard Quake 1 Slipgate</text>
      <sha1>gji6fubeww5aspg06k4lfrkinunuetj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2317</id>
      <parentid>2127</parentid>
      <timestamp>2013-03-26T21:27:35Z</timestamp>
      <contributor>
        <username>Text Fish</username>
        <id>36</id>
      </contributor>
      <comment>Text Fish uploaded a new version of &amp;quot;[[File:quake1slipgate.png]]&amp;quot;: Brightened up for dark monitors.</comment>
      <text xml:space="preserve" bytes="31">A bog-standard Quake 1 Slipgate</text>
      <sha1>gji6fubeww5aspg06k4lfrkinunuetj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:quakeed screen 1.png</title>
    <ns>6</ns>
    <id>803</id>
    <revision>
      <id>2349</id>
      <timestamp>2013-03-27T13:32:37Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>This image was taken from Planet Romero on 2013.03.27
* [http://planetromero.com/rome.ro/wordpress/wp-content/uploads/2009/12/qe_dev-726646.gif.png Direct image link]
* [http://planetromero.com/2010/01/gametales-cray-ymp Article]</comment>
      <text xml:space="preserve" bytes="229">This image was taken from Planet Romero on 2013.03.27
* [http://planetromero.com/rome.ro/wordpress/wp-content/uploads/2009/12/qe_dev-726646.gif.png Direct image link]
* [http://planetromero.com/2010/01/gametales-cray-ymp Article]</text>
      <sha1>5uxj57p7p4qs6jzabutnz46d2gg5v7p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:r drawflat start.jpg</title>
    <ns>6</ns>
    <id>998</id>
    <revision>
      <id>2778</id>
      <timestamp>2013-04-07T08:53:22Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Start map with r_drawflat enabled</comment>
      <text xml:space="preserve" bytes="33">Start map with r_drawflat enabled</text>
      <sha1>7hq5qfkqtt9umqds7r6fj77v9hqa8pu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:r showbboxes start.jpg</title>
    <ns>6</ns>
    <id>997</id>
    <revision>
      <id>2777</id>
      <timestamp>2013-04-07T08:52:58Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Start map with r_showbboxes enabled</comment>
      <text xml:space="preserve" bytes="35">Start map with r_showbboxes enabled</text>
      <sha1>r1gjp22zdh0hp2abc4yhp477sypf01h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:r showtris start.jpg</title>
    <ns>6</ns>
    <id>996</id>
    <revision>
      <id>2776</id>
      <timestamp>2013-04-07T08:52:25Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Start map with r_showtris enabled</comment>
      <text xml:space="preserve" bytes="33">Start map with r_showtris enabled</text>
      <sha1>d9ohgyzf80qybqnjkel9miais3iyxl6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:ring.gif</title>
    <ns>6</ns>
    <id>971</id>
    <revision>
      <id>2730</id>
      <timestamp>2013-03-31T17:07:26Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Ring of Shadows</comment>
      <text xml:space="preserve" bytes="15">Ring of Shadows</text>
      <sha1>nkp2f29twqjzfq198sca0muxudvu7zy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:rockets0.gif</title>
    <ns>6</ns>
    <id>959</id>
    <revision>
      <id>2717</id>
      <timestamp>2013-03-31T15:54:55Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Small box of rockets</comment>
      <text xml:space="preserve" bytes="20">Small box of rockets</text>
      <sha1>l42i25eytm70rfvy84tz2ci7g8uef7r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:rockets1.gif</title>
    <ns>6</ns>
    <id>960</id>
    <revision>
      <id>2718</id>
      <timestamp>2013-03-31T15:56:57Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Large box of rockets</comment>
      <text xml:space="preserve" bytes="20">Large box of rockets</text>
      <sha1>3vf9fkrq62oyqwm4vkj1yf52t5mjv9c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2719</id>
      <parentid>2718</parentid>
      <timestamp>2013-03-31T16:11:04Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Negke uploaded a new version of &amp;quot;[[File:rockets1.gif]]&amp;quot;: Large box of rockets</comment>
      <text xml:space="preserve" bytes="20">Large box of rockets</text>
      <sha1>3vf9fkrq62oyqwm4vkj1yf52t5mjv9c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:shells0.gif</title>
    <ns>6</ns>
    <id>955</id>
    <revision>
      <id>2711</id>
      <timestamp>2013-03-31T14:08:27Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Small box of shells</comment>
      <text xml:space="preserve" bytes="19">Small box of shells</text>
      <sha1>bmtmrkjonrp9d8yahdp4i9pa0o8agbs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2713</id>
      <parentid>2711</parentid>
      <timestamp>2013-03-31T15:31:45Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Negke uploaded a new version of &amp;quot;[[File:shells0.gif]]&amp;quot;: Small box of shells</comment>
      <text xml:space="preserve" bytes="19">Small box of shells</text>
      <sha1>bmtmrkjonrp9d8yahdp4i9pa0o8agbs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:shells1.gif</title>
    <ns>6</ns>
    <id>956</id>
    <revision>
      <id>2712</id>
      <timestamp>2013-03-31T14:09:07Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Large box of shells</comment>
      <text xml:space="preserve" bytes="19">Large box of shells</text>
      <sha1>r3dur47fphkzlf96l3gga6tznc9uuc8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2714</id>
      <parentid>2712</parentid>
      <timestamp>2013-03-31T15:32:16Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Negke uploaded a new version of &amp;quot;[[File:shells1.gif]]&amp;quot;: Large box of shells</comment>
      <text xml:space="preserve" bytes="19">Large box of shells</text>
      <sha1>r3dur47fphkzlf96l3gga6tznc9uuc8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:soldier.gif</title>
    <ns>6</ns>
    <id>982</id>
    <revision>
      <id>2741</id>
      <timestamp>2013-03-31T18:32:09Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Grunt</comment>
      <text xml:space="preserve" bytes="5">Grunt</text>
      <sha1>mh6l8zksaobgpq4eov2g3j9p7cway9p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:start.jpg</title>
    <ns>6</ns>
    <id>656</id>
    <revision>
      <id>1967</id>
      <timestamp>2013-03-25T09:12:36Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>start.bsp</comment>
      <text xml:space="preserve" bytes="9">start.bsp</text>
      <sha1>flbygufrv97dvgxb0goa1eeswxrnffz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:suit.gif</title>
    <ns>6</ns>
    <id>972</id>
    <revision>
      <id>2731</id>
      <timestamp>2013-03-31T17:08:18Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Biosuit</comment>
      <text xml:space="preserve" bytes="7">Biosuit</text>
      <sha1>ljc03np08ovcvt66t7j3juqa7b69ws4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:texture animate.png</title>
    <ns>6</ns>
    <id>786</id>
    <revision>
      <id>2303</id>
      <timestamp>2013-03-26T19:21:11Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>animated textures</comment>
      <text xml:space="preserve" bytes="17">animated textures</text>
      <sha1>ixpes1dzz2epd7zg39k7ruex6409ugo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:texture clip.png</title>
    <ns>6</ns>
    <id>783</id>
    <revision>
      <id>2300</id>
      <timestamp>2013-03-26T19:10:04Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>clip texture</comment>
      <text xml:space="preserve" bytes="12">clip texture</text>
      <sha1>h25pjr762mh7zf8e823mr96nspr41ff</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:texture liquid.png</title>
    <ns>6</ns>
    <id>784</id>
    <revision>
      <id>2301</id>
      <timestamp>2013-03-26T19:13:59Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>liquid textures</comment>
      <text xml:space="preserve" bytes="15">liquid textures</text>
      <sha1>m4ddk44ejkwc8gg3214tcve1j1akmtb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:texture skip.png</title>
    <ns>6</ns>
    <id>787</id>
    <revision>
      <id>2304</id>
      <timestamp>2013-03-26T19:21:39Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>the skip texture</comment>
      <text xml:space="preserve" bytes="16">the skip texture</text>
      <sha1>f8qyfem1dtkuccsbgqpksdt0o3fuxm2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:texture sky.png</title>
    <ns>6</ns>
    <id>785</id>
    <revision>
      <id>2302</id>
      <timestamp>2013-03-26T19:20:48Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>a sky texture</comment>
      <text xml:space="preserve" bytes="13">a sky texture</text>
      <sha1>dke0jblmnpt4k6gixtca5pxmucqe3jg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:weapon grenadelauncher.png</title>
    <ns>6</ns>
    <id>1058</id>
    <revision>
      <id>3054</id>
      <timestamp>2013-12-18T04:28:18Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <comment>Made with qME and GIMP.</comment>
      <text xml:space="preserve" bytes="23">Made with qME and GIMP.</text>
      <sha1>hogz82xxxtd8wp077ne75njy3iitdcq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:weapon nailgun.png</title>
    <ns>6</ns>
    <id>1060</id>
    <revision>
      <id>3056</id>
      <timestamp>2013-12-18T04:30:18Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <comment>Made with qME and GIMP.</comment>
      <text xml:space="preserve" bytes="23">Made with qME and GIMP.</text>
      <sha1>hogz82xxxtd8wp077ne75njy3iitdcq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:weapon rocketlauncher.png</title>
    <ns>6</ns>
    <id>1057</id>
    <revision>
      <id>3053</id>
      <timestamp>2013-12-18T04:26:58Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <comment>Made with qME and GIMP.</comment>
      <text xml:space="preserve" bytes="23">Made with qME and GIMP.</text>
      <sha1>hogz82xxxtd8wp077ne75njy3iitdcq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:weapon supernailgun.png</title>
    <ns>6</ns>
    <id>1059</id>
    <revision>
      <id>3055</id>
      <timestamp>2013-12-18T04:29:41Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <comment>Made with qME and GIMP.</comment>
      <text xml:space="preserve" bytes="23">Made with qME and GIMP.</text>
      <sha1>hogz82xxxtd8wp077ne75njy3iitdcq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:weapon supershotgun.png</title>
    <ns>6</ns>
    <id>1061</id>
    <revision>
      <id>3058</id>
      <timestamp>2013-12-18T04:34:05Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <comment>Made with qME and GIMP.</comment>
      <text xml:space="preserve" bytes="23">Made with qME and GIMP.</text>
      <sha1>hogz82xxxtd8wp077ne75njy3iitdcq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>File:weapon thunderbolt.png</title>
    <ns>6</ns>
    <id>1056</id>
    <revision>
      <id>3052</id>
      <timestamp>2013-12-18T04:25:14Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <comment>Made with qME and GIMP.</comment>
      <text xml:space="preserve" bytes="23">Made with qME and GIMP.</text>
      <sha1>hogz82xxxtd8wp077ne75njy3iitdcq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Fimg</title>
    <ns>0</ns>
    <id>1045</id>
    <revision>
      <id>3004</id>
      <timestamp>2013-09-13T05:11:49Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>Separate article for Fimg</comment>
      <text xml:space="preserve" bytes="654">Fimg is an image editor for sprites and similar assets in Quake by [[FrikaC]] for Windows. Created primarily for his own purposes, Fimg was secondarily meant to replace [[AdQuedit]] to work around with that project's bugs.

==File Formats==
Fimg supports the following file formats:
* [[.spr]]
* [[.spr32]]
* [[.wad]]
* [[.lmp]]
* [[.mip]]
* .bmp
* .cut
* .cur
* .dcx
* .dds
* .dib
* .ico
* .icb
* .gif
* .jpg
* .jpe
* .jpeg
* .jng
* .lbm
* .lif
* .mng
* .pcd
* .pcx
* .pic
* .png
* .pnm
* .psd
* .psp
* .raw
* .sgi
* .tga
* .tif
* .vda
* .vst
* .wal
* .xpm

==External Links==
[http://forums.inside3d.com/viewtopic.php?p=2916 Release Thread on Inside3d]</text>
      <sha1>mt8729hp5jxx2bx50o0lr3kgcyxigad</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3007</id>
      <parentid>3004</parentid>
      <timestamp>2013-09-13T05:19:36Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <comment>added screenshot</comment>
      <text xml:space="preserve" bytes="711">[[File:Fimg.JPG|200px|thumb|right|Fimg loading an spr32]]Fimg is an image editor for sprites and similar assets in Quake by [[FrikaC]] for Windows. Created primarily for his own purposes, Fimg was secondarily meant to replace [[AdQuedit]] to work around with that project's bugs.

==File Formats==
Fimg supports the following file formats:
* [[.spr]]
* [[.spr32]]
* [[.wad]]
* [[.lmp]]
* [[.mip]]
* .bmp
* .cut
* .cur
* .dcx
* .dds
* .dib
* .ico
* .icb
* .gif
* .jpg
* .jpe
* .jpeg
* .jng
* .lbm
* .lif
* .mng
* .pcd
* .pcx
* .pic
* .png
* .pnm
* .psd
* .psp
* .raw
* .sgi
* .tga
* .tif
* .vda
* .vst
* .wal
* .xpm

==External Links==
[http://forums.inside3d.com/viewtopic.php?p=2916 Release Thread on Inside3d]</text>
      <sha1>f4ettccp2tyntp20mdvvlhdmlean52u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Find</title>
    <ns>0</ns>
    <id>184</id>
    <revision>
      <id>360</id>
      <timestamp>2008-02-22T19:07:18Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page: entity '''find''' (entity ''start'', .string ''field'', string ''match'')  ''start'' = begining of list to search (world, for the begining of list)  ''field'' = entity field that must be e...</comment>
      <text xml:space="preserve" bytes="613">entity '''find''' (entity ''start'', .string ''field'', string ''match'')

''start'' = begining of list to search (world, for the begining of list)

''field'' = entity field that must be examined (ex: targetname)

''match'' = value that must be matched (ex: other.target)

returns the entity found, or world if no entity was found.

Searches the server entity list beginning at ''start'', looking for an entity that has entity.''field'' = ''match''

Example: find the first player entity:

e = find( world, classname, &quot;player&quot;);

Take care that field is a name of an entity field, without dot, and without quotes.</text>
      <sha1>6r9p5irjgtv661f26vy8lfaj7swaowd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>380</id>
      <parentid>360</parentid>
      <timestamp>2008-02-23T15:47:56Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <text xml:space="preserve" bytes="614"> entity '''find''' (entity ''start'', .string ''field'', string ''match'')

''start'' = begining of list to search (world, for the begining of list)

''field'' = entity field that must be examined (ex: targetname)

''match'' = value that must be matched (ex: other.target)

returns the entity found, or world if no entity was found.

Searches the server entity list beginning at ''start'', looking for an entity that has entity.''field'' = ''match''

Example: find the first player entity:

e = find( world, classname, &quot;player&quot;);

Take care that field is a name of an entity field, without dot, and without quotes.</text>
      <sha1>oez7zfqwxko7co4l063uayk4yg3f6bb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>381</id>
      <parentid>380</parentid>
      <timestamp>2008-02-23T15:49:30Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <text xml:space="preserve" bytes="618"> entity '''find''' (entity ''start'', .string ''field'', string ''match'')

''start'' = begining of list to search (world, for the begining of list)

''field'' = entity field that must be examined (ex: targetname)

''match'' = value that must be matched (ex: other.target)

returns the entity found, or world if no entity was found.

Searches the server entity list beginning at ''start'', looking for an entity that has entity.''field'' = ''match''

Example: find the first player entity:

e = find( world, classname, &quot;player&quot;);

Take care that ''field'' is a name of an entity field, without dot, and without quotes.</text>
      <sha1>61fu1gcu6uc1cc5hefxio0a8qpyavtb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>383</id>
      <parentid>381</parentid>
      <timestamp>2008-02-23T15:56:48Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <text xml:space="preserve" bytes="825"> entity '''find''' (entity ''start'', .string ''field'', string ''match'')

''start'' = begining of list to search (world, for the begining of list)

''field'' = entity field that must be examined (ex: targetname)

''match'' = value that must be matched (ex: other.target)

returns the entity found, or world if no entity was found.

Searches the server entity list beginning at ''start'', looking for an entity that has entity.''field'' = ''match''

Example: find the first player entity:

e = find( world, classname, &quot;player&quot;);

Take care that ''field'' is a name of an entity field, without dot, and without quotes.

Please note that, depending on the type of the field that you want to match (which can be a string, float or entity) you have to use the corresponding function '''find''', [[findfloat]] or [[findentity]] !</text>
      <sha1>hnafaw9li4hnmlm9wtemrcirpgilow5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>384</id>
      <parentid>383</parentid>
      <timestamp>2008-02-23T16:00:01Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <text xml:space="preserve" bytes="1036"> entity '''find''' (entity ''start'', .string ''field'', string ''match'')

''start'' = begining of list to search (world, for the begining of list)

''field'' = entity field that must be examined (ex: targetname)

''match'' = value that must be matched (ex: other.target)

returns the entity found, or world if no entity was found.

Searches the server entity list beginning at ''start'', looking for an entity that has entity.''field'' = ''match''

Example: find the first player entity:

e = find( world, classname, &quot;player&quot;);

Take care that ''field'' is a name of an entity field, without dot, and without quotes.

Please note that, depending on the type of the field that you want to match (which can be a string, float or entity) you have to use the corresponding function '''find''', [[findfloat]] or [[findentity]] !

In the example above '''find'''(...) was used because '''find''' works for entity fields that are of type '''string''' . And the field that was looked up (classname) was defined somewhere as: .string classname</text>
      <sha1>2vmlrhepn3g5ygvkvh6wvnk4grp97lh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Findchain</title>
    <ns>0</ns>
    <id>879</id>
    <redirect title="findchain" />
    <revision>
      <id>2525</id>
      <timestamp>2013-03-29T14:22:02Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Findchain]] to [[findchain]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="23">#REDIRECT [[findchain]]</text>
      <sha1>i5xgnlcsrb9hisi1x6k1234na9nk113</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Findentity</title>
    <ns>0</ns>
    <id>880</id>
    <redirect title="findentity" />
    <revision>
      <id>2527</id>
      <timestamp>2013-03-29T14:22:02Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Findentity]] to [[findentity]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="24">#REDIRECT [[findentity]]</text>
      <sha1>ru1mpwyzuupltzltrjikfmg686zjpyt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Findfloat</title>
    <ns>0</ns>
    <id>821</id>
    <redirect title="findfloat" />
    <revision>
      <id>2404</id>
      <timestamp>2013-03-28T15:03:38Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Spirit moved page [[Findfloat]] to [[findfloat]]: lowercase</comment>
      <text xml:space="preserve" bytes="23">#REDIRECT [[findfloat]]</text>
      <sha1>qh2mytf9y6yfev9ywcwll4mdaeo937m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Findradius</title>
    <ns>0</ns>
    <id>185</id>
    <revision>
      <id>361</id>
      <timestamp>2008-02-22T19:13:06Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page: entity '''findradius''' (vector ''origin'', float ''radius'')  origin = origin of sphere  radius = radius of sphere  Returns a '''chain''' of entities that have their origins within a sphe...</comment>
      <text xml:space="preserve" bytes="449">entity '''findradius''' (vector ''origin'', float ''radius'')
 origin = origin of sphere
 radius = radius of sphere

Returns a '''chain''' of entities that have their origins within a spherical area.
The entity returned is e, and the next in the chain is e.chain, until e==FALSE.
Typical usage: find and harm the victims of an explosion.

 e = findradius( origin, radius)
 while(e)
 {
   T_Damage(e, ... ) // Let God sort his ones!
   e = e.chain
 }</text>
      <sha1>eizyoisqsu32e26x1ozx9152wpg1onf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>FitzQuake</title>
    <ns>0</ns>
    <id>560</id>
    <redirect title="Fitzquake" />
    <revision>
      <id>1451</id>
      <timestamp>2009-11-17T08:37:21Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>[[FitzQuake]] moved to [[Fitzquake]]</comment>
      <text xml:space="preserve" bytes="23">#REDIRECT [[Fitzquake]]</text>
      <sha1>lzc4lbdmnxl3ieinl376e663xzzg2cy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Fitzquake</title>
    <ns>0</ns>
    <id>163</id>
    <revision>
      <id>260</id>
      <timestamp>2007-11-03T22:53:05Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>New page: {{Infobox Engine |name=FitzQuake |based-on=[[GLQuake]] |author=[[metlslime]] |first-release=[http://celephais.net/fitzquake/files/fitzquake060.zip?M=A May 15 2002] |newest-release=[http://...</comment>
      <text xml:space="preserve" bytes="720">{{Infobox Engine
|name=FitzQuake
|based-on=[[GLQuake]]
|author=[[metlslime]]
|first-release=[http://celephais.net/fitzquake/files/fitzquake060.zip?M=A May 15 2002]
|newest-release=[http://celephais.net/fitzquake/files/fitzquake080.zip?M=D May 26 2005]
|website=[http://celephais.net/fitzquake/ here]
}}

[[metlslime]]'s Quake engine. Focused on fixing GLQuake's rendering bugs that had made it in some ways inferior to software Quake. It also features expanded limits in regards to the original form of Quake, and for such is largely preferred by mappers.

The website contains detailed information on the console commands and provides other versions of the engine, as well as source and setgamma utilities.

{{Engines}}</text>
      <sha1>afkudp15j5cfwc917lz6jzedibl5j22</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>641</id>
      <parentid>260</parentid>
      <timestamp>2008-04-21T20:41:18Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <text xml:space="preserve" bytes="744">{{Infobox Engine
|name=FitzQuake
|based-on=[[GLQuake]]
|author=[[metlslime]]
|first-release=[http://celephais.net/fitzquake/files/fitzquake060.zip?M=A May 15 2002]
|newest-release=[http://celephais.net/fitzquake/files/fitzquake080.zip?M=D May 26 2005]
|website=[http://celephais.net/fitzquake/ here]
}}

[[metlslime]]'s Quake engine. Focused on fixing GLQuake's rendering bugs that had made it in some ways inferior to software Quake. It also features expanded limits in regards to the original form of Quake, and for such is largely preferred by mappers.

The website contains detailed information on the console commands and provides other versions of the engine, as well as source and setgamma utilities.

{{Engines}}
{{GL NetQuake Engines}}</text>
      <sha1>orwx4qf34mgwxjr8pz3w822fh9vuczq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1084</id>
      <parentid>641</parentid>
      <timestamp>2009-07-12T06:55:26Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>expanded content; copy edits</comment>
      <text xml:space="preserve" bytes="1128">{{Infobox Engine
|name=FitzQuake
|based-on=[[GLQuake]]
|author=[[metlslime]]
|first-release=[http://celephais.net/fitzquake/files/fitzquake060.zip May 15 2002]
|newest-release=[http://celephais.net/fitzquake/files/fitzquake085.zip Feb 12 2009]
|website=[http://www.celephais.net/fitzquake/ celephais.net/fitzquake/]
}}

'''FitzQuake''' is [[metlslime]]'s Quake engine. It focused on fixing [[GLQuake]]'s rendering bugs that had made it in some ways inferior to software Quake, and on adding some conveniences for both mappers and general users.

:''&quot;While I have made extensive changes to the code, I pretty much use the same OpenGL features that the original glquake uses. Therefore, if you can run glquake, you can probably run Fitzquake.&quot;''

FitzQuake also features expanded limits in regards to the original form of Quake, and for such is largely preferred by mappers.

The website contains detailed information on the console commands and provides other versions of the engine, as well as source and setgamma utilities.

Official distribution site:
* http://www.celephais.net/fitzquake/

{{Engines}}
{{GL NetQuake Engines}}</text>
      <sha1>l3tv7tld3m2pjtcni10t134js7yj7fc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1085</id>
      <parentid>1084</parentid>
      <timestamp>2009-07-12T06:57:33Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>+SDL port</comment>
      <text xml:space="preserve" bytes="1307">{{Infobox Engine
|name=FitzQuake
|based-on=[[GLQuake]]
|author=[[metlslime]]
|first-release=[http://celephais.net/fitzquake/files/fitzquake060.zip May 15 2002]
|newest-release=[http://celephais.net/fitzquake/files/fitzquake085.zip Feb 12 2009]
|website=[http://www.celephais.net/fitzquake/ celephais.net/fitzquake/]
}}

'''FitzQuake''' is [[metlslime]]'s Quake engine. It focused on fixing [[GLQuake]]'s rendering bugs that had made it in some ways inferior to software Quake, and on adding some conveniences for both mappers and general users.

:''&quot;While I have made extensive changes to the code, I pretty much use the same OpenGL features that the original glquake uses. Therefore, if you can run glquake, you can probably run Fitzquake.&quot;''

FitzQuake also features expanded limits in regards to the original form of Quake, and for such is largely preferred by mappers.

The website contains detailed information on the console commands and provides other versions of the engine, as well as source and setgamma utilities.

The official distribution is for Win32, but there is an SDL port which can run on Linux and Mac OS X.

Official distribution sites:
* [http://www.celephais.net/fitzquake/ FitzQuake]
* [http://www.kristianduske.com/fitzquake/ FitzQuake SDL port]

{{Engines}}
{{GL NetQuake Engines}}</text>
      <sha1>oakfvlnfam75gez99n7kfw9wugefz3e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1448</id>
      <parentid>1085</parentid>
      <timestamp>2009-11-16T08:18:06Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="1323">{{Infobox Engine
|name=FitzQuake
|based-on=[[GLQuake]]
|author=[[metlslime]]
|first-release=[http://celephais.net/fitzquake/files/fitzquake060.zip May 15 2002]
|newest-release=[http://celephais.net/fitzquake/files/fitzquake085.zip Feb 12 2009]
|website=[http://www.celephais.net/fitzquake/ celephais.net/fitzquake/]
}}

'''FitzQuake''' is [[metlslime]]'s Quake engine. It focused on fixing [[GLQuake]]'s rendering bugs that had made it in some ways inferior to software Quake, and on adding some conveniences for both mappers and general users.

:''&quot;While I have made extensive changes to the code, I pretty much use the same OpenGL features that the original glquake uses. Therefore, if you can run glquake, you can probably run Fitzquake.&quot;''

FitzQuake also features expanded limits in regards to the original form of Quake, and for such is largely preferred by mappers.

The website contains detailed information on the console commands and provides other versions of the engine, as well as source and setgamma utilities.

The official distribution is for Win32, but there is an SDL port which can run on Linux and Mac OS X.

Official distribution sites:
* [http://www.celephais.net/fitzquake/ FitzQuake]
* [http://www.kristianduske.com/fitzquake/ FitzQuake SDL port]

{{Engines}}
{{OpenGL Engines}}
{{NetQuake Engines}}</text>
      <sha1>9qrq0p2bmtsawe0067i9uqae0z0wnap</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1449</id>
      <parentid>1448</parentid>
      <timestamp>2009-11-16T08:18:22Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="1307">{{Infobox Engine
|name=FitzQuake
|based-on=[[GLQuake]]
|author=[[metlslime]]
|first-release=[http://celephais.net/fitzquake/files/fitzquake060.zip May 15 2002]
|newest-release=[http://celephais.net/fitzquake/files/fitzquake085.zip Feb 12 2009]
|website=[http://www.celephais.net/fitzquake/ celephais.net/fitzquake/]
}}

'''FitzQuake''' is [[metlslime]]'s Quake engine. It focused on fixing [[GLQuake]]'s rendering bugs that had made it in some ways inferior to software Quake, and on adding some conveniences for both mappers and general users.

:''&quot;While I have made extensive changes to the code, I pretty much use the same OpenGL features that the original glquake uses. Therefore, if you can run glquake, you can probably run Fitzquake.&quot;''

FitzQuake also features expanded limits in regards to the original form of Quake, and for such is largely preferred by mappers.

The website contains detailed information on the console commands and provides other versions of the engine, as well as source and setgamma utilities.

The official distribution is for Win32, but there is an SDL port which can run on Linux and Mac OS X.

Official distribution sites:
* [http://www.celephais.net/fitzquake/ FitzQuake]
* [http://www.kristianduske.com/fitzquake/ FitzQuake SDL port]

{{Engines}}
{{GL NetQuake Engines}}</text>
      <sha1>oakfvlnfam75gez99n7kfw9wugefz3e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1450</id>
      <parentid>1449</parentid>
      <timestamp>2009-11-17T08:37:21Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <minor/>
      <comment>[[FitzQuake]] moved to [[Fitzquake]]</comment>
      <text xml:space="preserve" bytes="1307">{{Infobox Engine
|name=FitzQuake
|based-on=[[GLQuake]]
|author=[[metlslime]]
|first-release=[http://celephais.net/fitzquake/files/fitzquake060.zip May 15 2002]
|newest-release=[http://celephais.net/fitzquake/files/fitzquake085.zip Feb 12 2009]
|website=[http://www.celephais.net/fitzquake/ celephais.net/fitzquake/]
}}

'''FitzQuake''' is [[metlslime]]'s Quake engine. It focused on fixing [[GLQuake]]'s rendering bugs that had made it in some ways inferior to software Quake, and on adding some conveniences for both mappers and general users.

:''&quot;While I have made extensive changes to the code, I pretty much use the same OpenGL features that the original glquake uses. Therefore, if you can run glquake, you can probably run Fitzquake.&quot;''

FitzQuake also features expanded limits in regards to the original form of Quake, and for such is largely preferred by mappers.

The website contains detailed information on the console commands and provides other versions of the engine, as well as source and setgamma utilities.

The official distribution is for Win32, but there is an SDL port which can run on Linux and Mac OS X.

Official distribution sites:
* [http://www.celephais.net/fitzquake/ FitzQuake]
* [http://www.kristianduske.com/fitzquake/ FitzQuake SDL port]

{{Engines}}
{{GL NetQuake Engines}}</text>
      <sha1>oakfvlnfam75gez99n7kfw9wugefz3e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1452</id>
      <parentid>1450</parentid>
      <timestamp>2009-11-17T08:37:33Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="1307">{{Infobox Engine
|name=FitzQuake
|based-on=[[GLQuake]]
|author=[[metlslime]]
|first-release=[http://celephais.net/fitzquake/files/fitzquake060.zip May 15 2002]
|newest-release=[http://celephais.net/fitzquake/files/fitzquake085.zip Feb 12 2009]
|website=[http://www.celephais.net/fitzquake/ celephais.net/fitzquake/]
}}

'''Fitzquake''' is [[metlslime]]'s Quake engine. It focused on fixing [[GLQuake]]'s rendering bugs that had made it in some ways inferior to software Quake, and on adding some conveniences for both mappers and general users.

:''&quot;While I have made extensive changes to the code, I pretty much use the same OpenGL features that the original glquake uses. Therefore, if you can run glquake, you can probably run Fitzquake.&quot;''

FitzQuake also features expanded limits in regards to the original form of Quake, and for such is largely preferred by mappers.

The website contains detailed information on the console commands and provides other versions of the engine, as well as source and setgamma utilities.

The official distribution is for Win32, but there is an SDL port which can run on Linux and Mac OS X.

Official distribution sites:
* [http://www.celephais.net/fitzquake/ FitzQuake]
* [http://www.kristianduske.com/fitzquake/ FitzQuake SDL port]

{{Engines}}
{{GL NetQuake Engines}}</text>
      <sha1>8qm7s9lhsbsgfsrs4fyxunhcwyjve0s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1453</id>
      <parentid>1452</parentid>
      <timestamp>2009-11-17T08:38:16Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="1307">{{Infobox Engine
|name=FitzQuake
|based-on=[[GLQuake]]
|author=[[metlslime]]
|first-release=[http://celephais.net/fitzquake/files/fitzquake060.zip May 15 2002]
|newest-release=[http://celephais.net/fitzquake/files/fitzquake085.zip Feb 12 2009]
|website=[http://www.celephais.net/fitzquake/ celephais.net/fitzquake/]
}}

'''Fitzquake''' is [[metlslime]]'s Quake engine. It focused on fixing [[GLQuake]]'s rendering bugs that had made it in some ways inferior to software Quake, and on adding some conveniences for both mappers and general users.

:''&quot;While I have made extensive changes to the code, I pretty much use the same OpenGL features that the original glquake uses. Therefore, if you can run glquake, you can probably run Fitzquake.&quot;''

Fitzquake also features expanded limits in regards to the original form of Quake, and for such is largely preferred by mappers.

The website contains detailed information on the console commands and provides other versions of the engine, as well as source and setgamma utilities.

The official distribution is for Win32, but there is an SDL port which can run on Linux and Mac OS X.

Official distribution sites:
* [http://www.celephais.net/fitzquake/ Fitzquake]
* [http://www.kristianduske.com/fitzquake/ Fitzquake SDL port]

{{Engines}}
{{GL NetQuake Engines}}</text>
      <sha1>huikokb2c8bsl9bxuaeapgchmahg9cd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1605</id>
      <parentid>1453</parentid>
      <timestamp>2010-05-12T09:00:46Z</timestamp>
      <contributor>
        <ip>67.188.81.46</ip>
      </contributor>
      <text xml:space="preserve" bytes="1307">{{Infobox Engine
|name=Fitzquake
|based-on=[[GLQuake]]
|author=[[metlslime]]
|first-release=[http://celephais.net/fitzquake/files/fitzquake060.zip May 15 2002]
|newest-release=[http://celephais.net/fitzquake/files/fitzquake085.zip Feb 12 2009]
|website=[http://www.celephais.net/fitzquake/ celephais.net/fitzquake/]
}}

'''Fitzquake''' is [[metlslime]]'s Quake engine. It focused on fixing [[GLQuake]]'s rendering bugs that had made it in some ways inferior to software Quake, and on adding some conveniences for both mappers and general users.

:''&quot;While I have made extensive changes to the code, I pretty much use the same OpenGL features that the original glquake uses. Therefore, if you can run glquake, you can probably run Fitzquake.&quot;''

Fitzquake also features expanded limits in regards to the original form of Quake, and for such is largely preferred by mappers.

The website contains detailed information on the console commands and provides other versions of the engine, as well as source and setgamma utilities.

The official distribution is for Win32, but there is an SDL port which can run on Linux and Mac OS X.

Official distribution sites:
* [http://www.celephais.net/fitzquake/ Fitzquake]
* [http://www.kristianduske.com/fitzquake/ Fitzquake SDL port]

{{Engines}}
{{GL NetQuake Engines}}</text>
      <sha1>b8n8xlrtm6yltwe4wbusqu0o2i7gk0j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Fitzquake Protocol</title>
    <ns>0</ns>
    <id>558</id>
    <revision>
      <id>1434</id>
      <timestamp>2009-11-15T12:33:02Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>Created initial version, seems fairly complete.</comment>
      <text xml:space="preserve" bytes="10275">The Fitzquake protocol is derived from the [[Netquake Protocol]] and was introduced in Fitzquake 0.85.  Currently no other clients or servers support it.

==Overview of Features==
The Fitzquake protocol adds support for increased limits such as model and sound precaches (normal limit 255), model frames (normal limit 255), edicts (), player armor and ammo stats (normally 255).  It also supports entity and weaponmodel alpha, and adds timing hints for model interpolation.

===Model index &gt; 255===
Quake normally sends model indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Entity frame index &gt; 255===
Quake normally sends entity frame indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Sound index &gt; 255===
Quake normally sends sound indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Edicts &gt; 8192===
Normally any edict beyond the first 8192 can't play a sound effect, because only 13 bits are devoted to the edict number in a sound message.  Fitzquake can send a full 2-byte edict number in the sound message, so that up to 65535 edicts can play sounds.

===Player ammo and armor &gt; 255===
Player ammo and armor is normally sent as a single byte.  Fitzquake can send a second byte so that the client can recieve ammo/armor values up to 65535.

===High-precision aiming===
Client angles are sent as shorts instead of bytes, for more precise aiming (especially noticable when zoomed in.)
    
===Entity alpha===
Entity alpha is stored on the server as a [[.alpha]] field, and can be hard-coded in the bsp file or set dynamically by [[QuakeC]].  The server will support hard-coded values from the bsp even if the [[progs.dat]] was not compiled with the .alpha field.

Entities with alpha &quot;0&quot; will have a default alpha value, and generally be fully visible.  To explicitly set an entity to invisible, set the alpha to &quot;-1&quot;.  Values between &quot;1&quot; and &quot;0&quot; will interpreted normally.  Note that a map entity with no alpha field specified will get the value &quot;0&quot; at load time, and therefore be default.

Water surfaces on entities that have default alpha will obey r_wateralpha, but water surfaces on entities that have a specified alpha value will ignore r_wateralpha and use the entity alpha.

===Weapon model alpha===
Player weapon model alpha is transmitted seperately from the client entity alpha, but for now the Fitzquake server uses the client entity's .alpha field for both.  There is currently no way for QuakeC to set the weapon alpha specifically.

===Interpolation Timing Hints===
For entities that don't animate at exactly 10Hz, such as crucified zombies, this hint tells the client what interval to use when lerping to the new frame.  This interval is taken from the entity's [[.nextthink]] value, subtracted from the current server time.  It is only sent to clients when it does not equal 0.1.

==Client/Server Messages==
The following client/server messages have been added, or their behavior has changed:

===entity update===
The existing update flags field can have 5 new flags.

* U_EXTEND1 - another byte of flags will follow the first two.  This is sent whenever any of the next four flags are used.
* U_ALPHA - entity has alpha different than its baseline. Alpha is encoded as a single byte, with a 0 representing &quot;default&quot; alpha, and values 1-255 representing the range 0.0-1.0.  Use the ENTALPHA_ macros (below) to convert correctly between floats and bytes. This byte is sent immediately after the U_ANGLE3 angle, if present.
* U_FRAME2 - entity frame is &gt;255, so a second byte will be sent. It is sent immediately after the U_ALPHA byte, if present.
* U_MODEL2 - entity modelindex is &gt;255, so a second byte will be sent.  It is sent immediately after the U_ALPHA byte, if present.
* U_LERPFINISH - nextthink interval (ent-&gt;v.nextthink - sv.time) is not exactly 0.1 seconds, so the actual interval will be sent as a byte.  Intervals of 0.0-1.0 seconds map to values 0-255.  Anything &gt;1 is clamped.

===svc_clientdata===
The existing flags field can have 11 new flags:

* SU_EXTEND1 - a third byte of flags follows the first two.
* SU_WEAPON2 - weapon model index is &gt;255, so a second byte will be sent. It is sent immediately after the STAT_ACTIVEWEAPON byte.
* SU_ARMOR2 - armor value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_WEAPON2 byte, if present.
* SU_AMMO2 - current ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ARMOR2 byte, if present.
* SU_SHELLS2 - shell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_AMMO2 byte, if present.
* SU_NAILS2 - nail ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_SHELLS2 byte, if present.
* SU_ROCKETS2 - rocket ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_NAILS2 byte, if present.
* SU_CELLS2 - cell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ROCKETS2 byte, if present.
* SU_EXTEND2 - a fourth byte of flags follows the first three.
* SU_WEAPONFRAME2 - weapon frame index is &gt;255, so a second byte will be sent. It is sent immediately after the SU_CELLS2 byte, if present.
* SU_WEAPONALPHA - weapon alpha is not default, so an alpha byte will be sent. It is encoded the same as U_ALPHA. It is sent immediately after the SU_WEAPONFRAME2 byte, if present.

===svc_sound===
The existing flags field can have 2 new flags. 

* SND_LARGEENTITY - the edict is 2 full bytes and the following byte is the channel, rather than packing them into a single short (13 bits for edict, 3 bit for channel.)  This is used whenever the edict number is &gt; 8191.
* SND_LARGESOUND - the sound index is 2 bytes instead of 1.  This is sent when the sound index is &gt; 255.

===svc_spawnbaseline2 (new)===
This message is sent instead of [[svc_spawnbaseline]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnbaseline except a new &quot;flags&quot; byte comes at the beginning of the message.  This byte can have 3 flags:

* B_LARGEMODEL - model index is sent as a short instead of a byte.
* B_LARGEFRAME - frame index is sent as a short instead of a byte.
* B_ALPHA - an alpha byte is added at the end of the message.  Encoded the same as U_ALPHA.

===svc_spawnstatic2 (new)===
This message is sent instead of [[svc_spawnstatic]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnstatic except a new &quot;flags&quot; byte comes at the beginning of the message.  The flags are intepreted the same as svc_spawnbaseline2.

===svc_spawnstaticsound2 (new)===
This message is sent instead of [[svc_spawnstaticsound]] if sound index is &gt; 255.  It is the same as svc_spawnstaticsound except the sound index is 2 bytes.

===clc_move===
Client angles are always sent to the server as shorts instead of bytes.  The angles are encoded and decoded as follows:

&lt;pre&gt;
void MSG_WriteAngle16 (sizebuf_t *sb, float f)
{
    MSG_WriteShort (sb, Q_rint(f * 65536.0 / 360.0) &amp; 65535);
}

float MSG_ReadAngle16 (void)
{
    return MSG_ReadShort() * (360.0 / 65536);
}
&lt;/pre&gt;

==Definitions==

&lt;pre&gt;
#define PROTOCOL_FITZQUAKE 666

//flags for entity update messages
#define U_EXTEND1       (1&lt;&lt;15) // another byte to follow
#define U_ALPHA         (1&lt;&lt;16) // 1 byte, uses ENTALPHA_ENCODE, not sent if equal to baseline
#define U_FRAME2        (1&lt;&lt;17) // 1 byte, this is .frame &amp; 0xFF00 (second byte)
#define U_MODEL2        (1&lt;&lt;18) // 1 byte, this is .modelindex &amp; 0xFF00 (second byte)
#define U_LERPFINISH    (1&lt;&lt;19) // 1 byte, 0.0-1.0 maps to 0-255, not sent if exactly 0.1, this is ent-&gt;v.nextthink - sv.time, used for lerping

//flags for client update messages
#define SU_EXTEND1      (1&lt;&lt;15) // another byte to follow
#define SU_WEAPON2      (1&lt;&lt;16) // 1 byte, this is .weaponmodel &amp; 0xFF00 (second byte)
#define SU_ARMOR2       (1&lt;&lt;17) // 1 byte, this is .armorvalue &amp; 0xFF00 (second byte)
#define SU_AMMO2        (1&lt;&lt;18) // 1 byte, this is .currentammo &amp; 0xFF00 (second byte)
#define SU_SHELLS2      (1&lt;&lt;19) // 1 byte, this is .ammo_shells &amp; 0xFF00 (second byte)
#define SU_NAILS2       (1&lt;&lt;20) // 1 byte, this is .ammo_nails &amp; 0xFF00 (second byte)
#define SU_ROCKETS2     (1&lt;&lt;21) // 1 byte, this is .ammo_rockets &amp; 0xFF00 (second byte)
#define SU_CELLS2       (1&lt;&lt;22) // 1 byte, this is .ammo_cells &amp; 0xFF00 (second byte)
#define SU_EXTEND2      (1&lt;&lt;23) // another byte to follow
#define SU_WEAPONFRAME2 (1&lt;&lt;24) // 1 byte, this is .weaponframe &amp; 0xFF00 (second byte)
#define SU_WEAPONALPHA  (1&lt;&lt;25) // 1 byte, this is alpha for weaponmodel, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//flags for sound messages
#define SND_LARGEENTITY (1&lt;&lt;3)  // a short + byte (instead of just a short)
#define SND_LARGESOUND  (1&lt;&lt;4)  // a short soundindex (instead of a byte)

//flags for entity baseline messages
#define B_LARGEMODEL    (1&lt;&lt;0)  // modelindex is short instead of byte
#define B_LARGEFRAME    (1&lt;&lt;1)  // frame is short instead of byte
#define B_ALPHA         (1&lt;&lt;2)  // 1 byte, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//new server messages
#define svc_spawnbaseline2      42  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstatic2        43  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstaticsound2   44  // [coord3] [short] samp [byte] vol [byte] aten

//alpha-related definitions and macros
#define ENTALPHA_DEFAULT    0   //entity's alpha is &quot;default&quot; (i.e. water obeys r_wateralpha) -- must be zero so zeroed out memory works
#define ENTALPHA_ZERO       1   //entity is invisible (lowest possible alpha)
#define ENTALPHA_ONE        255 //entity is fully opaque (highest possible alpha)
#define ENTALPHA_ENCODE(a)  (((a)==0)?ENTALPHA_DEFAULT:Q_rint(CLAMP(1,(a)*254.0f+1,255))) //server convert to byte to send to client
#define ENTALPHA_DECODE(a)  (((a)==ENTALPHA_DEFAULT)?1.0f:((float)(a)-1)/(254)) //client convert to float for rendering
#define ENTALPHA_TOSAVE(a)  (((a)==ENTALPHA_DEFAULT)?0.0f:(((a)==ENTALPHA_ZERO)?-1.0f:((float)(a)-1)/(254))) //server convert to float for savegame
&lt;/pre&gt;</text>
      <sha1>2bd3juqxotpvudobu43atyd82ged7kl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1435</id>
      <parentid>1434</parentid>
      <timestamp>2009-11-15T12:34:50Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="10326">The Fitzquake protocol is derived from the [[Netquake Protocol]] and was introduced in Fitzquake 0.85.  Currently no other clients or servers support it.

==Overview of Features==
The Fitzquake protocol adds support for increased limits such as model and sound precaches (normal limit 255), model frames (normal limit 255), edicts (), player armor and ammo stats (normally 255).  It also supports entity and weaponmodel alpha, and adds timing hints for model interpolation.

===Model index &gt; 255===
Quake normally sends model indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Entity frame index &gt; 255===
Quake normally sends entity frame indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Sound index &gt; 255===
Quake normally sends sound indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Edicts &gt; 8192===
Normally any edict beyond the first 8192 can't play a sound effect, because only 13 bits are devoted to the edict number in a sound message.  Fitzquake can send a full 2-byte edict number in the sound message, so that up to 65535 edicts can play sounds.

===Player ammo and armor &gt; 255===
Player ammo and armor is normally sent as a single byte.  Fitzquake can send a second byte so that the client can recieve ammo/armor values up to 65535.

===High-precision aiming===
Client angles are sent as shorts instead of bytes, for more precise aiming (especially noticable when zoomed in.)
    
===Entity alpha===
Entity alpha is stored on the server as a [[.alpha]] field, and can be hard-coded in the bsp file or set dynamically by [[QuakeC]].  The server will support hard-coded values from the bsp even if the [[progs.dat]] was not compiled with the .alpha field.

Entities with alpha &quot;0&quot; will have a default alpha value, and generally be fully visible.  To explicitly set an entity to invisible, set the alpha to &quot;-1&quot;.  Values between &quot;1&quot; and &quot;0&quot; will interpreted normally.  Note that a map entity with no alpha field specified will get the value &quot;0&quot; at load time, and therefore be default.

Water surfaces on entities that have default alpha will obey r_wateralpha, but water surfaces on entities that have a specified alpha value will ignore r_wateralpha and use the entity alpha.

===Weapon model alpha===
Player weapon model alpha is transmitted seperately from the client entity alpha, but for now the Fitzquake server uses the client entity's .alpha field for both.  There is currently no way for QuakeC to set the weapon alpha specifically.

===Interpolation Timing Hints===
For entities that don't animate at exactly 10Hz, such as crucified zombies, this hint tells the client what interval to use when lerping to the new frame.  This interval is taken from the entity's [[.nextthink]] value, subtracted from the current server time.  It is only sent to clients when it does not equal 0.1.

==Client Messages==
The following client messages have changed:

===clc_move===
Client angles are always sent to the server as shorts instead of bytes.  The angles are encoded and decoded as follows:

&lt;pre&gt;
void MSG_WriteAngle16 (sizebuf_t *sb, float f)
{
    MSG_WriteShort (sb, Q_rint(f * 65536.0 / 360.0) &amp; 65535);
}

float MSG_ReadAngle16 (void)
{
    return MSG_ReadShort() * (360.0 / 65536);
}
&lt;/pre&gt;

==Server Messages==
The following server messages have been added, or their behavior has changed:

===entity update===
The existing update flags field can have 5 new flags.

* U_EXTEND1 - another byte of flags will follow the first two.  This is sent whenever any of the next four flags are used.
* U_ALPHA - entity has alpha different than its baseline. Alpha is encoded as a single byte, with a 0 representing &quot;default&quot; alpha, and values 1-255 representing the range 0.0-1.0.  Use the ENTALPHA_ macros (below) to convert correctly between floats and bytes. This byte is sent immediately after the U_ANGLE3 angle, if present.
* U_FRAME2 - entity frame is &gt;255, so a second byte will be sent. It is sent immediately after the U_ALPHA byte, if present.
* U_MODEL2 - entity modelindex is &gt;255, so a second byte will be sent.  It is sent immediately after the U_ALPHA byte, if present.
* U_LERPFINISH - nextthink interval (ent-&gt;v.nextthink - sv.time) is not exactly 0.1 seconds, so the actual interval will be sent as a byte.  Intervals of 0.0-1.0 seconds map to values 0-255.  Anything &gt;1 is clamped.

===svc_clientdata===
The existing flags field can have 11 new flags:

* SU_EXTEND1 - a third byte of flags follows the first two.
* SU_WEAPON2 - weapon model index is &gt;255, so a second byte will be sent. It is sent immediately after the STAT_ACTIVEWEAPON byte.
* SU_ARMOR2 - armor value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_WEAPON2 byte, if present.
* SU_AMMO2 - current ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ARMOR2 byte, if present.
* SU_SHELLS2 - shell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_AMMO2 byte, if present.
* SU_NAILS2 - nail ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_SHELLS2 byte, if present.
* SU_ROCKETS2 - rocket ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_NAILS2 byte, if present.
* SU_CELLS2 - cell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ROCKETS2 byte, if present.
* SU_EXTEND2 - a fourth byte of flags follows the first three.
* SU_WEAPONFRAME2 - weapon frame index is &gt;255, so a second byte will be sent. It is sent immediately after the SU_CELLS2 byte, if present.
* SU_WEAPONALPHA - weapon alpha is not default, so an alpha byte will be sent. It is encoded the same as U_ALPHA. It is sent immediately after the SU_WEAPONFRAME2 byte, if present.

===svc_sound===
The existing flags field can have 2 new flags. 

* SND_LARGEENTITY - the edict is 2 full bytes and the following byte is the channel, rather than packing them into a single short (13 bits for edict, 3 bit for channel.)  This is used whenever the edict number is &gt; 8191.
* SND_LARGESOUND - the sound index is 2 bytes instead of 1.  This is sent when the sound index is &gt; 255.

===svc_spawnbaseline2 (new)===
This message is sent instead of [[svc_spawnbaseline]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnbaseline except a new &quot;flags&quot; byte comes at the beginning of the message.  This byte can have 3 flags:

* B_LARGEMODEL - model index is sent as a short instead of a byte.
* B_LARGEFRAME - frame index is sent as a short instead of a byte.
* B_ALPHA - an alpha byte is added at the end of the message.  Encoded the same as U_ALPHA.

===svc_spawnstatic2 (new)===
This message is sent instead of [[svc_spawnstatic]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnstatic except a new &quot;flags&quot; byte comes at the beginning of the message.  The flags are intepreted the same as svc_spawnbaseline2.

===svc_spawnstaticsound2 (new)===
This message is sent instead of [[svc_spawnstaticsound]] if sound index is &gt; 255.  It is the same as svc_spawnstaticsound except the sound index is 2 bytes.

==Definitions==

&lt;pre&gt;
#define PROTOCOL_FITZQUAKE 666

//flags for entity update messages
#define U_EXTEND1       (1&lt;&lt;15) // another byte to follow
#define U_ALPHA         (1&lt;&lt;16) // 1 byte, uses ENTALPHA_ENCODE, not sent if equal to baseline
#define U_FRAME2        (1&lt;&lt;17) // 1 byte, this is .frame &amp; 0xFF00 (second byte)
#define U_MODEL2        (1&lt;&lt;18) // 1 byte, this is .modelindex &amp; 0xFF00 (second byte)
#define U_LERPFINISH    (1&lt;&lt;19) // 1 byte, 0.0-1.0 maps to 0-255, not sent if exactly 0.1, this is ent-&gt;v.nextthink - sv.time, used for lerping

//flags for client update messages
#define SU_EXTEND1      (1&lt;&lt;15) // another byte to follow
#define SU_WEAPON2      (1&lt;&lt;16) // 1 byte, this is .weaponmodel &amp; 0xFF00 (second byte)
#define SU_ARMOR2       (1&lt;&lt;17) // 1 byte, this is .armorvalue &amp; 0xFF00 (second byte)
#define SU_AMMO2        (1&lt;&lt;18) // 1 byte, this is .currentammo &amp; 0xFF00 (second byte)
#define SU_SHELLS2      (1&lt;&lt;19) // 1 byte, this is .ammo_shells &amp; 0xFF00 (second byte)
#define SU_NAILS2       (1&lt;&lt;20) // 1 byte, this is .ammo_nails &amp; 0xFF00 (second byte)
#define SU_ROCKETS2     (1&lt;&lt;21) // 1 byte, this is .ammo_rockets &amp; 0xFF00 (second byte)
#define SU_CELLS2       (1&lt;&lt;22) // 1 byte, this is .ammo_cells &amp; 0xFF00 (second byte)
#define SU_EXTEND2      (1&lt;&lt;23) // another byte to follow
#define SU_WEAPONFRAME2 (1&lt;&lt;24) // 1 byte, this is .weaponframe &amp; 0xFF00 (second byte)
#define SU_WEAPONALPHA  (1&lt;&lt;25) // 1 byte, this is alpha for weaponmodel, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//flags for sound messages
#define SND_LARGEENTITY (1&lt;&lt;3)  // a short + byte (instead of just a short)
#define SND_LARGESOUND  (1&lt;&lt;4)  // a short soundindex (instead of a byte)

//flags for entity baseline messages
#define B_LARGEMODEL    (1&lt;&lt;0)  // modelindex is short instead of byte
#define B_LARGEFRAME    (1&lt;&lt;1)  // frame is short instead of byte
#define B_ALPHA         (1&lt;&lt;2)  // 1 byte, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//new server messages
#define svc_spawnbaseline2      42  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstatic2        43  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstaticsound2   44  // [coord3] [short] samp [byte] vol [byte] aten

//alpha-related definitions and macros
#define ENTALPHA_DEFAULT    0   //entity's alpha is &quot;default&quot; (i.e. water obeys r_wateralpha) -- must be zero so zeroed out memory works
#define ENTALPHA_ZERO       1   //entity is invisible (lowest possible alpha)
#define ENTALPHA_ONE        255 //entity is fully opaque (highest possible alpha)
#define ENTALPHA_ENCODE(a)  (((a)==0)?ENTALPHA_DEFAULT:Q_rint(CLAMP(1,(a)*254.0f+1,255))) //server convert to byte to send to client
#define ENTALPHA_DECODE(a)  (((a)==ENTALPHA_DEFAULT)?1.0f:((float)(a)-1)/(254)) //client convert to float for rendering
#define ENTALPHA_TOSAVE(a)  (((a)==ENTALPHA_DEFAULT)?0.0f:(((a)==ENTALPHA_ZERO)?-1.0f:((float)(a)-1)/(254))) //server convert to float for savegame
&lt;/pre&gt;</text>
      <sha1>flil7awbkrky65ohwiof7llrcsz65oa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1436</id>
      <parentid>1435</parentid>
      <timestamp>2009-11-15T12:35:30Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="10266">The Fitzquake protocol is derived from the [[Netquake Protocol]] and was introduced in Fitzquake 0.85.  Currently no other clients or servers support it.

==Overview of Features==
The Fitzquake protocol adds support for increased limits such as model and sound precaches (normal limit 255), model frames (normal limit 255), edicts (), player armor and ammo stats (normally 255).  It also supports entity and weaponmodel alpha, and adds timing hints for model interpolation.

===Model index &gt; 255===
Quake normally sends model indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Entity frame index &gt; 255===
Quake normally sends entity frame indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Sound index &gt; 255===
Quake normally sends sound indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Edicts &gt; 8192===
Normally any edict beyond the first 8192 can't play a sound effect, because only 13 bits are devoted to the edict number in a sound message.  Fitzquake can send a full 2-byte edict number in the sound message, so that up to 65535 edicts can play sounds.

===Player ammo and armor &gt; 255===
Player ammo and armor is normally sent as a single byte.  Fitzquake can send a second byte so that the client can recieve ammo/armor values up to 65535.

===High-precision aiming===
Client angles are sent as shorts instead of bytes, for more precise aiming (especially noticable when zoomed in.)
    
===Entity alpha===
Entity alpha is stored on the server as a [[.alpha]] field, and can be hard-coded in the bsp file or set dynamically by [[QuakeC]].  The server will support hard-coded values from the bsp even if the [[progs.dat]] was not compiled with the .alpha field.

Entities with alpha &quot;0&quot; will have a default alpha value, and generally be fully visible.  To explicitly set an entity to invisible, set the alpha to &quot;-1&quot;.  Values between &quot;1&quot; and &quot;0&quot; will interpreted normally.  Note that a map entity with no alpha field specified will get the value &quot;0&quot; at load time, and therefore be default.

Water surfaces on entities that have default alpha will obey r_wateralpha, but water surfaces on entities that have a specified alpha value will ignore r_wateralpha and use the entity alpha.

===Weapon model alpha===
Player weapon model alpha is transmitted seperately from the client entity alpha, but for now the Fitzquake server uses the client entity's .alpha field for both.  There is currently no way for QuakeC to set the weapon alpha specifically.

===Interpolation Timing Hints===
For entities that don't animate at exactly 10Hz, such as crucified zombies, this hint tells the client what interval to use when lerping to the new frame.  This interval is taken from the entity's [[.nextthink]] value, subtracted from the current server time.  It is only sent to clients when it does not equal 0.1.

==Client Messages==
The following client messages have changed:

===clc_move===
Client angles are always sent to the server as shorts instead of bytes.  The angles are encoded and decoded as follows:

&lt;pre&gt;
void MSG_WriteAngle16 (sizebuf_t *sb, float f)
{
    MSG_WriteShort (sb, Q_rint(f * 65536.0 / 360.0) &amp; 65535);
}

float MSG_ReadAngle16 (void)
{
    return MSG_ReadShort() * (360.0 / 65536);
}
&lt;/pre&gt;

==Server Messages==
The following server messages have been added, or their behavior has changed:

===entity update===
The existing update flags field can have 5 new flags.

* U_EXTEND1 - another byte of flags will follow the first two.
* U_ALPHA - entity has alpha different than its baseline. Alpha is encoded as a single byte, with a 0 representing &quot;default&quot; alpha, and values 1-255 representing the range 0.0-1.0.  Use the ENTALPHA_ macros (below) to convert correctly between floats and bytes. This byte is sent immediately after the U_ANGLE3 angle, if present.
* U_FRAME2 - entity frame is &gt;255, so a second byte will be sent. It is sent immediately after the U_ALPHA byte, if present.
* U_MODEL2 - entity modelindex is &gt;255, so a second byte will be sent.  It is sent immediately after the U_ALPHA byte, if present.
* U_LERPFINISH - nextthink interval (ent-&gt;v.nextthink - sv.time) is not exactly 0.1 seconds, so the actual interval will be sent as a byte.  Intervals of 0.0-1.0 seconds map to values 0-255.  Anything &gt;1 is clamped.

===svc_clientdata===
The existing flags field can have 11 new flags:

* SU_EXTEND1 - a third byte of flags follows the first two.
* SU_WEAPON2 - weapon model index is &gt;255, so a second byte will be sent. It is sent immediately after the STAT_ACTIVEWEAPON byte.
* SU_ARMOR2 - armor value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_WEAPON2 byte, if present.
* SU_AMMO2 - current ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ARMOR2 byte, if present.
* SU_SHELLS2 - shell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_AMMO2 byte, if present.
* SU_NAILS2 - nail ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_SHELLS2 byte, if present.
* SU_ROCKETS2 - rocket ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_NAILS2 byte, if present.
* SU_CELLS2 - cell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ROCKETS2 byte, if present.
* SU_EXTEND2 - a fourth byte of flags follows the first three.
* SU_WEAPONFRAME2 - weapon frame index is &gt;255, so a second byte will be sent. It is sent immediately after the SU_CELLS2 byte, if present.
* SU_WEAPONALPHA - weapon alpha is not default, so an alpha byte will be sent. It is encoded the same as U_ALPHA. It is sent immediately after the SU_WEAPONFRAME2 byte, if present.

===svc_sound===
The existing flags field can have 2 new flags. 

* SND_LARGEENTITY - the edict is 2 full bytes and the following byte is the channel, rather than packing them into a single short (13 bits for edict, 3 bit for channel.)  This is used whenever the edict number is &gt; 8191.
* SND_LARGESOUND - the sound index is 2 bytes instead of 1.  This is sent when the sound index is &gt; 255.

===svc_spawnbaseline2 (new)===
This message is sent instead of [[svc_spawnbaseline]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnbaseline except a new &quot;flags&quot; byte comes at the beginning of the message.  This byte can have 3 flags:

* B_LARGEMODEL - model index is sent as a short instead of a byte.
* B_LARGEFRAME - frame index is sent as a short instead of a byte.
* B_ALPHA - an alpha byte is added at the end of the message.  Encoded the same as U_ALPHA.

===svc_spawnstatic2 (new)===
This message is sent instead of [[svc_spawnstatic]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnstatic except a new &quot;flags&quot; byte comes at the beginning of the message.  The flags are intepreted the same as svc_spawnbaseline2.

===svc_spawnstaticsound2 (new)===
This message is sent instead of [[svc_spawnstaticsound]] if sound index is &gt; 255.  It is the same as svc_spawnstaticsound except the sound index is 2 bytes.

==Definitions==

&lt;pre&gt;
#define PROTOCOL_FITZQUAKE 666

//flags for entity update messages
#define U_EXTEND1       (1&lt;&lt;15) // another byte to follow
#define U_ALPHA         (1&lt;&lt;16) // 1 byte, uses ENTALPHA_ENCODE, not sent if equal to baseline
#define U_FRAME2        (1&lt;&lt;17) // 1 byte, this is .frame &amp; 0xFF00 (second byte)
#define U_MODEL2        (1&lt;&lt;18) // 1 byte, this is .modelindex &amp; 0xFF00 (second byte)
#define U_LERPFINISH    (1&lt;&lt;19) // 1 byte, 0.0-1.0 maps to 0-255, not sent if exactly 0.1, this is ent-&gt;v.nextthink - sv.time, used for lerping

//flags for client update messages
#define SU_EXTEND1      (1&lt;&lt;15) // another byte to follow
#define SU_WEAPON2      (1&lt;&lt;16) // 1 byte, this is .weaponmodel &amp; 0xFF00 (second byte)
#define SU_ARMOR2       (1&lt;&lt;17) // 1 byte, this is .armorvalue &amp; 0xFF00 (second byte)
#define SU_AMMO2        (1&lt;&lt;18) // 1 byte, this is .currentammo &amp; 0xFF00 (second byte)
#define SU_SHELLS2      (1&lt;&lt;19) // 1 byte, this is .ammo_shells &amp; 0xFF00 (second byte)
#define SU_NAILS2       (1&lt;&lt;20) // 1 byte, this is .ammo_nails &amp; 0xFF00 (second byte)
#define SU_ROCKETS2     (1&lt;&lt;21) // 1 byte, this is .ammo_rockets &amp; 0xFF00 (second byte)
#define SU_CELLS2       (1&lt;&lt;22) // 1 byte, this is .ammo_cells &amp; 0xFF00 (second byte)
#define SU_EXTEND2      (1&lt;&lt;23) // another byte to follow
#define SU_WEAPONFRAME2 (1&lt;&lt;24) // 1 byte, this is .weaponframe &amp; 0xFF00 (second byte)
#define SU_WEAPONALPHA  (1&lt;&lt;25) // 1 byte, this is alpha for weaponmodel, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//flags for sound messages
#define SND_LARGEENTITY (1&lt;&lt;3)  // a short + byte (instead of just a short)
#define SND_LARGESOUND  (1&lt;&lt;4)  // a short soundindex (instead of a byte)

//flags for entity baseline messages
#define B_LARGEMODEL    (1&lt;&lt;0)  // modelindex is short instead of byte
#define B_LARGEFRAME    (1&lt;&lt;1)  // frame is short instead of byte
#define B_ALPHA         (1&lt;&lt;2)  // 1 byte, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//new server messages
#define svc_spawnbaseline2      42  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstatic2        43  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstaticsound2   44  // [coord3] [short] samp [byte] vol [byte] aten

//alpha-related definitions and macros
#define ENTALPHA_DEFAULT    0   //entity's alpha is &quot;default&quot; (i.e. water obeys r_wateralpha) -- must be zero so zeroed out memory works
#define ENTALPHA_ZERO       1   //entity is invisible (lowest possible alpha)
#define ENTALPHA_ONE        255 //entity is fully opaque (highest possible alpha)
#define ENTALPHA_ENCODE(a)  (((a)==0)?ENTALPHA_DEFAULT:Q_rint(CLAMP(1,(a)*254.0f+1,255))) //server convert to byte to send to client
#define ENTALPHA_DECODE(a)  (((a)==ENTALPHA_DEFAULT)?1.0f:((float)(a)-1)/(254)) //client convert to float for rendering
#define ENTALPHA_TOSAVE(a)  (((a)==ENTALPHA_DEFAULT)?0.0f:(((a)==ENTALPHA_ZERO)?-1.0f:((float)(a)-1)/(254))) //server convert to float for savegame
&lt;/pre&gt;</text>
      <sha1>au23wfopk1oyeq2mntroqhs8ko66pkc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1437</id>
      <parentid>1436</parentid>
      <timestamp>2009-11-15T12:43:30Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>/* Model index &gt; 255 */</comment>
      <text xml:space="preserve" bytes="10329">The Fitzquake protocol is derived from the [[Netquake Protocol]] and was introduced in Fitzquake 0.85.  Currently no other clients or servers support it.

==Overview of Features==
The Fitzquake protocol adds support for increased limits such as model and sound precaches (normal limit 255), model frames (normal limit 255), edicts (), player armor and ammo stats (normally 255).  It also supports entity and weaponmodel alpha, and adds timing hints for model interpolation.

===Model index &gt; 255===
Quake normally sends model indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.  This works for both entity models and player's weapon models.

===Entity frame index &gt; 255===
Quake normally sends entity frame indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Sound index &gt; 255===
Quake normally sends sound indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Edicts &gt; 8192===
Normally any edict beyond the first 8192 can't play a sound effect, because only 13 bits are devoted to the edict number in a sound message.  Fitzquake can send a full 2-byte edict number in the sound message, so that up to 65535 edicts can play sounds.

===Player ammo and armor &gt; 255===
Player ammo and armor is normally sent as a single byte.  Fitzquake can send a second byte so that the client can recieve ammo/armor values up to 65535.

===High-precision aiming===
Client angles are sent as shorts instead of bytes, for more precise aiming (especially noticable when zoomed in.)
    
===Entity alpha===
Entity alpha is stored on the server as a [[.alpha]] field, and can be hard-coded in the bsp file or set dynamically by [[QuakeC]].  The server will support hard-coded values from the bsp even if the [[progs.dat]] was not compiled with the .alpha field.

Entities with alpha &quot;0&quot; will have a default alpha value, and generally be fully visible.  To explicitly set an entity to invisible, set the alpha to &quot;-1&quot;.  Values between &quot;1&quot; and &quot;0&quot; will interpreted normally.  Note that a map entity with no alpha field specified will get the value &quot;0&quot; at load time, and therefore be default.

Water surfaces on entities that have default alpha will obey r_wateralpha, but water surfaces on entities that have a specified alpha value will ignore r_wateralpha and use the entity alpha.

===Weapon model alpha===
Player weapon model alpha is transmitted seperately from the client entity alpha, but for now the Fitzquake server uses the client entity's .alpha field for both.  There is currently no way for QuakeC to set the weapon alpha specifically.

===Interpolation Timing Hints===
For entities that don't animate at exactly 10Hz, such as crucified zombies, this hint tells the client what interval to use when lerping to the new frame.  This interval is taken from the entity's [[.nextthink]] value, subtracted from the current server time.  It is only sent to clients when it does not equal 0.1.

==Client Messages==
The following client messages have changed:

===clc_move===
Client angles are always sent to the server as shorts instead of bytes.  The angles are encoded and decoded as follows:

&lt;pre&gt;
void MSG_WriteAngle16 (sizebuf_t *sb, float f)
{
    MSG_WriteShort (sb, Q_rint(f * 65536.0 / 360.0) &amp; 65535);
}

float MSG_ReadAngle16 (void)
{
    return MSG_ReadShort() * (360.0 / 65536);
}
&lt;/pre&gt;

==Server Messages==
The following server messages have been added, or their behavior has changed:

===entity update===
The existing update flags field can have 5 new flags.

* U_EXTEND1 - another byte of flags will follow the first two.
* U_ALPHA - entity has alpha different than its baseline. Alpha is encoded as a single byte, with a 0 representing &quot;default&quot; alpha, and values 1-255 representing the range 0.0-1.0.  Use the ENTALPHA_ macros (below) to convert correctly between floats and bytes. This byte is sent immediately after the U_ANGLE3 angle, if present.
* U_FRAME2 - entity frame is &gt;255, so a second byte will be sent. It is sent immediately after the U_ALPHA byte, if present.
* U_MODEL2 - entity modelindex is &gt;255, so a second byte will be sent.  It is sent immediately after the U_ALPHA byte, if present.
* U_LERPFINISH - nextthink interval (ent-&gt;v.nextthink - sv.time) is not exactly 0.1 seconds, so the actual interval will be sent as a byte.  Intervals of 0.0-1.0 seconds map to values 0-255.  Anything &gt;1 is clamped.

===svc_clientdata===
The existing flags field can have 11 new flags:

* SU_EXTEND1 - a third byte of flags follows the first two.
* SU_WEAPON2 - weapon model index is &gt;255, so a second byte will be sent. It is sent immediately after the STAT_ACTIVEWEAPON byte.
* SU_ARMOR2 - armor value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_WEAPON2 byte, if present.
* SU_AMMO2 - current ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ARMOR2 byte, if present.
* SU_SHELLS2 - shell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_AMMO2 byte, if present.
* SU_NAILS2 - nail ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_SHELLS2 byte, if present.
* SU_ROCKETS2 - rocket ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_NAILS2 byte, if present.
* SU_CELLS2 - cell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ROCKETS2 byte, if present.
* SU_EXTEND2 - a fourth byte of flags follows the first three.
* SU_WEAPONFRAME2 - weapon frame index is &gt;255, so a second byte will be sent. It is sent immediately after the SU_CELLS2 byte, if present.
* SU_WEAPONALPHA - weapon alpha is not default, so an alpha byte will be sent. It is encoded the same as U_ALPHA. It is sent immediately after the SU_WEAPONFRAME2 byte, if present.

===svc_sound===
The existing flags field can have 2 new flags. 

* SND_LARGEENTITY - the edict is 2 full bytes and the following byte is the channel, rather than packing them into a single short (13 bits for edict, 3 bit for channel.)  This is used whenever the edict number is &gt; 8191.
* SND_LARGESOUND - the sound index is 2 bytes instead of 1.  This is sent when the sound index is &gt; 255.

===svc_spawnbaseline2 (new)===
This message is sent instead of [[svc_spawnbaseline]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnbaseline except a new &quot;flags&quot; byte comes at the beginning of the message.  This byte can have 3 flags:

* B_LARGEMODEL - model index is sent as a short instead of a byte.
* B_LARGEFRAME - frame index is sent as a short instead of a byte.
* B_ALPHA - an alpha byte is added at the end of the message.  Encoded the same as U_ALPHA.

===svc_spawnstatic2 (new)===
This message is sent instead of [[svc_spawnstatic]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnstatic except a new &quot;flags&quot; byte comes at the beginning of the message.  The flags are intepreted the same as svc_spawnbaseline2.

===svc_spawnstaticsound2 (new)===
This message is sent instead of [[svc_spawnstaticsound]] if sound index is &gt; 255.  It is the same as svc_spawnstaticsound except the sound index is 2 bytes.

==Definitions==

&lt;pre&gt;
#define PROTOCOL_FITZQUAKE 666

//flags for entity update messages
#define U_EXTEND1       (1&lt;&lt;15) // another byte to follow
#define U_ALPHA         (1&lt;&lt;16) // 1 byte, uses ENTALPHA_ENCODE, not sent if equal to baseline
#define U_FRAME2        (1&lt;&lt;17) // 1 byte, this is .frame &amp; 0xFF00 (second byte)
#define U_MODEL2        (1&lt;&lt;18) // 1 byte, this is .modelindex &amp; 0xFF00 (second byte)
#define U_LERPFINISH    (1&lt;&lt;19) // 1 byte, 0.0-1.0 maps to 0-255, not sent if exactly 0.1, this is ent-&gt;v.nextthink - sv.time, used for lerping

//flags for client update messages
#define SU_EXTEND1      (1&lt;&lt;15) // another byte to follow
#define SU_WEAPON2      (1&lt;&lt;16) // 1 byte, this is .weaponmodel &amp; 0xFF00 (second byte)
#define SU_ARMOR2       (1&lt;&lt;17) // 1 byte, this is .armorvalue &amp; 0xFF00 (second byte)
#define SU_AMMO2        (1&lt;&lt;18) // 1 byte, this is .currentammo &amp; 0xFF00 (second byte)
#define SU_SHELLS2      (1&lt;&lt;19) // 1 byte, this is .ammo_shells &amp; 0xFF00 (second byte)
#define SU_NAILS2       (1&lt;&lt;20) // 1 byte, this is .ammo_nails &amp; 0xFF00 (second byte)
#define SU_ROCKETS2     (1&lt;&lt;21) // 1 byte, this is .ammo_rockets &amp; 0xFF00 (second byte)
#define SU_CELLS2       (1&lt;&lt;22) // 1 byte, this is .ammo_cells &amp; 0xFF00 (second byte)
#define SU_EXTEND2      (1&lt;&lt;23) // another byte to follow
#define SU_WEAPONFRAME2 (1&lt;&lt;24) // 1 byte, this is .weaponframe &amp; 0xFF00 (second byte)
#define SU_WEAPONALPHA  (1&lt;&lt;25) // 1 byte, this is alpha for weaponmodel, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//flags for sound messages
#define SND_LARGEENTITY (1&lt;&lt;3)  // a short + byte (instead of just a short)
#define SND_LARGESOUND  (1&lt;&lt;4)  // a short soundindex (instead of a byte)

//flags for entity baseline messages
#define B_LARGEMODEL    (1&lt;&lt;0)  // modelindex is short instead of byte
#define B_LARGEFRAME    (1&lt;&lt;1)  // frame is short instead of byte
#define B_ALPHA         (1&lt;&lt;2)  // 1 byte, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//new server messages
#define svc_spawnbaseline2      42  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstatic2        43  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstaticsound2   44  // [coord3] [short] samp [byte] vol [byte] aten

//alpha-related definitions and macros
#define ENTALPHA_DEFAULT    0   //entity's alpha is &quot;default&quot; (i.e. water obeys r_wateralpha) -- must be zero so zeroed out memory works
#define ENTALPHA_ZERO       1   //entity is invisible (lowest possible alpha)
#define ENTALPHA_ONE        255 //entity is fully opaque (highest possible alpha)
#define ENTALPHA_ENCODE(a)  (((a)==0)?ENTALPHA_DEFAULT:Q_rint(CLAMP(1,(a)*254.0f+1,255))) //server convert to byte to send to client
#define ENTALPHA_DECODE(a)  (((a)==ENTALPHA_DEFAULT)?1.0f:((float)(a)-1)/(254)) //client convert to float for rendering
#define ENTALPHA_TOSAVE(a)  (((a)==ENTALPHA_DEFAULT)?0.0f:(((a)==ENTALPHA_ZERO)?-1.0f:((float)(a)-1)/(254))) //server convert to float for savegame
&lt;/pre&gt;</text>
      <sha1>01rub01ywlvrigfwi4r1gt3x1ykcdg3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1438</id>
      <parentid>1437</parentid>
      <timestamp>2009-11-15T12:44:33Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="10348">The &lt;b&gt;Fitzquake protocol&lt;/b&gt; is derived from the [[Netquake Protocol]] and was introduced in [[Fitzquake]] version 0.85.  Currently no other clients or servers support it.

==Overview of Features==
The Fitzquake protocol adds support for increased limits such as model and sound precaches (normal limit 255), model frames (normal limit 255), edicts (), player armor and ammo stats (normally 255).  It also supports entity and weaponmodel alpha, and adds timing hints for model interpolation.

===Model index &gt; 255===
Quake normally sends model indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.  This works for both entity models and player's weapon models.

===Entity frame index &gt; 255===
Quake normally sends entity frame indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Sound index &gt; 255===
Quake normally sends sound indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Edicts &gt; 8192===
Normally any edict beyond the first 8192 can't play a sound effect, because only 13 bits are devoted to the edict number in a sound message.  Fitzquake can send a full 2-byte edict number in the sound message, so that up to 65535 edicts can play sounds.

===Player ammo and armor &gt; 255===
Player ammo and armor is normally sent as a single byte.  Fitzquake can send a second byte so that the client can recieve ammo/armor values up to 65535.

===High-precision aiming===
Client angles are sent as shorts instead of bytes, for more precise aiming (especially noticable when zoomed in.)
    
===Entity alpha===
Entity alpha is stored on the server as a [[.alpha]] field, and can be hard-coded in the bsp file or set dynamically by [[QuakeC]].  The server will support hard-coded values from the bsp even if the [[progs.dat]] was not compiled with the .alpha field.

Entities with alpha &quot;0&quot; will have a default alpha value, and generally be fully visible.  To explicitly set an entity to invisible, set the alpha to &quot;-1&quot;.  Values between &quot;1&quot; and &quot;0&quot; will interpreted normally.  Note that a map entity with no alpha field specified will get the value &quot;0&quot; at load time, and therefore be default.

Water surfaces on entities that have default alpha will obey r_wateralpha, but water surfaces on entities that have a specified alpha value will ignore r_wateralpha and use the entity alpha.

===Weapon model alpha===
Player weapon model alpha is transmitted seperately from the client entity alpha, but for now the Fitzquake server uses the client entity's .alpha field for both.  There is currently no way for QuakeC to set the weapon alpha specifically.

===Interpolation Timing Hints===
For entities that don't animate at exactly 10Hz, such as crucified zombies, this hint tells the client what interval to use when lerping to the new frame.  This interval is taken from the entity's [[.nextthink]] value, subtracted from the current server time.  It is only sent to clients when it does not equal 0.1.

==Client Messages==
The following client messages have changed:

===clc_move===
Client angles are always sent to the server as shorts instead of bytes.  The angles are encoded and decoded as follows:

&lt;pre&gt;
void MSG_WriteAngle16 (sizebuf_t *sb, float f)
{
    MSG_WriteShort (sb, Q_rint(f * 65536.0 / 360.0) &amp; 65535);
}

float MSG_ReadAngle16 (void)
{
    return MSG_ReadShort() * (360.0 / 65536);
}
&lt;/pre&gt;

==Server Messages==
The following server messages have been added, or their behavior has changed:

===entity update===
The existing update flags field can have 5 new flags.

* U_EXTEND1 - another byte of flags will follow the first two.
* U_ALPHA - entity has alpha different than its baseline. Alpha is encoded as a single byte, with a 0 representing &quot;default&quot; alpha, and values 1-255 representing the range 0.0-1.0.  Use the ENTALPHA_ macros (below) to convert correctly between floats and bytes. This byte is sent immediately after the U_ANGLE3 angle, if present.
* U_FRAME2 - entity frame is &gt;255, so a second byte will be sent. It is sent immediately after the U_ALPHA byte, if present.
* U_MODEL2 - entity modelindex is &gt;255, so a second byte will be sent.  It is sent immediately after the U_ALPHA byte, if present.
* U_LERPFINISH - nextthink interval (ent-&gt;v.nextthink - sv.time) is not exactly 0.1 seconds, so the actual interval will be sent as a byte.  Intervals of 0.0-1.0 seconds map to values 0-255.  Anything &gt;1 is clamped.

===svc_clientdata===
The existing flags field can have 11 new flags:

* SU_EXTEND1 - a third byte of flags follows the first two.
* SU_WEAPON2 - weapon model index is &gt;255, so a second byte will be sent. It is sent immediately after the STAT_ACTIVEWEAPON byte.
* SU_ARMOR2 - armor value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_WEAPON2 byte, if present.
* SU_AMMO2 - current ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ARMOR2 byte, if present.
* SU_SHELLS2 - shell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_AMMO2 byte, if present.
* SU_NAILS2 - nail ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_SHELLS2 byte, if present.
* SU_ROCKETS2 - rocket ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_NAILS2 byte, if present.
* SU_CELLS2 - cell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ROCKETS2 byte, if present.
* SU_EXTEND2 - a fourth byte of flags follows the first three.
* SU_WEAPONFRAME2 - weapon frame index is &gt;255, so a second byte will be sent. It is sent immediately after the SU_CELLS2 byte, if present.
* SU_WEAPONALPHA - weapon alpha is not default, so an alpha byte will be sent. It is encoded the same as U_ALPHA. It is sent immediately after the SU_WEAPONFRAME2 byte, if present.

===svc_sound===
The existing flags field can have 2 new flags. 

* SND_LARGEENTITY - the edict is 2 full bytes and the following byte is the channel, rather than packing them into a single short (13 bits for edict, 3 bit for channel.)  This is used whenever the edict number is &gt; 8191.
* SND_LARGESOUND - the sound index is 2 bytes instead of 1.  This is sent when the sound index is &gt; 255.

===svc_spawnbaseline2 (new)===
This message is sent instead of [[svc_spawnbaseline]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnbaseline except a new &quot;flags&quot; byte comes at the beginning of the message.  This byte can have 3 flags:

* B_LARGEMODEL - model index is sent as a short instead of a byte.
* B_LARGEFRAME - frame index is sent as a short instead of a byte.
* B_ALPHA - an alpha byte is added at the end of the message.  Encoded the same as U_ALPHA.

===svc_spawnstatic2 (new)===
This message is sent instead of [[svc_spawnstatic]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnstatic except a new &quot;flags&quot; byte comes at the beginning of the message.  The flags are intepreted the same as svc_spawnbaseline2.

===svc_spawnstaticsound2 (new)===
This message is sent instead of [[svc_spawnstaticsound]] if sound index is &gt; 255.  It is the same as svc_spawnstaticsound except the sound index is 2 bytes.

==Definitions==

&lt;pre&gt;
#define PROTOCOL_FITZQUAKE 666

//flags for entity update messages
#define U_EXTEND1       (1&lt;&lt;15) // another byte to follow
#define U_ALPHA         (1&lt;&lt;16) // 1 byte, uses ENTALPHA_ENCODE, not sent if equal to baseline
#define U_FRAME2        (1&lt;&lt;17) // 1 byte, this is .frame &amp; 0xFF00 (second byte)
#define U_MODEL2        (1&lt;&lt;18) // 1 byte, this is .modelindex &amp; 0xFF00 (second byte)
#define U_LERPFINISH    (1&lt;&lt;19) // 1 byte, 0.0-1.0 maps to 0-255, not sent if exactly 0.1, this is ent-&gt;v.nextthink - sv.time, used for lerping

//flags for client update messages
#define SU_EXTEND1      (1&lt;&lt;15) // another byte to follow
#define SU_WEAPON2      (1&lt;&lt;16) // 1 byte, this is .weaponmodel &amp; 0xFF00 (second byte)
#define SU_ARMOR2       (1&lt;&lt;17) // 1 byte, this is .armorvalue &amp; 0xFF00 (second byte)
#define SU_AMMO2        (1&lt;&lt;18) // 1 byte, this is .currentammo &amp; 0xFF00 (second byte)
#define SU_SHELLS2      (1&lt;&lt;19) // 1 byte, this is .ammo_shells &amp; 0xFF00 (second byte)
#define SU_NAILS2       (1&lt;&lt;20) // 1 byte, this is .ammo_nails &amp; 0xFF00 (second byte)
#define SU_ROCKETS2     (1&lt;&lt;21) // 1 byte, this is .ammo_rockets &amp; 0xFF00 (second byte)
#define SU_CELLS2       (1&lt;&lt;22) // 1 byte, this is .ammo_cells &amp; 0xFF00 (second byte)
#define SU_EXTEND2      (1&lt;&lt;23) // another byte to follow
#define SU_WEAPONFRAME2 (1&lt;&lt;24) // 1 byte, this is .weaponframe &amp; 0xFF00 (second byte)
#define SU_WEAPONALPHA  (1&lt;&lt;25) // 1 byte, this is alpha for weaponmodel, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//flags for sound messages
#define SND_LARGEENTITY (1&lt;&lt;3)  // a short + byte (instead of just a short)
#define SND_LARGESOUND  (1&lt;&lt;4)  // a short soundindex (instead of a byte)

//flags for entity baseline messages
#define B_LARGEMODEL    (1&lt;&lt;0)  // modelindex is short instead of byte
#define B_LARGEFRAME    (1&lt;&lt;1)  // frame is short instead of byte
#define B_ALPHA         (1&lt;&lt;2)  // 1 byte, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//new server messages
#define svc_spawnbaseline2      42  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstatic2        43  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstaticsound2   44  // [coord3] [short] samp [byte] vol [byte] aten

//alpha-related definitions and macros
#define ENTALPHA_DEFAULT    0   //entity's alpha is &quot;default&quot; (i.e. water obeys r_wateralpha) -- must be zero so zeroed out memory works
#define ENTALPHA_ZERO       1   //entity is invisible (lowest possible alpha)
#define ENTALPHA_ONE        255 //entity is fully opaque (highest possible alpha)
#define ENTALPHA_ENCODE(a)  (((a)==0)?ENTALPHA_DEFAULT:Q_rint(CLAMP(1,(a)*254.0f+1,255))) //server convert to byte to send to client
#define ENTALPHA_DECODE(a)  (((a)==ENTALPHA_DEFAULT)?1.0f:((float)(a)-1)/(254)) //client convert to float for rendering
#define ENTALPHA_TOSAVE(a)  (((a)==ENTALPHA_DEFAULT)?0.0f:(((a)==ENTALPHA_ZERO)?-1.0f:((float)(a)-1)/(254))) //server convert to float for savegame
&lt;/pre&gt;</text>
      <sha1>ml7y1hmzdka86kbm86enktydalpbvdd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1439</id>
      <parentid>1438</parentid>
      <timestamp>2009-11-15T12:45:25Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>/* Overview of Features */</comment>
      <text xml:space="preserve" bytes="10297">The &lt;b&gt;Fitzquake protocol&lt;/b&gt; is derived from the [[Netquake Protocol]] and was introduced in [[Fitzquake]] version 0.85.  Currently no other clients or servers support it.

==Overview of Features==
The Fitzquake protocol adds support for increased limits such as model and sound precaches , model frames, edicts, and player armor and ammo stats.  It also supports entity and weaponmodel alpha, and adds timing hints for model interpolation.

===Model index &gt; 255===
Quake normally sends model indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.  This works for both entity models and player's weapon models.

===Entity frame index &gt; 255===
Quake normally sends entity frame indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Sound index &gt; 255===
Quake normally sends sound indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Edicts &gt; 8192===
Normally any edict beyond the first 8192 can't play a sound effect, because only 13 bits are devoted to the edict number in a sound message.  Fitzquake can send a full 2-byte edict number in the sound message, so that up to 65535 edicts can play sounds.

===Player ammo and armor &gt; 255===
Player ammo and armor is normally sent as a single byte.  Fitzquake can send a second byte so that the client can recieve ammo/armor values up to 65535.

===High-precision aiming===
Client angles are sent as shorts instead of bytes, for more precise aiming (especially noticable when zoomed in.)
    
===Entity alpha===
Entity alpha is stored on the server as a [[.alpha]] field, and can be hard-coded in the bsp file or set dynamically by [[QuakeC]].  The server will support hard-coded values from the bsp even if the [[progs.dat]] was not compiled with the .alpha field.

Entities with alpha &quot;0&quot; will have a default alpha value, and generally be fully visible.  To explicitly set an entity to invisible, set the alpha to &quot;-1&quot;.  Values between &quot;1&quot; and &quot;0&quot; will interpreted normally.  Note that a map entity with no alpha field specified will get the value &quot;0&quot; at load time, and therefore be default.

Water surfaces on entities that have default alpha will obey r_wateralpha, but water surfaces on entities that have a specified alpha value will ignore r_wateralpha and use the entity alpha.

===Weapon model alpha===
Player weapon model alpha is transmitted seperately from the client entity alpha, but for now the Fitzquake server uses the client entity's .alpha field for both.  There is currently no way for QuakeC to set the weapon alpha specifically.

===Interpolation Timing Hints===
For entities that don't animate at exactly 10Hz, such as crucified zombies, this hint tells the client what interval to use when lerping to the new frame.  This interval is taken from the entity's [[.nextthink]] value, subtracted from the current server time.  It is only sent to clients when it does not equal 0.1.

==Client Messages==
The following client messages have changed:

===clc_move===
Client angles are always sent to the server as shorts instead of bytes.  The angles are encoded and decoded as follows:

&lt;pre&gt;
void MSG_WriteAngle16 (sizebuf_t *sb, float f)
{
    MSG_WriteShort (sb, Q_rint(f * 65536.0 / 360.0) &amp; 65535);
}

float MSG_ReadAngle16 (void)
{
    return MSG_ReadShort() * (360.0 / 65536);
}
&lt;/pre&gt;

==Server Messages==
The following server messages have been added, or their behavior has changed:

===entity update===
The existing update flags field can have 5 new flags.

* U_EXTEND1 - another byte of flags will follow the first two.
* U_ALPHA - entity has alpha different than its baseline. Alpha is encoded as a single byte, with a 0 representing &quot;default&quot; alpha, and values 1-255 representing the range 0.0-1.0.  Use the ENTALPHA_ macros (below) to convert correctly between floats and bytes. This byte is sent immediately after the U_ANGLE3 angle, if present.
* U_FRAME2 - entity frame is &gt;255, so a second byte will be sent. It is sent immediately after the U_ALPHA byte, if present.
* U_MODEL2 - entity modelindex is &gt;255, so a second byte will be sent.  It is sent immediately after the U_ALPHA byte, if present.
* U_LERPFINISH - nextthink interval (ent-&gt;v.nextthink - sv.time) is not exactly 0.1 seconds, so the actual interval will be sent as a byte.  Intervals of 0.0-1.0 seconds map to values 0-255.  Anything &gt;1 is clamped.

===svc_clientdata===
The existing flags field can have 11 new flags:

* SU_EXTEND1 - a third byte of flags follows the first two.
* SU_WEAPON2 - weapon model index is &gt;255, so a second byte will be sent. It is sent immediately after the STAT_ACTIVEWEAPON byte.
* SU_ARMOR2 - armor value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_WEAPON2 byte, if present.
* SU_AMMO2 - current ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ARMOR2 byte, if present.
* SU_SHELLS2 - shell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_AMMO2 byte, if present.
* SU_NAILS2 - nail ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_SHELLS2 byte, if present.
* SU_ROCKETS2 - rocket ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_NAILS2 byte, if present.
* SU_CELLS2 - cell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ROCKETS2 byte, if present.
* SU_EXTEND2 - a fourth byte of flags follows the first three.
* SU_WEAPONFRAME2 - weapon frame index is &gt;255, so a second byte will be sent. It is sent immediately after the SU_CELLS2 byte, if present.
* SU_WEAPONALPHA - weapon alpha is not default, so an alpha byte will be sent. It is encoded the same as U_ALPHA. It is sent immediately after the SU_WEAPONFRAME2 byte, if present.

===svc_sound===
The existing flags field can have 2 new flags. 

* SND_LARGEENTITY - the edict is 2 full bytes and the following byte is the channel, rather than packing them into a single short (13 bits for edict, 3 bit for channel.)  This is used whenever the edict number is &gt; 8191.
* SND_LARGESOUND - the sound index is 2 bytes instead of 1.  This is sent when the sound index is &gt; 255.

===svc_spawnbaseline2 (new)===
This message is sent instead of [[svc_spawnbaseline]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnbaseline except a new &quot;flags&quot; byte comes at the beginning of the message.  This byte can have 3 flags:

* B_LARGEMODEL - model index is sent as a short instead of a byte.
* B_LARGEFRAME - frame index is sent as a short instead of a byte.
* B_ALPHA - an alpha byte is added at the end of the message.  Encoded the same as U_ALPHA.

===svc_spawnstatic2 (new)===
This message is sent instead of [[svc_spawnstatic]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnstatic except a new &quot;flags&quot; byte comes at the beginning of the message.  The flags are intepreted the same as svc_spawnbaseline2.

===svc_spawnstaticsound2 (new)===
This message is sent instead of [[svc_spawnstaticsound]] if sound index is &gt; 255.  It is the same as svc_spawnstaticsound except the sound index is 2 bytes.

==Definitions==

&lt;pre&gt;
#define PROTOCOL_FITZQUAKE 666

//flags for entity update messages
#define U_EXTEND1       (1&lt;&lt;15) // another byte to follow
#define U_ALPHA         (1&lt;&lt;16) // 1 byte, uses ENTALPHA_ENCODE, not sent if equal to baseline
#define U_FRAME2        (1&lt;&lt;17) // 1 byte, this is .frame &amp; 0xFF00 (second byte)
#define U_MODEL2        (1&lt;&lt;18) // 1 byte, this is .modelindex &amp; 0xFF00 (second byte)
#define U_LERPFINISH    (1&lt;&lt;19) // 1 byte, 0.0-1.0 maps to 0-255, not sent if exactly 0.1, this is ent-&gt;v.nextthink - sv.time, used for lerping

//flags for client update messages
#define SU_EXTEND1      (1&lt;&lt;15) // another byte to follow
#define SU_WEAPON2      (1&lt;&lt;16) // 1 byte, this is .weaponmodel &amp; 0xFF00 (second byte)
#define SU_ARMOR2       (1&lt;&lt;17) // 1 byte, this is .armorvalue &amp; 0xFF00 (second byte)
#define SU_AMMO2        (1&lt;&lt;18) // 1 byte, this is .currentammo &amp; 0xFF00 (second byte)
#define SU_SHELLS2      (1&lt;&lt;19) // 1 byte, this is .ammo_shells &amp; 0xFF00 (second byte)
#define SU_NAILS2       (1&lt;&lt;20) // 1 byte, this is .ammo_nails &amp; 0xFF00 (second byte)
#define SU_ROCKETS2     (1&lt;&lt;21) // 1 byte, this is .ammo_rockets &amp; 0xFF00 (second byte)
#define SU_CELLS2       (1&lt;&lt;22) // 1 byte, this is .ammo_cells &amp; 0xFF00 (second byte)
#define SU_EXTEND2      (1&lt;&lt;23) // another byte to follow
#define SU_WEAPONFRAME2 (1&lt;&lt;24) // 1 byte, this is .weaponframe &amp; 0xFF00 (second byte)
#define SU_WEAPONALPHA  (1&lt;&lt;25) // 1 byte, this is alpha for weaponmodel, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//flags for sound messages
#define SND_LARGEENTITY (1&lt;&lt;3)  // a short + byte (instead of just a short)
#define SND_LARGESOUND  (1&lt;&lt;4)  // a short soundindex (instead of a byte)

//flags for entity baseline messages
#define B_LARGEMODEL    (1&lt;&lt;0)  // modelindex is short instead of byte
#define B_LARGEFRAME    (1&lt;&lt;1)  // frame is short instead of byte
#define B_ALPHA         (1&lt;&lt;2)  // 1 byte, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//new server messages
#define svc_spawnbaseline2      42  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstatic2        43  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstaticsound2   44  // [coord3] [short] samp [byte] vol [byte] aten

//alpha-related definitions and macros
#define ENTALPHA_DEFAULT    0   //entity's alpha is &quot;default&quot; (i.e. water obeys r_wateralpha) -- must be zero so zeroed out memory works
#define ENTALPHA_ZERO       1   //entity is invisible (lowest possible alpha)
#define ENTALPHA_ONE        255 //entity is fully opaque (highest possible alpha)
#define ENTALPHA_ENCODE(a)  (((a)==0)?ENTALPHA_DEFAULT:Q_rint(CLAMP(1,(a)*254.0f+1,255))) //server convert to byte to send to client
#define ENTALPHA_DECODE(a)  (((a)==ENTALPHA_DEFAULT)?1.0f:((float)(a)-1)/(254)) //client convert to float for rendering
#define ENTALPHA_TOSAVE(a)  (((a)==ENTALPHA_DEFAULT)?0.0f:(((a)==ENTALPHA_ZERO)?-1.0f:((float)(a)-1)/(254))) //server convert to float for savegame
&lt;/pre&gt;</text>
      <sha1>gfz1wo0mrzl8tr4mnexa7y1yuzugoda</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1440</id>
      <parentid>1439</parentid>
      <timestamp>2009-11-15T12:53:44Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>/* entity update */</comment>
      <text xml:space="preserve" bytes="10298">The &lt;b&gt;Fitzquake protocol&lt;/b&gt; is derived from the [[Netquake Protocol]] and was introduced in [[Fitzquake]] version 0.85.  Currently no other clients or servers support it.

==Overview of Features==
The Fitzquake protocol adds support for increased limits such as model and sound precaches , model frames, edicts, and player armor and ammo stats.  It also supports entity and weaponmodel alpha, and adds timing hints for model interpolation.

===Model index &gt; 255===
Quake normally sends model indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.  This works for both entity models and player's weapon models.

===Entity frame index &gt; 255===
Quake normally sends entity frame indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Sound index &gt; 255===
Quake normally sends sound indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Edicts &gt; 8192===
Normally any edict beyond the first 8192 can't play a sound effect, because only 13 bits are devoted to the edict number in a sound message.  Fitzquake can send a full 2-byte edict number in the sound message, so that up to 65535 edicts can play sounds.

===Player ammo and armor &gt; 255===
Player ammo and armor is normally sent as a single byte.  Fitzquake can send a second byte so that the client can recieve ammo/armor values up to 65535.

===High-precision aiming===
Client angles are sent as shorts instead of bytes, for more precise aiming (especially noticable when zoomed in.)
    
===Entity alpha===
Entity alpha is stored on the server as a [[.alpha]] field, and can be hard-coded in the bsp file or set dynamically by [[QuakeC]].  The server will support hard-coded values from the bsp even if the [[progs.dat]] was not compiled with the .alpha field.

Entities with alpha &quot;0&quot; will have a default alpha value, and generally be fully visible.  To explicitly set an entity to invisible, set the alpha to &quot;-1&quot;.  Values between &quot;1&quot; and &quot;0&quot; will interpreted normally.  Note that a map entity with no alpha field specified will get the value &quot;0&quot; at load time, and therefore be default.

Water surfaces on entities that have default alpha will obey r_wateralpha, but water surfaces on entities that have a specified alpha value will ignore r_wateralpha and use the entity alpha.

===Weapon model alpha===
Player weapon model alpha is transmitted seperately from the client entity alpha, but for now the Fitzquake server uses the client entity's .alpha field for both.  There is currently no way for QuakeC to set the weapon alpha specifically.

===Interpolation Timing Hints===
For entities that don't animate at exactly 10Hz, such as crucified zombies, this hint tells the client what interval to use when lerping to the new frame.  This interval is taken from the entity's [[.nextthink]] value, subtracted from the current server time.  It is only sent to clients when it does not equal 0.1.

==Client Messages==
The following client messages have changed:

===clc_move===
Client angles are always sent to the server as shorts instead of bytes.  The angles are encoded and decoded as follows:

&lt;pre&gt;
void MSG_WriteAngle16 (sizebuf_t *sb, float f)
{
    MSG_WriteShort (sb, Q_rint(f * 65536.0 / 360.0) &amp; 65535);
}

float MSG_ReadAngle16 (void)
{
    return MSG_ReadShort() * (360.0 / 65536);
}
&lt;/pre&gt;

==Server Messages==
The following server messages have been added, or their behavior has changed:

===entity update===
The existing update flags field can have 5 new flags.

* U_EXTEND1 - another byte of flags will follow the first two.
* U_ALPHA - entity has alpha different than its baseline. Alpha is encoded as a single byte, with a 0 representing &quot;default&quot; alpha, and values 1-255 representing the range 0.0-1.0.  Use the ENTALPHA_ macros (below) to convert correctly between floats and bytes. This byte is sent immediately after the U_ANGLE3 angle, if present.
* U_FRAME2 - entity frame is &gt;255, so a second byte will be sent. It is sent immediately after the U_ALPHA byte, if present.
* U_MODEL2 - entity modelindex is &gt;255, so a second byte will be sent.  It is sent immediately after the U_MODEL2 byte, if present.
* U_LERPFINISH - nextthink interval (ent-&gt;v.nextthink - sv.time) is not exactly 0.1 seconds, so the actual interval will be sent as a byte.  Intervals of 0.0-1.0 seconds map to values 0-255.  Anything &gt;1 is clamped.

===svc_clientdata===
The existing flags field can have 11 new flags:

* SU_EXTEND1 - a third byte of flags follows the first two.
* SU_WEAPON2 - weapon model index is &gt;255, so a second byte will be sent. It is sent immediately after the STAT_ACTIVEWEAPON byte.
* SU_ARMOR2 - armor value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_WEAPON2 byte, if present.
* SU_AMMO2 - current ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ARMOR2 byte, if present.
* SU_SHELLS2 - shell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_AMMO2 byte, if present.
* SU_NAILS2 - nail ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_SHELLS2 byte, if present.
* SU_ROCKETS2 - rocket ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_NAILS2 byte, if present.
* SU_CELLS2 - cell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ROCKETS2 byte, if present.
* SU_EXTEND2 - a fourth byte of flags follows the first three.
* SU_WEAPONFRAME2 - weapon frame index is &gt;255, so a second byte will be sent. It is sent immediately after the SU_CELLS2 byte, if present.
* SU_WEAPONALPHA - weapon alpha is not default, so an alpha byte will be sent. It is encoded the same as U_ALPHA. It is sent immediately after the SU_WEAPONFRAME2 byte, if present.

===svc_sound===
The existing flags field can have 2 new flags. 

* SND_LARGEENTITY - the edict is 2 full bytes and the following byte is the channel, rather than packing them into a single short (13 bits for edict, 3 bit for channel.)  This is used whenever the edict number is &gt; 8191.
* SND_LARGESOUND - the sound index is 2 bytes instead of 1.  This is sent when the sound index is &gt; 255.

===svc_spawnbaseline2 (new)===
This message is sent instead of [[svc_spawnbaseline]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnbaseline except a new &quot;flags&quot; byte comes at the beginning of the message.  This byte can have 3 flags:

* B_LARGEMODEL - model index is sent as a short instead of a byte.
* B_LARGEFRAME - frame index is sent as a short instead of a byte.
* B_ALPHA - an alpha byte is added at the end of the message.  Encoded the same as U_ALPHA.

===svc_spawnstatic2 (new)===
This message is sent instead of [[svc_spawnstatic]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnstatic except a new &quot;flags&quot; byte comes at the beginning of the message.  The flags are intepreted the same as svc_spawnbaseline2.

===svc_spawnstaticsound2 (new)===
This message is sent instead of [[svc_spawnstaticsound]] if sound index is &gt; 255.  It is the same as svc_spawnstaticsound except the sound index is 2 bytes.

==Definitions==

&lt;pre&gt;
#define PROTOCOL_FITZQUAKE 666

//flags for entity update messages
#define U_EXTEND1       (1&lt;&lt;15) // another byte to follow
#define U_ALPHA         (1&lt;&lt;16) // 1 byte, uses ENTALPHA_ENCODE, not sent if equal to baseline
#define U_FRAME2        (1&lt;&lt;17) // 1 byte, this is .frame &amp; 0xFF00 (second byte)
#define U_MODEL2        (1&lt;&lt;18) // 1 byte, this is .modelindex &amp; 0xFF00 (second byte)
#define U_LERPFINISH    (1&lt;&lt;19) // 1 byte, 0.0-1.0 maps to 0-255, not sent if exactly 0.1, this is ent-&gt;v.nextthink - sv.time, used for lerping

//flags for client update messages
#define SU_EXTEND1      (1&lt;&lt;15) // another byte to follow
#define SU_WEAPON2      (1&lt;&lt;16) // 1 byte, this is .weaponmodel &amp; 0xFF00 (second byte)
#define SU_ARMOR2       (1&lt;&lt;17) // 1 byte, this is .armorvalue &amp; 0xFF00 (second byte)
#define SU_AMMO2        (1&lt;&lt;18) // 1 byte, this is .currentammo &amp; 0xFF00 (second byte)
#define SU_SHELLS2      (1&lt;&lt;19) // 1 byte, this is .ammo_shells &amp; 0xFF00 (second byte)
#define SU_NAILS2       (1&lt;&lt;20) // 1 byte, this is .ammo_nails &amp; 0xFF00 (second byte)
#define SU_ROCKETS2     (1&lt;&lt;21) // 1 byte, this is .ammo_rockets &amp; 0xFF00 (second byte)
#define SU_CELLS2       (1&lt;&lt;22) // 1 byte, this is .ammo_cells &amp; 0xFF00 (second byte)
#define SU_EXTEND2      (1&lt;&lt;23) // another byte to follow
#define SU_WEAPONFRAME2 (1&lt;&lt;24) // 1 byte, this is .weaponframe &amp; 0xFF00 (second byte)
#define SU_WEAPONALPHA  (1&lt;&lt;25) // 1 byte, this is alpha for weaponmodel, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//flags for sound messages
#define SND_LARGEENTITY (1&lt;&lt;3)  // a short + byte (instead of just a short)
#define SND_LARGESOUND  (1&lt;&lt;4)  // a short soundindex (instead of a byte)

//flags for entity baseline messages
#define B_LARGEMODEL    (1&lt;&lt;0)  // modelindex is short instead of byte
#define B_LARGEFRAME    (1&lt;&lt;1)  // frame is short instead of byte
#define B_ALPHA         (1&lt;&lt;2)  // 1 byte, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//new server messages
#define svc_spawnbaseline2      42  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstatic2        43  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstaticsound2   44  // [coord3] [short] samp [byte] vol [byte] aten

//alpha-related definitions and macros
#define ENTALPHA_DEFAULT    0   //entity's alpha is &quot;default&quot; (i.e. water obeys r_wateralpha) -- must be zero so zeroed out memory works
#define ENTALPHA_ZERO       1   //entity is invisible (lowest possible alpha)
#define ENTALPHA_ONE        255 //entity is fully opaque (highest possible alpha)
#define ENTALPHA_ENCODE(a)  (((a)==0)?ENTALPHA_DEFAULT:Q_rint(CLAMP(1,(a)*254.0f+1,255))) //server convert to byte to send to client
#define ENTALPHA_DECODE(a)  (((a)==ENTALPHA_DEFAULT)?1.0f:((float)(a)-1)/(254)) //client convert to float for rendering
#define ENTALPHA_TOSAVE(a)  (((a)==ENTALPHA_DEFAULT)?0.0f:(((a)==ENTALPHA_ZERO)?-1.0f:((float)(a)-1)/(254))) //server convert to float for savegame
&lt;/pre&gt;</text>
      <sha1>1ka42cd5sa4gfzd90up18bgy4yawz0t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1441</id>
      <parentid>1440</parentid>
      <timestamp>2009-11-15T12:56:46Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="10334">The &lt;b&gt;Fitzquake Protocol&lt;/b&gt; is derived from the [[Netquake Protocol]] and was introduced in [[Fitzquake]] version 0.85.  It uses protocol version number 666. Currently no other clients or servers support it.

==Overview of Features==
The Fitzquake protocol adds support for increased limits such as model and sound precaches, model frames, edicts, and player armor and ammo stats.  It also supports entity and weaponmodel alpha, and adds timing hints for model interpolation.

===Model index &gt; 255===
Quake normally sends model indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.  This works for both entity models and player's weapon models.

===Entity frame index &gt; 255===
Quake normally sends entity frame indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Sound index &gt; 255===
Quake normally sends sound indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Edicts &gt; 8192===
Normally any edict beyond the first 8192 can't play a sound effect, because only 13 bits are devoted to the edict number in a sound message.  Fitzquake can send a full 2-byte edict number in the sound message, so that up to 65535 edicts can play sounds.

===Player ammo and armor &gt; 255===
Player ammo and armor is normally sent as a single byte.  Fitzquake can send a second byte so that the client can recieve ammo/armor values up to 65535.

===High-precision aiming===
Client angles are sent as shorts instead of bytes, for more precise aiming (especially noticable when zoomed in.)
    
===Entity alpha===
Entity alpha is stored on the server as a [[.alpha]] field, and can be hard-coded in the bsp file or set dynamically by [[QuakeC]].  The server will support hard-coded values from the bsp even if the [[progs.dat]] was not compiled with the .alpha field.

Entities with alpha &quot;0&quot; will have a default alpha value, and generally be fully visible.  To explicitly set an entity to invisible, set the alpha to &quot;-1&quot;.  Values between &quot;1&quot; and &quot;0&quot; will interpreted normally.  Note that a map entity with no alpha field specified will get the value &quot;0&quot; at load time, and therefore be default.

Water surfaces on entities that have default alpha will obey r_wateralpha, but water surfaces on entities that have a specified alpha value will ignore r_wateralpha and use the entity alpha.

===Weapon model alpha===
Player weapon model alpha is transmitted seperately from the client entity alpha, but for now the Fitzquake server uses the client entity's .alpha field for both.  There is currently no way for QuakeC to set the weapon alpha specifically.

===Interpolation Timing Hints===
For entities that don't animate at exactly 10Hz, such as crucified zombies, this hint tells the client what interval to use when lerping to the new frame.  This interval is taken from the entity's [[.nextthink]] value, subtracted from the current server time.  It is only sent to clients when it does not equal 0.1.

==Client Messages==
The following client messages have changed:

===clc_move===
Client angles are always sent to the server as shorts instead of bytes.  The angles are encoded and decoded as follows:

&lt;pre&gt;
void MSG_WriteAngle16 (sizebuf_t *sb, float f)
{
    MSG_WriteShort (sb, Q_rint(f * 65536.0 / 360.0) &amp; 65535);
}

float MSG_ReadAngle16 (void)
{
    return MSG_ReadShort() * (360.0 / 65536);
}
&lt;/pre&gt;

==Server Messages==
The following server messages have been added, or their behavior has changed:

===entity update===
The existing update flags field can have 5 new flags.

* U_EXTEND1 - another byte of flags will follow the first two.
* U_ALPHA - entity has alpha different than its baseline. Alpha is encoded as a single byte, with a 0 representing &quot;default&quot; alpha, and values 1-255 representing the range 0.0-1.0.  Use the ENTALPHA_ macros (below) to convert correctly between floats and bytes. This byte is sent immediately after the U_ANGLE3 angle, if present.
* U_FRAME2 - entity frame is &gt;255, so a second byte will be sent. It is sent immediately after the U_ALPHA byte, if present.
* U_MODEL2 - entity modelindex is &gt;255, so a second byte will be sent.  It is sent immediately after the U_MODEL2 byte, if present.
* U_LERPFINISH - nextthink interval (ent-&gt;v.nextthink - sv.time) is not exactly 0.1 seconds, so the actual interval will be sent as a byte.  Intervals of 0.0-1.0 seconds map to values 0-255.  Anything &gt;1 is clamped.

===svc_clientdata===
The existing flags field can have 11 new flags:

* SU_EXTEND1 - a third byte of flags follows the first two.
* SU_WEAPON2 - weapon model index is &gt;255, so a second byte will be sent. It is sent immediately after the STAT_ACTIVEWEAPON byte.
* SU_ARMOR2 - armor value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_WEAPON2 byte, if present.
* SU_AMMO2 - current ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ARMOR2 byte, if present.
* SU_SHELLS2 - shell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_AMMO2 byte, if present.
* SU_NAILS2 - nail ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_SHELLS2 byte, if present.
* SU_ROCKETS2 - rocket ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_NAILS2 byte, if present.
* SU_CELLS2 - cell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ROCKETS2 byte, if present.
* SU_EXTEND2 - a fourth byte of flags follows the first three.
* SU_WEAPONFRAME2 - weapon frame index is &gt;255, so a second byte will be sent. It is sent immediately after the SU_CELLS2 byte, if present.
* SU_WEAPONALPHA - weapon alpha is not default, so an alpha byte will be sent. It is encoded the same as U_ALPHA. It is sent immediately after the SU_WEAPONFRAME2 byte, if present.

===svc_sound===
The existing flags field can have 2 new flags. 

* SND_LARGEENTITY - the edict is 2 full bytes and the following byte is the channel, rather than packing them into a single short (13 bits for edict, 3 bit for channel.)  This is used whenever the edict number is &gt; 8191.
* SND_LARGESOUND - the sound index is 2 bytes instead of 1.  This is sent when the sound index is &gt; 255.

===svc_spawnbaseline2 (new)===
This message is sent instead of [[svc_spawnbaseline]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnbaseline except a new &quot;flags&quot; byte comes at the beginning of the message.  This byte can have 3 flags:

* B_LARGEMODEL - model index is sent as a short instead of a byte.
* B_LARGEFRAME - frame index is sent as a short instead of a byte.
* B_ALPHA - an alpha byte is added at the end of the message.  Encoded the same as U_ALPHA.

===svc_spawnstatic2 (new)===
This message is sent instead of [[svc_spawnstatic]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnstatic except a new &quot;flags&quot; byte comes at the beginning of the message.  The flags are intepreted the same as svc_spawnbaseline2.

===svc_spawnstaticsound2 (new)===
This message is sent instead of [[svc_spawnstaticsound]] if sound index is &gt; 255.  It is the same as svc_spawnstaticsound except the sound index is 2 bytes.

==Definitions==

&lt;pre&gt;
#define PROTOCOL_FITZQUAKE 666

//flags for entity update messages
#define U_EXTEND1       (1&lt;&lt;15) // another byte to follow
#define U_ALPHA         (1&lt;&lt;16) // 1 byte, uses ENTALPHA_ENCODE, not sent if equal to baseline
#define U_FRAME2        (1&lt;&lt;17) // 1 byte, this is .frame &amp; 0xFF00 (second byte)
#define U_MODEL2        (1&lt;&lt;18) // 1 byte, this is .modelindex &amp; 0xFF00 (second byte)
#define U_LERPFINISH    (1&lt;&lt;19) // 1 byte, 0.0-1.0 maps to 0-255, not sent if exactly 0.1, this is ent-&gt;v.nextthink - sv.time, used for lerping

//flags for client update messages
#define SU_EXTEND1      (1&lt;&lt;15) // another byte to follow
#define SU_WEAPON2      (1&lt;&lt;16) // 1 byte, this is .weaponmodel &amp; 0xFF00 (second byte)
#define SU_ARMOR2       (1&lt;&lt;17) // 1 byte, this is .armorvalue &amp; 0xFF00 (second byte)
#define SU_AMMO2        (1&lt;&lt;18) // 1 byte, this is .currentammo &amp; 0xFF00 (second byte)
#define SU_SHELLS2      (1&lt;&lt;19) // 1 byte, this is .ammo_shells &amp; 0xFF00 (second byte)
#define SU_NAILS2       (1&lt;&lt;20) // 1 byte, this is .ammo_nails &amp; 0xFF00 (second byte)
#define SU_ROCKETS2     (1&lt;&lt;21) // 1 byte, this is .ammo_rockets &amp; 0xFF00 (second byte)
#define SU_CELLS2       (1&lt;&lt;22) // 1 byte, this is .ammo_cells &amp; 0xFF00 (second byte)
#define SU_EXTEND2      (1&lt;&lt;23) // another byte to follow
#define SU_WEAPONFRAME2 (1&lt;&lt;24) // 1 byte, this is .weaponframe &amp; 0xFF00 (second byte)
#define SU_WEAPONALPHA  (1&lt;&lt;25) // 1 byte, this is alpha for weaponmodel, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//flags for sound messages
#define SND_LARGEENTITY (1&lt;&lt;3)  // a short + byte (instead of just a short)
#define SND_LARGESOUND  (1&lt;&lt;4)  // a short soundindex (instead of a byte)

//flags for entity baseline messages
#define B_LARGEMODEL    (1&lt;&lt;0)  // modelindex is short instead of byte
#define B_LARGEFRAME    (1&lt;&lt;1)  // frame is short instead of byte
#define B_ALPHA         (1&lt;&lt;2)  // 1 byte, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//new server messages
#define svc_spawnbaseline2      42  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstatic2        43  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstaticsound2   44  // [coord3] [short] samp [byte] vol [byte] aten

//alpha-related definitions and macros
#define ENTALPHA_DEFAULT    0   //entity's alpha is &quot;default&quot; (i.e. water obeys r_wateralpha) -- must be zero so zeroed out memory works
#define ENTALPHA_ZERO       1   //entity is invisible (lowest possible alpha)
#define ENTALPHA_ONE        255 //entity is fully opaque (highest possible alpha)
#define ENTALPHA_ENCODE(a)  (((a)==0)?ENTALPHA_DEFAULT:Q_rint(CLAMP(1,(a)*254.0f+1,255))) //server convert to byte to send to client
#define ENTALPHA_DECODE(a)  (((a)==ENTALPHA_DEFAULT)?1.0f:((float)(a)-1)/(254)) //client convert to float for rendering
#define ENTALPHA_TOSAVE(a)  (((a)==ENTALPHA_DEFAULT)?0.0f:(((a)==ENTALPHA_ZERO)?-1.0f:((float)(a)-1)/(254))) //server convert to float for savegame
&lt;/pre&gt;</text>
      <sha1>24oa42rogh0qz41uututassp6t5g8ar</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1442</id>
      <parentid>1441</parentid>
      <timestamp>2009-11-15T21:04:13Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>/* Interpolation Timing Hints */</comment>
      <text xml:space="preserve" bytes="10334">The &lt;b&gt;Fitzquake Protocol&lt;/b&gt; is derived from the [[Netquake Protocol]] and was introduced in [[Fitzquake]] version 0.85.  It uses protocol version number 666. Currently no other clients or servers support it.

==Overview of Features==
The Fitzquake protocol adds support for increased limits such as model and sound precaches, model frames, edicts, and player armor and ammo stats.  It also supports entity and weaponmodel alpha, and adds timing hints for model interpolation.

===Model index &gt; 255===
Quake normally sends model indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.  This works for both entity models and player's weapon models.

===Entity frame index &gt; 255===
Quake normally sends entity frame indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Sound index &gt; 255===
Quake normally sends sound indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Edicts &gt; 8192===
Normally any edict beyond the first 8192 can't play a sound effect, because only 13 bits are devoted to the edict number in a sound message.  Fitzquake can send a full 2-byte edict number in the sound message, so that up to 65535 edicts can play sounds.

===Player ammo and armor &gt; 255===
Player ammo and armor is normally sent as a single byte.  Fitzquake can send a second byte so that the client can recieve ammo/armor values up to 65535.

===High-precision aiming===
Client angles are sent as shorts instead of bytes, for more precise aiming (especially noticable when zoomed in.)
    
===Entity alpha===
Entity alpha is stored on the server as a [[.alpha]] field, and can be hard-coded in the bsp file or set dynamically by [[QuakeC]].  The server will support hard-coded values from the bsp even if the [[progs.dat]] was not compiled with the .alpha field.

Entities with alpha &quot;0&quot; will have a default alpha value, and generally be fully visible.  To explicitly set an entity to invisible, set the alpha to &quot;-1&quot;.  Values between &quot;1&quot; and &quot;0&quot; will interpreted normally.  Note that a map entity with no alpha field specified will get the value &quot;0&quot; at load time, and therefore be default.

Water surfaces on entities that have default alpha will obey r_wateralpha, but water surfaces on entities that have a specified alpha value will ignore r_wateralpha and use the entity alpha.

===Weapon model alpha===
Player weapon model alpha is transmitted seperately from the client entity alpha, but for now the Fitzquake server uses the client entity's .alpha field for both.  There is currently no way for QuakeC to set the weapon alpha specifically.

===Interpolation timing hints===
For entities that don't animate at exactly 10Hz, such as crucified zombies, this hint tells the client what interval to use when lerping to the new frame.  This interval is taken from the entity's [[.nextthink]] value, subtracted from the current server time.  It is only sent to clients when it does not equal 0.1.

==Client Messages==
The following client messages have changed:

===clc_move===
Client angles are always sent to the server as shorts instead of bytes.  The angles are encoded and decoded as follows:

&lt;pre&gt;
void MSG_WriteAngle16 (sizebuf_t *sb, float f)
{
    MSG_WriteShort (sb, Q_rint(f * 65536.0 / 360.0) &amp; 65535);
}

float MSG_ReadAngle16 (void)
{
    return MSG_ReadShort() * (360.0 / 65536);
}
&lt;/pre&gt;

==Server Messages==
The following server messages have been added, or their behavior has changed:

===entity update===
The existing update flags field can have 5 new flags.

* U_EXTEND1 - another byte of flags will follow the first two.
* U_ALPHA - entity has alpha different than its baseline. Alpha is encoded as a single byte, with a 0 representing &quot;default&quot; alpha, and values 1-255 representing the range 0.0-1.0.  Use the ENTALPHA_ macros (below) to convert correctly between floats and bytes. This byte is sent immediately after the U_ANGLE3 angle, if present.
* U_FRAME2 - entity frame is &gt;255, so a second byte will be sent. It is sent immediately after the U_ALPHA byte, if present.
* U_MODEL2 - entity modelindex is &gt;255, so a second byte will be sent.  It is sent immediately after the U_MODEL2 byte, if present.
* U_LERPFINISH - nextthink interval (ent-&gt;v.nextthink - sv.time) is not exactly 0.1 seconds, so the actual interval will be sent as a byte.  Intervals of 0.0-1.0 seconds map to values 0-255.  Anything &gt;1 is clamped.

===svc_clientdata===
The existing flags field can have 11 new flags:

* SU_EXTEND1 - a third byte of flags follows the first two.
* SU_WEAPON2 - weapon model index is &gt;255, so a second byte will be sent. It is sent immediately after the STAT_ACTIVEWEAPON byte.
* SU_ARMOR2 - armor value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_WEAPON2 byte, if present.
* SU_AMMO2 - current ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ARMOR2 byte, if present.
* SU_SHELLS2 - shell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_AMMO2 byte, if present.
* SU_NAILS2 - nail ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_SHELLS2 byte, if present.
* SU_ROCKETS2 - rocket ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_NAILS2 byte, if present.
* SU_CELLS2 - cell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ROCKETS2 byte, if present.
* SU_EXTEND2 - a fourth byte of flags follows the first three.
* SU_WEAPONFRAME2 - weapon frame index is &gt;255, so a second byte will be sent. It is sent immediately after the SU_CELLS2 byte, if present.
* SU_WEAPONALPHA - weapon alpha is not default, so an alpha byte will be sent. It is encoded the same as U_ALPHA. It is sent immediately after the SU_WEAPONFRAME2 byte, if present.

===svc_sound===
The existing flags field can have 2 new flags. 

* SND_LARGEENTITY - the edict is 2 full bytes and the following byte is the channel, rather than packing them into a single short (13 bits for edict, 3 bit for channel.)  This is used whenever the edict number is &gt; 8191.
* SND_LARGESOUND - the sound index is 2 bytes instead of 1.  This is sent when the sound index is &gt; 255.

===svc_spawnbaseline2 (new)===
This message is sent instead of [[svc_spawnbaseline]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnbaseline except a new &quot;flags&quot; byte comes at the beginning of the message.  This byte can have 3 flags:

* B_LARGEMODEL - model index is sent as a short instead of a byte.
* B_LARGEFRAME - frame index is sent as a short instead of a byte.
* B_ALPHA - an alpha byte is added at the end of the message.  Encoded the same as U_ALPHA.

===svc_spawnstatic2 (new)===
This message is sent instead of [[svc_spawnstatic]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnstatic except a new &quot;flags&quot; byte comes at the beginning of the message.  The flags are intepreted the same as svc_spawnbaseline2.

===svc_spawnstaticsound2 (new)===
This message is sent instead of [[svc_spawnstaticsound]] if sound index is &gt; 255.  It is the same as svc_spawnstaticsound except the sound index is 2 bytes.

==Definitions==

&lt;pre&gt;
#define PROTOCOL_FITZQUAKE 666

//flags for entity update messages
#define U_EXTEND1       (1&lt;&lt;15) // another byte to follow
#define U_ALPHA         (1&lt;&lt;16) // 1 byte, uses ENTALPHA_ENCODE, not sent if equal to baseline
#define U_FRAME2        (1&lt;&lt;17) // 1 byte, this is .frame &amp; 0xFF00 (second byte)
#define U_MODEL2        (1&lt;&lt;18) // 1 byte, this is .modelindex &amp; 0xFF00 (second byte)
#define U_LERPFINISH    (1&lt;&lt;19) // 1 byte, 0.0-1.0 maps to 0-255, not sent if exactly 0.1, this is ent-&gt;v.nextthink - sv.time, used for lerping

//flags for client update messages
#define SU_EXTEND1      (1&lt;&lt;15) // another byte to follow
#define SU_WEAPON2      (1&lt;&lt;16) // 1 byte, this is .weaponmodel &amp; 0xFF00 (second byte)
#define SU_ARMOR2       (1&lt;&lt;17) // 1 byte, this is .armorvalue &amp; 0xFF00 (second byte)
#define SU_AMMO2        (1&lt;&lt;18) // 1 byte, this is .currentammo &amp; 0xFF00 (second byte)
#define SU_SHELLS2      (1&lt;&lt;19) // 1 byte, this is .ammo_shells &amp; 0xFF00 (second byte)
#define SU_NAILS2       (1&lt;&lt;20) // 1 byte, this is .ammo_nails &amp; 0xFF00 (second byte)
#define SU_ROCKETS2     (1&lt;&lt;21) // 1 byte, this is .ammo_rockets &amp; 0xFF00 (second byte)
#define SU_CELLS2       (1&lt;&lt;22) // 1 byte, this is .ammo_cells &amp; 0xFF00 (second byte)
#define SU_EXTEND2      (1&lt;&lt;23) // another byte to follow
#define SU_WEAPONFRAME2 (1&lt;&lt;24) // 1 byte, this is .weaponframe &amp; 0xFF00 (second byte)
#define SU_WEAPONALPHA  (1&lt;&lt;25) // 1 byte, this is alpha for weaponmodel, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//flags for sound messages
#define SND_LARGEENTITY (1&lt;&lt;3)  // a short + byte (instead of just a short)
#define SND_LARGESOUND  (1&lt;&lt;4)  // a short soundindex (instead of a byte)

//flags for entity baseline messages
#define B_LARGEMODEL    (1&lt;&lt;0)  // modelindex is short instead of byte
#define B_LARGEFRAME    (1&lt;&lt;1)  // frame is short instead of byte
#define B_ALPHA         (1&lt;&lt;2)  // 1 byte, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//new server messages
#define svc_spawnbaseline2      42  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstatic2        43  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstaticsound2   44  // [coord3] [short] samp [byte] vol [byte] aten

//alpha-related definitions and macros
#define ENTALPHA_DEFAULT    0   //entity's alpha is &quot;default&quot; (i.e. water obeys r_wateralpha) -- must be zero so zeroed out memory works
#define ENTALPHA_ZERO       1   //entity is invisible (lowest possible alpha)
#define ENTALPHA_ONE        255 //entity is fully opaque (highest possible alpha)
#define ENTALPHA_ENCODE(a)  (((a)==0)?ENTALPHA_DEFAULT:Q_rint(CLAMP(1,(a)*254.0f+1,255))) //server convert to byte to send to client
#define ENTALPHA_DECODE(a)  (((a)==ENTALPHA_DEFAULT)?1.0f:((float)(a)-1)/(254)) //client convert to float for rendering
#define ENTALPHA_TOSAVE(a)  (((a)==ENTALPHA_DEFAULT)?0.0f:(((a)==ENTALPHA_ZERO)?-1.0f:((float)(a)-1)/(254))) //server convert to float for savegame
&lt;/pre&gt;</text>
      <sha1>a7tx74os7ut60onkyox0a0ka0d0ehyp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1443</id>
      <parentid>1442</parentid>
      <timestamp>2009-11-15T21:24:05Z</timestamp>
      <contributor>
        <ip>78.152.251.127</ip>
      </contributor>
      <comment>Added Q_rint define</comment>
      <text xml:space="preserve" bytes="10483">The &lt;b&gt;Fitzquake Protocol&lt;/b&gt; is derived from the [[Netquake Protocol]] and was introduced in [[Fitzquake]] version 0.85.  It uses protocol version number 666. Currently no other clients or servers support it.

==Overview of Features==
The Fitzquake protocol adds support for increased limits such as model and sound precaches, model frames, edicts, and player armor and ammo stats.  It also supports entity and weaponmodel alpha, and adds timing hints for model interpolation.

===Model index &gt; 255===
Quake normally sends model indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.  This works for both entity models and player's weapon models.

===Entity frame index &gt; 255===
Quake normally sends entity frame indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Sound index &gt; 255===
Quake normally sends sound indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Edicts &gt; 8192===
Normally any edict beyond the first 8192 can't play a sound effect, because only 13 bits are devoted to the edict number in a sound message.  Fitzquake can send a full 2-byte edict number in the sound message, so that up to 65535 edicts can play sounds.

===Player ammo and armor &gt; 255===
Player ammo and armor is normally sent as a single byte.  Fitzquake can send a second byte so that the client can recieve ammo/armor values up to 65535.

===High-precision aiming===
Client angles are sent as shorts instead of bytes, for more precise aiming (especially noticable when zoomed in.)
    
===Entity alpha===
Entity alpha is stored on the server as a [[.alpha]] field, and can be hard-coded in the bsp file or set dynamically by [[QuakeC]].  The server will support hard-coded values from the bsp even if the [[progs.dat]] was not compiled with the .alpha field.

Entities with alpha &quot;0&quot; will have a default alpha value, and generally be fully visible.  To explicitly set an entity to invisible, set the alpha to &quot;-1&quot;.  Values between &quot;1&quot; and &quot;0&quot; will interpreted normally.  Note that a map entity with no alpha field specified will get the value &quot;0&quot; at load time, and therefore be default.

Water surfaces on entities that have default alpha will obey r_wateralpha, but water surfaces on entities that have a specified alpha value will ignore r_wateralpha and use the entity alpha.

===Weapon model alpha===
Player weapon model alpha is transmitted seperately from the client entity alpha, but for now the Fitzquake server uses the client entity's .alpha field for both.  There is currently no way for QuakeC to set the weapon alpha specifically.

===Interpolation timing hints===
For entities that don't animate at exactly 10Hz, such as crucified zombies, this hint tells the client what interval to use when lerping to the new frame.  This interval is taken from the entity's [[.nextthink]] value, subtracted from the current server time.  It is only sent to clients when it does not equal 0.1.

==Client Messages==
The following client messages have changed:

===clc_move===
Client angles are always sent to the server as shorts instead of bytes.  The angles are encoded and decoded as follows:

&lt;pre&gt;
void MSG_WriteAngle16 (sizebuf_t *sb, float f)
{
    MSG_WriteShort (sb, Q_rint(f * 65536.0 / 360.0) &amp; 65535);
}

float MSG_ReadAngle16 (void)
{
    return MSG_ReadShort() * (360.0 / 65536);
}
&lt;/pre&gt;

You may need to define Q_rint in your mathlib.h; the definition is:

&lt;pre&gt;
#define Q_rint(x) ((x) &gt; 0 ? (int)((x) + 0.5) : (int)((x) - 0.5))
&lt;/pre&gt;

==Server Messages==
The following server messages have been added, or their behavior has changed:

===entity update===
The existing update flags field can have 5 new flags.

* U_EXTEND1 - another byte of flags will follow the first two.
* U_ALPHA - entity has alpha different than its baseline. Alpha is encoded as a single byte, with a 0 representing &quot;default&quot; alpha, and values 1-255 representing the range 0.0-1.0.  Use the ENTALPHA_ macros (below) to convert correctly between floats and bytes. This byte is sent immediately after the U_ANGLE3 angle, if present.
* U_FRAME2 - entity frame is &gt;255, so a second byte will be sent. It is sent immediately after the U_ALPHA byte, if present.
* U_MODEL2 - entity modelindex is &gt;255, so a second byte will be sent.  It is sent immediately after the U_MODEL2 byte, if present.
* U_LERPFINISH - nextthink interval (ent-&gt;v.nextthink - sv.time) is not exactly 0.1 seconds, so the actual interval will be sent as a byte.  Intervals of 0.0-1.0 seconds map to values 0-255.  Anything &gt;1 is clamped.

===svc_clientdata===
The existing flags field can have 11 new flags:

* SU_EXTEND1 - a third byte of flags follows the first two.
* SU_WEAPON2 - weapon model index is &gt;255, so a second byte will be sent. It is sent immediately after the STAT_ACTIVEWEAPON byte.
* SU_ARMOR2 - armor value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_WEAPON2 byte, if present.
* SU_AMMO2 - current ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ARMOR2 byte, if present.
* SU_SHELLS2 - shell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_AMMO2 byte, if present.
* SU_NAILS2 - nail ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_SHELLS2 byte, if present.
* SU_ROCKETS2 - rocket ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_NAILS2 byte, if present.
* SU_CELLS2 - cell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ROCKETS2 byte, if present.
* SU_EXTEND2 - a fourth byte of flags follows the first three.
* SU_WEAPONFRAME2 - weapon frame index is &gt;255, so a second byte will be sent. It is sent immediately after the SU_CELLS2 byte, if present.
* SU_WEAPONALPHA - weapon alpha is not default, so an alpha byte will be sent. It is encoded the same as U_ALPHA. It is sent immediately after the SU_WEAPONFRAME2 byte, if present.

===svc_sound===
The existing flags field can have 2 new flags. 

* SND_LARGEENTITY - the edict is 2 full bytes and the following byte is the channel, rather than packing them into a single short (13 bits for edict, 3 bit for channel.)  This is used whenever the edict number is &gt; 8191.
* SND_LARGESOUND - the sound index is 2 bytes instead of 1.  This is sent when the sound index is &gt; 255.

===svc_spawnbaseline2 (new)===
This message is sent instead of [[svc_spawnbaseline]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnbaseline except a new &quot;flags&quot; byte comes at the beginning of the message.  This byte can have 3 flags:

* B_LARGEMODEL - model index is sent as a short instead of a byte.
* B_LARGEFRAME - frame index is sent as a short instead of a byte.
* B_ALPHA - an alpha byte is added at the end of the message.  Encoded the same as U_ALPHA.

===svc_spawnstatic2 (new)===
This message is sent instead of [[svc_spawnstatic]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnstatic except a new &quot;flags&quot; byte comes at the beginning of the message.  The flags are intepreted the same as svc_spawnbaseline2.

===svc_spawnstaticsound2 (new)===
This message is sent instead of [[svc_spawnstaticsound]] if sound index is &gt; 255.  It is the same as svc_spawnstaticsound except the sound index is 2 bytes.

==Definitions==

&lt;pre&gt;
#define PROTOCOL_FITZQUAKE 666

//flags for entity update messages
#define U_EXTEND1       (1&lt;&lt;15) // another byte to follow
#define U_ALPHA         (1&lt;&lt;16) // 1 byte, uses ENTALPHA_ENCODE, not sent if equal to baseline
#define U_FRAME2        (1&lt;&lt;17) // 1 byte, this is .frame &amp; 0xFF00 (second byte)
#define U_MODEL2        (1&lt;&lt;18) // 1 byte, this is .modelindex &amp; 0xFF00 (second byte)
#define U_LERPFINISH    (1&lt;&lt;19) // 1 byte, 0.0-1.0 maps to 0-255, not sent if exactly 0.1, this is ent-&gt;v.nextthink - sv.time, used for lerping

//flags for client update messages
#define SU_EXTEND1      (1&lt;&lt;15) // another byte to follow
#define SU_WEAPON2      (1&lt;&lt;16) // 1 byte, this is .weaponmodel &amp; 0xFF00 (second byte)
#define SU_ARMOR2       (1&lt;&lt;17) // 1 byte, this is .armorvalue &amp; 0xFF00 (second byte)
#define SU_AMMO2        (1&lt;&lt;18) // 1 byte, this is .currentammo &amp; 0xFF00 (second byte)
#define SU_SHELLS2      (1&lt;&lt;19) // 1 byte, this is .ammo_shells &amp; 0xFF00 (second byte)
#define SU_NAILS2       (1&lt;&lt;20) // 1 byte, this is .ammo_nails &amp; 0xFF00 (second byte)
#define SU_ROCKETS2     (1&lt;&lt;21) // 1 byte, this is .ammo_rockets &amp; 0xFF00 (second byte)
#define SU_CELLS2       (1&lt;&lt;22) // 1 byte, this is .ammo_cells &amp; 0xFF00 (second byte)
#define SU_EXTEND2      (1&lt;&lt;23) // another byte to follow
#define SU_WEAPONFRAME2 (1&lt;&lt;24) // 1 byte, this is .weaponframe &amp; 0xFF00 (second byte)
#define SU_WEAPONALPHA  (1&lt;&lt;25) // 1 byte, this is alpha for weaponmodel, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//flags for sound messages
#define SND_LARGEENTITY (1&lt;&lt;3)  // a short + byte (instead of just a short)
#define SND_LARGESOUND  (1&lt;&lt;4)  // a short soundindex (instead of a byte)

//flags for entity baseline messages
#define B_LARGEMODEL    (1&lt;&lt;0)  // modelindex is short instead of byte
#define B_LARGEFRAME    (1&lt;&lt;1)  // frame is short instead of byte
#define B_ALPHA         (1&lt;&lt;2)  // 1 byte, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//new server messages
#define svc_spawnbaseline2      42  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstatic2        43  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstaticsound2   44  // [coord3] [short] samp [byte] vol [byte] aten

//alpha-related definitions and macros
#define ENTALPHA_DEFAULT    0   //entity's alpha is &quot;default&quot; (i.e. water obeys r_wateralpha) -- must be zero so zeroed out memory works
#define ENTALPHA_ZERO       1   //entity is invisible (lowest possible alpha)
#define ENTALPHA_ONE        255 //entity is fully opaque (highest possible alpha)
#define ENTALPHA_ENCODE(a)  (((a)==0)?ENTALPHA_DEFAULT:Q_rint(CLAMP(1,(a)*254.0f+1,255))) //server convert to byte to send to client
#define ENTALPHA_DECODE(a)  (((a)==ENTALPHA_DEFAULT)?1.0f:((float)(a)-1)/(254)) //client convert to float for rendering
#define ENTALPHA_TOSAVE(a)  (((a)==ENTALPHA_DEFAULT)?0.0f:(((a)==ENTALPHA_ZERO)?-1.0f:((float)(a)-1)/(254))) //server convert to float for savegame
&lt;/pre&gt;</text>
      <sha1>96mvreifrgp1vx4pkbub8psz6qzy6mp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1444</id>
      <parentid>1443</parentid>
      <timestamp>2009-11-16T01:01:01Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>/* entity update */</comment>
      <text xml:space="preserve" bytes="10544">The &lt;b&gt;Fitzquake Protocol&lt;/b&gt; is derived from the [[Netquake Protocol]] and was introduced in [[Fitzquake]] version 0.85.  It uses protocol version number 666. Currently no other clients or servers support it.

==Overview of Features==
The Fitzquake protocol adds support for increased limits such as model and sound precaches, model frames, edicts, and player armor and ammo stats.  It also supports entity and weaponmodel alpha, and adds timing hints for model interpolation.

===Model index &gt; 255===
Quake normally sends model indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.  This works for both entity models and player's weapon models.

===Entity frame index &gt; 255===
Quake normally sends entity frame indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Sound index &gt; 255===
Quake normally sends sound indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Edicts &gt; 8192===
Normally any edict beyond the first 8192 can't play a sound effect, because only 13 bits are devoted to the edict number in a sound message.  Fitzquake can send a full 2-byte edict number in the sound message, so that up to 65535 edicts can play sounds.

===Player ammo and armor &gt; 255===
Player ammo and armor is normally sent as a single byte.  Fitzquake can send a second byte so that the client can recieve ammo/armor values up to 65535.

===High-precision aiming===
Client angles are sent as shorts instead of bytes, for more precise aiming (especially noticable when zoomed in.)
    
===Entity alpha===
Entity alpha is stored on the server as a [[.alpha]] field, and can be hard-coded in the bsp file or set dynamically by [[QuakeC]].  The server will support hard-coded values from the bsp even if the [[progs.dat]] was not compiled with the .alpha field.

Entities with alpha &quot;0&quot; will have a default alpha value, and generally be fully visible.  To explicitly set an entity to invisible, set the alpha to &quot;-1&quot;.  Values between &quot;1&quot; and &quot;0&quot; will interpreted normally.  Note that a map entity with no alpha field specified will get the value &quot;0&quot; at load time, and therefore be default.

Water surfaces on entities that have default alpha will obey r_wateralpha, but water surfaces on entities that have a specified alpha value will ignore r_wateralpha and use the entity alpha.

===Weapon model alpha===
Player weapon model alpha is transmitted seperately from the client entity alpha, but for now the Fitzquake server uses the client entity's .alpha field for both.  There is currently no way for QuakeC to set the weapon alpha specifically.

===Interpolation timing hints===
For entities that don't animate at exactly 10Hz, such as crucified zombies, this hint tells the client what interval to use when lerping to the new frame.  This interval is taken from the entity's [[.nextthink]] value, subtracted from the current server time.  It is only sent to clients when it does not equal 0.1.

==Client Messages==
The following client messages have changed:

===clc_move===
Client angles are always sent to the server as shorts instead of bytes.  The angles are encoded and decoded as follows:

&lt;pre&gt;
void MSG_WriteAngle16 (sizebuf_t *sb, float f)
{
    MSG_WriteShort (sb, Q_rint(f * 65536.0 / 360.0) &amp; 65535);
}

float MSG_ReadAngle16 (void)
{
    return MSG_ReadShort() * (360.0 / 65536);
}
&lt;/pre&gt;

You may need to define Q_rint in your mathlib.h; the definition is:

&lt;pre&gt;
#define Q_rint(x) ((x) &gt; 0 ? (int)((x) + 0.5) : (int)((x) - 0.5))
&lt;/pre&gt;

==Server Messages==
The following server messages have been added, or their behavior has changed:

===entity update===
The existing update flags field can have 5 new flags.

* U_EXTEND1 - another byte of flags will follow the first two.
* U_ALPHA - entity has alpha different than its baseline. Alpha is encoded as a single byte, with a 0 representing &quot;default&quot; alpha, and values 1-255 representing the range 0.0-1.0.  Use the ENTALPHA_ macros (below) to convert correctly between floats and bytes. This byte is sent immediately after the U_ANGLE3 angle, if present.
* U_FRAME2 - entity frame is &gt;255, so a second byte will be sent. It is sent immediately after the U_ALPHA byte, if present.
* U_MODEL2 - entity modelindex is &gt;255, so a second byte will be sent.  It is sent immediately after the U_FRAME2 byte, if present.
* U_LERPFINISH - nextthink interval (ent-&gt;v.nextthink - sv.time) is not exactly 0.1 seconds, so the actual interval will be sent as a byte.  Intervals of 0.0-1.0 seconds map to values 0-255.  Anything &gt;1 is clamped.  It is sent immediately after the U_MODEL2 byte, if present.

===svc_clientdata===
The existing flags field can have 11 new flags:

* SU_EXTEND1 - a third byte of flags follows the first two.
* SU_WEAPON2 - weapon model index is &gt;255, so a second byte will be sent. It is sent immediately after the STAT_ACTIVEWEAPON byte.
* SU_ARMOR2 - armor value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_WEAPON2 byte, if present.
* SU_AMMO2 - current ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ARMOR2 byte, if present.
* SU_SHELLS2 - shell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_AMMO2 byte, if present.
* SU_NAILS2 - nail ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_SHELLS2 byte, if present.
* SU_ROCKETS2 - rocket ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_NAILS2 byte, if present.
* SU_CELLS2 - cell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ROCKETS2 byte, if present.
* SU_EXTEND2 - a fourth byte of flags follows the first three.
* SU_WEAPONFRAME2 - weapon frame index is &gt;255, so a second byte will be sent. It is sent immediately after the SU_CELLS2 byte, if present.
* SU_WEAPONALPHA - weapon alpha is not default, so an alpha byte will be sent. It is encoded the same as U_ALPHA. It is sent immediately after the SU_WEAPONFRAME2 byte, if present.

===svc_sound===
The existing flags field can have 2 new flags. 

* SND_LARGEENTITY - the edict is 2 full bytes and the following byte is the channel, rather than packing them into a single short (13 bits for edict, 3 bit for channel.)  This is used whenever the edict number is &gt; 8191.
* SND_LARGESOUND - the sound index is 2 bytes instead of 1.  This is sent when the sound index is &gt; 255.

===svc_spawnbaseline2 (new)===
This message is sent instead of [[svc_spawnbaseline]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnbaseline except a new &quot;flags&quot; byte comes at the beginning of the message.  This byte can have 3 flags:

* B_LARGEMODEL - model index is sent as a short instead of a byte.
* B_LARGEFRAME - frame index is sent as a short instead of a byte.
* B_ALPHA - an alpha byte is added at the end of the message.  Encoded the same as U_ALPHA.

===svc_spawnstatic2 (new)===
This message is sent instead of [[svc_spawnstatic]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnstatic except a new &quot;flags&quot; byte comes at the beginning of the message.  The flags are intepreted the same as svc_spawnbaseline2.

===svc_spawnstaticsound2 (new)===
This message is sent instead of [[svc_spawnstaticsound]] if sound index is &gt; 255.  It is the same as svc_spawnstaticsound except the sound index is 2 bytes.

==Definitions==

&lt;pre&gt;
#define PROTOCOL_FITZQUAKE 666

//flags for entity update messages
#define U_EXTEND1       (1&lt;&lt;15) // another byte to follow
#define U_ALPHA         (1&lt;&lt;16) // 1 byte, uses ENTALPHA_ENCODE, not sent if equal to baseline
#define U_FRAME2        (1&lt;&lt;17) // 1 byte, this is .frame &amp; 0xFF00 (second byte)
#define U_MODEL2        (1&lt;&lt;18) // 1 byte, this is .modelindex &amp; 0xFF00 (second byte)
#define U_LERPFINISH    (1&lt;&lt;19) // 1 byte, 0.0-1.0 maps to 0-255, not sent if exactly 0.1, this is ent-&gt;v.nextthink - sv.time, used for lerping

//flags for client update messages
#define SU_EXTEND1      (1&lt;&lt;15) // another byte to follow
#define SU_WEAPON2      (1&lt;&lt;16) // 1 byte, this is .weaponmodel &amp; 0xFF00 (second byte)
#define SU_ARMOR2       (1&lt;&lt;17) // 1 byte, this is .armorvalue &amp; 0xFF00 (second byte)
#define SU_AMMO2        (1&lt;&lt;18) // 1 byte, this is .currentammo &amp; 0xFF00 (second byte)
#define SU_SHELLS2      (1&lt;&lt;19) // 1 byte, this is .ammo_shells &amp; 0xFF00 (second byte)
#define SU_NAILS2       (1&lt;&lt;20) // 1 byte, this is .ammo_nails &amp; 0xFF00 (second byte)
#define SU_ROCKETS2     (1&lt;&lt;21) // 1 byte, this is .ammo_rockets &amp; 0xFF00 (second byte)
#define SU_CELLS2       (1&lt;&lt;22) // 1 byte, this is .ammo_cells &amp; 0xFF00 (second byte)
#define SU_EXTEND2      (1&lt;&lt;23) // another byte to follow
#define SU_WEAPONFRAME2 (1&lt;&lt;24) // 1 byte, this is .weaponframe &amp; 0xFF00 (second byte)
#define SU_WEAPONALPHA  (1&lt;&lt;25) // 1 byte, this is alpha for weaponmodel, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//flags for sound messages
#define SND_LARGEENTITY (1&lt;&lt;3)  // a short + byte (instead of just a short)
#define SND_LARGESOUND  (1&lt;&lt;4)  // a short soundindex (instead of a byte)

//flags for entity baseline messages
#define B_LARGEMODEL    (1&lt;&lt;0)  // modelindex is short instead of byte
#define B_LARGEFRAME    (1&lt;&lt;1)  // frame is short instead of byte
#define B_ALPHA         (1&lt;&lt;2)  // 1 byte, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//new server messages
#define svc_spawnbaseline2      42  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstatic2        43  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstaticsound2   44  // [coord3] [short] samp [byte] vol [byte] aten

//alpha-related definitions and macros
#define ENTALPHA_DEFAULT    0   //entity's alpha is &quot;default&quot; (i.e. water obeys r_wateralpha) -- must be zero so zeroed out memory works
#define ENTALPHA_ZERO       1   //entity is invisible (lowest possible alpha)
#define ENTALPHA_ONE        255 //entity is fully opaque (highest possible alpha)
#define ENTALPHA_ENCODE(a)  (((a)==0)?ENTALPHA_DEFAULT:Q_rint(CLAMP(1,(a)*254.0f+1,255))) //server convert to byte to send to client
#define ENTALPHA_DECODE(a)  (((a)==ENTALPHA_DEFAULT)?1.0f:((float)(a)-1)/(254)) //client convert to float for rendering
#define ENTALPHA_TOSAVE(a)  (((a)==ENTALPHA_DEFAULT)?0.0f:(((a)==ENTALPHA_ZERO)?-1.0f:((float)(a)-1)/(254))) //server convert to float for savegame
&lt;/pre&gt;</text>
      <sha1>mncscr1d2mxs54hx54qbrr16mozjcel</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1446</id>
      <parentid>1444</parentid>
      <timestamp>2009-11-16T01:44:21Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="10661">{{Infobox Network Protocol
|name=Fitzquake Protocol
|version=666
|base=[[Netquake Protocol]]
|clients=[[Fitzquake]] 0.85+
|servers=[[Fitzquake]] 0.85+
}}
The &lt;b&gt;Fitzquake Protocol&lt;/b&gt; is derived from the [[Netquake Protocol]] and was introduced in [[Fitzquake]] version 0.85.  Currently no other clients or servers support it.

==Overview of Features==
The Fitzquake protocol adds support for increased limits such as model and sound precaches, model frames, edicts, and player armor and ammo stats.  It also supports entity and weaponmodel alpha, and adds timing hints for model interpolation.

===Model index &gt; 255===
Quake normally sends model indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.  This works for both entity models and player's weapon models.

===Entity frame index &gt; 255===
Quake normally sends entity frame indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Sound index &gt; 255===
Quake normally sends sound indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Edicts &gt; 8192===
Normally any edict beyond the first 8192 can't play a sound effect, because only 13 bits are devoted to the edict number in a sound message.  Fitzquake can send a full 2-byte edict number in the sound message, so that up to 65535 edicts can play sounds.

===Player ammo and armor &gt; 255===
Player ammo and armor is normally sent as a single byte.  Fitzquake can send a second byte so that the client can recieve ammo/armor values up to 65535.

===High-precision aiming===
Client angles are sent as shorts instead of bytes, for more precise aiming (especially noticable when zoomed in.)
    
===Entity alpha===
Entity alpha is stored on the server as a [[.alpha]] field, and can be hard-coded in the bsp file or set dynamically by [[QuakeC]].  The server will support hard-coded values from the bsp even if the [[progs.dat]] was not compiled with the .alpha field.

Entities with alpha &quot;0&quot; will have a default alpha value, and generally be fully visible.  To explicitly set an entity to invisible, set the alpha to &quot;-1&quot;.  Values between &quot;1&quot; and &quot;0&quot; will interpreted normally.  Note that a map entity with no alpha field specified will get the value &quot;0&quot; at load time, and therefore be default.

Water surfaces on entities that have default alpha will obey r_wateralpha, but water surfaces on entities that have a specified alpha value will ignore r_wateralpha and use the entity alpha.

===Weapon model alpha===
Player weapon model alpha is transmitted seperately from the client entity alpha, but for now the Fitzquake server uses the client entity's .alpha field for both.  There is currently no way for QuakeC to set the weapon alpha specifically.

===Interpolation timing hints===
For entities that don't animate at exactly 10Hz, such as crucified zombies, this hint tells the client what interval to use when lerping to the new frame.  This interval is taken from the entity's [[.nextthink]] value, subtracted from the current server time.  It is only sent to clients when it does not equal 0.1.

==Client Messages==
The following client messages have changed:

===clc_move===
Client angles are always sent to the server as shorts instead of bytes.  The angles are encoded and decoded as follows:

&lt;pre&gt;
void MSG_WriteAngle16 (sizebuf_t *sb, float f)
{
    MSG_WriteShort (sb, Q_rint(f * 65536.0 / 360.0) &amp; 65535);
}

float MSG_ReadAngle16 (void)
{
    return MSG_ReadShort() * (360.0 / 65536);
}
&lt;/pre&gt;

You may need to define Q_rint in your mathlib.h; the definition is:

&lt;pre&gt;
#define Q_rint(x) ((x) &gt; 0 ? (int)((x) + 0.5) : (int)((x) - 0.5))
&lt;/pre&gt;

==Server Messages==
The following server messages have been added, or their behavior has changed:

===entity update===
The existing update flags field can have 5 new flags.

* U_EXTEND1 - another byte of flags will follow the first two.
* U_ALPHA - entity has alpha different than its baseline. Alpha is encoded as a single byte, with a 0 representing &quot;default&quot; alpha, and values 1-255 representing the range 0.0-1.0.  Use the ENTALPHA_ macros (below) to convert correctly between floats and bytes. This byte is sent immediately after the U_ANGLE3 angle, if present.
* U_FRAME2 - entity frame is &gt;255, so a second byte will be sent. It is sent immediately after the U_ALPHA byte, if present.
* U_MODEL2 - entity modelindex is &gt;255, so a second byte will be sent.  It is sent immediately after the U_FRAME2 byte, if present.
* U_LERPFINISH - nextthink interval (ent-&gt;v.nextthink - sv.time) is not exactly 0.1 seconds, so the actual interval will be sent as a byte.  Intervals of 0.0-1.0 seconds map to values 0-255.  Anything &gt;1 is clamped.  It is sent immediately after the U_MODEL2 byte, if present.

===svc_clientdata===
The existing flags field can have 11 new flags:

* SU_EXTEND1 - a third byte of flags follows the first two.
* SU_WEAPON2 - weapon model index is &gt;255, so a second byte will be sent. It is sent immediately after the STAT_ACTIVEWEAPON byte.
* SU_ARMOR2 - armor value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_WEAPON2 byte, if present.
* SU_AMMO2 - current ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ARMOR2 byte, if present.
* SU_SHELLS2 - shell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_AMMO2 byte, if present.
* SU_NAILS2 - nail ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_SHELLS2 byte, if present.
* SU_ROCKETS2 - rocket ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_NAILS2 byte, if present.
* SU_CELLS2 - cell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ROCKETS2 byte, if present.
* SU_EXTEND2 - a fourth byte of flags follows the first three.
* SU_WEAPONFRAME2 - weapon frame index is &gt;255, so a second byte will be sent. It is sent immediately after the SU_CELLS2 byte, if present.
* SU_WEAPONALPHA - weapon alpha is not default, so an alpha byte will be sent. It is encoded the same as U_ALPHA. It is sent immediately after the SU_WEAPONFRAME2 byte, if present.

===svc_sound===
The existing flags field can have 2 new flags. 

* SND_LARGEENTITY - the edict is 2 full bytes and the following byte is the channel, rather than packing them into a single short (13 bits for edict, 3 bit for channel.)  This is used whenever the edict number is &gt; 8191.
* SND_LARGESOUND - the sound index is 2 bytes instead of 1.  This is sent when the sound index is &gt; 255.

===svc_spawnbaseline2 (new)===
This message is sent instead of [[svc_spawnbaseline]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnbaseline except a new &quot;flags&quot; byte comes at the beginning of the message.  This byte can have 3 flags:

* B_LARGEMODEL - model index is sent as a short instead of a byte.
* B_LARGEFRAME - frame index is sent as a short instead of a byte.
* B_ALPHA - an alpha byte is added at the end of the message.  Encoded the same as U_ALPHA.

===svc_spawnstatic2 (new)===
This message is sent instead of [[svc_spawnstatic]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnstatic except a new &quot;flags&quot; byte comes at the beginning of the message.  The flags are intepreted the same as svc_spawnbaseline2.

===svc_spawnstaticsound2 (new)===
This message is sent instead of [[svc_spawnstaticsound]] if sound index is &gt; 255.  It is the same as svc_spawnstaticsound except the sound index is 2 bytes.

==Definitions==

&lt;pre&gt;
#define PROTOCOL_FITZQUAKE 666

//flags for entity update messages
#define U_EXTEND1       (1&lt;&lt;15) // another byte to follow
#define U_ALPHA         (1&lt;&lt;16) // 1 byte, uses ENTALPHA_ENCODE, not sent if equal to baseline
#define U_FRAME2        (1&lt;&lt;17) // 1 byte, this is .frame &amp; 0xFF00 (second byte)
#define U_MODEL2        (1&lt;&lt;18) // 1 byte, this is .modelindex &amp; 0xFF00 (second byte)
#define U_LERPFINISH    (1&lt;&lt;19) // 1 byte, 0.0-1.0 maps to 0-255, not sent if exactly 0.1, this is ent-&gt;v.nextthink - sv.time, used for lerping

//flags for client update messages
#define SU_EXTEND1      (1&lt;&lt;15) // another byte to follow
#define SU_WEAPON2      (1&lt;&lt;16) // 1 byte, this is .weaponmodel &amp; 0xFF00 (second byte)
#define SU_ARMOR2       (1&lt;&lt;17) // 1 byte, this is .armorvalue &amp; 0xFF00 (second byte)
#define SU_AMMO2        (1&lt;&lt;18) // 1 byte, this is .currentammo &amp; 0xFF00 (second byte)
#define SU_SHELLS2      (1&lt;&lt;19) // 1 byte, this is .ammo_shells &amp; 0xFF00 (second byte)
#define SU_NAILS2       (1&lt;&lt;20) // 1 byte, this is .ammo_nails &amp; 0xFF00 (second byte)
#define SU_ROCKETS2     (1&lt;&lt;21) // 1 byte, this is .ammo_rockets &amp; 0xFF00 (second byte)
#define SU_CELLS2       (1&lt;&lt;22) // 1 byte, this is .ammo_cells &amp; 0xFF00 (second byte)
#define SU_EXTEND2      (1&lt;&lt;23) // another byte to follow
#define SU_WEAPONFRAME2 (1&lt;&lt;24) // 1 byte, this is .weaponframe &amp; 0xFF00 (second byte)
#define SU_WEAPONALPHA  (1&lt;&lt;25) // 1 byte, this is alpha for weaponmodel, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//flags for sound messages
#define SND_LARGEENTITY (1&lt;&lt;3)  // a short + byte (instead of just a short)
#define SND_LARGESOUND  (1&lt;&lt;4)  // a short soundindex (instead of a byte)

//flags for entity baseline messages
#define B_LARGEMODEL    (1&lt;&lt;0)  // modelindex is short instead of byte
#define B_LARGEFRAME    (1&lt;&lt;1)  // frame is short instead of byte
#define B_ALPHA         (1&lt;&lt;2)  // 1 byte, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//new server messages
#define svc_spawnbaseline2      42  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstatic2        43  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstaticsound2   44  // [coord3] [short] samp [byte] vol [byte] aten

//alpha-related definitions and macros
#define ENTALPHA_DEFAULT    0   //entity's alpha is &quot;default&quot; (i.e. water obeys r_wateralpha) -- must be zero so zeroed out memory works
#define ENTALPHA_ZERO       1   //entity is invisible (lowest possible alpha)
#define ENTALPHA_ONE        255 //entity is fully opaque (highest possible alpha)
#define ENTALPHA_ENCODE(a)  (((a)==0)?ENTALPHA_DEFAULT:Q_rint(CLAMP(1,(a)*254.0f+1,255))) //server convert to byte to send to client
#define ENTALPHA_DECODE(a)  (((a)==ENTALPHA_DEFAULT)?1.0f:((float)(a)-1)/(254)) //client convert to float for rendering
#define ENTALPHA_TOSAVE(a)  (((a)==ENTALPHA_DEFAULT)?0.0f:(((a)==ENTALPHA_ZERO)?-1.0f:((float)(a)-1)/(254))) //server convert to float for savegame
&lt;/pre&gt;</text>
      <sha1>gmsni3zaxcbfrvwc2t1me411apfqlae</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1459</id>
      <parentid>1446</parentid>
      <timestamp>2009-11-23T07:56:15Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>/* svc_sound */</comment>
      <text xml:space="preserve" bytes="10664">{{Infobox Network Protocol
|name=Fitzquake Protocol
|version=666
|base=[[Netquake Protocol]]
|clients=[[Fitzquake]] 0.85+
|servers=[[Fitzquake]] 0.85+
}}
The &lt;b&gt;Fitzquake Protocol&lt;/b&gt; is derived from the [[Netquake Protocol]] and was introduced in [[Fitzquake]] version 0.85.  Currently no other clients or servers support it.

==Overview of Features==
The Fitzquake protocol adds support for increased limits such as model and sound precaches, model frames, edicts, and player armor and ammo stats.  It also supports entity and weaponmodel alpha, and adds timing hints for model interpolation.

===Model index &gt; 255===
Quake normally sends model indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.  This works for both entity models and player's weapon models.

===Entity frame index &gt; 255===
Quake normally sends entity frame indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Sound index &gt; 255===
Quake normally sends sound indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Edicts &gt; 8192===
Normally any edict beyond the first 8192 can't play a sound effect, because only 13 bits are devoted to the edict number in a sound message.  Fitzquake can send a full 2-byte edict number in the sound message, so that up to 65535 edicts can play sounds.

===Player ammo and armor &gt; 255===
Player ammo and armor is normally sent as a single byte.  Fitzquake can send a second byte so that the client can recieve ammo/armor values up to 65535.

===High-precision aiming===
Client angles are sent as shorts instead of bytes, for more precise aiming (especially noticable when zoomed in.)
    
===Entity alpha===
Entity alpha is stored on the server as a [[.alpha]] field, and can be hard-coded in the bsp file or set dynamically by [[QuakeC]].  The server will support hard-coded values from the bsp even if the [[progs.dat]] was not compiled with the .alpha field.

Entities with alpha &quot;0&quot; will have a default alpha value, and generally be fully visible.  To explicitly set an entity to invisible, set the alpha to &quot;-1&quot;.  Values between &quot;1&quot; and &quot;0&quot; will interpreted normally.  Note that a map entity with no alpha field specified will get the value &quot;0&quot; at load time, and therefore be default.

Water surfaces on entities that have default alpha will obey r_wateralpha, but water surfaces on entities that have a specified alpha value will ignore r_wateralpha and use the entity alpha.

===Weapon model alpha===
Player weapon model alpha is transmitted seperately from the client entity alpha, but for now the Fitzquake server uses the client entity's .alpha field for both.  There is currently no way for QuakeC to set the weapon alpha specifically.

===Interpolation timing hints===
For entities that don't animate at exactly 10Hz, such as crucified zombies, this hint tells the client what interval to use when lerping to the new frame.  This interval is taken from the entity's [[.nextthink]] value, subtracted from the current server time.  It is only sent to clients when it does not equal 0.1.

==Client Messages==
The following client messages have changed:

===clc_move===
Client angles are always sent to the server as shorts instead of bytes.  The angles are encoded and decoded as follows:

&lt;pre&gt;
void MSG_WriteAngle16 (sizebuf_t *sb, float f)
{
    MSG_WriteShort (sb, Q_rint(f * 65536.0 / 360.0) &amp; 65535);
}

float MSG_ReadAngle16 (void)
{
    return MSG_ReadShort() * (360.0 / 65536);
}
&lt;/pre&gt;

You may need to define Q_rint in your mathlib.h; the definition is:

&lt;pre&gt;
#define Q_rint(x) ((x) &gt; 0 ? (int)((x) + 0.5) : (int)((x) - 0.5))
&lt;/pre&gt;

==Server Messages==
The following server messages have been added, or their behavior has changed:

===entity update===
The existing update flags field can have 5 new flags.

* U_EXTEND1 - another byte of flags will follow the first two.
* U_ALPHA - entity has alpha different than its baseline. Alpha is encoded as a single byte, with a 0 representing &quot;default&quot; alpha, and values 1-255 representing the range 0.0-1.0.  Use the ENTALPHA_ macros (below) to convert correctly between floats and bytes. This byte is sent immediately after the U_ANGLE3 angle, if present.
* U_FRAME2 - entity frame is &gt;255, so a second byte will be sent. It is sent immediately after the U_ALPHA byte, if present.
* U_MODEL2 - entity modelindex is &gt;255, so a second byte will be sent.  It is sent immediately after the U_FRAME2 byte, if present.
* U_LERPFINISH - nextthink interval (ent-&gt;v.nextthink - sv.time) is not exactly 0.1 seconds, so the actual interval will be sent as a byte.  Intervals of 0.0-1.0 seconds map to values 0-255.  Anything &gt;1 is clamped.  It is sent immediately after the U_MODEL2 byte, if present.

===svc_clientdata===
The existing flags field can have 11 new flags:

* SU_EXTEND1 - a third byte of flags follows the first two.
* SU_WEAPON2 - weapon model index is &gt;255, so a second byte will be sent. It is sent immediately after the STAT_ACTIVEWEAPON byte.
* SU_ARMOR2 - armor value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_WEAPON2 byte, if present.
* SU_AMMO2 - current ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ARMOR2 byte, if present.
* SU_SHELLS2 - shell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_AMMO2 byte, if present.
* SU_NAILS2 - nail ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_SHELLS2 byte, if present.
* SU_ROCKETS2 - rocket ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_NAILS2 byte, if present.
* SU_CELLS2 - cell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ROCKETS2 byte, if present.
* SU_EXTEND2 - a fourth byte of flags follows the first three.
* SU_WEAPONFRAME2 - weapon frame index is &gt;255, so a second byte will be sent. It is sent immediately after the SU_CELLS2 byte, if present.
* SU_WEAPONALPHA - weapon alpha is not default, so an alpha byte will be sent. It is encoded the same as U_ALPHA. It is sent immediately after the SU_WEAPONFRAME2 byte, if present.

===svc_sound===
The existing flags field can have 2 new flags. 

* SND_LARGEENTITY - the edict is 2 full bytes followed by a third byte for the channel, rather than packing them into a single short (13 bits for edict, 3 bit for channel.)  This is used whenever the edict number is &gt; 8191.
* SND_LARGESOUND - the sound index is 2 bytes instead of 1.  This is sent when the sound index is &gt; 255.

===svc_spawnbaseline2 (new)===
This message is sent instead of [[svc_spawnbaseline]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnbaseline except a new &quot;flags&quot; byte comes at the beginning of the message.  This byte can have 3 flags:

* B_LARGEMODEL - model index is sent as a short instead of a byte.
* B_LARGEFRAME - frame index is sent as a short instead of a byte.
* B_ALPHA - an alpha byte is added at the end of the message.  Encoded the same as U_ALPHA.

===svc_spawnstatic2 (new)===
This message is sent instead of [[svc_spawnstatic]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnstatic except a new &quot;flags&quot; byte comes at the beginning of the message.  The flags are intepreted the same as svc_spawnbaseline2.

===svc_spawnstaticsound2 (new)===
This message is sent instead of [[svc_spawnstaticsound]] if sound index is &gt; 255.  It is the same as svc_spawnstaticsound except the sound index is 2 bytes.

==Definitions==

&lt;pre&gt;
#define PROTOCOL_FITZQUAKE 666

//flags for entity update messages
#define U_EXTEND1       (1&lt;&lt;15) // another byte to follow
#define U_ALPHA         (1&lt;&lt;16) // 1 byte, uses ENTALPHA_ENCODE, not sent if equal to baseline
#define U_FRAME2        (1&lt;&lt;17) // 1 byte, this is .frame &amp; 0xFF00 (second byte)
#define U_MODEL2        (1&lt;&lt;18) // 1 byte, this is .modelindex &amp; 0xFF00 (second byte)
#define U_LERPFINISH    (1&lt;&lt;19) // 1 byte, 0.0-1.0 maps to 0-255, not sent if exactly 0.1, this is ent-&gt;v.nextthink - sv.time, used for lerping

//flags for client update messages
#define SU_EXTEND1      (1&lt;&lt;15) // another byte to follow
#define SU_WEAPON2      (1&lt;&lt;16) // 1 byte, this is .weaponmodel &amp; 0xFF00 (second byte)
#define SU_ARMOR2       (1&lt;&lt;17) // 1 byte, this is .armorvalue &amp; 0xFF00 (second byte)
#define SU_AMMO2        (1&lt;&lt;18) // 1 byte, this is .currentammo &amp; 0xFF00 (second byte)
#define SU_SHELLS2      (1&lt;&lt;19) // 1 byte, this is .ammo_shells &amp; 0xFF00 (second byte)
#define SU_NAILS2       (1&lt;&lt;20) // 1 byte, this is .ammo_nails &amp; 0xFF00 (second byte)
#define SU_ROCKETS2     (1&lt;&lt;21) // 1 byte, this is .ammo_rockets &amp; 0xFF00 (second byte)
#define SU_CELLS2       (1&lt;&lt;22) // 1 byte, this is .ammo_cells &amp; 0xFF00 (second byte)
#define SU_EXTEND2      (1&lt;&lt;23) // another byte to follow
#define SU_WEAPONFRAME2 (1&lt;&lt;24) // 1 byte, this is .weaponframe &amp; 0xFF00 (second byte)
#define SU_WEAPONALPHA  (1&lt;&lt;25) // 1 byte, this is alpha for weaponmodel, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//flags for sound messages
#define SND_LARGEENTITY (1&lt;&lt;3)  // a short + byte (instead of just a short)
#define SND_LARGESOUND  (1&lt;&lt;4)  // a short soundindex (instead of a byte)

//flags for entity baseline messages
#define B_LARGEMODEL    (1&lt;&lt;0)  // modelindex is short instead of byte
#define B_LARGEFRAME    (1&lt;&lt;1)  // frame is short instead of byte
#define B_ALPHA         (1&lt;&lt;2)  // 1 byte, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//new server messages
#define svc_spawnbaseline2      42  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstatic2        43  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstaticsound2   44  // [coord3] [short] samp [byte] vol [byte] aten

//alpha-related definitions and macros
#define ENTALPHA_DEFAULT    0   //entity's alpha is &quot;default&quot; (i.e. water obeys r_wateralpha) -- must be zero so zeroed out memory works
#define ENTALPHA_ZERO       1   //entity is invisible (lowest possible alpha)
#define ENTALPHA_ONE        255 //entity is fully opaque (highest possible alpha)
#define ENTALPHA_ENCODE(a)  (((a)==0)?ENTALPHA_DEFAULT:Q_rint(CLAMP(1,(a)*254.0f+1,255))) //server convert to byte to send to client
#define ENTALPHA_DECODE(a)  (((a)==ENTALPHA_DEFAULT)?1.0f:((float)(a)-1)/(254)) //client convert to float for rendering
#define ENTALPHA_TOSAVE(a)  (((a)==ENTALPHA_DEFAULT)?0.0f:(((a)==ENTALPHA_ZERO)?-1.0f:((float)(a)-1)/(254))) //server convert to float for savegame
&lt;/pre&gt;</text>
      <sha1>5hq2glk3n91q5ncjll5s0uuj47bj1fm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1466</id>
      <parentid>1459</parentid>
      <timestamp>2009-12-03T09:21:12Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="10706">{{Infobox Network Protocol
|name=Fitzquake Protocol
|version=666
|base=[[Netquake Protocol]]
|clients=[[Fitzquake]] 0.85+
[[DirectQ]] 1.7.666+
|servers=[[Fitzquake]] 0.85+
[[DirectQ]] 1.7.666+
}}
The &lt;b&gt;Fitzquake Protocol&lt;/b&gt; is derived from the [[Netquake Protocol]] and was introduced in [[Fitzquake]] version 0.85.  Currently no other clients or servers support it.

==Overview of Features==
The Fitzquake protocol adds support for increased limits such as model and sound precaches, model frames, edicts, and player armor and ammo stats.  It also supports entity and weaponmodel alpha, and adds timing hints for model interpolation.

===Model index &gt; 255===
Quake normally sends model indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.  This works for both entity models and player's weapon models.

===Entity frame index &gt; 255===
Quake normally sends entity frame indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Sound index &gt; 255===
Quake normally sends sound indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Edicts &gt; 8192===
Normally any edict beyond the first 8192 can't play a sound effect, because only 13 bits are devoted to the edict number in a sound message.  Fitzquake can send a full 2-byte edict number in the sound message, so that up to 65535 edicts can play sounds.

===Player ammo and armor &gt; 255===
Player ammo and armor is normally sent as a single byte.  Fitzquake can send a second byte so that the client can recieve ammo/armor values up to 65535.

===High-precision aiming===
Client angles are sent as shorts instead of bytes, for more precise aiming (especially noticable when zoomed in.)
    
===Entity alpha===
Entity alpha is stored on the server as a [[.alpha]] field, and can be hard-coded in the bsp file or set dynamically by [[QuakeC]].  The server will support hard-coded values from the bsp even if the [[progs.dat]] was not compiled with the .alpha field.

Entities with alpha &quot;0&quot; will have a default alpha value, and generally be fully visible.  To explicitly set an entity to invisible, set the alpha to &quot;-1&quot;.  Values between &quot;1&quot; and &quot;0&quot; will interpreted normally.  Note that a map entity with no alpha field specified will get the value &quot;0&quot; at load time, and therefore be default.

Water surfaces on entities that have default alpha will obey r_wateralpha, but water surfaces on entities that have a specified alpha value will ignore r_wateralpha and use the entity alpha.

===Weapon model alpha===
Player weapon model alpha is transmitted seperately from the client entity alpha, but for now the Fitzquake server uses the client entity's .alpha field for both.  There is currently no way for QuakeC to set the weapon alpha specifically.

===Interpolation timing hints===
For entities that don't animate at exactly 10Hz, such as crucified zombies, this hint tells the client what interval to use when lerping to the new frame.  This interval is taken from the entity's [[.nextthink]] value, subtracted from the current server time.  It is only sent to clients when it does not equal 0.1.

==Client Messages==
The following client messages have changed:

===clc_move===
Client angles are always sent to the server as shorts instead of bytes.  The angles are encoded and decoded as follows:

&lt;pre&gt;
void MSG_WriteAngle16 (sizebuf_t *sb, float f)
{
    MSG_WriteShort (sb, Q_rint(f * 65536.0 / 360.0) &amp; 65535);
}

float MSG_ReadAngle16 (void)
{
    return MSG_ReadShort() * (360.0 / 65536);
}
&lt;/pre&gt;

You may need to define Q_rint in your mathlib.h; the definition is:

&lt;pre&gt;
#define Q_rint(x) ((x) &gt; 0 ? (int)((x) + 0.5) : (int)((x) - 0.5))
&lt;/pre&gt;

==Server Messages==
The following server messages have been added, or their behavior has changed:

===entity update===
The existing update flags field can have 5 new flags.

* U_EXTEND1 - another byte of flags will follow the first two.
* U_ALPHA - entity has alpha different than its baseline. Alpha is encoded as a single byte, with a 0 representing &quot;default&quot; alpha, and values 1-255 representing the range 0.0-1.0.  Use the ENTALPHA_ macros (below) to convert correctly between floats and bytes. This byte is sent immediately after the U_ANGLE3 angle, if present.
* U_FRAME2 - entity frame is &gt;255, so a second byte will be sent. It is sent immediately after the U_ALPHA byte, if present.
* U_MODEL2 - entity modelindex is &gt;255, so a second byte will be sent.  It is sent immediately after the U_FRAME2 byte, if present.
* U_LERPFINISH - nextthink interval (ent-&gt;v.nextthink - sv.time) is not exactly 0.1 seconds, so the actual interval will be sent as a byte.  Intervals of 0.0-1.0 seconds map to values 0-255.  Anything &gt;1 is clamped.  It is sent immediately after the U_MODEL2 byte, if present.

===svc_clientdata===
The existing flags field can have 11 new flags:

* SU_EXTEND1 - a third byte of flags follows the first two.
* SU_WEAPON2 - weapon model index is &gt;255, so a second byte will be sent. It is sent immediately after the STAT_ACTIVEWEAPON byte.
* SU_ARMOR2 - armor value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_WEAPON2 byte, if present.
* SU_AMMO2 - current ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ARMOR2 byte, if present.
* SU_SHELLS2 - shell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_AMMO2 byte, if present.
* SU_NAILS2 - nail ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_SHELLS2 byte, if present.
* SU_ROCKETS2 - rocket ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_NAILS2 byte, if present.
* SU_CELLS2 - cell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ROCKETS2 byte, if present.
* SU_EXTEND2 - a fourth byte of flags follows the first three.
* SU_WEAPONFRAME2 - weapon frame index is &gt;255, so a second byte will be sent. It is sent immediately after the SU_CELLS2 byte, if present.
* SU_WEAPONALPHA - weapon alpha is not default, so an alpha byte will be sent. It is encoded the same as U_ALPHA. It is sent immediately after the SU_WEAPONFRAME2 byte, if present.

===svc_sound===
The existing flags field can have 2 new flags. 

* SND_LARGEENTITY - the edict is 2 full bytes followed by a third byte for the channel, rather than packing them into a single short (13 bits for edict, 3 bit for channel.)  This is used whenever the edict number is &gt; 8191.
* SND_LARGESOUND - the sound index is 2 bytes instead of 1.  This is sent when the sound index is &gt; 255.

===svc_spawnbaseline2 (new)===
This message is sent instead of [[svc_spawnbaseline]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnbaseline except a new &quot;flags&quot; byte comes at the beginning of the message.  This byte can have 3 flags:

* B_LARGEMODEL - model index is sent as a short instead of a byte.
* B_LARGEFRAME - frame index is sent as a short instead of a byte.
* B_ALPHA - an alpha byte is added at the end of the message.  Encoded the same as U_ALPHA.

===svc_spawnstatic2 (new)===
This message is sent instead of [[svc_spawnstatic]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnstatic except a new &quot;flags&quot; byte comes at the beginning of the message.  The flags are intepreted the same as svc_spawnbaseline2.

===svc_spawnstaticsound2 (new)===
This message is sent instead of [[svc_spawnstaticsound]] if sound index is &gt; 255.  It is the same as svc_spawnstaticsound except the sound index is 2 bytes.

==Definitions==

&lt;pre&gt;
#define PROTOCOL_FITZQUAKE 666

//flags for entity update messages
#define U_EXTEND1       (1&lt;&lt;15) // another byte to follow
#define U_ALPHA         (1&lt;&lt;16) // 1 byte, uses ENTALPHA_ENCODE, not sent if equal to baseline
#define U_FRAME2        (1&lt;&lt;17) // 1 byte, this is .frame &amp; 0xFF00 (second byte)
#define U_MODEL2        (1&lt;&lt;18) // 1 byte, this is .modelindex &amp; 0xFF00 (second byte)
#define U_LERPFINISH    (1&lt;&lt;19) // 1 byte, 0.0-1.0 maps to 0-255, not sent if exactly 0.1, this is ent-&gt;v.nextthink - sv.time, used for lerping

//flags for client update messages
#define SU_EXTEND1      (1&lt;&lt;15) // another byte to follow
#define SU_WEAPON2      (1&lt;&lt;16) // 1 byte, this is .weaponmodel &amp; 0xFF00 (second byte)
#define SU_ARMOR2       (1&lt;&lt;17) // 1 byte, this is .armorvalue &amp; 0xFF00 (second byte)
#define SU_AMMO2        (1&lt;&lt;18) // 1 byte, this is .currentammo &amp; 0xFF00 (second byte)
#define SU_SHELLS2      (1&lt;&lt;19) // 1 byte, this is .ammo_shells &amp; 0xFF00 (second byte)
#define SU_NAILS2       (1&lt;&lt;20) // 1 byte, this is .ammo_nails &amp; 0xFF00 (second byte)
#define SU_ROCKETS2     (1&lt;&lt;21) // 1 byte, this is .ammo_rockets &amp; 0xFF00 (second byte)
#define SU_CELLS2       (1&lt;&lt;22) // 1 byte, this is .ammo_cells &amp; 0xFF00 (second byte)
#define SU_EXTEND2      (1&lt;&lt;23) // another byte to follow
#define SU_WEAPONFRAME2 (1&lt;&lt;24) // 1 byte, this is .weaponframe &amp; 0xFF00 (second byte)
#define SU_WEAPONALPHA  (1&lt;&lt;25) // 1 byte, this is alpha for weaponmodel, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//flags for sound messages
#define SND_LARGEENTITY (1&lt;&lt;3)  // a short + byte (instead of just a short)
#define SND_LARGESOUND  (1&lt;&lt;4)  // a short soundindex (instead of a byte)

//flags for entity baseline messages
#define B_LARGEMODEL    (1&lt;&lt;0)  // modelindex is short instead of byte
#define B_LARGEFRAME    (1&lt;&lt;1)  // frame is short instead of byte
#define B_ALPHA         (1&lt;&lt;2)  // 1 byte, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//new server messages
#define svc_spawnbaseline2      42  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstatic2        43  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstaticsound2   44  // [coord3] [short] samp [byte] vol [byte] aten

//alpha-related definitions and macros
#define ENTALPHA_DEFAULT    0   //entity's alpha is &quot;default&quot; (i.e. water obeys r_wateralpha) -- must be zero so zeroed out memory works
#define ENTALPHA_ZERO       1   //entity is invisible (lowest possible alpha)
#define ENTALPHA_ONE        255 //entity is fully opaque (highest possible alpha)
#define ENTALPHA_ENCODE(a)  (((a)==0)?ENTALPHA_DEFAULT:Q_rint(CLAMP(1,(a)*254.0f+1,255))) //server convert to byte to send to client
#define ENTALPHA_DECODE(a)  (((a)==ENTALPHA_DEFAULT)?1.0f:((float)(a)-1)/(254)) //client convert to float for rendering
#define ENTALPHA_TOSAVE(a)  (((a)==ENTALPHA_DEFAULT)?0.0f:(((a)==ENTALPHA_ZERO)?-1.0f:((float)(a)-1)/(254))) //server convert to float for savegame
&lt;/pre&gt;</text>
      <sha1>a3euhdt1b2nh7rn8wy0nod4psfl4fml</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1468</id>
      <parentid>1466</parentid>
      <timestamp>2009-12-03T09:57:25Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="10708">{{Infobox Network Protocol
|name=Fitzquake Protocol
|version=666
|base=[[Netquake Protocol]]
|clients=[[Fitzquake]] 0.85+
[[DirectQ]] 1.7.666+
|servers=[[Fitzquake]] 0.85+
[[DirectQ]] 1.7.666+
}}
The '''Fitzquake Protocol''' is derived from the [[Netquake Protocol]] and was introduced in [[Fitzquake]] version 0.85.  Currently only Fitzquake and [[DirectQ]] support it.

==Overview of Features==
The Fitzquake protocol adds support for increased limits such as model and sound precaches, model frames, edicts, and player armor and ammo stats.  It also supports entity and weaponmodel alpha, and adds timing hints for model interpolation.

===Model index &gt; 255===
Quake normally sends model indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.  This works for both entity models and player's weapon models.

===Entity frame index &gt; 255===
Quake normally sends entity frame indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Sound index &gt; 255===
Quake normally sends sound indexes as a single byte.  Fitzquake can send a second byte when the index exceeds 255.

===Edicts &gt; 8192===
Normally any edict beyond the first 8192 can't play a sound effect, because only 13 bits are devoted to the edict number in a sound message.  Fitzquake can send a full 2-byte edict number in the sound message, so that up to 65535 edicts can play sounds.

===Player ammo and armor &gt; 255===
Player ammo and armor is normally sent as a single byte.  Fitzquake can send a second byte so that the client can recieve ammo/armor values up to 65535.

===High-precision aiming===
Client angles are sent as shorts instead of bytes, for more precise aiming (especially noticable when zoomed in.)
    
===Entity alpha===
Entity alpha is stored on the server as a [[.alpha]] field, and can be hard-coded in the bsp file or set dynamically by [[QuakeC]].  The server will support hard-coded values from the bsp even if the [[progs.dat]] was not compiled with the .alpha field.

Entities with alpha &quot;0&quot; will have a default alpha value, and generally be fully visible.  To explicitly set an entity to invisible, set the alpha to &quot;-1&quot;.  Values between &quot;1&quot; and &quot;0&quot; will interpreted normally.  Note that a map entity with no alpha field specified will get the value &quot;0&quot; at load time, and therefore be default.

Water surfaces on entities that have default alpha will obey r_wateralpha, but water surfaces on entities that have a specified alpha value will ignore r_wateralpha and use the entity alpha.

===Weapon model alpha===
Player weapon model alpha is transmitted seperately from the client entity alpha, but for now the Fitzquake server uses the client entity's .alpha field for both.  There is currently no way for QuakeC to set the weapon alpha specifically.

===Interpolation timing hints===
For entities that don't animate at exactly 10Hz, such as crucified zombies, this hint tells the client what interval to use when lerping to the new frame.  This interval is taken from the entity's [[.nextthink]] value, subtracted from the current server time.  It is only sent to clients when it does not equal 0.1.

==Client Messages==
The following client messages have changed:

===clc_move===
Client angles are always sent to the server as shorts instead of bytes.  The angles are encoded and decoded as follows:

&lt;pre&gt;
void MSG_WriteAngle16 (sizebuf_t *sb, float f)
{
    MSG_WriteShort (sb, Q_rint(f * 65536.0 / 360.0) &amp; 65535);
}

float MSG_ReadAngle16 (void)
{
    return MSG_ReadShort() * (360.0 / 65536);
}
&lt;/pre&gt;

You may need to define Q_rint in your mathlib.h; the definition is:

&lt;pre&gt;
#define Q_rint(x) ((x) &gt; 0 ? (int)((x) + 0.5) : (int)((x) - 0.5))
&lt;/pre&gt;

==Server Messages==
The following server messages have been added, or their behavior has changed:

===entity update===
The existing update flags field can have 5 new flags.

* U_EXTEND1 - another byte of flags will follow the first two.
* U_ALPHA - entity has alpha different than its baseline. Alpha is encoded as a single byte, with a 0 representing &quot;default&quot; alpha, and values 1-255 representing the range 0.0-1.0.  Use the ENTALPHA_ macros (below) to convert correctly between floats and bytes. This byte is sent immediately after the U_ANGLE3 angle, if present.
* U_FRAME2 - entity frame is &gt;255, so a second byte will be sent. It is sent immediately after the U_ALPHA byte, if present.
* U_MODEL2 - entity modelindex is &gt;255, so a second byte will be sent.  It is sent immediately after the U_FRAME2 byte, if present.
* U_LERPFINISH - nextthink interval (ent-&gt;v.nextthink - sv.time) is not exactly 0.1 seconds, so the actual interval will be sent as a byte.  Intervals of 0.0-1.0 seconds map to values 0-255.  Anything &gt;1 is clamped.  It is sent immediately after the U_MODEL2 byte, if present.

===svc_clientdata===
The existing flags field can have 11 new flags:

* SU_EXTEND1 - a third byte of flags follows the first two.
* SU_WEAPON2 - weapon model index is &gt;255, so a second byte will be sent. It is sent immediately after the STAT_ACTIVEWEAPON byte.
* SU_ARMOR2 - armor value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_WEAPON2 byte, if present.
* SU_AMMO2 - current ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ARMOR2 byte, if present.
* SU_SHELLS2 - shell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_AMMO2 byte, if present.
* SU_NAILS2 - nail ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_SHELLS2 byte, if present.
* SU_ROCKETS2 - rocket ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_NAILS2 byte, if present.
* SU_CELLS2 - cell ammo value is &gt;255, so a second byte will be sent. It is sent immediately after the SU_ROCKETS2 byte, if present.
* SU_EXTEND2 - a fourth byte of flags follows the first three.
* SU_WEAPONFRAME2 - weapon frame index is &gt;255, so a second byte will be sent. It is sent immediately after the SU_CELLS2 byte, if present.
* SU_WEAPONALPHA - weapon alpha is not default, so an alpha byte will be sent. It is encoded the same as U_ALPHA. It is sent immediately after the SU_WEAPONFRAME2 byte, if present.

===svc_sound===
The existing flags field can have 2 new flags. 

* SND_LARGEENTITY - the edict is 2 full bytes followed by a third byte for the channel, rather than packing them into a single short (13 bits for edict, 3 bit for channel.)  This is used whenever the edict number is &gt; 8191.
* SND_LARGESOUND - the sound index is 2 bytes instead of 1.  This is sent when the sound index is &gt; 255.

===svc_spawnbaseline2 (new)===
This message is sent instead of [[svc_spawnbaseline]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnbaseline except a new &quot;flags&quot; byte comes at the beginning of the message.  This byte can have 3 flags:

* B_LARGEMODEL - model index is sent as a short instead of a byte.
* B_LARGEFRAME - frame index is sent as a short instead of a byte.
* B_ALPHA - an alpha byte is added at the end of the message.  Encoded the same as U_ALPHA.

===svc_spawnstatic2 (new)===
This message is sent instead of [[svc_spawnstatic]] if an entity has alpha, has a model index &gt; 255, or has a frame index &gt; 255.  It is similar to svc_spawnstatic except a new &quot;flags&quot; byte comes at the beginning of the message.  The flags are intepreted the same as svc_spawnbaseline2.

===svc_spawnstaticsound2 (new)===
This message is sent instead of [[svc_spawnstaticsound]] if sound index is &gt; 255.  It is the same as svc_spawnstaticsound except the sound index is 2 bytes.

==Definitions==

&lt;pre&gt;
#define PROTOCOL_FITZQUAKE 666

//flags for entity update messages
#define U_EXTEND1       (1&lt;&lt;15) // another byte to follow
#define U_ALPHA         (1&lt;&lt;16) // 1 byte, uses ENTALPHA_ENCODE, not sent if equal to baseline
#define U_FRAME2        (1&lt;&lt;17) // 1 byte, this is .frame &amp; 0xFF00 (second byte)
#define U_MODEL2        (1&lt;&lt;18) // 1 byte, this is .modelindex &amp; 0xFF00 (second byte)
#define U_LERPFINISH    (1&lt;&lt;19) // 1 byte, 0.0-1.0 maps to 0-255, not sent if exactly 0.1, this is ent-&gt;v.nextthink - sv.time, used for lerping

//flags for client update messages
#define SU_EXTEND1      (1&lt;&lt;15) // another byte to follow
#define SU_WEAPON2      (1&lt;&lt;16) // 1 byte, this is .weaponmodel &amp; 0xFF00 (second byte)
#define SU_ARMOR2       (1&lt;&lt;17) // 1 byte, this is .armorvalue &amp; 0xFF00 (second byte)
#define SU_AMMO2        (1&lt;&lt;18) // 1 byte, this is .currentammo &amp; 0xFF00 (second byte)
#define SU_SHELLS2      (1&lt;&lt;19) // 1 byte, this is .ammo_shells &amp; 0xFF00 (second byte)
#define SU_NAILS2       (1&lt;&lt;20) // 1 byte, this is .ammo_nails &amp; 0xFF00 (second byte)
#define SU_ROCKETS2     (1&lt;&lt;21) // 1 byte, this is .ammo_rockets &amp; 0xFF00 (second byte)
#define SU_CELLS2       (1&lt;&lt;22) // 1 byte, this is .ammo_cells &amp; 0xFF00 (second byte)
#define SU_EXTEND2      (1&lt;&lt;23) // another byte to follow
#define SU_WEAPONFRAME2 (1&lt;&lt;24) // 1 byte, this is .weaponframe &amp; 0xFF00 (second byte)
#define SU_WEAPONALPHA  (1&lt;&lt;25) // 1 byte, this is alpha for weaponmodel, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//flags for sound messages
#define SND_LARGEENTITY (1&lt;&lt;3)  // a short + byte (instead of just a short)
#define SND_LARGESOUND  (1&lt;&lt;4)  // a short soundindex (instead of a byte)

//flags for entity baseline messages
#define B_LARGEMODEL    (1&lt;&lt;0)  // modelindex is short instead of byte
#define B_LARGEFRAME    (1&lt;&lt;1)  // frame is short instead of byte
#define B_ALPHA         (1&lt;&lt;2)  // 1 byte, uses ENTALPHA_ENCODE, not sent if ENTALPHA_DEFAULT

//new server messages
#define svc_spawnbaseline2      42  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstatic2        43  // support for large modelindex, large framenum, alpha, using flags
#define svc_spawnstaticsound2   44  // [coord3] [short] samp [byte] vol [byte] aten

//alpha-related definitions and macros
#define ENTALPHA_DEFAULT    0   //entity's alpha is &quot;default&quot; (i.e. water obeys r_wateralpha) -- must be zero so zeroed out memory works
#define ENTALPHA_ZERO       1   //entity is invisible (lowest possible alpha)
#define ENTALPHA_ONE        255 //entity is fully opaque (highest possible alpha)
#define ENTALPHA_ENCODE(a)  (((a)==0)?ENTALPHA_DEFAULT:Q_rint(CLAMP(1,(a)*254.0f+1,255))) //server convert to byte to send to client
#define ENTALPHA_DECODE(a)  (((a)==ENTALPHA_DEFAULT)?1.0f:((float)(a)-1)/(254)) //client convert to float for rendering
#define ENTALPHA_TOSAVE(a)  (((a)==ENTALPHA_DEFAULT)?0.0f:(((a)==ENTALPHA_ZERO)?-1.0f:((float)(a)-1)/(254))) //server convert to float for savegame
&lt;/pre&gt;</text>
      <sha1>ebb4yf7rrgjt7adhp2tw2aqcrxa1lbm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Float</title>
    <ns>0</ns>
    <id>393</id>
    <revision>
      <id>664</id>
      <timestamp>2008-05-07T17:27:29Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: === Float type === A floating point value.  Floats are also used to store booleans (TRUE, FALSE) or integer values linke counters, or bit flags.      Valid syntax: 12, 1.6, 0.5, -100      ...</comment>
      <text xml:space="preserve" bytes="402">=== Float type ===
A floating point value.

Floats are also used to store booleans (TRUE, FALSE) or integer values linke counters, or bit flags.

    Valid syntax: 12, 1.6, 0.5, -100  
    Invalid syntax: .5

A parsing ambiguity is present with negative constants. &quot;a-5&quot; will be parsed as &quot;a&quot;, then &quot;-5&quot;, causing an error. Separate the - from the digits with a space &quot;a - 5&quot; to get the proper behavior.</text>
      <sha1>hil7m9cncfk8acmuucbnnoon1hnk0ky</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Floor</title>
    <ns>0</ns>
    <id>822</id>
    <redirect title="floor" />
    <revision>
      <id>2406</id>
      <timestamp>2013-03-28T15:03:47Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Spirit moved page [[Floor]] to [[floor]]: lowercase</comment>
      <text xml:space="preserve" bytes="19">#REDIRECT [[floor]]</text>
      <sha1>tfb5dr6m1gz210vjio98wxda5lj25d3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Fov</title>
    <ns>0</ns>
    <id>88</id>
    <revision>
      <id>148</id>
      <timestamp>2007-10-30T23:01:11Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |title=fov |default-value=90 |saved-to-config=no }}  fov stands for &quot;Field of Vision&quot;. Its default is &quot;90&quot; (degrees). That is how much y...</comment>
      <text xml:space="preserve" bytes="562">{{lowercase-underscores}}{{Infobox Console variable
|title=fov
|default-value=90
|saved-to-config=no
}}

fov stands for &quot;Field of Vision&quot;. Its default is &quot;90&quot; (degrees). That is how much you can see on the screen. If you set it higher, like 135, you would see more of the world, like viewing through a wide-angle camera lens. If you set it lower, like 45, it would produce the same effect as zooming in.

Most engines clamp the value between 10 and 170.

FIXME: Does the fov specify horizontal or vertical fov? (The other would be derived using the aspect ratio)</text>
      <sha1>huyf0fiyaxpgc01r54od51o3zc2jchj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>149</id>
      <parentid>148</parentid>
      <timestamp>2007-10-30T23:01:45Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="585">{{lowercase-underscores}}{{Infobox Console variable
|title=fov
|default-value=90
|saved-to-config=no
}}

fov stands for &quot;Field of Vision&quot;. Its default is &quot;90&quot; (degrees). That is how much you can see on the screen. If you set it higher, like 135, you would see more of the world, like viewing through a wide-angle camera lens. If you set it lower, like 45, it would produce the same effect as zooming in.

Most engines clamp the value between 10 and 170.

FIXME: Does the fov specify horizontal or vertical fov? (The other would be derived using the aspect ratio)

{{Console variables}}</text>
      <sha1>gr1jcwncx1xrniumhmw53wolltwzell</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1462</id>
      <parentid>149</parentid>
      <timestamp>2009-11-26T05:27:16Z</timestamp>
      <contributor>
        <ip>75.38.157.126</ip>
      </contributor>
      <comment>I filled in some idiotic and limited knowledge of mine. some one please clean up my retarded phrasing in my edit.</comment>
      <text xml:space="preserve" bytes="764">{{lowercase-underscores}}{{Infobox Console variable
|title=fov
|default-value=90
|saved-to-config=no
}}

fov stands for &quot;Field of Vision&quot;. Its default is &quot;90&quot; (degrees). That is how much you can see on the screen. If you set it higher, like 135, you would see more of the world, like viewing through a wide-angle camera lens. If you set it lower, like 45, it would produce the same effect as zooming in.

Most engines clamp the value between 10 and 170.

The FOV variable specifies horizontal field of view assuming a 4x3 aspect ratio. Vertically, it stays consistent throughout the possible aspect ratios. For example; the FOV can be 90 (of course), but if you were to be playing the game on a 16x9 display, it would display as 120 degrees.

{{Console variables}}</text>
      <sha1>d3e4xpt4jskw2yuuklu5vec4sfi2ib0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Fraglimit</title>
    <ns>0</ns>
    <id>128</id>
    <revision>
      <id>203</id>
      <timestamp>2007-10-31T00:47:05Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=fraglimit |default-value=0 |saved-to-config=no }} Server-side variable.  When any player on the server reaches the fraglimit value...</comment>
      <text xml:space="preserve" bytes="377">{{lowercase-underscores}}{{Infobox Console variable
|name=fraglimit
|default-value=0
|saved-to-config=no
}}
Server-side variable.

When any player on the server reaches the fraglimit value he wins that map and that game ends. If a server admin dont want to use a fraglimit he can set it to 0. The game will then play forever (if no [[timelimit]] is set).

{{Console variables}}</text>
      <sha1>t24mf4yxtu09059g8qe8u022fyoguu7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>209</id>
      <parentid>203</parentid>
      <timestamp>2007-11-01T23:15:05Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="380">{{lowercase-underscores}}{{Infobox Console variable
|name=fraglimit
|default-value=0
|saved-to-config=no
}}
Server-side variable.

When any player on the server reaches the fraglimit value he wins that map and that game ends. If a server admin doesn't want to use a fraglimit he can set it to 0. The game will then play forever (if no [[timelimit]] is set).

{{Console variables}}</text>
      <sha1>jnsm0boycqv7aqtvcrq53xl3zgcsjh0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Free resources</title>
    <ns>0</ns>
    <id>881</id>
    <redirect title="free resources" />
    <revision>
      <id>2529</id>
      <timestamp>2013-03-29T14:22:02Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Free resources]] to [[free resources]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="28">#REDIRECT [[free resources]]</text>
      <sha1>34xwq40yvcvp1ktg6w70huxcn9dzx8a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>FrikQCC</title>
    <ns>0</ns>
    <id>454</id>
    <revision>
      <id>800</id>
      <timestamp>2008-05-09T17:26:31Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: FrikQCC started just before the Quake engine source release last year. Based off of Johathan Roy's FastQCC, I tried to bring new features to the code to make Quake more appealing a languag...</comment>
      <text xml:space="preserve" bytes="1214">FrikQCC started just before the Quake engine source release last year. Based off of Johathan Roy's FastQCC,
I tried to bring new features to the code to make Quake more appealing a language to high nosed
programmers that said it wasn't a 'proper language'.
&lt;P&gt;Early in 2000, JP Grossman released qccx, which proved to be a major turning point in frikqcc. Though most of his engine data hacking features leave me a bit dry, the optimizations really got my mind working in overdrive. The result is the below.

&lt;TABLE BORDER = 0&gt;
&lt;TH&gt;File&lt;/TH&gt;&lt;TH&gt;Description&lt;/TH&gt;
&lt;TR&gt;&lt;TD&gt;&lt;A NAME=&quot;frikqcc&quot;&gt;&lt;A HREF=&quot;http://www.3ddownloads.com/telefragged/inside3d/frikbot/misc/winfrik26.zip&quot;&gt;winfrik26.zip&lt;/A&gt;&lt;/TD&gt;&lt;TD&gt;[Updated! Version 2.6!] This is a customized version of qccx. It supports: goto, labels, static variables, new optimizations, compiler warnings, and many other features.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;&lt;TD&gt;&lt;A NAME=&quot;linfrikqcc&quot;&gt;&lt;A HREF=&quot;http://www.3ddownloads.com/telefragged/inside3d/frikbot/misc/friklinux.zip&quot;&gt;friklinux.zip&lt;/A&gt;&lt;/TD&gt;&lt;TD&gt;Linux binaries&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;&lt;TD&gt;&lt;A NAME=&quot;frikqccsrc&quot;&gt;&lt;A HREF=&quot;http://www.3ddownloads.com/telefragged/inside3d/frikbot/misc/frik26src.zip&quot;&gt;frik26src.zip&lt;/A&gt;&lt;/TD&gt;&lt;TD&gt;Source code&lt;/TD&gt;&lt;/TR&gt;

&lt;/TABLE&gt;</text>
      <sha1>dkw7cquck6abveqkjykwl6fevexq9um</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>801</id>
      <parentid>800</parentid>
      <timestamp>2008-05-09T17:32:22Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="995">FrikQCC started just before the Quake engine source release last year. Based off of Johathan Roy's FastQCC,
I tried to bring new features to the code to make Quake more appealing a language to high nosed
programmers that said it wasn't a 'proper language'.
Early in 2000, JP Grossman released qccx, which proved to be a major turning point in frikqcc. Though most of his engine data hacking features leave me a bit dry, the optimizations really got my mind working in overdrive. The result is the below.
----

*Winfrik26.zip[http://www.3ddownloads.com/telefragged/inside3d/frikbot/misc/winfrik26.zip]
  [Updated! Version 2.6!] This is a customized version of qccx. 
  It supports: goto, labels, static variables, new optimizations, compiler warnings, and many other features.

*friklinux.zip  [http://www.3ddownloads.com/telefragged/inside3d/frikbot/misc/friklinux.zip]

  Linux binaries

*frik26src.zip [http://www.3ddownloads.com/telefragged/inside3d/frikbot/misc/frik26src.zip]
   Source code</text>
      <sha1>hikrhtjkkmehw7vgv4ok1gol24tr88m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Ftos</title>
    <ns>0</ns>
    <id>191</id>
    <revision>
      <id>367</id>
      <timestamp>2008-02-22T19:24:43Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  string '''ftos'''(float ''value'')  Float to string: converts ''value'' to string.</comment>
      <text xml:space="preserve" bytes="83"> string '''ftos'''(float ''value'')

Float to string: converts ''value'' to string.</text>
      <sha1>cogl5oa4hidvh7lxhs3zlt0fsttzosf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>GLQuake</title>
    <ns>0</ns>
    <id>153</id>
    <revision>
      <id>240</id>
      <timestamp>2007-11-02T20:19:14Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{Infobox Engine |name=GLQuake |author=[[id Software]] |based-on=n/a |first-release=? |newest-release=? |website=? }} [[id Software]] released this hacked version of Quake to work with Ope...</comment>
      <text xml:space="preserve" bytes="1269">{{Infobox Engine
|name=GLQuake
|author=[[id Software]]
|based-on=n/a
|first-release=?
|newest-release=?
|website=?
}}
[[id Software]] released this hacked version of Quake to work with OpenGL while it was constructing Quake 2. There are quite a few problems and differences that should be noted about GLQuake. First off GLQuake does not support [[fullbrights]] - this is a minor visual fault, but remember when working with new textures and graphics to always check to see how it looks in classic software quake as, due to poor error diffusion, your new textures may be bespeckled with fullbrights. GLQuake also doesn't support most [[sprite modes]]. Although sprites are frowned upon in Quake, as it's considered old tech, modders find sprites incredibly useful for special effects. Thirdly, and not really a problem, GLQuake supports [[r_wateralpha|translucent water]], but you need to use a special version of [[VIS]] to have it in your maps.

GLQuake is the base for most modern ports of the Quake engine. Check [[DarkPlaces]] and [[Tenebrae]] sources for heavily improved code. Check [[FitzQuake]] and the [[GQ]] engine for bug-free enhanced classic GLQuake play. Check [[Telejano]] and [[CheapHack]] for eyecandy enhanced GLQuake/[[TomazQuake]] code.

{{Engines}}</text>
      <sha1>1wn2nw13zd4maj36tequksy2bujkj48</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>244</id>
      <parentid>240</parentid>
      <timestamp>2007-11-02T20:23:11Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1311">{{Infobox Engine
|name=GLQuake
|author=[[id Software]]
|based-on=[[Quake (DOS engine)|Quake]] or [[WinQuake]]?
|first-release=?
|newest-release=?
|website=?
}}
[[id Software]] released this hacked version of Quake to work with OpenGL while it was constructing Quake 2. There are quite a few problems and differences that should be noted about GLQuake. First off GLQuake does not support [[fullbrights]] - this is a minor visual fault, but remember when working with new textures and graphics to always check to see how it looks in classic software quake as, due to poor error diffusion, your new textures may be bespeckled with fullbrights. GLQuake also doesn't support most [[sprite modes]]. Although sprites are frowned upon in Quake, as it's considered old tech, modders find sprites incredibly useful for special effects. Thirdly, and not really a problem, GLQuake supports [[r_wateralpha|translucent water]], but you need to use a special version of [[VIS]] to have it in your maps.

GLQuake is the base for most modern ports of the Quake engine. Check [[DarkPlaces]] and [[Tenebrae]] sources for heavily improved code. Check [[FitzQuake]] and the [[GQ]] engine for bug-free enhanced classic GLQuake play. Check [[Telejano]] and [[CheapHack]] for eyecandy enhanced GLQuake/[[TomazQuake]] code.

{{Engines}}</text>
      <sha1>e1dc0rhsgeh9cbqh3dw9gbiehvuf5n9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>642</id>
      <parentid>244</parentid>
      <timestamp>2008-04-21T20:43:46Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <text xml:space="preserve" bytes="1506">{{Infobox Engine
|name=GLQuake
|author=[[id Software]]
|based-on=[[Quake (DOS engine)|Quake]] or [[WinQuake]]?
|first-release=?
|newest-release=?
|website=?
}}
[[id Software]] released this hacked version of Quake to work with OpenGL while it was constructing Quake 2. There are quite a few problems and differences that should be noted about GLQuake. First off GLQuake does not support [[fullbrights]] - this is a minor visual fault, but remember when working with new textures and graphics to always check to see how it looks in classic software quake as, due to poor error diffusion, your new textures may be bespeckled with fullbrights. GLQuake also doesn't support most [[sprite modes]]. Although sprites are frowned upon in Quake, as it's considered old tech, modders find sprites incredibly useful for special effects. Thirdly, and not really a problem, GLQuake supports [[r_wateralpha|translucent water]], but you need to use a special version of [[VIS]] to have it in your maps. And finally, GLQuake lacks [[overbright] lighting and gamma correction. Third party utilities to modify the palette to make GLQuake appear brighter have existed prior to the source code release.

GLQuake is the base for most modern ports of the Quake engine. Check [[DarkPlaces]] and [[Tenebrae]] sources for heavily improved code. Check [[FitzQuake]] and the [[GQ]] engine for bug-free enhanced classic GLQuake play. Check [[Telejano]] and [[CheapHack]] for eyecandy enhanced GLQuake/[[TomazQuake]] code.

{{Engines}}</text>
      <sha1>keeexttkcilinbx8tqvzx5x86pxyk37</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>643</id>
      <parentid>642</parentid>
      <timestamp>2008-04-21T20:44:00Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1507">{{Infobox Engine
|name=GLQuake
|author=[[id Software]]
|based-on=[[Quake (DOS engine)|Quake]] or [[WinQuake]]?
|first-release=?
|newest-release=?
|website=?
}}
[[id Software]] released this hacked version of Quake to work with OpenGL while it was constructing Quake 2. There are quite a few problems and differences that should be noted about GLQuake. First off GLQuake does not support [[fullbrights]] - this is a minor visual fault, but remember when working with new textures and graphics to always check to see how it looks in classic software quake as, due to poor error diffusion, your new textures may be bespeckled with fullbrights. GLQuake also doesn't support most [[sprite modes]]. Although sprites are frowned upon in Quake, as it's considered old tech, modders find sprites incredibly useful for special effects. Thirdly, and not really a problem, GLQuake supports [[r_wateralpha|translucent water]], but you need to use a special version of [[VIS]] to have it in your maps. And finally, GLQuake lacks [[overbright]] lighting and gamma correction. Third party utilities to modify the palette to make GLQuake appear brighter have existed prior to the source code release.

GLQuake is the base for most modern ports of the Quake engine. Check [[DarkPlaces]] and [[Tenebrae]] sources for heavily improved code. Check [[FitzQuake]] and the [[GQ]] engine for bug-free enhanced classic GLQuake play. Check [[Telejano]] and [[CheapHack]] for eyecandy enhanced GLQuake/[[TomazQuake]] code.

{{Engines}}</text>
      <sha1>h2chlav6c6r9pj9ffsfj7nuscbqcx3f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>644</id>
      <parentid>643</parentid>
      <timestamp>2008-04-21T20:44:28Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <text xml:space="preserve" bytes="1557">{{Infobox Engine
|name=GLQuake
|author=[[id Software]]
|based-on=[[Quake (DOS engine)|Quake]] or [[WinQuake]]?
|first-release=?
|newest-release=?
|website=?
}}
[[id Software]] released this hacked version of Quake to work with OpenGL while it was constructing Quake 2. There are quite a few problems and differences that should be noted about GLQuake. First off GLQuake does not support [[fullbrights]] - this is a minor visual fault, but remember when working with new textures and graphics to always check to see how it looks in classic software quake as, due to poor error diffusion, your new textures may be bespeckled with fullbrights. GLQuake also doesn't support most [[sprite modes]]. Although sprites are frowned upon in Quake, as it's considered old tech, modders find sprites incredibly useful for special effects. Thirdly, and not really a problem, GLQuake supports [[r_wateralpha|translucent water]], but you need to use a special version of [[VIS]] to have it in your maps. And finally, GLQuake lacks [[overbright]] lighting and gamma correction. Third party utilities to modify the palette to make GLQuake appear brighter have existed prior to the source code release.

GLQuake is the base for most modern ports of the Quake engine. Check [[DarkPlaces]] and [[Tenebrae]] sources for heavily improved code. Check [[FitzQuake]] and the [[GQ]] engine for bug-free enhanced classic GLQuake play. Check [[Telejano]] and [[CheapHack]] for eyecandy enhanced GLQuake/[[TomazQuake]] code.

{{Engines}}
{{GL NetQuake Engines}}
{{GL QuakeWorld Engines}}</text>
      <sha1>8vbko7k2lo6mxgxew0vwl8q0aw4t6nw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>645</id>
      <parentid>644</parentid>
      <timestamp>2008-04-21T20:46:55Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <text xml:space="preserve" bytes="1638">{{Infobox Engine
|name=GLQuake
|author=[[id Software]]
|based-on=[[WinQuake]]
|first-release=March 28, 1997
|newest-release=November 14, 1997
|website=[http://idsoftware.com Id Software]
}}
[[id Software]] released this hacked version of Quake to work with OpenGL while it was constructing Quake 2. There are quite a few problems and differences that should be noted about GLQuake. First off GLQuake does not support [[fullbrights]] - this is a minor visual fault, but remember when working with new textures and graphics to always check to see how it looks in classic software quake as, due to poor error diffusion, your new textures may be bespeckled with fullbrights. GLQuake also doesn't support most [[sprite modes]]. Although sprites are frowned upon in Quake, as it's considered old tech, modders find sprites incredibly useful for special effects. Thirdly, and not really a problem, GLQuake supports [[r_wateralpha|translucent water]], but you need to use a special version of [[VIS]] to have it in your maps. And finally, GLQuake lacks [[overbright]] lighting, and gamma correction (which many 3D cards did not support at the time). Third party utilities to modify the palette to make GLQuake appear brighter have existed prior to the source code release.

GLQuake is the base for most modern ports of the Quake engine. Check [[DarkPlaces]] and [[Tenebrae]] sources for heavily improved code. Check [[FitzQuake]] and the [[GQ]] engine for bug-free enhanced classic GLQuake play. Check [[Telejano]] and [[CheapHack]] for eyecandy enhanced GLQuake/[[TomazQuake]] code.

{{Engines}}
{{GL NetQuake Engines}}
{{GL QuakeWorld Engines}}</text>
      <sha1>3kl9u16rn6psvei17uwpgf0hw8fmp7n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1078</id>
      <parentid>645</parentid>
      <timestamp>2009-07-12T00:32:54Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>removed recommendations; find a better place for them or just let people make up their own minds. Added info from [[Engines]]</comment>
      <text xml:space="preserve" bytes="2543">{{Infobox Engine
|name=GLQuake
|author=[[id Software]]
|based-on=[[WinQuake]]
|first-release=March 28, 1997
|newest-release=November 14, 1997
|website=[http://idsoftware.com Id Software]
}}
One of Quake's original developers created '''GLQuake''', an [[engine]] which provides hardware-accelerated graphics using OpenGL APIs. GLQuake is the base for most modern ports of the Quake engine.

GLQuake is known to be buggy, and it has one big usability problem: The game's built-in brightness/gamma setting doesn't do anything, and the visuals tend to be way too dark unless you first run a program to increase your display adapter's gamma setting (which then makes everything else appear too bright). This isn't a showstopper, but it can be inconvenient. Also, the video mode can only be changed at the command line, not in-game.

GLQuake is official, but is not supported by id Software. It runs any version of Windows (Win95 and up), or Linux. It is said to require the 'registered' Quake (that is, with ''ID1\pak1.pak'' present), but it will actually run on the shareware version, possibly with quirky startup behavior.

Some other minor caveats about GLQuake, for developers: GLQuake does not support [[fullbrights]] - this is a minor visual fault, but remember when working with new textures and graphics to always check to see how it looks in classic software quake as, due to poor error diffusion, your new textures may be bespeckled with fullbrights. GLQuake also doesn't support most [[sprite modes]]. Although sprites are frowned upon in Quake, as it's considered old tech, modders find sprites incredibly useful for special effects. Thirdly, and not really a problem, GLQuake supports [[r_wateralpha|translucent water]], but you need to use a special version of [[VIS]] to have it in your maps. And finally, GLQuake lacks [[overbright]] lighting, and gamma correction (which many 3D cards did not support at the time). Third party utilities to modify the palette to make GLQuake appear brighter have existed prior to the source code release.

Official distributions:
* v0.97 of GLQuake (Quake 1.09; November 1997) is in [ftp://ftp.idsoftware.com/idstuff/unsup/glq1114.exe ''glq1114.exe'']. This is an installer app for DOS or Windows. It will prompt you whether to install a 3dfx driver; don't do this unless you want the engine to be dependent on having a 3dfx-based graphics card's Glide drivers already installed.
* There is also an official distribution for Linux 2.0.

{{Engines}}
{{GL NetQuake Engines}}
{{GL QuakeWorld Engines}}</text>
      <sha1>7xmxznt0o3mr5snznewu8cxlgaiznz4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>GQ</title>
    <ns>0</ns>
    <id>156</id>
    <revision>
      <id>245</id>
      <timestamp>2007-11-02T21:17:13Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{Infobox Engine |name=GQ |author=Gleeb |based-on=? |first-release=? |newest-release=1.10 |website=[http://gzone.planetquake.gamespy.com/gq.shtml here] }} GQ is a personalized engine, not ...</comment>
      <text xml:space="preserve" bytes="497">{{Infobox Engine
|name=GQ
|author=Gleeb
|based-on=?
|first-release=?
|newest-release=1.10
|website=[http://gzone.planetquake.gamespy.com/gq.shtml here]
}}
GQ is a personalized engine, not driven by pushing the quake world, but to get away with implementing as little as possible to play current projects.

=== Supported Extensions ===
* [[EBSP]]
* [[.ENT file]] loading

=== Supported Extensions in the Dev Build ===
(As of last update)

* [[FRIK_FILE]]

''Information is incomplete''

{{Engines}}</text>
      <sha1>1debexj0ubizvqbyoks1bqmbsz7tlzr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Gameplay tips</title>
    <ns>0</ns>
    <id>16</id>
    <revision>
      <id>22</id>
      <timestamp>2007-10-30T16:49:52Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: ===The Rocket Jump=== Simply have a Rocket Launcher, armor is favored, aim down, jump, then fire a rocket under to propel yourself a bit more. It is used very often, even I (CheapAlert) us...</comment>
      <text xml:space="preserve" bytes="420">===The Rocket Jump===
Simply have a Rocket Launcher, armor is favored, aim down, jump, then fire a rocket under to propel yourself a bit more. It is used very often, even I (CheapAlert) use it even when I have 10 health (And I die) :P

For tips on dealing with each of the monsters and bosses in Quake, see the [[Monsters]] page.

===See Also===
* [http://www.quaketerminus.com/quakebible/index.htm Thresh's Quake Bible]</text>
      <sha1>60elxrn0sq6puv019963r1jg1qs80vc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>291</id>
      <parentid>22</parentid>
      <timestamp>2008-01-17T09:07:11Z</timestamp>
      <contributor>
        <ip>212.125.80.6</ip>
      </contributor>
      <comment>/* The Rocket Jump */</comment>
      <text xml:space="preserve" bytes="1344">===The Rocket Jump===
Simply have a Rocket Launcher, armor is favored, aim down, jump, then fire a rocket under to propel yourself a bit more. It is used very often, even I (CheapAlert) use it even when I have 10 health (And I die) :P

For tips on dealing with each of the monsters and bosses in Quake, see the [[Monsters]] page.


===The Grenade plus Rocket Jump===
Ensure that you have the grenade launcher, rocket launcher, at least 2 rocketys and adequate armour and health before starting, the more of each the better. Select the grenade launcher and fire a grenade aiming to land on a particular spot (the launch position), one way to do this is to fire vertically in to the air as soon as you have fired the greande switch to the Rocket Launcher and at the point that the grenade lands for it's second bounce move the launch position and fire a rocket directly at the ground. If you time it right, i.e. so that the rocket hits the ground at the same point that grenade explodes you should find that you are able to jump significantly higher/lomger than with just the Rocket Jump. The disadvantage is that it requires more ammo/weapons, usually takes longer to perform, which can be problematic during battles, and does more damage to your player.

===See Also===
* [http://www.quaketerminus.com/quakebible/index.htm Thresh's Quake Bible]</text>
      <sha1>2j96z1vha28hx0g2xmpxgco8b807ush</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>292</id>
      <parentid>291</parentid>
      <timestamp>2008-01-17T09:10:28Z</timestamp>
      <contributor>
        <ip>212.125.80.6</ip>
      </contributor>
      <comment>/* The Grenade plus Rocket Jump */</comment>
      <text xml:space="preserve" bytes="1534">===The Rocket Jump===
Simply have a Rocket Launcher, armor is favored, aim down, jump, then fire a rocket under to propel yourself a bit more. It is used very often, even I (CheapAlert) use it even when I have 10 health (And I die) :P

For tips on dealing with each of the monsters and bosses in Quake, see the [[Monsters]] page.


===The Grenade plus Rocket Jump===
Ensure that you have the grenade launcher, rocket launcher, at least 2 rocketys and adequate armour and health before starting, the more of each the better. Select the grenade launcher and fire a grenade aiming to land on a particular spot (the launch position), one way to do this is to fire vertically in to the air as soon as you have fired the greande switch to the Rocket Launcher and at the point that the grenade lands for it's second bounce move the launch position and fire a rocket directly at the ground. If you time it right, i.e. so that the rocket hits the ground at the same point that grenade explodes you should find that you are able to jump significantly higher/lomger than with just the Rocket Jump. The disadvantage is that it requires more ammo/weapons, usually takes longer to perform, which can be problematic during battles, and does more damage to your player. If you do this with the '10 health' left scenario as I (Mr.Burns) often do you will usually end up in an embarassing crumple on the floor with your opponents standing around openly giggling

===See Also===
* [http://www.quaketerminus.com/quakebible/index.htm Thresh's Quake Bible]</text>
      <sha1>b3sv71qvr1q6hv3e583h607pztd6xxd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1461</id>
      <parentid>292</parentid>
      <timestamp>2009-11-25T04:31:33Z</timestamp>
      <contributor>
        <ip>75.38.157.126</ip>
      </contributor>
      <comment>/* The Grenade plus Rocket Jump */</comment>
      <text xml:space="preserve" bytes="1534">===The Rocket Jump===
Simply have a Rocket Launcher, armor is favored, aim down, jump, then fire a rocket under to propel yourself a bit more. It is used very often, even I (CheapAlert) use it even when I have 10 health (And I die) :P

For tips on dealing with each of the monsters and bosses in Quake, see the [[Monsters]] page.


===The Grenade plus Rocket Jump===
Ensure that you have the grenade launcher, rocket launcher, at least 2 rockets and adequate armour and health before starting, the more of each the better. Select the grenade launcher and fire a grenade aiming to land on a particular spot (the launch position), one way to do this is to fire vertically in to the air as soon as you have fired the grenade switch to the Rocket Launcher and at the point that the grenade lands for it's second bounce move the launch position and fire a rocket directly at the ground. If you time it right, i.e. so that the rocket hits the ground at the same point that grenade explodes you should find that you are able to jump significantly higher/lomger than with just the Rocket Jump. The disadvantage is that it requires more ammo/weapons, usually takes longer to perform, which can be problematic during battles, and does more damage to your player. If you do this with the '10 health' left scenario as I (Mr.Burns) often do you will usually end up in an embarrassing crumple on the floor with your opponents standing around openly giggling

===See Also===
* [http://www.quaketerminus.com/quakebible/index.htm Thresh's Quake Bible]</text>
      <sha1>avilnoey6c934servdjtu5pkvtzo5sw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1471</id>
      <parentid>1461</parentid>
      <timestamp>2009-12-09T09:54:34Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="1020">==Movement and Navigation==
Quake is a 3D world, be sure to look up and down as you explore a level.  Underwater areas are sometimes the only way to proceed, so go swimming when you have an opportunity.

==Weapons and Combat==
TODO

For tips on dealing with each of the monsters and bosses in Quake, see the [[Monsters]] page.

==Resource Management==
TODO

==Finding Secrets==
TODO

==Trick Jumps==
{{Main|Trick Jumps}}
Trick Jumps are maneuvers that allow you to achieve a speed, height, or distance beyond what is usually possible with the physics of Quake. In general these 'features' were not intended by the designers at [[id Software]], though there is some evidence that at least some of them were known to the designers during development.  They are almost never necessary to progress through a level (with the exception of a few rare user-made levels), but can often be used to take a shortcut to another part of a level.

==See Also==
* [http://www.quaketerminus.com/quakebible/index.htm Thresh's Quake Bible]</text>
      <sha1>nddw6r8pbi5jlppou8ce4nq4gdvqfoo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2225</id>
      <parentid>1471</parentid>
      <timestamp>2013-03-26T13:15:30Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>/* Weapons and Combat */</comment>
      <text xml:space="preserve" bytes="1076">==Movement and Navigation==
Quake is a 3D world, be sure to look up and down as you explore a level.  Underwater areas are sometimes the only way to proceed, so go swimming when you have an opportunity.

==Weapons and Combat==
{{todo|todo=Multiple sections below with unspecified work.}}

For tips on dealing with each of the monsters and bosses in Quake, see the [[Monsters]] page.

==Resource Management==
TODO

==Finding Secrets==
TODO

==Trick Jumps==
{{Main|Trick Jumps}}
Trick Jumps are maneuvers that allow you to achieve a speed, height, or distance beyond what is usually possible with the physics of Quake. In general these 'features' were not intended by the designers at [[id Software]], though there is some evidence that at least some of them were known to the designers during development.  They are almost never necessary to progress through a level (with the exception of a few rare user-made levels), but can often be used to take a shortcut to another part of a level.

==See Also==
* [http://www.quaketerminus.com/quakebible/index.htm Thresh's Quake Bible]</text>
      <sha1>j7s0r1nic3u1fawlirkvushhwy7r17j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Getting Started</title>
    <ns>0</ns>
    <id>475</id>
    <revision>
      <id>943</id>
      <timestamp>2008-11-12T12:02:14Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>New page: __NOTOC__ This should be a one-page quick-start guide to getting, installing, and actually running the game, with links to other pages with further information.  ===Getting Quake===  * whe...</comment>
      <text xml:space="preserve" bytes="501">__NOTOC__
This should be a one-page quick-start guide to getting, installing, and actually running the game, with links to other pages with further information.

===Getting Quake===

* where to buy it
* shareware version

===Installing Quake===

* windows, dos
* mac/linux -- get a port!

===Patching Quake===

* glquake/winquake
* opengl.dll issues
* custom [[Engines]]

===Running Quake===

* basic batch file/shortcut with some standard command line stuff
* system requirements/video card weirdness</text>
      <sha1>qhpckea4vwe58cwz50qw77jr9skjm33</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1007</id>
      <parentid>943</parentid>
      <timestamp>2009-05-23T13:44:35Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>/* Patching Quake */</comment>
      <text xml:space="preserve" bytes="536">__NOTOC__
This should be a one-page quick-start guide to getting, installing, and actually running the game, with links to other pages with further information.

===Getting Quake===

* where to buy it
* shareware version

===Installing Quake===

* windows, dos
* mac/linux -- get a port!

===Patching Quake===

* glquake/winquake
* [[A required .DLL file, Glide2x.dll, was not found]]
* custom [[Engines]]

===Running Quake===

* basic batch file/shortcut with some standard command line stuff
* system requirements/video card weirdness</text>
      <sha1>9bt5m3z9eajpdlv9vrqww7g11kbrl59</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1008</id>
      <parentid>1007</parentid>
      <timestamp>2009-05-23T14:04:31Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>/* Getting Quake */ added how to buy</comment>
      <text xml:space="preserve" bytes="1613">__NOTOC__
This should be a one-page quick-start guide to getting, installing, and actually running the game, with links to other pages with further information.

===Getting Quake===

=====Where to buy Quake=====
Apart from rummaging your favourite market of used goods (flea market, friends, random online communities) you can get Quake at:

[http://www.amazon.com/QUAKE-Windows/dp/B000H1AGA6 Amazon] (don't forget to check your local branch)

[http://video-games.shop.ebay.com/items/_W0QQPlatformZPCQQ_dmptZVideoQ5fGamesQ5fGamesQQ_sopZ12?_nkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64+-saturn&amp;_sacat=1249&amp;_trksid=m270&amp;_odkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64 Ebay] (don't forget to check your local branch)

[http://store.steampowered.com/app/2310/ Steam] (Warning: It does not include the excellent soundtrack, you would be missing a lot)

[http://www.idsoftware.com/games/quake/quake/index.php?game_section=buy id Software]

Be careful that you do not accidentally buy a shareware disc (the soundtrack is on it, so at least you got something for your money).

* shareware version

===Installing Quake===

* windows, dos
* mac/linux -- get a port!

===Patching Quake===

* glquake/winquake
* [[A required .DLL file, Glide2x.dll, was not found]]
* custom [[Engines]]

===Running Quake===

* basic batch file/shortcut with some standard command line stuff
* system requirements/video card weirdness</text>
      <sha1>pxud4ydfq9475kwbl80bbj3fojhbzaq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1022</id>
      <parentid>1008</parentid>
      <timestamp>2009-06-07T13:29:19Z</timestamp>
      <contributor>
        <ip>89.243.171.180</ip>
      </contributor>
      <text xml:space="preserve" bytes="2091">__NOTOC__
This should be a one-page quick-start guide to getting, installing, and actually running the game, with links to other pages with further information.

===Getting Quake===

=====Where to buy Quake=====
Apart from rummaging your favourite market of used goods (flea market, friends, random online communities) you can get Quake at:

*[http://www.amazon.com/QUAKE-Windows/dp/B000H1AGA6 Amazon.com: QUAKE: Windows: Video Games]
*[http://www.amazon.co.uk/Ultimate-Quake-II-III-PC/dp/B00005RW1V Ultimate Quake: Includes I,II and III (PC CD): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Jewel-Case/dp/B00004YNT4 Replay Quake (Jewel Case): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Box/dp/B00004YNT5 Replay Quake (Box): Amazon.co.uk: PC &amp; Video Games]

*[http://video-games.shop.ebay.com/items/_W0QQPlatformZPCQQ_dmptZVideoQ5fGamesQ5fGamesQQ_sopZ12?_nkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64+-saturn&amp;_sacat=1249&amp;_trksid=m270&amp;_odkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64 Ebay] (don't forget to check your local branch)

*[http://store.steampowered.com/app/2310/ Steam] (Warning: It does not include the excellent soundtrack, you would be missing a lot)

*[http://www.idsoftware.com/games/quake/quake/index.php?game_section=buy id Software]

Be careful that you do not accidentally buy a shareware disc (the soundtrack is on it, so at least you got something for your money).

* shareware version

===Installing Quake===

* windows
*dos
* mac -- get a port!
*[http://www.mobygames.com/game/linux/quake-the-offering Quake: The Offering for Linux - MobyGames:]

===Patching Quake===

* glquake/winquake
* [[A required .DLL file, Glide2x.dll, was not found]]
* custom [[Engines]]

===Running Quake===

* basic batch file/shortcut with some standard command line stuff
* system requirements/video card weirdness</text>
      <sha1>rw7sdvb4qfgo1d3ixxeue3xolryqunx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1023</id>
      <parentid>1022</parentid>
      <timestamp>2009-06-07T13:38:28Z</timestamp>
      <contributor>
        <ip>89.243.171.180</ip>
      </contributor>
      <text xml:space="preserve" bytes="2244">__NOTOC__
This should be a one-page quick-start guide to getting, installing, and actually running the game, with links to other pages with further information.

===Getting Quake===

=====Where to buy Quake=====
Apart from rummaging your favourite market of used goods (flea market, friends, random online communities) you can get Quake at:

*[http://www.amazon.com/QUAKE-Windows/dp/B000H1AGA6 Amazon.com: QUAKE: Windows: Video Games]
*[http://www.amazon.co.uk/Ultimate-Quake-II-III-PC/dp/B00005RW1V Ultimate Quake: Includes I,II and III (PC CD): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Jewel-Case/dp/B00004YNT4 Replay Quake (Jewel Case): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Box/dp/B00004YNT5 Replay Quake (Box): Amazon.co.uk: PC &amp; Video Games]

*[http://video-games.shop.ebay.com/items/_W0QQPlatformZPCQQ_dmptZVideoQ5fGamesQ5fGamesQQ_sopZ12?_nkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64+-saturn&amp;_sacat=1249&amp;_trksid=m270&amp;_odkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64 Ebay] (don't forget to check your local branch)

*[http://store.steampowered.com/app/2310/ Steam] (Warning: It does not include the excellent soundtrack, you would be missing a lot)

*[http://www.idsoftware.com/games/quake/quake/index.php?game_section=buy id Software]

Be careful that you do not accidentally buy a shareware disc (the soundtrack is on it, so at least you got something for your money).

* shareware version

===Installing Quake===

* windows
*dos
* mac -- get a port!
*[http://www.mobygames.com/game/linux/quake-the-offering Quake: The Offering for Linux - MobyGames:]
*[http://www.quakeforge.net The QuakeForge Project]
*[http://rome.ro/2006/10/quake-map-sources-released.html planet rome.ro: Quake Map Sources Released!]
===Patching Quake===

* glquake/winquake
* [[A required .DLL file, Glide2x.dll, was not found]]
* custom [[Engines]]

===Running Quake===

* basic batch file/shortcut with some standard command line stuff
* system requirements/video card weirdness</text>
      <sha1>qrqf6dah5vot3jhj5f73as6z9b9wnid</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1048</id>
      <parentid>1023</parentid>
      <timestamp>2009-07-07T03:14:15Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>/* Where to buy Quake */ Various copy edits</comment>
      <text xml:space="preserve" bytes="2481">__NOTOC__
This should be a one-page quick-start guide to getting, installing, and actually running the game, with links to other pages with further information.

===Getting Quake===

=====Where to buy Quake=====
One way to get Quake is to buy it on CD-ROM.

Apart from rummaging your favourite market of used goods (flea market, friends, random online communities) you can get Quake at:

*[http://www.amazon.com/QUAKE-Windows/dp/B000H1AGA6 Amazon.com: QUAKE: Windows: Video Games]
*[http://www.amazon.co.uk/Ultimate-Quake-II-III-PC/dp/B00005RW1V Ultimate Quake: Includes I,II and III (PC CD): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Jewel-Case/dp/B00004YNT4 Replay Quake (Jewel Case): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Box/dp/B00004YNT5 Replay Quake (Box): Amazon.co.uk: PC &amp; Video Games]

*[http://video-games.shop.ebay.com/items/_W0QQPlatformZPCQQ_dmptZVideoQ5fGamesQ5fGamesQQ_sopZ12?_nkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64+-saturn&amp;_sacat=1249&amp;_trksid=m270&amp;_odkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64 Ebay] (don't forget to check your local branch)

*[http://store.steampowered.com/app/2310/ Steam] (Warning: It does not include the excellent soundtrack, you would be missing a lot)

*[http://www.idsoftware.com/games/quake/quake/index.php?game_section=buy id Software]

Be careful that you do not accidentally buy a shareware disc. The shareware edition is still useful, but there's no need to pay for it; it's free to download. However, the soundtrack is on the shareware disc and isn't available elsewhere (legally), so if you did happen to get the wrong disc, at least you'd have gotten something for your money.

===Installing Quake===

* windows
*dos
* mac -- get a port!
*[http://www.mobygames.com/game/linux/quake-the-offering Quake: The Offering for Linux - MobyGames:]
*[http://www.quakeforge.net The QuakeForge Project]
*[http://rome.ro/2006/10/quake-map-sources-released.html planet rome.ro: Quake Map Sources Released!]
===Patching Quake===

* glquake/winquake
* [[A required .DLL file, Glide2x.dll, was not found]]
* custom [[Engines]]

===Running Quake===

* basic batch file/shortcut with some standard command line stuff
* system requirements/video card weirdness</text>
      <sha1>kqjime1098scdfezmmdwwvqczyj7x7d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1049</id>
      <parentid>1048</parentid>
      <timestamp>2009-07-07T03:53:34Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>Added section for the shareware</comment>
      <text xml:space="preserve" bytes="3667">__NOTOC__
This should be a one-page quick-start guide to getting, installing, and actually running the game, with links to other pages with further information.

===Getting Quake===

====Buy Quake on CD-ROM====
One way to get Quake is to buy it on CD-ROM.

Apart from rummaging your favourite market of used goods (flea market, friends, random online communities) you can get Quake at:

*[http://www.amazon.com/QUAKE-Windows/dp/B000H1AGA6 Amazon.com: QUAKE: Windows: Video Games]
*[http://www.amazon.co.uk/Ultimate-Quake-II-III-PC/dp/B00005RW1V Ultimate Quake: Includes I,II and III (PC CD): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Jewel-Case/dp/B00004YNT4 Replay Quake (Jewel Case): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Box/dp/B00004YNT5 Replay Quake (Box): Amazon.co.uk: PC &amp; Video Games]
*[http://video-games.shop.ebay.com/items/_W0QQPlatformZPCQQ_dmptZVideoQ5fGamesQ5fGamesQQ_sopZ12?_nkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64+-saturn&amp;_sacat=1249&amp;_trksid=m270&amp;_odkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64 Ebay] (don't forget to check your local branch)
*[http://store.steampowered.com/app/2310/ Steam] (Warning: It does not include the excellent soundtrack, you would be missing a lot)
*[http://www.idsoftware.com/games/quake/quake/index.php?game_section=buy id Software]

Be careful that you don't accidentally buy a shareware disc. The shareware edition is useful, but there's no need to pay for it; it's free to download. However, the soundtrack is on the shareware disc and isn't available elsewhere (legally), so if you did happen to get the wrong disc, at least you'd have gotten something for your money.

====Download the shareware edition of Quake====
Another way to get Quake is to download the shareware edition. The only file you really need from it is ''ID1\pak0.pak''. Supplement this with one of the unofficial [[engines]] which runs on your operating system &amp; hardware, and you'll be able to play Quake, with the only restriction being no access to the Episodes 2-4 portions of the original single-player game. Those require ''ID1\pak1.pak'', which you only get with the 'registered'/commercial edition.

* [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip quake106.zip] - Quake 1.06 shareware edition; contains ''resource.1'', which is an lh5 LZH-encoded archive (LHA) containing the actual game files, including ''ID1\pak0.pak''. The zip contains an installer program (''deice.exe'') for MS-DOS/Win95 which unpacks the entire archive, and a script (''install.bat'') which runs the installer and then tries to launch the DOS Quake engine. If you can't/don't want to run these, use an lh5-compatible LHA extractor like [http://www2.nsknet.or.jp/~micco/english/lhmelt_e.htm LHmelting] to extract what you need from ''resource.1''. Some multi-format archivers/extractors may also work.

===Installing Quake===

* windows
* dos
* mac -- get a port!
* [http://www.mobygames.com/game/linux/quake-the-offering Quake: The Offering for Linux - MobyGames:]
* [http://www.quakeforge.net/ The QuakeForge Project]
* [http://rome.ro/2006/10/quake-map-sources-released.html planet rome.ro: Quake Map Sources Released!]

===Patching Quake===

* glquake/winquake
* [[A required .DLL file, Glide2x.dll, was not found]]
* custom [[Engines]]

===Running Quake===

* basic batch file/shortcut with some standard command line stuff
* system requirements/video card weirdness</text>
      <sha1>cx42exfa9xv0rm9x0qert6ssbips7qb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1053</id>
      <parentid>1049</parentid>
      <timestamp>2009-07-08T04:40:30Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>/* Installing Quake */ started beefing this up</comment>
      <text xml:space="preserve" bytes="5126">__NOTOC__
This should be a one-page quick-start guide to getting, installing, and actually running the game, with links to other pages with further information.

===Getting Quake===

====Buy Quake on CD-ROM====
One way to get Quake is to buy it on CD-ROM.

Apart from rummaging your favourite market of used goods (flea market, friends, random online communities) you can get Quake at:

*[http://www.amazon.com/QUAKE-Windows/dp/B000H1AGA6 Amazon.com: QUAKE: Windows: Video Games]
*[http://www.amazon.co.uk/Ultimate-Quake-II-III-PC/dp/B00005RW1V Ultimate Quake: Includes I,II and III (PC CD): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Jewel-Case/dp/B00004YNT4 Replay Quake (Jewel Case): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Box/dp/B00004YNT5 Replay Quake (Box): Amazon.co.uk: PC &amp; Video Games]
*[http://video-games.shop.ebay.com/items/_W0QQPlatformZPCQQ_dmptZVideoQ5fGamesQ5fGamesQQ_sopZ12?_nkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64+-saturn&amp;_sacat=1249&amp;_trksid=m270&amp;_odkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64 Ebay] (don't forget to check your local branch)
*[http://store.steampowered.com/app/2310/ Steam] (Warning: It does not include the excellent soundtrack, you would be missing a lot)
*[http://www.idsoftware.com/games/quake/quake/index.php?game_section=buy id Software]

Be careful that you don't accidentally buy a shareware disc. The shareware edition is useful, but there's no need to pay for it; it's free to download. However, the soundtrack is on the shareware disc and isn't available elsewhere (legally), so if you did happen to get the wrong disc, at least you'd have gotten something for your money.

====Download the shareware edition of Quake====
Another way to get Quake is to download the shareware edition. The only file you really need from it is ''ID1\pak0.pak''. Supplement this with one of the unofficial [[engines]] which runs on your operating system &amp; hardware, and you'll be able to play Quake, with the only restriction being no access to the Episodes 2-4 portions of the original single-player game. Those require ''ID1\pak1.pak'', which you only get with the 'registered'/commercial edition.

* [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip quake106.zip] - Quake 1.06 shareware edition; contains ''resource.1'', which is an lh5 LZH-encoded archive (LHA) containing the actual game files, including ''ID1\pak0.pak''. The zip contains an installer program (''deice.exe'') for MS-DOS/Win95 which unpacks the entire archive, and a script (''install.bat'') which runs the installer and then tries to launch the DOS Quake engine. If you can't/don't want to run these, use an lh5-compatible LHA extractor like [http://www2.nsknet.or.jp/~micco/english/lhmelt_e.htm LHmelting] to extract what you need from ''resource.1''. Some multi-format archivers/extractors may also work.

===Installing Quake===
====Windows====
Quake comes with a DOS &amp; Win95/98/Me-only game engine with no hardware-accelerated graphics rendering. Unless you have extremely old hardware (like from 1996 or earlier) requiring this engine, ignore it and start with FitzQuake, which is a basic but widely compatible Quake engine with fast, high-quality graphics.

You can install Quake wherever you want on your hard drive. C:\QUAKE_SW is the default suggested by the official installer (''install.bat'' and ''deice.exe''), but in examples here we'll use C:\quake.

All you need to play single-player is ''fitzquake.exe'' and ''ID1\pak0.pak'':
# Install C:\quake\ID1\pak0.pak (and the non-shareware edition's ''pak1.pak'', if you have it). See info above if you want to get ''pak0.pak'' from the shareware. If you just run the official installer, it will install this file along with several others you don't really need.
# Unzip the FitzQuake distribution into C:\quake.
# Run C:\quake\fitzquake.exe.

If this runs OK, you will probably want to continue using it for single-player games, although you can try experimenting with other [[engines]], which have different feature sets.

If you want to play multiplayer games, you'll want [http://ezquake.sourceforge.net/ ezQuake], a state-of-the-art QuakeWorld engine.

====DOS====
''TBD''
====Mac OS X====
''TBD''
====Mac OS Classic====
''TBD''
====Unix====
''TBD''
* [http://www.mobygames.com/game/linux/quake-the-offering Quake: The Offering for Linux - MobyGames:]
* [http://www.quakeforge.net/ The QuakeForge Project]
====Misc links====
* [http://www.kristianduske.com/fitzquake/ SDL port of FitzQuake] mainly for Linux and Mac OS X
* [http://rome.ro/2006/10/quake-map-sources-released.html planet rome.ro: Quake Map Sources Released!]

===Patching Quake===

* glquake/winquake
* [[A required .DLL file, Glide2x.dll, was not found]]
* custom [[Engines]]

===Running Quake===

* basic batch file/shortcut with some standard command line stuff
* system requirements/video card weirdness</text>
      <sha1>3zt5eqycig7azhyjzhyi3wwevuu4sns</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1054</id>
      <parentid>1053</parentid>
      <timestamp>2009-07-09T05:46:50Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>/* Installing Quake */ +general instructions</comment>
      <text xml:space="preserve" bytes="6148">__NOTOC__
This should be a one-page quick-start guide to getting, installing, and actually running the game, with links to other pages with further information.

===Getting Quake===

====Buy Quake on CD-ROM====
One way to get Quake is to buy it on CD-ROM.

Apart from rummaging your favourite market of used goods (flea market, friends, random online communities) you can get Quake at:

*[http://www.amazon.com/QUAKE-Windows/dp/B000H1AGA6 Amazon.com: QUAKE: Windows: Video Games]
*[http://www.amazon.co.uk/Ultimate-Quake-II-III-PC/dp/B00005RW1V Ultimate Quake: Includes I,II and III (PC CD): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Jewel-Case/dp/B00004YNT4 Replay Quake (Jewel Case): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Box/dp/B00004YNT5 Replay Quake (Box): Amazon.co.uk: PC &amp; Video Games]
*[http://video-games.shop.ebay.com/items/_W0QQPlatformZPCQQ_dmptZVideoQ5fGamesQ5fGamesQQ_sopZ12?_nkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64+-saturn&amp;_sacat=1249&amp;_trksid=m270&amp;_odkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64 Ebay] (don't forget to check your local branch)
*[http://store.steampowered.com/app/2310/ Steam] (Warning: It does not include the excellent soundtrack, you would be missing a lot)
*[http://www.idsoftware.com/games/quake/quake/index.php?game_section=buy id Software]

Be careful that you don't accidentally buy a shareware disc. The shareware edition is useful, but there's no need to pay for it; it's free to download. However, the soundtrack is on the shareware disc and isn't available elsewhere (legally), so if you did happen to get the wrong disc, at least you'd have gotten something for your money.

====Download the shareware edition of Quake====
Another way to get Quake is to download the shareware edition. The only file you really need from it is ''ID1\pak0.pak''. Supplement this with one of the unofficial [[engines]] which runs on your operating system &amp; hardware, and you'll be able to play Quake, with the only restriction being no access to the Episodes 2-4 portions of the original single-player game. Those require ''ID1\pak1.pak'', which you only get with the 'registered'/commercial edition.

* [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip quake106.zip] - Quake 1.06 shareware edition; contains ''resource.1'', which is an lh5 LZH-encoded archive (LHA) containing the actual game files, including ''ID1\pak0.pak''. The zip contains an installer program (''deice.exe'') for MS-DOS/Win95 which unpacks the entire archive, and a script (''install.bat'') which runs the installer and then tries to launch the DOS Quake engine. If you can't/don't want to run these, use an lh5-compatible LHA extractor like [http://www2.nsknet.or.jp/~micco/english/lhmelt_e.htm LHmelting] to extract what you need from ''resource.1''. Some multi-format archivers/extractors may also work.

===Installing Quake===
All Quake and QuakeWorld installations work on the same principles. You just need to have a folder hierarchy like this:

* Quake root folder (e.g. ''C:\quake'')
** ''ID1'' subfolder (e.g. ''C:\quake\ID1'').

In the Quake root folder is where the [[engines]] live. It doesn't matter the folder's name is or where it exists on your file system. Engines can generally coexist in it.

In the ''ID1'' subfolder of the Quake root folder, you must have the file ''pak0.pak'' from the official Quake distribution (shareware or commercial, doesn't matter). Some engines (notably, the official GLQuake) may require the presence of ''pak1.pak'' from the non-shareware Quake distribution as well, but generally this file is optional. Case usually doesn't matter on Windows or DOS folder names, but on non-Windows systems, some engines expect the ''id1'' to be lowercase.

So, to summarize, installing Quake boils down to just getting an engine executable into the root folder, and ''pak0.pak'' into the ''ID1'' subfolder. That's it.

====Windows====
Quake comes with a DOS &amp; Win95/98/Me-only game engine with no hardware-accelerated graphics rendering. Unless you have extremely old hardware (like from 1996 or earlier) requiring this engine, ignore it and start with FitzQuake, which is a basic but widely compatible Quake engine with fast, high-quality graphics.

You can install Quake wherever you want on your hard drive. C:\QUAKE_SW is the default suggested by the official installer (''install.bat'' and ''deice.exe''), but in examples here we'll use C:\quake.

All you need to play single-player is ''fitzquake.exe'' and ''ID1\pak0.pak'':
# Install C:\quake\ID1\pak0.pak (and the non-shareware edition's ''pak1.pak'', if you have it). See info above if you want to get ''pak0.pak'' from the shareware. If you just run the official installer, it will install this file along with several others you don't really need.
# Unzip the FitzQuake distribution into C:\quake.
# Run C:\quake\fitzquake.exe.

If this runs OK, you will probably want to continue using it for single-player games, although you can try experimenting with other [[engines]], which have different feature sets.

If you want to play multiplayer games, you'll want [http://ezquake.sourceforge.net/ ezQuake], a state-of-the-art QuakeWorld engine.

====DOS====
''TBD''
====Mac OS X====
''TBD''
====Mac OS Classic====
''TBD''
====Unix====
''TBD''
* [http://www.mobygames.com/game/linux/quake-the-offering Quake: The Offering for Linux - MobyGames:]
* [http://www.quakeforge.net/ The QuakeForge Project]
====Misc links====
* [http://www.kristianduske.com/fitzquake/ SDL port of FitzQuake] mainly for Linux and Mac OS X
* [http://rome.ro/2006/10/quake-map-sources-released.html planet rome.ro: Quake Map Sources Released!]

===Patching Quake===

* glquake/winquake
* [[A required .DLL file, Glide2x.dll, was not found]]
* custom [[Engines]]

===Running Quake===

* basic batch file/shortcut with some standard command line stuff
* system requirements/video card weirdness</text>
      <sha1>rserv2f0j97s24ik1358ve8pn3nte69</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1055</id>
      <parentid>1054</parentid>
      <timestamp>2009-07-09T05:54:10Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>/* Installing Quake */ add some emphasis</comment>
      <text xml:space="preserve" bytes="6146">__NOTOC__
This should be a one-page quick-start guide to getting, installing, and actually running the game, with links to other pages with further information.

===Getting Quake===

====Buy Quake on CD-ROM====
One way to get Quake is to buy it on CD-ROM.

Apart from rummaging your favourite market of used goods (flea market, friends, random online communities) you can get Quake at:

*[http://www.amazon.com/QUAKE-Windows/dp/B000H1AGA6 Amazon.com: QUAKE: Windows: Video Games]
*[http://www.amazon.co.uk/Ultimate-Quake-II-III-PC/dp/B00005RW1V Ultimate Quake: Includes I,II and III (PC CD): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Jewel-Case/dp/B00004YNT4 Replay Quake (Jewel Case): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Box/dp/B00004YNT5 Replay Quake (Box): Amazon.co.uk: PC &amp; Video Games]
*[http://video-games.shop.ebay.com/items/_W0QQPlatformZPCQQ_dmptZVideoQ5fGamesQ5fGamesQQ_sopZ12?_nkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64+-saturn&amp;_sacat=1249&amp;_trksid=m270&amp;_odkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64 Ebay] (don't forget to check your local branch)
*[http://store.steampowered.com/app/2310/ Steam] (Warning: It does not include the excellent soundtrack, you would be missing a lot)
*[http://www.idsoftware.com/games/quake/quake/index.php?game_section=buy id Software]

Be careful that you don't accidentally buy a shareware disc. The shareware edition is useful, but there's no need to pay for it; it's free to download. However, the soundtrack is on the shareware disc and isn't available elsewhere (legally), so if you did happen to get the wrong disc, at least you'd have gotten something for your money.

====Download the shareware edition of Quake====
Another way to get Quake is to download the shareware edition. The only file you really need from it is ''ID1\pak0.pak''. Supplement this with one of the unofficial [[engines]] which runs on your operating system &amp; hardware, and you'll be able to play Quake, with the only restriction being no access to the Episodes 2-4 portions of the original single-player game. Those require ''ID1\pak1.pak'', which you only get with the 'registered'/commercial edition.

* [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip quake106.zip] - Quake 1.06 shareware edition; contains ''resource.1'', which is an lh5 LZH-encoded archive (LHA) containing the actual game files, including ''ID1\pak0.pak''. The zip contains an installer program (''deice.exe'') for MS-DOS/Win95 which unpacks the entire archive, and a script (''install.bat'') which runs the installer and then tries to launch the DOS Quake engine. If you can't/don't want to run these, use an lh5-compatible LHA extractor like [http://www2.nsknet.or.jp/~micco/english/lhmelt_e.htm LHmelting] to extract what you need from ''resource.1''. Some multi-format archivers/extractors may also work.

===Installing Quake===
All Quake and QuakeWorld installations work on the same principles. You just need to have a folder hierarchy like this:

* Quake root folder (e.g. ''C:\quake'')
** ''ID1'' subfolder (e.g. ''C:\quake\ID1'').

In the Quake root folder is where the [[engines]] live. It doesn't matter the folder's name is or where it exists on your file system. Engines can generally coexist in it.

In the ''ID1'' subfolder of the Quake root folder, you must have the file ''pak0.pak'' from the official Quake distribution (shareware or commercial, doesn't matter). Some engines (notably, the official GLQuake) may require the presence of ''pak1.pak'' from the non-shareware Quake distribution as well, but generally this file is optional. Case usually doesn't matter on Windows or DOS folder names, but on non-Windows systems, some engines expect the ''id1'' to be lowercase.

So, to summarize, '''installing Quake boils down to just getting an engine executable into a folder, and ''pak0.pak'' into an ''ID1'' subfolder.''' That's it.

====Windows====
Quake comes with a DOS &amp; Win95/98/Me-only game engine with no hardware-accelerated graphics rendering. Unless you have extremely old hardware (like from 1996 or earlier) requiring this engine, ignore it and start with FitzQuake, which is a basic but widely compatible Quake engine with fast, high-quality graphics.

You can install Quake wherever you want on your hard drive. C:\QUAKE_SW is the default suggested by the official installer (''install.bat'' and ''deice.exe''), but in examples here we'll use C:\quake.

All you need to play single-player is ''fitzquake.exe'' and ''ID1\pak0.pak'':
# Install C:\quake\ID1\pak0.pak (and the non-shareware edition's ''pak1.pak'', if you have it). See info above if you want to get ''pak0.pak'' from the shareware. If you just run the official installer, it will install this file along with several others you don't really need.
# Unzip the FitzQuake distribution into C:\quake.
# Run C:\quake\fitzquake.exe.

If this runs OK, you will probably want to continue using it for single-player games, although you can try experimenting with other [[engines]], which have different feature sets.

If you want to play multiplayer games, you'll want [http://ezquake.sourceforge.net/ ezQuake], a state-of-the-art QuakeWorld engine.

====DOS====
''TBD''
====Mac OS X====
''TBD''
====Mac OS Classic====
''TBD''
====Unix====
''TBD''
* [http://www.mobygames.com/game/linux/quake-the-offering Quake: The Offering for Linux - MobyGames:]
* [http://www.quakeforge.net/ The QuakeForge Project]
====Misc links====
* [http://www.kristianduske.com/fitzquake/ SDL port of FitzQuake] mainly for Linux and Mac OS X
* [http://rome.ro/2006/10/quake-map-sources-released.html planet rome.ro: Quake Map Sources Released!]

===Patching Quake===

* glquake/winquake
* [[A required .DLL file, Glide2x.dll, was not found]]
* custom [[Engines]]

===Running Quake===

* basic batch file/shortcut with some standard command line stuff
* system requirements/video card weirdness</text>
      <sha1>1aljpykwn5p5u2jchpdo5vcm1s133rk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1064</id>
      <parentid>1055</parentid>
      <timestamp>2009-07-09T09:58:25Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>moved Steam edition to its own entry; changed heading levels; replaced overview; rm 'running quake' section as this depends on the engine; rm 'patching quake' as it's not a getting-started topic</comment>
      <text xml:space="preserve" bytes="7171">==Overview==
This is a quick-start guide to getting, installing, and actually running the game.

===Components===
Quake consists of three parts:
* A platform-specific Quake [[engines|engine]], which is the program you run to actually play Quake.
* The platform-independent archives ''[[pak0.pak]]'' (required) and ''[[pak1.pak]]'' (usually optional).
* The soundtrack, which normally exists as audio tracks on the original Quake CD-ROM, which you can leave in your drive while you play. The soundtrack and CD-ROM are optional.

Therefore, a minimal installation of Quake consists of just ''pak0.pak'' and a single Quake engine.

There are many engines to choose from, each with different features and platform (hardware + operating system) requirements. The [[engines]] article discusses the options in more detail.

==Getting Quake==

You have several options for getting Quake. You can buy it on CD-ROM, download the full game 

===Buy Quake on CD-ROM===
One way to get Quake is to buy it on CD-ROM, which will include a basic but well-tested engine, ''pak0.pak'' (and hopefully also ''pak1.pak''), and the soundtrack.

Apart from rummaging your favourite market of used goods (flea market, friends, random online communities) you can get Quake CDs from these vendors:

*[http://www.amazon.com/QUAKE-Windows/dp/B000H1AGA6 Amazon.com: QUAKE: Windows: Video Games]
*[http://www.amazon.co.uk/Ultimate-Quake-II-III-PC/dp/B00005RW1V Ultimate Quake: Includes I,II and III (PC CD): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Jewel-Case/dp/B00004YNT4 Replay Quake (Jewel Case): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Box/dp/B00004YNT5 Replay Quake (Box): Amazon.co.uk: PC &amp; Video Games]
*[http://video-games.shop.ebay.com/items/_W0QQPlatformZPCQQ_dmptZVideoQ5fGamesQ5fGamesQQ_sopZ12?_nkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64+-saturn&amp;_sacat=1249&amp;_trksid=m270&amp;_odkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64 Ebay] (don't forget to check your local branch)
*[http://www.idsoftware.com/games/quake/quake/index.php?game_section=buy id Software]

Be careful that you don't accidentally buy a shareware disc. The shareware edition is useful, but there's no need to pay for it; it's free to download. However, the soundtrack is on the shareware disc and isn't available elsewhere (legally), so if you did happen to get the wrong disc, at least you'd have gotten something for your money.

===Buy the Steam edition of Quake===
Since August 2007, an official release of the full/registered Quake has been available on Steam (steampowered.com). Steam is a vendor which allows you to pay to download a Win2K/XP/Vista edition of Quake which includes four official engines: WinQuake, QuakeWorld, GLQuake, and GLQuakeWorld. This edition does ''not'' include the soundtrack.
* [http://store.steampowered.com/app/2310/ Quake on Steam]

===Download the shareware edition of Quake===
Another way to get Quake is to download the shareware edition. The only file you really need from it is ''pak0.pak''. Supplement this with one of the unofficial [[engines]] which runs on your operating system &amp; hardware, and you'll be able to play Quake, with the only restriction being no access to the Episodes 2-4 portions of the original single-player game. Those require ''pak1.pak'', which you only get with the 'registered'/commercial edition.

* [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip quake106.zip] - Quake 1.06 shareware edition; contains ''resource.1'', which is an lh5 LZH-encoded archive (LHA) containing the actual game files, including ''ID1\pak0.pak''. The zip contains an installer program (''deice.exe'') for MS-DOS/Win95 which unpacks the entire archive, and a script (''install.bat'') which runs the installer and then tries to launch the DOS Quake engine. If you can't/don't want to run these, use an lh5-compatible LHA extractor like [http://www2.nsknet.or.jp/~micco/english/lhmelt_e.htm LHmelting] to extract what you need from ''resource.1''. Some multi-format archivers/extractors may also work.

==Installing Quake==
All Quake and QuakeWorld installations work on the same principles. You just need to have a folder hierarchy like this:

* Quake root folder (e.g. ''C:\quake'')
** ''ID1'' subfolder (e.g. ''C:\quake\ID1'').

In the Quake root folder is where the [[engines]] live. It doesn't matter the folder's name is or where it exists on your file system. Engines can generally coexist in it.

In the ''ID1'' subfolder of the Quake root folder, you must have the file ''pak0.pak'' from the official Quake distribution (shareware or commercial, doesn't matter). Some engines (notably, the official GLQuake) may require the presence of ''pak1.pak'' from the non-shareware Quake distribution as well, but generally this file is optional. Case usually doesn't matter on Windows or DOS folder names, but on non-Windows systems, some engines expect the ''id1'' to be lowercase.

So, to summarize, '''installing Quake boils down to just getting an engine executable into a folder, and ''pak0.pak'' into an ''ID1'' subfolder.''' That's it.

===Windows===
''TODO: move this to a separate article.''

Original Quake CD-ROMs and the shareware version only come with a DOS/Win95/98/Me-only game engine which has no hardware-accelerated graphics rendering. Unless you have extremely old hardware (like from 1996 or earlier) requiring this engine, ignore it and start with FitzQuake, which is a basic but widely compatible [[NetQuake]] engine with fast, high-quality OpenGL graphics.

You can install Quake wherever you want on your hard drive. C:\QUAKE_SW is the default suggested by the official installer (''install.bat'' and ''deice.exe''), but in examples here we'll use C:\quake.

All you need to play single-player is ''fitzquake.exe'' and ''ID1\pak0.pak'':
# Install C:\quake\ID1\pak0.pak (and the non-shareware edition's ''pak1.pak'', if you have it). See info above if you want to get ''pak0.pak'' from the shareware. If you just run the official installer, it will install this file along with several others you don't really need.
# Unzip the FitzQuake distribution into C:\quake.
# Run C:\quake\fitzquake.exe.

If this runs OK, you will probably want to continue using it for single-player games, although you can try experimenting with other [[engines]], which have different feature sets.

If you want to play multiplayer games, you'll want [http://ezquake.sourceforge.net/ ezQuake], a state-of-the-art QuakeWorld engine.

===DOS===
''TBD''
===Mac OS X===
''TBD''
===Mac OS Classic===
''TBD''
===Unix===
''TBD''
* [http://www.mobygames.com/game/linux/quake-the-offering Quake: The Offering for Linux - MobyGames:]
* [http://www.quakeforge.net/ The QuakeForge Project]
===Misc links===
* [http://www.kristianduske.com/fitzquake/ SDL port of FitzQuake] mainly for Linux and Mac OS X
* [http://rome.ro/2006/10/quake-map-sources-released.html planet rome.ro: Quake Map Sources Released!]</text>
      <sha1>15ssd5x22oov1r0vfn6g3cmtvebty7b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1068</id>
      <parentid>1064</parentid>
      <timestamp>2009-07-09T10:23:22Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>/* Getting Quake */ minor additions</comment>
      <text xml:space="preserve" bytes="7302">==Overview==
This is a quick-start guide to getting, installing, and actually running the game.

===Components===
Quake consists of three parts:
* A platform-specific Quake [[engines|engine]], which is the program you run to actually play Quake.
* The platform-independent archives ''[[pak0.pak]]'' (required) and ''[[pak1.pak]]'' (usually optional).
* The soundtrack, which normally exists as audio tracks on the original Quake CD-ROM, which you can leave in your drive while you play. The soundtrack and CD-ROM are optional.

Therefore, a minimal installation of Quake consists of just ''pak0.pak'' and a single Quake engine.

There are many engines to choose from, each with different features and platform (hardware + operating system) requirements. The [[engines]] article discusses the options in more detail.

==Getting Quake==
You have several options for getting Quake. You can buy 'complete' CD-ROM or downloadable editions, or you can download the shareware edition (sans soundtrack) and supplement it with a better engine.

===Buy Quake on CD-ROM===
One way to get Quake is to buy it on CD-ROM, which will include a basic but well-tested engine, the soundtrack, and ''pak0.pak'' (and ''pak1.pak'', as long as you don't get a shareware CD).

Apart from rummaging your favourite market of used goods (flea market, friends, random online communities) you can get Quake CDs from these vendors:

*[http://www.amazon.com/QUAKE-Windows/dp/B000H1AGA6 Amazon.com: QUAKE: Windows: Video Games]
*[http://www.amazon.co.uk/Ultimate-Quake-II-III-PC/dp/B00005RW1V Ultimate Quake: Includes I,II and III (PC CD): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Jewel-Case/dp/B00004YNT4 Replay Quake (Jewel Case): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Box/dp/B00004YNT5 Replay Quake (Box): Amazon.co.uk: PC &amp; Video Games]
*[http://video-games.shop.ebay.com/items/_W0QQPlatformZPCQQ_dmptZVideoQ5fGamesQ5fGamesQQ_sopZ12?_nkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64+-saturn&amp;_sacat=1249&amp;_trksid=m270&amp;_odkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64 Ebay] (don't forget to check your local branch)
*[http://www.idsoftware.com/games/quake/quake/index.php?game_section=buy id Software]

Be careful that you don't accidentally buy a shareware disc. The shareware edition is useful, but there's no need to pay for it; it's free to download. However, the soundtrack is on the shareware disc and isn't available elsewhere (legally), so if you did happen to get the wrong disc, at least you'd have gotten something for your money.

===Buy the Steam edition of Quake===
Since August 2007, an official release of the full/registered Quake has been available on Steam (steampowered.com). Steam is a vendor which allows you to pay to download a Win2K/XP/Vista edition of Quake which includes four official engines: WinQuake, QuakeWorld, GLQuake, and GLQuakeWorld. This edition does ''not'' include the soundtrack.
* [http://store.steampowered.com/app/2310/ Quake on Steam]

===Download the shareware edition of Quake===
Another way to get Quake is to download the shareware edition. The only file you really need from it is ''pak0.pak''. Supplement this with one of the unofficial [[engines]] which runs on your operating system &amp; hardware, and you'll be able to play Quake, with the only restriction being no access to the Episodes 2-4 portions of the original single-player game. Those require ''pak1.pak'', which you only get with the 'registered'/commercial edition.

* [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip quake106.zip] - Quake 1.06 shareware edition; contains ''resource.1'', which is an lh5 LZH-encoded archive (LHA) containing the actual game files, including ''ID1\pak0.pak''. The zip contains an installer program (''deice.exe'') for MS-DOS/Win95 which unpacks the entire archive, and a script (''install.bat'') which runs the installer and then tries to launch the DOS Quake engine. If you can't/don't want to run these, use an lh5-compatible LHA extractor like [http://www2.nsknet.or.jp/~micco/english/lhmelt_e.htm LHmelting] to extract what you need from ''resource.1''. Some multi-format archivers/extractors may also work.

==Installing Quake==
All Quake and QuakeWorld installations work on the same principles. You just need to have a folder hierarchy like this:

* Quake root folder (e.g. ''C:\quake'')
** ''ID1'' subfolder (e.g. ''C:\quake\ID1'').

In the Quake root folder is where the [[engines]] live. It doesn't matter the folder's name is or where it exists on your file system. Engines can generally coexist in it.

In the ''ID1'' subfolder of the Quake root folder, you must have the file ''pak0.pak'' from the official Quake distribution (shareware or commercial, doesn't matter). Some engines (notably, the official GLQuake) may require the presence of ''pak1.pak'' from the non-shareware Quake distribution as well, but generally this file is optional. Case usually doesn't matter on Windows or DOS folder names, but on non-Windows systems, some engines expect the ''id1'' to be lowercase.

So, to summarize, '''installing Quake boils down to just getting an engine executable into a folder, and ''pak0.pak'' into an ''ID1'' subfolder.''' That's it.

===Windows===
''TODO: move this to a separate article.''

Original Quake CD-ROMs and the shareware version only come with a DOS/Win95/98/Me-only game engine which has no hardware-accelerated graphics rendering. Unless you have extremely old hardware (like from 1996 or earlier) requiring this engine, ignore it and start with FitzQuake, which is a basic but widely compatible [[NetQuake]] engine with fast, high-quality OpenGL graphics.

You can install Quake wherever you want on your hard drive. C:\QUAKE_SW is the default suggested by the official installer (''install.bat'' and ''deice.exe''), but in examples here we'll use C:\quake.

All you need to play single-player is ''fitzquake.exe'' and ''ID1\pak0.pak'':
# Install C:\quake\ID1\pak0.pak (and the non-shareware edition's ''pak1.pak'', if you have it). See info above if you want to get ''pak0.pak'' from the shareware. If you just run the official installer, it will install this file along with several others you don't really need.
# Unzip the FitzQuake distribution into C:\quake.
# Run C:\quake\fitzquake.exe.

If this runs OK, you will probably want to continue using it for single-player games, although you can try experimenting with other [[engines]], which have different feature sets.

If you want to play multiplayer games, you'll want [http://ezquake.sourceforge.net/ ezQuake], a state-of-the-art QuakeWorld engine.

===DOS===
''TBD''
===Mac OS X===
''TBD''
===Mac OS Classic===
''TBD''
===Unix===
''TBD''
* [http://www.mobygames.com/game/linux/quake-the-offering Quake: The Offering for Linux - MobyGames:]
* [http://www.quakeforge.net/ The QuakeForge Project]
===Misc links===
* [http://www.kristianduske.com/fitzquake/ SDL port of FitzQuake] mainly for Linux and Mac OS X
* [http://rome.ro/2006/10/quake-map-sources-released.html planet rome.ro: Quake Map Sources Released!]</text>
      <sha1>2codbih1gh3zrsrofcjzgczgir8zjo0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1072</id>
      <parentid>1068</parentid>
      <timestamp>2009-07-10T06:38:30Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>/* Getting Quake */ still working on this</comment>
      <text xml:space="preserve" bytes="7367">==Overview==
This is a quick-start guide to getting, installing, and actually running the game.

===Components===
Quake consists of three parts:
* A platform-specific Quake [[engines|engine]], which is the program you run to actually play Quake.
* The platform-independent archives ''[[pak0.pak]]'' (required) and ''[[pak1.pak]]'' (usually optional).
* The soundtrack, which normally exists as audio tracks on the original Quake CD-ROM, which you can leave in your drive while you play. The soundtrack and CD-ROM are optional.

Therefore, a minimal installation of Quake consists of just ''pak0.pak'' and a single Quake engine.

There are many engines to choose from, each with different features and platform (hardware + operating system) requirements. The [[engines]] article discusses the options in more detail.

==Getting Quake==
You have several options for getting Quake. To get ''pak0.pak'' and at least one basic engine, you can either buy official game distributions in CD-ROM or downloadable editions, or download the shareware edition (sans soundtrack). Either way, you can download and use other engines if you don't like or can't use the ones that come with the official distributions.

===Buy Quake on CD-ROM===
One way to get an official distribution of Quake is to buy it on CD-ROM, which will include a basic but well-tested engine, the soundtrack, and ''pak0.pak'' (and ''pak1.pak'', as long as you don't get a shareware CD).

Apart from rummaging your favourite market of used goods (flea market, friends, random online communities) you can get Quake CDs from these vendors:

*[http://www.amazon.com/QUAKE-Windows/dp/B000H1AGA6 Amazon.com: QUAKE: Windows: Video Games]
*[http://www.amazon.co.uk/Ultimate-Quake-II-III-PC/dp/B00005RW1V Ultimate Quake: Includes I,II and III (PC CD): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Jewel-Case/dp/B00004YNT4 Replay Quake (Jewel Case): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Box/dp/B00004YNT5 Replay Quake (Box): Amazon.co.uk: PC &amp; Video Games]
*[http://video-games.shop.ebay.com/items/_W0QQPlatformZPCQQ_dmptZVideoQ5fGamesQ5fGamesQQ_sopZ12?_nkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64+-saturn&amp;_sacat=1249&amp;_trksid=m270&amp;_odkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64 Ebay] (don't forget to check your local branch)
*[http://www.idsoftware.com/games/quake/quake/index.php?game_section=buy id Software]

Be careful that you don't accidentally buy a shareware disc. The shareware edition is useful, but there's no need to pay for it; it's free to download. However, the soundtrack is on the shareware disc and isn't available elsewhere (legally), so if you did happen to get the wrong disc, at least you'd have gotten something for your money.

===Buy the Steam edition of Quake===
Since August 2007, an official release of the full/registered Quake has been available on Steam (steampowered.com). Steam is a vendor which allows you to pay to download a Win2K/XP/Vista edition of Quake which includes four official engines: WinQuake, QuakeWorld, GLQuake, and GLQuakeWorld. This edition does ''not'' include the soundtrack.
* [http://store.steampowered.com/app/2310/ Quake on Steam]

===Download the shareware edition of Quake===
Another way to get an official release of Quake is to download the shareware edition. The only restriction in this edition, besides no soundtrack, is you won't have access to the Episodes 2-4 portions of the original single-player game. Those require ''pak1.pak'', which you only get with the 'registered'/commercial edition.

* [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip quake106.zip] - Quake 1.06 shareware edition; contains ''resource.1'', which is an lh5 LZH-encoded archive (LHA) containing the actual game files, including ''ID1\pak0.pak''. The zip contains an installer program (''deice.exe'') for DOS/Win32 which unpacks the entire archive, and a script (''install.bat'') which runs the installer and then tries to launch the DOS Quake engine. If you can't/don't want to run these, use an lh5-compatible LHA extractor like [http://www2.nsknet.or.jp/~micco/english/lhmelt_e.htm LHmelting] to extract what you need from ''resource.1''. Some multi-format archivers/extractors may also work.

==Installing Quake==
All Quake and QuakeWorld installations work on the same principles. You just need to have a folder hierarchy like this:

* Quake root folder (e.g. ''C:\quake'')
** ''ID1'' subfolder (e.g. ''C:\quake\ID1'').

In the Quake root folder is where the [[engines]] live. It doesn't matter the folder's name is or where it exists on your file system. Engines can generally coexist in it.

In the ''ID1'' subfolder of the Quake root folder, you must have the file ''pak0.pak'' from the official Quake distribution (shareware or commercial, doesn't matter). Some engines (notably, the official GLQuake) may require the presence of ''pak1.pak'' from the non-shareware Quake distribution as well, but generally this file is optional. Case usually doesn't matter on Windows or DOS folder names, but on non-Windows systems, some engines expect the ''id1'' to be lowercase.

So, to summarize, '''installing Quake boils down to just getting an engine executable into a folder, and ''pak0.pak'' into an ''ID1'' subfolder.''' That's it.

===Windows===
''TODO: move this to a separate article.''

Original Quake CD-ROMs and the shareware version only come with a DOS/Win95/98/Me-only game engine which has no hardware-accelerated graphics rendering. Unless you have extremely old hardware (like from 1996 or earlier) requiring this engine, ignore it and start with FitzQuake, which is a basic but widely compatible [[NetQuake]] engine with fast, high-quality OpenGL graphics.

You can install Quake wherever you want on your hard drive. C:\QUAKE_SW is the default suggested by the official installer (''install.bat'' and ''deice.exe''), but in examples here we'll use C:\quake.

All you need to play single-player is ''fitzquake.exe'' and ''ID1\pak0.pak'':
# Install C:\quake\ID1\pak0.pak (and the non-shareware edition's ''pak1.pak'', if you have it). See info above if you want to get ''pak0.pak'' from the shareware. If you just run the official installer, it will install this file along with several others you don't really need.
# Unzip the FitzQuake distribution into C:\quake.
# Run C:\quake\fitzquake.exe.

If this runs OK, you will probably want to continue using it for single-player games, although you can try experimenting with other [[engines]], which have different feature sets.

If you want to play multiplayer games, you'll want [http://ezquake.sourceforge.net/ ezQuake], a state-of-the-art QuakeWorld engine.

===DOS===
''TBD''
===Mac OS X===
''TBD''
===Mac OS Classic===
''TBD''
===Unix===
''TBD''
* [http://www.mobygames.com/game/linux/quake-the-offering Quake: The Offering for Linux - MobyGames:]
* [http://www.quakeforge.net/ The QuakeForge Project]
===Misc links===
* [http://www.kristianduske.com/fitzquake/ SDL port of FitzQuake] mainly for Linux and Mac OS X
* [http://rome.ro/2006/10/quake-map-sources-released.html planet rome.ro: Quake Map Sources Released!]</text>
      <sha1>p266issxmk13ayy3b79xhvhplbv671j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1083</id>
      <parentid>1072</parentid>
      <timestamp>2009-07-12T06:50:12Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <minor/>
      <comment>/* Windows */ wikilink FitzQuake</comment>
      <text xml:space="preserve" bytes="7375">==Overview==
This is a quick-start guide to getting, installing, and actually running the game.

===Components===
Quake consists of three parts:
* A platform-specific Quake [[engines|engine]], which is the program you run to actually play Quake.
* The platform-independent archives ''[[pak0.pak]]'' (required) and ''[[pak1.pak]]'' (usually optional).
* The soundtrack, which normally exists as audio tracks on the original Quake CD-ROM, which you can leave in your drive while you play. The soundtrack and CD-ROM are optional.

Therefore, a minimal installation of Quake consists of just ''pak0.pak'' and a single Quake engine.

There are many engines to choose from, each with different features and platform (hardware + operating system) requirements. The [[engines]] article discusses the options in more detail.

==Getting Quake==
You have several options for getting Quake. To get ''pak0.pak'' and at least one basic engine, you can either buy official game distributions in CD-ROM or downloadable editions, or download the shareware edition (sans soundtrack). Either way, you can download and use other engines if you don't like or can't use the ones that come with the official distributions.

===Buy Quake on CD-ROM===
One way to get an official distribution of Quake is to buy it on CD-ROM, which will include a basic but well-tested engine, the soundtrack, and ''pak0.pak'' (and ''pak1.pak'', as long as you don't get a shareware CD).

Apart from rummaging your favourite market of used goods (flea market, friends, random online communities) you can get Quake CDs from these vendors:

*[http://www.amazon.com/QUAKE-Windows/dp/B000H1AGA6 Amazon.com: QUAKE: Windows: Video Games]
*[http://www.amazon.co.uk/Ultimate-Quake-II-III-PC/dp/B00005RW1V Ultimate Quake: Includes I,II and III (PC CD): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Jewel-Case/dp/B00004YNT4 Replay Quake (Jewel Case): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Box/dp/B00004YNT5 Replay Quake (Box): Amazon.co.uk: PC &amp; Video Games]
*[http://video-games.shop.ebay.com/items/_W0QQPlatformZPCQQ_dmptZVideoQ5fGamesQ5fGamesQQ_sopZ12?_nkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64+-saturn&amp;_sacat=1249&amp;_trksid=m270&amp;_odkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64 Ebay] (don't forget to check your local branch)
*[http://www.idsoftware.com/games/quake/quake/index.php?game_section=buy id Software]

Be careful that you don't accidentally buy a shareware disc. The shareware edition is useful, but there's no need to pay for it; it's free to download. However, the soundtrack is on the shareware disc and isn't available elsewhere (legally), so if you did happen to get the wrong disc, at least you'd have gotten something for your money.

===Buy the Steam edition of Quake===
Since August 2007, an official release of the full/registered Quake has been available on Steam (steampowered.com). Steam is a vendor which allows you to pay to download a Win2K/XP/Vista edition of Quake which includes four official engines: WinQuake, QuakeWorld, GLQuake, and GLQuakeWorld. This edition does ''not'' include the soundtrack.
* [http://store.steampowered.com/app/2310/ Quake on Steam]

===Download the shareware edition of Quake===
Another way to get an official release of Quake is to download the shareware edition. The only restriction in this edition, besides no soundtrack, is you won't have access to the Episodes 2-4 portions of the original single-player game. Those require ''pak1.pak'', which you only get with the 'registered'/commercial edition.

* [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip quake106.zip] - Quake 1.06 shareware edition; contains ''resource.1'', which is an lh5 LZH-encoded archive (LHA) containing the actual game files, including ''ID1\pak0.pak''. The zip contains an installer program (''deice.exe'') for DOS/Win32 which unpacks the entire archive, and a script (''install.bat'') which runs the installer and then tries to launch the DOS Quake engine. If you can't/don't want to run these, use an lh5-compatible LHA extractor like [http://www2.nsknet.or.jp/~micco/english/lhmelt_e.htm LHmelting] to extract what you need from ''resource.1''. Some multi-format archivers/extractors may also work.

==Installing Quake==
All Quake and QuakeWorld installations work on the same principles. You just need to have a folder hierarchy like this:

* Quake root folder (e.g. ''C:\quake'')
** ''ID1'' subfolder (e.g. ''C:\quake\ID1'').

In the Quake root folder is where the [[engines]] live. It doesn't matter the folder's name is or where it exists on your file system. Engines can generally coexist in it.

In the ''ID1'' subfolder of the Quake root folder, you must have the file ''pak0.pak'' from the official Quake distribution (shareware or commercial, doesn't matter). Some engines (notably, the official GLQuake) may require the presence of ''pak1.pak'' from the non-shareware Quake distribution as well, but generally this file is optional. Case usually doesn't matter on Windows or DOS folder names, but on non-Windows systems, some engines expect the ''id1'' to be lowercase.

So, to summarize, '''installing Quake boils down to just getting an engine executable into a folder, and ''pak0.pak'' into an ''ID1'' subfolder.''' That's it.

===Windows===
''TODO: move this to a separate article.''

Original Quake CD-ROMs and the shareware version only come with a DOS/Win95/98/Me-only game engine which has no hardware-accelerated graphics rendering. Unless you have extremely old hardware (like from 1996 or earlier) requiring this engine, ignore it and start with [[FitzQuake]], which is a basic but widely compatible [[NetQuake]] engine with fast, high-quality OpenGL graphics.

You can install Quake wherever you want on your hard drive. C:\QUAKE_SW is the default suggested by the official installer (''install.bat'' and ''deice.exe''), but in examples here we'll use C:\quake.

All you need to play single-player is ''fitzquake.exe'' and ''ID1\pak0.pak'':
# Install C:\quake\ID1\pak0.pak (and the non-shareware edition's ''pak1.pak'', if you have it). See info above if you want to get ''pak0.pak'' from the shareware. If you just run the official installer, it will install this file along with several others you don't really need.
# Unzip the [[FitzQuake]] distribution into C:\quake.
# Run C:\quake\fitzquake.exe.

If this runs OK, you will probably want to continue using it for single-player games, although you can try experimenting with other [[engines]], which have different feature sets.

If you want to play multiplayer games, you'll want [http://ezquake.sourceforge.net/ ezQuake], a state-of-the-art QuakeWorld engine.

===DOS===
''TBD''
===Mac OS X===
''TBD''
===Mac OS Classic===
''TBD''
===Unix===
''TBD''
* [http://www.mobygames.com/game/linux/quake-the-offering Quake: The Offering for Linux - MobyGames:]
* [http://www.quakeforge.net/ The QuakeForge Project]
===Misc links===
* [http://www.kristianduske.com/fitzquake/ SDL port of FitzQuake] mainly for Linux and Mac OS X
* [http://rome.ro/2006/10/quake-map-sources-released.html planet rome.ro: Quake Map Sources Released!]</text>
      <sha1>71dj75zt722rxvm3jgfyflp8wahshr7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1092</id>
      <parentid>1083</parentid>
      <timestamp>2009-07-15T07:52:20Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <minor/>
      <comment>/* Components */ minor clarification for people who don't want to read the other pages</comment>
      <text xml:space="preserve" bytes="7385">==Overview==
This is a quick-start guide to getting, installing, and actually running the game.

===Components===
Quake consists of three parts:
* A platform-specific Quake [[engines|engine]], which is the program you run to actually play Quake.
* The platform-independent game data archives ''[[pak0.pak]]'' (required) and ''[[pak1.pak]]'' (usually optional).
* The soundtrack, which normally exists as audio tracks on the original Quake CD-ROM, which you can leave in your drive while you play. The soundtrack and CD-ROM are optional.

Therefore, a minimal installation of Quake consists of just ''pak0.pak'' and a single Quake engine.

There are many engines to choose from, each with different features and platform (hardware + operating system) requirements. The [[engines]] article discusses the options in more detail.

==Getting Quake==
You have several options for getting Quake. To get ''pak0.pak'' and at least one basic engine, you can either buy official game distributions in CD-ROM or downloadable editions, or download the shareware edition (sans soundtrack). Either way, you can download and use other engines if you don't like or can't use the ones that come with the official distributions.

===Buy Quake on CD-ROM===
One way to get an official distribution of Quake is to buy it on CD-ROM, which will include a basic but well-tested engine, the soundtrack, and ''pak0.pak'' (and ''pak1.pak'', as long as you don't get a shareware CD).

Apart from rummaging your favourite market of used goods (flea market, friends, random online communities) you can get Quake CDs from these vendors:

*[http://www.amazon.com/QUAKE-Windows/dp/B000H1AGA6 Amazon.com: QUAKE: Windows: Video Games]
*[http://www.amazon.co.uk/Ultimate-Quake-II-III-PC/dp/B00005RW1V Ultimate Quake: Includes I,II and III (PC CD): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Jewel-Case/dp/B00004YNT4 Replay Quake (Jewel Case): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Box/dp/B00004YNT5 Replay Quake (Box): Amazon.co.uk: PC &amp; Video Games]
*[http://video-games.shop.ebay.com/items/_W0QQPlatformZPCQQ_dmptZVideoQ5fGamesQ5fGamesQQ_sopZ12?_nkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64+-saturn&amp;_sacat=1249&amp;_trksid=m270&amp;_odkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64 Ebay] (don't forget to check your local branch)
*[http://www.idsoftware.com/games/quake/quake/index.php?game_section=buy id Software]

Be careful that you don't accidentally buy a shareware disc. The shareware edition is useful, but there's no need to pay for it; it's free to download. However, the soundtrack is on the shareware disc and isn't available elsewhere (legally), so if you did happen to get the wrong disc, at least you'd have gotten something for your money.

===Buy the Steam edition of Quake===
Since August 2007, an official release of the full/registered Quake has been available on Steam (steampowered.com). Steam is a vendor which allows you to pay to download a Win2K/XP/Vista edition of Quake which includes four official engines: WinQuake, QuakeWorld, GLQuake, and GLQuakeWorld. This edition does ''not'' include the soundtrack.
* [http://store.steampowered.com/app/2310/ Quake on Steam]

===Download the shareware edition of Quake===
Another way to get an official release of Quake is to download the shareware edition. The only restriction in this edition, besides no soundtrack, is you won't have access to the Episodes 2-4 portions of the original single-player game. Those require ''pak1.pak'', which you only get with the 'registered'/commercial edition.

* [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip quake106.zip] - Quake 1.06 shareware edition; contains ''resource.1'', which is an lh5 LZH-encoded archive (LHA) containing the actual game files, including ''ID1\pak0.pak''. The zip contains an installer program (''deice.exe'') for DOS/Win32 which unpacks the entire archive, and a script (''install.bat'') which runs the installer and then tries to launch the DOS Quake engine. If you can't/don't want to run these, use an lh5-compatible LHA extractor like [http://www2.nsknet.or.jp/~micco/english/lhmelt_e.htm LHmelting] to extract what you need from ''resource.1''. Some multi-format archivers/extractors may also work.

==Installing Quake==
All Quake and QuakeWorld installations work on the same principles. You just need to have a folder hierarchy like this:

* Quake root folder (e.g. ''C:\quake'')
** ''ID1'' subfolder (e.g. ''C:\quake\ID1'').

In the Quake root folder is where the [[engines]] live. It doesn't matter the folder's name is or where it exists on your file system. Engines can generally coexist in it.

In the ''ID1'' subfolder of the Quake root folder, you must have the file ''pak0.pak'' from the official Quake distribution (shareware or commercial, doesn't matter). Some engines (notably, the official GLQuake) may require the presence of ''pak1.pak'' from the non-shareware Quake distribution as well, but generally this file is optional. Case usually doesn't matter on Windows or DOS folder names, but on non-Windows systems, some engines expect the ''id1'' to be lowercase.

So, to summarize, '''installing Quake boils down to just getting an engine executable into a folder, and ''pak0.pak'' into an ''ID1'' subfolder.''' That's it.

===Windows===
''TODO: move this to a separate article.''

Original Quake CD-ROMs and the shareware version only come with a DOS/Win95/98/Me-only game engine which has no hardware-accelerated graphics rendering. Unless you have extremely old hardware (like from 1996 or earlier) requiring this engine, ignore it and start with [[FitzQuake]], which is a basic but widely compatible [[NetQuake]] engine with fast, high-quality OpenGL graphics.

You can install Quake wherever you want on your hard drive. C:\QUAKE_SW is the default suggested by the official installer (''install.bat'' and ''deice.exe''), but in examples here we'll use C:\quake.

All you need to play single-player is ''fitzquake.exe'' and ''ID1\pak0.pak'':
# Install C:\quake\ID1\pak0.pak (and the non-shareware edition's ''pak1.pak'', if you have it). See info above if you want to get ''pak0.pak'' from the shareware. If you just run the official installer, it will install this file along with several others you don't really need.
# Unzip the [[FitzQuake]] distribution into C:\quake.
# Run C:\quake\fitzquake.exe.

If this runs OK, you will probably want to continue using it for single-player games, although you can try experimenting with other [[engines]], which have different feature sets.

If you want to play multiplayer games, you'll want [http://ezquake.sourceforge.net/ ezQuake], a state-of-the-art QuakeWorld engine.

===DOS===
''TBD''
===Mac OS X===
''TBD''
===Mac OS Classic===
''TBD''
===Unix===
''TBD''
* [http://www.mobygames.com/game/linux/quake-the-offering Quake: The Offering for Linux - MobyGames:]
* [http://www.quakeforge.net/ The QuakeForge Project]
===Misc links===
* [http://www.kristianduske.com/fitzquake/ SDL port of FitzQuake] mainly for Linux and Mac OS X
* [http://rome.ro/2006/10/quake-map-sources-released.html planet rome.ro: Quake Map Sources Released!]</text>
      <sha1>gd2dxi1maksrb8lacishtdvb46cz31l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1093</id>
      <parentid>1092</parentid>
      <timestamp>2009-07-17T05:16:32Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <minor/>
      <comment>/* Buy Quake on CD-ROM */ mention Quake: The Offering</comment>
      <text xml:space="preserve" bytes="7461">==Overview==
This is a quick-start guide to getting, installing, and actually running the game.

===Components===
Quake consists of three parts:
* A platform-specific Quake [[engines|engine]], which is the program you run to actually play Quake.
* The platform-independent game data archives ''[[pak0.pak]]'' (required) and ''[[pak1.pak]]'' (usually optional).
* The soundtrack, which normally exists as audio tracks on the original Quake CD-ROM, which you can leave in your drive while you play. The soundtrack and CD-ROM are optional.

Therefore, a minimal installation of Quake consists of just ''pak0.pak'' and a single Quake engine.

There are many engines to choose from, each with different features and platform (hardware + operating system) requirements. The [[engines]] article discusses the options in more detail.

==Getting Quake==
You have several options for getting Quake. To get ''pak0.pak'' and at least one basic engine, you can either buy official game distributions in CD-ROM or downloadable editions, or download the shareware edition (sans soundtrack). Either way, you can download and use other engines if you don't like or can't use the ones that come with the official distributions.

===Buy Quake on CD-ROM===
One way to get an official distribution of Quake is to buy it on CD-ROM, which will include a basic but well-tested engine, the soundtrack, and ''pak0.pak'' (and ''pak1.pak'', as long as you don't get a shareware CD).

Apart from rummaging your favourite market of used goods (flea market, friends, random online communities) you can get Quake CDs from these vendors:

*[http://www.amazon.com/QUAKE-Windows/dp/B000H1AGA6 Amazon.com: QUAKE: Windows: Video Games]
*[http://www.amazon.co.uk/Ultimate-Quake-II-III-PC/dp/B00005RW1V Ultimate Quake: Includes I,II and III (PC CD): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Jewel-Case/dp/B00004YNT4 Replay Quake (Jewel Case): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Box/dp/B00004YNT5 Replay Quake (Box): Amazon.co.uk: PC &amp; Video Games]
*[http://video-games.shop.ebay.com/items/_W0QQPlatformZPCQQ_dmptZVideoQ5fGamesQ5fGamesQQ_sopZ12?_nkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64+-saturn&amp;_sacat=1249&amp;_trksid=m270&amp;_odkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64 Ebay] (don't forget to check your local branch)
*[http://www.idsoftware.com/games/quake/quake/index.php?game_section=buy id Software]
*''Quake: The Offering'' is the retail edition for Linux, released in 1998.

Be careful that you don't accidentally buy a shareware disc. The shareware edition is useful, but there's no need to pay for it; it's free to download. However, the soundtrack is on the shareware disc and isn't available elsewhere (legally), so if you did happen to get the wrong disc, at least you'd have gotten something for your money.

===Buy the Steam edition of Quake===
Since August 2007, an official release of the full/registered Quake has been available on Steam (steampowered.com). Steam is a vendor which allows you to pay to download a Win2K/XP/Vista edition of Quake which includes four official engines: WinQuake, QuakeWorld, GLQuake, and GLQuakeWorld. This edition does ''not'' include the soundtrack.
* [http://store.steampowered.com/app/2310/ Quake on Steam]

===Download the shareware edition of Quake===
Another way to get an official release of Quake is to download the shareware edition. The only restriction in this edition, besides no soundtrack, is you won't have access to the Episodes 2-4 portions of the original single-player game. Those require ''pak1.pak'', which you only get with the 'registered'/commercial edition.

* [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip quake106.zip] - Quake 1.06 shareware edition; contains ''resource.1'', which is an lh5 LZH-encoded archive (LHA) containing the actual game files, including ''ID1\pak0.pak''. The zip contains an installer program (''deice.exe'') for DOS/Win32 which unpacks the entire archive, and a script (''install.bat'') which runs the installer and then tries to launch the DOS Quake engine. If you can't/don't want to run these, use an lh5-compatible LHA extractor like [http://www2.nsknet.or.jp/~micco/english/lhmelt_e.htm LHmelting] to extract what you need from ''resource.1''. Some multi-format archivers/extractors may also work.

==Installing Quake==
All Quake and QuakeWorld installations work on the same principles. You just need to have a folder hierarchy like this:

* Quake root folder (e.g. ''C:\quake'')
** ''ID1'' subfolder (e.g. ''C:\quake\ID1'').

In the Quake root folder is where the [[engines]] live. It doesn't matter the folder's name is or where it exists on your file system. Engines can generally coexist in it.

In the ''ID1'' subfolder of the Quake root folder, you must have the file ''pak0.pak'' from the official Quake distribution (shareware or commercial, doesn't matter). Some engines (notably, the official GLQuake) may require the presence of ''pak1.pak'' from the non-shareware Quake distribution as well, but generally this file is optional. Case usually doesn't matter on Windows or DOS folder names, but on non-Windows systems, some engines expect the ''id1'' to be lowercase.

So, to summarize, '''installing Quake boils down to just getting an engine executable into a folder, and ''pak0.pak'' into an ''ID1'' subfolder.''' That's it.

===Windows===
''TODO: move this to a separate article.''

Original Quake CD-ROMs and the shareware version only come with a DOS/Win95/98/Me-only game engine which has no hardware-accelerated graphics rendering. Unless you have extremely old hardware (like from 1996 or earlier) requiring this engine, ignore it and start with [[FitzQuake]], which is a basic but widely compatible [[NetQuake]] engine with fast, high-quality OpenGL graphics.

You can install Quake wherever you want on your hard drive. C:\QUAKE_SW is the default suggested by the official installer (''install.bat'' and ''deice.exe''), but in examples here we'll use C:\quake.

All you need to play single-player is ''fitzquake.exe'' and ''ID1\pak0.pak'':
# Install C:\quake\ID1\pak0.pak (and the non-shareware edition's ''pak1.pak'', if you have it). See info above if you want to get ''pak0.pak'' from the shareware. If you just run the official installer, it will install this file along with several others you don't really need.
# Unzip the [[FitzQuake]] distribution into C:\quake.
# Run C:\quake\fitzquake.exe.

If this runs OK, you will probably want to continue using it for single-player games, although you can try experimenting with other [[engines]], which have different feature sets.

If you want to play multiplayer games, you'll want [http://ezquake.sourceforge.net/ ezQuake], a state-of-the-art QuakeWorld engine.

===DOS===
''TBD''
===Mac OS X===
''TBD''
===Mac OS Classic===
''TBD''
===Unix===
''TBD''
* [http://www.mobygames.com/game/linux/quake-the-offering Quake: The Offering for Linux - MobyGames:]
* [http://www.quakeforge.net/ The QuakeForge Project]
===Misc links===
* [http://www.kristianduske.com/fitzquake/ SDL port of FitzQuake] mainly for Linux and Mac OS X
* [http://rome.ro/2006/10/quake-map-sources-released.html planet rome.ro: Quake Map Sources Released!]</text>
      <sha1>jehdm6ce1ne4e50dq0ixdckjpt7g1cj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1094</id>
      <parentid>1093</parentid>
      <timestamp>2009-07-17T20:50:14Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>/* Getting Quake */ copy edits for clarity</comment>
      <text xml:space="preserve" bytes="7670">==Overview==
This is a quick-start guide to getting, installing, and actually running the game.

===Components===
Quake consists of three parts:
* A platform-specific Quake [[engines|engine]], which is the program you run to actually play Quake.
* The platform-independent game data archives ''[[pak0.pak]]'' (required) and ''[[pak1.pak]]'' (usually optional).
* The soundtrack, which normally exists as audio tracks on the original Quake CD-ROM, which you can leave in your drive while you play. The soundtrack and CD-ROM are optional.

Therefore, a minimal installation of Quake consists of just ''pak0.pak'' and a single Quake engine.

There are many engines to choose from, each with different features and platform (hardware + operating system) requirements. The [[engines]] article discusses the options in more detail.

==Getting Quake==
You have several options for getting Quake.

The '''only''' legal way to get the required file ''pak0.pak'' is to get one of the official distributions. This will also give you at least one basic engine, and maybe also the soundtrack, and maybe also ''pak1.pak''. To get an official distribution, you can either buy a CD-ROM or commercial downloadable edition, or you can freely download the shareware edition. Either way, you can freely download and use alternative engines if you don't like or can't use whatever engines you get with the official distribution.

===Buy Quake on CD-ROM===
One way to get an official distribution of Quake is to buy it on CD-ROM, which will include at least one basic but well-tested engine, the soundtrack, and ''pak0.pak'' (and ''pak1.pak'', as long as you don't get a shareware CD).

Apart from rummaging your favourite market of used goods (flea market, friends, random online communities) you can get Quake CDs from these vendors:

*[http://www.amazon.com/QUAKE-Windows/dp/B000H1AGA6 Amazon.com: QUAKE: Windows: Video Games]
*[http://www.amazon.co.uk/Ultimate-Quake-II-III-PC/dp/B00005RW1V Ultimate Quake: Includes I,II and III (PC CD): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Jewel-Case/dp/B00004YNT4 Replay Quake (Jewel Case): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Box/dp/B00004YNT5 Replay Quake (Box): Amazon.co.uk: PC &amp; Video Games]
*[http://video-games.shop.ebay.com/items/_W0QQPlatformZPCQQ_dmptZVideoQ5fGamesQ5fGamesQQ_sopZ12?_nkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64+-saturn&amp;_sacat=1249&amp;_trksid=m270&amp;_odkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64 Ebay] (don't forget to check your local branch)
*[http://www.idsoftware.com/games/quake/quake/index.php?game_section=buy id Software]
*''Quake: The Offering'' is the retail edition for Linux, released in 1998.

Be careful that you don't accidentally buy a shareware disc. The shareware edition is useful, but there's no need to pay for it; it's free to download. However, the soundtrack is on the shareware disc and isn't available elsewhere (legally), so if you did happen to get the wrong disc, at least you'd have gotten something for your money.

===Buy the Steam edition of Quake===
Since August 2007, an official release of the full/registered Quake has been available on Steam (steampowered.com). Steam is a vendor which allows you to pay to download a Win2K/XP/Vista edition of Quake which includes four official engines: WinQuake, QuakeWorld, GLQuake, and GLQuakeWorld. This edition does ''not'' include the soundtrack.
* [http://store.steampowered.com/app/2310/ Quake on Steam]

===Download the shareware edition of Quake===
Another way to get an official release of Quake is to download the shareware edition. The only restriction in this edition, besides no soundtrack, is you won't have access to the Episodes 2-4 portions of the original single-player game. Those require ''pak1.pak'', which you only get with the 'registered'/commercial edition.

* [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip quake106.zip] - Quake 1.06 shareware edition; contains ''resource.1'', which is an lh5 LZH-encoded archive (LHA) containing the actual game files, including ''ID1\pak0.pak''. The zip contains an installer program (''deice.exe'') for DOS/Win32 which unpacks the entire archive, and a script (''install.bat'') which runs the installer and then tries to launch the DOS Quake engine. If you can't/don't want to run these, use an lh5-compatible LHA extractor like [http://www2.nsknet.or.jp/~micco/english/lhmelt_e.htm LHmelting] to extract what you need from ''resource.1''. Some multi-format archivers/extractors may also work.

==Installing Quake==
All Quake and QuakeWorld installations work on the same principles. You just need to have a folder hierarchy like this:

* Quake root folder (e.g. ''C:\quake'')
** ''ID1'' subfolder (e.g. ''C:\quake\ID1'').

In the Quake root folder is where the [[engines]] live. It doesn't matter the folder's name is or where it exists on your file system. Engines can generally coexist in it.

In the ''ID1'' subfolder of the Quake root folder, you must have the file ''pak0.pak'' from the official Quake distribution (shareware or commercial, doesn't matter). Some engines (notably, the official GLQuake) may require the presence of ''pak1.pak'' from the non-shareware Quake distribution as well, but generally this file is optional. Case usually doesn't matter on Windows or DOS folder names, but on non-Windows systems, some engines expect the ''id1'' to be lowercase.

So, to summarize, '''installing Quake boils down to just getting an engine executable into a folder, and ''pak0.pak'' into an ''ID1'' subfolder.''' That's it.

===Windows===
''TODO: move this to a separate article.''

Original Quake CD-ROMs and the shareware version only come with a DOS/Win95/98/Me-only game engine which has no hardware-accelerated graphics rendering. Unless you have extremely old hardware (like from 1996 or earlier) requiring this engine, ignore it and start with [[FitzQuake]], which is a basic but widely compatible [[NetQuake]] engine with fast, high-quality OpenGL graphics.

You can install Quake wherever you want on your hard drive. C:\QUAKE_SW is the default suggested by the official installer (''install.bat'' and ''deice.exe''), but in examples here we'll use C:\quake.

All you need to play single-player is ''fitzquake.exe'' and ''ID1\pak0.pak'':
# Install C:\quake\ID1\pak0.pak (and the non-shareware edition's ''pak1.pak'', if you have it). See info above if you want to get ''pak0.pak'' from the shareware. If you just run the official installer, it will install this file along with several others you don't really need.
# Unzip the [[FitzQuake]] distribution into C:\quake.
# Run C:\quake\fitzquake.exe.

If this runs OK, you will probably want to continue using it for single-player games, although you can try experimenting with other [[engines]], which have different feature sets.

If you want to play multiplayer games, you'll want [http://ezquake.sourceforge.net/ ezQuake], a state-of-the-art QuakeWorld engine.

===DOS===
''TBD''
===Mac OS X===
''TBD''
===Mac OS Classic===
''TBD''
===Unix===
''TBD''
* [http://www.mobygames.com/game/linux/quake-the-offering Quake: The Offering for Linux - MobyGames:]
* [http://www.quakeforge.net/ The QuakeForge Project]
===Misc links===
* [http://www.kristianduske.com/fitzquake/ SDL port of FitzQuake] mainly for Linux and Mac OS X
* [http://rome.ro/2006/10/quake-map-sources-released.html planet rome.ro: Quake Map Sources Released!]</text>
      <sha1>opiazz8mytjsdugr03o53mtfdqrvgmd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1456</id>
      <parentid>1094</parentid>
      <timestamp>2009-11-17T08:40:04Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="7670">==Overview==
This is a quick-start guide to getting, installing, and actually running the game.

===Components===
Quake consists of three parts:
* A platform-specific Quake [[engines|engine]], which is the program you run to actually play Quake.
* The platform-independent game data archives ''[[pak0.pak]]'' (required) and ''[[pak1.pak]]'' (usually optional).
* The soundtrack, which normally exists as audio tracks on the original Quake CD-ROM, which you can leave in your drive while you play. The soundtrack and CD-ROM are optional.

Therefore, a minimal installation of Quake consists of just ''pak0.pak'' and a single Quake engine.

There are many engines to choose from, each with different features and platform (hardware + operating system) requirements. The [[engines]] article discusses the options in more detail.

==Getting Quake==
You have several options for getting Quake.

The '''only''' legal way to get the required file ''pak0.pak'' is to get one of the official distributions. This will also give you at least one basic engine, and maybe also the soundtrack, and maybe also ''pak1.pak''. To get an official distribution, you can either buy a CD-ROM or commercial downloadable edition, or you can freely download the shareware edition. Either way, you can freely download and use alternative engines if you don't like or can't use whatever engines you get with the official distribution.

===Buy Quake on CD-ROM===
One way to get an official distribution of Quake is to buy it on CD-ROM, which will include at least one basic but well-tested engine, the soundtrack, and ''pak0.pak'' (and ''pak1.pak'', as long as you don't get a shareware CD).

Apart from rummaging your favourite market of used goods (flea market, friends, random online communities) you can get Quake CDs from these vendors:

*[http://www.amazon.com/QUAKE-Windows/dp/B000H1AGA6 Amazon.com: QUAKE: Windows: Video Games]
*[http://www.amazon.co.uk/Ultimate-Quake-II-III-PC/dp/B00005RW1V Ultimate Quake: Includes I,II and III (PC CD): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Jewel-Case/dp/B00004YNT4 Replay Quake (Jewel Case): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Box/dp/B00004YNT5 Replay Quake (Box): Amazon.co.uk: PC &amp; Video Games]
*[http://video-games.shop.ebay.com/items/_W0QQPlatformZPCQQ_dmptZVideoQ5fGamesQ5fGamesQQ_sopZ12?_nkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64+-saturn&amp;_sacat=1249&amp;_trksid=m270&amp;_odkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64 Ebay] (don't forget to check your local branch)
*[http://www.idsoftware.com/games/quake/quake/index.php?game_section=buy id Software]
*''Quake: The Offering'' is the retail edition for Linux, released in 1998.

Be careful that you don't accidentally buy a shareware disc. The shareware edition is useful, but there's no need to pay for it; it's free to download. However, the soundtrack is on the shareware disc and isn't available elsewhere (legally), so if you did happen to get the wrong disc, at least you'd have gotten something for your money.

===Buy the Steam edition of Quake===
Since August 2007, an official release of the full/registered Quake has been available on Steam (steampowered.com). Steam is a vendor which allows you to pay to download a Win2K/XP/Vista edition of Quake which includes four official engines: WinQuake, QuakeWorld, GLQuake, and GLQuakeWorld. This edition does ''not'' include the soundtrack.
* [http://store.steampowered.com/app/2310/ Quake on Steam]

===Download the shareware edition of Quake===
Another way to get an official release of Quake is to download the shareware edition. The only restriction in this edition, besides no soundtrack, is you won't have access to the Episodes 2-4 portions of the original single-player game. Those require ''pak1.pak'', which you only get with the 'registered'/commercial edition.

* [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip quake106.zip] - Quake 1.06 shareware edition; contains ''resource.1'', which is an lh5 LZH-encoded archive (LHA) containing the actual game files, including ''ID1\pak0.pak''. The zip contains an installer program (''deice.exe'') for DOS/Win32 which unpacks the entire archive, and a script (''install.bat'') which runs the installer and then tries to launch the DOS Quake engine. If you can't/don't want to run these, use an lh5-compatible LHA extractor like [http://www2.nsknet.or.jp/~micco/english/lhmelt_e.htm LHmelting] to extract what you need from ''resource.1''. Some multi-format archivers/extractors may also work.

==Installing Quake==
All Quake and QuakeWorld installations work on the same principles. You just need to have a folder hierarchy like this:

* Quake root folder (e.g. ''C:\quake'')
** ''ID1'' subfolder (e.g. ''C:\quake\ID1'').

In the Quake root folder is where the [[engines]] live. It doesn't matter the folder's name is or where it exists on your file system. Engines can generally coexist in it.

In the ''ID1'' subfolder of the Quake root folder, you must have the file ''pak0.pak'' from the official Quake distribution (shareware or commercial, doesn't matter). Some engines (notably, the official GLQuake) may require the presence of ''pak1.pak'' from the non-shareware Quake distribution as well, but generally this file is optional. Case usually doesn't matter on Windows or DOS folder names, but on non-Windows systems, some engines expect the ''id1'' to be lowercase.

So, to summarize, '''installing Quake boils down to just getting an engine executable into a folder, and ''pak0.pak'' into an ''ID1'' subfolder.''' That's it.

===Windows===
''TODO: move this to a separate article.''

Original Quake CD-ROMs and the shareware version only come with a DOS/Win95/98/Me-only game engine which has no hardware-accelerated graphics rendering. Unless you have extremely old hardware (like from 1996 or earlier) requiring this engine, ignore it and start with [[Fitzquake]], which is a basic but widely compatible [[NetQuake]] engine with fast, high-quality OpenGL graphics.

You can install Quake wherever you want on your hard drive. C:\QUAKE_SW is the default suggested by the official installer (''install.bat'' and ''deice.exe''), but in examples here we'll use C:\quake.

All you need to play single-player is ''fitzquake.exe'' and ''ID1\pak0.pak'':
# Install C:\quake\ID1\pak0.pak (and the non-shareware edition's ''pak1.pak'', if you have it). See info above if you want to get ''pak0.pak'' from the shareware. If you just run the official installer, it will install this file along with several others you don't really need.
# Unzip the [[Fitzquake]] distribution into C:\quake.
# Run C:\quake\fitzquake.exe.

If this runs OK, you will probably want to continue using it for single-player games, although you can try experimenting with other [[engines]], which have different feature sets.

If you want to play multiplayer games, you'll want [http://ezquake.sourceforge.net/ ezQuake], a state-of-the-art QuakeWorld engine.

===DOS===
''TBD''
===Mac OS X===
''TBD''
===Mac OS Classic===
''TBD''
===Unix===
''TBD''
* [http://www.mobygames.com/game/linux/quake-the-offering Quake: The Offering for Linux - MobyGames:]
* [http://www.quakeforge.net/ The QuakeForge Project]
===Misc links===
* [http://www.kristianduske.com/fitzquake/ SDL port of Fitzquake] mainly for Linux and Mac OS X
* [http://rome.ro/2006/10/quake-map-sources-released.html planet rome.ro: Quake Map Sources Released!]</text>
      <sha1>dg2oxgj9piq2kjles4tbu5f1s16p8gv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2229</id>
      <parentid>1456</parentid>
      <timestamp>2013-03-26T13:18:51Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>/* Windows */</comment>
      <text xml:space="preserve" bytes="7674">==Overview==
This is a quick-start guide to getting, installing, and actually running the game.

===Components===
Quake consists of three parts:
* A platform-specific Quake [[engines|engine]], which is the program you run to actually play Quake.
* The platform-independent game data archives ''[[pak0.pak]]'' (required) and ''[[pak1.pak]]'' (usually optional).
* The soundtrack, which normally exists as audio tracks on the original Quake CD-ROM, which you can leave in your drive while you play. The soundtrack and CD-ROM are optional.

Therefore, a minimal installation of Quake consists of just ''pak0.pak'' and a single Quake engine.

There are many engines to choose from, each with different features and platform (hardware + operating system) requirements. The [[engines]] article discusses the options in more detail.

==Getting Quake==
You have several options for getting Quake.

The '''only''' legal way to get the required file ''pak0.pak'' is to get one of the official distributions. This will also give you at least one basic engine, and maybe also the soundtrack, and maybe also ''pak1.pak''. To get an official distribution, you can either buy a CD-ROM or commercial downloadable edition, or you can freely download the shareware edition. Either way, you can freely download and use alternative engines if you don't like or can't use whatever engines you get with the official distribution.

===Buy Quake on CD-ROM===
One way to get an official distribution of Quake is to buy it on CD-ROM, which will include at least one basic but well-tested engine, the soundtrack, and ''pak0.pak'' (and ''pak1.pak'', as long as you don't get a shareware CD).

Apart from rummaging your favourite market of used goods (flea market, friends, random online communities) you can get Quake CDs from these vendors:

*[http://www.amazon.com/QUAKE-Windows/dp/B000H1AGA6 Amazon.com: QUAKE: Windows: Video Games]
*[http://www.amazon.co.uk/Ultimate-Quake-II-III-PC/dp/B00005RW1V Ultimate Quake: Includes I,II and III (PC CD): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Jewel-Case/dp/B00004YNT4 Replay Quake (Jewel Case): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Box/dp/B00004YNT5 Replay Quake (Box): Amazon.co.uk: PC &amp; Video Games]
*[http://video-games.shop.ebay.com/items/_W0QQPlatformZPCQQ_dmptZVideoQ5fGamesQ5fGamesQQ_sopZ12?_nkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64+-saturn&amp;_sacat=1249&amp;_trksid=m270&amp;_odkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64 Ebay] (don't forget to check your local branch)
*[http://www.idsoftware.com/games/quake/quake/index.php?game_section=buy id Software]
*''Quake: The Offering'' is the retail edition for Linux, released in 1998.

Be careful that you don't accidentally buy a shareware disc. The shareware edition is useful, but there's no need to pay for it; it's free to download. However, the soundtrack is on the shareware disc and isn't available elsewhere (legally), so if you did happen to get the wrong disc, at least you'd have gotten something for your money.

===Buy the Steam edition of Quake===
Since August 2007, an official release of the full/registered Quake has been available on Steam (steampowered.com). Steam is a vendor which allows you to pay to download a Win2K/XP/Vista edition of Quake which includes four official engines: WinQuake, QuakeWorld, GLQuake, and GLQuakeWorld. This edition does ''not'' include the soundtrack.
* [http://store.steampowered.com/app/2310/ Quake on Steam]

===Download the shareware edition of Quake===
Another way to get an official release of Quake is to download the shareware edition. The only restriction in this edition, besides no soundtrack, is you won't have access to the Episodes 2-4 portions of the original single-player game. Those require ''pak1.pak'', which you only get with the 'registered'/commercial edition.

* [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip quake106.zip] - Quake 1.06 shareware edition; contains ''resource.1'', which is an lh5 LZH-encoded archive (LHA) containing the actual game files, including ''ID1\pak0.pak''. The zip contains an installer program (''deice.exe'') for DOS/Win32 which unpacks the entire archive, and a script (''install.bat'') which runs the installer and then tries to launch the DOS Quake engine. If you can't/don't want to run these, use an lh5-compatible LHA extractor like [http://www2.nsknet.or.jp/~micco/english/lhmelt_e.htm LHmelting] to extract what you need from ''resource.1''. Some multi-format archivers/extractors may also work.

==Installing Quake==
All Quake and QuakeWorld installations work on the same principles. You just need to have a folder hierarchy like this:

* Quake root folder (e.g. ''C:\quake'')
** ''ID1'' subfolder (e.g. ''C:\quake\ID1'').

In the Quake root folder is where the [[engines]] live. It doesn't matter the folder's name is or where it exists on your file system. Engines can generally coexist in it.

In the ''ID1'' subfolder of the Quake root folder, you must have the file ''pak0.pak'' from the official Quake distribution (shareware or commercial, doesn't matter). Some engines (notably, the official GLQuake) may require the presence of ''pak1.pak'' from the non-shareware Quake distribution as well, but generally this file is optional. Case usually doesn't matter on Windows or DOS folder names, but on non-Windows systems, some engines expect the ''id1'' to be lowercase.

So, to summarize, '''installing Quake boils down to just getting an engine executable into a folder, and ''pak0.pak'' into an ''ID1'' subfolder.''' That's it.

===Windows===
{{todo|todo=move this to a separate article.}}

Original Quake CD-ROMs and the shareware version only come with a DOS/Win95/98/Me-only game engine which has no hardware-accelerated graphics rendering. Unless you have extremely old hardware (like from 1996 or earlier) requiring this engine, ignore it and start with [[Fitzquake]], which is a basic but widely compatible [[NetQuake]] engine with fast, high-quality OpenGL graphics.

You can install Quake wherever you want on your hard drive. C:\QUAKE_SW is the default suggested by the official installer (''install.bat'' and ''deice.exe''), but in examples here we'll use C:\quake.

All you need to play single-player is ''fitzquake.exe'' and ''ID1\pak0.pak'':
# Install C:\quake\ID1\pak0.pak (and the non-shareware edition's ''pak1.pak'', if you have it). See info above if you want to get ''pak0.pak'' from the shareware. If you just run the official installer, it will install this file along with several others you don't really need.
# Unzip the [[Fitzquake]] distribution into C:\quake.
# Run C:\quake\fitzquake.exe.

If this runs OK, you will probably want to continue using it for single-player games, although you can try experimenting with other [[engines]], which have different feature sets.

If you want to play multiplayer games, you'll want [http://ezquake.sourceforge.net/ ezQuake], a state-of-the-art QuakeWorld engine.

===DOS===
''TBD''
===Mac OS X===
''TBD''
===Mac OS Classic===
''TBD''
===Unix===
''TBD''
* [http://www.mobygames.com/game/linux/quake-the-offering Quake: The Offering for Linux - MobyGames:]
* [http://www.quakeforge.net/ The QuakeForge Project]
===Misc links===
* [http://www.kristianduske.com/fitzquake/ SDL port of Fitzquake] mainly for Linux and Mac OS X
* [http://rome.ro/2006/10/quake-map-sources-released.html planet rome.ro: Quake Map Sources Released!]</text>
      <sha1>85079mz9x1uxhusbqsurwgmf6v0r58k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2998</id>
      <parentid>2229</parentid>
      <timestamp>2013-07-26T19:43:09Z</timestamp>
      <contributor>
        <ip>198.27.82.165</ip>
      </contributor>
      <comment>Hi, I have surely got to say, I love your website. The colorings, the design, the general style, they all get flawlessly together. Anyway, that is all I really had to claim.</comment>
      <text xml:space="preserve" bytes="173">Hi, I have surely got to say, I love your website. The colorings, the design, the general style, they all get flawlessly together. Anyway, that is all I really had to claim.</text>
      <sha1>4b0dqto5cwy41jjg3yfcduws4qdlnbi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2999</id>
      <parentid>2998</parentid>
      <timestamp>2013-07-27T08:46:26Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Reverted edits by [[Special:Contributions/198.27.82.165|198.27.82.165]] ([[User talk:198.27.82.165|talk]]) to last revision by [[User:Hectate|Hectate]]</comment>
      <text xml:space="preserve" bytes="7674">==Overview==
This is a quick-start guide to getting, installing, and actually running the game.

===Components===
Quake consists of three parts:
* A platform-specific Quake [[engines|engine]], which is the program you run to actually play Quake.
* The platform-independent game data archives ''[[pak0.pak]]'' (required) and ''[[pak1.pak]]'' (usually optional).
* The soundtrack, which normally exists as audio tracks on the original Quake CD-ROM, which you can leave in your drive while you play. The soundtrack and CD-ROM are optional.

Therefore, a minimal installation of Quake consists of just ''pak0.pak'' and a single Quake engine.

There are many engines to choose from, each with different features and platform (hardware + operating system) requirements. The [[engines]] article discusses the options in more detail.

==Getting Quake==
You have several options for getting Quake.

The '''only''' legal way to get the required file ''pak0.pak'' is to get one of the official distributions. This will also give you at least one basic engine, and maybe also the soundtrack, and maybe also ''pak1.pak''. To get an official distribution, you can either buy a CD-ROM or commercial downloadable edition, or you can freely download the shareware edition. Either way, you can freely download and use alternative engines if you don't like or can't use whatever engines you get with the official distribution.

===Buy Quake on CD-ROM===
One way to get an official distribution of Quake is to buy it on CD-ROM, which will include at least one basic but well-tested engine, the soundtrack, and ''pak0.pak'' (and ''pak1.pak'', as long as you don't get a shareware CD).

Apart from rummaging your favourite market of used goods (flea market, friends, random online communities) you can get Quake CDs from these vendors:

*[http://www.amazon.com/QUAKE-Windows/dp/B000H1AGA6 Amazon.com: QUAKE: Windows: Video Games]
*[http://www.amazon.co.uk/Ultimate-Quake-II-III-PC/dp/B00005RW1V Ultimate Quake: Includes I,II and III (PC CD): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Jewel-Case/dp/B00004YNT4 Replay Quake (Jewel Case): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Box/dp/B00004YNT5 Replay Quake (Box): Amazon.co.uk: PC &amp; Video Games]
*[http://video-games.shop.ebay.com/items/_W0QQPlatformZPCQQ_dmptZVideoQ5fGamesQ5fGamesQQ_sopZ12?_nkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64+-saturn&amp;_sacat=1249&amp;_trksid=m270&amp;_odkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64 Ebay] (don't forget to check your local branch)
*[http://www.idsoftware.com/games/quake/quake/index.php?game_section=buy id Software]
*''Quake: The Offering'' is the retail edition for Linux, released in 1998.

Be careful that you don't accidentally buy a shareware disc. The shareware edition is useful, but there's no need to pay for it; it's free to download. However, the soundtrack is on the shareware disc and isn't available elsewhere (legally), so if you did happen to get the wrong disc, at least you'd have gotten something for your money.

===Buy the Steam edition of Quake===
Since August 2007, an official release of the full/registered Quake has been available on Steam (steampowered.com). Steam is a vendor which allows you to pay to download a Win2K/XP/Vista edition of Quake which includes four official engines: WinQuake, QuakeWorld, GLQuake, and GLQuakeWorld. This edition does ''not'' include the soundtrack.
* [http://store.steampowered.com/app/2310/ Quake on Steam]

===Download the shareware edition of Quake===
Another way to get an official release of Quake is to download the shareware edition. The only restriction in this edition, besides no soundtrack, is you won't have access to the Episodes 2-4 portions of the original single-player game. Those require ''pak1.pak'', which you only get with the 'registered'/commercial edition.

* [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip quake106.zip] - Quake 1.06 shareware edition; contains ''resource.1'', which is an lh5 LZH-encoded archive (LHA) containing the actual game files, including ''ID1\pak0.pak''. The zip contains an installer program (''deice.exe'') for DOS/Win32 which unpacks the entire archive, and a script (''install.bat'') which runs the installer and then tries to launch the DOS Quake engine. If you can't/don't want to run these, use an lh5-compatible LHA extractor like [http://www2.nsknet.or.jp/~micco/english/lhmelt_e.htm LHmelting] to extract what you need from ''resource.1''. Some multi-format archivers/extractors may also work.

==Installing Quake==
All Quake and QuakeWorld installations work on the same principles. You just need to have a folder hierarchy like this:

* Quake root folder (e.g. ''C:\quake'')
** ''ID1'' subfolder (e.g. ''C:\quake\ID1'').

In the Quake root folder is where the [[engines]] live. It doesn't matter the folder's name is or where it exists on your file system. Engines can generally coexist in it.

In the ''ID1'' subfolder of the Quake root folder, you must have the file ''pak0.pak'' from the official Quake distribution (shareware or commercial, doesn't matter). Some engines (notably, the official GLQuake) may require the presence of ''pak1.pak'' from the non-shareware Quake distribution as well, but generally this file is optional. Case usually doesn't matter on Windows or DOS folder names, but on non-Windows systems, some engines expect the ''id1'' to be lowercase.

So, to summarize, '''installing Quake boils down to just getting an engine executable into a folder, and ''pak0.pak'' into an ''ID1'' subfolder.''' That's it.

===Windows===
{{todo|todo=move this to a separate article.}}

Original Quake CD-ROMs and the shareware version only come with a DOS/Win95/98/Me-only game engine which has no hardware-accelerated graphics rendering. Unless you have extremely old hardware (like from 1996 or earlier) requiring this engine, ignore it and start with [[Fitzquake]], which is a basic but widely compatible [[NetQuake]] engine with fast, high-quality OpenGL graphics.

You can install Quake wherever you want on your hard drive. C:\QUAKE_SW is the default suggested by the official installer (''install.bat'' and ''deice.exe''), but in examples here we'll use C:\quake.

All you need to play single-player is ''fitzquake.exe'' and ''ID1\pak0.pak'':
# Install C:\quake\ID1\pak0.pak (and the non-shareware edition's ''pak1.pak'', if you have it). See info above if you want to get ''pak0.pak'' from the shareware. If you just run the official installer, it will install this file along with several others you don't really need.
# Unzip the [[Fitzquake]] distribution into C:\quake.
# Run C:\quake\fitzquake.exe.

If this runs OK, you will probably want to continue using it for single-player games, although you can try experimenting with other [[engines]], which have different feature sets.

If you want to play multiplayer games, you'll want [http://ezquake.sourceforge.net/ ezQuake], a state-of-the-art QuakeWorld engine.

===DOS===
''TBD''
===Mac OS X===
''TBD''
===Mac OS Classic===
''TBD''
===Unix===
''TBD''
* [http://www.mobygames.com/game/linux/quake-the-offering Quake: The Offering for Linux - MobyGames:]
* [http://www.quakeforge.net/ The QuakeForge Project]
===Misc links===
* [http://www.kristianduske.com/fitzquake/ SDL port of Fitzquake] mainly for Linux and Mac OS X
* [http://rome.ro/2006/10/quake-map-sources-released.html planet rome.ro: Quake Map Sources Released!]</text>
      <sha1>85079mz9x1uxhusbqsurwgmf6v0r58k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3000</id>
      <parentid>2999</parentid>
      <timestamp>2013-08-09T22:04:00Z</timestamp>
      <contributor>
        <ip>198.27.82.165</ip>
      </contributor>
      <comment>Hey, I really like your website if I am truthful. Wherever did you receive it built?</comment>
      <text xml:space="preserve" bytes="84">Hey, I really like your website if I am truthful. Wherever did you receive it built?</text>
      <sha1>iz2z7xkuee6tiayf76zbij7zl7ob865</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3001</id>
      <parentid>3000</parentid>
      <timestamp>2013-08-11T18:10:36Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Undo revision 3000 by [[Special:Contributions/198.27.82.165|198.27.82.165]] ([[User talk:198.27.82.165|talk]])</comment>
      <text xml:space="preserve" bytes="7674">==Overview==
This is a quick-start guide to getting, installing, and actually running the game.

===Components===
Quake consists of three parts:
* A platform-specific Quake [[engines|engine]], which is the program you run to actually play Quake.
* The platform-independent game data archives ''[[pak0.pak]]'' (required) and ''[[pak1.pak]]'' (usually optional).
* The soundtrack, which normally exists as audio tracks on the original Quake CD-ROM, which you can leave in your drive while you play. The soundtrack and CD-ROM are optional.

Therefore, a minimal installation of Quake consists of just ''pak0.pak'' and a single Quake engine.

There are many engines to choose from, each with different features and platform (hardware + operating system) requirements. The [[engines]] article discusses the options in more detail.

==Getting Quake==
You have several options for getting Quake.

The '''only''' legal way to get the required file ''pak0.pak'' is to get one of the official distributions. This will also give you at least one basic engine, and maybe also the soundtrack, and maybe also ''pak1.pak''. To get an official distribution, you can either buy a CD-ROM or commercial downloadable edition, or you can freely download the shareware edition. Either way, you can freely download and use alternative engines if you don't like or can't use whatever engines you get with the official distribution.

===Buy Quake on CD-ROM===
One way to get an official distribution of Quake is to buy it on CD-ROM, which will include at least one basic but well-tested engine, the soundtrack, and ''pak0.pak'' (and ''pak1.pak'', as long as you don't get a shareware CD).

Apart from rummaging your favourite market of used goods (flea market, friends, random online communities) you can get Quake CDs from these vendors:

*[http://www.amazon.com/QUAKE-Windows/dp/B000H1AGA6 Amazon.com: QUAKE: Windows: Video Games]
*[http://www.amazon.co.uk/Ultimate-Quake-II-III-PC/dp/B00005RW1V Ultimate Quake: Includes I,II and III (PC CD): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Jewel-Case/dp/B00004YNT4 Replay Quake (Jewel Case): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Box/dp/B00004YNT5 Replay Quake (Box): Amazon.co.uk: PC &amp; Video Games]
*[http://video-games.shop.ebay.com/items/_W0QQPlatformZPCQQ_dmptZVideoQ5fGamesQ5fGamesQQ_sopZ12?_nkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64+-saturn&amp;_sacat=1249&amp;_trksid=m270&amp;_odkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64 Ebay] (don't forget to check your local branch)
*[http://www.idsoftware.com/games/quake/quake/index.php?game_section=buy id Software]
*''Quake: The Offering'' is the retail edition for Linux, released in 1998.

Be careful that you don't accidentally buy a shareware disc. The shareware edition is useful, but there's no need to pay for it; it's free to download. However, the soundtrack is on the shareware disc and isn't available elsewhere (legally), so if you did happen to get the wrong disc, at least you'd have gotten something for your money.

===Buy the Steam edition of Quake===
Since August 2007, an official release of the full/registered Quake has been available on Steam (steampowered.com). Steam is a vendor which allows you to pay to download a Win2K/XP/Vista edition of Quake which includes four official engines: WinQuake, QuakeWorld, GLQuake, and GLQuakeWorld. This edition does ''not'' include the soundtrack.
* [http://store.steampowered.com/app/2310/ Quake on Steam]

===Download the shareware edition of Quake===
Another way to get an official release of Quake is to download the shareware edition. The only restriction in this edition, besides no soundtrack, is you won't have access to the Episodes 2-4 portions of the original single-player game. Those require ''pak1.pak'', which you only get with the 'registered'/commercial edition.

* [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip quake106.zip] - Quake 1.06 shareware edition; contains ''resource.1'', which is an lh5 LZH-encoded archive (LHA) containing the actual game files, including ''ID1\pak0.pak''. The zip contains an installer program (''deice.exe'') for DOS/Win32 which unpacks the entire archive, and a script (''install.bat'') which runs the installer and then tries to launch the DOS Quake engine. If you can't/don't want to run these, use an lh5-compatible LHA extractor like [http://www2.nsknet.or.jp/~micco/english/lhmelt_e.htm LHmelting] to extract what you need from ''resource.1''. Some multi-format archivers/extractors may also work.

==Installing Quake==
All Quake and QuakeWorld installations work on the same principles. You just need to have a folder hierarchy like this:

* Quake root folder (e.g. ''C:\quake'')
** ''ID1'' subfolder (e.g. ''C:\quake\ID1'').

In the Quake root folder is where the [[engines]] live. It doesn't matter the folder's name is or where it exists on your file system. Engines can generally coexist in it.

In the ''ID1'' subfolder of the Quake root folder, you must have the file ''pak0.pak'' from the official Quake distribution (shareware or commercial, doesn't matter). Some engines (notably, the official GLQuake) may require the presence of ''pak1.pak'' from the non-shareware Quake distribution as well, but generally this file is optional. Case usually doesn't matter on Windows or DOS folder names, but on non-Windows systems, some engines expect the ''id1'' to be lowercase.

So, to summarize, '''installing Quake boils down to just getting an engine executable into a folder, and ''pak0.pak'' into an ''ID1'' subfolder.''' That's it.

===Windows===
{{todo|todo=move this to a separate article.}}

Original Quake CD-ROMs and the shareware version only come with a DOS/Win95/98/Me-only game engine which has no hardware-accelerated graphics rendering. Unless you have extremely old hardware (like from 1996 or earlier) requiring this engine, ignore it and start with [[Fitzquake]], which is a basic but widely compatible [[NetQuake]] engine with fast, high-quality OpenGL graphics.

You can install Quake wherever you want on your hard drive. C:\QUAKE_SW is the default suggested by the official installer (''install.bat'' and ''deice.exe''), but in examples here we'll use C:\quake.

All you need to play single-player is ''fitzquake.exe'' and ''ID1\pak0.pak'':
# Install C:\quake\ID1\pak0.pak (and the non-shareware edition's ''pak1.pak'', if you have it). See info above if you want to get ''pak0.pak'' from the shareware. If you just run the official installer, it will install this file along with several others you don't really need.
# Unzip the [[Fitzquake]] distribution into C:\quake.
# Run C:\quake\fitzquake.exe.

If this runs OK, you will probably want to continue using it for single-player games, although you can try experimenting with other [[engines]], which have different feature sets.

If you want to play multiplayer games, you'll want [http://ezquake.sourceforge.net/ ezQuake], a state-of-the-art QuakeWorld engine.

===DOS===
''TBD''
===Mac OS X===
''TBD''
===Mac OS Classic===
''TBD''
===Unix===
''TBD''
* [http://www.mobygames.com/game/linux/quake-the-offering Quake: The Offering for Linux - MobyGames:]
* [http://www.quakeforge.net/ The QuakeForge Project]
===Misc links===
* [http://www.kristianduske.com/fitzquake/ SDL port of Fitzquake] mainly for Linux and Mac OS X
* [http://rome.ro/2006/10/quake-map-sources-released.html planet rome.ro: Quake Map Sources Released!]</text>
      <sha1>85079mz9x1uxhusbqsurwgmf6v0r58k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3242</id>
      <parentid>3001</parentid>
      <timestamp>2014-06-22T00:41:16Z</timestamp>
      <contributor>
        <ip>192.168.4.107</ip>
      </contributor>
      <comment>/* Unix */ archlinux</comment>
      <text xml:space="preserve" bytes="7715">==Overview==
This is a quick-start guide to getting, installing, and actually running the game.

===Components===
Quake consists of three parts:
* A platform-specific Quake [[engines|engine]], which is the program you run to actually play Quake.
* The platform-independent game data archives ''[[pak0.pak]]'' (required) and ''[[pak1.pak]]'' (usually optional).
* The soundtrack, which normally exists as audio tracks on the original Quake CD-ROM, which you can leave in your drive while you play. The soundtrack and CD-ROM are optional.

Therefore, a minimal installation of Quake consists of just ''pak0.pak'' and a single Quake engine.

There are many engines to choose from, each with different features and platform (hardware + operating system) requirements. The [[engines]] article discusses the options in more detail.

==Getting Quake==
You have several options for getting Quake.

The '''only''' legal way to get the required file ''pak0.pak'' is to get one of the official distributions. This will also give you at least one basic engine, and maybe also the soundtrack, and maybe also ''pak1.pak''. To get an official distribution, you can either buy a CD-ROM or commercial downloadable edition, or you can freely download the shareware edition. Either way, you can freely download and use alternative engines if you don't like or can't use whatever engines you get with the official distribution.

===Buy Quake on CD-ROM===
One way to get an official distribution of Quake is to buy it on CD-ROM, which will include at least one basic but well-tested engine, the soundtrack, and ''pak0.pak'' (and ''pak1.pak'', as long as you don't get a shareware CD).

Apart from rummaging your favourite market of used goods (flea market, friends, random online communities) you can get Quake CDs from these vendors:

*[http://www.amazon.com/QUAKE-Windows/dp/B000H1AGA6 Amazon.com: QUAKE: Windows: Video Games]
*[http://www.amazon.co.uk/Ultimate-Quake-II-III-PC/dp/B00005RW1V Ultimate Quake: Includes I,II and III (PC CD): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Jewel-Case/dp/B00004YNT4 Replay Quake (Jewel Case): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Box/dp/B00004YNT5 Replay Quake (Box): Amazon.co.uk: PC &amp; Video Games]
*[http://video-games.shop.ebay.com/items/_W0QQPlatformZPCQQ_dmptZVideoQ5fGamesQ5fGamesQQ_sopZ12?_nkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64+-saturn&amp;_sacat=1249&amp;_trksid=m270&amp;_odkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64 Ebay] (don't forget to check your local branch)
*[http://www.idsoftware.com/games/quake/quake/index.php?game_section=buy id Software]
*''Quake: The Offering'' is the retail edition for Linux, released in 1998.

Be careful that you don't accidentally buy a shareware disc. The shareware edition is useful, but there's no need to pay for it; it's free to download. However, the soundtrack is on the shareware disc and isn't available elsewhere (legally), so if you did happen to get the wrong disc, at least you'd have gotten something for your money.

===Buy the Steam edition of Quake===
Since August 2007, an official release of the full/registered Quake has been available on Steam (steampowered.com). Steam is a vendor which allows you to pay to download a Win2K/XP/Vista edition of Quake which includes four official engines: WinQuake, QuakeWorld, GLQuake, and GLQuakeWorld. This edition does ''not'' include the soundtrack.
* [http://store.steampowered.com/app/2310/ Quake on Steam]

===Download the shareware edition of Quake===
Another way to get an official release of Quake is to download the shareware edition. The only restriction in this edition, besides no soundtrack, is you won't have access to the Episodes 2-4 portions of the original single-player game. Those require ''pak1.pak'', which you only get with the 'registered'/commercial edition.

* [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip quake106.zip] - Quake 1.06 shareware edition; contains ''resource.1'', which is an lh5 LZH-encoded archive (LHA) containing the actual game files, including ''ID1\pak0.pak''. The zip contains an installer program (''deice.exe'') for DOS/Win32 which unpacks the entire archive, and a script (''install.bat'') which runs the installer and then tries to launch the DOS Quake engine. If you can't/don't want to run these, use an lh5-compatible LHA extractor like [http://www2.nsknet.or.jp/~micco/english/lhmelt_e.htm LHmelting] to extract what you need from ''resource.1''. Some multi-format archivers/extractors may also work.

==Installing Quake==
All Quake and QuakeWorld installations work on the same principles. You just need to have a folder hierarchy like this:

* Quake root folder (e.g. ''C:\quake'')
** ''ID1'' subfolder (e.g. ''C:\quake\ID1'').

In the Quake root folder is where the [[engines]] live. It doesn't matter the folder's name is or where it exists on your file system. Engines can generally coexist in it.

In the ''ID1'' subfolder of the Quake root folder, you must have the file ''pak0.pak'' from the official Quake distribution (shareware or commercial, doesn't matter). Some engines (notably, the official GLQuake) may require the presence of ''pak1.pak'' from the non-shareware Quake distribution as well, but generally this file is optional. Case usually doesn't matter on Windows or DOS folder names, but on non-Windows systems, some engines expect the ''id1'' to be lowercase.

So, to summarize, '''installing Quake boils down to just getting an engine executable into a folder, and ''pak0.pak'' into an ''ID1'' subfolder.''' That's it.

===Windows===
{{todo|todo=move this to a separate article.}}

Original Quake CD-ROMs and the shareware version only come with a DOS/Win95/98/Me-only game engine which has no hardware-accelerated graphics rendering. Unless you have extremely old hardware (like from 1996 or earlier) requiring this engine, ignore it and start with [[Fitzquake]], which is a basic but widely compatible [[NetQuake]] engine with fast, high-quality OpenGL graphics.

You can install Quake wherever you want on your hard drive. C:\QUAKE_SW is the default suggested by the official installer (''install.bat'' and ''deice.exe''), but in examples here we'll use C:\quake.

All you need to play single-player is ''fitzquake.exe'' and ''ID1\pak0.pak'':
# Install C:\quake\ID1\pak0.pak (and the non-shareware edition's ''pak1.pak'', if you have it). See info above if you want to get ''pak0.pak'' from the shareware. If you just run the official installer, it will install this file along with several others you don't really need.
# Unzip the [[Fitzquake]] distribution into C:\quake.
# Run C:\quake\fitzquake.exe.

If this runs OK, you will probably want to continue using it for single-player games, although you can try experimenting with other [[engines]], which have different feature sets.

If you want to play multiplayer games, you'll want [http://ezquake.sourceforge.net/ ezQuake], a state-of-the-art QuakeWorld engine.

===DOS===
''TBD''
===Mac OS X===
''TBD''
===Mac OS Classic===
''TBD''
===Unix===
On Archlinux, ezquake is available in the AUR.

* [http://www.mobygames.com/game/linux/quake-the-offering Quake: The Offering for Linux - MobyGames:]
* [http://www.quakeforge.net/ The QuakeForge Project]

===Misc links===
* [http://www.kristianduske.com/fitzquake/ SDL port of Fitzquake] mainly for Linux and Mac OS X
* [http://rome.ro/2006/10/quake-map-sources-released.html planet rome.ro: Quake Map Sources Released!]</text>
      <sha1>5stzejvqiz6jaao9qw6izlfxr33kxr4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3243</id>
      <parentid>3242</parentid>
      <timestamp>2014-06-26T20:48:28Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>not just ezquake, many more...</comment>
      <text xml:space="preserve" bytes="7884">==Overview==
This is a quick-start guide to getting, installing, and actually running the game.

===Components===
Quake consists of three parts:
* A platform-specific Quake [[engines|engine]], which is the program you run to actually play Quake.
* The platform-independent game data archives ''[[pak0.pak]]'' (required) and ''[[pak1.pak]]'' (usually optional).
* The soundtrack, which normally exists as audio tracks on the original Quake CD-ROM, which you can leave in your drive while you play. The soundtrack and CD-ROM are optional.

Therefore, a minimal installation of Quake consists of just ''pak0.pak'' and a single Quake engine.

There are many engines to choose from, each with different features and platform (hardware + operating system) requirements. The [[engines]] article discusses the options in more detail.

==Getting Quake==
You have several options for getting Quake.

The '''only''' legal way to get the required file ''pak0.pak'' is to get one of the official distributions. This will also give you at least one basic engine, and maybe also the soundtrack, and maybe also ''pak1.pak''. To get an official distribution, you can either buy a CD-ROM or commercial downloadable edition, or you can freely download the shareware edition. Either way, you can freely download and use alternative engines if you don't like or can't use whatever engines you get with the official distribution.

===Buy Quake on CD-ROM===
One way to get an official distribution of Quake is to buy it on CD-ROM, which will include at least one basic but well-tested engine, the soundtrack, and ''pak0.pak'' (and ''pak1.pak'', as long as you don't get a shareware CD).

Apart from rummaging your favourite market of used goods (flea market, friends, random online communities) you can get Quake CDs from these vendors:

*[http://www.amazon.com/QUAKE-Windows/dp/B000H1AGA6 Amazon.com: QUAKE: Windows: Video Games]
*[http://www.amazon.co.uk/Ultimate-Quake-II-III-PC/dp/B00005RW1V Ultimate Quake: Includes I,II and III (PC CD): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Jewel-Case/dp/B00004YNT4 Replay Quake (Jewel Case): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Box/dp/B00004YNT5 Replay Quake (Box): Amazon.co.uk: PC &amp; Video Games]
*[http://video-games.shop.ebay.com/items/_W0QQPlatformZPCQQ_dmptZVideoQ5fGamesQ5fGamesQQ_sopZ12?_nkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64+-saturn&amp;_sacat=1249&amp;_trksid=m270&amp;_odkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64 Ebay] (don't forget to check your local branch)
*[http://www.idsoftware.com/games/quake/quake/index.php?game_section=buy id Software]
*''Quake: The Offering'' is the retail edition for Linux, released in 1998.

Be careful that you don't accidentally buy a shareware disc. The shareware edition is useful, but there's no need to pay for it; it's free to download. However, the soundtrack is on the shareware disc and isn't available elsewhere (legally), so if you did happen to get the wrong disc, at least you'd have gotten something for your money.

===Buy the Steam edition of Quake===
Since August 2007, an official release of the full/registered Quake has been available on Steam (steampowered.com). Steam is a vendor which allows you to pay to download a Win2K/XP/Vista edition of Quake which includes four official engines: WinQuake, QuakeWorld, GLQuake, and GLQuakeWorld. This edition does ''not'' include the soundtrack.
* [http://store.steampowered.com/app/2310/ Quake on Steam]

===Download the shareware edition of Quake===
Another way to get an official release of Quake is to download the shareware edition. The only restriction in this edition, besides no soundtrack, is you won't have access to the Episodes 2-4 portions of the original single-player game. Those require ''pak1.pak'', which you only get with the 'registered'/commercial edition.

* [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip quake106.zip] - Quake 1.06 shareware edition; contains ''resource.1'', which is an lh5 LZH-encoded archive (LHA) containing the actual game files, including ''ID1\pak0.pak''. The zip contains an installer program (''deice.exe'') for DOS/Win32 which unpacks the entire archive, and a script (''install.bat'') which runs the installer and then tries to launch the DOS Quake engine. If you can't/don't want to run these, use an lh5-compatible LHA extractor like [http://www2.nsknet.or.jp/~micco/english/lhmelt_e.htm LHmelting] to extract what you need from ''resource.1''. Some multi-format archivers/extractors may also work.

==Installing Quake==
All Quake and QuakeWorld installations work on the same principles. You just need to have a folder hierarchy like this:

* Quake root folder (e.g. ''C:\quake'')
** ''ID1'' subfolder (e.g. ''C:\quake\ID1'').

In the Quake root folder is where the [[engines]] live. It doesn't matter the folder's name is or where it exists on your file system. Engines can generally coexist in it.

In the ''ID1'' subfolder of the Quake root folder, you must have the file ''pak0.pak'' from the official Quake distribution (shareware or commercial, doesn't matter). Some engines (notably, the official GLQuake) may require the presence of ''pak1.pak'' from the non-shareware Quake distribution as well, but generally this file is optional. Case usually doesn't matter on Windows or DOS folder names, but on non-Windows systems, some engines expect the ''id1'' to be lowercase.

So, to summarize, '''installing Quake boils down to just getting an engine executable into a folder, and ''pak0.pak'' into an ''ID1'' subfolder.''' That's it.

===Windows===
{{todo|todo=move this to a separate article.}}

Original Quake CD-ROMs and the shareware version only come with a DOS/Win95/98/Me-only game engine which has no hardware-accelerated graphics rendering. Unless you have extremely old hardware (like from 1996 or earlier) requiring this engine, ignore it and start with [[Fitzquake]], which is a basic but widely compatible [[NetQuake]] engine with fast, high-quality OpenGL graphics.

You can install Quake wherever you want on your hard drive. C:\QUAKE_SW is the default suggested by the official installer (''install.bat'' and ''deice.exe''), but in examples here we'll use C:\quake.

All you need to play single-player is ''fitzquake.exe'' and ''ID1\pak0.pak'':
# Install C:\quake\ID1\pak0.pak (and the non-shareware edition's ''pak1.pak'', if you have it). See info above if you want to get ''pak0.pak'' from the shareware. If you just run the official installer, it will install this file along with several others you don't really need.
# Unzip the [[Fitzquake]] distribution into C:\quake.
# Run C:\quake\fitzquake.exe.

If this runs OK, you will probably want to continue using it for single-player games, although you can try experimenting with other [[engines]], which have different feature sets.

If you want to play multiplayer games, you'll want [http://ezquake.sourceforge.net/ ezQuake], a state-of-the-art QuakeWorld engine.

===DOS===
''TBD''
===Mac OS X===
''TBD''
===Mac OS Classic===
''TBD''
===Unix===
On Archlinux, several Quake engines are available in the [https://aur.archlinux.org/packages/ AUR]. At the time of writing this included [DarkPlaces], [ezQuake], [Fitzquake], [FuhQuake], [QuakeSpasm] and [TyrQuake].

* [http://www.mobygames.com/game/linux/quake-the-offering Quake: The Offering for Linux - MobyGames:]
* [http://www.quakeforge.net/ The QuakeForge Project]

===Misc links===
* [http://www.kristianduske.com/fitzquake/ SDL port of Fitzquake] mainly for Linux and Mac OS X
* [http://rome.ro/2006/10/quake-map-sources-released.html planet rome.ro: Quake Map Sources Released!]</text>
      <sha1>0onk3qb052c6g35vgjxu20yoi14fofm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3244</id>
      <parentid>3243</parentid>
      <timestamp>2014-06-26T20:49:11Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>fixed links</comment>
      <text xml:space="preserve" bytes="7896">==Overview==
This is a quick-start guide to getting, installing, and actually running the game.

===Components===
Quake consists of three parts:
* A platform-specific Quake [[engines|engine]], which is the program you run to actually play Quake.
* The platform-independent game data archives ''[[pak0.pak]]'' (required) and ''[[pak1.pak]]'' (usually optional).
* The soundtrack, which normally exists as audio tracks on the original Quake CD-ROM, which you can leave in your drive while you play. The soundtrack and CD-ROM are optional.

Therefore, a minimal installation of Quake consists of just ''pak0.pak'' and a single Quake engine.

There are many engines to choose from, each with different features and platform (hardware + operating system) requirements. The [[engines]] article discusses the options in more detail.

==Getting Quake==
You have several options for getting Quake.

The '''only''' legal way to get the required file ''pak0.pak'' is to get one of the official distributions. This will also give you at least one basic engine, and maybe also the soundtrack, and maybe also ''pak1.pak''. To get an official distribution, you can either buy a CD-ROM or commercial downloadable edition, or you can freely download the shareware edition. Either way, you can freely download and use alternative engines if you don't like or can't use whatever engines you get with the official distribution.

===Buy Quake on CD-ROM===
One way to get an official distribution of Quake is to buy it on CD-ROM, which will include at least one basic but well-tested engine, the soundtrack, and ''pak0.pak'' (and ''pak1.pak'', as long as you don't get a shareware CD).

Apart from rummaging your favourite market of used goods (flea market, friends, random online communities) you can get Quake CDs from these vendors:

*[http://www.amazon.com/QUAKE-Windows/dp/B000H1AGA6 Amazon.com: QUAKE: Windows: Video Games]
*[http://www.amazon.co.uk/Ultimate-Quake-II-III-PC/dp/B00005RW1V Ultimate Quake: Includes I,II and III (PC CD): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Jewel-Case/dp/B00004YNT4 Replay Quake (Jewel Case): Amazon.co.uk: PC &amp; Video Games]
*[http://www.amazon.co.uk/Atari-Replay-Quake-Box/dp/B00004YNT5 Replay Quake (Box): Amazon.co.uk: PC &amp; Video Games]
*[http://video-games.shop.ebay.com/items/_W0QQPlatformZPCQQ_dmptZVideoQ5fGamesQ5fGamesQQ_sopZ12?_nkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64+-saturn&amp;_sacat=1249&amp;_trksid=m270&amp;_odkw=quake+-%22quake+4%22+-%22quake+IV%22+-%22quake+3%22+-%22quake+2%22+-%22quake+II%22+-%22quake+III%22+-%22quake+wars%22+-etqw+-territory+-arena+-64 Ebay] (don't forget to check your local branch)
*[http://www.idsoftware.com/games/quake/quake/index.php?game_section=buy id Software]
*''Quake: The Offering'' is the retail edition for Linux, released in 1998.

Be careful that you don't accidentally buy a shareware disc. The shareware edition is useful, but there's no need to pay for it; it's free to download. However, the soundtrack is on the shareware disc and isn't available elsewhere (legally), so if you did happen to get the wrong disc, at least you'd have gotten something for your money.

===Buy the Steam edition of Quake===
Since August 2007, an official release of the full/registered Quake has been available on Steam (steampowered.com). Steam is a vendor which allows you to pay to download a Win2K/XP/Vista edition of Quake which includes four official engines: WinQuake, QuakeWorld, GLQuake, and GLQuakeWorld. This edition does ''not'' include the soundtrack.
* [http://store.steampowered.com/app/2310/ Quake on Steam]

===Download the shareware edition of Quake===
Another way to get an official release of Quake is to download the shareware edition. The only restriction in this edition, besides no soundtrack, is you won't have access to the Episodes 2-4 portions of the original single-player game. Those require ''pak1.pak'', which you only get with the 'registered'/commercial edition.

* [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip quake106.zip] - Quake 1.06 shareware edition; contains ''resource.1'', which is an lh5 LZH-encoded archive (LHA) containing the actual game files, including ''ID1\pak0.pak''. The zip contains an installer program (''deice.exe'') for DOS/Win32 which unpacks the entire archive, and a script (''install.bat'') which runs the installer and then tries to launch the DOS Quake engine. If you can't/don't want to run these, use an lh5-compatible LHA extractor like [http://www2.nsknet.or.jp/~micco/english/lhmelt_e.htm LHmelting] to extract what you need from ''resource.1''. Some multi-format archivers/extractors may also work.

==Installing Quake==
All Quake and QuakeWorld installations work on the same principles. You just need to have a folder hierarchy like this:

* Quake root folder (e.g. ''C:\quake'')
** ''ID1'' subfolder (e.g. ''C:\quake\ID1'').

In the Quake root folder is where the [[engines]] live. It doesn't matter the folder's name is or where it exists on your file system. Engines can generally coexist in it.

In the ''ID1'' subfolder of the Quake root folder, you must have the file ''pak0.pak'' from the official Quake distribution (shareware or commercial, doesn't matter). Some engines (notably, the official GLQuake) may require the presence of ''pak1.pak'' from the non-shareware Quake distribution as well, but generally this file is optional. Case usually doesn't matter on Windows or DOS folder names, but on non-Windows systems, some engines expect the ''id1'' to be lowercase.

So, to summarize, '''installing Quake boils down to just getting an engine executable into a folder, and ''pak0.pak'' into an ''ID1'' subfolder.''' That's it.

===Windows===
{{todo|todo=move this to a separate article.}}

Original Quake CD-ROMs and the shareware version only come with a DOS/Win95/98/Me-only game engine which has no hardware-accelerated graphics rendering. Unless you have extremely old hardware (like from 1996 or earlier) requiring this engine, ignore it and start with [[Fitzquake]], which is a basic but widely compatible [[NetQuake]] engine with fast, high-quality OpenGL graphics.

You can install Quake wherever you want on your hard drive. C:\QUAKE_SW is the default suggested by the official installer (''install.bat'' and ''deice.exe''), but in examples here we'll use C:\quake.

All you need to play single-player is ''fitzquake.exe'' and ''ID1\pak0.pak'':
# Install C:\quake\ID1\pak0.pak (and the non-shareware edition's ''pak1.pak'', if you have it). See info above if you want to get ''pak0.pak'' from the shareware. If you just run the official installer, it will install this file along with several others you don't really need.
# Unzip the [[Fitzquake]] distribution into C:\quake.
# Run C:\quake\fitzquake.exe.

If this runs OK, you will probably want to continue using it for single-player games, although you can try experimenting with other [[engines]], which have different feature sets.

If you want to play multiplayer games, you'll want [http://ezquake.sourceforge.net/ ezQuake], a state-of-the-art QuakeWorld engine.

===DOS===
''TBD''
===Mac OS X===
''TBD''
===Mac OS Classic===
''TBD''
===Unix===
On Archlinux, several Quake engines are available in the [https://aur.archlinux.org/packages/ AUR]. At the time of writing this included [[DarkPlaces]], [[ezQuake]], [[Fitzquake]], [[FuhQuake]], [[QuakeSpasm]] and [[TyrQuake]].

* [http://www.mobygames.com/game/linux/quake-the-offering Quake: The Offering for Linux - MobyGames:]
* [http://www.quakeforge.net/ The QuakeForge Project]

===Misc links===
* [http://www.kristianduske.com/fitzquake/ SDL port of Fitzquake] mainly for Linux and Mac OS X
* [http://rome.ro/2006/10/quake-map-sources-released.html planet rome.ro: Quake Map Sources Released!]</text>
      <sha1>bke9tua272s0igdlvrcyg876hidzjy5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Getting Started Developing</title>
    <ns>0</ns>
    <id>493</id>
    <revision>
      <id>1019</id>
      <timestamp>2009-06-05T06:50:31Z</timestamp>
      <contributor>
        <username>Idontknowthisguy</username>
        <id>17</id>
      </contributor>
      <comment>New page: Warning: this page in its current form is a straight port of the old [http://web.archive.org/web/20071008184954/wiki.quakesrc.org/index.php/Engine+Getting+Started Quake Wiki page of the sa...</comment>
      <text xml:space="preserve" bytes="3518">Warning: this page in its current form is a straight port of the old [http://web.archive.org/web/20071008184954/wiki.quakesrc.org/index.php/Engine+Getting+Started Quake Wiki page of the same name] as recommended on the front page, and it has been saved for posterity. It will be updated.

Editing your own Quake engine.

* Get [http://www.mingw.org/ MinGW] or buy [http://msdn.microsoft.com/visualc/ Visual C++]
* Dowload whatever you want engine sources
* '''Suggestion:'''
** [http://tomaz.quakesrc.org/q/files/Clean.zip CleanSrc] simple
** '''[http://www.flyingsaucepan.com/QMB QMB]''' - another good start
** '''[http://tomaz.quakesrc.org/q/ TomazQuake]''' - for TQ clones
** '''[http://wiki.quakesrc.org/index.php/DarkPlaces DarkPlaces]''' - for level wizardry coders and huge enginemods
** '''[http://wiki.quakesrc.org/index.php/FuhQuake FuhQuake]''' - great starting point for QuakeWorld
* Unzip
* Open the *.dsw file (VC++) or the makefile (gcc/httpMinGW)
* Edit some files (VC IDE, Dev-C++ ide, [http://www.scintilla.org/SciTE.html SciTE], notepad,...)
* Recompile ( VC: build button, &quot;make&quot; command for gcc/mingw)
* If the build failed...
** Use your project *.s files? -&gt; then you have to build these with gas, also included often. Or [http://www.quakesrc.org/forum/viewtopic.php?t=148&amp;highlight=assembler+quake+build remove these and subst by c]
** Its your proyect for other compiler? (darkplaces run for both, vc an gcc, but others only run for vc (badly written) )
** Ask at [http://www.quakesrc.org/ QuakeSRC]
* '''Test Engine'''

'''Understanding the code structure.''' This is a list of source files and a list of some of the things done in them.

*cl_ - client files (demo playback, input, temp entities)
** _demo - demo playback
** _input - keyboard input (higher level)
** _main - assorted client functions
** _parse - server command parsing
** _tent - temp entitie parsing and beam parsing
*sv_ - server files (physics, collision detection, movement)
** _main - general server functions
** _move - movement related functions like movestep and moretogoal
** _phys - physics functions, gravity etc
** _user - user/client related functions
*net_ - network files
** basicly convert quake client/server packets to be sent over a transport protocal like tcp or ipx, as well as network server/client stuff
*pr_ - qc virtual machine (runs progs.dat)
** _cmds - builtin commands
** _exec - qc executing
** _edict - loading progs.dat and other edict functions
*gl_ - opengl drawing files
** _rsurf - map and brush drawing
** _warp - sky, water etc drawing
** _mesh - alias model drawing
** _model - map and model loading
** _rlight - dynamic lights
** _screen - statis bar, console etc drawing
** _sprite - sprite drawing
** _vidnt - video init functions, and other startup functions
** _rmain, _rmisc - general draw stuff, cvar registering
** _draw - texture loading
** _rpart (for engines that dont use qmb partices its r_part.c or something) - Particle system, physics and drawing
*snd_ and cd_ - sound files
*and the rest are just bits and pieces, such as zone does memory managment
** menu - drawing menu and stuff
** sbar - sbar higher level drawing (calls functions from screen to do the actual drawing)
** mathlib - assorted maths functions
** wad - wad file loading
** world - map stuff
** console - console text control (calls functions from gl_screen to draw)
** cvar - cvar functions
** common - common low level functons (string compairs, file stuff)

Last edited on April 23, 2007 by DrLabman</text>
      <sha1>e9bk6ip7ydo2q7ljnxi77wf4wtr3gsq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1020</id>
      <parentid>1019</parentid>
      <timestamp>2009-06-05T07:26:15Z</timestamp>
      <contributor>
        <username>Idontknowthisguy</username>
        <id>17</id>
      </contributor>
      <comment>Modified to page to be clearer and more helpful. Updated static external references to more dynamic ones. Cleaned up formatting.</comment>
      <text xml:space="preserve" bytes="3198">== First Steps ==
To get started, download the source code for an [[Engines|engine]]. This might be available as a compressed package or in a revision control repository. Make sure your platform and operating system are supported, make sure you have the required dependencies (make, OpenGL, etc.), and then follow the provided build instructions. All of these things will vary from engine to engine. Make sure the engine compiles and runs on your machine before you begin making modifications, lest you think you made a mistake when you did not.

You can use your [http://en.wikipedia.org/wiki/List_of_text_editors#Graphical_user_interface text editor] to alter the files, but you might want an [http://en.wikipedia.org/wiki/List_of_IDEs#C.2FC.2B.2B integrated development environment]. A good place to start is the makefiles, which determine how the program is compiled. It shows how all the files in the project are related to each other. You can begin by making changes to the files, recompiling, running the program, and seeing what has changed. It might be beneficial to use a [http://en.wikipedia.org/wiki/Version_control_system revision control system] to organize and track your changes. 

== Code structure == 
This is a partial list of source files and brief explanation of what they do. They will vary from engine to engine, so don't worry if you can't find a particular file. If you are missing any files but have one with a similar name, it probably performs the same function.

*cl_ - client files (demo playback, input, temp entities)
** _demo - demo playback
** _input - keyboard input (higher level)
** _main - assorted client functions
** _parse - server command parsing
** _tent - temp entity parsing and beam parsing
*sv_ - server files (physics, collision detection, movement)
** _main - general server functions
** _move - movement related functions like movestep and moretogoal
** _phys - physics functions, gravity etc
** _user - user/client related functions
*net_ - network files
** basically convert quake client/server packets to be sent over a transport protocol like tcp or ipx, as well as network server/client stuff
*prvm_ - qc virtual machine
** _cmds - built-in commands
** _exec - qc executing
** _edict - loading progs and other edict functions
*opengl drawing files
** rsurf - map and brush drawing
** warp - sky, water etc drawing
** mesh - alias model drawing
** model - map and model loading
** rlight - dynamic lights
** screen - status bar, console etc drawing
** sprite - sprite drawing
** vidnt - video init functions, and other startup functions
** rmain, rmisc - general draw stuff, cvar registering
** draw - texture loading
** rpart particle system, physics and drawing
*snd_ and cd_ - sound files
*and the rest are just bits and pieces, such as zone does memory managment
** menu - drawing menu and stuff
** sbar - sbar higher level drawing (calls functions from screen to do the actual drawing)
** mathlib - assorted maths functions
** wad - wad file loading
** world - map stuff
** console - console text control (calls functions from gl_screen to draw)
** cvar - cvar functions
** common - common low level functions (string compairs, file stuff)</text>
      <sha1>1fzwp9l61x7bekwpq4h9d79igaeazoz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Getting Started Mapping</title>
    <ns>0</ns>
    <id>639</id>
    <revision>
      <id>1875</id>
      <timestamp>2013-03-25T01:30:50Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Created page with &quot;Scampie is writing things to put here!&quot;</comment>
      <text xml:space="preserve" bytes="38">Scampie is writing things to put here!</text>
      <sha1>fm209tfr75wss0zf3nlsxtaojobfv4b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1927</id>
      <parentid>1875</parentid>
      <timestamp>2013-03-25T03:49:04Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="3147">WIPWIPWIP


Basics of Quake Level Creation

This article is meant as a basic introduction to how a Quake level is constructed. This tutorial will use the modern Quake editing software Trenchbroom (PUT LINK HERE) in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familar. 

What's a map!?

A Quake level is created in level editing software specifically designed for the task. There are several editors availible, and all of them create .map files. These .map files are used by Quake compilers to generate the final .bsp file levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

Brush: Your basic building block!

Our basic building block for constructing a level is the brush. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are convex (http://en.wikipedia.org/wiki/Convex) polyhedra (http://en.wikipedia.org/wiki/Polyhedron). The less technical definition is that they are 3D objects made of faces which cannout 'see' each other. Most commonly, you will use cubes or cuboids (http://en.wikipedia.org/wiki/Cuboid), but know that any convex polyhedra is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathmatically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrage them to make the walls and floors of your level!

Entities: The life of the party.

So we have brushes to define our world's geometry... but it wouldn't be a Quake level without guns and monsters! And entities are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'.

For indepth information on entities, see http://quakewiki.org/wiki/Entity_guide

Putting it together.

Now that we have definitions out of the way, let's actually build a simple level.</text>
      <sha1>cht1qoiojjg1a4l5h9nm06hazvlte6y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2075</id>
      <parentid>1927</parentid>
      <timestamp>2013-03-25T15:01:53Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="4980">WIPWIPWIP


Basics of Quake Level Creation

This article is meant as a basic introduction to how a Quake level is constructed. This tutorial will use the modern Quake editing software Trenchbroom (http://kristianduske.com/trenchbroom/) in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familar. 

What's a map!?

A Quake level is created in level editing software specifically designed for the task. There are several editors availible, and all of them create .map files. These .map files are used by Quake compilers to generate the final .bsp file levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

Brush: Your basic building block!

Our basic building block for constructing a level is the brush. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are convex (http://en.wikipedia.org/wiki/Convex) polyhedra (http://en.wikipedia.org/wiki/Polyhedron). The less technical definition is that they are 3D objects made of faces which cannout 'see' each other. Most commonly, you will use cubes or cuboids (http://en.wikipedia.org/wiki/Cuboid), but know that any convex polyhedra is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathmatically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrage them to make the walls and floors of your level!

Entities: The life of the party.

So we have brushes to define our world's geometry... but it wouldn't be a Quake level without guns and monsters! And entities are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'.

Textures Wads and Compilers.

To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familar with older Doom/Doom2 level design, these are NOT the same as their WAD files, despite having the same name.

We also need compilers, which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: QBSP, which turns the .map into a .bsp. LIGHT, which calculates all the lighting information in the .bsp using our .map's instructions. And VIS, which calculates visibility in the level to optimize Quake's rendering.

Tools of the trade.

Now that we have definitions out of the way, let's get all the tools we will need.

Editing Software (Link to editing software list): This tutorial will use Trenchbroom(http://kristianduske.com/trenchbroom/)

A texture .wad (Link to texture wad page): We will use Q.wad, which are all the textures from Quake. (http://www.quaddicted.com/files/wads/q.zip)

Map compiler tools (Link to list of compilers): This tutorial will use Tyrann's TyrUtils(http://disenchant.net/utils/)

Necros's CompilingGUI (optional): This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. (http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/)

Trenchbroom you will need to install, the others are loose files which you will need to put somewhere. I personally have a folder on my harddrive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.
For indepth information on entities, see http://quakewiki.org/wiki/Entity_guide

Putting it together.

Now that we have definitions out of the way, let's actually build a simple level.</text>
      <sha1>k4xfz9d9cpoitx965xnm002sfqhwrnk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2087</id>
      <parentid>2075</parentid>
      <timestamp>2013-03-25T15:49:54Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="4985">WIPWIPWIP

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 


=What's a map!?=

A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.


==Brush: Your basic building block!==

Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [[http://en.wikipedia.org/wiki/Convex convex]][[http://en.wikipedia.org/wiki/Polyhedron polyhedrons]]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [[http://en.wikipedia.org/wiki/Cube cubes]] or [[http://en.wikipedia.org/wiki/Cuboid cuboids]], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!


==Entities: The life of the party==

So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|guns]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'.


==Textures Wads and Compilers==

To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [[http://doomwiki.org/wiki/WAD WAD files]], despite having the same name.

We also need compilers, which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: QBSP, which turns the .map into a .bsp. LIGHT, which calculates all the lighting information in the .bsp using our .map's instructions. And VIS, which calculates visibility in the level to optimize Quake's rendering.


=Tools of the trade=

Now that we have definitions out of the way, let's get all the tools we will need.

'''Editing Software''': This tutorial will use Trenchbroom. (http://kristianduske.com/trenchbroom/)

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. (http://www.quaddicted.com/files/wads/q.zip)

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. (http://disenchant.net/utils/)

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. (http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/)

Trenchbroom you will need to install, the others are loose files which you will need to put somewhere. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.


=Putting it together.=

Now that we have definitions out of the way, let's actually build a simple level.</text>
      <sha1>bvp9caqdpyvb2sxuyzc7hr3ckrwo8em</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2088</id>
      <parentid>2087</parentid>
      <timestamp>2013-03-25T16:03:01Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Putting it together. */</comment>
      <text xml:space="preserve" bytes="5050">WIPWIPWIP

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 


=What's a map!?=

A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.


==Brush: Your basic building block!==

Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [[http://en.wikipedia.org/wiki/Convex convex]][[http://en.wikipedia.org/wiki/Polyhedron polyhedrons]]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [[http://en.wikipedia.org/wiki/Cube cubes]] or [[http://en.wikipedia.org/wiki/Cuboid cuboids]], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!


==Entities: The life of the party==

So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|guns]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'.


==Textures Wads and Compilers==

To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [[http://doomwiki.org/wiki/WAD WAD files]], despite having the same name.

We also need compilers, which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: QBSP, which turns the .map into a .bsp. LIGHT, which calculates all the lighting information in the .bsp using our .map's instructions. And VIS, which calculates visibility in the level to optimize Quake's rendering.


=Tools of the trade=

Now that we have definitions out of the way, let's get all the tools we will need.

'''Editing Software''': This tutorial will use Trenchbroom. (http://kristianduske.com/trenchbroom/)

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. (http://www.quaddicted.com/files/wads/q.zip)

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. (http://disenchant.net/utils/)

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. (http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/)

Trenchbroom you will need to install, the others are loose files which you will need to put somewhere. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.


=Putting it together.=

Now that we have definitions out of the way, let's actually build a simple level.

(TODO: Actually write stuff here and take screenshots and such)</text>
      <sha1>e6acrubqrbpps19x42a6sy7cs9wzskw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2089</id>
      <parentid>2088</parentid>
      <timestamp>2013-03-25T16:04:28Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="5160">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 


=What's a map!?=

A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.


==Brush: Your basic building block!==

Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [[http://en.wikipedia.org/wiki/Convex convex]][[http://en.wikipedia.org/wiki/Polyhedron polyhedrons]]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [[http://en.wikipedia.org/wiki/Cube cubes]] or [[http://en.wikipedia.org/wiki/Cuboid cuboids]], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!


==Entities: The life of the party==

So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|guns]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'.


==Textures Wads and Compilers==

To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [[http://doomwiki.org/wiki/WAD WAD files]], despite having the same name.

We also need compilers, which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: QBSP, which turns the .map into a .bsp. LIGHT, which calculates all the lighting information in the .bsp using our .map's instructions. And VIS, which calculates visibility in the level to optimize Quake's rendering.


=Tools of the trade=

Now that we have definitions out of the way, let's get all the tools we will need.

'''Editing Software''': This tutorial will use Trenchbroom. (http://kristianduske.com/trenchbroom/)

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. (http://www.quaddicted.com/files/wads/q.zip)

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. (http://disenchant.net/utils/)

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. (http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/)

Trenchbroom you will need to install, the others are loose files which you will need to put somewhere. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.


=Putting it together.=

Now that we have definitions out of the way, let's actually build a simple level.

(TODO: Actually write stuff here and take screenshots and such)</text>
      <sha1>0fqm2v9tpp15d4jowivw5op8l96za90</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2090</id>
      <parentid>2089</parentid>
      <timestamp>2013-03-25T16:10:29Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Textures Wads and Compilers */</comment>
      <text xml:space="preserve" bytes="5211">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 


=What's a map!?=

A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.


==Brush: Your basic building block!==

Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [[http://en.wikipedia.org/wiki/Convex convex]][[http://en.wikipedia.org/wiki/Polyhedron polyhedrons]]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [[http://en.wikipedia.org/wiki/Cube cubes]] or [[http://en.wikipedia.org/wiki/Cuboid cuboids]], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!


==Entities: The life of the party==

So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|guns]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'.


==Textures Wads and Compilers==

To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [[http://doomwiki.org/wiki/WAD WAD files]], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=

Now that we have definitions out of the way, let's get all the tools we will need.

'''Editing Software''': This tutorial will use Trenchbroom. (http://kristianduske.com/trenchbroom/)

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. (http://www.quaddicted.com/files/wads/q.zip)

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. (http://disenchant.net/utils/)

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. (http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/)

Trenchbroom you will need to install, the others are loose files which you will need to put somewhere. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.


=Putting it together.=

Now that we have definitions out of the way, let's actually build a simple level.

(TODO: Actually write stuff here and take screenshots and such)</text>
      <sha1>gan33taminp93o99zrbdm7annvxn09p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2091</id>
      <parentid>2090</parentid>
      <timestamp>2013-03-25T16:11:40Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Brush: Your basic building block! */</comment>
      <text xml:space="preserve" bytes="5202">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 


=What's a map!?=

A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.


==Brush: Your basic building block!==

Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex][http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==

So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|guns]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'.


==Textures Wads and Compilers==

To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [[http://doomwiki.org/wiki/WAD WAD files]], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=

Now that we have definitions out of the way, let's get all the tools we will need.

'''Editing Software''': This tutorial will use Trenchbroom. (http://kristianduske.com/trenchbroom/)

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. (http://www.quaddicted.com/files/wads/q.zip)

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. (http://disenchant.net/utils/)

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. (http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/)

Trenchbroom you will need to install, the others are loose files which you will need to put somewhere. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.


=Putting it together.=

Now that we have definitions out of the way, let's actually build a simple level.

(TODO: Actually write stuff here and take screenshots and such)</text>
      <sha1>12380r99lpiu5mo2ds84g7x4noyjtwc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2092</id>
      <parentid>2091</parentid>
      <timestamp>2013-03-25T16:11:58Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Textures Wads and Compilers */</comment>
      <text xml:space="preserve" bytes="5200">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 


=What's a map!?=

A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.


==Brush: Your basic building block!==

Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex][http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==

So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|guns]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'.


==Textures Wads and Compilers==

To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=

Now that we have definitions out of the way, let's get all the tools we will need.

'''Editing Software''': This tutorial will use Trenchbroom. (http://kristianduske.com/trenchbroom/)

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. (http://www.quaddicted.com/files/wads/q.zip)

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. (http://disenchant.net/utils/)

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. (http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/)

Trenchbroom you will need to install, the others are loose files which you will need to put somewhere. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.


=Putting it together.=

Now that we have definitions out of the way, let's actually build a simple level.

(TODO: Actually write stuff here and take screenshots and such)</text>
      <sha1>adrksljr6fz1r4w7w8wzp5iazhl1q8y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2093</id>
      <parentid>2092</parentid>
      <timestamp>2013-03-25T16:15:26Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="5195">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 

=What's a map!?=

A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==

Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex][http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==

So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|guns]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'.

==Textures Wads and Compilers==

To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=

Now that we have definitions out of the way, let's get all the tools we will need.

'''Editing Software''': This tutorial will use Trenchbroom. (http://kristianduske.com/trenchbroom/)

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. (http://www.quaddicted.com/files/wads/q.zip)

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. (http://disenchant.net/utils/)

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. (http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/)

Trenchbroom you will need to install, the others are loose files which you will need to put somewhere. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

=Putting it together.=

Now that we have definitions out of the way, let's actually build a simple level.
(TODO: Actually write stuff here and take screenshots and such)</text>
      <sha1>euargrnbxd26ft1n4qz50djtyfl25k6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2094</id>
      <parentid>2093</parentid>
      <timestamp>2013-03-25T16:16:04Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="5189">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex][http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|guns]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'.

==Textures Wads and Compilers==
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need.

'''Editing Software''': This tutorial will use Trenchbroom. (http://kristianduske.com/trenchbroom/)

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. (http://www.quaddicted.com/files/wads/q.zip)

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. (http://disenchant.net/utils/)

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. (http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/)

Trenchbroom you will need to install, the others are loose files which you will need to put somewhere. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

=Putting it together.=
Now that we have definitions out of the way, let's actually build a simple level.
(TODO: Actually write stuff here and take screenshots and such)</text>
      <sha1>fskjdryh9dfjgsxt6hklxscvr0x87y3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2102</id>
      <parentid>2094</parentid>
      <timestamp>2013-03-25T20:56:45Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Brush: Your basic building block! */</comment>
      <text xml:space="preserve" bytes="5222">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex][http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|guns]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'.

==Textures Wads and Compilers==
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need.

'''Editing Software''': This tutorial will use Trenchbroom. (http://kristianduske.com/trenchbroom/)

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. (http://www.quaddicted.com/files/wads/q.zip)

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. (http://disenchant.net/utils/)

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. (http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/)

Trenchbroom you will need to install, the others are loose files which you will need to put somewhere. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

=Putting it together.=
Now that we have definitions out of the way, let's actually build a simple level.
(TODO: Actually write stuff here and take screenshots and such)</text>
      <sha1>d9gi7kl80r0p9hgaoic2w55ceg8xoms</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2104</id>
      <parentid>2102</parentid>
      <timestamp>2013-03-25T20:59:55Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Entities: The life of the party */</comment>
      <text xml:space="preserve" bytes="5263">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex][http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|A few Entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|guns]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'.

==Textures Wads and Compilers==
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need.

'''Editing Software''': This tutorial will use Trenchbroom. (http://kristianduske.com/trenchbroom/)

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. (http://www.quaddicted.com/files/wads/q.zip)

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. (http://disenchant.net/utils/)

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. (http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/)

Trenchbroom you will need to install, the others are loose files which you will need to put somewhere. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

=Putting it together.=
Now that we have definitions out of the way, let's actually build a simple level.
(TODO: Actually write stuff here and take screenshots and such)</text>
      <sha1>n3spp167zt5xbf6yaauea2rxx49pqnt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2105</id>
      <parentid>2104</parentid>
      <timestamp>2013-03-25T21:00:32Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Entities: The life of the party */</comment>
      <text xml:space="preserve" bytes="5263">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex][http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|guns]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'.

==Textures Wads and Compilers==
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need.

'''Editing Software''': This tutorial will use Trenchbroom. (http://kristianduske.com/trenchbroom/)

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. (http://www.quaddicted.com/files/wads/q.zip)

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. (http://disenchant.net/utils/)

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. (http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/)

Trenchbroom you will need to install, the others are loose files which you will need to put somewhere. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

=Putting it together.=
Now that we have definitions out of the way, let's actually build a simple level.
(TODO: Actually write stuff here and take screenshots and such)</text>
      <sha1>0qshqelvaetcbl4k2h4ouq36ue6088p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2106</id>
      <parentid>2105</parentid>
      <timestamp>2013-03-25T21:04:39Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Tools of the trade */</comment>
      <text xml:space="preserve" bytes="5318">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex][http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|guns]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'.

==Textures Wads and Compilers==
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

=Putting it together.=
Now that we have definitions out of the way, let's actually build a simple level.
(TODO: Actually write stuff here and take screenshots and such)</text>
      <sha1>rb1fvmawek7kje2chxms75fa4yuw0gt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2108</id>
      <parentid>2106</parentid>
      <timestamp>2013-03-25T21:13:01Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Textures Wads and Compilers */</comment>
      <text xml:space="preserve" bytes="5360">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex][http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|guns]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'.

==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

=Putting it together.=
Now that we have definitions out of the way, let's actually build a simple level.
(TODO: Actually write stuff here and take screenshots and such)</text>
      <sha1>obejtoe441tdbtimwz6raj2hdwekc7a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2109</id>
      <parentid>2108</parentid>
      <timestamp>2013-03-25T21:13:38Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Entities: The life of the party */</comment>
      <text xml:space="preserve" bytes="5363">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex][http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'.

==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

=Putting it together.=
Now that we have definitions out of the way, let's actually build a simple level.
(TODO: Actually write stuff here and take screenshots and such)</text>
      <sha1>dnq8rejqekagrirvqnc2j3siiepafzf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2110</id>
      <parentid>2109</parentid>
      <timestamp>2013-03-25T21:15:53Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Entities: The life of the party */</comment>
      <text xml:space="preserve" bytes="5491">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex][http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.

==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

=Putting it together.=
Now that we have definitions out of the way, let's actually build a simple level.
(TODO: Actually write stuff here and take screenshots and such)</text>
      <sha1>0npb0rsh0n4wnn5n7e6scitvxvk44gf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2113</id>
      <parentid>2110</parentid>
      <timestamp>2013-03-25T22:06:51Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Putting it together. */</comment>
      <text xml:space="preserve" bytes="7907">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex][http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.

==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.

==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] images, or any of the entity models, in the lower right section of your Trenchbroom. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to where you saved Q.wad you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.

==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to apply it. I'm using ''city4_2''.

In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.

==Making some room==</text>
      <sha1>6ufupeqnajl803b9nkx2nax5b4ho1jh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2114</id>
      <parentid>2113</parentid>
      <timestamp>2013-03-25T22:07:32Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Entities: The life of the party */</comment>
      <text xml:space="preserve" bytes="7912">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex][http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.

==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.

==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] images, or any of the entity models, in the lower right section of your Trenchbroom. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to where you saved Q.wad you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.

==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to apply it. I'm using ''city4_2''.

In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.

==Making some room==</text>
      <sha1>kt6b9tdmx32xa79inbhhaca7r1k096o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2115</id>
      <parentid>2114</parentid>
      <timestamp>2013-03-25T22:08:52Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Tools of the trade */</comment>
      <text xml:space="preserve" bytes="7911">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex][http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.

==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.

==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] images, or any of the entity models, in the lower right section of your Trenchbroom. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to where you saved Q.wad you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.

==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to apply it. I'm using ''city4_2''.

In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.

==Making some room==</text>
      <sha1>80yid7rcnvpcxm2l73at9vqvp47yyxh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2119</id>
      <parentid>2115</parentid>
      <timestamp>2013-03-25T22:58:24Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Putting it together */</comment>
      <text xml:space="preserve" bytes="9858">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex][http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.

==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.

==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] images, or any of the entity models, in the lower right section of your Trenchbroom. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.

==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.

==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall.

==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Also, give it a nice wall texture, I am using ''city2_8''.

==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]</text>
      <sha1>f39i1waonc7kv875t4rqgsi7cqk8ikm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2120</id>
      <parentid>2119</parentid>
      <timestamp>2013-03-25T23:00:43Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* A new brush */</comment>
      <text xml:space="preserve" bytes="9868">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex][http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.

==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.

==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] images, or any of the entity models, in the lower right section of your Trenchbroom. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.

==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.

==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall.

==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Also, give it a nice wall texture, I am using ''city2_8''.
{{break}}

==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]</text>
      <sha1>cvi94vw6yrf73me8cqsmw07rj2lmhe9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2121</id>
      <parentid>2120</parentid>
      <timestamp>2013-03-25T23:02:21Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Putting it together */</comment>
      <text xml:space="preserve" bytes="9865">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex][http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.

==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] images, or any of the entity models, in the lower right section of your Trenchbroom. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]</text>
      <sha1>3rwt64viu6jcomi2b7me3dqbosuqxbq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2122</id>
      <parentid>2121</parentid>
      <timestamp>2013-03-25T23:04:24Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* What's a map!? */</comment>
      <text xml:space="preserve" bytes="9869">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex][http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] images, or any of the entity models, in the lower right section of your Trenchbroom. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]</text>
      <sha1>sekv8dcqyaenydzhzqx8lg26mt2sxnx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2123</id>
      <parentid>2122</parentid>
      <timestamp>2013-03-25T23:06:58Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>/* Brush: Your basic building block! */ added a very important space!!!!!!!1</comment>
      <text xml:space="preserve" bytes="9868">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] images, or any of the entity models, in the lower right section of your Trenchbroom. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]</text>
      <sha1>9beplhxz5imynb8rczzjii29o1zioko</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2124</id>
      <parentid>2123</parentid>
      <timestamp>2013-03-25T23:08:11Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="9895">THIS IS VERY MUCH A WORK IN PROGRESS, please don't fuck with it --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] images, or any of the entity models, in the lower right section of your Trenchbroom. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]</text>
      <sha1>h7cqw0kue7tcl9psopvlpuiquaefe8b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2125</id>
      <parentid>2124</parentid>
      <timestamp>2013-03-25T23:08:12Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Reverted edits by [[Special:Contributions/Scampie|Scampie]] ([[User talk:Scampie|talk]]) to last revision by [[User:Spirit|Spirit]]</comment>
      <text xml:space="preserve" bytes="9868">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] images, or any of the entity models, in the lower right section of your Trenchbroom. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]</text>
      <sha1>9beplhxz5imynb8rczzjii29o1zioko</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2139</id>
      <parentid>2125</parentid>
      <timestamp>2013-03-26T00:42:50Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Putting it together */</comment>
      <text xml:space="preserve" bytes="13037">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] images, or any of the entity models, in the lower right section of your Trenchbroom. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''.



==Add some functionality==
[[File:map_tutorial_6.png|thumb]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb]]
Technically we could compile and try our map now, but let's add some light before we do. Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key 'light' and set it's value to '200'. 



==Time to compile!==
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created.</text>
      <sha1>i4q2sh0ttz7jbxc058lxeukvy9hsku7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2140</id>
      <parentid>2139</parentid>
      <timestamp>2013-03-26T00:45:40Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Putting it together */</comment>
      <text xml:space="preserve" bytes="13035">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] images, or any of the entity models, in the lower right section of your Trenchbroom. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''.



==Add some functionality==
[[File:map_tutorial_6.png|thumb]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb]]
Technically we could compile and try our map now, but let's add some light before we do. Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key 'light' and set it's value to '200'. 



=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created.</text>
      <sha1>1gtina4aibc91y5gbtuoxs3xcufsdc8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2142</id>
      <parentid>2140</parentid>
      <timestamp>2013-03-26T01:17:56Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Putting it together */</comment>
      <text xml:space="preserve" bytes="13961">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed. This tutorial will use the modern Quake editing software [[Trenchbroom]] in it's examples, but everything covered will apply to all editors for Quake. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, all of this will be familiar. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] images, or any of the entity models, in the lower right section of your Trenchbroom. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''.



==Add some functionality==
[[File:map_tutorial_6.png|thumb]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key 'light' and set it's value to '200'.

==Triggers!==
[[File:map_tutorial_8.png|thumb]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.

=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created.</text>
      <sha1>7hjxyeo78knonfzgk0g79qzwppweciu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2143</id>
      <parentid>2142</parentid>
      <timestamp>2013-03-26T01:24:24Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="13949">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar and you can skip to the tutorial, which covers how to work in Trenchbroom. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] images, or any of the entity models, in the lower right section of your Trenchbroom. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''.



==Add some functionality==
[[File:map_tutorial_6.png|thumb]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key 'light' and set it's value to '200'.

==Triggers!==
[[File:map_tutorial_8.png|thumb]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.

=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created.</text>
      <sha1>614zavfy1ckgh3ifhghpm62sbioxy1t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2144</id>
      <parentid>2143</parentid>
      <timestamp>2013-03-26T01:26:09Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="13902">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] images, or any of the entity models, in the lower right section of your Trenchbroom. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''.



==Add some functionality==
[[File:map_tutorial_6.png|thumb]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key 'light' and set it's value to '200'.

==Triggers!==
[[File:map_tutorial_8.png|thumb]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.

=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created.</text>
      <sha1>5567p45kred5km09je6ty0koei7qxef</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2151</id>
      <parentid>2144</parentid>
      <timestamp>2013-03-26T03:12:00Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Time to compile! */</comment>
      <text xml:space="preserve" bytes="18191">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] images, or any of the entity models, in the lower right section of your Trenchbroom. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''.



==Add some functionality==
[[File:map_tutorial_6.png|thumb]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key 'light' and set it's value to '200'.

==Triggers!==
[[File:map_tutorial_8.png|thumb]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.

=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
[[File:compile_gui_prefs.png|thumb|center|upright=2.5]]

In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct. For now, we do not need to set any Command-line Arguments. Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's \id1\maps\ directory where it searches for levels, such as C:\Quake\id1\maps\. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be \quoth\maps\ instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].



==Light==
[[File:map_tutorial_light.jpg|thumb|left]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs.




==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.</text>
      <sha1>s7jx7tfiuxsc6rgpcxip7clhdu4pyti</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2152</id>
      <parentid>2151</parentid>
      <timestamp>2013-03-26T03:24:02Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Time to compile! */</comment>
      <text xml:space="preserve" bytes="19053">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] images, or any of the entity models, in the lower right section of your Trenchbroom. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''.



==Add some functionality==
[[File:map_tutorial_6.png|thumb]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key 'light' and set it's value to '200'.

==Triggers!==
[[File:map_tutorial_8.png|thumb]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.

=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
[[File:compile_gui_prefs.png|thumb|center|upright=2.5]]

In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct. For now, we do not need to set any Command-line Arguments. Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's \id1\maps\ directory where it searches for levels, such as C:\Quake\id1\maps\. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be \quoth\maps\ instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].



==Light==
[[File:map_tutorial_light.jpg|thumb|left]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs.




==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size seen in stock Quake until you have a feel for how Vis times are effected.</text>
      <sha1>aca84g32j1s0m95kjj4bor9w1hj1igi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2153</id>
      <parentid>2152</parentid>
      <timestamp>2013-03-26T03:25:22Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* A new brush */</comment>
      <text xml:space="preserve" bytes="19121">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] images, or any of the entity models, in the lower right section of your Trenchbroom. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.

==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''.



==Add some functionality==
[[File:map_tutorial_6.png|thumb]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key 'light' and set it's value to '200'.

==Triggers!==
[[File:map_tutorial_8.png|thumb]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.

=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
[[File:compile_gui_prefs.png|thumb|center|upright=2.5]]

In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct. For now, we do not need to set any Command-line Arguments. Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's \id1\maps\ directory where it searches for levels, such as C:\Quake\id1\maps\. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be \quoth\maps\ instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].



==Light==
[[File:map_tutorial_light.jpg|thumb|left]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs.




==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size seen in stock Quake until you have a feel for how Vis times are effected.</text>
      <sha1>tv5paybtd6njjxiuy21drrphgqxigu5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2154</id>
      <parentid>2153</parentid>
      <timestamp>2013-03-26T03:30:22Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Even more brushes */</comment>
      <text xml:space="preserve" bytes="19534">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] images, or any of the entity models, in the lower right section of your Trenchbroom. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.

==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.

==Add some functionality==
[[File:map_tutorial_6.png|thumb]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key 'light' and set it's value to '200'.

==Triggers!==
[[File:map_tutorial_8.png|thumb]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.

=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
[[File:compile_gui_prefs.png|thumb|center|upright=2.5]]

In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct. For now, we do not need to set any Command-line Arguments. Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's \id1\maps\ directory where it searches for levels, such as C:\Quake\id1\maps\. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be \quoth\maps\ instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].



==Light==
[[File:map_tutorial_light.jpg|thumb|left]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs.




==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size seen in stock Quake until you have a feel for how Vis times are effected.</text>
      <sha1>fz7ww1vr32a5xyerxquschrahrtqhv8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2155</id>
      <parentid>2154</parentid>
      <timestamp>2013-03-26T03:33:40Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Vis */</comment>
      <text xml:space="preserve" bytes="19696">THIS IS VERY MUCH A WORK IN PROGRESS --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 16:04, 25 March 2013 (UTC)

This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] images, or any of the entity models, in the lower right section of your Trenchbroom. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.

==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.

==Add some functionality==
[[File:map_tutorial_6.png|thumb]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key 'light' and set it's value to '200'.

==Triggers!==
[[File:map_tutorial_8.png|thumb]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.

=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
[[File:compile_gui_prefs.png|thumb|center|upright=2.5]]

In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct. For now, we do not need to set any Command-line Arguments. Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's \id1\maps\ directory where it searches for levels, such as C:\Quake\id1\maps\. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be \quoth\maps\ instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].



==Light==
[[File:map_tutorial_light.jpg|thumb|left]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs.




==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size seen in stock Quake until you have a feel for how Vis times are effected.</text>
      <sha1>55i11yj0o98k8o6xx2akc9sh4yxg1hc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2156</id>
      <parentid>2155</parentid>
      <timestamp>2013-03-26T03:34:26Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="19575">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros's CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] images, or any of the entity models, in the lower right section of your Trenchbroom. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.

==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.

==Add some functionality==
[[File:map_tutorial_6.png|thumb]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key 'light' and set it's value to '200'.

==Triggers!==
[[File:map_tutorial_8.png|thumb]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.

=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
[[File:compile_gui_prefs.png|thumb|center|upright=2.5]]

In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct. For now, we do not need to set any Command-line Arguments. Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's \id1\maps\ directory where it searches for levels, such as C:\Quake\id1\maps\. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be \quoth\maps\ instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].



==Light==
[[File:map_tutorial_light.jpg|thumb|left]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs.




==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size seen in stock Quake until you have a feel for how Vis times are effected.</text>
      <sha1>1olravzq8nmtq0le10w7h33n9g3f8tq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2157</id>
      <parentid>2156</parentid>
      <timestamp>2013-03-26T03:35:05Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Tools of the trade */</comment>
      <text xml:space="preserve" bytes="19574">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] images, or any of the entity models, in the lower right section of your Trenchbroom. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.

==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.

==Add some functionality==
[[File:map_tutorial_6.png|thumb]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key 'light' and set it's value to '200'.

==Triggers!==
[[File:map_tutorial_8.png|thumb]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.

=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
[[File:compile_gui_prefs.png|thumb|center|upright=2.5]]

In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct. For now, we do not need to set any Command-line Arguments. Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's \id1\maps\ directory where it searches for levels, such as C:\Quake\id1\maps\. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be \quoth\maps\ instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].



==Light==
[[File:map_tutorial_light.jpg|thumb|left]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs.




==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size seen in stock Quake until you have a feel for how Vis times are effected.</text>
      <sha1>dv7jpk4ddkne9fkqtzj08jt2kcs7na5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2158</id>
      <parentid>2157</parentid>
      <timestamp>2013-03-26T03:35:48Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="19576">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!

==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] images, or any of the entity models, in the lower right section of your Trenchbroom. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.

==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.

==Add some functionality==
[[File:map_tutorial_6.png|thumb]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key 'light' and set it's value to '200'.

==Triggers!==
[[File:map_tutorial_8.png|thumb]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.

=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
[[File:compile_gui_prefs.png|thumb|center|upright=2.5]]

In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct. For now, we do not need to set any Command-line Arguments. Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's \id1\maps\ directory where it searches for levels, such as C:\Quake\id1\maps\. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be \quoth\maps\ instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].



==Light==
[[File:map_tutorial_light.jpg|thumb|left]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs.




==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size seen in stock Quake until you have a feel for how Vis times are effected.</text>
      <sha1>lua7juiyucjcamsifq0gqix7la7yto9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2159</id>
      <parentid>2158</parentid>
      <timestamp>2013-03-26T03:36:09Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="19578">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] images, or any of the entity models, in the lower right section of your Trenchbroom. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.

==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.

==Add some functionality==
[[File:map_tutorial_6.png|thumb]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key 'light' and set it's value to '200'.

==Triggers!==
[[File:map_tutorial_8.png|thumb]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.

=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
[[File:compile_gui_prefs.png|thumb|center|upright=2.5]]

In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct. For now, we do not need to set any Command-line Arguments. Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's \id1\maps\ directory where it searches for levels, such as C:\Quake\id1\maps\. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be \quoth\maps\ instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].



==Light==
[[File:map_tutorial_light.jpg|thumb|left]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs.




==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size seen in stock Quake until you have a feel for how Vis times are effected.</text>
      <sha1>cc5raajdrm75li020lwfd8iqv5w4baa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2160</id>
      <parentid>2159</parentid>
      <timestamp>2013-03-26T03:37:33Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Some setup */</comment>
      <text xml:space="preserve" bytes="19598">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.

==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.

==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.

==Add some functionality==
[[File:map_tutorial_6.png|thumb]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key 'light' and set it's value to '200'.

==Triggers!==
[[File:map_tutorial_8.png|thumb]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.

=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
[[File:compile_gui_prefs.png|thumb|center|upright=2.5]]

In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct. For now, we do not need to set any Command-line Arguments. Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's \id1\maps\ directory where it searches for levels, such as C:\Quake\id1\maps\. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be \quoth\maps\ instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].



==Light==
[[File:map_tutorial_light.jpg|thumb|left]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs.




==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size seen in stock Quake until you have a feel for how Vis times are effected.</text>
      <sha1>5vnw62by4aj8ncu18gh71b94krxz11w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2161</id>
      <parentid>2160</parentid>
      <timestamp>2013-03-26T03:38:18Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Vis */</comment>
      <text xml:space="preserve" bytes="19609">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.

==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.

==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.

==Add some functionality==
[[File:map_tutorial_6.png|thumb]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key 'light' and set it's value to '200'.

==Triggers!==
[[File:map_tutorial_8.png|thumb]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.

=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
[[File:compile_gui_prefs.png|thumb|center|upright=2.5]]

In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct. For now, we do not need to set any Command-line Arguments. Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's \id1\maps\ directory where it searches for levels, such as C:\Quake\id1\maps\. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be \quoth\maps\ instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].



==Light==
[[File:map_tutorial_light.jpg|thumb|left]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs.




==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.</text>
      <sha1>0rkhcfwm4azyf0exc5mvubtlcfnocxj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2162</id>
      <parentid>2161</parentid>
      <timestamp>2013-03-26T03:40:35Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Lights and Properties */</comment>
      <text xml:space="preserve" bytes="19609">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.

==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.

==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.

==Add some functionality==
[[File:map_tutorial_6.png|thumb]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.

==Triggers!==
[[File:map_tutorial_8.png|thumb]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.

=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
[[File:compile_gui_prefs.png|thumb|center|upright=2.5]]

In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct. For now, we do not need to set any Command-line Arguments. Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's \id1\maps\ directory where it searches for levels, such as C:\Quake\id1\maps\. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be \quoth\maps\ instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].



==Light==
[[File:map_tutorial_light.jpg|thumb|left]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs.




==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.</text>
      <sha1>axtaykvm2rszgydbcoifc6oa00il1s1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2163</id>
      <parentid>2162</parentid>
      <timestamp>2013-03-26T03:41:43Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Painting the town */</comment>
      <text xml:space="preserve" bytes="19607">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.

==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.

==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.

==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.

==Add some functionality==
[[File:map_tutorial_6.png|thumb]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.

==Triggers!==
[[File:map_tutorial_8.png|thumb]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.

=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
[[File:compile_gui_prefs.png|thumb|center|upright=2.5]]

In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct. For now, we do not need to set any Command-line Arguments. Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's \id1\maps\ directory where it searches for levels, such as C:\Quake\id1\maps\. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be \quoth\maps\ instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].



==Light==
[[File:map_tutorial_light.jpg|thumb|left]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs.




==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.</text>
      <sha1>4b1hvsfpcp48b8l7jjukxg1tosrm3ub</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2164</id>
      <parentid>2163</parentid>
      <timestamp>2013-03-26T03:45:55Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Setting up the GUI */</comment>
      <text xml:space="preserve" bytes="19605">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.

==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.

==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.

==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.

==Add some functionality==
[[File:map_tutorial_6.png|thumb]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.

==Triggers!==
[[File:map_tutorial_8.png|thumb]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.

=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (Do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's \id1\maps\ directory where it searches for levels, such as C:\Quake\id1\maps\. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be \quoth\maps\ instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].



==Light==
[[File:map_tutorial_light.jpg|thumb|left]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs.




==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.</text>
      <sha1>srv4fz19e4aaye2ou7qa6xgu3vvgokj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2165</id>
      <parentid>2164</parentid>
      <timestamp>2013-03-26T03:46:37Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Setting up the GUI */</comment>
      <text xml:space="preserve" bytes="19607">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.

==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.

==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.

==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.

==Add some functionality==
[[File:map_tutorial_6.png|thumb]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.

==Triggers!==
[[File:map_tutorial_8.png|thumb]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.

=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. 

Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's \id1\maps\ directory where it searches for levels, such as C:\Quake\id1\maps\. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be \quoth\maps\ instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].



==Light==
[[File:map_tutorial_light.jpg|thumb|left]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs.




==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.</text>
      <sha1>knl3drjotgz1dd5yhpmmdnsr3pjqm1g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2166</id>
      <parentid>2165</parentid>
      <timestamp>2013-03-26T03:47:14Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Setting up the GUI */</comment>
      <text xml:space="preserve" bytes="19625">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.

==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.

==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.

==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.

==Add some functionality==
[[File:map_tutorial_6.png|thumb]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.

==Triggers!==
[[File:map_tutorial_8.png|thumb]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.

=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. 

Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's '''\id1\maps\''' directory where it searches for levels, such as '''C:\Quake\id1\maps\'''. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be '''\quoth\maps\''' instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].



==Light==
[[File:map_tutorial_light.jpg|thumb|left]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs.




==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.</text>
      <sha1>oggtjgivuz75l9s30vgd45y88ak0f9a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2167</id>
      <parentid>2166</parentid>
      <timestamp>2013-03-26T03:49:11Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* QBSP */</comment>
      <text xml:space="preserve" bytes="19640">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.

==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.

==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.

==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.

==Add some functionality==
[[File:map_tutorial_6.png|thumb]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.

==Triggers!==
[[File:map_tutorial_8.png|thumb]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.

=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. 

Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's '''\id1\maps\''' directory where it searches for levels, such as '''C:\Quake\id1\maps\'''. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be '''\quoth\maps\''' instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb|Our map in game!]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].

==Light==
[[File:map_tutorial_light.jpg|thumb|left]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs.




==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.</text>
      <sha1>j4qpgvui6hyvsmpl6s8b1hx6h5yvbtj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2168</id>
      <parentid>2167</parentid>
      <timestamp>2013-03-26T03:49:35Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Light */</comment>
      <text xml:space="preserve" bytes="19654">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.

==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.

==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.

==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.

==Add some functionality==
[[File:map_tutorial_6.png|thumb]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.

==Triggers!==
[[File:map_tutorial_8.png|thumb]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.

=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. 

Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's '''\id1\maps\''' directory where it searches for levels, such as '''C:\Quake\id1\maps\'''. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be '''\quoth\maps\''' instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb|Our map in game!]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].

==Light==
[[File:map_tutorial_light.jpg|thumb|left|Light and Shadow]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs.

==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.</text>
      <sha1>ceucltyduxkkezs3st2flbwac9e7tss</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2169</id>
      <parentid>2168</parentid>
      <timestamp>2013-03-26T03:50:17Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Triggers! */</comment>
      <text xml:space="preserve" bytes="19669">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.

==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.

==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.

==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.

==Add some functionality==
[[File:map_tutorial_6.png|thumb]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.

==Triggers!==
[[File:map_tutorial_8.png|thumb|Make a Trigger]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.

=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. 

Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's '''\id1\maps\''' directory where it searches for levels, such as '''C:\Quake\id1\maps\'''. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be '''\quoth\maps\''' instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb|Our map in game!]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].

==Light==
[[File:map_tutorial_light.jpg|thumb|left|Light and Shadow]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs.

==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.</text>
      <sha1>es5v6khojd03twucbvclokzxx74ck4m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2170</id>
      <parentid>2169</parentid>
      <timestamp>2013-03-26T03:50:41Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Lights and Properties */</comment>
      <text xml:space="preserve" bytes="19688">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.

==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.

==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.

==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.

==Add some functionality==
[[File:map_tutorial_6.png|thumb]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb|Setting Properties]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.

==Triggers!==
[[File:map_tutorial_8.png|thumb|Make a Trigger]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.

=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. 

Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's '''\id1\maps\''' directory where it searches for levels, such as '''C:\Quake\id1\maps\'''. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be '''\quoth\maps\''' instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb|Our map in game!]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].

==Light==
[[File:map_tutorial_light.jpg|thumb|left|Light and Shadow]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs.

==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.</text>
      <sha1>elu8fvqmqqrlnet0swr2fs63t07z810</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2171</id>
      <parentid>2170</parentid>
      <timestamp>2013-03-26T03:51:08Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Add some functionality */</comment>
      <text xml:space="preserve" bytes="19703">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]

=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.

==Painting the town==
[[File:map_tutorial_2.jpg|thumb]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.

==Making some room==
[[File:map_tutorial_3.jpg|thumb]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.

==Even more brushes==
[[File:map_tutorial_5.jpg|thumb]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.

==Add some functionality==
[[File:map_tutorial_6.png|thumb|Our first entity]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.

==Lights and Properties==
[[File:map_tutorial_7.png|thumb|Setting Properties]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.

==Triggers!==
[[File:map_tutorial_8.png|thumb|Make a Trigger]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.

=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. 

Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's '''\id1\maps\''' directory where it searches for levels, such as '''C:\Quake\id1\maps\'''. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be '''\quoth\maps\''' instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb|Our map in game!]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].

==Light==
[[File:map_tutorial_light.jpg|thumb|left|Light and Shadow]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs.

==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.</text>
      <sha1>ig9vr00tpou5dwnxzpya0qrx1aeq9s6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2172</id>
      <parentid>2171</parentid>
      <timestamp>2013-03-26T03:54:20Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="19807">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]



=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb|Trenchbroom]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.jpg|thumb|Applying Textures]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb|Resizing brushes]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb|Creating new brushes]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.jpg|thumb|Duplication]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.



==Add some functionality==
[[File:map_tutorial_6.png|thumb|Our first entity]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb|Setting Properties]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.



==Triggers!==
[[File:map_tutorial_8.png|thumb|Making a Trigger]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.



=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. 

Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's '''\id1\maps\''' directory where it searches for levels, such as '''C:\Quake\id1\maps\'''. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be '''\quoth\maps\''' instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.



==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb|Our map in game!]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].



==Light==
[[File:map_tutorial_light.jpg|thumb|left|Light and Shadow]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs.



==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.</text>
      <sha1>ra5lx0oe4nh5urdlqyh0c895gy1fmsu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2173</id>
      <parentid>2172</parentid>
      <timestamp>2013-03-26T04:01:01Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="20031">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]



=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb|Trenchbroom]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.jpg|thumb|Applying Textures]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb|Resizing brushes]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb|Creating new brushes]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.jpg|thumb|Duplication]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.



==Add some functionality==
[[File:map_tutorial_6.png|thumb|Our first entity]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb|Setting Properties]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.



==Triggers!==
[[File:map_tutorial_8.png|thumb|Making a Trigger]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.



=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. 

Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's '''\id1\maps\''' directory where it searches for levels, such as '''C:\Quake\id1\maps\'''. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be '''\quoth\maps\''' instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.



==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb|Our map in game!]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].

See [[QBSP]] for more information and common command-line arguments.


==Light==
[[File:map_tutorial_light.jpg|thumb|left|Light and Shadow]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs.

See [[Light (map compiling)]] for more information and common command-line arguments.


==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.

See [[Vis]] for more information and common command-line arguments.</text>
      <sha1>fbdx8wdgv5diq5uei1g7ykws2413bfp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2174</id>
      <parentid>2173</parentid>
      <timestamp>2013-03-26T04:01:51Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* QBSP */</comment>
      <text xml:space="preserve" bytes="20035">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]



=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb|Trenchbroom]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.jpg|thumb|Applying Textures]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb|Resizing brushes]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb|Creating new brushes]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.jpg|thumb|Duplication]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.



==Add some functionality==
[[File:map_tutorial_6.png|thumb|Our first entity]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb|Setting Properties]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.



==Triggers!==
[[File:map_tutorial_8.png|thumb|Making a Trigger]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.



=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. 

Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's '''\id1\maps\''' directory where it searches for levels, such as '''C:\Quake\id1\maps\'''. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be '''\quoth\maps\''' instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.



==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb|left|Our map in game!]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].

See [[QBSP]] for more information and common command-line arguments.

==Light==
[[File:map_tutorial_light.jpg|thumb|left|Light and Shadow]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs.

See [[Light (map compiling)]] for more information and common command-line arguments.


==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.

See [[Vis]] for more information and common command-line arguments.</text>
      <sha1>8vj98pk1apcaalujxulemhi52rbgg8x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2175</id>
      <parentid>2174</parentid>
      <timestamp>2013-03-26T04:02:11Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Light */</comment>
      <text xml:space="preserve" bytes="20029">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]



=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb|Trenchbroom]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.jpg|thumb|Applying Textures]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb|Resizing brushes]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb|Creating new brushes]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.jpg|thumb|Duplication]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.



==Add some functionality==
[[File:map_tutorial_6.png|thumb|Our first entity]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb|Setting Properties]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.



==Triggers!==
[[File:map_tutorial_8.png|thumb|Making a Trigger]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.



=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. 

Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's '''\id1\maps\''' directory where it searches for levels, such as '''C:\Quake\id1\maps\'''. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be '''\quoth\maps\''' instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.



==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb|left|Our map in game!]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].

See [[QBSP]] for more information and common command-line arguments.

==Light==
[[File:map_tutorial_light.jpg|thumb|Light and Shadow]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs.

See [[Light (map compiling)]] for more information and common command-line arguments.

==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.

See [[Vis]] for more information and common command-line arguments.</text>
      <sha1>0zl2uge9gb2lbtr4fcbqd1z8z7hc12n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2176</id>
      <parentid>2175</parentid>
      <timestamp>2013-03-26T04:02:25Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* QBSP */</comment>
      <text xml:space="preserve" bytes="20024">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]



=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb|Trenchbroom]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.jpg|thumb|Applying Textures]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb|Resizing brushes]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb|Creating new brushes]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.jpg|thumb|Duplication]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.



==Add some functionality==
[[File:map_tutorial_6.png|thumb|Our first entity]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb|Setting Properties]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.



==Triggers!==
[[File:map_tutorial_8.png|thumb|Making a Trigger]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.



=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. 

Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's '''\id1\maps\''' directory where it searches for levels, such as '''C:\Quake\id1\maps\'''. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be '''\quoth\maps\''' instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.



==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb|Our map in game!]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].

See [[QBSP]] for more information and common command-line arguments.

==Light==
[[File:map_tutorial_light.jpg|thumb|Light and Shadow]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs.

See [[Light (map compiling)]] for more information and common command-line arguments.

==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.

See [[Vis]] for more information and common command-line arguments.</text>
      <sha1>s5vgqppffqkbzlog5w0xj7u12mxbvqv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2177</id>
      <parentid>2176</parentid>
      <timestamp>2013-03-26T04:07:27Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Light */</comment>
      <text xml:space="preserve" bytes="20271">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.jpg|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.jpg|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]



=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb|Trenchbroom]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.jpg|thumb|Applying Textures]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb|Resizing brushes]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb|Creating new brushes]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.jpg|thumb|Duplication]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.



==Add some functionality==
[[File:map_tutorial_6.png|thumb|Our first entity]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb|Setting Properties]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.



==Triggers!==
[[File:map_tutorial_8.png|thumb|Making a Trigger]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.



=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. 

Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's '''\id1\maps\''' directory where it searches for levels, such as '''C:\Quake\id1\maps\'''. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be '''\quoth\maps\''' instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.



==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb|Our map in game!]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].

See [[QBSP]] for more information and common command-line arguments.

==Light==
[[File:map_tutorial_light.jpg|thumb|Light and Shadow]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! 

General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs. Light, especially with some of it's command-line arguments for improving details, on more complex maps can often take awhile to complete, so often when testing small changes to your map like a couple new monsters, you may not bother running it.

See [[Light (map compiling)]] for more information and common command-line arguments.

==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.

See [[Vis]] for more information and common command-line arguments.</text>
      <sha1>snib1o58u7lgh3rrxpzv5u6lok0ujfs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2180</id>
      <parentid>2177</parentid>
      <timestamp>2013-03-26T04:11:29Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="20271">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.png|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.png|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.jpg|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]



=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.jpg|thumb|Trenchbroom]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.jpg|thumb|Applying Textures]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.jpg|thumb|Resizing brushes]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.jpg|thumb|Creating new brushes]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.jpg|thumb|Duplication]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.



==Add some functionality==
[[File:map_tutorial_6.png|thumb|Our first entity]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb|Setting Properties]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.



==Triggers!==
[[File:map_tutorial_8.png|thumb|Making a Trigger]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.



=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. 

Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's '''\id1\maps\''' directory where it searches for levels, such as '''C:\Quake\id1\maps\'''. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be '''\quoth\maps\''' instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.



==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb|Our map in game!]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].

See [[QBSP]] for more information and common command-line arguments.

==Light==
[[File:map_tutorial_light.jpg|thumb|Light and Shadow]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! 

General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs. Light, especially with some of it's command-line arguments for improving details, on more complex maps can often take awhile to complete, so often when testing small changes to your map like a couple new monsters, you may not bother running it.

See [[Light (map compiling)]] for more information and common command-line arguments.

==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.

See [[Vis]] for more information and common command-line arguments.</text>
      <sha1>m8ecjsjjrjedxbivvkq004abrluvss2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2186</id>
      <parentid>2180</parentid>
      <timestamp>2013-03-26T04:18:25Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="20271">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.png|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.png|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.png|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]



=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.png|thumb|Trenchbroom]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.png|thumb|Applying Textures]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.png|thumb|Resizing brushes]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.png|thumb|Creating new brushes]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.png|thumb|Duplication]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.



==Add some functionality==
[[File:map_tutorial_6.png|thumb|Our first entity]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb|Setting Properties]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.



==Triggers!==
[[File:map_tutorial_8.png|thumb|Making a Trigger]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.



=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. 

Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's '''\id1\maps\''' directory where it searches for levels, such as '''C:\Quake\id1\maps\'''. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be '''\quoth\maps\''' instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.



==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb|Our map in game!]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].

See [[QBSP]] for more information and common command-line arguments.

==Light==
[[File:map_tutorial_light.jpg|thumb|Light and Shadow]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! 

General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs. Light, especially with some of it's command-line arguments for improving details, on more complex maps can often take awhile to complete, so often when testing small changes to your map like a couple new monsters, you may not bother running it.

See [[Light (map compiling)]] for more information and common command-line arguments.

==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.

See [[Vis]] for more information and common command-line arguments.</text>
      <sha1>k6dduzdb6zph13yilxpdzfsk99m780x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2191</id>
      <parentid>2186</parentid>
      <timestamp>2013-03-26T04:24:53Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <minor/>
      <comment>Scampie moved page [[Basics of Quake Mapping]] to [[Getting Started Mapping]]</comment>
      <text xml:space="preserve" bytes="20271">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.png|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.png|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.png|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]



=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.png|thumb|Trenchbroom]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.png|thumb|Applying Textures]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.png|thumb|Resizing brushes]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.png|thumb|Creating new brushes]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.png|thumb|Duplication]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.



==Add some functionality==
[[File:map_tutorial_6.png|thumb|Our first entity]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb|Setting Properties]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.



==Triggers!==
[[File:map_tutorial_8.png|thumb|Making a Trigger]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.



=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. 

Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's '''\id1\maps\''' directory where it searches for levels, such as '''C:\Quake\id1\maps\'''. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be '''\quoth\maps\''' instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.



==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb|Our map in game!]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].

See [[QBSP]] for more information and common command-line arguments.

==Light==
[[File:map_tutorial_light.jpg|thumb|Light and Shadow]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! 

General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs. Light, especially with some of it's command-line arguments for improving details, on more complex maps can often take awhile to complete, so often when testing small changes to your map like a couple new monsters, you may not bother running it.

See [[Light (map compiling)]] for more information and common command-line arguments.

==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.

See [[Vis]] for more information and common command-line arguments.</text>
      <sha1>k6dduzdb6zph13yilxpdzfsk99m780x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2197</id>
      <parentid>2191</parentid>
      <timestamp>2013-03-26T04:37:59Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Light */</comment>
      <text xml:space="preserve" bytes="20382">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.png|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.png|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.png|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]



=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.png|thumb|Trenchbroom]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.png|thumb|Applying Textures]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.png|thumb|Resizing brushes]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.png|thumb|Creating new brushes]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.png|thumb|Duplication]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.



==Add some functionality==
[[File:map_tutorial_6.png|thumb|Our first entity]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb|Setting Properties]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.



==Triggers!==
[[File:map_tutorial_8.png|thumb|Making a Trigger]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.



=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. 

Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's '''\id1\maps\''' directory where it searches for levels, such as '''C:\Quake\id1\maps\'''. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be '''\quoth\maps\''' instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-game quoth&quot; when making a map for the Quoth mod), place them in the line provided.



==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb|Our map in game!]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].

See [[QBSP]] for more information and common command-line arguments.

==Light==
[[File:map_tutorial_light.jpg|thumb|Light and Shadow]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! 

General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs. Light, especially with some of it's command-line arguments for improving details, on more complex maps can often take awhile to complete, so often when testing small changes to your map like a couple new monsters, you may not bother running it. This may be obvious, but if you have no light entities in your map and run light, your map will be fully dark.

See [[Light (map compiling)]] for more information and common command-line arguments.

==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.

See [[Vis]] for more information and common command-line arguments.</text>
      <sha1>gljxnkp9qaz7xdomommttjtllx68qvf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2202</id>
      <parentid>2197</parentid>
      <timestamp>2013-03-26T04:49:00Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Setting up the GUI */</comment>
      <text xml:space="preserve" bytes="20390">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.png|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.png|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.png|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]



=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.png|thumb|Trenchbroom]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.png|thumb|Applying Textures]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.png|thumb|Resizing brushes]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.png|thumb|Creating new brushes]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.png|thumb|Duplication]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.



==Add some functionality==
[[File:map_tutorial_6.png|thumb|Our first entity]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb|Setting Properties]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.



==Triggers!==
[[File:map_tutorial_8.png|thumb|Making a Trigger]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.



=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. 

Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's '''\id1\maps\''' directory where it searches for levels, such as '''C:\Quake\id1\maps\'''. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be '''\quoth\maps\''' instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-hipnotic -game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb|Our map in game!]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].

See [[QBSP]] for more information and common command-line arguments.

==Light==
[[File:map_tutorial_light.jpg|thumb|Light and Shadow]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! 

General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs. Light, especially with some of it's command-line arguments for improving details, on more complex maps can often take awhile to complete, so often when testing small changes to your map like a couple new monsters, you may not bother running it. This may be obvious, but if you have no light entities in your map and run light, your map will be fully dark.

See [[Light (map compiling)]] for more information and common command-line arguments.

==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.

See [[Vis]] for more information and common command-line arguments.</text>
      <sha1>srgvem0bv8vgmzuzggzsy6f3avjxp1f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2204</id>
      <parentid>2202</parentid>
      <timestamp>2013-03-26T04:55:00Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* QBSP */</comment>
      <text xml:space="preserve" bytes="20680">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.png|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.png|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'Key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.



==Textures Wads and Compilers==
[[File:Textures.png|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]



=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.png|thumb|Trenchbroom]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.png|thumb|Applying Textures]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.png|thumb|Resizing brushes]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.png|thumb|Creating new brushes]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.png|thumb|Duplication]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.



==Add some functionality==
[[File:map_tutorial_6.png|thumb|Our first entity]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb|Setting Properties]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.



==Triggers!==
[[File:map_tutorial_8.png|thumb|Making a Trigger]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.



=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. 

Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's '''\id1\maps\''' directory where it searches for levels, such as '''C:\Quake\id1\maps\'''. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be '''\quoth\maps\''' instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-hipnotic -game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb|Our map in game!]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].

QBSP is also responsible for taking your textures out of your .wad and compiling them into the .bsp. This means you do not need to supply a .wad alongside your level when sending it to other people, and that a tool such as [[TexMex]] is able to open and extract textures from a .bsp file!

See [[QBSP]] for more information and common command-line arguments.

==Light==
[[File:map_tutorial_light.jpg|thumb|Light and Shadow]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! 

General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs. Light, especially with some of it's command-line arguments for improving details, on more complex maps can often take awhile to complete, so often when testing small changes to your map like a couple new monsters, you may not bother running it. This may be obvious, but if you have no light entities in your map and run light, your map will be fully dark.

See [[Light (map compiling)]] for more information and common command-line arguments.

==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.

See [[Vis]] for more information and common command-line arguments.</text>
      <sha1>21i1ch93x4enmwfqftx2v83mu9kskm8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2214</id>
      <parentid>2204</parentid>
      <timestamp>2013-03-26T12:15:51Z</timestamp>
      <contributor>
        <username>SleepwalkR</username>
        <id>37</id>
      </contributor>
      <minor/>
      <comment>Corrected a typo.</comment>
      <text xml:space="preserve" bytes="20678">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.png|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.png|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.

==Textures Wads and Compilers==
[[File:Textures.png|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]



=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.png|thumb|Trenchbroom]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in this lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.



==Painting the town==
[[File:map_tutorial_2.png|thumb|Applying Textures]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.png|thumb|Resizing brushes]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.png|thumb|Creating new brushes]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.png|thumb|Duplication]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.



==Add some functionality==
[[File:map_tutorial_6.png|thumb|Our first entity]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb|Setting Properties]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.



==Triggers!==
[[File:map_tutorial_8.png|thumb|Making a Trigger]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.



=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. 

Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's '''\id1\maps\''' directory where it searches for levels, such as '''C:\Quake\id1\maps\'''. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be '''\quoth\maps\''' instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-hipnotic -game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb|Our map in game!]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].

QBSP is also responsible for taking your textures out of your .wad and compiling them into the .bsp. This means you do not need to supply a .wad alongside your level when sending it to other people, and that a tool such as [[TexMex]] is able to open and extract textures from a .bsp file!

See [[QBSP]] for more information and common command-line arguments.

==Light==
[[File:map_tutorial_light.jpg|thumb|Light and Shadow]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! 

General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs. Light, especially with some of it's command-line arguments for improving details, on more complex maps can often take awhile to complete, so often when testing small changes to your map like a couple new monsters, you may not bother running it. This may be obvious, but if you have no light entities in your map and run light, your map will be fully dark.

See [[Light (map compiling)]] for more information and common command-line arguments.

==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.

See [[Vis]] for more information and common command-line arguments.</text>
      <sha1>hxepgeoak4dp2fg7gw49kczff6a6wnz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2215</id>
      <parentid>2214</parentid>
      <timestamp>2013-03-26T12:18:58Z</timestamp>
      <contributor>
        <username>SleepwalkR</username>
        <id>37</id>
      </contributor>
      <minor/>
      <comment>Fixed a typo.</comment>
      <text xml:space="preserve" bytes="20675">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[BSP|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.png|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.png|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.

==Textures Wads and Compilers==
[[File:Textures.png|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.



=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]



=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.png|thumb|Trenchbroom]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in the lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click Ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.

==Painting the town==
[[File:map_tutorial_2.png|thumb|Applying Textures]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.png|thumb|Resizing brushes]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.png|thumb|Creating new brushes]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.png|thumb|Duplication]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.



==Add some functionality==
[[File:map_tutorial_6.png|thumb|Our first entity]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb|Setting Properties]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.



==Triggers!==
[[File:map_tutorial_8.png|thumb|Making a Trigger]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.



=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. 

Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's '''\id1\maps\''' directory where it searches for levels, such as '''C:\Quake\id1\maps\'''. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be '''\quoth\maps\''' instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-hipnotic -game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb|Our map in game!]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].

QBSP is also responsible for taking your textures out of your .wad and compiling them into the .bsp. This means you do not need to supply a .wad alongside your level when sending it to other people, and that a tool such as [[TexMex]] is able to open and extract textures from a .bsp file!

See [[QBSP]] for more information and common command-line arguments.

==Light==
[[File:map_tutorial_light.jpg|thumb|Light and Shadow]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! 

General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs. Light, especially with some of it's command-line arguments for improving details, on more complex maps can often take awhile to complete, so often when testing small changes to your map like a couple new monsters, you may not bother running it. This may be obvious, but if you have no light entities in your map and run light, your map will be fully dark.

See [[Light (map compiling)]] for more information and common command-line arguments.

==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.

See [[Vis]] for more information and common command-line arguments.</text>
      <sha1>69dclmuuy6b2m4icnzmhbkkcjqo8vaa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2287</id>
      <parentid>2215</parentid>
      <timestamp>2013-03-26T17:51:11Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* What's a map!? */</comment>
      <text xml:space="preserve" bytes="20686">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[Quake_BSP_Format|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.png|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.png|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.

==Textures Wads and Compilers==
[[File:Textures.png|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 texture, which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]



=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.png|thumb|Trenchbroom]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in the lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click Ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.

==Painting the town==
[[File:map_tutorial_2.png|thumb|Applying Textures]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.png|thumb|Resizing brushes]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.png|thumb|Creating new brushes]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.png|thumb|Duplication]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.



==Add some functionality==
[[File:map_tutorial_6.png|thumb|Our first entity]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb|Setting Properties]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.



==Triggers!==
[[File:map_tutorial_8.png|thumb|Making a Trigger]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.



=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. 

Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's '''\id1\maps\''' directory where it searches for levels, such as '''C:\Quake\id1\maps\'''. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be '''\quoth\maps\''' instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-hipnotic -game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb|Our map in game!]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].

QBSP is also responsible for taking your textures out of your .wad and compiling them into the .bsp. This means you do not need to supply a .wad alongside your level when sending it to other people, and that a tool such as [[TexMex]] is able to open and extract textures from a .bsp file!

See [[QBSP]] for more information and common command-line arguments.

==Light==
[[File:map_tutorial_light.jpg|thumb|Light and Shadow]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! 

General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs. Light, especially with some of it's command-line arguments for improving details, on more complex maps can often take awhile to complete, so often when testing small changes to your map like a couple new monsters, you may not bother running it. This may be obvious, but if you have no light entities in your map and run light, your map will be fully dark.

See [[Light (map compiling)]] for more information and common command-line arguments.

==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.

See [[Vis]] for more information and common command-line arguments.</text>
      <sha1>sbdom6yeudcw7nypb91sx4ij0xras33</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2298</id>
      <parentid>2287</parentid>
      <timestamp>2013-03-26T18:15:47Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Textures Wads and Compilers */</comment>
      <text xml:space="preserve" bytes="20699">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[Quake_BSP_Format|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.png|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.png|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.

==Textures Wads and Compilers==
[[File:Textures.png|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 [[Textures|texture]], which can be rotated, scaled, and translated. But where do we get our textures? They are stored in .wad files, which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]



=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.png|thumb|Trenchbroom]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in the lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click Ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.

==Painting the town==
[[File:map_tutorial_2.png|thumb|Applying Textures]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.png|thumb|Resizing brushes]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.png|thumb|Creating new brushes]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.png|thumb|Duplication]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.



==Add some functionality==
[[File:map_tutorial_6.png|thumb|Our first entity]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb|Setting Properties]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.



==Triggers!==
[[File:map_tutorial_8.png|thumb|Making a Trigger]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.



=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. 

Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's '''\id1\maps\''' directory where it searches for levels, such as '''C:\Quake\id1\maps\'''. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be '''\quoth\maps\''' instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-hipnotic -game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb|Our map in game!]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].

QBSP is also responsible for taking your textures out of your .wad and compiling them into the .bsp. This means you do not need to supply a .wad alongside your level when sending it to other people, and that a tool such as [[TexMex]] is able to open and extract textures from a .bsp file!

See [[QBSP]] for more information and common command-line arguments.

==Light==
[[File:map_tutorial_light.jpg|thumb|Light and Shadow]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! 

General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs. Light, especially with some of it's command-line arguments for improving details, on more complex maps can often take awhile to complete, so often when testing small changes to your map like a couple new monsters, you may not bother running it. This may be obvious, but if you have no light entities in your map and run light, your map will be fully dark.

See [[Light (map compiling)]] for more information and common command-line arguments.

==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.

See [[Vis]] for more information and common command-line arguments.</text>
      <sha1>jf5cpwix12imcb8kmsxjmmp5609sdqe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2299</id>
      <parentid>2298</parentid>
      <timestamp>2013-03-26T18:16:22Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Textures Wads and Compilers */</comment>
      <text xml:space="preserve" bytes="20715">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[Trenchbroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[Quake_BSP_Format|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.png|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.png|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.

==Textures Wads and Compilers==
[[File:Textures.png|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 [[Textures|texture]], which can be rotated, scaled, and translated. But where do we get our textures? They are stored in [[Texture_Wad|.wad files]], which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]



=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.png|thumb|Trenchbroom]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in the lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click Ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.

==Painting the town==
[[File:map_tutorial_2.png|thumb|Applying Textures]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.png|thumb|Resizing brushes]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.png|thumb|Creating new brushes]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.png|thumb|Duplication]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.



==Add some functionality==
[[File:map_tutorial_6.png|thumb|Our first entity]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb|Setting Properties]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.



==Triggers!==
[[File:map_tutorial_8.png|thumb|Making a Trigger]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.



=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. 

Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's '''\id1\maps\''' directory where it searches for levels, such as '''C:\Quake\id1\maps\'''. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be '''\quoth\maps\''' instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-hipnotic -game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb|Our map in game!]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].

QBSP is also responsible for taking your textures out of your .wad and compiling them into the .bsp. This means you do not need to supply a .wad alongside your level when sending it to other people, and that a tool such as [[TexMex]] is able to open and extract textures from a .bsp file!

See [[QBSP]] for more information and common command-line arguments.

==Light==
[[File:map_tutorial_light.jpg|thumb|Light and Shadow]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! 

General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs. Light, especially with some of it's command-line arguments for improving details, on more complex maps can often take awhile to complete, so often when testing small changes to your map like a couple new monsters, you may not bother running it. This may be obvious, but if you have no light entities in your map and run light, your map will be fully dark.

See [[Light (map compiling)]] for more information and common command-line arguments.

==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.

See [[Vis]] for more information and common command-line arguments.</text>
      <sha1>qw3ohvt1hy7n1cr7ohzcox7yiunr2n0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2329</id>
      <parentid>2299</parentid>
      <timestamp>2013-03-26T22:43:57Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="20715">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[TrenchBroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[Quake_BSP_Format|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.png|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.png|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.

==Textures Wads and Compilers==
[[File:Textures.png|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 [[Textures|texture]], which can be rotated, scaled, and translated. But where do we get our textures? They are stored in [[Texture_Wad|.wad files]], which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]



=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.png|thumb|Trenchbroom]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in the lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click Ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.

==Painting the town==
[[File:map_tutorial_2.png|thumb|Applying Textures]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.png|thumb|Resizing brushes]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.png|thumb|Creating new brushes]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.png|thumb|Duplication]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.



==Add some functionality==
[[File:map_tutorial_6.png|thumb|Our first entity]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb|Setting Properties]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.



==Triggers!==
[[File:map_tutorial_8.png|thumb|Making a Trigger]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.



=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. 

Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's '''\id1\maps\''' directory where it searches for levels, such as '''C:\Quake\id1\maps\'''. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be '''\quoth\maps\''' instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-hipnotic -game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb|Our map in game!]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].

QBSP is also responsible for taking your textures out of your .wad and compiling them into the .bsp. This means you do not need to supply a .wad alongside your level when sending it to other people, and that a tool such as [[TexMex]] is able to open and extract textures from a .bsp file!

See [[QBSP]] for more information and common command-line arguments.

==Light==
[[File:map_tutorial_light.jpg|thumb|Light and Shadow]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! 

General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs. Light, especially with some of it's command-line arguments for improving details, on more complex maps can often take awhile to complete, so often when testing small changes to your map like a couple new monsters, you may not bother running it. This may be obvious, but if you have no light entities in your map and run light, your map will be fully dark.

See [[Light (map compiling)]] for more information and common command-line arguments.

==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the Potentially Visible Set (PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.

See [[Vis]] for more information and common command-line arguments.</text>
      <sha1>pkb756z9d018nw5acrtujdawybxhu84</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2330</id>
      <parentid>2329</parentid>
      <timestamp>2013-03-26T22:49:04Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Vis */</comment>
      <text xml:space="preserve" bytes="20789">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[TrenchBroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[Quake_BSP_Format|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.png|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.png|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.

==Textures Wads and Compilers==
[[File:Textures.png|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 [[Textures|texture]], which can be rotated, scaled, and translated. But where do we get our textures? They are stored in [[Texture_Wad|.wad files]], which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]



=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.png|thumb|Trenchbroom]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in the lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click Ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.

==Painting the town==
[[File:map_tutorial_2.png|thumb|Applying Textures]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.png|thumb|Resizing brushes]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.png|thumb|Creating new brushes]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.png|thumb|Duplication]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.



==Add some functionality==
[[File:map_tutorial_6.png|thumb|Our first entity]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb|Setting Properties]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.



==Triggers!==
[[File:map_tutorial_8.png|thumb|Making a Trigger]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.



=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. 

Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's '''\id1\maps\''' directory where it searches for levels, such as '''C:\Quake\id1\maps\'''. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be '''\quoth\maps\''' instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-hipnotic -game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb|Our map in game!]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].

QBSP is also responsible for taking your textures out of your .wad and compiling them into the .bsp. This means you do not need to supply a .wad alongside your level when sending it to other people, and that a tool such as [[TexMex]] is able to open and extract textures from a .bsp file!

See [[QBSP]] for more information and common command-line arguments.

==Light==
[[File:map_tutorial_light.jpg|thumb|Light and Shadow]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! 

General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs. Light, especially with some of it's command-line arguments for improving details, on more complex maps can often take awhile to complete, so often when testing small changes to your map like a couple new monsters, you may not bother running it. This may be obvious, but if you have no light entities in your map and run light, your map will be fully dark.

See [[Light (map compiling)]] for more information and common command-line arguments.

==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the [http://en.wikipedia.org/wiki/Potentially_visible_set Potentially Visible Set] (often shortened to PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.

See [[Vis]] for more information and common command-line arguments.</text>
      <sha1>1kf0f9fqq24wetan3ue26qwomc8pbvr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2696</id>
      <parentid>2330</parentid>
      <timestamp>2013-03-30T14:57:24Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Lights and Properties */</comment>
      <text xml:space="preserve" bytes="20800">This article is meant as a basic introduction to how a [[Quake]] level is constructed in the modern Quake editing software [[TrenchBroom]]. The goal is to teach a new level designer what goes into making a map, the terms used, what compiling is, and how to compile and play a created map. If you have ever created levels for the other Quake games, or for the Half-life/Source engine games, the basic terms of this will be familiar as they evolved from Quake. 

=What's a map!?=
A Quake level is created in level editing software specifically designed for the task. There are [[Mapping_tools#Level_Editors|several editors]] available, and all of them create [[Quake_Map_Format|.map files]]. These .map files are used by Quake compilers to generate the final [[Quake_BSP_Format|.bsp file]] levels that can be loaded by the Quake engine. Think of the .map file as a blueprint, and it contains instructions of how to make all the solid geometry of a level, and where all the lights and monsters and pickups should go. There are 2 major objects used to make these instructions: Brushes and Entities.

==Brush: Your basic building block!==
[[File:Brush.png|thumb|A brush]]
Our basic building block for constructing a level is the [[brush]]. All of our level's solid geometry will be constructed from brushes. But what do we mean by 'brushes'? The semi-technical definition in Quake level creation is that they are [http://en.wikipedia.org/wiki/Convex convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedrons]. The less technical definition is that they are 3D objects made of faces which cannot 'see' each other. Most commonly, you will use [http://en.wikipedia.org/wiki/Cube cubes] or [http://en.wikipedia.org/wiki/Cuboid cuboids], but know that any convex polyhedron is allowed.

It's ok if your head is spinning from reading all that, even if you don't fully understand that definition, using brushes in Quake editing software is easy, and the hard work of mathematically defining them is done for you, hidden away in the background. All you need to do is plop them down, and arrange them to make the walls and floors of your level!



==Entities: The life of the party==
[[File:Entity.png|thumb|left|A few entities]]
So we have brushes to define our world's geometry... but it wouldn't be a Quake level without [[Weapons|weapons]] and [[Monsters|monsters]]! And [[Entity|entities]] are just that, they are any of the functional objects defined in the game code for you to place into your level.

There are 2 types of entities: Brush entities and Point entities. Brush entities are things like doors, platforms, and trigger volumes; they are any functional object which need brush geometry tied to them to do their job. Point entities are things like weapons, monsters, and lights; they are all objects which are just simply dropped into place (at a point) in the world.

Entities of both types have various properties that can be edited by the designer to modify specified effects on the entity. Each property is a combination of a 'key', which is the name of the properties, and it's 'value'. As an example, light entities have a key called 'light', and it's value is set to whatever brightness you want the light to be.

==Textures Wads and Compilers==
[[File:Textures.png|thumb|Some textures]]
To round out our definitions, let me also talk about some external things we will need along with our .map file to create our final .bsp level.

Each face of a brush is allowed 1 [[Textures|texture]], which can be rotated, scaled, and translated. But where do we get our textures? They are stored in [[Texture_Wad|.wad files]], which are a collection of textures to be used in levels. If you are familiar with older Doom/Doom2 level design, these are NOT the same as their [http://doomwiki.org/wiki/WAD WAD files], despite having the same name.

We also need [[Map_compiling|compilers]], which take our raw .map file and turn it into a .bsp file which Quake can load. There are 3 compilers which are used: [[QBSP]], which turns the .map into a .bsp. [[Light_(map_compiling)|Light]], which calculates all the lighting information in the .bsp using our .map's instructions. And [[Vis]], which calculates visibility in the level to optimize Quake's rendering.

=Tools of the trade=
Now that we have definitions out of the way, let's get all the tools we will need. Trenchbroom you will need to install, the others are loose files which you will need to put somewhere accessible. I personally have a folder on my hard drive E:\q1maps\ where I keep all my .wads, compiling tools, .maps, etc.

'''Editing Software''': This tutorial will use Trenchbroom. [[http://kristianduske.com/trenchbroom/ Homepage]]

'''A texture .wad''': We will use Q.wad, which are all the textures from Quake. [[http://www.quaddicted.com/files/wads/q.zip Download]]

'''Map compiler tools''': This tutorial will use Tyrann's TyrUtils. [[http://disenchant.net/utils/ Homepage]]

'''Necros' CompilingGUI''' ''(optional)'': This is a handy front end for the compilers so you do not have to use command prompt or batch files to run the compilers. [[http://shoresofnis.wordpress.com/2010/03/30/ne_q1spcompilinggui/ Homepage]]



=Putting it together=
Now that we have definitions out of the way, let's open up Trenchbroom and actually build a simple level.
==Some setup==
[[File:map_tutorial_1.png|thumb|Trenchbroom]]
When you first open Trenchbroom, you should have something much like the image on the right, but before we dive into some editing, there's a couple things to set up. First, you likely won't see the little [[Quakeguy]] models, or any of the entity models, in the lower right section of your Trenchbroom in the Entity Browser. To fix this, go to '''View&gt;Preferences...''' and set your Quake Path to where your Quake is installed (ex: C:\Quake\). Once you've set this, Trenchbroom will remember it for all future maps you make. Other settings here include OpenGL display settings, and Mouse sensitivity and axis inverting if you wish to modify these.

Next, we need to let Trenchbroom know which textures we want to use for this map. Go to '''Edit&gt;Map Properties...''' and in the lower half of this dialog, you'll see the empty list of Texture Wads. Click on the '''+''' button, and browse to the '''Q.wad''' you downloaded earlier. You will be asked how you would like to store the path, leave the default 'Absolute' selected, and click Ok. Close out of the Map Properties dialog, and click on the '''Face tab''' in the upper right of Trenchbroom. You should now see all the Quake textures loaded in the lower right browser. Every time you create a new map, you will need to follow these steps to choose which texture wad you'd like to use.

==Painting the town==
[[File:map_tutorial_2.png|thumb|Applying Textures]]
Now we're ready to begin our map. Our brush is currently a sad, untextured grey. Let's fix that by putting a texture on it. '''Select the brush''' in the 3D view by '''Left Clicking''' on it, it will shade red when selected, and show some 'laser lines' extending from it's bounds. Now, let's put a texture on it. We're going to make this a floor, so find a good floor texture in the browser and '''Left Click''' on it to '''apply''' it. I'm using ''city4_2''.

You can '''select a single face''' of a brush by '''Shift-Left Clicking''' a face, and '''select multiple faces''' by '''Ctrl-Shift-Left Clicking'''. In the upper right of Trenchbroom, we can also choose to offset, scale, or rotate this texture on our brush. Textures dimensions Quake must be [http://en.wikipedia.org/wiki/Power_of_two powers of 2], often 64x64 or 128x128, so you will generally shift them by 1, 2, 4, 8, 16, 32, or 64 units. Scale is a multiplier, so to make textures 'smaller' you will use numbers smaller than 1, such as 0.5 for half-scale. Scale can also be use to mirror a texture, so a scale of -1 will flip it. Rotation is in degrees, 0-360, and negative values are allowed.



==Making some room==
[[File:map_tutorial_3.png|thumb|Resizing brushes]]
Our floor is a little small, let's make it a bit larger, and also familiarize ourselves with the 3D view a bit. To '''look around''' in the 3D view, '''Right Click and Hold''' in the 3D view while dragging your mouse. To '''pan''' left/right up/down, '''Middle Click and Hold''' in the 3D view. You can also '''orbit''' the camera by pressing '''Alt-Right Click and Hold'''.

Now, let's resize our floor brush. To do this, the brush must be selected, so reselect it if it is not or you only have some of it's faces selected. Now, '''Hold down Shift''' to enter face dragging mode and display the brush's dimensions. You will notice as you mouse over different parts of your brush, their edges will turn white, while continuing to '''Hold down Shift''', you may '''Left Click and Drag''' a white face. Let's make our floor 256x256 wide and 16 units tall. You will notice that your resizing that you are constrained to 16 unit increments. You can change the '''Grid Size''' with '''Ctrl--''' and '''Ctrl-+''', which will decrease or increase the grid by a power of 2, though it is recommended to stick to 16 units for this tutorial.



==A new brush==
[[File:map_tutorial_4.png|thumb|Creating new brushes]]
Until now, we've only worked with the brush that Trenchbroom created for us, but now we want to make a wall, so we need a new brush. First, let's '''Deselect''' our floor by either '''clicking in the black void''', or by pressing '''Ctrl-Shift-A'''. Now, to make a new brush, '''Left Click and Drag''' in the 3D view. While continuing to '''Hold Left Click''', you effect the newly created brush's height by '''Scrolling the MouseWheel'''. Don't be concerned if the brush is not perfectly sized or positioned, you can always edit it. To '''Move a Brush''', all you need to do is '''Left Click and Drag''' a selected brush. Let's position our wall at one of the edges of our floor, and size it 256x16x128 as shown in the picture to the right. Make sure the edges are perfectly aligned as we put brushes together. Also, give it a nice wall texture, I am using ''city2_8''.



==Even more brushes==
[[File:map_tutorial_5.png|thumb|Duplication]]
Let's keep going with constructing our room. To make another wall, let's '''Duplicate''' the wall we already have by selecting it, and pressing '''Ctrl-D'''. Now position it on the opposite edge of our floor. Let's also make a ceiling, so select the floor, and duplicate it as well. Now, we need our brush to '''Move Vertically''', and for that, we '''Hold down Alt''' before while our brush, notice your cursor changes to 2 arrows pointing up and down. Let's give this a nice ceiling texture, I am using ''city5_3''.

Although not pictured to the right, let's close up our room now. '''Select Multiple Brushes''' by '''Ctrl-Left Clicking''' them, and select both of our walls. Duplicate them, and let's rotate them. You can quickly '''Rotate 90° Horizontally''' by pressing '''Ctrl-Left Arrow''' and '''Ctrl-Right Arrow'''. You can also '''Rotate 90° Vertically''' by pressing '''Ctrl-Up Arrow''' and '''Ctrl-Down Arrow'''. You can also '''Flip Horizontally''' with '''Ctrl-F''' and '''Flip Vertically''' with '''Ctrl-Alt-F'''. 

Again, make sure all of our brushes have their edges aligned so our room is sealed. For our simple room this is not the end of the world if they are not, but it is good habit to get started with and will be required on larger, more complex maps to ensure they do not [[leak]]. Leaks occur when your brushes don't form a complete seal around the playable world, and prevent the compiling process Vis from running.



==Add some functionality==
[[File:map_tutorial_6.png|thumb|Our first entity]]
Now that we have a closed room, let's do some work so we can use it. The first thing to do is make a place for the player to start the level at. Go to the Entity tab in Trenchbroom, and scroll down a little in the Entity Browser on the bottom right of the editor. Find the model of Quakeguy with the words '''info_player_start''' under it. '''Left Click and Drag''' it into your 3D view to place it. info_player_start is an entity which does not need any more set up than that to work!

You do not always have to use the entity browser to make entities. You could also have done this by '''Right Clicking''' in the 3D view, and navigating the menu '''Create Point Entity&gt;Info&gt;Player_start'''.



==Lights and Properties==
[[File:map_tutorial_7.png|thumb|Setting Properties]]
Technically we could compile and try our map now, but let's add some more stuff to our map first.  How about a light? Either drag the entity '''Light''' from the entity browser, or in the '''Right Click Menu''' select '''Create Point Entity&gt;Light&gt;Light'''. Move this somewhere in the center of our room. Now, we do actually need to modify this entity for it to work right. With the light still selected and the Entity tab open, notice in the upper right corner of Trenchbroom our entity's keys and values. Trenchbroom, as of this writing, only puts some very basic keys and values into entities, so for now you will want to refer to the [[Entity_guide|Entity Guide]] for all the keys and values you may need on your entities.

We want to set the brightness of our light. To do this, we need a '''New Key'''. Click on the '''+ button''' next to our list of keys, and rename our newly created key &quot;light&quot; and set it's value to &quot;200&quot;.

==Triggers!==
[[File:map_tutorial_8.png|thumb|Making a Trigger]]
Let's also make sure everyone knows how great Quake is by telling them. To do this, we're going to make a brush entity that when the player walks into it, it displays a message. First, we need to make a brush as normal. This is going to be a trigger, a type of brush entity that is invisible and nonsolid, so it doesn't matter what texture is on our brush, but general convention is to use the texture ''trigger''. Now, '''Right Click''' with our brush still selected, and go to '''Create Brush Entity&gt;Trigger&gt;Multiple'''. You should now see the text 'trigger_multiple' over our brush. Add some keys to this entity, &quot;Message&quot; with the value &quot;Quake is Great!&quot;, and &quot;wait&quot; with the value &quot;5&quot;. Message is the text we will display to the player, wait is how long the game should wait between triggering again so we aren't spamming our message constantly.



=Time to compile!=
Let's save our map now with '''File&gt;Save''' or '''Ctrl-S'''. Place it somewhere smart, we'll be using the .map we've created. The various Quake compilers are all [http://en.wikipedia.org/wiki/Command-line_interface command line interfaces], but let's use a nice front end to make it easy for us.

==Setting up the GUI==
Now it's time to use Necros' CompilingGUI, as pictured below. Let's make sure this are set up properly before we begin.
[[File:compile_gui.png|thumb|center|upright=2.5]]
In '''Settings&gt;Preferences''', we need to point the program at the location of our tools folder, which is the directory on your computer where you places the TyrUtils compilers you downloaded earlier. Ensure that the .exe file names of each of the compilers is correct (do not worry about skip.exe, we will not be using it). For now, we do not need to set any Command-line Arguments. 

Working Folder should be set to where you save your .map files. Output Folder needs to be set to Quake's '''\id1\maps\''' directory where it searches for levels, such as '''C:\Quake\id1\maps\'''. You may need to create this directory if you do not already have it. When mapping for mods, such as [[Quoth]], this directory will be '''\quoth\maps\''' instead. Exit Preferences once this is all complete.

In the main dialog of the GUI, we need to set a couple more things. First is the '''Source Map''', which is the .map file we just created. We also need to set the '''Quake Engine''' we are using. This will be an executable inside your Quake directory, such as &quot;GLQuake.exe&quot; or &quot;Quakespasm.exe&quot; or &quot;Darkplaces.exe&quot;. If you require any Command-line Arguments when running Quake, or if you are mapping for a mod (ex: &quot;-hipnotic -game quoth&quot; when making a map for the Quoth mod), place them in the line provided.

==QBSP==
[[File:map_tutorial_qbsp.jpg|thumb|Our map in game!]]
Now that things are set up, let's compile and try out our map! We're going to compile our map step by step to see the different parts in action, but you could run them all at once if you wanted as they will run in order. In the main dialog of the GUI, check '''only''' the box next to the word &quot;QBSP&quot;, and the box in the lower right corner which says &quot;Run Quake&quot;, and uncheck all other boxes. Now let's compile, go to '''File&gt;Compile''' or press '''Ctrl-C'''. A command-prompt dialog box will appear on screen for a second or so, and then Quake should launch and you'll be playing your map!

If you've been paying attention, you shouldn't be surprised to see that your map is a fully bright box with no shadowing. This is because we have only run QBSP on our .map. QBSP turns all our brushes into polygons which are nicely organized for Quake into a format called .bsp, in a process called [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].

QBSP is also responsible for taking your textures out of your .wad and compiling them into the .bsp. This means you do not need to supply a .wad alongside your level when sending it to other people, and that a tool such as [[TexMex]] is able to open and extract textures from a .bsp file!

See [[QBSP]] for more information and common command-line arguments.

==Light==
[[File:map_tutorial_light.jpg|thumb|Light and Shadow]]
Once you're done examining our full-bright room, exit Quake and let's get some light working. Back in our compiling GUI, uncheck the box next to the word &quot;QBSP&quot;, and check the box next to the word &quot;LIGHT&quot;. Compile again, and once back in Quake, our map is now nicely shadowed! 

General lighting in Quake is not dynamic, but is calculated by our light compiler into what are known as &quot;lightmaps&quot;, which are stored in our .bsp file. By default, all lights have a linear falloff, but more modern light compilers (such as the light compiler provided in TyrUtils) have functionality to support other falloffs. Light, especially with some of it's command-line arguments for improving details, on more complex maps can often take awhile to complete, so often when testing small changes to your map like a couple new monsters, you may not bother running it. This may be obvious, but if you have no light entities in your map and run light, your map will be fully dark.

See [[Light (map compiling)]] for more information and common command-line arguments.

==Vis==
[[File:map_tutorial_vis1.jpg|thumb|No Vis]][[File:map_tutorial_vis2.jpg|thumb|Vis'd]]
You can now compile with Vis if you'd like. Unfortunately, our little single room map is a bit too simple to actually show what it does. Vis is a process which computes visibility of areas, and creates a table known as the [http://en.wikipedia.org/wiki/Potentially_visible_set Potentially Visible Set] (often shortened to PVS), which Quake uses to determine areas which the player cannot possibly see, and thus, does not need to render. Note that brush entities (or any entities), such as doors or triggers, do not block Vis, nor do special brushes like clips or liquids. Only solid brush geometry.

I have constructed a simple snaking hallway map to demonstrate. In the pictures to the right, I have enabled &quot;r_showtris 1&quot; in Quakespasm, which outlines the polygons rendered by Quake. Notice that in the picture with no Vis, there are polygons in the distance around corners which are being rendered, which in the Vis'd picture, these polygons are no longer rendered. Even in this simple map it is not a huge amount of savings, but as your levels get larger and more complex, this will be a large optimization.

Vis requires that a .bsp be fully sealed to run. This means that all of your entities must be surrounded by brushes, and cannot trace a line into the [[void]]. QBSP will warn you when a .bsp [[leaks]] like this, and generate a [[pointfile]] which can be loaded in either Quake or Trenchbroom to help you find where you need to seal your level.

It should be noted that in general, Vis on a more complex map will be the compiling tool which takes the longest. Vis times are effected by the size of rooms, and the complexity of brushes. Large, open areas and very complex geometry can lead to massive compile times (days or weeks!) even on modern CPUs and are part of the reason why things like this are rare in Quake. When you are just starting out, it is advised to build areas the size and detail seen in stock Quake until you have a feel for how Vis times are effected.

See [[Vis]] for more information and common command-line arguments.</text>
      <sha1>5yorb2vh0juqznnf8jipzl3whjr0qwl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Getting Started Modding</title>
    <ns>0</ns>
    <id>457</id>
    <revision>
      <id>835</id>
      <timestamp>2008-05-16T10:09:10Z</timestamp>
      <contributor>
        <ip>59.167.116.43</ip>
      </contributor>
      <comment>New page: --MOVED FROM OLD WIKI NEEDS CLEANING--  This is intended as a basic guide to getting the resources needed to start making a mod, some suggestions on first mods to make to learn the languag...</comment>
      <text xml:space="preserve" bytes="6827">--MOVED FROM OLD WIKI NEEDS CLEANING--

This is intended as a basic guide to getting the resources needed to start making a mod, some suggestions on first mods to make to learn the language and nature of Quake modding, and links to forums and IRC channels and other resources relevant to Quake modding.

N.B. there is a DarkPlaces bias to this page, as it is a good engine for developing mods, any other engine authors should feel free to add links to their ?extensions.qc files and other resources relevant to their engine, but please try to keep this page a managable size, as it is only a getting started guide, not the whole Wiki :)

Making your ?mod directory:
First you need to make a directory inside your quake directory, for instance leetrockets, or mymod (you can rename it later), all files and ?paks inside this directory will be loaded at a higher priority than the ones in the id1 directory, but files you did not replace will come from the id1 directory, so for instance if you make a mymod/?progs.dat (by compiling QuakeC code), it will override the ?progs.dat file contained in id1/pak0.pak, thus changing the gameplay behavior, but all other files come from the id1 directory (for instance progs/player.mdl in id1/pak0.pak). It is common for people and this wiki to refer to your mod directory as mymod, do not take this literally, it simply means whatever you named your mod directory, and most filenames mentioned in Quake modding discussion are inside a mod directory, so when people talk about ?progs.dat they are referring to quake/mymod/?progs.dat or similar files.

Then make a quake/mymod/qc directory to hold the QuakeC code you will be working on, you can name this directory something else if you prefer (id Software called it progs, some people call it src).

Pick a base source code: Quake 1.06 qc source: httphttp://icculus.org/twilight/darkplaces/files/id1qc.zip (extract to mod/qc directory if you want singleplayer support)
Quake 1.06 qc source with singleplayer removed: httphttp://icculus.org/twilight/darkplaces/files/mponlyqc.zip (or extract this to mod/qc directory if you don't) (Question: where to get a good qw qc source zip?)
hipnotic mission pack 1 source: httphttp://public.www.planetmirror.com/pub/idgames2/more_idstuff/hipnotic/qc.zip (due to HUD differences you should run your mod with the commandline options -hipnotic -game mymod)
rogue mission pack 2 source: httphttp://public.www.planetmirror.com/pub/idgames2/more_idstuff/doe_qconly.zip (due to HUD differences you should run your mod with the commandline options -rogue -game mymod)

Take your pick of one of the two most popular compilers, or alternate whenever you feel like it:
FTEQCC compiler can be found here in commandline and Windows-GUI flavors: httphttp://sourceforge.net/project/showfiles.php?group_id=116842
FrikQCC compiler can be found here in commandline and Windows-GUI flavors: httphttp://www.inside3d.com/frikbot/projects.shtml

Engine specific addon files:
Latest DarkPlaces ?dpextensions.qc file: httphttp://cvs.icculus.org/*checkout*/cvs/twilight/dpmod/qc/dpextensions.qc (place in mymod/qc directory, add ?dpextensions.qc after ?defs.qc in ?progs.src file, allows use of QuakeC extensions supported by DarkPlaces engine, some of these features are compatible with other engines also)
Latest DarkPlaces ?effectinfo.txt file: httphttp://cvs.icculus.org/*checkout*/cvs/twilight/dpmod/effectinfo.txt (place in mymod directory, allows modification of particle effects when running in DarkPlaces engine)

An important note on pak archives in the various Quake engines:
Quake behavior: paks override files (meaning if the ?pak contains a default.cfg, the user can not make their own default.cfg as it will be ignored), sequentially numbered packs named pak0.pak, then pak1.pak, and so on (if there is a gap it stops looking for higher numbered paks, so pak2.pak will not be loaded if pak1.pak or pak0.pak is missing), a limit of 7 open pak archives (this counts both id1 and your mod, so be careful not to have too many pak archives).
DarkPlaces behavior: files override pk3 archives which override pak archives, anything with a .pak or .pk3 extension is loaded (.pk3 is a renamed zip archive and is smaller because it is compressed), no limit on number of paks.
Most other engines use the Quake behavior.

A note about stealing content from other games:
First of all, please don't, it's better to see some originality in the art in Quake mods.
Secondly, you can be sued for Copyright Infringement if you do this, as the owner of the copyright controls the distribution terms (formally known as the License Agreement), and these other games usually don't have License Agreements that allow use in other games.
If you must borrow content, it is best to borrow it from legitimate sources such as Nexuiz httphttp://www.nexuiz.com or ?OpenQuartz httphttp://openquartz.sourceforge.net/ which use the GPL license which allows redistribution and modification under the terms of the GPL.
You may also ask other mod teams if you can get a license agreement for use of some of their files that are not under GPL, chances are good that they will say yes (remember however that yes is not enough, you need to include a license agreement regarding their copyrighted works).

Recommended forums:
httphttp://inside3d.com/

Recommended IRC channels:
irc://irc.anynet.org/qc (modding)
irc://irc.anynet.org/darkplaces (modding, darkplaces engine)
irc://irc.enterthegame.com/level_design (level design)
irc://irc.quakenet.org/terrafusion (level design)
irc://irc.anynet.org/quakedev (engine development)
irc://irc.anynet.org/venr2 (modding, venr2 engine)
irc://irc.anynet.org/mindart (modding, FrikaC's tools)

For a quick crash course in QuakeC modding, try modifying a weapon to fire something different, or at least change the damage values, the relevant code can be found in weapons.qc, for instance ?T_MissileTouch is the function called when a rocket hits something, spike_touch and superspike_touch are the functions called with nails or super nails hit things, ?launch_spike is the function that creates a nail... ?W_Attack contains refire times and calls the weapon fire functions, explore and have fun.

Basic tips about weapon code:
.touch is the function called when a projectile hits something (in this function self and other refer to the projectile and the hit entity, respectively), ?T_Damage and ?T_RadiusDamage are functions to call to do damage to other entities, sound plays a sound effect, the WriteByte and related function calls create network messages describing an explosion or other effect message that the client understands (however in DarkPlaces engine there are also functions to do these annoying WriteByte messages for you, such as ?te_explosion, ?te_gunshot, etc).

Good luck, and have fun :)</text>
      <sha1>4lldqr6badv3cfzwwxrm2ie5jbkpvmi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>836</id>
      <parentid>835</parentid>
      <timestamp>2008-05-16T10:13:47Z</timestamp>
      <contributor>
        <ip>59.167.116.43</ip>
      </contributor>
      <text xml:space="preserve" bytes="6905">--MOVED FROM OLD WIKI NEEDS CLEANING--


= Getting started with Quake modding =


This is intended as a basic guide to getting the resources needed to start making a mod, some suggestions on first mods to make to learn the language and nature of [[Quake]] modding, and links to forums and IRC channels and other resources relevant to [[Quake]] modding.

N.B. there is a [[DarkPlaces]] bias to this page, as it is a good engine for developing mods, any other engine authors should feel free to add links to their ?extensions.qc files and other resources relevant to their engine, but please try to keep this page a managable size, as it is only a getting started guide, not the whole Wiki :)

Making your ?mod directory:&lt;br&gt;
First you need to make a directory inside your quake directory, for instance leetrockets, or mymod (you can rename it later), all files and ?paks inside this directory will be loaded at a higher priority than the ones in the id1 directory, but files you did not replace will come from the id1 directory, so for instance if you make a mymod/?progs.dat (by compiling [[QuakeC]] code), it will override the ?progs.dat file contained in id1/pak0.pak, thus changing the gameplay behavior, but all other files come from the id1 directory (for instance progs/player.mdl in id1/pak0.pak). It is common for people and this wiki to refer to your mod directory as mymod, do not take this literally, it simply means whatever you named your mod directory, and most filenames mentioned in Quake modding discussion are inside a mod directory, so when people talk about ?progs.dat they are referring to quake/mymod/?progs.dat or similar files.

Then make a quake/mymod/qc directory to hold the QuakeC code you will be working on, you can name this directory something else if you prefer (id Software called it progs, some people call it src).

Pick a base source code: Quake 1.06 qc source: http://icculus.org/twilight/darkplaces/files/id1qc.zip (extract to mod/qc directory if you want singleplayer support)
Quake 1.06 qc source with singleplayer removed: http://icculus.org/twilight/darkplaces/files/mponlyqc.zip (or extract this to mod/qc directory if you don't) (Question: where to get a good qw qc source zip?)
hipnotic mission pack 1 source: http://public.www.planetmirror.com/pub/idgames2/more_idstuff/hipnotic/qc.zip (due to HUD differences you should run your mod with the commandline options -hipnotic -game mymod)
rogue mission pack 2 source: http://public.www.planetmirror.com/pub/idgames2/more_idstuff/doe_qconly.zip (due to HUD differences you should run your mod with the commandline options -rogue -game mymod)

Take your pick of one of the two most popular compilers, or alternate whenever you feel like it:&lt;br&gt;
FTEQCC compiler can be found here in commandline and Windows-GUI flavors: http://sourceforge.net/project/showfiles.php?group_id=116842
FrikQCC compiler can be found here in commandline and Windows-GUI flavors: http://www.inside3d.com/frikbot/projects.shtml

Engine specific addon files:&lt;br&gt;
Latest DarkPlaces ?dpextensions.qc file: http://cvs.icculus.org/*checkout*/cvs/twilight/dpmod/qc/dpextensions.qc (place in mymod/qc directory, add ?dpextensions.qc after ?defs.qc in ?progs.src file, allows use of QuakeC extensions supported by DarkPlaces engine, some of these features are compatible with other engines also)
Latest DarkPlaces ?effectinfo.txt file: http://cvs.icculus.org/*checkout*/cvs/twilight/dpmod/effectinfo.txt (place in mymod directory, allows modification of particle effects when running in DarkPlaces engine)

An important note on pak archives in the various Quake engines:
Quake behavior: paks override files (meaning if the ?pak contains a default.cfg, the user can not make their own default.cfg as it will be ignored), sequentially numbered packs named pak0.pak, then pak1.pak, and so on (if there is a gap it stops looking for higher numbered paks, so pak2.pak will not be loaded if pak1.pak or pak0.pak is missing), a limit of 7 open pak archives (this counts both id1 and your mod, so be careful not to have too many pak archives).
DarkPlaces behavior: files override pk3 archives which override pak archives, anything with a .pak or .pk3 extension is loaded (.pk3 is a renamed zip archive and is smaller because it is compressed), no limit on number of paks.
Most other engines use the Quake behavior.

A note about stealing content from other games:&lt;br&gt;
First of all, please don't, it's better to see some originality in the art in Quake mods.
Secondly, you can be sued for Copyright Infringement if you do this, as the owner of the copyright controls the distribution terms (formally known as the License Agreement), and these other games usually don't have License Agreements that allow use in other games.
If you must borrow content, it is best to borrow it from legitimate sources such as Nexuiz http://www.nexuiz.com or ?OpenQuartz http://openquartz.sourceforge.net/ which use the GPL license which allows redistribution and modification under the terms of the GPL.
You may also ask other mod teams if you can get a license agreement for use of some of their files that are not under GPL, chances are good that they will say yes (remember however that yes is not enough, you need to include a license agreement regarding their copyrighted works).

Recommended forums:&lt;br&gt;
http://inside3d.com/&lt;br&gt;

Recommended IRC channels:&lt;br&gt;
irc://irc.anynet.org/qc (modding)&lt;br&gt;
irc://irc.anynet.org/darkplaces (modding, darkplaces engine)&lt;br&gt;
irc://irc.enterthegame.com/level_design (level design)&lt;br&gt;
irc://irc.quakenet.org/terrafusion (level design)&lt;br&gt;
irc://irc.anynet.org/quakedev (engine development)&lt;br&gt;
irc://irc.anynet.org/venr2 (modding, venr2 engine)&lt;br&gt;
irc://irc.anynet.org/mindart (modding, FrikaC's tools)&lt;br&gt;

For a quick crash course in [[QuakeC]] modding, try modifying a weapon to fire something different, or at least change the damage values, the relevant code can be found in weapons.qc, for instance ?T_MissileTouch is the function called when a rocket hits something, spike_touch and superspike_touch are the functions called with nails or super nails hit things, ?launch_spike is the function that creates a nail... ?W_Attack contains refire times and calls the weapon fire functions, explore and have fun.

Basic tips about weapon code:&lt;br&gt;
.touch is the function called when a projectile hits something (in this function self and other refer to the projectile and the hit entity, respectively), ?T_Damage and ?T_RadiusDamage are functions to call to do damage to other entities, sound plays a sound effect, the WriteByte and related function calls create network messages describing an explosion or other effect message that the client understands (however in DarkPlaces engine there are also functions to do these annoying WriteByte messages for you, such as ?te_explosion, ?te_gunshot, etc).

Good luck, and have fun :)</text>
      <sha1>n6v5qwopmxhjzu3vgsugln6n76hkuck</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>837</id>
      <parentid>836</parentid>
      <timestamp>2008-05-16T10:16:52Z</timestamp>
      <contributor>
        <ip>59.167.116.43</ip>
      </contributor>
      <text xml:space="preserve" bytes="6950">--MOVED FROM OLD WIKI NEEDS CLEANING--


== Getting started with Quake modding ==


This is intended as a basic guide to getting the resources needed to start making a mod, some suggestions on first mods to make to learn the language and nature of [[Quake]] modding, and links to forums and IRC channels and other resources relevant to [[Quake]] modding.

N.B. there is a [[DarkPlaces]] bias to this page, as it is a good engine for developing mods, any other engine authors should feel free to add links to their ?extensions.qc files and other resources relevant to their engine, but please try to keep this page a managable size, as it is only a getting started guide, not the whole Wiki :)

'''Making your mod directory:'''&lt;br&gt;
First you need to make a directory inside your quake directory, for instance leetrockets, or mymod (you can rename it later), all files and ?paks inside this directory will be loaded at a higher priority than the ones in the id1 directory, but files you did not replace will come from the id1 directory, so for instance if you make a mymod/?progs.dat (by compiling [[QuakeC]] code), it will override the ?progs.dat file contained in id1/pak0.pak, thus changing the gameplay behavior, but all other files come from the id1 directory (for instance progs/player.mdl in id1/pak0.pak). It is common for people and this wiki to refer to your mod directory as mymod, do not take this literally, it simply means whatever you named your mod directory, and most filenames mentioned in Quake modding discussion are inside a mod directory, so when people talk about ?progs.dat they are referring to quake/mymod/?progs.dat or similar files.

Then make a quake/mymod/qc directory to hold the QuakeC code you will be working on, you can name this directory something else if you prefer (id Software called it progs, some people call it src).

Pick a base source code: Quake 1.06 qc source: http://icculus.org/twilight/darkplaces/files/id1qc.zip (extract to mod/qc directory if you want singleplayer support)
Quake 1.06 qc source with singleplayer removed: http://icculus.org/twilight/darkplaces/files/mponlyqc.zip (or extract this to mod/qc directory if you don't) (Question: where to get a good qw qc source zip?)
hipnotic mission pack 1 source: http://public.www.planetmirror.com/pub/idgames2/more_idstuff/hipnotic/qc.zip (due to HUD differences you should run your mod with the commandline options -hipnotic -game mymod)
rogue mission pack 2 source: http://public.www.planetmirror.com/pub/idgames2/more_idstuff/doe_qconly.zip (due to HUD differences you should run your mod with the commandline options -rogue -game mymod)

'''Take your pick of one of the two most popular compilers, or alternate whenever you feel like it:'''&lt;br&gt;
FTEQCC compiler can be found here in commandline and Windows-GUI flavors: http://sourceforge.net/project/showfiles.php?group_id=116842
FrikQCC compiler can be found here in commandline and Windows-GUI flavors: http://www.inside3d.com/frikbot/projects.shtml

'''Engine specific addon files:'''&lt;br&gt;
Latest DarkPlaces ?dpextensions.qc file: http://cvs.icculus.org/*checkout*/cvs/twilight/dpmod/qc/dpextensions.qc (place in mymod/qc directory, add ?dpextensions.qc after ?defs.qc in ?progs.src file, allows use of QuakeC extensions supported by DarkPlaces engine, some of these features are compatible with other engines also)
Latest DarkPlaces ?effectinfo.txt file: http://cvs.icculus.org/*checkout*/cvs/twilight/dpmod/effectinfo.txt (place in mymod directory, allows modification of particle effects when running in DarkPlaces engine)

'''An important note on pak archives in the various Quake engines:'''&lt;br&gt;
Quake behavior: paks override files (meaning if the ?pak contains a default.cfg, the user can not make their own default.cfg as it will be ignored), sequentially numbered packs named pak0.pak, then pak1.pak, and so on (if there is a gap it stops looking for higher numbered paks, so pak2.pak will not be loaded if pak1.pak or pak0.pak is missing), a limit of 7 open pak archives (this counts both id1 and your mod, so be careful not to have too many pak archives).
DarkPlaces behavior: files override pk3 archives which override pak archives, anything with a .pak or .pk3 extension is loaded (.pk3 is a renamed zip archive and is smaller because it is compressed), no limit on number of paks.
Most other engines use the Quake behavior.

'''A note about stealing content from other games:'''&lt;br&gt;
First of all, please don't, it's better to see some originality in the art in Quake mods.
Secondly, you can be sued for Copyright Infringement if you do this, as the owner of the copyright controls the distribution terms (formally known as the License Agreement), and these other games usually don't have License Agreements that allow use in other games.
If you must borrow content, it is best to borrow it from legitimate sources such as Nexuiz http://www.nexuiz.com or ?OpenQuartz http://openquartz.sourceforge.net/ which use the GPL license which allows redistribution and modification under the terms of the GPL.
You may also ask other mod teams if you can get a license agreement for use of some of their files that are not under GPL, chances are good that they will say yes (remember however that yes is not enough, you need to include a license agreement regarding their copyrighted works).

'''Recommended forums:'''
http://inside3d.com/

'''Recommended IRC channels:'''&lt;br&gt;
irc://irc.anynet.org/qc (modding)&lt;br&gt;
irc://irc.anynet.org/darkplaces (modding, darkplaces engine)&lt;br&gt;
irc://irc.enterthegame.com/level_design (level design)&lt;br&gt;
irc://irc.quakenet.org/terrafusion (level design)&lt;br&gt;
irc://irc.anynet.org/quakedev (engine development)&lt;br&gt;
irc://irc.anynet.org/venr2 (modding, venr2 engine)&lt;br&gt;
irc://irc.anynet.org/mindart (modding, FrikaC's tools)&lt;br&gt;

For a quick crash course in [[QuakeC]] modding, try modifying a weapon to fire something different, or at least change the damage values, the relevant code can be found in weapons.qc, for instance ?T_MissileTouch is the function called when a rocket hits something, spike_touch and superspike_touch are the functions called with nails or super nails hit things, ?launch_spike is the function that creates a nail... ?W_Attack contains refire times and calls the weapon fire functions, explore and have fun.

'''Basic tips about weapon code:'''&lt;br&gt;
.touch is the function called when a projectile hits something (in this function self and other refer to the projectile and the hit entity, respectively), ?T_Damage and ?T_RadiusDamage are functions to call to do damage to other entities, sound plays a sound effect, the WriteByte and related function calls create network messages describing an explosion or other effect message that the client understands (however in DarkPlaces engine there are also functions to do these annoying WriteByte messages for you, such as ?te_explosion, ?te_gunshot, etc).

Good luck, and have fun :)</text>
      <sha1>az8abmdc8wnenq1fbxqs14o9ggcij9i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1429</id>
      <parentid>837</parentid>
      <timestamp>2009-11-15T10:32:26Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <minor/>
      <comment>[[Getting started]] moved to [[Getting Started Modding]]</comment>
      <text xml:space="preserve" bytes="6950">--MOVED FROM OLD WIKI NEEDS CLEANING--


== Getting started with Quake modding ==


This is intended as a basic guide to getting the resources needed to start making a mod, some suggestions on first mods to make to learn the language and nature of [[Quake]] modding, and links to forums and IRC channels and other resources relevant to [[Quake]] modding.

N.B. there is a [[DarkPlaces]] bias to this page, as it is a good engine for developing mods, any other engine authors should feel free to add links to their ?extensions.qc files and other resources relevant to their engine, but please try to keep this page a managable size, as it is only a getting started guide, not the whole Wiki :)

'''Making your mod directory:'''&lt;br&gt;
First you need to make a directory inside your quake directory, for instance leetrockets, or mymod (you can rename it later), all files and ?paks inside this directory will be loaded at a higher priority than the ones in the id1 directory, but files you did not replace will come from the id1 directory, so for instance if you make a mymod/?progs.dat (by compiling [[QuakeC]] code), it will override the ?progs.dat file contained in id1/pak0.pak, thus changing the gameplay behavior, but all other files come from the id1 directory (for instance progs/player.mdl in id1/pak0.pak). It is common for people and this wiki to refer to your mod directory as mymod, do not take this literally, it simply means whatever you named your mod directory, and most filenames mentioned in Quake modding discussion are inside a mod directory, so when people talk about ?progs.dat they are referring to quake/mymod/?progs.dat or similar files.

Then make a quake/mymod/qc directory to hold the QuakeC code you will be working on, you can name this directory something else if you prefer (id Software called it progs, some people call it src).

Pick a base source code: Quake 1.06 qc source: http://icculus.org/twilight/darkplaces/files/id1qc.zip (extract to mod/qc directory if you want singleplayer support)
Quake 1.06 qc source with singleplayer removed: http://icculus.org/twilight/darkplaces/files/mponlyqc.zip (or extract this to mod/qc directory if you don't) (Question: where to get a good qw qc source zip?)
hipnotic mission pack 1 source: http://public.www.planetmirror.com/pub/idgames2/more_idstuff/hipnotic/qc.zip (due to HUD differences you should run your mod with the commandline options -hipnotic -game mymod)
rogue mission pack 2 source: http://public.www.planetmirror.com/pub/idgames2/more_idstuff/doe_qconly.zip (due to HUD differences you should run your mod with the commandline options -rogue -game mymod)

'''Take your pick of one of the two most popular compilers, or alternate whenever you feel like it:'''&lt;br&gt;
FTEQCC compiler can be found here in commandline and Windows-GUI flavors: http://sourceforge.net/project/showfiles.php?group_id=116842
FrikQCC compiler can be found here in commandline and Windows-GUI flavors: http://www.inside3d.com/frikbot/projects.shtml

'''Engine specific addon files:'''&lt;br&gt;
Latest DarkPlaces ?dpextensions.qc file: http://cvs.icculus.org/*checkout*/cvs/twilight/dpmod/qc/dpextensions.qc (place in mymod/qc directory, add ?dpextensions.qc after ?defs.qc in ?progs.src file, allows use of QuakeC extensions supported by DarkPlaces engine, some of these features are compatible with other engines also)
Latest DarkPlaces ?effectinfo.txt file: http://cvs.icculus.org/*checkout*/cvs/twilight/dpmod/effectinfo.txt (place in mymod directory, allows modification of particle effects when running in DarkPlaces engine)

'''An important note on pak archives in the various Quake engines:'''&lt;br&gt;
Quake behavior: paks override files (meaning if the ?pak contains a default.cfg, the user can not make their own default.cfg as it will be ignored), sequentially numbered packs named pak0.pak, then pak1.pak, and so on (if there is a gap it stops looking for higher numbered paks, so pak2.pak will not be loaded if pak1.pak or pak0.pak is missing), a limit of 7 open pak archives (this counts both id1 and your mod, so be careful not to have too many pak archives).
DarkPlaces behavior: files override pk3 archives which override pak archives, anything with a .pak or .pk3 extension is loaded (.pk3 is a renamed zip archive and is smaller because it is compressed), no limit on number of paks.
Most other engines use the Quake behavior.

'''A note about stealing content from other games:'''&lt;br&gt;
First of all, please don't, it's better to see some originality in the art in Quake mods.
Secondly, you can be sued for Copyright Infringement if you do this, as the owner of the copyright controls the distribution terms (formally known as the License Agreement), and these other games usually don't have License Agreements that allow use in other games.
If you must borrow content, it is best to borrow it from legitimate sources such as Nexuiz http://www.nexuiz.com or ?OpenQuartz http://openquartz.sourceforge.net/ which use the GPL license which allows redistribution and modification under the terms of the GPL.
You may also ask other mod teams if you can get a license agreement for use of some of their files that are not under GPL, chances are good that they will say yes (remember however that yes is not enough, you need to include a license agreement regarding their copyrighted works).

'''Recommended forums:'''
http://inside3d.com/

'''Recommended IRC channels:'''&lt;br&gt;
irc://irc.anynet.org/qc (modding)&lt;br&gt;
irc://irc.anynet.org/darkplaces (modding, darkplaces engine)&lt;br&gt;
irc://irc.enterthegame.com/level_design (level design)&lt;br&gt;
irc://irc.quakenet.org/terrafusion (level design)&lt;br&gt;
irc://irc.anynet.org/quakedev (engine development)&lt;br&gt;
irc://irc.anynet.org/venr2 (modding, venr2 engine)&lt;br&gt;
irc://irc.anynet.org/mindart (modding, FrikaC's tools)&lt;br&gt;

For a quick crash course in [[QuakeC]] modding, try modifying a weapon to fire something different, or at least change the damage values, the relevant code can be found in weapons.qc, for instance ?T_MissileTouch is the function called when a rocket hits something, spike_touch and superspike_touch are the functions called with nails or super nails hit things, ?launch_spike is the function that creates a nail... ?W_Attack contains refire times and calls the weapon fire functions, explore and have fun.

'''Basic tips about weapon code:'''&lt;br&gt;
.touch is the function called when a projectile hits something (in this function self and other refer to the projectile and the hit entity, respectively), ?T_Damage and ?T_RadiusDamage are functions to call to do damage to other entities, sound plays a sound effect, the WriteByte and related function calls create network messages describing an explosion or other effect message that the client understands (however in DarkPlaces engine there are also functions to do these annoying WriteByte messages for you, such as ?te_explosion, ?te_gunshot, etc).

Good luck, and have fun :)</text>
      <sha1>az8abmdc8wnenq1fbxqs14o9ggcij9i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1854</id>
      <parentid>1429</parentid>
      <timestamp>2013-03-25T00:32:44Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="6974">--MOVED FROM OLD WIKI NEEDS CLEANING--


== Getting started with Quake modding ==


This is intended as a basic guide to getting the resources needed to start making a mod, some suggestions on first mods to make to learn the language and nature of [[Quake]] modding, and links to forums and IRC channels and other resources relevant to [[Quake]] modding.

N.B. there is a [[DarkPlaces]] bias to this page, as it is a good engine for developing mods, any other engine authors should feel free to add links to their ?extensions.qc files and other resources relevant to their engine, but please try to keep this page a managable size, as it is only a getting started guide, not the whole Wiki :)

'''Making your mod directory:'''&lt;br&gt;
First you need to make a directory inside your quake directory, for instance leetrockets, or mymod (you can rename it later), all files and ?paks inside this directory will be loaded at a higher priority than the ones in the id1 directory, but files you did not replace will come from the id1 directory, so for instance if you make a mymod/?progs.dat (by compiling [[QuakeC]] code), it will override the ?progs.dat file contained in id1/pak0.pak, thus changing the gameplay behavior, but all other files come from the id1 directory (for instance progs/player.mdl in id1/pak0.pak). It is common for people and this wiki to refer to your mod directory as mymod, do not take this literally, it simply means whatever you named your mod directory, and most filenames mentioned in Quake modding discussion are inside a mod directory, so when people talk about ?progs.dat they are referring to quake/mymod/?progs.dat or similar files.

Then make a quake/mymod/qc directory to hold the QuakeC code you will be working on, you can name this directory something else if you prefer (id Software called it progs, some people call it src).

Pick a base source code: Quake 1.06 qc source: http://icculus.org/twilight/darkplaces/files/id1qc.zip (extract to mod/qc directory if you want singleplayer support)
Quake 1.06 qc source with singleplayer removed: http://icculus.org/twilight/darkplaces/files/mponlyqc.zip (or extract this to mod/qc directory if you don't) (Question: where to get a good qw qc source zip?)
hipnotic mission pack 1 source: http://public.www.planetmirror.com/pub/idgames2/more_idstuff/hipnotic/qc.zip (due to HUD differences you should run your mod with the commandline options -hipnotic -game mymod)
rogue mission pack 2 source: http://public.www.planetmirror.com/pub/idgames2/more_idstuff/doe_qconly.zip (due to HUD differences you should run your mod with the commandline options -rogue -game mymod)

'''Take your pick of one of the two most popular compilers, or alternate whenever you feel like it:'''&lt;br&gt;
FTEQCC compiler can be found here in commandline and Windows-GUI flavors: http://sourceforge.net/project/showfiles.php?group_id=116842
FrikQCC compiler can be found here in commandline and Windows-GUI flavors: http://www.inside3d.com/frikbot/projects.shtml

'''Engine specific addon files:'''&lt;br&gt;
Latest DarkPlaces ?dpextensions.qc file: http://cvs.icculus.org/*checkout*/cvs/twilight/dpmod/qc/dpextensions.qc (place in mymod/qc directory, add ?dpextensions.qc after ?defs.qc in ?progs.src file, allows use of QuakeC extensions supported by DarkPlaces engine, some of these features are compatible with other engines also)
Latest DarkPlaces ?effectinfo.txt file: http://cvs.icculus.org/*checkout*/cvs/twilight/dpmod/effectinfo.txt (place in mymod directory, allows modification of particle effects when running in DarkPlaces engine)

'''An important note on pak archives in the various Quake engines:'''&lt;br&gt;
Quake behavior: paks override files (meaning if the ?pak contains a default.cfg, the user can not make their own default.cfg as it will be ignored), sequentially numbered packs named pak0.pak, then pak1.pak, and so on (if there is a gap it stops looking for higher numbered paks, so pak2.pak will not be loaded if pak1.pak or pak0.pak is missing), a limit of 7 open pak archives (this counts both id1 and your mod, so be careful not to have too many pak archives).
DarkPlaces behavior: files override pk3 archives which override pak archives, anything with a .pak or .pk3 extension is loaded (.pk3 is a renamed zip archive and is smaller because it is compressed), no limit on number of paks.
Most other engines use the Quake behavior.

'''A note about stealing content from other games:'''&lt;br&gt;
First of all, please don't, it's better to see some originality in the art in Quake mods.
Secondly, you can be sued for Copyright Infringement if you do this, as the owner of the copyright controls the distribution terms (formally known as the License Agreement), and these other games usually don't have License Agreements that allow use in other games.
If you must borrow content, it is best to borrow it from legitimate sources such as Nexuiz http://www.nexuiz.com or ?OpenQuartz http://openquartz.sourceforge.net/ which use the GPL license which allows redistribution and modification under the terms of the GPL.
You may also ask other mod teams if you can get a license agreement for use of some of their files that are not under GPL, chances are good that they will say yes (remember however that yes is not enough, you need to include a license agreement regarding their copyrighted works).

'''Recommended forums:'''
http://inside3d.com/

'''Recommended IRC channels:'''&lt;br&gt;
irc://irc.anynet.org/qc (modding)&lt;br&gt;
irc://irc.anynet.org/darkplaces (modding, darkplaces engine)&lt;br&gt;
irc://irc.enterthegame.com/level_design (level design)&lt;br&gt;
irc://irc.quakenet.org/terrafusion (level design)&lt;br&gt;
irc://irc.anynet.org/quakedev (engine development)&lt;br&gt;
irc://irc.anynet.org/venr2 (modding, venr2 engine)&lt;br&gt;
irc://irc.anynet.org/mindart (modding, FrikaC's tools)&lt;br&gt;

For a quick crash course in [[QuakeC]] modding, try modifying a weapon to fire something different, or at least change the damage values, the relevant code can be found in weapons.qc, for instance ?T_MissileTouch is the function called when a rocket hits something, spike_touch and superspike_touch are the functions called with nails or super nails hit things, ?launch_spike is the function that creates a nail... ?W_Attack contains refire times and calls the weapon fire functions, explore and have fun.

'''Basic tips about weapon code:'''&lt;br&gt;
.touch is the function called when a projectile hits something (in this function self and other refer to the projectile and the hit entity, respectively), ?T_Damage and ?T_RadiusDamage are functions to call to do damage to other entities, sound plays a sound effect, the WriteByte and related function calls create network messages describing an explosion or other effect message that the client understands (however in DarkPlaces engine there are also functions to do these annoying WriteByte messages for you, such as ?te_explosion, ?te_gunshot, etc).

Good luck, and have fun :)
[[Category:DarkPlaces]]</text>
      <sha1>8sfcm378svcxn5kz21lfdggmcj3ds67</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Getting started</title>
    <ns>0</ns>
    <id>557</id>
    <redirect title="Getting Started" />
    <revision>
      <id>1430</id>
      <timestamp>2009-11-15T10:32:26Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>[[Getting started]] moved to [[Getting Started Modding]]</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[Getting Started Modding]]</text>
      <sha1>hok5nikjo6jwk1csr5up8dn0hulhxqu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1432</id>
      <parentid>1430</parentid>
      <timestamp>2009-11-15T10:33:48Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>Redirecting to [[Getting Started]]</comment>
      <text xml:space="preserve" bytes="29">#REDIRECT [[Getting Started]]</text>
      <sha1>30oac7q47vqtujr118lwu70cxyqaqmf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Gib</title>
    <ns>0</ns>
    <id>431</id>
    <revision>
      <id>745</id>
      <timestamp>2008-05-08T13:58:12Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: A term used when you deal so much damage to an enemy that they explode in viscera. In Quake it is usually a stream of blood and guts, most monsters also leave a damaged head on the ground.</comment>
      <text xml:space="preserve" bytes="188">A term used when you deal so much damage to an enemy that they explode in viscera. In Quake it is usually a stream of blood and guts, most monsters also leave a damaged head on the ground.</text>
      <sha1>1lirlu146g2k4yl8dvhnmwavobev19i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>771</id>
      <parentid>745</parentid>
      <timestamp>2008-05-08T15:31:08Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <text xml:space="preserve" bytes="1070">A gib is a remnant of flesh, separated from the body, the word is thought to have been derived from giblet.

In Quake gibs are utilized for an overkill event, also known as gibbing, for example bringing a player to -40 health, an [[Ogre]] to -80 or a [[Shambler]] to -60. The spawning of gibs is done using the [[ThrowGib]] function, citing various model files, typical gib1, gib2 and gib3.mdl.

There is also the sister function of [[ThrowHead]] which throws a head gib model unique to the entity that was gibbed. Head gibs are considered on par with a normal monster corpse, and thus take longer to be removed. Another form of gib occurrences in Quake is the use of [[SpawnMeatSpray]] which specifically calls the [[Zombie]] projectile gib model zom_gib.mdl, it is typically called during a melee attack.

Gib models are flagged to spawn a trail of blood particles during movement.

==Trivia==
*Small gibs are the chosen projectile of Zombies.
*[[Rotfish]] in stock Quake cannot be gibbed.
*Ogres, Fiends and Shamblers may all use SpawnMeatSpray in their melee attack.</text>
      <sha1>j7a165ce1uxvbuvjwv81wc09onzeimi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2962</id>
      <parentid>771</parentid>
      <timestamp>2013-05-05T17:46:04Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <text xml:space="preserve" bytes="2491">A '''gib''' is a remnant of flesh, separated from the body. The word had been originally coined by [[id software]]'s [http://en.wikipedia.org/wiki/Adrian_Carmack Adrian Carmack] during the development of ''[[Doom]]'', and is thought to be derived from [http://en.wiktionary.org/wiki/giblet ''giblet''].

In Quake, gibs are utilized for an overkill event, also known as '''gibbing''', bringing an [[entity]]'s [[health]] below a certain threshold, for example -40 for a [[player]], or -60 for a [[Shambler]]. '''To gib''' is a verb to describe such an overkill. 

The gib death manifests in an entity body being destroyed, and its head and several chunks of flesh thrown in random directions, spewing [[blood]] and [[bounce|bouncing]] around. Upon coming to a rest, gibs disappear after some time, except for heads.

==Technical==
Main gib code resides in [[player.qc]]. The spawning of gibs is done using the ''[[ThrowGib]]'' function, citing various [[model]] files, typical ''gib1.mdl'', ''gib2.mdl'' and ''gib3.mdl''.

There is also the sister function of [[ThrowHead]] which throws a head gib model unique to the entity that was gibbed. Head gibs are considered on par with a normal monster corpse, and thus take longer to be removed. 

Apart from the gib model string, these functions may also take the entity's health at the moment of death, which is used in some simple velocity calculation (via ''[[VelocityForDamage]]'') to change the gibs' initial [[speed]], thus representing the severity of the gibbing. Note that this health is normalized to -99 by ''[[Killed]]'' in [[combat.qc]]), though ''VelocityForDamage'' is able to take lower values.

Gib models are [[entity flags|flagged]] to spawn a trail of blood [[particle]]s during movement.

Another form of gib occurrences in Quake is the use of ''[[SpawnMeatSpray]]'' which specifically calls the [[zombie]] projectile gib model ''zom_gib.mdl''. These small gibs are the chosen projectile of [[zombie]]s. ''SpawnMeatSpray'' is also called during a melee attack by [[Ogre]]s, [[Fiend]]s and [[Shambler]]s.


==Trivia==
*[[Rotfish]] in stock Quake cannot be gibbed.
*[[MultiDamage]] handling functions (which collect and apply shotgun damage as a single take) employ some imperfect code that cannot reliably gib several targets at once.
*''gib1.mdl'' represents a dismembered human torso. Oddly enough, gibbing a demon spawns as much as ''three'' of these. In addition, gibbable rotfishes in [[Scourge of Armagon]] spawn one too.</text>
      <sha1>8tlsizaro860ma1zq2jswzby56xzn59</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2963</id>
      <parentid>2962</parentid>
      <timestamp>2013-05-09T14:21:45Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2551">A '''gib''' is a remnant of flesh, separated from the body. The word had been originally coined by [[id software]]'s [http://en.wikipedia.org/wiki/Adrian_Carmack Adrian Carmack] during the development of ''[[Doom]]'', and is thought to be derived from [http://en.wiktionary.org/wiki/giblet ''giblet''].

In Quake, gibs are utilized for an overkill event, also known as '''gibbing''', bringing an [[entity]]'s [[health]] below a certain threshold, for example -40 for a [[player]], or -60 for a [[Shambler]]. '''To gib''' is a verb to describe such an overkill. 

The gib death manifests itself in the entity's body reduced to a severed head and some assorted chunks of flesh, which are flung in random directions with considerable force, spewing [[blood]] and [[bounce|bouncing]] around. Upon coming to a rest, gibs disappear after some time, except for heads.

==Technical==
Main gib code resides in [[player.qc]]. The spawning of gibs is done using the ''[[ThrowGib]]'' function, citing various [[model]] files, typical ''gib1.mdl'', ''gib2.mdl'' and ''gib3.mdl''.

There is also the sister function of [[ThrowHead]] which throws a head gib model unique to the entity that was gibbed. Head gibs are considered on par with a normal monster corpse, and thus take longer to be removed. 

Apart from the gib model string, these functions may also take the entity's health at the moment of death, which is used in some simple velocity calculation (via ''[[VelocityForDamage]]'') to change the gibs' initial [[speed]], thus representing the severity of the gibbing. Note that this health is normalized to -99 by ''[[Killed]]'' in [[combat.qc]]), though ''VelocityForDamage'' is able to take lower values.

Gib models are [[entity flags|flagged]] to spawn a trail of blood [[particle]]s during movement.

Another form of gib occurrences in Quake is the use of ''[[SpawnMeatSpray]]'' which specifically calls the [[zombie]] projectile gib model ''zom_gib.mdl''. These small gibs are the chosen projectile of [[zombie]]s. ''SpawnMeatSpray'' is also called during a melee attack by [[Ogre]]s, [[Fiend]]s and [[Shambler]]s.


==Trivia==
*[[Rotfish]] in stock Quake cannot be gibbed.
*[[MultiDamage]] handling functions (which collect and apply shotgun damage as a single take) employ some imperfect code that is unable to reliably gib several targets at once.
*''gib2.mdl'' represents a dismembered human torso. Oddly enough, gibbing a [[scrag]] yields as much as ''three'' of these. In addition, gibbable rotfishes in the [[Scourge of Armagon]] spawn one too.</text>
      <sha1>5oiqcc10uws0fn4v1w6nz2rtkzvh4s9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Gl clear</title>
    <ns>0</ns>
    <id>823</id>
    <redirect title="gl clear" />
    <revision>
      <id>2408</id>
      <timestamp>2013-03-28T15:04:09Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Spirit moved page [[Gl clear]] to [[gl clear]]: lowercase</comment>
      <text xml:space="preserve" bytes="22">#REDIRECT [[gl clear]]</text>
      <sha1>br3cpcec3zi812ucxhsdcxlduwzon62</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Gl flashblend</title>
    <ns>0</ns>
    <id>94</id>
    <revision>
      <id>160</id>
      <timestamp>2007-10-30T23:42:26Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=gl_flashblend |default-value=1 |saved-to-config=no }} gl_flashblend controls the way dynamic lights are drawn. Dynamic lights are ...</comment>
      <text xml:space="preserve" bytes="363">{{lowercase-underscores}}{{Infobox Console variable
|name=gl_flashblend
|default-value=1
|saved-to-config=no
}}
gl_flashblend controls the way dynamic lights are drawn. Dynamic lights are eighter rendered as lightmaps gl_flashblend = 0 (slower but realistic) or as translucent shere gl_flashblend = 1 (fast, doesn't require lightmap update)

{{Console variables}}</text>
      <sha1>io9b02jnzredbp72jflrdtykxcc66z1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Gl keeptjunctions</title>
    <ns>0</ns>
    <id>90</id>
    <revision>
      <id>151</id>
      <timestamp>2007-10-30T23:27:10Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=gl_keeptjunctions |default-value=1 |saved-to-config=0 }} Versions: [[GLQuake]]  enables/disables removing of tjunctions in the BSP...</comment>
      <text xml:space="preserve" bytes="447">{{lowercase-underscores}}{{Infobox Console variable
|name=gl_keeptjunctions
|default-value=1
|saved-to-config=0
}}
Versions: [[GLQuake]]

enables/disables removing of tjunctions in the BSP during the building of the surface display list (glquake only).

Setting this to 0 will reduce the number of bsp polygon vertices by removing colinear points, however it produces holes in the BSP due to floating point precision errors.

{{Console variables}}</text>
      <sha1>rg7d0hc3as2iodkj114xwgbq4ax66ne</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>152</id>
      <parentid>151</parentid>
      <timestamp>2007-10-30T23:27:17Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="448">{{lowercase-underscores}}{{Infobox Console variable
|name=gl_keeptjunctions
|default-value=1
|saved-to-config=no
}}
Versions: [[GLQuake]]

enables/disables removing of tjunctions in the BSP during the building of the surface display list (glquake only).

Setting this to 0 will reduce the number of bsp polygon vertices by removing colinear points, however it produces holes in the BSP due to floating point precision errors.

{{Console variables}}</text>
      <sha1>n27g6edd7vdoxi57rfup0p70y5camu9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>153</id>
      <parentid>152</parentid>
      <timestamp>2007-10-30T23:28:41Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="448">{{lowercase-underscores}}{{Infobox Console variable
|name=gl_keeptjunctions
|default-value=0
|saved-to-config=no
}}
Versions: [[GLQuake]]

enables/disables removing of tjunctions in the BSP during the building of the surface display list (glquake only).

Setting this to 0 will reduce the number of bsp polygon vertices by removing colinear points, however it produces holes in the BSP due to floating point precision errors.

{{Console variables}}</text>
      <sha1>nm44yu436xx0pxzlkaiqu6935zbsb7j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Gl polyblend</title>
    <ns>0</ns>
    <id>824</id>
    <redirect title="gl polyblend" />
    <revision>
      <id>2410</id>
      <timestamp>2013-03-28T15:04:20Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Spirit moved page [[Gl polyblend]] to [[gl polyblend]]: lowercase</comment>
      <text xml:space="preserve" bytes="26">#REDIRECT [[gl polyblend]]</text>
      <sha1>0nrf0rg4wv31jfda7qrnr0agkn5adeq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Gl texsort</title>
    <ns>0</ns>
    <id>95</id>
    <revision>
      <id>161</id>
      <timestamp>2007-10-30T23:45:36Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=gl_texsort |default-value=depends |saved-to-config=no }} Versions: [[GLQuake]]  This console variable determines the rendering pat...</comment>
      <text xml:space="preserve" bytes="1152">{{lowercase-underscores}}{{Infobox Console variable
|name=gl_texsort
|default-value=depends
|saved-to-config=no
}}
Versions: [[GLQuake]]

This console variable determines the rendering path that the engine will use to render the world and brush models. When gl_texsort is non-zero, the engine will sort by texture, so as to minimize the overhead of changing the active texture. When it is disabled, the engine will render all the surfaces in front to back order, with no texture sorting, and with multitexturing, if available.

The only problem with turning this on is that it also disables multitexture, forcing the engine to render the lighting in a separate pass.

One thing to note, however is that some video cards have problems with SGIS multitexturing (which GLQuake uses). So turning on gl_texsort might fix the problem.

The default value is 0 if the user's video card supports multitexture (namely the OpenGL extension GL_SGIS_multitexture), and if the [[-nomtex]] command-line argument was not set. If the card does not support multitexture, this cvar defaults to 1.

NOTE: Some engines have done away with gl_texsort.

{{Console variables}}</text>
      <sha1>89hgud5bhahy0ya1tffwwitirjvva0z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Gl ztrick</title>
    <ns>0</ns>
    <id>89</id>
    <revision>
      <id>150</id>
      <timestamp>2007-10-30T23:05:21Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=gl_ztrick |default-value=1 |saved-to-config=no }} Engine: [[GLQuake]]  gl_ztrick enables/disables the use of a trick that allows t...</comment>
      <text xml:space="preserve" bytes="516">{{lowercase-underscores}}{{Infobox Console variable
|name=gl_ztrick
|default-value=1
|saved-to-config=no
}}
Engine: [[GLQuake]]

gl_ztrick enables/disables the use of a trick that allows the renderer to avoid clearing the depth buffer every frame. This results in a slight speed increase, with a trade off for less depth precision.

(The performance gained from turning this on is barely noticeable on newer accelerator cards, so it would be better to turn it off if you have a TNT2 or better)

{{Console variables}}</text>
      <sha1>oufr86o9kh421rg90z17gbtn2gg8dfp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Glossary</title>
    <ns>0</ns>
    <id>39</id>
    <revision>
      <id>46</id>
      <timestamp>2007-10-30T17:41:36Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: * [[angle vector]] * [[bacon]] * [[boomstick]] * [[constant]] * [[dot product]] * [[evile]] * [[immediate]] * [[QuakeWorld]] * [[telefrag]] * [[unit vector]] * [[velocity vector]]</comment>
      <text xml:space="preserve" bytes="179">* [[angle vector]]
* [[bacon]]
* [[boomstick]]
* [[constant]]
* [[dot product]]
* [[evile]]
* [[immediate]]
* [[QuakeWorld]]
* [[telefrag]]
* [[unit vector]]
* [[velocity vector]]</text>
      <sha1>fc8d67oigy1x4d2kjn2haq4z4acdoe7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1740</id>
      <parentid>46</parentid>
      <timestamp>2013-03-24T23:24:02Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="210">====Quake C====
* [[angle vector]]
* [[constant]]
* [[dot product]]
* [[unit vector]]
* [[velocity vector]]

====Quake====
* [[bacon]]
* [[boomstick]]
* [[evile]]
* [[immediate]]
* [[QuakeWorld]]
* [[telefrag]]</text>
      <sha1>6fji1gnnfbr3ygqbktrl3c5nws7bznk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1948</id>
      <parentid>1740</parentid>
      <timestamp>2013-03-25T05:06:43Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>/* Quake */  added vanilla quake</comment>
      <text xml:space="preserve" bytes="230">====Quake C====
* [[angle vector]]
* [[constant]]
* [[dot product]]
* [[unit vector]]
* [[velocity vector]]

====Quake====
* [[bacon]]
* [[boomstick]]
* [[evile]]
* [[immediate]]
* [[QuakeWorld]]
* [[telefrag]]
* [[vanilla quake]]</text>
      <sha1>cihl3m5wv2pfcj7ezamqp5vvkgura09</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Green Armor</title>
    <ns>0</ns>
    <id>412</id>
    <revision>
      <id>699</id>
      <timestamp>2008-05-07T19:57:00Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: This armor absorbs about 1/3 of the damage you receive. You get 100 points of green armor.</comment>
      <text xml:space="preserve" bytes="90">This armor absorbs about 1/3 of the damage you receive. You get 100 points of green armor.</text>
      <sha1>0ujzdis9tnbee2o4fqvv29s5nj2zxan</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>887</id>
      <parentid>699</parentid>
      <timestamp>2008-06-18T21:52:53Z</timestamp>
      <contributor>
        <ip>65.66.150.198</ip>
      </contributor>
      <text xml:space="preserve" bytes="107">This armor absorbs about 1/3 of the damage you receive. You get 100 points of green armor.

{{Quake items}}</text>
      <sha1>32xebmu5t7mf3wgbx5sxls8ry5i242s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Gremlin</title>
    <ns>0</ns>
    <id>466</id>
    <revision>
      <id>894</id>
      <timestamp>2008-06-30T12:33:06Z</timestamp>
      <contributor>
        <ip>195.199.147.174</ip>
      </contributor>
      <comment>New page: Small green goblin-like creature with fairly advanced AI (for the [[Quake]] series). Can steal certain weapons from the player and use them against him. Also able to feed on the corpses of...</comment>
      <text xml:space="preserve" bytes="276">Small green goblin-like creature with fairly advanced AI (for the [[Quake]] series). Can steal certain weapons from the player and use them against him. Also able to feed on the corpses of dead monsters which allows them to bolster their numbers. Has a claw rake melee attack.</text>
      <sha1>heq02f2gssup3psvg2zusq0x2b4os3q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2940</id>
      <parentid>894</parentid>
      <timestamp>2013-05-04T15:35:49Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <comment>infobox, some rewording</comment>
      <text xml:space="preserve" bytes="909">{{Infobox Monster
| image = monster_hipnotic_gremlin.png
| name = Gremlin
| manualtext =  These creatures travel in packs attacking like a swarm of bees to steal your weapons and feast on the bodies of your slain enemies.
| health = 100
| gibthresh = -35
| attacks = claws, attacks with stolen player weapons
| drop = stolen player weapons
| 1stappearance = [[hip2m1]]
| gameversion = [[Scourge of Armagon]]
| deathmessage = Player was outsmarted by a Gremlin
}}

The '''gremlin''' is a small goblin-like creature introduced in the [[Scourge of Armagon]] expansion pack. It somewhat resembles a [[fiend]] in appearance, and has a fairly advanced AI, compared to the stock [[Quake]] monsters. It can steal certain weapons from the player and use them against him. Also able to feed on the corpses of dead monsters which allows them to bolster their numbers. Has a claw rake melee attack.

[[Category:Monsters]]</text>
      <sha1>4jehbf5tl7oxavsytzr0wsmjd5nhz7o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Grenade Launcher</title>
    <ns>0</ns>
    <id>399</id>
    <revision>
      <id>677</id>
      <timestamp>2008-05-07T19:27:24Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page:  == Description ==  The Grenade Launcher, while short-ranged and with a lack of firing rate delivers plenty of damage to the target/s when used properly. It is simple: the Grenade Launcher...</comment>
      <text xml:space="preserve" bytes="435">
== Description ==

The Grenade Launcher, while short-ranged and with a lack of firing rate delivers plenty of damage to the target/s when used properly. It is simple: the Grenade Launcher launches short-ranged yet powerful grenades. They will explode on impact when they hit an enemy, but if they hit a surface, then they will bounce off of different surfaces for a bit before standing still on a surface and then exploding. Good gun.</text>
      <sha1>n3oukhyixwkw9bvta2gzitktg9el8al</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>678</id>
      <parentid>677</parentid>
      <timestamp>2008-05-07T19:44:04Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="1606">== Description ==

Time to feast on pineapples. Yum, yum. Quake 1's grenades hurt just as much as rockets, which make them very effective weapons. It's really fun to fill a whole room with these babies and watch innocent passers-by get blown to tiny little chunks when they explode.

If there is a rocket launcher in the level and you have a good weapon other than the grenade launcher, the grenade launcher not a good choice. If you actually have a rocket launcher, it's just a plain stupid choice. It uses up precious rockets and it's hard to hurt players without also hurting yourself. Now, an exception to this rule is when you want to use them to scare people away - if you plant grenades in the floor while someone is chasing you, they're probably not going to try to follow you. If they do, you'll get a frag. This works best on stairs, because on a staircase the grenades will stick wherever you set them. If want to use the launcher for standard combat, remember that the grenades bounce a lot and travel far, so they are actually pretty easy to control. Bouncing them off the floor into players, or offering to play your own little game of &quot;catch&quot; (i.e., let them have it), will do a lot of damage because the grenades will hit them directly. Just watch out for that splash damage.

It's actually kind of easy to avoid grenades. If you're too close, you can't really see the things coming, so there's not much you can do except get far away. And, if you're far enough away, all you have to do is run backwards and fire off whatever you have.

'''Effectiveness:''' Good
'''Avoidability:''' Average</text>
      <sha1>jubja49x5jdencl67d5zwzmgk7yynp5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>679</id>
      <parentid>678</parentid>
      <timestamp>2008-05-07T19:44:13Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>/* Description */</comment>
      <text xml:space="preserve" bytes="1607">== Description ==

Time to feast on pineapples. Yum, yum. Quake 1's grenades hurt just as much as rockets, which make them very effective weapons. It's really fun to fill a whole room with these babies and watch innocent passers-by get blown to tiny little chunks when they explode.

If there is a rocket launcher in the level and you have a good weapon other than the grenade launcher, the grenade launcher not a good choice. If you actually have a rocket launcher, it's just a plain stupid choice. It uses up precious rockets and it's hard to hurt players without also hurting yourself. Now, an exception to this rule is when you want to use them to scare people away - if you plant grenades in the floor while someone is chasing you, they're probably not going to try to follow you. If they do, you'll get a frag. This works best on stairs, because on a staircase the grenades will stick wherever you set them. If want to use the launcher for standard combat, remember that the grenades bounce a lot and travel far, so they are actually pretty easy to control. Bouncing them off the floor into players, or offering to play your own little game of &quot;catch&quot; (i.e., let them have it), will do a lot of damage because the grenades will hit them directly. Just watch out for that splash damage.

It's actually kind of easy to avoid grenades. If you're too close, you can't really see the things coming, so there's not much you can do except get far away. And, if you're far enough away, all you have to do is run backwards and fire off whatever you have.

'''Effectiveness:''' Good

'''Avoidability:''' Average</text>
      <sha1>a1y8sk0m69sll5rscf4zcn7yit0n0y3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>680</id>
      <parentid>679</parentid>
      <timestamp>2008-05-07T19:44:27Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>/* Description */</comment>
      <text xml:space="preserve" bytes="1613">== Description ==

Time to feast on pineapples. Yum, yum. Quake 1's grenades hurt just as much as rockets, which make them very effective weapons. It's really fun to fill a whole room with these babies and watch innocent passers-by get blown to tiny little chunks when they explode.

If there is a rocket launcher in the level and you have a good weapon other than the grenade launcher, the grenade launcher not a good choice. If you actually have a rocket launcher, it's just a plain stupid choice. It uses up precious rockets and it's hard to hurt players without also hurting yourself. Now, an exception to this rule is when you want to use them to scare people away - if you plant grenades in the floor while someone is chasing you, they're probably not going to try to follow you. If they do, you'll get a frag. This works best on stairs, because on a staircase the grenades will stick wherever you set them. If want to use the launcher for standard combat, remember that the grenades bounce a lot and travel far, so they are actually pretty easy to control. Bouncing them off the floor into players, or offering to play your own little game of &quot;catch&quot; (i.e., let them have it), will do a lot of damage because the grenades will hit them directly. Just watch out for that splash damage.

It's actually kind of easy to avoid grenades. If you're too close, you can't really see the things coming, so there's not much you can do except get far away. And, if you're far enough away, all you have to do is run backwards and fire off whatever you have.

----

'''Effectiveness:''' Good

'''Avoidability:''' Average</text>
      <sha1>ov2z77sn0euz0bu90meqrpowc5t1zsn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>994</id>
      <parentid>680</parentid>
      <timestamp>2009-05-22T08:57:00Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>as the current weapon descriptions were taken from http://euroquake.webs.com/guides2.htm i am getting the old ones from archive.org</comment>
      <text xml:space="preserve" bytes="653">{{Infobox Weapon
|weapon=Grenade Launcher
|ammotype=[[Rockets]]
|ammousage=1 per shot
|shottype=grenade
|dpshot=up to 120 splash damage
|dpsecond=200
|range=1000 units
|cycletime=0.6s
}}

Commonly used to spam lower sections of a map in [[Multiplayer|multiplayer]] [[Deathmatch|deathmatch]], the grenade launcher shoots a ... you guessed it - a grenade at an arch, it explodes either after 2.5 seconds of bouncing or lying around or coming in contact with a player or [[Monsters|monster]] while air-borne. The explosion gives off a quite a damaging blast radius.

The [[Shambler]] takes half damage from the grenade launcher.

==See Also==
* [[Weapons]]</text>
      <sha1>otlkwk7lbinsd744rvluhea36v44c93</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1311</id>
      <parentid>994</parentid>
      <timestamp>2009-09-27T18:36:11Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="638">{{Infobox Weapon
|weapon=Grenade Launcher
|ammotype=[[Rockets]]
|ammousage=1 per shot
|shottype=grenade
|dpshot=up to 120 splash damage
|dpsecond=200
|range=1000 units
|cycletime=0.6s
}}

Commonly used to spam lower sections of a map in [[Multiplayer|multiplayer]] [[Deathmatch|deathmatch]], the grenade launcher shoots a ... you guessed it - a grenade at an arch, it explodes either after 2.5 seconds of bouncing or lying around or coming in contact with a player or [[Monsters|monster]] while air-borne. The explosion gives off a quite a damaging blast radius.

The [[Shambler]] takes half damage from the grenade launcher.

{{Weapons}}</text>
      <sha1>r9asozb5l9qv5pduyeus3b8ehv81r1m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3046</id>
      <parentid>1311</parentid>
      <timestamp>2013-12-18T01:47:02Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <text xml:space="preserve" bytes="1263">{{Infobox Weapon
|weapon=Grenade Launcher
|image_w=weapon_grenadelauncher.png
|image_v=v_grenadelauncher.png
|manualtext=Thumps neat exploding bombs into the air. You can even bounce a grenade off the wall or floor. When a grenade hits someone, it explodes. If it misses, the bomb sits n the floor for a moment, then explodes. Even though I sometimes bounce renades into myself, this gun's still my favorite.
|ammotype=[[Rockets]]
|ammousage=1 per shot
|shottype=[[Bouncing]] [[projectile]]
|dpshot=120 direct hit, up to 120 [[splash damage]]
|dpsecond=200
|range=~900 [[unit]]s (maximum throw distance)
|cycletime=0.6s
|1stappearance = [[E1M3]]
|obituary1=(Target) eats (attacker)'s pineapple.
|obituary2=(Target) was gibbed by (attacker)'s grenade.
|obituary3=(Target) tries to put the pin back in.
}}

Commonly used to spam lower sections of a map in [[Multiplayer|multiplayer]] [[Deathmatch|deathmatch]], the grenade launcher shoots... you guessed it - a grenade at an arch, it explodes either after 2.5 seconds of bouncing or lying around, or instantly if coming in contact with a player or [[Monsters|monster]] while airborne. The explosion gives off quite a damaging blast radius.

The [[Shambler]] takes half damage from the grenade launcher.

{{Weapons}}</text>
      <sha1>qmay2ttmdjidb2fn3l8gulmxucgnj2v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3049</id>
      <parentid>3046</parentid>
      <timestamp>2013-12-18T01:58:21Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <text xml:space="preserve" bytes="1269">{{Infobox Weapon
|weapon=Grenade Launcher
|image_w=weapon_grenadelauncher.png
|image_v=v_grenadelauncher.png
|manualtext=Thumps neat exploding bombs into the air. You can even bounce a grenade off the wall or floor. When a grenade hits someone, it explodes. If it misses, the bomb sits n the floor for a moment, then explodes. Even though I sometimes bounce renades into myself, this gun's still my favorite.
|ammotype=[[Rockets]]
|ammousage=1 per shot
|shottype=[[Bouncing]] [[projectile]]
|dpshot=120 direct hit, up to 120 [[splash damage]]
|dpsecond=200
|range=~900 [[unit]]s (maximum throw distance)
|cycletime=0.6s
|1stappearance = [[E1M3]]
|obituary1=(Target) eats (attacker)'s pineapple.
|obituary2=(Target) was gibbed by (attacker)'s grenade.
|obituary3=(Target) tries to put the pin back in.
}}

Commonly used to spam lower sections of a map in [[Multiplayer|multiplayer]] [[Deathmatch|deathmatch]], the '''Grenade Launcher''' shoots... you guessed it - a grenade at an arch, it explodes either after 2.5 seconds of bouncing or lying around, or instantly if coming in contact with a player or [[Monsters|monster]] while airborne. The explosion gives off quite a damaging blast radius.

The [[Shambler]] takes half damage from the grenade launcher.

{{Weapons}}</text>
      <sha1>i2teywm91z56tw6biqz0mwetvsd59xy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Grunt</title>
    <ns>0</ns>
    <id>133</id>
    <revision>
      <id>215</id>
      <timestamp>2007-11-02T19:32:38Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: Goons with probes inserted into their pleasure centers; wired up so when they kill someone, they get a paroxysms of ecstatsy. In essence, customized serial killers. Easy to kill, and they ...</comment>
      <text xml:space="preserve" bytes="903">Goons with probes inserted into their pleasure centers; wired up so when they kill someone, they get a paroxysms of ecstatsy. In essence, customized serial killers. Easy to kill, and they tote shotgun shells. It's like a little Christmas each time you kill one!

* '''Weapon:''' [[Shotgun]]
* '''Health:''' 30
* '''Treasure:''' 5 shells

'''Tips:''' Grunts are next to harmless alone, but if in large groups, they can be a problem. They have bad aim if you keep moving, and go down after two well-placed shots from your [[Shotgun]]. If you're close enough, don't be afraid to use the [[Double-Barrelled Shotgun]] to fell them in one shot. If they're not alone, you may find yourself using a [[Nailgun]]. If you spot an unsuspected and alone Grunt, feel free to whack them with your [[Axe]].

'''Entity name:''' [[monster_army]]

[http://frikqcc.quakesrc.org/files/soldier.gif]

==See Also==
[[Monsters]]</text>
      <sha1>1yrw0q7xt2whl5n5a7yit7rr5php61f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>268</id>
      <parentid>215</parentid>
      <timestamp>2007-11-05T22:09:51Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <text xml:space="preserve" bytes="877">Goons with probes inserted into their pleasure centers; wired up so when they kill someone, they get a paroxysms of ecstatsy. In essence, customized serial killers. Easy to kill, and they tote shotgun shells. It's like a little Christmas each time you kill one!

* '''Weapon:''' [[Shotgun]]
* '''Health:''' 30
* '''Treasure:''' 5 shells

'''Tips:''' Grunts are next to harmless alone, but if in large groups, they can be a problem. They have bad aim if you keep moving, and go down after two well-placed shots from your [[Shotgun]]. If you're close enough, don't be afraid to use the [[Double-Barrelled Shotgun]] to fell them in one shot. If they're not alone, you may find yourself using a [[Nailgun]]. If you spot an unsuspected and alone Grunt, feel free to whack them with your [[Axe]].

[[Image:Soldier.gif]]

'''Entity name:''' [[monster_army]]

==See Also==
[[Monsters]]</text>
      <sha1>5y23mmeyo5borjfvy0d8cz6g9n16e8v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>734</id>
      <parentid>268</parentid>
      <timestamp>2008-05-07T20:21:40Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="957">Goons with probes inserted into their pleasure centers; wired up so when they kill someone, they get a paroxysms of ecstatsy. In essence, customized serial killers. Easy to kill, and they tote shotgun shells. It's like a little Christmas each time you kill one!

* '''Weapon:''' [[Shotgun]]
* '''Health:''' 30
* '''Treasure:''' 5 shells

'''Tips:'''
----
Grunts are next to harmless alone, but if in large groups, they can be a problem. They have bad aim if you keep moving, and go down after two well-placed shots from your [[Shotgun]]. If you're close enough, don't be afraid to use the [[Double-Barrelled Shotgun]] to fell them in one shot. If they're not alone, you may find yourself using a [[Nailgun]]. If you spot an unsuspected and alone Grunt, feel free to whack them with your [[Axe]].
*'''Best Weapons:''' Shotgun, Nailgun
*'''Worst Weapons:''' Rocket Laucher

[[Image:Soldier.gif]]

'''Entity name:''' [[monster_army]]

==See Also==
[[Monsters]]</text>
      <sha1>pdjbhuvvoo8sebzibej1wncyr6259bo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>814</id>
      <parentid>734</parentid>
      <timestamp>2008-05-10T19:02:34Z</timestamp>
      <contributor>
        <ip>24.159.39.233</ip>
      </contributor>
      <text xml:space="preserve" bytes="1617">{{Infobox Monster
|monstername=Grunt
|entityname=monster_army
|monsterhealth=30
|monstermelee=N/A
|monstermissile=Shotgun
|movetype=MOVETYPE_STEP
|monsterspeed=1.83, 10.87
|monsterclass=Base, shareware
}}

[[Image:Soldier.gif|left]]The grunt is the first enemy you will encounter in Quake, alongside the [[Rottweiler]]. He moves fairly slowly, has particularly low health and packs a mere shotgun. Not only is his attack just a shotgun, it calls a FireBullets value of 4 rather than the players 6, and he also aims slightly behind the player. Despite these shortcomings, on death he will drop a backpack containing 5 shells, turning an ammunition profit for the accurate (or melee) player.

Grunts though easy, can pose quite a threat in large groups, which you see very little of in Quake itself, but is common in user made Base maps. Though inaccurate and weak, in groups the hitscan attack can catch a player off guard who is usually more concerned with the laser projectiles of the [[Enforcer]].

The Grunt is one of a few Quake monsters who possesses more animation frames than the code makes use of. In this case, he has frames reloading his shotgun, which has been utilized by numerous mods where they keep track of how many rounds the grunt has fired, or to display a switching of weapons in that particular mod.

''&quot;Goons with probes inserted into their pleasure centers; wired up so when they kill someone, they get a paroxysms of ecstasy. In essence, customized serial killers. Easy to kill, and they tote shotgun shells. It's like a little Christmas each time you kill one!&quot;''

==See Also==
* [[Monsters]]</text>
      <sha1>70admps1gk0hulglwkab113ltd2sg07</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>864</id>
      <parentid>814</parentid>
      <timestamp>2008-05-17T18:53:29Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1639">{{Infobox Monster
|monstername=Grunt
|entityname=monster_army
|monsterhealth=30
|monstermelee=N/A
|monstermissile=Shotgun
|movetype=MOVETYPE_STEP
|monsterspeed=1.83, 10.87
|monsterclass=Base, shareware
|monsterdrop=5 shells
}}

[[Image:Soldier.gif|left]]The grunt is the first enemy you will encounter in Quake, alongside the [[Rottweiler]]. He moves fairly slowly, has particularly low health and packs a mere shotgun. Not only is his attack just a shotgun, it calls a FireBullets value of 4 rather than the players 6, and he also aims slightly behind the player. Despite these shortcomings, on death he will drop a backpack containing 5 shells, turning an ammunition profit for the accurate (or melee) player.

Grunts though easy, can pose quite a threat in large groups, which you see very little of in Quake itself, but is common in user made Base maps. Though inaccurate and weak, in groups the hitscan attack can catch a player off guard who is usually more concerned with the laser projectiles of the [[Enforcer]].

The Grunt is one of a few Quake monsters who possesses more animation frames than the code makes use of. In this case, he has frames reloading his shotgun, which has been utilized by numerous mods where they keep track of how many rounds the grunt has fired, or to display a switching of weapons in that particular mod.

''&quot;Goons with probes inserted into their pleasure centers; wired up so when they kill someone, they get a paroxysms of ecstasy. In essence, customized serial killers. Easy to kill, and they tote shotgun shells. It's like a little Christmas each time you kill one!&quot;''

==See Also==
* [[Monsters]]</text>
      <sha1>t9vb04bpzq8w4za2mkyeahvoue4kuw6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1243</id>
      <parentid>864</parentid>
      <timestamp>2009-09-25T07:58:51Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="1570">{{Infobox Monster
|name=Grunt
|entity=monster_army
|model=soldier.mdl&lt;br /&gt;h_guard.mdl (head gib)
|health=30
|attacks=Shotgun
|drop=5 shells
|gameversion=Shareware
}}
[[Image:Soldier.gif|left]]
The '''Grunt''' is the first enemy you will encounter in Quake, alongside the [[Rottweiler]]. He moves fairly slowly, has particularly low health and packs a mere shotgun. Not only is his attack just a shotgun, it calls a FireBullets value of 4 rather than the players 6, and he also aims slightly behind the player. Despite these shortcomings, on death he will drop a backpack containing 5 shells, turning an ammunition profit for the accurate (or melee) player.

Grunts though easy, can pose quite a threat in large groups, which you see very little of in Quake itself, but is common in user made Base maps. Though inaccurate and weak, in groups the hitscan attack can catch a player off guard who is usually more concerned with the laser projectiles of the [[Enforcer]].

The Grunt is one of a few Quake monsters who possesses more animation frames than the code makes use of. In this case, he has frames reloading his shotgun, which has been utilized by numerous mods where they keep track of how many rounds the grunt has fired, or to display a switching of weapons in that particular mod.

''&quot;Goons with probes inserted into their pleasure centers; wired up so when they kill someone, they get a paroxysms of ecstasy. In essence, customized serial killers. Easy to kill, and they tote shotgun shells. It's like a little Christmas each time you kill one!&quot;''

{{Monsters}}</text>
      <sha1>l7xprh11vwuldhqjrr3o4der27j56l7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1382</id>
      <parentid>1243</parentid>
      <timestamp>2009-10-08T23:21:04Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1594">{{Infobox Monster
|name=Grunt
|entity=monster_army
|model=soldier.mdl&lt;br /&gt;h_guard.mdl (head gib)
|health=30
|attacks=Shotgun
|drop=5 shells
|1stappearance=[[e1m1]]
|gameversion=Shareware
}}
[[Image:Soldier.gif|left]]
The '''Grunt''' is the first enemy you will encounter in Quake, alongside the [[Rottweiler]]. He moves fairly slowly, has particularly low health and packs a mere shotgun. Not only is his attack just a shotgun, it calls a FireBullets value of 4 rather than the players 6, and he also aims slightly behind the player. Despite these shortcomings, on death he will drop a backpack containing 5 shells, turning an ammunition profit for the accurate (or melee) player.

Grunts though easy, can pose quite a threat in large groups, which you see very little of in Quake itself, but is common in user made Base maps. Though inaccurate and weak, in groups the hitscan attack can catch a player off guard who is usually more concerned with the laser projectiles of the [[Enforcer]].

The Grunt is one of a few Quake monsters who possesses more animation frames than the code makes use of. In this case, he has frames reloading his shotgun, which has been utilized by numerous mods where they keep track of how many rounds the grunt has fired, or to display a switching of weapons in that particular mod.

''&quot;Goons with probes inserted into their pleasure centers; wired up so when they kill someone, they get a paroxysms of ecstasy. In essence, customized serial killers. Easy to kill, and they tote shotgun shells. It's like a little Christmas each time you kill one!&quot;''

{{Monsters}}</text>
      <sha1>qe2qpmmgj4dhedwllxgor92nbp1apn8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1396</id>
      <parentid>1382</parentid>
      <timestamp>2009-10-08T23:45:02Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1628">{{Infobox Monster
|name=Grunt
|entity=monster_army
|model=soldier.mdl&lt;br /&gt;h_guard.mdl (head gib)
|health=30
|attacks=Shotgun
|drop=5 shells
|1stappearance=[[e1m1]]
|gameversion=Shareware
}}
[[Image:Soldier.gif|left]]
''&quot;Goons with probes inserted into their pleasure centers; wired up so when they kill someone, they get a paroxysms of ecstasy. In essence, customized serial killers. Easy to kill, and they tote shotgun shells. It's like a little Christmas each time you kill one!&quot;''

The '''Grunt''' is the first enemy you will encounter in Quake, alongside the [[Rottweiler]]. He moves fairly slowly, has particularly low health and packs a mere shotgun. Not only is his attack just a shotgun, it calls a FireBullets value of 4 rather than the players 6, and he also aims slightly behind the player. Despite these shortcomings, on death he will drop a backpack containing 5 shells, turning an ammunition profit for the accurate (or melee) player.

Grunts though easy, can pose quite a threat in large groups, which you see very little of in Quake itself, but is common in user made Base maps. Though inaccurate and weak, in groups the hitscan attack can catch a player off guard who is usually more concerned with the laser projectiles of the [[Enforcer]].

The Grunt is one of a few Quake monsters who possesses more animation frames than the code makes use of. In this case, he has frames reloading his shotgun, which has been utilized by numerous mods where they keep track of how many rounds the grunt has fired, or to display a switching of weapons in that particular mod.

''&quot;Player was shot by a Grunt&quot;''

{{Monsters}}</text>
      <sha1>bmfwvsvz9l0f81gycmjf7ykuym5qulv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1921</id>
      <parentid>1396</parentid>
      <timestamp>2013-03-25T03:37:27Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>fixed image location and file link</comment>
      <text xml:space="preserve" bytes="1629">[[Image:Soldier.gif|left]]
{{Infobox Monster
|name=Grunt
|entity=monster_army
|model=soldier.mdl&lt;br /&gt;h_guard.mdl (head gib)
|health=30
|attacks=Shotgun
|drop=5 shells
|1stappearance=[[e1m1]]
|gameversion=Shareware
}}

''&quot;Goons with probes inserted into their pleasure centers; wired up so when they kill someone, they get a paroxysms of ecstasy. In essence, customized serial killers. Easy to kill, and they tote shotgun shells. It's like a little Christmas each time you kill one!&quot;''

The '''Grunt''' is the first enemy you will encounter in Quake, alongside the [[Rottweiler]]. He moves fairly slowly, has particularly low health and packs a mere shotgun. Not only is his attack just a shotgun, it calls a FireBullets value of 4 rather than the players 6, and he also aims slightly behind the player. Despite these shortcomings, on death he will drop a backpack containing 5 shells, turning an ammunition profit for the accurate (or melee) player.

Grunts though easy, can pose quite a threat in large groups, which you see very little of in Quake itself, but is common in user made Base maps. Though inaccurate and weak, in groups the hitscan attack can catch a player off guard who is usually more concerned with the laser projectiles of the [[Enforcer]].

The Grunt is one of a few Quake monsters who possesses more animation frames than the code makes use of. In this case, he has frames reloading his shotgun, which has been utilized by numerous mods where they keep track of how many rounds the grunt has fired, or to display a switching of weapons in that particular mod.

''&quot;Player was shot by a Grunt&quot;''

{{Monsters}}</text>
      <sha1>cqe9nh9ljh4oelynbuepeapoqjqoz96</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2801</id>
      <parentid>1921</parentid>
      <timestamp>2013-04-07T11:31:09Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>updated infobox layout</comment>
      <text xml:space="preserve" bytes="1567">
{{Infobox Monster
|image=Soldier.gif
|manualtext=Goons with probes inserted into their pleasure centers; wired up so when they kill someone, they get a paroxysms of ecstasy. In essence, customized serial killers. Easy to kill, and they tote shotgun shells. It's like a little Christmas each time you kill one!
|name=Grunt
|health=30
|attacks=Shotgun
|drop=5 shells
|1stappearance=[[e1m1]]
|gameversion=Shareware
|deathmessage=Player was shot by a Grunt
}}

The '''Grunt''' is the first enemy you will encounter in Quake, alongside the [[Rottweiler]]. He moves fairly slowly, has particularly low health and packs a mere shotgun. Not only is his attack just a shotgun, it calls a FireBullets value of 4 rather than the players 6, and he also aims slightly behind the player. Despite these shortcomings, on death he will drop a backpack containing 5 shells, turning an ammunition profit for the accurate (or melee) player.

Grunts though easy, can pose quite a threat in large groups, which you see very little of in Quake itself, but is common in user made Base maps. Though inaccurate and weak, in groups the hitscan attack can catch a player off guard who is usually more concerned with the laser projectiles of the [[Enforcer]].

The Grunt is one of a few Quake monsters who possesses more animation frames than the code makes use of. In this case, he has frames reloading his shotgun, which has been utilized by numerous mods where they keep track of how many rounds the grunt has fired, or to display a switching of weapons in that particular mod.


{{Monsters}}</text>
      <sha1>9t5h15vmzghbm3kaui2nx3ljs4uucap</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2835</id>
      <parentid>2801</parentid>
      <timestamp>2013-04-08T13:47:30Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>updated infobox</comment>
      <text xml:space="preserve" bytes="1605">{{Infobox Monster
| name = Grunt
| image = monster_quake_grunt.png
| manualtext = Goons with probes inserted into their pleasure centers; wired up so when they kill someone, they get a paroxysms of ecstasy. In essence, customized serial killers. Easy to kill, and they tote shotgun shells. It's like a little Christmas each time you kill one!
| health = 30
| attacks = Shotgun
| drop = 5 shells
| 1stappearance = [[e1m1]]
| gameversion = Shareware
| deathmessage = Player was shot by a Grunt
}}

The '''Grunt''' is the first enemy you will encounter in Quake, alongside the [[Rottweiler]]. He moves fairly slowly, has particularly low health and packs a mere shotgun. Not only is his attack just a shotgun, it calls a FireBullets value of 4 rather than the players 6, and he also aims slightly behind the player. Despite these shortcomings, on death he will drop a backpack containing 5 shells, turning an ammunition profit for the accurate (or melee) player.

Grunts though easy, can pose quite a threat in large groups, which you see very little of in Quake itself, but is common in user made Base maps. Though inaccurate and weak, in groups the hitscan attack can catch a player off guard who is usually more concerned with the laser projectiles of the [[Enforcer]].

The Grunt is one of a few Quake monsters who possesses more animation frames than the code makes use of. In this case, he has frames reloading his shotgun, which has been utilized by numerous mods where they keep track of how many rounds the grunt has fired, or to display a switching of weapons in that particular mod.


{{Monsters}}</text>
      <sha1>ezuixx4nvvwrst789z9r75gd60iast4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2857</id>
      <parentid>2835</parentid>
      <timestamp>2013-04-08T15:16:21Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>added entity info</comment>
      <text xml:space="preserve" bytes="3587">{{Infobox Monster
| name = Grunt
| image = monster_quake_grunt.png
| manualtext = Goons with probes inserted into their pleasure centers; wired up so when they kill someone, they get a paroxysms of ecstasy. In essence, customized serial killers. Easy to kill, and they tote shotgun shells. It's like a little Christmas each time you kill one!
| health = 30
| attacks = Shotgun
| drop = 5 shells
| 1stappearance = [[e1m1]]
| gameversion = Shareware
| deathmessage = Player was shot by a Grunt
}}

The '''Grunt''' is the first enemy you will encounter in Quake, alongside the [[Rottweiler]]. He moves fairly slowly, has particularly low health and packs a mere shotgun. Not only is his attack just a shotgun, it calls a FireBullets value of 4 rather than the players 6, and he also aims slightly behind the player. Despite these shortcomings, on death he will drop a backpack containing 5 shells, turning an ammunition profit for the accurate (or melee) player.

Grunts though easy, can pose quite a threat in large groups, which you see very little of in Quake itself, but is common in user made Base maps. Though inaccurate and weak, in groups the hitscan attack can catch a player off guard who is usually more concerned with the laser projectiles of the [[Enforcer]].

The Grunt is one of a few Quake monsters who possesses more animation frames than the code makes use of. In this case, he has frames reloading his shotgun, which has been utilized by numerous mods where they keep track of how many rounds the grunt has fired, or to display a switching of weapons in that particular mod.


&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_army
| commonname = [[Grunt]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 32 x 32 x 64
| quakec = [[soldier.qc]]
| precaches =
progs/soldier.mdl&lt;br&gt;
progs/h_guard.mdl&lt;br&gt;
soldier/death1.wav&lt;br&gt;
soldier/idle.wav&lt;br&gt;
soldier/pain1.wav&lt;br&gt;
soldier/pain2.wav&lt;br&gt;
soldier/sattck1.wav&lt;br&gt;
soldier/sight1.wav
}}

==Entity information==

'''monster_army''' is the [[Entity|entity]] for placing '''Grunts''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Grunt. When triggered, the Grunt will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Grunt dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Grunt dies.
|}

====Spawnflags====
The monster_army entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Grunt will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Grunt
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model(&quot;:progs/solider.mdl&quot;)
    = monster_army : &quot;Grunt&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_army (1 0 0) (-16 -16 -24) (16 16 40) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>sqkh957di5f3o39a7bez55r5jxyoaey</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2859</id>
      <parentid>2857</parentid>
      <timestamp>2013-04-08T15:20:02Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="3599">{{Infobox Monster
| name = Grunt
| image = monster_quake_grunt.png
| manualtext = Goons with probes inserted into their pleasure centers; wired up so when they kill someone, they get a paroxysms of ecstasy. In essence, customized serial killers. Easy to kill, and they tote shotgun shells. It's like a little Christmas each time you kill one!
| health = 30
| attacks = Shotgun
| drop = 5 shells
| 1stappearance = [[e1m1]]
| gameversion = Shareware
| deathmessage = Player was shot by a Grunt
}}

The '''Grunt''' is the first enemy you will encounter in Quake, alongside the [[Rottweiler]]. He moves fairly slowly, has particularly low health and packs a mere shotgun. Not only is his attack just a shotgun, it calls a FireBullets value of 4 rather than the players 6, and he also aims slightly behind the player. Despite these shortcomings, on death he will drop a backpack containing 5 shells, turning an ammunition profit for the accurate (or melee) player.

Grunts though easy, can pose quite a threat in large groups, which you see very little of in Quake itself, but is common in user made Base maps. Though inaccurate and weak, in groups the hitscan attack can catch a player off guard who is usually more concerned with the laser projectiles of the [[Enforcer]].

The Grunt is one of a few Quake monsters who possesses more animation frames than the code makes use of. In this case, he has frames reloading his shotgun, which has been utilized by numerous mods where they keep track of how many rounds the grunt has fired, or to display a switching of weapons in that particular mod.

==Tactics==

&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_army
| commonname = [[Grunt]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 32 x 32 x 64
| quakec = [[soldier.qc]]
| precaches =
progs/soldier.mdl&lt;br&gt;
progs/h_guard.mdl&lt;br&gt;
soldier/death1.wav&lt;br&gt;
soldier/idle.wav&lt;br&gt;
soldier/pain1.wav&lt;br&gt;
soldier/pain2.wav&lt;br&gt;
soldier/sattck1.wav&lt;br&gt;
soldier/sight1.wav
}}

==Entity information==

'''monster_army''' is the [[Entity|entity]] for placing '''Grunts''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Grunt. When triggered, the Grunt will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Grunt dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Grunt dies.
|}

====Spawnflags====
The monster_army entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Grunt will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Grunt
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model(&quot;:progs/solider.mdl&quot;)
    = monster_army : &quot;Grunt&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_army (1 0 0) (-16 -16 -24) (16 16 40) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>m3hy57ofubzuhdwi5jxeryv72dsfcpt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2869</id>
      <parentid>2859</parentid>
      <timestamp>2013-04-09T02:56:20Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <comment>/* Usage */ Created content</comment>
      <text xml:space="preserve" bytes="4057">{{Infobox Monster
| name = Grunt
| image = monster_quake_grunt.png
| manualtext = Goons with probes inserted into their pleasure centers; wired up so when they kill someone, they get a paroxysms of ecstasy. In essence, customized serial killers. Easy to kill, and they tote shotgun shells. It's like a little Christmas each time you kill one!
| health = 30
| attacks = Shotgun
| drop = 5 shells
| 1stappearance = [[e1m1]]
| gameversion = Shareware
| deathmessage = Player was shot by a Grunt
}}

The '''Grunt''' is the first enemy you will encounter in Quake, alongside the [[Rottweiler]]. He moves fairly slowly, has particularly low health and packs a mere shotgun. Not only is his attack just a shotgun, it calls a FireBullets value of 4 rather than the players 6, and he also aims slightly behind the player. Despite these shortcomings, on death he will drop a backpack containing 5 shells, turning an ammunition profit for the accurate (or melee) player.

Grunts though easy, can pose quite a threat in large groups, which you see very little of in Quake itself, but is common in user made Base maps. Though inaccurate and weak, in groups the hitscan attack can catch a player off guard who is usually more concerned with the laser projectiles of the [[Enforcer]].

The Grunt is one of a few Quake monsters who possesses more animation frames than the code makes use of. In this case, he has frames reloading his shotgun, which has been utilized by numerous mods where they keep track of how many rounds the grunt has fired, or to display a switching of weapons in that particular mod.

==Tactics==

&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_army
| commonname = [[Grunt]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 32 x 32 x 64
| quakec = [[soldier.qc]]
| precaches =
progs/soldier.mdl&lt;br&gt;
progs/h_guard.mdl&lt;br&gt;
soldier/death1.wav&lt;br&gt;
soldier/idle.wav&lt;br&gt;
soldier/pain1.wav&lt;br&gt;
soldier/pain2.wav&lt;br&gt;
soldier/sattck1.wav&lt;br&gt;
soldier/sight1.wav
}}

==Entity information==

'''monster_army''' is the [[Entity|entity]] for placing '''Grunts''' in a level.

===Usage===
The Grunt is a monster entity normally associated with the Base themed setting although it has also been used in Quake to populate the early part of levels that the player has entered from a base themed level (see the start of e1m2 for an example of this).

Being a low health monster entity it's best usage is probably while the player still has minimal armor and weaponry which can allow for some overwhelming by sheer numbers in the harder skill settings.

===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Grunt. When triggered, the Grunt will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Grunt dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Grunt dies.
|}

====Spawnflags====
The monster_army entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Grunt will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Grunt
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model(&quot;:progs/solider.mdl&quot;)
    = monster_army : &quot;Grunt&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_army (1 0 0) (-16 -16 -24) (16 16 40) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>3vxgyzyhwitjglwoc8iznhriri54p8r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2871</id>
      <parentid>2869</parentid>
      <timestamp>2013-04-09T03:43:30Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>/* Tactics */  added tactics for playing</comment>
      <text xml:space="preserve" bytes="5058">{{Infobox Monster
| name = Grunt
| image = monster_quake_grunt.png
| manualtext = Goons with probes inserted into their pleasure centers; wired up so when they kill someone, they get a paroxysms of ecstasy. In essence, customized serial killers. Easy to kill, and they tote shotgun shells. It's like a little Christmas each time you kill one!
| health = 30
| attacks = Shotgun
| drop = 5 shells
| 1stappearance = [[e1m1]]
| gameversion = Shareware
| deathmessage = Player was shot by a Grunt
}}

The '''Grunt''' is the first enemy you will encounter in Quake, alongside the [[Rottweiler]]. He moves fairly slowly, has particularly low health and packs a mere shotgun. Not only is his attack just a shotgun, it calls a FireBullets value of 4 rather than the players 6, and he also aims slightly behind the player. Despite these shortcomings, on death he will drop a backpack containing 5 shells, turning an ammunition profit for the accurate (or melee) player.

Grunts though easy, can pose quite a threat in large groups, which you see very little of in Quake itself, but is common in user made Base maps. Though inaccurate and weak, in groups the hitscan attack can catch a player off guard who is usually more concerned with the laser projectiles of the [[Enforcer]].

The Grunt is one of a few Quake monsters who possesses more animation frames than the code makes use of. In this case, he has frames reloading his shotgun, which has been utilized by numerous mods where they keep track of how many rounds the grunt has fired, or to display a switching of weapons in that particular mod.

==Tactics==
As one of the weakest enemies in Quake, Grunts do not pose any real threat to a player alone, but due to their hitscan attack, they can be a nuisance to players have not noticed the Grunt's presence. In groups, especially when scattered around an area and attacking from many angles at once, Grunts can slowly wear down the health of players who do not keep moving.

A good example of a stage where Grunts do actually cause quite a lot of trouble is [[e4m1]], where the Grunts can easily snipe at the player from afar before the player has really had chance to notice them. This situation occurs quite frequently in custom maps, but less so in the stock Quake maps.

Grunts are extremely easy to deal with once the player is aware of them, with just about any weapon providing more than enough fire power to despatch them quickly. Grenades and rockets are great for taking down groups of Grunts, and also pack enough of a punch to take down any [[Enforcer]] unlucky enough to get caught in the blast.

&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_army
| commonname = [[Grunt]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 32 x 32 x 64
| quakec = [[soldier.qc]]
| precaches =
progs/soldier.mdl&lt;br&gt;
progs/h_guard.mdl&lt;br&gt;
soldier/death1.wav&lt;br&gt;
soldier/idle.wav&lt;br&gt;
soldier/pain1.wav&lt;br&gt;
soldier/pain2.wav&lt;br&gt;
soldier/sattck1.wav&lt;br&gt;
soldier/sight1.wav
}}

==Entity information==

'''monster_army''' is the [[Entity|entity]] for placing '''Grunts''' in a level.

===Usage===
The Grunt is a monster entity normally associated with the Base themed setting although it has also been used in Quake to populate the early part of levels that the player has entered from a base themed level (see the start of e1m2 for an example of this).

Being a low health monster entity it's best usage is probably while the player still has minimal armor and weaponry which can allow for some overwhelming by sheer numbers in the harder skill settings.

===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Grunt. When triggered, the Grunt will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Grunt dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Grunt dies.
|}

====Spawnflags====
The monster_army entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Grunt will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Grunt
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model(&quot;:progs/solider.mdl&quot;)
    = monster_army : &quot;Grunt&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_army (1 0 0) (-16 -16 -24) (16 16 40) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>b9kcxrnqe8x1zzv8ap0lm05fv4y0x1l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2953</id>
      <parentid>2871</parentid>
      <timestamp>2013-05-04T16:40:51Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="5076">{{Infobox Monster
| name = Grunt
| image = monster_quake_grunt.png
| manualtext = Goons with probes inserted into their pleasure centers; wired up so when they kill someone, they get a paroxysms of ecstasy. In essence, customized serial killers. Easy to kill, and they tote shotgun shells. It's like a little Christmas each time you kill one!
| health = 30
| gibthresh = -35
| attacks = Shotgun
| drop = 5 shells
| 1stappearance = [[e1m1]]
| gameversion = Shareware
| deathmessage = Player was shot by a Grunt
}}

The '''Grunt''' is the first enemy you will encounter in Quake, alongside the [[Rottweiler]]. He moves fairly slowly, has particularly low health and packs a mere shotgun. Not only is his attack just a shotgun, it calls a FireBullets value of 4 rather than the players 6, and he also aims slightly behind the player. Despite these shortcomings, on death he will drop a backpack containing 5 shells, turning an ammunition profit for the accurate (or melee) player.

Grunts though easy, can pose quite a threat in large groups, which you see very little of in Quake itself, but is common in user made Base maps. Though inaccurate and weak, in groups the hitscan attack can catch a player off guard who is usually more concerned with the laser projectiles of the [[Enforcer]].

The Grunt is one of a few Quake monsters who possesses more animation frames than the code makes use of. In this case, he has frames reloading his shotgun, which has been utilized by numerous mods where they keep track of how many rounds the grunt has fired, or to display a switching of weapons in that particular mod.

==Tactics==
As one of the weakest enemies in Quake, Grunts do not pose any real threat to a player alone, but due to their hitscan attack, they can be a nuisance to players have not noticed the Grunt's presence. In groups, especially when scattered around an area and attacking from many angles at once, Grunts can slowly wear down the health of players who do not keep moving.

A good example of a stage where Grunts do actually cause quite a lot of trouble is [[e4m1]], where the Grunts can easily snipe at the player from afar before the player has really had chance to notice them. This situation occurs quite frequently in custom maps, but less so in the stock Quake maps.

Grunts are extremely easy to deal with once the player is aware of them, with just about any weapon providing more than enough fire power to despatch them quickly. Grenades and rockets are great for taking down groups of Grunts, and also pack enough of a punch to take down any [[Enforcer]] unlucky enough to get caught in the blast.

&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_army
| commonname = [[Grunt]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 32 x 32 x 64
| quakec = [[soldier.qc]]
| precaches =
progs/soldier.mdl&lt;br&gt;
progs/h_guard.mdl&lt;br&gt;
soldier/death1.wav&lt;br&gt;
soldier/idle.wav&lt;br&gt;
soldier/pain1.wav&lt;br&gt;
soldier/pain2.wav&lt;br&gt;
soldier/sattck1.wav&lt;br&gt;
soldier/sight1.wav
}}

==Entity information==

'''monster_army''' is the [[Entity|entity]] for placing '''Grunts''' in a level.

===Usage===
The Grunt is a monster entity normally associated with the Base themed setting although it has also been used in Quake to populate the early part of levels that the player has entered from a base themed level (see the start of e1m2 for an example of this).

Being a low health monster entity it's best usage is probably while the player still has minimal armor and weaponry which can allow for some overwhelming by sheer numbers in the harder skill settings.

===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Grunt. When triggered, the Grunt will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Grunt dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Grunt dies.
|}

====Spawnflags====
The monster_army entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Grunt will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Grunt
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model(&quot;:progs/solider.mdl&quot;)
    = monster_army : &quot;Grunt&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_army (1 0 0) (-16 -16 -24) (16 16 40) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>t0xsfmar53lgb1gl60dfbcxh0wf8gp5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Half-Life</title>
    <ns>0</ns>
    <id>364</id>
    <revision>
      <id>597</id>
      <timestamp>2008-04-11T02:53:23Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: A majorly popular game based on [[Quake]]'s game code...</comment>
      <text xml:space="preserve" bytes="56">A majorly popular game based on [[Quake]]'s game code...</text>
      <sha1>e6fxsxp9wt6wye3ao8jr9gmjm0y8giz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>788</id>
      <parentid>597</parentid>
      <timestamp>2008-05-08T22:18:01Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <text xml:space="preserve" bytes="1577">{{Infobox Project
|name=Half-Life
|author=Valve Software
|license=Proprietary, commercial
|engine=[[WinQuake]], [[GLQuake]] 
|first-release=1998
|newest-release=1999
|website=[http://valvesoftware.com Valve Software]
}}

A majorly popular game based on [[Quake]]'s game code...

It was mildly popular since its November 1998 release but it skyrocketed with the release of Counter-Strike in 1999. This highly boosted sales of the game and quickly taken the throne of the most popular multiplayer game in 2000.

== Engine Modifications ==
There's:
- Skeletal model system, with 4096 triangles maximum per surface and 1024x1024x8 maximum texture resolution and depth, and optional environment mapping for textures
- A sound DSP with reverb, chorus and echo effects for software-mixed environmental audio without needing EAX.
- Colored, radiosity lighting for maps, compiled with a fork of QRAD.
- HLBSP supporting colored lighting, variating hull sizes and external textures (also supports internal textures like Quake, but not officially)
- Water waves and transparency
- Material system for walls and floors to define impacts and footstep noises
- Particle system with trailing particles 
- Beam system for beam effects including support for depthWrite fades, with shapes like straight beam, lightning noise and cylindric shockwaves
- Sound sentence sequences, for stringing a bunch of WAV files in an order to construct a sentence (i.e. Speech of announcer, marines, etc)
- Simple lip sync
- PROGS are in DLL form divided into cl_dll (for client-side) and dll (for server-side)</text>
      <sha1>3kl20iu8i378ssk73w6mbznmvshgseo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>789</id>
      <parentid>788</parentid>
      <timestamp>2008-05-08T22:18:31Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <comment>whoops</comment>
      <text xml:space="preserve" bytes="1577">{{Infobox Project
|name=Half-Life
|author=Valve Software
|license=Proprietary, commercial
|engine=[[WinQuake]], [[GLQuake]] 
|first-release=1998
|newest-release=1999
|website=[http://valvesoftware.com Valve Software]
}}

A majorly popular game based on [[Quake]]'s game code...

It was mildly popular since its November 1998 release but it skyrocketed with the release of Counter-Strike in 1999. This highly boosted sales of the game and quickly taken the throne of the most popular multiplayer game in 2000.

== Engine Modifications ==
There's:
* Skeletal model system, with 4096 triangles maximum per surface and 1024x1024x8 maximum texture resolution and depth, and optional environment mapping for textures
* A sound DSP with reverb, chorus and echo effects for software-mixed environmental audio without needing EAX.
* Colored, radiosity lighting for maps, compiled with a fork of QRAD.
* HLBSP supporting colored lighting, variating hull sizes and external textures (also supports internal textures like Quake, but not officially)
* Water waves and transparency
* Material system for walls and floors to define impacts and footstep noises
* Particle system with trailing particles 
* Beam system for beam effects including support for depthWrite fades, with shapes like straight beam, lightning noise and cylindric shockwaves
* Sound sentence sequences, for stringing a bunch of WAV files in an order to construct a sentence (i.e. Speech of announcer, marines, etc)
* Simple lip sync
* PROGS are in DLL form divided into cl_dll (for client-side) and dll (for server-side)</text>
      <sha1>fxe5wewoc3j7j2coloa00ow4h80ode1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>790</id>
      <parentid>789</parentid>
      <timestamp>2008-05-08T22:19:04Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <text xml:space="preserve" bytes="1634">{{Infobox Project
|name=Half-Life
|author=Valve Software
|license=Proprietary, commercial
|engine=[[WinQuake]], [[GLQuake]] 
|first-release=1998
|newest-release=1999
|website=[http://valvesoftware.com Valve Software]
}}

A majorly popular game based on [[Quake]]'s game code...

It was mildly popular since its November 1998 release but it skyrocketed with the release of Counter-Strike in 1999. This highly boosted sales of the game and quickly taken the throne of the most popular multiplayer game in 2000.

== Engine Modifications ==
There's:
* Skeletal model system, with 4096 triangles maximum per surface and 1024x1024x8 maximum texture resolution and depth, and optional environment mapping for textures
* A sound DSP with reverb, chorus and echo effects for software-mixed environmental audio without needing EAX.
* Colored, radiosity lighting for maps, compiled with a fork of QRAD.
* HLBSP supporting colored lighting, variating hull sizes and external textures (also supports internal textures like Quake, but not officially)
* Water waves and transparency
* Material system for walls and floors to define impacts and footstep noises
* Particle system with trailing particles 
* Beam system for beam effects including support for depthWrite fades, with shapes like straight beam, lightning noise and cylindric shockwaves
* Sound sentence sequences, for stringing a bunch of WAV files in an order to construct a sentence (i.e. Speech of announcer, marines, etc)
* Simple lip sync
* PROGS are in DLL form divided into cl_dll (for client-side) and dll (for server-side), and as such, require Microsoft Visual C++ 6 to compile.</text>
      <sha1>9hdbwwqnki9199a2stefnb4j0xf48n3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1317</id>
      <parentid>790</parentid>
      <timestamp>2009-09-27T18:43:18Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1654">{{Infobox Project
|name=Half-Life
|author=Valve Software
|license=Proprietary, commercial
|engine=[[WinQuake]], [[GLQuake]] 
|first-release=1998
|newest-release=1999
|website=[http://valvesoftware.com Valve Software]
}}

A majorly popular game based on [[Quake]]'s game code...

It was mildly popular since its November 1998 release but it skyrocketed with the release of Counter-Strike in 1999. This highly boosted sales of the game and quickly taken the throne of the most popular multiplayer game in 2000.

== Engine Modifications ==
There's:
* Skeletal model system, with 4096 triangles maximum per surface and 1024x1024x8 maximum texture resolution and depth, and optional environment mapping for textures
* A sound DSP with reverb, chorus and echo effects for software-mixed environmental audio without needing EAX.
* Colored, radiosity lighting for maps, compiled with a fork of QRAD.
* HLBSP supporting colored lighting, variating hull sizes and external textures (also supports internal textures like Quake, but not officially)
* Water waves and transparency
* Material system for walls and floors to define impacts and footstep noises
* Particle system with trailing particles 
* Beam system for beam effects including support for depthWrite fades, with shapes like straight beam, lightning noise and cylindric shockwaves
* Sound sentence sequences, for stringing a bunch of WAV files in an order to construct a sentence (i.e. Speech of announcer, marines, etc)
* Simple lip sync
* PROGS are in DLL form divided into cl_dll (for client-side) and dll (for server-side), and as such, require Microsoft Visual C++ 6 to compile.

[[Category:Games]]</text>
      <sha1>susypzhdxf2tc091e7qv88lrz2pydjw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Hazards</title>
    <ns>0</ns>
    <id>11</id>
    <revision>
      <id>14</id>
      <timestamp>2007-10-30T16:37:44Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: * [[Water]] * [[Lava]] * [[Slime]]  ===[[Dissolution of Eternity]] Hazards=== * [[Pendulum]] * [[Lightning Shooter]] * [[Lava Nail Shooter]] * [[Buzz Saw]] * [[Earthquake]]</comment>
      <text xml:space="preserve" bytes="172">* [[Water]]
* [[Lava]]
* [[Slime]]

===[[Dissolution of Eternity]] Hazards===
* [[Pendulum]]
* [[Lightning Shooter]]
* [[Lava Nail Shooter]]
* [[Buzz Saw]]
* [[Earthquake]]</text>
      <sha1>oeg481o2jv7r5l6hq1kteqol4unzf5y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1864</id>
      <parentid>14</parentid>
      <timestamp>2013-03-25T01:00:44Z</timestamp>
      <contributor>
        <ip>182.164.57.115</ip>
      </contributor>
      <comment>Added additional traps seen in Quake (perhaps we should also add crushing traps seen in the levels?)</comment>
      <text xml:space="preserve" bytes="225">* [[Water]]
* [[Lava]]
* [[Slime]]
* [[Spike Shooter]]
* [[Laser]]
* [[Lightning Rods]]

===[[Dissolution of Eternity]] Hazards===
* [[Pendulum]]
* [[Lightning Shooter]]
* [[Lava Nail Shooter]]
* [[Buzz Saw]]
* [[Earthquake]]</text>
      <sha1>ewywxsq633wcyncybp7gw2wo1hbs261</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Help:Editing</title>
    <ns>12</ns>
    <id>485</id>
    <revision>
      <id>990</id>
      <timestamp>2009-05-22T08:48:52Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>New page: Here is Wikipedia's editing help: http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page</comment>
      <text xml:space="preserve" bytes="91">Here is Wikipedia's editing help: http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page</text>
      <sha1>6b5z2f4gsne688i7ush4l7tdwodza7u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2235</id>
      <parentid>990</parentid>
      <timestamp>2013-03-26T13:30:19Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>added formatting link</comment>
      <text xml:space="preserve" bytes="163">Here is Wikipedia's editing help: http://en.wikipedia.org/wiki/Wikipedia:How_to_edit_a_page

http://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Text_formatting</text>
      <sha1>r7ghd959tgya2u3rl6e6xwfte3xo21i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Hexen II</title>
    <ns>0</ns>
    <id>437</id>
    <revision>
      <id>764</id>
      <timestamp>2008-05-08T14:18:45Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: Hexen II is a first-person shooter computer game developed by Raven Software from 1996 to 1997, published by id Software and distributed by Activision. It is the third game in the Hexen/He...</comment>
      <text xml:space="preserve" bytes="572">Hexen II is a first-person shooter computer game developed by Raven Software from 1996 to 1997, published by id Software and distributed by Activision. It is the third game in the Hexen/Heretic series, and the last in the Serpent Riders trilogy. Using a modified Quake engine, it features single player and multi player game modes, as well as four character classes to choose from, each with different abilities. These include the offensive Paladin, the defensive Crusader, the spellcasting Necromancer, and the stealthy Assassin. The score was composed by Kevin Schilder.</text>
      <sha1>rf19jxyzbzpnih8qeo7hg803wz78jlq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>780</id>
      <parentid>764</parentid>
      <timestamp>2008-05-08T19:35:50Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <text xml:space="preserve" bytes="1268">{{Infobox Project
|name=Hexen II
|author=[[Raven Software]]
|license=Proprietary, commercial
|engine=[[WinQuake]], [[GLQuake]] 
|first-release=1997
|newest-release=1997
|website=[http://www.ravensoft.com/GamesDetail/tabid/76/XMID/13/Default.aspx Raven Software]
}}
Hexen II is a first-person shooter computer game developed by Raven Software from 1996 to 1997, published by id Software and distributed by Activision. It is the third game in the Hexen/Heretic series, and the last in the Serpent Riders trilogy. 

Using a modified Quake engine, it features single player and multi player game modes, as well as four character classes to choose from, each with different abilities. These include the offensive Paladin, the defensive Crusader, the spellcasting Necromancer, and the stealthy Assassin. 

The score was composed by Kevin Schilder.

== Engine Modifications ==
There is support entity transparency, as well as alphatest chromakey transparency.

Music support is available in MIDI playback and CD Redbook audio.

There is support for a persistent cohesive hub. This makes for large save games, however.

== Source Code ==

The source code for Hexen II, Portals of Praevus and HexenWorld was released under the GNU GPL v2 in November 2000.

{{Derivative Games}}</text>
      <sha1>j6kqtdaca6d27tbxgzfj893802h6p26</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>781</id>
      <parentid>780</parentid>
      <timestamp>2008-05-08T19:36:32Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <text xml:space="preserve" bytes="1246">{{Infobox Project
|name=Hexen II
|author=[[Raven Software]]
|license=Proprietary, commercial
|engine=[[WinQuake]], [[GLQuake]] 
|first-release=1997
|newest-release=1997
|website=[http://www.ravensoft.com/GamesDetail/tabid/76/XMID/13/Default.aspx Raven Software]
}}
Hexen II is a first-person shooter computer game developed by Raven Software from 1996 to 1997, published by id Software and distributed by Activision. It is the third game in the Hexen/Heretic series, and the last in the Serpent Riders trilogy. 

Using a modified Quake engine, it features single player and multi player game modes, as well as four character classes to choose from, each with different abilities. These include the offensive Paladin, the defensive Crusader, the spellcasting Necromancer, and the stealthy Assassin. 

The score was composed by Kevin Schilder.

== Engine Modifications ==
There is support entity transparency, as well as alphatest chromakey transparency.

Music support is available in MIDI playback and CD Redbook audio.

There is support for a persistent cohesive hub. This makes for large save games, however.

== Source Code ==

The source code for Hexen II, Portals of Praevus and HexenWorld was released under the GNU GPL v2 in November 2000.</text>
      <sha1>5kdhhxriqtdgt44v4xb5g22aoymsu6u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1316</id>
      <parentid>781</parentid>
      <timestamp>2009-09-27T18:43:08Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1266">{{Infobox Project
|name=Hexen II
|author=[[Raven Software]]
|license=Proprietary, commercial
|engine=[[WinQuake]], [[GLQuake]] 
|first-release=1997
|newest-release=1997
|website=[http://www.ravensoft.com/GamesDetail/tabid/76/XMID/13/Default.aspx Raven Software]
}}
Hexen II is a first-person shooter computer game developed by Raven Software from 1996 to 1997, published by id Software and distributed by Activision. It is the third game in the Hexen/Heretic series, and the last in the Serpent Riders trilogy. 

Using a modified Quake engine, it features single player and multi player game modes, as well as four character classes to choose from, each with different abilities. These include the offensive Paladin, the defensive Crusader, the spellcasting Necromancer, and the stealthy Assassin. 

The score was composed by Kevin Schilder.

== Engine Modifications ==
There is support entity transparency, as well as alphatest chromakey transparency.

Music support is available in MIDI playback and CD Redbook audio.

There is support for a persistent cohesive hub. This makes for large save games, however.

== Source Code ==

The source code for Hexen II, Portals of Praevus and HexenWorld was released under the GNU GPL v2 in November 2000.

[[Category:Games]]</text>
      <sha1>oa8l96o1e2aliasdcq47l7p30p082xt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>History of Quake</title>
    <ns>0</ns>
    <id>1044</id>
    <revision>
      <id>2994</id>
      <timestamp>2013-07-01T15:21:24Z</timestamp>
      <contributor>
        <username>Deqer</username>
        <id>42</id>
      </contributor>
      <comment>Brief history/info on Quake.</comment>
      <text xml:space="preserve" bytes="496">Quake was the first true-3D first person shooter, released in 1996.  Previous first person shooter games (such as Doom, Duke3D, etc.) were considered to be fake-3D first person shooters.

John Romero was the director, and lead designer of Quake.

John Carmack was the lead programmer.

The engine was built well, and considered to be one of the most solid engines to date.  It's completely configurable and moddable.  In fact, Valve used the Quake 2 engine for their first Half-life game/release.</text>
      <sha1>2m8juzbzxaiwizwvja8xse54pmbwxdk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Id Software</title>
    <ns>0</ns>
    <id>810</id>
    <redirect title="id Software" />
    <revision>
      <id>2380</id>
      <timestamp>2013-03-28T14:56:04Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Spirit moved page [[Id Software]] to [[id Software]] over redirect: lowercase</comment>
      <text xml:space="preserve" bytes="25">#REDIRECT [[id Software]]</text>
      <sha1>mlxouhuolxa79clhvz1vcdte203gdfv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Idontknowthisguy:Hacking Quake</title>
    <ns>0</ns>
    <id>492</id>
    <revision>
      <id>1016</id>
      <timestamp>2009-06-05T06:23:17Z</timestamp>
      <contributor>
        <username>Idontknowthisguy</username>
        <id>17</id>
      </contributor>
      <comment>Creation of the page; includes intro and DarkPlaces makefile info</comment>
      <text xml:space="preserve" bytes="1290">I've looked around and found no real documentation on Quake hacking. I'm sure I'll find some eventually, but I want to document my experience, and hopefully help some people who will be in the position I'm in now. This wiki is a solid resource, so hopefully my additions will be a useful contribution.

I'll begin with the DarkPlaces engine by Lord Havoc, but hopefully move on to others, like the Twilight engine; maybe making specific docs for each, but hopefully having an engine agnostic reference to tie it all together.

==Good References==
* http://en.wikipedia.org/wiki/Quake_engine
* http://icculus.org/twilight/darkplaces/technotes.html (DarkPlaces)

==Darkplaces Hacking==
To get started, look at the makefile. The makefile is how you compile the program, so it should give us some pretty good hints on where to start looking. What it does:
# determine the platform (Windows, BSD, OS X, Solaris, or Linux) 
# gathers info based on the platform (architecture) 
# sets the variables to be used in compilation for the appropriate platform
# sets the sound variables based on what you passed to make or the platform
# includes makefile.inc, which has variable definitions shared by all makefiles
I don't know what the rest does, but I hazard a guess that it's not all that important.</text>
      <sha1>t8oa6ze852bx1563oznsrslqnlllcpn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1021</id>
      <parentid>1016</parentid>
      <timestamp>2009-06-05T09:24:51Z</timestamp>
      <contributor>
        <username>Idontknowthisguy</username>
        <id>17</id>
      </contributor>
      <comment>further down the rabbit hole</comment>
      <text xml:space="preserve" bytes="1511">I've looked around and found no real documentation on Quake hacking. I'm sure I'll find some eventually, but I want to document my experience, and hopefully help some people who will be in the position I'm in now. This wiki is a solid resource, so hopefully my additions will be a useful contribution.

I'll begin with the DarkPlaces engine by Lord Havoc, but hopefully move on to others, like the Twilight engine; maybe making specific docs for each, but hopefully having an engine agnostic reference to tie it all together.

==Good References==
* http://en.wikipedia.org/wiki/Quake_engine
* http://icculus.org/twilight/darkplaces/technotes.html (DarkPlaces)

==Darkplaces Hacking==
===Makefile===
To get started, look at the makefile. The makefile is how you compile the program, so it should give us some pretty good hints on where to start looking. What it does:
# determine the platform (Windows, BSD, OS X, Solaris, or Linux) 
# gathers info based on the platform (architecture) 
# sets the variables to be used in compilation for the appropriate platform
# sets the sound variables based on what you passed to make or the platform
# includes makefile.inc, which has variable definitions shared by all makefiles
I don't know what the rest does, but I hazard a guess that it's not all that important.
===make Output===
It compiles the source according to the platform specifications and options selected, then compiles the files in alphabetical order. Let's take a look at them.
===cl_===
====collision====</text>
      <sha1>4887i60zy5ch8fuzzmq55kiu5t7zkrz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Info intermission</title>
    <ns>0</ns>
    <id>882</id>
    <redirect title="info intermission" />
    <revision>
      <id>2531</id>
      <timestamp>2013-03-29T14:22:02Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Info intermission]] to [[info intermission]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="31">#REDIRECT [[info intermission]]</text>
      <sha1>ah3iw71hrmwr9e4y0del3q2ysr0bafq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Info player coop</title>
    <ns>0</ns>
    <id>160</id>
    <revision>
      <id>254</id>
      <timestamp>2007-11-03T03:42:42Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: == info_player_coop == Use this entity for making cooperative levels... This works just like [[info_player_deathmatch]], but is exclusive to cooperative play styles...</comment>
      <text xml:space="preserve" bytes="167">== info_player_coop ==
Use this entity for making cooperative levels... This works just like [[info_player_deathmatch]], but is exclusive to cooperative play styles...</text>
      <sha1>f8n082r7pf04u2jwysvtwqgqilc4o2n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Info player deathmatch</title>
    <ns>0</ns>
    <id>159</id>
    <revision>
      <id>250</id>
      <timestamp>2007-11-03T03:34:23Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: == info_player_deathmatch ==   This entity is only used in the various DM play styles. It tells Quake that this entity marks the position of a spawning player, if that person has just died...</comment>
      <text xml:space="preserve" bytes="892">== info_player_deathmatch ==


This entity is only used in the various DM play styles. It tells Quake that this entity marks the position of a spawning player, if that person has just died, or is just joining the game. Again, skill difficulty levels can be used, which will modify the play flow by not allowing players to spawn in certain areas when the server is set at a certain skill level. For example, suppose a info_player_deathmatch entity was placed on a high ledge that was difficult to reach by normal means, which also sported a rocket launcher (see E2M3, in the nail trap area for an example of this... in DM mode, there's a rocket launcher on one side, and a quad damage powerup on the other side). You could make the info_player_deathmatch entity on that ledge to be easy or normal only, and in hard difficulty, the players would have to work harder to get that rocket launcher.</text>
      <sha1>jf1kkan0fenrhmz0mtns0l219hohvwv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>253</id>
      <parentid>250</parentid>
      <timestamp>2007-11-03T03:38:52Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="891">== info_player_deathmatch == 
This entity is only used in the various DM play styles. It tells Quake that this entity marks the position of a spawning player, if that person has just died, or is just joining the game. Again, skill difficulty levels can be used, which will modify the play flow by not allowing players to spawn in certain areas when the server is set at a certain skill level. For example, suppose a info_player_deathmatch entity was placed on a high ledge that was difficult to reach by normal means, which also sported a rocket launcher (see E2M3, in the nail trap area for an example of this... in DM mode, there's a rocket launcher on one side, and a quad damage powerup on the other side). You could make the info_player_deathmatch entity on that ledge to be easy or normal only, and in hard difficulty, the players would have to work harder to get that rocket launcher.</text>
      <sha1>15cd1jqa5ddw2ta01set0u1re9wwbp3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>628</id>
      <parentid>253</parentid>
      <timestamp>2008-04-16T14:53:53Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="907">== info_player_deathmatch == 
This entity is only used in the various [[DM]] play styles. It tells Quake that this entity marks the position of a spawning player, if that person has just died, or is just joining the game. Again, skill difficulty levels can be used, which will modify the play flow by not allowing players to spawn in certain areas when the server is set at a certain skill level. For example, suppose a info_player_deathmatch entity was placed on a high ledge that was difficult to reach by normal means, which also sported a rocket launcher (see [[E2M3]], in the nail trap area for an example of this... in [[DM]] mode, there's a rocket launcher on one side, and a quad damage powerup on the other side). You could make the info_player_deathmatch [[entity]] on that ledge to be easy or normal only, and in hard difficulty, the players would have to work harder to get that rocket launcher.</text>
      <sha1>qfuh9dlmnzwiem03qdjbc7xm6nx5u2f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Info player start</title>
    <ns>0</ns>
    <id>158</id>
    <revision>
      <id>249</id>
      <timestamp>2007-11-03T03:31:17Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: info_player_start  This entity is required in all maps. It determines where the starting point is for SPQ games, and is used in DM games as well. You need to position this in your map in t...</comment>
      <text xml:space="preserve" bytes="436">info_player_start

This entity is required in all maps. It determines where the starting point is for SPQ games, and is used in DM games as well. You need to position this in your map in the area where your player(s) will begin to play, and make it face (the compass in Worldcraft) the direction you want it to face when it starts. You CAN have multiple starting points for different skill levels by using the &quot;Not in...&quot; flag settings.</text>
      <sha1>eft8um11pk7cf5ibqb5x2i3637po24g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>251</id>
      <parentid>249</parentid>
      <timestamp>2007-11-03T03:36:09Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="447">== info_player_start ==

     This entity is required in all maps. It determines where the starting point is for SPQ games, and is used in DM games as well. You need to position this in your map in the area where your player(s) will begin to play, and make it face (the compass in Worldcraft) the direction you want it to face when it starts. You CAN have multiple starting points for different skill levels by using the &quot;Not in...&quot; flag settings.</text>
      <sha1>tie3gleu2398s5zez60f80bng4iiy9l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>252</id>
      <parentid>251</parentid>
      <timestamp>2007-11-03T03:37:59Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="441">== info_player_start ==
This entity is required in all maps. It determines where the starting point is for SPQ games, and is used in DM games as well. You need to position this in your map in the area where your player(s) will begin to play, and make it face (the compass in Worldcraft) the direction you want it to face when it starts. You CAN have multiple starting points for different skill levels by using the &quot;Not in...&quot; flag settings.</text>
      <sha1>k35kj396dkzelgv3gz3n1h8h8cmn77m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>255</id>
      <parentid>252</parentid>
      <timestamp>2007-11-03T03:46:28Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="463">== info_player_start ==
This entity is required in all maps. It determines where the starting point is for single player games, and is used in deathmatch games as well. You need to position this in your map in the area where your player(s) will begin to play, and make it face (the compass in [[Worldcraft]]) the direction you want it to face when it starts. You can have multiple starting points for different skill levels by using the &quot;Not in...&quot; flag settings.</text>
      <sha1>0b0znb2tr63lcaqf4ciindmpc7vlrcf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Info player start2</title>
    <ns>0</ns>
    <id>351</id>
    <revision>
      <id>576</id>
      <timestamp>2008-04-11T02:16:01Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: This is used as a second starting point in &quot;start&quot; levels. This is used only in start levels, as a starting point after finishing an episode. Remember in the original Quake levels, after f...</comment>
      <text xml:space="preserve" bytes="440">This is used as a second starting point in &quot;start&quot; levels. This is used only in start levels, as a starting point after finishing an episode. Remember in the original Quake levels, after finishing an episode, you started in the episode selection room, rather than in the skill level selection area? This was done by using an info_player_start2 entity. Difficulty levels can also be used to spawn at different locations based on skill level.</text>
      <sha1>50ot2225kcv6s6ay0zzikl5efhsv8fc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Info teleport destination</title>
    <ns>0</ns>
    <id>883</id>
    <redirect title="info teleport destination" />
    <revision>
      <id>2533</id>
      <timestamp>2013-03-29T14:22:03Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Info teleport destination]] to [[info teleport destination]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[info teleport destination]]</text>
      <sha1>hy9feom5sfs3u93ye063gbp4e9ua925</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Installing Quake</title>
    <ns>0</ns>
    <id>2</id>
    <revision>
      <id>5</id>
      <timestamp>2007-10-30T16:23:48Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: There are a few million different versions of [[Quake]]: the original DOS Quake (v1.08), [[WinQuake]] (v1.09), and [[GLQuake]] (v0.97/v1.09).  Collectively, those three are now often refer...</comment>
      <text xml:space="preserve" bytes="3771">There are a few million different versions of [[Quake]]: the original DOS Quake (v1.08), [[WinQuake]] (v1.09), and [[GLQuake]] (v0.97/v1.09).  Collectively, those three are now often referred to as [[NetQuake]] or NormalQuake (NQ), in reference to the original predictionless network code.

Additionally, [[QuakeWorld]] was released by [http://www.idsoftware.com/ id Software] to support larger games over wider networks (namely, the Internet).  There is the QuakeWorld client (v2.30), the QuakeWorld server (v2.30), and the GLQuakeWorld client (v2.30).

There are also Linux equivalents for each version.

Finally, with the source to the game engine released, there are a myriad different slightly modified Quake engines.  Those ''should'' include their own installation documentation and are beyond the scope of this entry.

===Installing Under DOS or Windows===

First, a copy of the game is required.  The shareware (demo) version is available free of charge from [http://www.idsoftware.com/ id Software]'s store, as well as various other Quake sites and file repositories.  The full retail version of the game can also be purchased at id's store.

If downloading the shareware version, unzip the archive (with [http://www.winzip.com/ WinZip] or your favorite other unzippish program) into a temporary directory and run the installation batch file ('''install.bat''').  If running Windows, you'll want to do this from a Command Prompt.

If installing from a CD, either run setup.exe under Windows or the installation batch file ('''install.bat''') under DOS, and follow the instructions.  By default it will install to '''C:\Quake'''.  You'll need about 59MB hard drive space free for the retail version, and about 26MB for the shareware version.

That will put the base installation onto your hard drive.  The shareware version currently available and most retail CDs include version 1.06 of the game.  From v1.06 onward, the only changes to the game have been changes in the executable file only ('''quake.exe'''), so if you do not intend to run the old DOS Quake (and indeed, if you're using Windows 2000/XP, you can't anyway); it's not necessary to bother upgrading to 1.08.

However, if you are going to use the DOS version, or just want your installation complete for completeness' sake, find the file '''quake108.zip''' from your favorite file repository (search for &quot;Quake 1.08 Patch&quot;).  Unzip the file into your Quake directory, and it will replace the '''quake.exe''' file with an updated one.  You're good to go.

(...continued...)

===Installing Under Linux===

Contrary to popular myth, it is not nessessary to have an [[evile]] OS like DOS or
Windows to install Quake on a Linux box. Installation is fairly simple if you
have a basic familiarity with the Linux command line.

# Mount your Quake CD-ROM.
# Check if there's a file named '''resource.1''' on it. If so, skip to step 4.
# If not, cat (1) the files named '''quake101.1''' and '''quake101.2''' together to make your own '''resource.1'''.
# Create and change to a directory to install Quake into.
# Use the lha (1) archive tool to extract '''resource.1'''. This will create a bunch of files. The [[id1]] directory and it's contents are all you really need, but you may want to hold on to the documentation that's included.
# Download and install the Linux executables. You can find them at the QuakeWorld website or at id Software's FTP site.

For fully detailed instructions (and more handy tips than you can shake a
boomstick at) see the [http://www.tldp.org/HOWTO/Quake-HOWTO.html Linux Quake HOWTO].

(WinQuake)

(GLQuake)

(QuakeWorld)

There is a Quakeworld package with all the stuff you need to get going. Its called eQuake and lives here: http://equake.quakeworld.nu/

(water vis maps)</text>
      <sha1>c14o8ryq73waizs1ej6hj1v0lmdu79z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>575</id>
      <parentid>5</parentid>
      <timestamp>2008-04-09T05:00:26Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <comment>/* Installing Under Linux */ Stupid warez advertising removal.</comment>
      <text xml:space="preserve" bytes="3635">There are a few million different versions of [[Quake]]: the original DOS Quake (v1.08), [[WinQuake]] (v1.09), and [[GLQuake]] (v0.97/v1.09).  Collectively, those three are now often referred to as [[NetQuake]] or NormalQuake (NQ), in reference to the original predictionless network code.

Additionally, [[QuakeWorld]] was released by [http://www.idsoftware.com/ id Software] to support larger games over wider networks (namely, the Internet).  There is the QuakeWorld client (v2.30), the QuakeWorld server (v2.30), and the GLQuakeWorld client (v2.30).

There are also Linux equivalents for each version.

Finally, with the source to the game engine released, there are a myriad different slightly modified Quake engines.  Those ''should'' include their own installation documentation and are beyond the scope of this entry.

===Installing Under DOS or Windows===

First, a copy of the game is required.  The shareware (demo) version is available free of charge from [http://www.idsoftware.com/ id Software]'s store, as well as various other Quake sites and file repositories.  The full retail version of the game can also be purchased at id's store.

If downloading the shareware version, unzip the archive (with [http://www.winzip.com/ WinZip] or your favorite other unzippish program) into a temporary directory and run the installation batch file ('''install.bat''').  If running Windows, you'll want to do this from a Command Prompt.

If installing from a CD, either run setup.exe under Windows or the installation batch file ('''install.bat''') under DOS, and follow the instructions.  By default it will install to '''C:\Quake'''.  You'll need about 59MB hard drive space free for the retail version, and about 26MB for the shareware version.

That will put the base installation onto your hard drive.  The shareware version currently available and most retail CDs include version 1.06 of the game.  From v1.06 onward, the only changes to the game have been changes in the executable file only ('''quake.exe'''), so if you do not intend to run the old DOS Quake (and indeed, if you're using Windows 2000/XP, you can't anyway); it's not necessary to bother upgrading to 1.08.

However, if you are going to use the DOS version, or just want your installation complete for completeness' sake, find the file '''quake108.zip''' from your favorite file repository (search for &quot;Quake 1.08 Patch&quot;).  Unzip the file into your Quake directory, and it will replace the '''quake.exe''' file with an updated one.  You're good to go.

(...continued...)

===Installing Under Linux===

Contrary to popular myth, it is not nessessary to have an [[evile]] OS like DOS or
Windows to install Quake on a Linux box. Installation is fairly simple if you
have a basic familiarity with the Linux command line.

# Mount your Quake CD-ROM.
# Check if there's a file named '''resource.1''' on it. If so, skip to step 4.
# If not, cat (1) the files named '''quake101.1''' and '''quake101.2''' together to make your own '''resource.1'''.
# Create and change to a directory to install Quake into.
# Use the lha (1) archive tool to extract '''resource.1'''. This will create a bunch of files. The [[id1]] directory and it's contents are all you really need, but you may want to hold on to the documentation that's included.
# Download and install the Linux executables. You can find them at the QuakeWorld website or at id Software's FTP site.

For fully detailed instructions (and more handy tips than you can shake a
boomstick at) see the [http://www.tldp.org/HOWTO/Quake-HOWTO.html Linux Quake HOWTO].

(WinQuake)

(GLQuake)

(QuakeWorld)

(water vis maps)</text>
      <sha1>dunlmbsoku8clddmdj5at20o6fi0fz4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Installing addons</title>
    <ns>0</ns>
    <id>13</id>
    <revision>
      <id>16</id>
      <timestamp>2007-10-30T16:46:26Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: Add-ons, more commonly known as [[mod|mods]], usually come in a folder in a zip file. For instance, if you downloaded [[Prydon Gate]], it will come in a folder called '''PRYDON'''. To inst...</comment>
      <text xml:space="preserve" bytes="2018">Add-ons, more commonly known as [[mod|mods]], usually come in a folder in a zip file. For instance, if you downloaded [[Prydon Gate]], it will come in a folder called '''PRYDON'''. To install this addon, place it in your [[Quake]] directory, (so it is alongside the &quot;[[id1]]&quot; folder). For instance, if your Quake directory is '''C:\QUAKE''', make it '''C:\QUAKE\PRYDON'''.

Congratulations, it has been installed. Now how to run it. You will either need to use the DOS Prompt or the Windows Run command, either way run the Quake executable, followed by the [[-game]] [[command-line arguments|command-line argument]], followed by the folder name. For example:

'''C:\QUAKE\GLQuake.exe -game prydon'''

Some addons (read the readme first) may require more memory to be allocated. For this, use the [[-winmem]] command-line argument in [[DOSQuake]] and the [[-heapsize]] argument in [[WinQuake]] and [[GLQuake]] (and all engines based on them).

There is an easier way to run the official mission packs, [[Scourge of Armagon]] and [[Dissolution of Eternity]]. They should come with an upgraded DOSQuake executable (v1.08), but if you have WinQuake or GLQuake or a patched DOSQuake, you're fine. For Scourge of Armagon, use the command-line argument [[-hipnotic]]. For Dissolution of Eternity, use [[-rogue]]. This way you can have [[mod|mods]] of the official mission packs, which are in turn mods of Quake. Cool, no?

===Installing Maps===

To install a user-created map, download it and extract the [[.bsp]] file. Move into your id1/maps folder, for instance if C:\Quake is your Quake folder, move it to:

C:\Quake\id1\maps

Now, run Quake and use the [[map]] console command to switch to that level. For instance if the level was called SM36.BSP, type

map sm36

in the console. Alternatively, you could use the [[+command|+map]] command-line argument to run it straight off the command line (be sure to use [[+command|+skill]] as well to set the difficulty)

===See Also===
* http://singe.telefragged.com/install.html</text>
      <sha1>n2q2nd6shmt93yzyf0c0uhx367sbxuf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Item armor1</title>
    <ns>0</ns>
    <id>884</id>
    <redirect title="item armor1" />
    <revision>
      <id>2535</id>
      <timestamp>2013-03-29T14:22:03Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Item armor1]] to [[item armor1]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="25">#REDIRECT [[item armor1]]</text>
      <sha1>9hmhoygv2ozyy6d51odvf213iz56rqi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Item armor2</title>
    <ns>0</ns>
    <id>885</id>
    <redirect title="item armor2" />
    <revision>
      <id>2537</id>
      <timestamp>2013-03-29T14:22:03Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Item armor2]] to [[item armor2]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="25">#REDIRECT [[item armor2]]</text>
      <sha1>izugsd8ffxpxa059faofxsc0j3mmqp8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Item armorInv</title>
    <ns>0</ns>
    <id>886</id>
    <redirect title="item armorinv" />
    <revision>
      <id>2539</id>
      <timestamp>2013-03-29T14:22:04Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Item armorInv]] to [[item armorinv]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="27">#REDIRECT [[item armorinv]]</text>
      <sha1>6t7lwu9z3qacgboy925p0q682d358bb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Item artifact envirosuit</title>
    <ns>0</ns>
    <id>887</id>
    <redirect title="item artifact envirosuit" />
    <revision>
      <id>2541</id>
      <timestamp>2013-03-29T14:22:04Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Item artifact envirosuit]] to [[item artifact envirosuit]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[item artifact envirosuit]]</text>
      <sha1>d3zegnahbqkvhi9u81rsivwglrvgy5r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Item artifact invisibility</title>
    <ns>0</ns>
    <id>888</id>
    <redirect title="item artifact invisibility" />
    <revision>
      <id>2543</id>
      <timestamp>2013-03-29T14:22:04Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Item artifact invisibility]] to [[item artifact invisibility]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="40">#REDIRECT [[item artifact invisibility]]</text>
      <sha1>lxj27b70q3yb5npk53q462nuh4zwec8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Item artifact invulnerability</title>
    <ns>0</ns>
    <id>889</id>
    <redirect title="item artifact invulnerability" />
    <revision>
      <id>2545</id>
      <timestamp>2013-03-29T14:22:05Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Item artifact invulnerability]] to [[item artifact invulnerability]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="43">#REDIRECT [[item artifact invulnerability]]</text>
      <sha1>0u99weculk0hv925r7vbfznc9iyhcpe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Item artifact super damage</title>
    <ns>0</ns>
    <id>890</id>
    <redirect title="item artifact super damage" />
    <revision>
      <id>2547</id>
      <timestamp>2013-03-29T14:22:05Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Item artifact super damage]] to [[item artifact super damage]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="40">#REDIRECT [[item artifact super damage]]</text>
      <sha1>deoq5jnew4t8er1a7ckw920htg8o2eg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Item cells</title>
    <ns>0</ns>
    <id>891</id>
    <redirect title="item cells" />
    <revision>
      <id>2549</id>
      <timestamp>2013-03-29T14:22:05Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Item cells]] to [[item cells]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="24">#REDIRECT [[item cells]]</text>
      <sha1>bljjb8kaq1yq91kxlg6h4zzzb8x02a2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Item health</title>
    <ns>0</ns>
    <id>892</id>
    <redirect title="item health" />
    <revision>
      <id>2551</id>
      <timestamp>2013-03-29T14:22:07Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Item health]] to [[item health]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="25">#REDIRECT [[item health]]</text>
      <sha1>56rdtdltskkr7ncb0ym1xu3pddzeawr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Item rockets</title>
    <ns>0</ns>
    <id>893</id>
    <redirect title="item rockets" />
    <revision>
      <id>2553</id>
      <timestamp>2013-03-29T14:22:07Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Item rockets]] to [[item rockets]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="26">#REDIRECT [[item rockets]]</text>
      <sha1>enmihdammh6612csfevl16meb3rq235</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Item shells</title>
    <ns>0</ns>
    <id>894</id>
    <redirect title="item shells" />
    <revision>
      <id>2555</id>
      <timestamp>2013-03-29T14:22:07Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Item shells]] to [[item shells]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="25">#REDIRECT [[item shells]]</text>
      <sha1>3s8g4ftj6w7dixaixcsr29pmmtdqggm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Item spikes</title>
    <ns>0</ns>
    <id>895</id>
    <redirect title="item spikes" />
    <revision>
      <id>2557</id>
      <timestamp>2013-03-29T14:22:08Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Item spikes]] to [[item spikes]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="25">#REDIRECT [[item spikes]]</text>
      <sha1>rpms0c97i8b3bvaglep07fq0vl9a5bu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Items</title>
    <ns>0</ns>
    <id>10</id>
    <revision>
      <id>13</id>
      <timestamp>2007-10-30T16:37:14Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: ===[[Quake]] Items=== * [[Health]] * [[Ammo Boxes]] * [[Mega-Health]] * [[Quad Damage]] * [[Biosuit]] * [[Pentagram of Protection]] * [[Ring of Shadows]] * [[Green Armor]] * [[Yellow Armor...</comment>
      <text xml:space="preserve" bytes="416">===[[Quake]] Items===
* [[Health]]
* [[Ammo Boxes]]
* [[Mega-Health]]
* [[Quad Damage]]
* [[Biosuit]]
* [[Pentagram of Protection]]
* [[Ring of Shadows]]
* [[Green Armor]]
* [[Yellow Armor]]
* [[Red Armor]]

===[[Scourge of Armagon]] Items===

* [[Horn of Conjuring]]
* [[Empathy Shield]]
* [[The Wet Suit]]

===[[Dissolution of Eternity]] Items===

* [[Anti Grav Belt]]
* [[Power Shield]]

(.. yet still incomplete)</text>
      <sha1>9cna1us8zu6a2je28bokg1wvpziv9qy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>JoeQuake</title>
    <ns>0</ns>
    <id>455</id>
    <revision>
      <id>805</id>
      <timestamp>2008-05-09T17:35:43Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: JoeQuake is made by Jozsef Szalontai  JoeQuake is an improved NQ engine with plenty of [[ZQuake]] and [[FuhQuake]] graphical effects included. JoeQuake's main aim is to provide pleasant de...</comment>
      <text xml:space="preserve" bytes="443">JoeQuake is made by Jozsef Szalontai

JoeQuake is an improved NQ engine with plenty of [[ZQuake]] and [[FuhQuake]] graphical effects included. JoeQuake's main aim is to provide pleasant demo watching for .dem files. JoeQuake also supports better graphical quality including 32bit textures, colored lights, smoother animations etc.

JoeQuake is released under the GNU [[GPL license]]. You may freely redistribute or modify JoeQuake as you wish.</text>
      <sha1>f752lv2pgmqpuskkbeoy07vt6h37sp1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>808</id>
      <parentid>805</parentid>
      <timestamp>2008-05-09T17:37:43Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="525">JoeQuake is made by Jozsef Szalontai

JoeQuake is an improved NQ engine with plenty of [[ZQuake]] and [[FuhQuake]] graphical effects included. JoeQuake's main aim is to provide pleasant demo watching for .dem files. JoeQuake also supports better graphical quality including 32bit textures, colored lights, smoother animations etc.

JoeQuake is released under the GNU [[GPL license]]. You may freely redistribute or modify JoeQuake as you wish.


== Screens ==
[[Image:http://www.runecentral.com/joequake/shots/menu000_s.jpg]]</text>
      <sha1>2btis5ibwpp0i1bxy6yr5zsz0kubyx9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>809</id>
      <parentid>808</parentid>
      <timestamp>2008-05-09T17:37:55Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="523">JoeQuake is made by Jozsef Szalontai

JoeQuake is an improved NQ engine with plenty of [[ZQuake]] and [[FuhQuake]] graphical effects included. JoeQuake's main aim is to provide pleasant demo watching for .dem files. JoeQuake also supports better graphical quality including 32bit textures, colored lights, smoother animations etc.

JoeQuake is released under the GNU [[GPL license]]. You may freely redistribute or modify JoeQuake as you wish.


== Screens ==
[Image:http://www.runecentral.com/joequake/shots/menu000_s.jpg]</text>
      <sha1>htxnlcfcz9ai54lhpur5odrdfs1csjn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>810</id>
      <parentid>809</parentid>
      <timestamp>2008-05-09T17:38:22Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>/* Screens */</comment>
      <text xml:space="preserve" bytes="527">JoeQuake is made by Jozsef Szalontai

JoeQuake is an improved NQ engine with plenty of [[ZQuake]] and [[FuhQuake]] graphical effects included. JoeQuake's main aim is to provide pleasant demo watching for .dem files. JoeQuake also supports better graphical quality including 32bit textures, colored lights, smoother animations etc.

JoeQuake is released under the GNU [[GPL license]]. You may freely redistribute or modify JoeQuake as you wish.


== Screens ==
[[Image:&quot;http://www.runecentral.com/joequake/shots/menu000_s.jpg&quot;]]</text>
      <sha1>17rgryc2p8bsspm6eznl9cjkxhwqqc1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>811</id>
      <parentid>810</parentid>
      <timestamp>2008-05-09T17:38:53Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>/* Screens */</comment>
      <text xml:space="preserve" bytes="443">JoeQuake is made by Jozsef Szalontai

JoeQuake is an improved NQ engine with plenty of [[ZQuake]] and [[FuhQuake]] graphical effects included. JoeQuake's main aim is to provide pleasant demo watching for .dem files. JoeQuake also supports better graphical quality including 32bit textures, colored lights, smoother animations etc.

JoeQuake is released under the GNU [[GPL license]]. You may freely redistribute or modify JoeQuake as you wish.</text>
      <sha1>f752lv2pgmqpuskkbeoy07vt6h37sp1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>KRIMZON SV PARSECLIENTCOMMAND</title>
    <ns>0</ns>
    <id>340</id>
    <revision>
      <id>548</id>
      <timestamp>2008-02-29T12:06:22Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Engine-called QC prototypes: &lt;pre&gt; void(string s) SV_ParseClientCommand; &lt;/pre&gt;  Builtin definitions: &lt;pre&gt; void(entity e, string s) clientcommand = #440; float(string s) tokenize = #441; ...</comment>
      <text xml:space="preserve" bytes="639">Engine-called QC prototypes:
&lt;pre&gt;
void(string s) SV_ParseClientCommand;
&lt;/pre&gt;

Builtin definitions:
&lt;pre&gt;
void(entity e, string s) clientcommand = #440;
float(string s) tokenize = #441;
string(float n) argv = #442;
&lt;/pre&gt;

Provides QC the ability to completely control server interpretation of client commands (&quot;say&quot; and &quot;color&quot; for example, clientcommand is necessary for this and substring (FRIK_FILE) is useful) as well as adding new commands (tokenize, argv, and stof (FRIK_FILE) are useful for this)), whenever a clc_stringcmd is received the QC function is called, and it is up to the QC to decide what (if anything) to do with it.</text>
      <sha1>43jolb3zbrgc38gaf5mmotefr13pg2p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1614</id>
      <parentid>548</parentid>
      <timestamp>2010-07-08T12:44:50Z</timestamp>
      <contributor>
        <ip>188.221.214.2</ip>
      </contributor>
      <comment>KZ - quickly described the builtins and added the important note of always passing commands through.</comment>
      <text xml:space="preserve" bytes="1668">Engine-called QC prototypes:
&lt;pre&gt;
void(string s) SV_ParseClientCommand;
&lt;/pre&gt;

Builtin definitions:
&lt;pre&gt;
void(entity e, string s) clientcommand = #440;
float(string s) tokenize = #441;
string(float n) argv = #442;
&lt;/pre&gt;

Provides QC the ability to completely control server interpretation of client commands (&quot;say&quot; and &quot;color&quot; for example, clientcommand is necessary for this and substring (FRIK_FILE) is useful) as well as adding new commands (tokenize, argv, and stof (FRIK_FILE) are useful for this)), whenever a clc_stringcmd is received the QC function is called, and it is up to the QC to decide what (if anything) to do with it.

The server QC implements the function SV_ParseClientCOmmand. This function will then receive all commands sent to the server using the 'cmd' command on the client side. self is the client entity which requested the command. The command itself (excluding the 'cmd' bit) is in the string s.

The tokenize and argv builtins are intended for parsing the command string but their use elsewhere is valid.

The clientcommand builtin passes a command string back to the engine - the string can be modified or unchanged. It can only be called from within SV_ParseClientCommand (or more specifically, only when it is called by the engine, but also including any functions it calls). If clientcommand is never called then SV_ParseClientCommand will effectively block or override the command it received.

IMPORTANT NOTE: All client commands will be redirected through SV_ParseClientCommand and many are required for clients to connect. Therefore all commands that the QC doesn't understand should be allowed to pass through to the engine.</text>
      <sha1>6z2c8s8gjz8til6ri8q31g0nmtyax5j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Knight</title>
    <ns>0</ns>
    <id>135</id>
    <revision>
      <id>217</id>
      <timestamp>2007-11-02T19:35:01Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: Canned meat. Open 'er up and see if it's still fresh.  * '''Weapon:''' Sword * '''Health:''' 75 * '''Treasure:''' Nothing  '''Tips:''' Knights have a sharp sword and strong arms, but their...</comment>
      <text xml:space="preserve" bytes="536">Canned meat. Open 'er up and see if it's still fresh.

* '''Weapon:''' Sword
* '''Health:''' 75
* '''Treasure:''' Nothing

'''Tips:''' Knights have a sharp sword and strong arms, but their drawback is that they can't hit you from afar. Feel free to take them out with the [[Rocket Launcher]], [[Nailgun]], or [[Super Nailgun]]. Or, if you're close enough, two good spanks from the [[Double-Barrelled Shotgun]] will work.

'''Entity name:''' [[monster_knight]]

[http://frikqcc.quakesrc.org/files/knight.gif]

==See Also==
* [[Monsters]]</text>
      <sha1>r1vv7fi2rmjpyoabdoukl2r1wxnieq3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>272</id>
      <parentid>217</parentid>
      <timestamp>2007-11-05T22:12:33Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <text xml:space="preserve" bytes="386">Canned meat. Open 'er up and see if it's still fresh.

* '''Weapon:''' Sword
* '''Health:''' 75
* '''Treasure:''' Nothing

'''Tips:''' Knights have a sharp sword and strong arms, but their drawback is their lack of a ranged attack. Two good spanks from the [[Double-Barrelled Shotgun]] will work.

[[Image:Knight.gif]]

'''Entity name:''' [[monster_knight]]

==See Also==
* [[Monsters]]</text>
      <sha1>4xw4l0g9y65rcfs28avrdzglvgh3vyf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>736</id>
      <parentid>272</parentid>
      <timestamp>2008-05-07T20:34:45Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="491">Canned meat. Open 'er up and see if it's still fresh.

* '''Weapon:''' Sword
* '''Health:''' 75
* '''Treasure:''' Nothing

'''Tips:'''
----
Knights have a sharp sword and strong arms, but their drawback is their lack of a ranged attack. Two good spanks from the [[Double-Barrelled Shotgun]] will work.
*'''Best Weapons:''' Nailgun, Super Nailgun, Rocket Launcher
*'''Worst Weapons:''' Grenades, Shotgun
[[Image:Knight.gif]]

'''Entity name:''' [[monster_knight]]

==See Also==
* [[Monsters]]</text>
      <sha1>19ozr7uybwogug5x1v96865s7dyd2oi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>846</id>
      <parentid>736</parentid>
      <timestamp>2008-05-17T17:59:44Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="547">{{Infobox Monster
|monstername=Knight
|entityname=monster_knight
|monsterhealth=75
|monstermelee=Sword
|monstermissile=n/a
|movetype=
|monsterspeed=
|monsterclass=
}}

[[Image:Knight.gif|left]]

Knights have a sharp sword and strong arms, but their drawback is their lack of a ranged attack. Two good spanks from the [[Double-Barrelled Shotgun]] will work.
*'''Best Weapons:''' Nailgun, Super Nailgun, Rocket Launcher
*'''Worst Weapons:''' Grenades, Shotgun

''&quot;Canned meat. Open 'er up and see if it's still fresh.&quot;''

==See Also==
* [[Monsters]]</text>
      <sha1>lycl5ccp2cughecn5h2d8b4es8earx9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>863</id>
      <parentid>846</parentid>
      <timestamp>2008-05-17T18:53:11Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="568">{{Infobox Monster
|monstername=Knight
|entityname=monster_knight
|monsterhealth=75
|monstermelee=Sword
|monstermissile=n/a
|movetype=
|monsterspeed=
|monsterclass=
|monsterdrop=nothing
}}

[[Image:Knight.gif|left]]

Knights have a sharp sword and strong arms, but their drawback is their lack of a ranged attack. Two good spanks from the [[Double-Barrelled Shotgun]] will work.
*'''Best Weapons:''' Nailgun, Super Nailgun, Rocket Launcher
*'''Worst Weapons:''' Grenades, Shotgun

''&quot;Canned meat. Open 'er up and see if it's still fresh.&quot;''

==See Also==
* [[Monsters]]</text>
      <sha1>49tfcufl013djbon8hsywszlbz3z7ww</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1244</id>
      <parentid>863</parentid>
      <timestamp>2009-09-25T08:00:30Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="527">{{Infobox Monster
|name=Knight
|entity=monster_knight
|model=knight.mdl&lt;br /&gt;h_knight.mdl (head gib)
|health=75
|attacks=Sword
|drop=nothing
|gameversion=Shareware
}}
[[Image:Knight.gif|left]]
'''Knights''' have a sharp sword and strong arms, but their drawback is their lack of a ranged attack. Two good spanks from the [[Double-Barrelled Shotgun]] will work (or, more efficiently, a [[Shotgun]] blast immediately followed by a double-barrelled shot).

''&quot;Canned meat. Open 'er up and see if it's still fresh.&quot;''

{{Monsters}}</text>
      <sha1>q05076nb9ugp8whpa6toi1vu7e5ie7y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1383</id>
      <parentid>1244</parentid>
      <timestamp>2009-10-08T23:21:18Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="551">{{Infobox Monster
|name=Knight
|entity=monster_knight
|model=knight.mdl&lt;br /&gt;h_knight.mdl (head gib)
|health=75
|attacks=Sword
|drop=nothing
|1stappearance=[[e1m2]]
|gameversion=Shareware
}}
[[Image:Knight.gif|left]]
'''Knights''' have a sharp sword and strong arms, but their drawback is their lack of a ranged attack. Two good spanks from the [[Double-Barrelled Shotgun]] will work (or, more efficiently, a [[Shotgun]] blast immediately followed by a double-barrelled shot).

''&quot;Canned meat. Open 'er up and see if it's still fresh.&quot;''

{{Monsters}}</text>
      <sha1>272vanr0nc9vfcvqtpwhvvk4t4qusn8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1397</id>
      <parentid>1383</parentid>
      <timestamp>2009-10-08T23:45:37Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="589">{{Infobox Monster
|name=Knight
|entity=monster_knight
|model=knight.mdl&lt;br /&gt;h_knight.mdl (head gib)
|health=75
|attacks=Sword
|drop=nothing
|1stappearance=[[e1m2]]
|gameversion=Shareware
}}
[[Image:Knight.gif|left]]
''&quot;Canned meat. Open 'er up and see if it's still fresh.&quot;''

'''Knights''' have a sharp sword and strong arms, but their drawback is their lack of a ranged attack. Two good spanks from the [[Double-Barrelled Shotgun]] will work (or, more efficiently, a [[Shotgun]] blast immediately followed by a double-barrelled shot).

''&quot;Player was slashed by a Knight&quot;''

{{Monsters}}</text>
      <sha1>8wbrsirhycanxfn9b88yev4el5yf81k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1923</id>
      <parentid>1397</parentid>
      <timestamp>2013-03-25T03:39:03Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>fixed image location and file link</comment>
      <text xml:space="preserve" bytes="590">[[Image:Knight.gif|left]]
{{Infobox Monster
|name=Knight
|entity=monster_knight
|model=knight.mdl&lt;br /&gt;h_knight.mdl (head gib)
|health=75
|attacks=Sword
|drop=nothing
|1stappearance=[[e1m2]]
|gameversion=Shareware
}}

''&quot;Canned meat. Open 'er up and see if it's still fresh.&quot;''

'''Knights''' have a sharp sword and strong arms, but their drawback is their lack of a ranged attack. Two good spanks from the [[Double-Barrelled Shotgun]] will work (or, more efficiently, a [[Shotgun]] blast immediately followed by a double-barrelled shot).

''&quot;Player was slashed by a Knight&quot;''

{{Monsters}}</text>
      <sha1>6zlo2hpo5n08356k295njotadm3rnql</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2836</id>
      <parentid>1923</parentid>
      <timestamp>2013-04-08T13:48:55Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>updated infobox</comment>
      <text xml:space="preserve" bytes="565">{{Infobox Monster
| name = Knight
| image = monster_quake_knight.png
| manualtext = Canned meat. Open 'er up and see if it's still fresh.
| health = 75
| attacks = Sword
| drop = nothing
| 1stappearance = [[e1m2]]
| gameversion = Shareware
| deathmessage = Player was slashed by a Knight
}}

'''Knights''' have a sharp sword and strong arms, but their drawback is their lack of a ranged attack. Two good spanks from the [[Double-Barrelled Shotgun]] will work (or, more efficiently, a [[Shotgun]] blast immediately followed by a double-barrelled shot).

{{Monsters}}</text>
      <sha1>c7s1z4v4l1snv42ky6si9604ua5v2oj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2875</id>
      <parentid>2836</parentid>
      <timestamp>2013-04-09T04:10:45Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>added entity information</comment>
      <text xml:space="preserve" bytes="2571">{{Infobox Monster
| name = Knight
| image = monster_quake_knight.png
| manualtext = Canned meat. Open 'er up and see if it's still fresh.
| health = 75
| attacks = Sword
| drop = nothing
| 1stappearance = [[e1m2]]
| gameversion = Shareware
| deathmessage = Player was slashed by a Knight
}}

'''Knights''' have a sharp sword and strong arms, but their drawback is their lack of a ranged attack. Two good spanks from the [[Double-Barrelled Shotgun]] will work (or, more efficiently, a [[Shotgun]] blast immediately followed by a double-barrelled shot).

==Tactics==


&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_knight
| commonname = [[Knight]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 32 x 32 x 64
| quakec = [[knight.qc]]
| precaches =
progs/knight.mdl&lt;br&gt;
progs/h_knight.mdl&lt;br&gt;
knight/kdeath.wav&lt;br&gt;
knight/khurt.wav&lt;br&gt;
knight/ksight.wav&lt;br&gt;
knight/sword1.wav&lt;br&gt;
knight/sword2.wav&lt;br&gt;
knight/idle.wav
}}

==Entity information==

'''monster_knight''' is the [[Entity|entity]] for placing '''Knights''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Knight. When triggered, the Knight will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Knight dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Knight dies.
|}

====Spawnflags====
The monster_knight entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Knight will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Knight
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model(&quot;:progs/knight.mdl&quot;)
    = monster_knight: &quot;Knight&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_knight (1 0 0) (-16 -16 -24) (16 16 40) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>szyvwyde6voh9i6oqk2ugfmusve44nz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2943</id>
      <parentid>2875</parentid>
      <timestamp>2013-05-04T15:43:38Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <minor/>
      <comment>gibs</comment>
      <text xml:space="preserve" bytes="2589">{{Infobox Monster
| name = Knight
| image = monster_quake_knight.png
| manualtext = Canned meat. Open 'er up and see if it's still fresh.
| health = 75
| gibthresh = -40
| attacks = Sword
| drop = nothing
| 1stappearance = [[e1m2]]
| gameversion = Shareware
| deathmessage = Player was slashed by a Knight
}}

'''Knights''' have a sharp sword and strong arms, but their drawback is their lack of a ranged attack. Two good spanks from the [[Double-Barrelled Shotgun]] will work (or, more efficiently, a [[Shotgun]] blast immediately followed by a double-barrelled shot).

==Tactics==


&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_knight
| commonname = [[Knight]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 32 x 32 x 64
| quakec = [[knight.qc]]
| precaches =
progs/knight.mdl&lt;br&gt;
progs/h_knight.mdl&lt;br&gt;
knight/kdeath.wav&lt;br&gt;
knight/khurt.wav&lt;br&gt;
knight/ksight.wav&lt;br&gt;
knight/sword1.wav&lt;br&gt;
knight/sword2.wav&lt;br&gt;
knight/idle.wav
}}

==Entity information==

'''monster_knight''' is the [[Entity|entity]] for placing '''Knights''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Knight. When triggered, the Knight will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Knight dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Knight dies.
|}

====Spawnflags====
The monster_knight entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Knight will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Knight
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model(&quot;:progs/knight.mdl&quot;)
    = monster_knight: &quot;Knight&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_knight (1 0 0) (-16 -16 -24) (16 16 40) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>j4nvci5uayya6pcu3mngktn4tulzog1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>KrimZon QuakeWorld Client</title>
    <ns>0</ns>
    <id>450</id>
    <revision>
      <id>791</id>
      <timestamp>2008-05-08T22:21:16Z</timestamp>
      <contributor>
        <ip>79.77.86.6</ip>
      </contributor>
      <comment>New page: KrimZon QuakeWorld Client is the name given to an early modification by [[KrimZon]] of the client part of the [[QuakeWorld]] source. It began in approximately late 2000 with the porting of...</comment>
      <text xml:space="preserve" bytes="965">KrimZon QuakeWorld Client is the name given to an early modification by [[KrimZon]] of the client part of the [[QuakeWorld]] source. It began in approximately late 2000 with the porting of normal engine modifications over to QuakeWorld, but also contained experimental features of its own such as light glares, object text, and simple flow control for execution of cfg files on the console.

The engine was 'rewritten' twice - every version used the original QuakeWorld client source as a base.

Each version was also flawed in some way. For example version 3, while known for its overbright lighting which resembled [[Darkplaces]] at the time, had a lot of standard features removed, such as keyboard-only control, loading of hud graphics from gfx.wad, and the v_cshift command, replacing the effects with newer hard-coded blend effects.

The source for version 1 and 2 was lost by the author, so if anybody has a copy they are encouraged to post it. Pleeeeeeease!</text>
      <sha1>70k1unwy8jtfh7n2se25pyp6aikefzr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Laser Arena</title>
    <ns>0</ns>
    <id>442</id>
    <revision>
      <id>775</id>
      <timestamp>2008-05-08T19:15:17Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <comment>New page: {{Infobox Project |name=Laser Arena |author=[[Trainwreck Studios]], [[2015 Inc.]] |license=Proprietary, commercial |engine=[[Quake]], [[GLQuake]]  |first-release=2000 |newest-release=2000 ...</comment>
      <text xml:space="preserve" bytes="531">{{Infobox Project
|name=Laser Arena
|author=[[Trainwreck Studios]], [[2015 Inc.]]
|license=Proprietary, commercial
|engine=[[Quake]], [[GLQuake]] 
|first-release=2000
|newest-release=2000
|website=[http://nexuiz.com Nexuiz]
}}

THIS ARTICLE IS VERY NPOV!!!

It's a piece of crap game and with pathetic bugs that are super easy to exploit.

== Engine modifications ==

The game is closed source and is known to use FRIK_FILE and no one has done a thing about them. This game heavily breaches the GNU GPL v2.




{{Derivative Games}}</text>
      <sha1>4laeosxozs75it55ckat6rl0r7sr0ct</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>776</id>
      <parentid>775</parentid>
      <timestamp>2008-05-08T19:16:02Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <text xml:space="preserve" bytes="532">{{Infobox Project
|name=Laser Arena
|author=[[Trainwreck Studios]], [[2015 Inc.]]
|license=Proprietary, commercial
|engine=[[Quake]], [[GLQuake]] 
|first-release=2000
|newest-release=2000
|website=[http://www.2015.com/ 2015]
}}

THIS ARTICLE IS VERY NPOV!!!

It's a piece of crap game and with pathetic bugs that are super easy to exploit.

== Engine modifications ==

The game is closed source and is known to use FRIK_FILE and no one has done a thing about them. This game heavily breaches the GNU GPL v2.




{{Derivative Games}}</text>
      <sha1>bd1t6tdoseclud1l760hb7io8qsgpjk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>777</id>
      <parentid>776</parentid>
      <timestamp>2008-05-08T19:16:16Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <text xml:space="preserve" bytes="508">{{Infobox Project
|name=Laser Arena
|author=[[2015 Inc.]]
|license=Proprietary, commercial
|engine=[[Quake]], [[GLQuake]] 
|first-release=2000
|newest-release=2000
|website=[http://www.2015.com/ 2015]
}}

THIS ARTICLE IS VERY NPOV!!!

It's a piece of crap game and with pathetic bugs that are super easy to exploit.

== Engine modifications ==

The game is closed source and is known to use FRIK_FILE and no one has done a thing about them. This game heavily breaches the GNU GPL v2.




{{Derivative Games}}</text>
      <sha1>i1x6bbv56hyb3q4xcj5a2jrrrt1udlp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Laser Cannon</title>
    <ns>0</ns>
    <id>486</id>
    <revision>
      <id>997</id>
      <timestamp>2009-05-22T09:00:51Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>plain copy'n'paste from old wiki</comment>
      <text xml:space="preserve" bytes="176">The laser cannon is a cannon that shoots lasers. It first shoots 2 lasers attached together out of the top part, then a single shot out of the bottom. around 14 shots a second.</text>
      <sha1>kq940aw04yge42k5a6nqbjfsstom1t3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>998</id>
      <parentid>997</parentid>
      <timestamp>2009-05-22T09:01:08Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <text xml:space="preserve" bytes="204">The laser cannon is a cannon that shoots lasers. It first shoots 2 lasers attached together out of the top part, then a single shot out of the bottom. around 14 shots a second.

==See Also==
* [[Weapons]]</text>
      <sha1>7dvdrfrmwisbcp4rxmodgzhu9262mrm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Legal status</title>
    <ns>0</ns>
    <id>30</id>
    <revision>
      <id>36</id>
      <timestamp>2007-10-30T17:32:10Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: This new wiki page is a start. The info here its actually in alpha state.  ===Quake Trademark===  Quake is a registered trademark of id Software. All other trademarks are properties of the...</comment>
      <text xml:space="preserve" bytes="764">This new wiki page is a start. The info here its actually in alpha state.

===Quake Trademark===

Quake is a registered trademark of id Software. All other trademarks are properties of their respective owners. Shambler, Fiend and other characters may also be property of the  id software.

===Engine===
You can download [http://www.gnu.org/copyleft/gpl.html GPL] versions of the Quake engine.

===Medias===
Original models, maps, textures ... property of Id Software. There exist a few full replacement projects with GPL license.

===Compiler tools===
A set of compilers tools has been released as GPL.

===Legal Disscusions===

//TODO add here links to forums threads about the legal status of the quake stuff.

http://www.quakesrc.org/forums/viewtopic.php?t=4703</text>
      <sha1>6mu1yptx2r2paly3vntzpzwi62vavwv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>830</id>
      <parentid>36</parentid>
      <timestamp>2008-05-15T12:43:00Z</timestamp>
      <contributor>
        <ip>151.141.64.36</ip>
      </contributor>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="764">This new wiki page is a start. The info here its actually in alpha state.

===Quake Trademark===

Quake is a registered trademark of id Software. All other trademarks are properties of their respective owners. Shambler, Fiend and other characters may also be property of the  id software.

===Engine===
You can download [http://www.gnu.org/copyleft/gpl.html GPL] versions of the Quake engine.

===Medias===
Original models, maps, textures ... property of Id Software. There exist a few full replacement projects with GPL license.

===Compiler tools===
A set of compilers tools has been released as GPL.

===Legal Discussions===

//TODO add here links to forums threads about the legal status of the quake stuff.

http://www.quakesrc.org/forums/viewtopic.php?t=4703</text>
      <sha1>j6wvpqfuawies6afs9gu4s10kgap7jp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>869</id>
      <parentid>830</parentid>
      <timestamp>2008-05-17T18:55:54Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="871">This new wiki page is a start. The info here its actually in alpha state.

===Quake Trademark===

Quake is a registered trademark of id Software. All other trademarks are properties of their respective owners. Shambler, Fiend and other characters may also be property of the  id software.

===Engine===
You can download [http://www.gnu.org/copyleft/gpl.html GPL] versions of the Quake engine.

===Medias===
Original models, maps, textures ... property of Id Software. There exist a few full replacement projects with GPL license.

The Quake palette, though, has been permitted to be freely distributed by John Carmack (citation needed).

===Compiler tools===
A set of compilers tools has been released as GPL.

===Legal Discussions===

//TODO add here links to forums threads about the legal status of the quake stuff.

http://www.quakesrc.org/forums/viewtopic.php?t=4703</text>
      <sha1>a57p85wpzluke7b40ypk3svpr07pblm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>870</id>
      <parentid>869</parentid>
      <timestamp>2008-05-17T18:56:20Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>errr</comment>
      <text xml:space="preserve" bytes="871">This new wiki page is a start. The info here its actually in alpha state.

===Quake Trademark===

Quake is a registered trademark of id Software. All other trademarks are properties of their respective owners. Shambler, Fiend and other characters may also be property of the  id software.

===Engine===
You can download [http://www.gnu.org/copyleft/gpl.html GPL] versions of the Quake engine.

===Medias===
Original models, maps, textures ... property of Id Software. There exist a few full replacement projects with GPL license.

The Quake palette, though, has been permitted by John Carmack to be freely distributed (citation needed).

===Compiler tools===
A set of compilers tools has been released as GPL.

===Legal Discussions===

//TODO add here links to forums threads about the legal status of the quake stuff.

http://www.quakesrc.org/forums/viewtopic.php?t=4703</text>
      <sha1>r9xqmkiogqpddn57fd2e1niruq57tbq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2220</id>
      <parentid>870</parentid>
      <timestamp>2013-03-26T13:05:19Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>/* Legal Discussions */</comment>
      <text xml:space="preserve" bytes="878">This new wiki page is a start. The info here its actually in alpha state.

===Quake Trademark===

Quake is a registered trademark of id Software. All other trademarks are properties of their respective owners. Shambler, Fiend and other characters may also be property of the  id software.

===Engine===
You can download [http://www.gnu.org/copyleft/gpl.html GPL] versions of the Quake engine.

===Medias===
Original models, maps, textures ... property of Id Software. There exist a few full replacement projects with GPL license.

The Quake palette, though, has been permitted by John Carmack to be freely distributed (citation needed).

===Compiler tools===
A set of compilers tools has been released as GPL.

===Legal Discussions===

{{todo|todo=add here links to forums threads about the legal status of the quake stuff.}}

http://www.quakesrc.org/forums/viewtopic.php?t=4703</text>
      <sha1>9pc6s9gl3nad5aicvoqhu639i4c5wb8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2971</id>
      <parentid>2220</parentid>
      <timestamp>2013-05-26T19:36:58Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>added engine links, minor cleanup</comment>
      <text xml:space="preserve" bytes="1037">===Quake Trademark===
Quake is a registered trademark of id Software. All other trademarks are properties of their respective owners. Shambler, Fiend and other characters may also be property of id software.

===Engine===
The source code of the Quake engine has been released under the free and open-source [http://www.gnu.org/copyleft/gpl.html GPL license]. You can find it on [https://github.com/id-Software/Quake GitHub] or the [ftp://ftp.idsoftware.com/idstuff/source/q1source.zip id Software FTP server].

===Media===
Original models, maps, textures etc are property of id Software and not available under a free license. There exist a few full replacement projects with GPL license.

The Quake palette, though, has been permitted by John Carmack to be freely distributed (citation needed).

===Compiler tools===
A set of compilers tools has been released as GPL.

===Legal Discussions===

{{todo|todo=add here links to forums threads about the legal status of the quake stuff.}}

http://www.quakesrc.org/forums/viewtopic.php?t=4703</text>
      <sha1>eo77304uk6uc0sw4r7kxnh9wgk0uf5i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2972</id>
      <parentid>2971</parentid>
      <timestamp>2013-05-26T19:41:35Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>qc notes, thanks to frikac</comment>
      <text xml:space="preserve" bytes="1255">===Quake Trademark===
Quake is a registered trademark of id Software. All other trademarks are properties of their respective owners. Shambler, Fiend and other characters may also be property of id software.

===Engine===
The source code of the Quake engine has been released under the free and open-source [http://www.gnu.org/copyleft/gpl.html GPL license]. You can find it on [https://github.com/id-Software/Quake GitHub] or the [ftp://ftp.idsoftware.com/idstuff/source/q1source.zip id Software FTP server].

===Game code===
Early versions of the QuakeC source files have been released under the GPL: ftp://ftp.idsoftware.com/idstuff/source/q1tools_gpl.tgz

Unfortunately the 1.06 source does not have a GPL notice attached.


===Media===
Original models, maps, textures etc are property of id Software and not available under a free license. There exist a few full replacement projects with GPL license.

The Quake palette, though, has been permitted by John Carmack to be freely distributed (citation needed).

===Compiler tools===
A set of compilers tools has been released as GPL.

===Legal Discussions===

{{todo|todo=add here links to forums threads about the legal status of the quake stuff.}}

http://www.quakesrc.org/forums/viewtopic.php?t=4703</text>
      <sha1>jo3mwywiy6z8shw37ig3hg8xmtnn70m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Light (map compiling)</title>
    <ns>0</ns>
    <id>581</id>
    <revision>
      <id>1518</id>
      <timestamp>2010-01-11T08:20:07Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>New page: '''Light''' is one of the stages of [[map compiling]].  It calculates lighting and shadows for a [[bsp file]] previously generated by [[QBSP]].  ==What Light Does==   Using the [[light (en...</comment>
      <text xml:space="preserve" bytes="907">'''Light''' is one of the stages of [[map compiling]].  It calculates lighting and shadows for a [[bsp file]] previously generated by [[QBSP]].

==What Light Does==  
Using the [[light (entity)|light entities]] from the [[entity lump]] of the bsp file, it precalculates the lighting on every surface in the [[level]], and saves that data as [[lightmap|lightmaps]] in the bsp file. 

==Using Light==
Light is a command-line tool, generally named light.exe.  You can invoke it from a command prompt, via a shortcut or batch file, or from the &quot;compile&quot; or &quot;build&quot; menus of some [[level editor|level editors]].

===Command-line options===
TODO

===Error Messages and Warnings===
TODO

===Updated Versions===
In addition to [[id Software]]'s official Light, there have been various unofficial versions that improve on the original or add additional features.  For a list of Light variants, see [[mapping tools]].</text>
      <sha1>c68bkgqixxa2rh3apro5pt52mawr7va</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1519</id>
      <parentid>1518</parentid>
      <timestamp>2010-01-11T08:20:57Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>/* What Light Does */</comment>
      <text xml:space="preserve" bytes="905">'''Light''' is one of the stages of [[map compiling]].  It calculates lighting and shadows for a [[bsp file]] previously generated by [[QBSP]].

==What Light Does==  
Using the [[light (entity)|light entities]] from the [[entity lump]] of the bsp file, it precalculates the lighting on each [[surface]] in the level, and saves that data as [[lightmap|lightmaps]] in the bsp file.

==Using Light==
Light is a command-line tool, generally named light.exe.  You can invoke it from a command prompt, via a shortcut or batch file, or from the &quot;compile&quot; or &quot;build&quot; menus of some [[level editor|level editors]].

===Command-line options===
TODO

===Error Messages and Warnings===
TODO

===Updated Versions===
In addition to [[id Software]]'s official Light, there have been various unofficial versions that improve on the original or add additional features.  For a list of Light variants, see [[mapping tools]].</text>
      <sha1>j6x7syl08nvfbzt18uf3mtwfusg81g1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1521</id>
      <parentid>1519</parentid>
      <timestamp>2010-01-11T08:35:17Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="1028">'''Light''' is one of the stages of [[map compiling]].  It calculates lighting and shadows for a [[bsp file]] previously generated by [[QBSP]].

==What Light Does==  
Using the [[light (entity)|light entities]] from the [[entity lump]] of the bsp file, it precalculates the lighting on each [[surface]] in the level, and saves that data as [[lightmap|lightmaps]] in the bsp file.

Some modified Light tools can also calculate [[colored lighting]] for the level and save it seperately in a [[lit file]].

==Using Light==
Light is a command-line tool, generally named light.exe.  You can invoke it from a command prompt, via a shortcut or batch file, or from the &quot;compile&quot; or &quot;build&quot; menus of some [[level editor|level editors]].

===Command-line options===
TODO

===Error Messages and Warnings===
TODO

===Updated Versions===
In addition to [[id Software]]'s official Light, there have been various unofficial versions that improve on the original or add additional features.  For a list of Light variants, see [[mapping tools]].</text>
      <sha1>avf8yfhgzlcda2c8typk8kmmn7qifkj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1903</id>
      <parentid>1521</parentid>
      <timestamp>2013-03-25T03:11:03Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>fixing misdirected links</comment>
      <text xml:space="preserve" bytes="1066">'''Light''' is one of the stages of [[map compiling]].  It calculates lighting and shadows for a [[Quake file formats|bsp file]] previously generated by [[QBSP]].

==What Light Does==  
Using the [[light (entity)|light entities]] from the [[entity lump]] of the bsp file, it precalculates the lighting on each [[surface]] in the level, and saves that data as [[lightmap|lightmaps]] in the bsp file.

Some modified Light tools can also calculate [[colored lighting]] for the level and save it seperately in a [[Quake file formats|lit file]].

==Using Light==
Light is a command-line tool, generally named light.exe.  You can invoke it from a command prompt, via a shortcut or batch file, or from the &quot;compile&quot; or &quot;build&quot; menus of some [[level editor|level editors]].

===Command-line options===
TODO

===Error Messages and Warnings===
TODO

===Updated Versions===
In addition to [[id Software]]'s official Light, there have been various unofficial versions that improve on the original or add additional features.  For a list of Light variants, see [[mapping tools]].</text>
      <sha1>hgyrsml9rrmls5t6by6qmrjkjk7l9j7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Lightstyle</title>
    <ns>0</ns>
    <id>209</id>
    <revision>
      <id>390</id>
      <timestamp>2008-02-23T18:40:20Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  void '''lightstyle'''(float ''style'', string ''value'')  ''style'' = index of the light style, from 0 to 63.  ''value'' = (ex: &quot;abcdefghijklmlkjihgfedcb&quot;)  Modifies a given light style. ...</comment>
      <text xml:space="preserve" bytes="569"> void '''lightstyle'''(float ''style'', string ''value'')

''style'' = index of the light style, from 0 to 63.

''value'' = (ex: &quot;abcdefghijklmlkjihgfedcb&quot;)

Modifies a given light style. The light style is used to create cyclic lighting effects, like torches or teleporter lighting.
There are 64 light styles, from 0 to 63. If style is not strictly comprised in these values, the game may crash.
styles 32-62 are assigned by the light program for switchable lights.
''value'' is a set of characters, whose ascii value indicates a light level, from &quot;a&quot; (0) to &quot;z&quot; (30).</text>
      <sha1>0q308qwd2vvfh3097cegqwc93ypnmq3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Links</title>
    <ns>0</ns>
    <id>41</id>
    <revision>
      <id>49</id>
      <timestamp>2007-10-30T17:49:23Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: Note: if links are outdated please have a look at the [[Archive]]  '''MAIN LINKS'''  * [http://www.inside3d.com/frikbot/ FrikaC's Project Whorehouse] * [http://www.inside3d.com/qctut/ Insi...</comment>
      <text xml:space="preserve" bytes="4103">Note: if links are outdated please have a look at the [[Archive]]

'''MAIN LINKS'''

* [http://www.inside3d.com/frikbot/ FrikaC's Project Whorehouse]
* [http://www.inside3d.com/qctut/ Inside3D Tutorials]

'''QUAKE ENGINES'''

* [http://www.planetquake.com/gargoyle/mymods.html CheapHack]
* [http://dxquake.sourceforge.net/ D3DQuake]
* [http://www.icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://www.celephais.net/fitzquake/ Fitzquake]
* [http://macglquake.sourceforge.net/ Mac GLQuake]
* [http://www.esatclear.ie/~mhiney/mhquake/ MHQuake]
* [http://ssj4death.condemned.com/nglquake/ NGLQuake]
* [http://www.cs.wisc.edu/graphics/Courses/cs-838-2000/Students/herrman/nprQuake/sketchyNPR.html NPRQuake]
* [http://wouter.fov120.com/gfxengine/panquake/ PanQuake]
* [http://www.planetquake.com/qbism/ QBism]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeforge.net/ QuakeForge]
* [http://www.inside3d.com/qip/ Quake Info Pool]
* [http://www.quakeworld.net/ QuakeWorld 2.33]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net Tenebrae]
* [http://tomaz.quakesrc.org TomazQuake]
* [http://entar.quakedev.com/ Vengeance r2]
* [http://zquake.frag.ru/ ZQuake]

'''QUAKE MODS'''

* [http://static.condemned.com/ Conquest]
* [http://www.threewave.com/ CTF]
* [http://www.freewebs.com/entar/iq.html Improved Quake]
* [http://www.backblast.com/mega-tf/ Mega-TF]
* [http://www.planetfortress.com/teamfortress/ Team Fortress]
* [http://singe.telefragged.com/slide/ Slide]

'''QUAKE 2 ENGINES'''

* [http://www.icculus.org/quake2/ icculus.org Quake2]
* [http://www.quake2evolved.com/ Quake II Evolved]
* [http://icculus.org/q2x/ Q2X - Quake 2 eXtended]
* [http://www.minkeytorture.org/quake2max/ Quake2maX]

'''QUAKE SITES'''

* [http://www.inside3d.com Inside3d]
* [http://www.quakesrc.org QuakeSRC]
* [http://pipeline.fov120.com/shots.php4 The Pipeline]
* [http://www.challenge-smackdown.com/qwguide/ QuakeWorld Guide]
* [http://www.anachronox.de/quake1.de/ Anacronox.DE.Quake1]
* [http://www.celephais.net/board/ Func_Msgboard]
* [http://www.quake.de/ Quake.DE]
* [http://www.annihilator.com/quake/editing/editing_main.html AnnhilatorQuakeEditing]
* [http://qexpo.condemned.com/ QEXPO]
* [http://www.sg-drive.com/~hell/openquake/main.htm QPlay]
* [http://www.fuhquake.com FuhQuake]
* [http://www.besmella-quake.com/ Besmella-Quake]
* [http://www.quake-central.com/ New Quake Central]
* [http://www.ozquake.com/ OzQuake] - Australia Quake!
* [http://members.optushome.com.au/mwormald/ MWorldd]
* [http://www.planetquake.com/qer/ Quake Engine Resources]
* [http://www.quakeworld.nu Quakeworld.nu (Main gatheringplace for Quakeworld players)]
* [http://wiki.quakesrc.org/ old Quake Wiki]

'''QUAKE 2 SITES'''

* [http://quake2.us/ Quake2 - lots of quake2 stuff]
* [http://www.planetquake.com/qdevels/ Quake DeveLS - DLL News]

'''OTHER ENGINES'''

* [http://neoengine.sourceforge.net NeoEngine]
* [http://www.modnation.com/polyfighter PolyFighter]
* [http://possibleworlds.sourceforge.net/ Game Engine]
* [http://www.doomsdayhq.com/ Doomsday]
* [http://wiki.beyondunreal.com/wiki/ UnrealWiki]
* [http://www.paragui.org/ Paragui]
* [http://www.vterrain.org/Screenshots/index.html VTerrain]
* [http://www.terrainengine.com/ TerrainEngine]

'''QUAKE DEV SITES'''

* [http://www.planetquake.com/cocot CocoT]
* [http://www.planetquake.com/qbism Qbism] | [http://qbism.telefragged.com Old Qbism]
* [http://www.tribalforces.hpg.ig.com.br/ Tribal]
* [http://www.inside3d.com/frikbot/ FrikaC]
* [http://akuma.condemned.com/ Akuma]
* [http://ssj4death.condemned.com ssj4death]
* [http://www.planetquake.com/commandhq Lth]
* [http://xsniper.topcities.com/ Xsniper]
* [http://www.planetquake.com/gargoyle CheapAlert]
* [http://www.personal.able.es/orbital Orbital] (not quake related)
* [http://wiki.quakesrc.org/index.php/Khamelion Khamelion]
* [http://www.viagenie.qc.ca/en/quake.shtml IPv6-Quake]

'''OTHER WIKIPAGES'''

* [http://quake3.quakesrc.org/wiki/index.php/Main_Page Quake 3 Wiki]
* [http://es.wikipedia.com es.wikipedia.com]
* [http://wiki.beyondunreal.com/wiki/ UnrealWiki]</text>
      <sha1>i1fenm7a16ld9mhz0i3bnivrjz3s19o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>803</id>
      <parentid>49</parentid>
      <timestamp>2008-05-09T17:33:28Z</timestamp>
      <contributor>
        <username>Xsniper</username>
        <id>10</id>
      </contributor>
      <text xml:space="preserve" bytes="4097">Note: if links are outdated please have a look at the [[Archive]]

'''MAIN LINKS'''

* [http://www.inside3d.com/frikbot/ FrikaC's Project Whorehouse]
* [http://www.inside3d.com/qctut/ Inside3D Tutorials]

'''QUAKE ENGINES'''

* [http://www.planetquake.com/gargoyle/mymods.html CheapHack]
* [http://dxquake.sourceforge.net/ D3DQuake]
* [http://www.icculus.org/twilight/darkplaces/ DarkPlaces]
* [http://www.celephais.net/fitzquake/ Fitzquake]
* [http://macglquake.sourceforge.net/ Mac GLQuake]
* [http://www.esatclear.ie/~mhiney/mhquake/ MHQuake]
* [http://ssj4death.condemned.com/nglquake/ NGLQuake]
* [http://www.cs.wisc.edu/graphics/Courses/cs-838-2000/Students/herrman/nprQuake/sketchyNPR.html NPRQuake]
* [http://wouter.fov120.com/gfxengine/panquake/ PanQuake]
* [http://www.planetquake.com/qbism/ QBism]
* [http://www.flyingsaucepan.com/QMB/ QMB]
* [http://www.quakeforge.net/ QuakeForge]
* [http://www.inside3d.com/qip/ Quake Info Pool]
* [http://www.quakeworld.net/ QuakeWorld 2.33]
* [http://telejano.berlios.de/ Telejano]
* [http://tenebrae.sourceforge.net Tenebrae]
* [http://tomaz.quakesrc.org TomazQuake]
* [http://entar.quakedev.com/ Vengeance r2]
* [http://zquake.frag.ru/ ZQuake]

'''QUAKE MODS'''

* [http://static.condemned.com/ Conquest]
* [http://www.threewave.com/ CTF]
* [http://www.freewebs.com/entar/iq.html Improved Quake]
* [http://www.backblast.com/mega-tf/ Mega-TF]
* [http://www.planetfortress.com/teamfortress/ Team Fortress]
* [http://singe.telefragged.com/slide/ Slide]

'''QUAKE 2 ENGINES'''

* [http://www.icculus.org/quake2/ icculus.org Quake2]
* [http://www.quake2evolved.com/ Quake II Evolved]
* [http://icculus.org/q2x/ Q2X - Quake 2 eXtended]
* [http://www.minkeytorture.org/quake2max/ Quake2maX]

'''QUAKE SITES'''

* [http://www.inside3d.com Inside3d]
* [http://www.quakesrc.org QuakeSRC]
* [http://pipeline.fov120.com/shots.php4 The Pipeline]
* [http://www.challenge-smackdown.com/qwguide/ QuakeWorld Guide]
* [http://www.anachronox.de/quake1.de/ Anacronox.DE.Quake1]
* [http://www.celephais.net/board/ Func_Msgboard]
* [http://www.quake.de/ Quake.DE]
* [http://www.annihilator.com/quake/editing/editing_main.html AnnhilatorQuakeEditing]
* [http://qexpo.condemned.com/ QEXPO]
* [http://www.sg-drive.com/~hell/openquake/main.htm QPlay]
* [http://www.fuhquake.com FuhQuake]
* [http://www.besmella-quake.com/ Besmella-Quake]
* [http://www.quake-central.com/ New Quake Central]
* [http://www.ozquake.com/ OzQuake] - Australia Quake!
* [http://members.optushome.com.au/mwormald/ MWorldd]
* [http://www.planetquake.com/qer/ Quake Engine Resources]
* [http://www.quakeworld.nu Quakeworld.nu (Main gatheringplace for Quakeworld players)]
* [http://wiki.quakesrc.org/ old Quake Wiki]

'''QUAKE 2 SITES'''

* [http://quake2.us/ Quake2 - lots of quake2 stuff]
* [http://www.planetquake.com/qdevels/ Quake DeveLS - DLL News]

'''OTHER ENGINES'''

* [http://neoengine.sourceforge.net NeoEngine]
* [http://www.modnation.com/polyfighter PolyFighter]
* [http://possibleworlds.sourceforge.net/ Game Engine]
* [http://www.doomsdayhq.com/ Doomsday]
* [http://wiki.beyondunreal.com/wiki/ UnrealWiki]
* [http://www.paragui.org/ Paragui]
* [http://www.vterrain.org/Screenshots/index.html VTerrain]
* [http://www.terrainengine.com/ TerrainEngine]

'''QUAKE DEV SITES'''

* [http://www.planetquake.com/cocot CocoT]
* [http://www.planetquake.com/qbism Qbism] | [http://qbism.telefragged.com Old Qbism]
* [http://www.tribalforces.hpg.ig.com.br/ Tribal]
* [http://www.inside3d.com/frikbot/ FrikaC]
* [http://akuma.condemned.com/ Akuma]
* [http://ssj4death.condemned.com ssj4death]
* [http://www.planetquake.com/commandhq Lth]
* [http://www.xsniper.net/ Xsniper]
* [http://www.planetquake.com/gargoyle CheapAlert]
* [http://www.personal.able.es/orbital Orbital] (not quake related)
* [http://wiki.quakesrc.org/index.php/Khamelion Khamelion]
* [http://www.viagenie.qc.ca/en/quake.shtml IPv6-Quake]

'''OTHER WIKIPAGES'''

* [http://quake3.quakesrc.org/wiki/index.php/Main_Page Quake 3 Wiki]
* [http://es.wikipedia.com es.wikipedia.com]
* [http://wiki.beyondunreal.com/wiki/ UnrealWiki]</text>
      <sha1>mn7vxo8hbu8lwqp89fv04kbb615opd4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>List of QuakeC compilers</title>
    <ns>0</ns>
    <id>29</id>
    <revision>
      <id>35</id>
      <timestamp>2007-10-30T17:06:49Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: QuakeC compilers.  * [[QCC]] * [[FastQCC]] * [[QCCX]] * [[QFCC]] * [[MEQCC]] * [[FrikQCC]] * [[FTEQCC]] * [[ZQCC]]</comment>
      <text xml:space="preserve" bytes="114">QuakeC compilers.

* [[QCC]]
* [[FastQCC]]
* [[QCCX]]
* [[QFCC]]
* [[MEQCC]]
* [[FrikQCC]]
* [[FTEQCC]]
* [[ZQCC]]</text>
      <sha1>rjabkv2a5d8wf6cc7og3av5u9wpfwwo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>List of builtin functions</title>
    <ns>0</ns>
    <id>49</id>
    <revision>
      <id>61</id>
      <timestamp>2007-10-30T18:23:19Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: [[QuakeC]] uses builtin functions to call bits of C code that can do 'jobs' for the QC that otherwise can't be done. Some functions affect the game world, some modify variables, and some m...</comment>
      <text xml:space="preserve" bytes="15498">[[QuakeC]] uses builtin functions to call bits of C code that can do 'jobs' for the QC that otherwise can't be done. Some functions affect the game world, some modify variables, and some maintain file lists for the engine. Each of the original functions are detailed below. Please note that builtin parameters/types/etc might differ between [[Quake]] and [[Hexen II]].

===See Also===
* [[Builtin ranges]]
* [[QSG extensions]]

{|style=&quot;border:1px solid #000000&quot;
|-
|style=&quot;align:center&quot; | '''#'''
|style=&quot;align:center&quot; | '''Function'''
|style=&quot;align:center&quot; colspan=&quot;3&quot; | '''Supported by&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'''
|style=&quot;align:center&quot; | '''[[QSG extensions|QSG Key]]'''
|-
| 1 || [[makevectors]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 2 || [[setorigin]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 3 || [[setmodel]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 4 || [[setsize]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 5 || [[lightstylestatic]] || || || [[H2MP]] || N/A
|-
| 6 || [[break]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 7 || [[random]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 8 || [[sound]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 9 || [[normalize]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 10 || [[error]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 11 || [[objerror]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 12 || [[vlen]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 13 || [[vectoyaw]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 14 || [[spawn]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 15 || [[remove]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 16 || [[traceline]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 17 || [[checkclient]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 18 || [[find]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 19 || [[precache_sound]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 20 || [[precache_model]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 21 || [[stuffcmd]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 22 || [[findradius]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 23 || [[bprint]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 24 || [[sprint]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 25 || [[dprint]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 26 || [[ftos]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 27 || [[vtos]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 28 || [[coredump]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 29 || [[traceon]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 30 || [[traceoff]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 31 || [[eprint]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 32 || [[walkmove]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 33 || [[tracearea]] || || || [[H2MP]] || N/A
|-
| 34 || [[droptofloor]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 35 || [[lightstyle]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 36 || [[rint]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 37 || [[floor]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 38 || [[ceil]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 39 || [[AwardExperience]] || || || [[H2MP]] || N/A
|-
| 40 || [[checkbottom]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 41 || [[pointcontents]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 42 || [[particle2]] || || || [[H2MP]] || N/A
|-
| 43 || [[fabs]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 44 || [[aim]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 45 || [[cvar]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 46 || [[localcmd]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 47 || [[nextent]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 48 || [[particle]] || [[NQ]] ||  || [[H2MP]] || [[ZQ_QC_PARTICLE]]
|-
| 49 || [[ChangeYaw]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 50 || [[vhlen]] || || || [[H2MP]] || N/A
|-
| 51 || [[vectoangles]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 52 || [[WriteByte]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 53 || [[WriteChar]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 54 || [[WriteShort]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 55 || [[WriteLong]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 56 || [[WriteCoord]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 57 || [[WriteAngle]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 58 || [[WriteString]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 59 || [[WriteEntity]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 60 || [[sin]] || || || || [[DP_QC_SINCOSSQRTPOW]]
|-
| 60 || [[dprintf]] || || || [[H2MP]] || N/A
|-
| 61 || [[cos]] || || || || [[DP_QC_SINCOSSQRTPOW]]
|-
| 61 || [[cos]] || || || [[H2MP]] || N/A
|-
| 62 || [[sqrt]] || || || || [[DP_QC_SINCOSSQRTPOW]]
|-
| 62 || [[sin]] || || || [[H2MP]] || N/A
|-
| 63 || [[changepitch]] || || || || [[DP_QC_CHANGEPITCH]]
|-
| 63 || [[AdvanceFrame]] || || || [[H2MP]] || N/A
|-
| 64 || [[tracetoss]] || || || || [[DP_QC_TRACETOSS]]
|-
| 64 || [[dprintv]] || || || [[H2MP]] || N/A
|-
| 65 || [[etos]] || || || || [[DP_QC_ETOS]]
|-
| 65 || [[RewindFrame]] || || || [[H2MP]] || N/A
|-
| 66 || [[setclass]] || || || [[H2MP]] || N/A
|-
| 67 || [[movetogoal]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 68 || [[precache_file]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 69 || [[makestatic]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 70 || [[changelevel]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 71 || [[lightstylevalue]] || || || [[H2MP]] || N/A
|-
| 72 || [[cvar_set]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 73 || [[centerprint]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 74 || [[ambientsound]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 75 || [[precache_model2]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 76 || [[precache_sound2]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 77 || [[precache_file2]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 78 || [[setspawnparms]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 79 || [[logfrag]] ||  || [[QW]] || || N/A
|-
| 79 || [[zone]] || || || || [[QSG_FILE]]
|-
| 79 || [[plaque_draw]] ||  || || [[H2MP]] || N/A
|-
| 80 || [[infokey]] ||  || [[QW]] || || N/A
|-
| 80 || [[unzone]] || || || || [[QSG_FILE]]
|-
| 80 || [[rain_go]] ||  || || [[H2MP]] || N/A
|-
| 81 || [[stof]] ||  || [[QW]] || || [[FRIK_FILE]]
|-
| 81 || [[strlen]] || || || || [[QSG_FILE]]
|-
| 81 || [[particleexplosion]] || || || [[H2MP]] || N/A
|-
| 82 || [[multicast]] ||  || [[QW]] || || N/A
|-
| 82 || [[strcat]] || || || || [[QSG_FILE]]
|-
| 82 || [[movestep]] || || || [[H2MP]] || N/A
|-
| 83 || [[substring]] || || || || [[QSG_FILE]]
|-
| 83 || [[advanceweaponframe]] || || || [[H2MP]] || N/A
|-
| 84 || [[stof]] || || || || [[QSG_FILE]]
|-
| 84 || [[sqrt]] || || || [[H2MP]] || N/A
|-
| 84 || [[tokenize]] || || || || [[ZQ_QC_TOKENIZE]]
|-
| 85 || [[stov]] || || || || [[QSG_FILE]]
|-
| 85 || [[particle3]] || || || [[H2MP]] || N/A
|-
| 85 || [[argc]] || || || || [[ZQ_QC_TOKENIZE]]
|-
| 86 || [[open]] || || || || [[QSG_FILE]]
|-
| 86 || [[particle4]] || || || [[H2MP]] || N/A
|-
| 86 || [[argv]] || || || || [[ZQ_QC_TOKENIZE]]
|-
| 87 || [[close]] || || || || [[QSG_FILE]]
|-
| 87 || [[setpuzzlemodel]] || || || [[H2MP]] || N/A
|-
| 88 || [[read]] || || || || [[QSG_FILE]]
|-
| 88 || [[starteffect]] || || || [[H2MP]] || N/A
|-
| 89 || [[write]] || || || || [[QSG_FILE]]
|-
| 89 || [[endeffect]] || || || [[H2MP]] || N/A
|-
| 90 || [[tracebox]] || || || || [[DP_QC_TRACEBOX]]
|-
| 90 || [[precache_puzzle_model]] || || || [[H2MP]] || N/A
|-
| 91 || [[randomvec]] || || || || [[DP_QC_RANDOMVEC]]
|-
| 91 || [[concatv]] || || || [[H2MP]] || N/A
|-
| 92 || [[getlight]] || || || || [[DP_QC_GETLIGHT]]
|-
| 92 || [[getstring]] || || || [[H2MP]] || N/A
|-
| 93 || [[registercvar]] || || || || [[DP_REGISTERCVAR]]
|-
| 93 || [[spawn_temp]] || || || [[H2MP]] || N/A
|-
| 94 || [[min]] || || || || [[DP_QC_MINMAXBOUND]]
|-
| 94 || [[v_factor]] || || || [[H2MP]] || N/A
|-
| 95 || [[max]] || || || || [[DP_QC_MINMAXBOUND]]
|-
| 95 || [[v_factorrange]] || || || [[H2MP]] || N/A
|-
| 96 || [[bound]] || || || || [[DP_QC_MINMAXBOUND]]
|-
| 96 || [[precache_sound3]] || || || [[H2MP]] || N/A
|-
| 97 || [[pow]] || || || || [[DP_QC_SINCOSSQRTPOW]]
|-
| 97 || [[precache_model3]] || || || [[H2MP]] || N/A
|-
| 98 || [[findentity]] || || || || [[DP_QC_FINDFLOAT]]
|-
| 98 || [[findfloat]] || || || || [[DP_QC_FINDFLOAT]]
|-
| 98 || [[precache_file3]] || || || [[H2MP]] || N/A
|-
| 99 || [[checkextension]] || || || || __[[QSG Extensions]] System__
|-
| 99 || [[matchAngleToSlope]] || || || [[H2MP]] || N/A
|-
| 100 || [[updateInfoPlaque]] || || || [[H2MP]] || N/A
|-
| 101 || [[precache_sound4]] || || || [[H2MP]] || N/A
|-
| 102 || [[precache_model4]] || || || [[H2MP]] || N/A
|-
| 103 || [[precache_file4]] || || || [[H2MP]] || N/A
|-
| 104 || [[showpic]] || || || || [[TEI_SHOWLMP2]]
|-
| 104 || [[doWhiteFlash]] || || || [[H2MP]] || N/A
|-
| 105 || [[hidepic]] || || || || [[TEI_SHOWLMP2]]
|-
| 105 || [[updateSoundPos]] || || || [[H2MP]] || N/A
|-
| 106 || [[movepic]] || || || || [[TEI_SHOWLMP2]]
|-
| 106 || [[stopSound]] || || || [[H2MP]] || N/A
|-
| 107 || [[changepic]] || || || || [[TEI_SHOWLMP2]]
|-
| 108 || [[showpicent]] || || || || [[TEI_SHOWLMP2]]
|-
| 109 || [[hidepicent]] || || || || [[TEI_SHOWLMP2]]
|-
| 110 || [[fopen]] || || || || [[FRIK_FILE]]
|-
| 111 || [[fclose]] || || || || [[FRIK_FILE]]
|-
| 112 || [[fgets]] || || || || [[FRIK_FILE]]
|-
| 113 || [[fputs]] || || || || [[FRIK_FILE]]
|-
| 114 || [[strlen]] || || || || [[FRIK_FILE]] [[ZQ_QC_STRINGS]]
|-
| 115 || [[strcat]] || || || || [[FRIK_FILE]] [[ZQ_QC_STRINGS]]
|-
| 116 || [[substring]] || || || || [[FRIK_FILE]] [[ZQ_QC_STRINGS]]
|-
| 117 || [[stov]] || || || || [[FRIK_FILE]]
|-
| 118 || [[strzone]] || || || || [[FRIK_FILE]] [[ZQ_QC_STRINGS]]
|-
| 119 || [[strunzone]] || || || || [[FRIK_FILE]] [[ZQ_QC_STRINGS]]
|-
| 176 || [[cvar_setf]] || || || || N/A
|-
| 177 || [[localsound]] || || || || N/A
|-
| 200 || [[getmodelindex]] || || || || [[EXT_CSQC]]
|-
| 201 || [[externcall]] || || || || [[FTE_MULTIPROGS]]
|-
| 202 || [[addprogs]] || || || || [[FTE_MULTIPROGS]]
|-
| 203 || [[externvalue]] || || || || [[FTE_MULTIPROGS]]
|-
| 204 || [[externset]] || || || || [[FTE_MULTIPROGS]]
|-
| 205 || [[externrefcall]] || || || || [[FTE_MULTIPROGS]]
|-
| 206 || [[instr]] || || || || [[FTE_MULTIPROGS]]
|-
| 209 || [[RegisterTempEnt]] || || || || [[FTE_PEXT_CUSTOMTENTS]]
|-
| 209 || [[CustomTempEnt]] || || || || [[FTE_PEXT_CUSTOMTENTS]]
|-
| 210 || [[fork]] || || || || [[FTE_MULTITHREADED]]
|-
| 211 || [[abort]] || || || || [[FTE_MULTITHREADED]]
|-
| 212 || [[sleep]] || || || || [[FTE_MULTITHREADED]]
|-
| 213 || [[forceinfokey]] || || || || [[FTE_FORCEINFOKEY]]
|-
| 214 || [[npcchat]] || || || || [[FTE_NPCCHAT]]
|-
| 221 || [[bitshift]] || || || || [[EXT_BITSHIFT]]
|-
| 222 || [[strstrofs]] || || || || [[FTE_STRINGS]]
|-
| 223 || [[str2chr]] || || || || [[FTE_STRINGS]]
|-
| 224 || [[chr2str]] || || || || [[FTE_STRINGS]]
|-
| 225 || [[strconv]] || || || || [[FTE_STRINGS]]
|-
| 226 || [[infoadd]] || || || || [[FTE_STRINGS]]
|-
| 227 || [[infoget]] || || || || [[FTE_STRINGS]]
|-
| 228 || [[strncmp]] || || || || [[FTE_STRINGS]]
|-
| 229 || [[strcasecmp]] || || || || [[FTE_STRINGS]]
|-
| 230 || [[strncasecmp]] || || || || [[FTE_STRINGS]]
|-
| 231 || [[calltimeofday]] || || || || [[FTE_CALLTIMEOFDAY]]
|-
| 232 || [[clientstat]] || || || || [[EXT_CSQC]]
|-
| 400 || [[copyentity]] || || || || [[DP_QC_COPYENTITY]]
|-
| 401 || [[setcolor]] || || || || [[DP_SV_SETCOLOR]]
|-
| 402 || [[findchain]] || || || || [[DP_QC_FINDCHAIN]]
|-
| 403 || [[findchainentity]] || || || || [[DP_QC_FINDCHAINFLOAT]]
|-
| 403 || [[findchainfloat]] || || || || [[DP_QC_FINDCHAINFLOAT]]
|-
| 404 || [[effect]] || || || || [[DP_SV_EFFECT]]
|-
| 405 || [[te_blood]] || || || || [[DP_TE_BLOOD]]
|-
| 406 || [[te_bloodshower]] || || || || [[DP_TE_BLOODSHOWER]]
|-
| 407 || [[te_explosionrgb]] || || || || [[DP_TE_EXPLOSIONRGB]]
|-
| 408 || [[te_particlecube]] || || || || [[DP_TE_PARTICLECUBE]]
|-
| 409 || [[te_particlerain]] || || || || [[DP_TE_PARTICLERAIN]]
|-
| 410 || [[te_particlesnow]] || || || || [[DP_TE_PARTICLESNOW]]
|-
| 411 || [[te_spark]] || || || || [[DP_TE_SPARK]]
|-
| 412 || [[te_gunshotquad]] || || || || [[DP_TE_QUADEFFECTS1]]
|-
| 413 || [[te_spikequad]] || || || || [[DP_TE_QUADEFFECTS1]]
|-
| 414 || [[te_superspikequad]] || || || || [[DP_TE_QUADEFFECTS1]]
|-
| 415 || [[te_explosionquad]] || || || || [[DP_TE_QUADEFFECTS1]]
|-
| 416 || [[te_smallflash]] || || || || [[DP_TE_SMALLFLASH]]
|-
| 417 || [[te_customflash]] || || || || [[DP_TE_CUSTOMFLASH]]
|-
| 418 || [[te_gunshot]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 419 || [[te_spike]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 420 || [[te_superspike]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 421 || [[te_explosion]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 422 || [[te_tarexplosion]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 423 || [[te_wizspike]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 424 || [[te_knightspike]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 425 || [[te_lavasplash]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 426 || [[te_teleport]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 427 || [[te_explosion2]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 428 || [[te_lightning1]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 429 || [[te_lightning2]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 430 || [[te_lightning3]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 431 || [[te_beam]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 432 || [[vectorvectors]] || || || || [[DP_QC_VECTORVECTORS]]
|-
| 433 || [[te_plasmaburn]] || || || || [[DP_TE_PLASMABURN]]
|-
| 434 || [[getsurfacenumpoints]] || || || || [[DP_QC_GETSURFACE]]
|-
| 435 || [[getsurfacepoint]] || || || || [[DP_QC_GETSURFACE]]
|-
| 436 || [[getsurfacenormal]] || || || || [[DP_QC_GETSURFACE]]
|-
| 437 || [[getsurfacetexture]] || || || || [[DP_QC_GETSURFACE]]
|-
| 438 || [[getsurfacenearpoint]] || || || || [[DP_QC_GETSURFACE]]
|-
| 439 || [[getsurfaceclippedpoint]] || || || || [[DP_QC_GETSURFACE]]
|-
| 440 || [[clientcommand]] || || || || [[KRIMZON_SV_PARSECLIENTCOMMAND]]
|-
| 441 || [[tokenize]] || || || || [[KRIMZON_SV_PARSECLIENTCOMMAND]]
|-
| 442 || [[argv]] || || || || [[KRIMZON_SV_PARSECLIENTCOMMAND]]
|-
| 443 || [[setattachment]] || || || || [[DP_GFX_QUAKE3MODELTAGS]]
|-
| 444 || [[search_begin]] || || || || [[DP_QC_FS_SEARCH]]
|-
| 445 || [[search_end]] || || || || [[DP_QC_FS_SEARCH]]
|-
| 446 || [[search_getsize]] || || || || [[DP_QC_FS_SEARCH]]
|-
| 447 || [[search_getfilename]] || || || || [[DP_QC_FS_SEARCH]]
|-
| 448 || [[cvar_string]] || || || || [[DP_QC_CVAR_STRING]]
|-
| 449 || [[findflags]] || || || || [[DP_QC_FINDFLAGS]]
|-
| 450 || [[findchainflags]] || || || || [[DP_QC_FINDCHAINFLAGS]]
|-
| 451 || [[gettagindex]] || || || || [[DP_QC_GETTAGINFO]]
|-
| 452 || [[gettaginfo]] || || || || [[DP_QC_GETTAGINFO]]
|-
| 453 || [[dropclient]] || || || || [[DP_SV_DROPCLIENT]]
|-
| 454 || [[spawnclient]] || || || || [[DP_SV_BOTCLIENT]]
|-
| 455 || [[clienttype]] || || || || [[DP_SV_BOTCLIENT]]
|-
| 456 || [[WriteUnterminatedString]] || || || || [[DP_SV_WRITEUNTERMINATEDSTRING]]
|-
| 457 || [[te_flamejet]] || || || || [[DP_TE_FLAMEJET]]
|-
| 530 || [[soundtoclient]] || || || || [[ZQ_SOUNDTOCLIENT]]
|-
| 531 || [[setpause]] || || || || [[ZQ_PAUSE]]
|-
| 532 || [[precache_vwep_model]] || || || || [[ZQ_VWEP]]
|-
| 533 || [[setinfo]] || || || || [[ZQ_SETINFO]]
|-
| 534 || [[spawnbot]] || || || || [[ZQ_BOT]]
|-
|}

===[[Telejano]] (NQ)===
* [[cvarstring]]
* [[readline]]</text>
      <sha1>lnm2dtr7zo8gz1t5mtrmtn2evw25iv1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1253</id>
      <parentid>61</parentid>
      <timestamp>2009-09-25T08:16:09Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="15515">[[QuakeC]] uses builtin functions to call bits of C code that can do 'jobs' for the QC that otherwise can't be done. Some functions affect the game world, some modify variables, and some maintain file lists for the engine. Each of the original functions are detailed below. Please note that builtin parameters/types/etc might differ between [[Quake]] and [[Hexen II]].

===See Also===
* [[Builtin ranges]]
* [[QSG extensions]]

{|style=&quot;border:1px solid #000000&quot;
|-
|style=&quot;align:center&quot; | '''#'''
|style=&quot;align:center&quot; | '''Function'''
|style=&quot;align:center&quot; colspan=&quot;3&quot; | '''Supported by&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'''
|style=&quot;align:center&quot; | '''[[QSG extensions|QSG Key]]'''
|-
| 1 || [[makevectors]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 2 || [[setorigin]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 3 || [[setmodel]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 4 || [[setsize]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 5 || [[lightstylestatic]] || || || [[H2MP]] || N/A
|-
| 6 || [[break]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 7 || [[random]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 8 || [[sound]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 9 || [[normalize]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 10 || [[error]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 11 || [[objerror]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 12 || [[vlen]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 13 || [[vectoyaw]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 14 || [[spawn (function)|spawn]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 15 || [[remove]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 16 || [[traceline]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 17 || [[checkclient]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 18 || [[find]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 19 || [[precache_sound]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 20 || [[precache_model]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 21 || [[stuffcmd]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 22 || [[findradius]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 23 || [[bprint]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 24 || [[sprint]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 25 || [[dprint]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 26 || [[ftos]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 27 || [[vtos]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 28 || [[coredump]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 29 || [[traceon]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 30 || [[traceoff]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 31 || [[eprint]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 32 || [[walkmove]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 33 || [[tracearea]] || || || [[H2MP]] || N/A
|-
| 34 || [[droptofloor]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 35 || [[lightstyle]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 36 || [[rint]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 37 || [[floor]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 38 || [[ceil]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 39 || [[AwardExperience]] || || || [[H2MP]] || N/A
|-
| 40 || [[checkbottom]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 41 || [[pointcontents]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 42 || [[particle2]] || || || [[H2MP]] || N/A
|-
| 43 || [[fabs]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 44 || [[aim]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 45 || [[cvar]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 46 || [[localcmd]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 47 || [[nextent]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 48 || [[particle]] || [[NQ]] ||  || [[H2MP]] || [[ZQ_QC_PARTICLE]]
|-
| 49 || [[ChangeYaw]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 50 || [[vhlen]] || || || [[H2MP]] || N/A
|-
| 51 || [[vectoangles]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 52 || [[WriteByte]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 53 || [[WriteChar]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 54 || [[WriteShort]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 55 || [[WriteLong]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 56 || [[WriteCoord]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 57 || [[WriteAngle]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 58 || [[WriteString]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 59 || [[WriteEntity]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 60 || [[sin]] || || || || [[DP_QC_SINCOSSQRTPOW]]
|-
| 60 || [[dprintf]] || || || [[H2MP]] || N/A
|-
| 61 || [[cos]] || || || || [[DP_QC_SINCOSSQRTPOW]]
|-
| 61 || [[cos]] || || || [[H2MP]] || N/A
|-
| 62 || [[sqrt]] || || || || [[DP_QC_SINCOSSQRTPOW]]
|-
| 62 || [[sin]] || || || [[H2MP]] || N/A
|-
| 63 || [[changepitch]] || || || || [[DP_QC_CHANGEPITCH]]
|-
| 63 || [[AdvanceFrame]] || || || [[H2MP]] || N/A
|-
| 64 || [[tracetoss]] || || || || [[DP_QC_TRACETOSS]]
|-
| 64 || [[dprintv]] || || || [[H2MP]] || N/A
|-
| 65 || [[etos]] || || || || [[DP_QC_ETOS]]
|-
| 65 || [[RewindFrame]] || || || [[H2MP]] || N/A
|-
| 66 || [[setclass]] || || || [[H2MP]] || N/A
|-
| 67 || [[movetogoal]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 68 || [[precache_file]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 69 || [[makestatic]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 70 || [[changelevel]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 71 || [[lightstylevalue]] || || || [[H2MP]] || N/A
|-
| 72 || [[cvar_set]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 73 || [[centerprint]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 74 || [[ambientsound]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 75 || [[precache_model2]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 76 || [[precache_sound2]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 77 || [[precache_file2]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 78 || [[setspawnparms]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 79 || [[logfrag]] ||  || [[QW]] || || N/A
|-
| 79 || [[zone]] || || || || [[QSG_FILE]]
|-
| 79 || [[plaque_draw]] ||  || || [[H2MP]] || N/A
|-
| 80 || [[infokey]] ||  || [[QW]] || || N/A
|-
| 80 || [[unzone]] || || || || [[QSG_FILE]]
|-
| 80 || [[rain_go]] ||  || || [[H2MP]] || N/A
|-
| 81 || [[stof]] ||  || [[QW]] || || [[FRIK_FILE]]
|-
| 81 || [[strlen]] || || || || [[QSG_FILE]]
|-
| 81 || [[particleexplosion]] || || || [[H2MP]] || N/A
|-
| 82 || [[multicast]] ||  || [[QW]] || || N/A
|-
| 82 || [[strcat]] || || || || [[QSG_FILE]]
|-
| 82 || [[movestep]] || || || [[H2MP]] || N/A
|-
| 83 || [[substring]] || || || || [[QSG_FILE]]
|-
| 83 || [[advanceweaponframe]] || || || [[H2MP]] || N/A
|-
| 84 || [[stof]] || || || || [[QSG_FILE]]
|-
| 84 || [[sqrt]] || || || [[H2MP]] || N/A
|-
| 84 || [[tokenize]] || || || || [[ZQ_QC_TOKENIZE]]
|-
| 85 || [[stov]] || || || || [[QSG_FILE]]
|-
| 85 || [[particle3]] || || || [[H2MP]] || N/A
|-
| 85 || [[argc]] || || || || [[ZQ_QC_TOKENIZE]]
|-
| 86 || [[open]] || || || || [[QSG_FILE]]
|-
| 86 || [[particle4]] || || || [[H2MP]] || N/A
|-
| 86 || [[argv]] || || || || [[ZQ_QC_TOKENIZE]]
|-
| 87 || [[close]] || || || || [[QSG_FILE]]
|-
| 87 || [[setpuzzlemodel]] || || || [[H2MP]] || N/A
|-
| 88 || [[read]] || || || || [[QSG_FILE]]
|-
| 88 || [[starteffect]] || || || [[H2MP]] || N/A
|-
| 89 || [[write]] || || || || [[QSG_FILE]]
|-
| 89 || [[endeffect]] || || || [[H2MP]] || N/A
|-
| 90 || [[tracebox]] || || || || [[DP_QC_TRACEBOX]]
|-
| 90 || [[precache_puzzle_model]] || || || [[H2MP]] || N/A
|-
| 91 || [[randomvec]] || || || || [[DP_QC_RANDOMVEC]]
|-
| 91 || [[concatv]] || || || [[H2MP]] || N/A
|-
| 92 || [[getlight]] || || || || [[DP_QC_GETLIGHT]]
|-
| 92 || [[getstring]] || || || [[H2MP]] || N/A
|-
| 93 || [[registercvar]] || || || || [[DP_REGISTERCVAR]]
|-
| 93 || [[spawn_temp]] || || || [[H2MP]] || N/A
|-
| 94 || [[min]] || || || || [[DP_QC_MINMAXBOUND]]
|-
| 94 || [[v_factor]] || || || [[H2MP]] || N/A
|-
| 95 || [[max]] || || || || [[DP_QC_MINMAXBOUND]]
|-
| 95 || [[v_factorrange]] || || || [[H2MP]] || N/A
|-
| 96 || [[bound]] || || || || [[DP_QC_MINMAXBOUND]]
|-
| 96 || [[precache_sound3]] || || || [[H2MP]] || N/A
|-
| 97 || [[pow]] || || || || [[DP_QC_SINCOSSQRTPOW]]
|-
| 97 || [[precache_model3]] || || || [[H2MP]] || N/A
|-
| 98 || [[findentity]] || || || || [[DP_QC_FINDFLOAT]]
|-
| 98 || [[findfloat]] || || || || [[DP_QC_FINDFLOAT]]
|-
| 98 || [[precache_file3]] || || || [[H2MP]] || N/A
|-
| 99 || [[checkextension]] || || || || __[[QSG Extensions]] System__
|-
| 99 || [[matchAngleToSlope]] || || || [[H2MP]] || N/A
|-
| 100 || [[updateInfoPlaque]] || || || [[H2MP]] || N/A
|-
| 101 || [[precache_sound4]] || || || [[H2MP]] || N/A
|-
| 102 || [[precache_model4]] || || || [[H2MP]] || N/A
|-
| 103 || [[precache_file4]] || || || [[H2MP]] || N/A
|-
| 104 || [[showpic]] || || || || [[TEI_SHOWLMP2]]
|-
| 104 || [[doWhiteFlash]] || || || [[H2MP]] || N/A
|-
| 105 || [[hidepic]] || || || || [[TEI_SHOWLMP2]]
|-
| 105 || [[updateSoundPos]] || || || [[H2MP]] || N/A
|-
| 106 || [[movepic]] || || || || [[TEI_SHOWLMP2]]
|-
| 106 || [[stopSound]] || || || [[H2MP]] || N/A
|-
| 107 || [[changepic]] || || || || [[TEI_SHOWLMP2]]
|-
| 108 || [[showpicent]] || || || || [[TEI_SHOWLMP2]]
|-
| 109 || [[hidepicent]] || || || || [[TEI_SHOWLMP2]]
|-
| 110 || [[fopen]] || || || || [[FRIK_FILE]]
|-
| 111 || [[fclose]] || || || || [[FRIK_FILE]]
|-
| 112 || [[fgets]] || || || || [[FRIK_FILE]]
|-
| 113 || [[fputs]] || || || || [[FRIK_FILE]]
|-
| 114 || [[strlen]] || || || || [[FRIK_FILE]] [[ZQ_QC_STRINGS]]
|-
| 115 || [[strcat]] || || || || [[FRIK_FILE]] [[ZQ_QC_STRINGS]]
|-
| 116 || [[substring]] || || || || [[FRIK_FILE]] [[ZQ_QC_STRINGS]]
|-
| 117 || [[stov]] || || || || [[FRIK_FILE]]
|-
| 118 || [[strzone]] || || || || [[FRIK_FILE]] [[ZQ_QC_STRINGS]]
|-
| 119 || [[strunzone]] || || || || [[FRIK_FILE]] [[ZQ_QC_STRINGS]]
|-
| 176 || [[cvar_setf]] || || || || N/A
|-
| 177 || [[localsound]] || || || || N/A
|-
| 200 || [[getmodelindex]] || || || || [[EXT_CSQC]]
|-
| 201 || [[externcall]] || || || || [[FTE_MULTIPROGS]]
|-
| 202 || [[addprogs]] || || || || [[FTE_MULTIPROGS]]
|-
| 203 || [[externvalue]] || || || || [[FTE_MULTIPROGS]]
|-
| 204 || [[externset]] || || || || [[FTE_MULTIPROGS]]
|-
| 205 || [[externrefcall]] || || || || [[FTE_MULTIPROGS]]
|-
| 206 || [[instr]] || || || || [[FTE_MULTIPROGS]]
|-
| 209 || [[RegisterTempEnt]] || || || || [[FTE_PEXT_CUSTOMTENTS]]
|-
| 209 || [[CustomTempEnt]] || || || || [[FTE_PEXT_CUSTOMTENTS]]
|-
| 210 || [[fork]] || || || || [[FTE_MULTITHREADED]]
|-
| 211 || [[abort]] || || || || [[FTE_MULTITHREADED]]
|-
| 212 || [[sleep]] || || || || [[FTE_MULTITHREADED]]
|-
| 213 || [[forceinfokey]] || || || || [[FTE_FORCEINFOKEY]]
|-
| 214 || [[npcchat]] || || || || [[FTE_NPCCHAT]]
|-
| 221 || [[bitshift]] || || || || [[EXT_BITSHIFT]]
|-
| 222 || [[strstrofs]] || || || || [[FTE_STRINGS]]
|-
| 223 || [[str2chr]] || || || || [[FTE_STRINGS]]
|-
| 224 || [[chr2str]] || || || || [[FTE_STRINGS]]
|-
| 225 || [[strconv]] || || || || [[FTE_STRINGS]]
|-
| 226 || [[infoadd]] || || || || [[FTE_STRINGS]]
|-
| 227 || [[infoget]] || || || || [[FTE_STRINGS]]
|-
| 228 || [[strncmp]] || || || || [[FTE_STRINGS]]
|-
| 229 || [[strcasecmp]] || || || || [[FTE_STRINGS]]
|-
| 230 || [[strncasecmp]] || || || || [[FTE_STRINGS]]
|-
| 231 || [[calltimeofday]] || || || || [[FTE_CALLTIMEOFDAY]]
|-
| 232 || [[clientstat]] || || || || [[EXT_CSQC]]
|-
| 400 || [[copyentity]] || || || || [[DP_QC_COPYENTITY]]
|-
| 401 || [[setcolor]] || || || || [[DP_SV_SETCOLOR]]
|-
| 402 || [[findchain]] || || || || [[DP_QC_FINDCHAIN]]
|-
| 403 || [[findchainentity]] || || || || [[DP_QC_FINDCHAINFLOAT]]
|-
| 403 || [[findchainfloat]] || || || || [[DP_QC_FINDCHAINFLOAT]]
|-
| 404 || [[effect]] || || || || [[DP_SV_EFFECT]]
|-
| 405 || [[te_blood]] || || || || [[DP_TE_BLOOD]]
|-
| 406 || [[te_bloodshower]] || || || || [[DP_TE_BLOODSHOWER]]
|-
| 407 || [[te_explosionrgb]] || || || || [[DP_TE_EXPLOSIONRGB]]
|-
| 408 || [[te_particlecube]] || || || || [[DP_TE_PARTICLECUBE]]
|-
| 409 || [[te_particlerain]] || || || || [[DP_TE_PARTICLERAIN]]
|-
| 410 || [[te_particlesnow]] || || || || [[DP_TE_PARTICLESNOW]]
|-
| 411 || [[te_spark]] || || || || [[DP_TE_SPARK]]
|-
| 412 || [[te_gunshotquad]] || || || || [[DP_TE_QUADEFFECTS1]]
|-
| 413 || [[te_spikequad]] || || || || [[DP_TE_QUADEFFECTS1]]
|-
| 414 || [[te_superspikequad]] || || || || [[DP_TE_QUADEFFECTS1]]
|-
| 415 || [[te_explosionquad]] || || || || [[DP_TE_QUADEFFECTS1]]
|-
| 416 || [[te_smallflash]] || || || || [[DP_TE_SMALLFLASH]]
|-
| 417 || [[te_customflash]] || || || || [[DP_TE_CUSTOMFLASH]]
|-
| 418 || [[te_gunshot]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 419 || [[te_spike]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 420 || [[te_superspike]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 421 || [[te_explosion]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 422 || [[te_tarexplosion]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 423 || [[te_wizspike]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 424 || [[te_knightspike]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 425 || [[te_lavasplash]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 426 || [[te_teleport]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 427 || [[te_explosion2]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 428 || [[te_lightning1]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 429 || [[te_lightning2]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 430 || [[te_lightning3]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 431 || [[te_beam]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 432 || [[vectorvectors]] || || || || [[DP_QC_VECTORVECTORS]]
|-
| 433 || [[te_plasmaburn]] || || || || [[DP_TE_PLASMABURN]]
|-
| 434 || [[getsurfacenumpoints]] || || || || [[DP_QC_GETSURFACE]]
|-
| 435 || [[getsurfacepoint]] || || || || [[DP_QC_GETSURFACE]]
|-
| 436 || [[getsurfacenormal]] || || || || [[DP_QC_GETSURFACE]]
|-
| 437 || [[getsurfacetexture]] || || || || [[DP_QC_GETSURFACE]]
|-
| 438 || [[getsurfacenearpoint]] || || || || [[DP_QC_GETSURFACE]]
|-
| 439 || [[getsurfaceclippedpoint]] || || || || [[DP_QC_GETSURFACE]]
|-
| 440 || [[clientcommand]] || || || || [[KRIMZON_SV_PARSECLIENTCOMMAND]]
|-
| 441 || [[tokenize]] || || || || [[KRIMZON_SV_PARSECLIENTCOMMAND]]
|-
| 442 || [[argv]] || || || || [[KRIMZON_SV_PARSECLIENTCOMMAND]]
|-
| 443 || [[setattachment]] || || || || [[DP_GFX_QUAKE3MODELTAGS]]
|-
| 444 || [[search_begin]] || || || || [[DP_QC_FS_SEARCH]]
|-
| 445 || [[search_end]] || || || || [[DP_QC_FS_SEARCH]]
|-
| 446 || [[search_getsize]] || || || || [[DP_QC_FS_SEARCH]]
|-
| 447 || [[search_getfilename]] || || || || [[DP_QC_FS_SEARCH]]
|-
| 448 || [[cvar_string]] || || || || [[DP_QC_CVAR_STRING]]
|-
| 449 || [[findflags]] || || || || [[DP_QC_FINDFLAGS]]
|-
| 450 || [[findchainflags]] || || || || [[DP_QC_FINDCHAINFLAGS]]
|-
| 451 || [[gettagindex]] || || || || [[DP_QC_GETTAGINFO]]
|-
| 452 || [[gettaginfo]] || || || || [[DP_QC_GETTAGINFO]]
|-
| 453 || [[dropclient]] || || || || [[DP_SV_DROPCLIENT]]
|-
| 454 || [[spawnclient]] || || || || [[DP_SV_BOTCLIENT]]
|-
| 455 || [[clienttype]] || || || || [[DP_SV_BOTCLIENT]]
|-
| 456 || [[WriteUnterminatedString]] || || || || [[DP_SV_WRITEUNTERMINATEDSTRING]]
|-
| 457 || [[te_flamejet]] || || || || [[DP_TE_FLAMEJET]]
|-
| 530 || [[soundtoclient]] || || || || [[ZQ_SOUNDTOCLIENT]]
|-
| 531 || [[setpause]] || || || || [[ZQ_PAUSE]]
|-
| 532 || [[precache_vwep_model]] || || || || [[ZQ_VWEP]]
|-
| 533 || [[setinfo]] || || || || [[ZQ_SETINFO]]
|-
| 534 || [[spawnbot]] || || || || [[ZQ_BOT]]
|-
|}

===[[Telejano]] (NQ)===
* [[cvarstring]]
* [[readline]]</text>
      <sha1>bg3gty2jcjgop52ys3v62wcbheyqgvs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1644</id>
      <parentid>1253</parentid>
      <timestamp>2011-01-03T16:45:54Z</timestamp>
      <contributor>
        <ip>70.112.44.71</ip>
      </contributor>
      <comment>The numbering for EXT_BITSHIFT and FTE_STRINGS was wrong (at least according to the pages for EXT_BITSHIFT and FTE_STRINGS).</comment>
      <text xml:space="preserve" bytes="15566">[[QuakeC]] uses builtin functions to call bits of C code that can do 'jobs' for the QC that otherwise can't be done. Some functions affect the game world, some modify variables, and some maintain file lists for the engine. Each of the original functions are detailed below. Please note that builtin parameters/types/etc might differ between [[Quake]] and [[Hexen II]].

===See Also===
* [[Builtin ranges]]
* [[QSG extensions]]

{|style=&quot;border:1px solid #000000&quot;
|-
|style=&quot;align:center&quot; | '''#'''
|style=&quot;align:center&quot; | '''Function'''
|style=&quot;align:center&quot; colspan=&quot;3&quot; | '''Supported by&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'''
|style=&quot;align:center&quot; | '''[[QSG extensions|QSG Key]]'''
|-
| 1 || [[makevectors]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 2 || [[setorigin]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 3 || [[setmodel]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 4 || [[setsize]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 5 || [[lightstylestatic]] || || || [[H2MP]] || N/A
|-
| 6 || [[break]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 7 || [[random]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 8 || [[sound]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 9 || [[normalize]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 10 || [[error]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 11 || [[objerror]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 12 || [[vlen]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 13 || [[vectoyaw]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 14 || [[spawn (function)|spawn]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 15 || [[remove]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 16 || [[traceline]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 17 || [[checkclient]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 18 || [[find]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 19 || [[precache_sound]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 20 || [[precache_model]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 21 || [[stuffcmd]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 22 || [[findradius]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 23 || [[bprint]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 24 || [[sprint]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 25 || [[dprint]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 26 || [[ftos]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 27 || [[vtos]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 28 || [[coredump]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 29 || [[traceon]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 30 || [[traceoff]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 31 || [[eprint]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 32 || [[walkmove]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 33 || [[tracearea]] || || || [[H2MP]] || N/A
|-
| 34 || [[droptofloor]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 35 || [[lightstyle]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 36 || [[rint]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 37 || [[floor]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 38 || [[ceil]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 39 || [[AwardExperience]] || || || [[H2MP]] || N/A
|-
| 40 || [[checkbottom]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 41 || [[pointcontents]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 42 || [[particle2]] || || || [[H2MP]] || N/A
|-
| 43 || [[fabs]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 44 || [[aim]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 45 || [[cvar]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 46 || [[localcmd]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 47 || [[nextent]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 48 || [[particle]] || [[NQ]] ||  || [[H2MP]] || [[ZQ_QC_PARTICLE]]
|-
| 49 || [[ChangeYaw]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 50 || [[vhlen]] || || || [[H2MP]] || N/A
|-
| 51 || [[vectoangles]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 52 || [[WriteByte]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 53 || [[WriteChar]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 54 || [[WriteShort]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 55 || [[WriteLong]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 56 || [[WriteCoord]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 57 || [[WriteAngle]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 58 || [[WriteString]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 59 || [[WriteEntity]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 60 || [[sin]] || || || || [[DP_QC_SINCOSSQRTPOW]]
|-
| 60 || [[dprintf]] || || || [[H2MP]] || N/A
|-
| 61 || [[cos]] || || || || [[DP_QC_SINCOSSQRTPOW]]
|-
| 61 || [[cos]] || || || [[H2MP]] || N/A
|-
| 62 || [[sqrt]] || || || || [[DP_QC_SINCOSSQRTPOW]]
|-
| 62 || [[sin]] || || || [[H2MP]] || N/A
|-
| 63 || [[changepitch]] || || || || [[DP_QC_CHANGEPITCH]]
|-
| 63 || [[AdvanceFrame]] || || || [[H2MP]] || N/A
|-
| 64 || [[tracetoss]] || || || || [[DP_QC_TRACETOSS]]
|-
| 64 || [[dprintv]] || || || [[H2MP]] || N/A
|-
| 65 || [[etos]] || || || || [[DP_QC_ETOS]]
|-
| 65 || [[RewindFrame]] || || || [[H2MP]] || N/A
|-
| 66 || [[setclass]] || || || [[H2MP]] || N/A
|-
| 67 || [[movetogoal]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 68 || [[precache_file]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 69 || [[makestatic]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 70 || [[changelevel]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 71 || [[lightstylevalue]] || || || [[H2MP]] || N/A
|-
| 72 || [[cvar_set]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 73 || [[centerprint]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 74 || [[ambientsound]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 75 || [[precache_model2]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 76 || [[precache_sound2]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 77 || [[precache_file2]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 78 || [[setspawnparms]] || [[NQ]] || [[QW]] || [[H2MP]] || N/A
|-
| 79 || [[logfrag]] ||  || [[QW]] || || N/A
|-
| 79 || [[zone]] || || || || [[QSG_FILE]]
|-
| 79 || [[plaque_draw]] ||  || || [[H2MP]] || N/A
|-
| 80 || [[infokey]] ||  || [[QW]] || || N/A
|-
| 80 || [[unzone]] || || || || [[QSG_FILE]]
|-
| 80 || [[rain_go]] ||  || || [[H2MP]] || N/A
|-
| 81 || [[stof]] ||  || [[QW]] || || [[FRIK_FILE]]
|-
| 81 || [[strlen]] || || || || [[QSG_FILE]]
|-
| 81 || [[particleexplosion]] || || || [[H2MP]] || N/A
|-
| 82 || [[multicast]] ||  || [[QW]] || || N/A
|-
| 82 || [[strcat]] || || || || [[QSG_FILE]]
|-
| 82 || [[movestep]] || || || [[H2MP]] || N/A
|-
| 83 || [[substring]] || || || || [[QSG_FILE]]
|-
| 83 || [[advanceweaponframe]] || || || [[H2MP]] || N/A
|-
| 84 || [[stof]] || || || || [[QSG_FILE]]
|-
| 84 || [[sqrt]] || || || [[H2MP]] || N/A
|-
| 84 || [[tokenize]] || || || || [[ZQ_QC_TOKENIZE]]
|-
| 85 || [[stov]] || || || || [[QSG_FILE]]
|-
| 85 || [[particle3]] || || || [[H2MP]] || N/A
|-
| 85 || [[argc]] || || || || [[ZQ_QC_TOKENIZE]]
|-
| 86 || [[open]] || || || || [[QSG_FILE]]
|-
| 86 || [[particle4]] || || || [[H2MP]] || N/A
|-
| 86 || [[argv]] || || || || [[ZQ_QC_TOKENIZE]]
|-
| 87 || [[close]] || || || || [[QSG_FILE]]
|-
| 87 || [[setpuzzlemodel]] || || || [[H2MP]] || N/A
|-
| 88 || [[read]] || || || || [[QSG_FILE]]
|-
| 88 || [[starteffect]] || || || [[H2MP]] || N/A
|-
| 89 || [[write]] || || || || [[QSG_FILE]]
|-
| 89 || [[endeffect]] || || || [[H2MP]] || N/A
|-
| 90 || [[tracebox]] || || || || [[DP_QC_TRACEBOX]]
|-
| 90 || [[precache_puzzle_model]] || || || [[H2MP]] || N/A
|-
| 91 || [[randomvec]] || || || || [[DP_QC_RANDOMVEC]]
|-
| 91 || [[concatv]] || || || [[H2MP]] || N/A
|-
| 92 || [[getlight]] || || || || [[DP_QC_GETLIGHT]]
|-
| 92 || [[getstring]] || || || [[H2MP]] || N/A
|-
| 93 || [[registercvar]] || || || || [[DP_REGISTERCVAR]]
|-
| 93 || [[spawn_temp]] || || || [[H2MP]] || N/A
|-
| 94 || [[min]] || || || || [[DP_QC_MINMAXBOUND]]
|-
| 94 || [[v_factor]] || || || [[H2MP]] || N/A
|-
| 95 || [[max]] || || || || [[DP_QC_MINMAXBOUND]]
|-
| 95 || [[v_factorrange]] || || || [[H2MP]] || N/A
|-
| 96 || [[bound]] || || || || [[DP_QC_MINMAXBOUND]]
|-
| 96 || [[precache_sound3]] || || || [[H2MP]] || N/A
|-
| 97 || [[pow]] || || || || [[DP_QC_SINCOSSQRTPOW]]
|-
| 97 || [[precache_model3]] || || || [[H2MP]] || N/A
|-
| 98 || [[findentity]] || || || || [[DP_QC_FINDFLOAT]]
|-
| 98 || [[findfloat]] || || || || [[DP_QC_FINDFLOAT]]
|-
| 98 || [[precache_file3]] || || || [[H2MP]] || N/A
|-
| 99 || [[checkextension]] || || || || __[[QSG Extensions]] System__
|-
| 99 || [[matchAngleToSlope]] || || || [[H2MP]] || N/A
|-
| 100 || [[updateInfoPlaque]] || || || [[H2MP]] || N/A
|-
| 101 || [[precache_sound4]] || || || [[H2MP]] || N/A
|-
| 102 || [[precache_model4]] || || || [[H2MP]] || N/A
|-
| 103 || [[precache_file4]] || || || [[H2MP]] || N/A
|-
| 104 || [[showpic]] || || || || [[TEI_SHOWLMP2]]
|-
| 104 || [[doWhiteFlash]] || || || [[H2MP]] || N/A
|-
| 105 || [[hidepic]] || || || || [[TEI_SHOWLMP2]]
|-
| 105 || [[updateSoundPos]] || || || [[H2MP]] || N/A
|-
| 106 || [[movepic]] || || || || [[TEI_SHOWLMP2]]
|-
| 106 || [[stopSound]] || || || [[H2MP]] || N/A
|-
| 107 || [[changepic]] || || || || [[TEI_SHOWLMP2]]
|-
| 108 || [[showpicent]] || || || || [[TEI_SHOWLMP2]]
|-
| 109 || [[hidepicent]] || || || || [[TEI_SHOWLMP2]]
|-
| 110 || [[fopen]] || || || || [[FRIK_FILE]]
|-
| 111 || [[fclose]] || || || || [[FRIK_FILE]]
|-
| 112 || [[fgets]] || || || || [[FRIK_FILE]]
|-
| 113 || [[fputs]] || || || || [[FRIK_FILE]]
|-
| 114 || [[strlen]] || || || || [[FRIK_FILE]] [[ZQ_QC_STRINGS]]
|-
| 115 || [[strcat]] || || || || [[FRIK_FILE]] [[ZQ_QC_STRINGS]]
|-
| 116 || [[substring]] || || || || [[FRIK_FILE]] [[ZQ_QC_STRINGS]]
|-
| 117 || [[stov]] || || || || [[FRIK_FILE]]
|-
| 118 || [[strzone]] || || || || [[FRIK_FILE]] [[ZQ_QC_STRINGS]]
|-
| 119 || [[strunzone]] || || || || [[FRIK_FILE]] [[ZQ_QC_STRINGS]]
|-
| 176 || [[cvar_setf]] || || || || N/A
|-
| 177 || [[localsound]] || || || || N/A
|-
| 200 || [[getmodelindex]] || || || || [[EXT_CSQC]]
|-
| 201 || [[externcall]] || || || || [[FTE_MULTIPROGS]]
|-
| 202 || [[addprogs]] || || || || [[FTE_MULTIPROGS]]
|-
| 203 || [[externvalue]] || || || || [[FTE_MULTIPROGS]]
|-
| 204 || [[externset]] || || || || [[FTE_MULTIPROGS]]
|-
| 205 || [[externrefcall]] || || || || [[FTE_MULTIPROGS]]
|-
| 206 || [[instr]] || || || || [[FTE_MULTIPROGS]]
|-
| 209 || [[RegisterTempEnt]] || || || || [[FTE_PEXT_CUSTOMTENTS]]
|-
| 209 || [[CustomTempEnt]] || || || || [[FTE_PEXT_CUSTOMTENTS]]
|-
| 210 || [[fork]] || || || || [[FTE_MULTITHREADED]]
|-
| 211 || [[abort]] || || || || [[FTE_MULTITHREADED]]
|-
| 212 || [[sleep]] || || || || [[FTE_MULTITHREADED]]
|-
| 213 || [[forceinfokey]] || || || || [[FTE_FORCEINFOKEY]]
|-
| 214 || [[npcchat]] || || || || [[FTE_NPCCHAT]]
|-
| 218 || [[bitshift]] || || || || [[EXT_BITSHIFT]]
|-
| 221 || [[strstrofs]] || || || || [[FTE_STRINGS]]
|-
| 222 || [[str2chr]] || || || || [[FTE_STRINGS]]
|-
| 223 || [[chr2str]] || || || || [[FTE_STRINGS]]
|-
| 224 || [[strconv]] || || || || [[FTE_STRINGS]]
|-
| 225 || [[strpad]] || || || || [[FTE_STRINGS]]
|-
| 226 || [[infoadd]] || || || || [[FTE_STRINGS]]
|-
| 227 || [[infoget]] || || || || [[FTE_STRINGS]]
|-
| 228 || [[strncmp]] || || || || [[FTE_STRINGS]]
|-
| 229 || [[strcasecmp]] || || || || [[FTE_STRINGS]]
|-
| 230 || [[strncasecmp]] || || || || [[FTE_STRINGS]]
|-
| 231 || [[calltimeofday]] || || || || [[FTE_CALLTIMEOFDAY]]
|-
| 232 || [[clientstat]] || || || || [[EXT_CSQC]]
|-
| 400 || [[copyentity]] || || || || [[DP_QC_COPYENTITY]]
|-
| 401 || [[setcolor]] || || || || [[DP_SV_SETCOLOR]]
|-
| 402 || [[findchain]] || || || || [[DP_QC_FINDCHAIN]]
|-
| 403 || [[findchainentity]] || || || || [[DP_QC_FINDCHAINFLOAT]]
|-
| 403 || [[findchainfloat]] || || || || [[DP_QC_FINDCHAINFLOAT]]
|-
| 404 || [[effect]] || || || || [[DP_SV_EFFECT]]
|-
| 405 || [[te_blood]] || || || || [[DP_TE_BLOOD]]
|-
| 406 || [[te_bloodshower]] || || || || [[DP_TE_BLOODSHOWER]]
|-
| 407 || [[te_explosionrgb]] || || || || [[DP_TE_EXPLOSIONRGB]]
|-
| 408 || [[te_particlecube]] || || || || [[DP_TE_PARTICLECUBE]]
|-
| 409 || [[te_particlerain]] || || || || [[DP_TE_PARTICLERAIN]]
|-
| 410 || [[te_particlesnow]] || || || || [[DP_TE_PARTICLESNOW]]
|-
| 411 || [[te_spark]] || || || || [[DP_TE_SPARK]]
|-
| 412 || [[te_gunshotquad]] || || || || [[DP_TE_QUADEFFECTS1]]
|-
| 413 || [[te_spikequad]] || || || || [[DP_TE_QUADEFFECTS1]]
|-
| 414 || [[te_superspikequad]] || || || || [[DP_TE_QUADEFFECTS1]]
|-
| 415 || [[te_explosionquad]] || || || || [[DP_TE_QUADEFFECTS1]]
|-
| 416 || [[te_smallflash]] || || || || [[DP_TE_SMALLFLASH]]
|-
| 417 || [[te_customflash]] || || || || [[DP_TE_CUSTOMFLASH]]
|-
| 418 || [[te_gunshot]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 419 || [[te_spike]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 420 || [[te_superspike]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 421 || [[te_explosion]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 422 || [[te_tarexplosion]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 423 || [[te_wizspike]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 424 || [[te_knightspike]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 425 || [[te_lavasplash]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 426 || [[te_teleport]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 427 || [[te_explosion2]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 428 || [[te_lightning1]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 429 || [[te_lightning2]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 430 || [[te_lightning3]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 431 || [[te_beam]] || || || || [[DP_TE_STANDARDEFFECTBUILTINS]]
|-
| 432 || [[vectorvectors]] || || || || [[DP_QC_VECTORVECTORS]]
|-
| 433 || [[te_plasmaburn]] || || || || [[DP_TE_PLASMABURN]]
|-
| 434 || [[getsurfacenumpoints]] || || || || [[DP_QC_GETSURFACE]]
|-
| 435 || [[getsurfacepoint]] || || || || [[DP_QC_GETSURFACE]]
|-
| 436 || [[getsurfacenormal]] || || || || [[DP_QC_GETSURFACE]]
|-
| 437 || [[getsurfacetexture]] || || || || [[DP_QC_GETSURFACE]]
|-
| 438 || [[getsurfacenearpoint]] || || || || [[DP_QC_GETSURFACE]]
|-
| 439 || [[getsurfaceclippedpoint]] || || || || [[DP_QC_GETSURFACE]]
|-
| 440 || [[clientcommand]] || || || || [[KRIMZON_SV_PARSECLIENTCOMMAND]]
|-
| 441 || [[tokenize]] || || || || [[KRIMZON_SV_PARSECLIENTCOMMAND]]
|-
| 442 || [[argv]] || || || || [[KRIMZON_SV_PARSECLIENTCOMMAND]]
|-
| 443 || [[setattachment]] || || || || [[DP_GFX_QUAKE3MODELTAGS]]
|-
| 444 || [[search_begin]] || || || || [[DP_QC_FS_SEARCH]]
|-
| 445 || [[search_end]] || || || || [[DP_QC_FS_SEARCH]]
|-
| 446 || [[search_getsize]] || || || || [[DP_QC_FS_SEARCH]]
|-
| 447 || [[search_getfilename]] || || || || [[DP_QC_FS_SEARCH]]
|-
| 448 || [[cvar_string]] || || || || [[DP_QC_CVAR_STRING]]
|-
| 449 || [[findflags]] || || || || [[DP_QC_FINDFLAGS]]
|-
| 450 || [[findchainflags]] || || || || [[DP_QC_FINDCHAINFLAGS]]
|-
| 451 || [[gettagindex]] || || || || [[DP_QC_GETTAGINFO]]
|-
| 452 || [[gettaginfo]] || || || || [[DP_QC_GETTAGINFO]]
|-
| 453 || [[dropclient]] || || || || [[DP_SV_DROPCLIENT]]
|-
| 454 || [[spawnclient]] || || || || [[DP_SV_BOTCLIENT]]
|-
| 455 || [[clienttype]] || || || || [[DP_SV_BOTCLIENT]]
|-
| 456 || [[WriteUnterminatedString]] || || || || [[DP_SV_WRITEUNTERMINATEDSTRING]]
|-
| 457 || [[te_flamejet]] || || || || [[DP_TE_FLAMEJET]]
|-
| 530 || [[soundtoclient]] || || || || [[ZQ_SOUNDTOCLIENT]]
|-
| 531 || [[setpause]] || || || || [[ZQ_PAUSE]]
|-
| 532 || [[precache_vwep_model]] || || || || [[ZQ_VWEP]]
|-
| 533 || [[setinfo]] || || || || [[ZQ_SETINFO]]
|-
| 534 || [[spawnbot]] || || || || [[ZQ_BOT]]
|-
|}

===[[Telejano]] (NQ)===
* [[cvarstring]]
* [[readline]]</text>
      <sha1>kvgorjuvo3jewtu5isojsbpyj8vunsg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>List of console commands</title>
    <ns>0</ns>
    <id>43</id>
    <revision>
      <id>52</id>
      <timestamp>2007-10-30T18:08:05Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: * [[_cl_color]] * [[_cl_name]] * [[_config_com_baud]] * [[_config_com_irq]] * [[_config_com_modem]] * [[_config_com_port]] * [[_config_modem_clear]] * [[_config_modem_dialtype]] * [[_confi...</comment>
      <text xml:space="preserve" bytes="3672">* [[_cl_color]]
* [[_cl_name]]
* [[_config_com_baud]]
* [[_config_com_irq]]
* [[_config_com_modem]]
* [[_config_com_port]]
* [[_config_modem_clear]]
* [[_config_modem_dialtype]]
* [[_config_modem_hangup]]
* [[_config_modem_init]]
* [[_snd_mixahead]]
* [[_vid_default_mode]]
* [[_vid_default_mode_win]]
* [[_vid_wait_override]]
* [[_windowed_mouse]]
* [[ambient_fade]]
* [[ambient_level]]
* [[bgmbuffer]]
* [[bgmvolume]]
* [[block_switch]]
* [[chase_active]]
* [[chase_back]]
* [[chase_right]]
* [[chase_up]]
* [[cl_anglespeedkey]]
* [[cl_backspeed]]
* [[cl_bob]]
* [[cl_bobcycle]]
* [[cl_bobup]]
* [[cl_forwardspeed]]
* [[cl_movespeedkey]]
* [[cl_nolerp]]
* [[cl_pitchspeed]]
* [[cl_rollangle]]
* [[cl_rollspeed]]
* [[cl_shownet]]
* [[cl_sidespeed]]
* [[cl_upspeed]]
* [[cl_yawspeed]]
* [[cmdline]]
* [[con_notifytime]]
* [[coop]]
* [[crosshair]]
* [[d_mipcap]]
* [[d_mipscale]]
* [[deathmatch]]
* [[developer]]
* [[edgefriction]]
* [[fov]]
* [[fraglimit]]
* [[gamecfg]]
* [[gamma]]
* [[gl_affinemodels]]
* [[gl_clear]]
* [[gl_cull]]
* [[gl_finish]]
* [[gl_flashblend]]
* [[gl_keeptjunctions]]
* [[gl_max_size]]
* [[gl_nobind]]
* [[gl_nocolors]]
* [[gl_picmip]]
* [[gl_playermip]]
* [[gl_polyblend]]
* [[gl_reporttjunctions]]
* [[gl_smoothmodels]]
* [[gl_subdivide_size]]
* [[gl_texsort]]
* [[gl_texturemode]]
* [[gl_triplebuffer]]
* [[gl_ztrick]]
* [[host_framerate]]
* [[host_speeds]]
* [[hostname]]
* [[joyadvanced]]
* [[joyadvaxisr]]
* [[joyadvaxisu]]
* [[joyadvaxisv]]
* [[joyadvaxisx]]
* [[joyadvaxisy]]
* [[joyadvaxisz]]
* [[joyforwardsensitivity]]
* [[joyforwardthreshold]]
* [[joyname]]
* [[joypitchsensitivity]]
* [[joypitchthreshold]]
* [[joysidesensitivity]]
* [[joysidethreshold]]
* [[joystick]]
* [[joywwhack1]]
* [[joywwhack2]]
* [[joyyawsensitivity]]
* [[joyyawthreshold]]
* [[lcd_x]]
* [[lcd_yaw]]
* [[loadas8bit]]
* [[lookspring]]
* [[lookstrafe]]
* [[m_filter]]
* [[m_forward]]
* [[m_pitch]]
* [[m_side]]
* [[m_yaw]]
* [[maxplayers]]
* [[net_messagetimeout]]
* [[noexit]]
* [[nomonsters]]
* [[nosound]]
* [[pausable]]
* [[port]]
* [[precache]]
* [[r_aliastransadj]]
* [[r_aliastransbase]]
* [[r_ambient]]
* [[r_clearcolor]]
* [[r_drawentities]]
* [[r_drawflat]]
* [[r_draworder]]
* [[r_drawviewmodel]]
* [[r_dspeeds]]
* [[r_dynamic]]
* [[r_fullbright]]
* [[r_graphheight]]
* [[r_maxedges]]
* [[r_lightmap]]
* [[r_maxsurfs]]
* [[r_mirroralpha]]
* [[r_norefresh]]
* [[r_novis]]
* [[r_numedges]]
* [[r_numsurfs]]
* [[r_polymodelstats]]
* [[r_reportedgeout]]
* [[r_reportsurfout]]
* [[r_shadows]]
* [[r_speeds]]
* [[r_timegraph]]
* [[r_wateralpha]]
* [[r_waterwarp]]
* [[registered]]
* [[samelevel]]
* [[saved1]]
* [[saved2]]
* [[saved3]]
* [[saved4]]
* [[savedgamecfg]]
* [[scr_centertime]]
* [[scr_conspeed]]
* [[scr_ofsx]]
* [[scr_ofsy]]
* [[scr_ofsz]]
* [[scr_printspeed]]
* [[scratch1]]
* [[scratch2]]
* [[scratch3]]
* [[scratch4]]
* [[sensitivity]]
* [[serverprofile]]
* [[showpause]]
* [[showram]]
* [[showturtle]]
* [[skill]]
* [[snd_noextraupdate]]
* [[snd_show]]
* [[sv_accelerate]]
* [[sv_aim]]
* [[sv_friction]]
* [[sv_gravity]]
* [[sv_idealpitchscale]]
* [[sv_maxspeed]]
* [[sv_maxvelocity]]
* [[sv_nostep]]
* [[sv_stopspeed]]
* [[sys_ticrate]]
* [[teamplay]]
* [[temp1]]
* [[timelimit]]
* [[v_centermove]]
* [[v_centerspeed]]
* [[v_idlescale]]
* [[v_ipitch_cycle]]
* [[v_ipitch_level]]
* [[v_iroll_cycle]]
* [[v_iroll_level]]
* [[v_iyaw_cycle]]
* [[v_iyaw_level]]
* [[v_kickpitch]]
* [[v_kickroll]]
* [[v_kicktime]]
* [[vid_config_x]]
* [[vid_config_y]]
* [[vid_fullscreen_mode]]
* [[vid_mode]]
* [[vid_nopageflip]]
* [[vid_stretch_by_2]]
* [[vid_wait]]
* [[vid_window_x]]
* [[vid_window_y]]
* [[vid_windowed_mode]]
* [[viewsize]]
* [[volume]]</text>
      <sha1>o12fymz8smg3njin7x7kw055c0lnegm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>56</id>
      <parentid>52</parentid>
      <timestamp>2007-10-30T18:10:57Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="2119">* [[+attack]]
* [[+back]]
* [[+forward]]
* [[+jump]]
* [[+klook]]
* [[+left]]
* [[+lookdown]]
* [[+lookup]]
* [[+mlook]]
* [[+movedown]]
* [[+moveleft]]
* [[+moveright]]
* [[+moveup]]
* [[+right]]
* [[+showscores]]
* [[+speed]]
* [[+strafe]]
* [[+use]]
* [[-attack]]
* [[-back]]
* [[-forward]]
* [[-jump]]
* [[-klook]]
* [[-left]]
* [[-lookdown]]
* [[-lookdown]]
* [[-lookup]]
* [[-mlook]]
* [[-movedown]]
* [[-moveleft]]
* [[-moveright]]
* [[-moveup]]
* [[-right]]
* [[-showscores]]
* [[-speed]]
* [[-strafe]]
* [[-use]]
* [[alias]]
* [[ban]]
* [[begin]]
* [[bf]]
* [[bind]]
* [[cd]]
* [[centerview]]
* [[changelevel]]
* [[clear]]
* [[cmd]]
* [[color]]
* [[connect]]
* [[demos]]
* [[disconnect]]
* [[echo]]
* [[edict (console command)|edict]]
* [[edictcount]]
* [[edicts]]
* [[entities]]
* [[envmap]]
* [[exec]]
* [[flush]]
* [[fly]]
* [[force_centerview]]
* [[give]]
* [[god]]
* [[help]]
* [[impulse]]
* [[joyadvancedupdate]]
* [[kick]]
* [[kill]]
* [[listen]]
* [[load]]
* [[map]]
* [[mcache]]
* [[menu_keys]]
* [[menu_load]]
* [[menu_main]]
* [[menu_multiplayer]]
* [[menu_options]]
* [[menu_quit]]
* [[menu_save]]
* [[menu_setup]]
* [[menu_singleplayer]]
* [[menu_video]]
* [[messagemode]]
* [[messagemode2]]
* [[name]]
* [[net_stats]]
* [[noclip]]
* [[notarget]]
* [[path]]
* [[pause]]
* [[ping]]
* [[play]]
* [[playdemo]]
* [[playvol]]
* [[pointfile]]
* [[prespawn]]
* [[profile]]
* [[quit]]
* [[reconnect]]
* [[record]]
* [[restart]]
* [[save]]
* [[say]]
* [[say_team]]
* [[screenshot]]
* [[sizedown]]
* [[sizeup]]
* [[slist]]
* [[soundinfo]]
* [[soundlist]]
* [[spawn (console command)|spawn]]
* [[startdemos]]
* [[status]]
* [[stop]]
* [[stopdemo]]
* [[stopsound]]
* [[stuffcmds]]
* [[tell]]
* [[test]]
* [[test2]]
* [[timedemo]]
* [[timerefresh]]
* [[toggleconsole]]
* [[togglemenu]]
* [[unbind]]
* [[unbindall]]
* [[v_cshift]]
* [[version]]
* [[vid_describecurrentmode]]
* [[vid_describemode]]
* [[vid_describemodes]]
* [[vid_forcemode]]
* [[vid_fullscreen]]
* [[vid_minimize]]
* [[vid_nummodes]]
* [[vid_testmode]]
* [[vid_windowed]]
* [[viewframe]]
* [[viewmodel]]
* [[viewnext]]
* [[viewprev]]
* [[wait]]</text>
      <sha1>e50b3zl36zlqbpjwl4ldxmbcfg5gvcj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>99</id>
      <parentid>56</parentid>
      <timestamp>2007-10-30T19:57:57Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <comment>[[Console commands]] moved to [[List of console commands]]</comment>
      <text xml:space="preserve" bytes="2119">* [[+attack]]
* [[+back]]
* [[+forward]]
* [[+jump]]
* [[+klook]]
* [[+left]]
* [[+lookdown]]
* [[+lookup]]
* [[+mlook]]
* [[+movedown]]
* [[+moveleft]]
* [[+moveright]]
* [[+moveup]]
* [[+right]]
* [[+showscores]]
* [[+speed]]
* [[+strafe]]
* [[+use]]
* [[-attack]]
* [[-back]]
* [[-forward]]
* [[-jump]]
* [[-klook]]
* [[-left]]
* [[-lookdown]]
* [[-lookdown]]
* [[-lookup]]
* [[-mlook]]
* [[-movedown]]
* [[-moveleft]]
* [[-moveright]]
* [[-moveup]]
* [[-right]]
* [[-showscores]]
* [[-speed]]
* [[-strafe]]
* [[-use]]
* [[alias]]
* [[ban]]
* [[begin]]
* [[bf]]
* [[bind]]
* [[cd]]
* [[centerview]]
* [[changelevel]]
* [[clear]]
* [[cmd]]
* [[color]]
* [[connect]]
* [[demos]]
* [[disconnect]]
* [[echo]]
* [[edict (console command)|edict]]
* [[edictcount]]
* [[edicts]]
* [[entities]]
* [[envmap]]
* [[exec]]
* [[flush]]
* [[fly]]
* [[force_centerview]]
* [[give]]
* [[god]]
* [[help]]
* [[impulse]]
* [[joyadvancedupdate]]
* [[kick]]
* [[kill]]
* [[listen]]
* [[load]]
* [[map]]
* [[mcache]]
* [[menu_keys]]
* [[menu_load]]
* [[menu_main]]
* [[menu_multiplayer]]
* [[menu_options]]
* [[menu_quit]]
* [[menu_save]]
* [[menu_setup]]
* [[menu_singleplayer]]
* [[menu_video]]
* [[messagemode]]
* [[messagemode2]]
* [[name]]
* [[net_stats]]
* [[noclip]]
* [[notarget]]
* [[path]]
* [[pause]]
* [[ping]]
* [[play]]
* [[playdemo]]
* [[playvol]]
* [[pointfile]]
* [[prespawn]]
* [[profile]]
* [[quit]]
* [[reconnect]]
* [[record]]
* [[restart]]
* [[save]]
* [[say]]
* [[say_team]]
* [[screenshot]]
* [[sizedown]]
* [[sizeup]]
* [[slist]]
* [[soundinfo]]
* [[soundlist]]
* [[spawn (console command)|spawn]]
* [[startdemos]]
* [[status]]
* [[stop]]
* [[stopdemo]]
* [[stopsound]]
* [[stuffcmds]]
* [[tell]]
* [[test]]
* [[test2]]
* [[timedemo]]
* [[timerefresh]]
* [[toggleconsole]]
* [[togglemenu]]
* [[unbind]]
* [[unbindall]]
* [[v_cshift]]
* [[version]]
* [[vid_describecurrentmode]]
* [[vid_describemode]]
* [[vid_describemodes]]
* [[vid_forcemode]]
* [[vid_fullscreen]]
* [[vid_minimize]]
* [[vid_nummodes]]
* [[vid_testmode]]
* [[vid_windowed]]
* [[viewframe]]
* [[viewmodel]]
* [[viewnext]]
* [[viewprev]]
* [[wait]]</text>
      <sha1>e50b3zl36zlqbpjwl4ldxmbcfg5gvcj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>165</id>
      <parentid>99</parentid>
      <timestamp>2007-10-30T23:49:53Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2132">* [[+attack]]
* [[+back]]
* [[+forward]]
* [[+jump]]
* [[+klook]]
* [[+left]]
* [[+lookdown]]
* [[+lookup]]
* [[+mlook]]
* [[+movedown]]
* [[+moveleft]]
* [[+moveright]]
* [[+moveup]]
* [[+right]]
* [[+showscores]]
* [[+speed]]
* [[+strafe]]
* [[+use]]
* [[-attack]]
* [[-back]]
* [[-forward]]
* [[-jump]]
* [[-klook]]
* [[-left]]
* [[-lookdown]]
* [[-lookdown]]
* [[-lookup]]
* [[-mlook]]
* [[-movedown]]
* [[-moveleft]]
* [[-moveright]]
* [[-moveup]]
* [[-right]]
* [[-showscores]]
* [[-speed]]
* [[-strafe]]
* [[-use]]
* [[alias]]
* [[ban]]
* [[begin]]
* [[bf]]
* [[bind]]
* [[cd]]
* [[centerview]]
* [[changelevel]]
* [[clear]]
* [[cmd]]
* [[color]]
* [[connect]]
* [[demos]]
* [[disconnect]]
* [[echo]]
* [[edict (console command)|edict]]
* [[edictcount]]
* [[edicts]]
* [[entities]]
* [[envmap]]
* [[exec]]
* [[flush]]
* [[fly]]
* [[force_centerview]]
* [[give]]
* [[god]]
* [[help]]
* [[impulse]]
* [[joyadvancedupdate]]
* [[kick]]
* [[kill]]
* [[listen]]
* [[load]]
* [[map]]
* [[mcache]]
* [[menu_keys]]
* [[menu_load]]
* [[menu_main]]
* [[menu_multiplayer]]
* [[menu_options]]
* [[menu_quit]]
* [[menu_save]]
* [[menu_setup]]
* [[menu_singleplayer]]
* [[menu_video]]
* [[messagemode]]
* [[messagemode2]]
* [[name]]
* [[net_stats]]
* [[noclip]]
* [[notarget]]
* [[path]]
* [[pause]]
* [[ping]]
* [[play]]
* [[playdemo]]
* [[playvol]]
* [[pointfile]]
* [[prespawn]]
* [[profile]]
* [[quit]]
* [[reconnect]]
* [[record]]
* [[restart]]
* [[save]]
* [[say]]
* [[say_team]]
* [[screenshot]]
* [[sizedown]]
* [[sizeup]]
* [[slist]]
* [[soundinfo]]
* [[soundlist]]
* [[spawn (console command)|spawn]]
* [[startdemos]]
* [[status]]
* [[stop]]
* [[stopdemo]]
* [[stopsound]]
* [[stuffcmds]]
* [[tell]]
* [[test]]
* [[test2]]
* [[timedemo]]
* [[timerefresh]]
* [[toggleconsole]]
* [[togglemenu]]
* [[unbind]]
* [[unbindall]]
* [[v_cshift]]
* [[version]]
* [[vid_describecurrentmode]]
* [[vid_describemode]]
* [[vid_describemodes]]
* [[vid_forcemode]]
* [[vid_fullscreen]]
* [[vid_minimize]]
* [[vid_nummodes]]
* [[vid_testmode]]
* [[vid_windowed]]
* [[viewframe]]
* [[viewmodel]]
* [[viewnext]]
* [[viewprev]]
* [[wait]]

{{Console}}</text>
      <sha1>amqbkod5u8uhncaigr81942xvy4ui0n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>166</id>
      <parentid>165</parentid>
      <timestamp>2007-10-30T23:50:21Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2149">* [[+attack]]
* [[+back]]
* [[+forward]]
* [[+jump]]
* [[+klook]]
* [[+left]]
* [[+lookdown]]
* [[+lookup]]
* [[+mlook]]
* [[+movedown]]
* [[+moveleft]]
* [[+moveright]]
* [[+moveup]]
* [[+right]]
* [[+showscores]]
* [[+speed]]
* [[+strafe]]
* [[+use]]
* [[-attack]]
* [[-back]]
* [[-forward]]
* [[-jump]]
* [[-klook]]
* [[-left]]
* [[-lookdown]]
* [[-lookdown]]
* [[-lookup]]
* [[-mlook]]
* [[-movedown]]
* [[-moveleft]]
* [[-moveright]]
* [[-moveup]]
* [[-right]]
* [[-showscores]]
* [[-speed]]
* [[-strafe]]
* [[-use]]
* [[alias]]
* [[ban]]
* [[begin]]
* [[bf]]
* [[bind]]
* [[cd]]
* [[centerview]]
* [[changelevel]]
* [[clear]]
* [[cmd]]
* [[color]]
* [[connect]]
* [[demos]]
* [[disconnect]]
* [[echo]]
* [[edict (console command)|edict]]
* [[edictcount]]
* [[edicts]]
* [[entities]]
* [[envmap]]
* [[exec]]
* [[flush]]
* [[fly]]
* [[force_centerview]]
* [[give]]
* [[god]]
* [[help]]
* [[impulse]]
* [[joyadvancedupdate]]
* [[kick]]
* [[kill]]
* [[listen]]
* [[load]]
* [[map]]
* [[maxplayers]]
* [[mcache]]
* [[menu_keys]]
* [[menu_load]]
* [[menu_main]]
* [[menu_multiplayer]]
* [[menu_options]]
* [[menu_quit]]
* [[menu_save]]
* [[menu_setup]]
* [[menu_singleplayer]]
* [[menu_video]]
* [[messagemode]]
* [[messagemode2]]
* [[name]]
* [[net_stats]]
* [[noclip]]
* [[notarget]]
* [[path]]
* [[pause]]
* [[ping]]
* [[play]]
* [[playdemo]]
* [[playvol]]
* [[pointfile]]
* [[prespawn]]
* [[profile]]
* [[quit]]
* [[reconnect]]
* [[record]]
* [[restart]]
* [[save]]
* [[say]]
* [[say_team]]
* [[screenshot]]
* [[sizedown]]
* [[sizeup]]
* [[slist]]
* [[soundinfo]]
* [[soundlist]]
* [[spawn (console command)|spawn]]
* [[startdemos]]
* [[status]]
* [[stop]]
* [[stopdemo]]
* [[stopsound]]
* [[stuffcmds]]
* [[tell]]
* [[test]]
* [[test2]]
* [[timedemo]]
* [[timerefresh]]
* [[toggleconsole]]
* [[togglemenu]]
* [[unbind]]
* [[unbindall]]
* [[v_cshift]]
* [[version]]
* [[vid_describecurrentmode]]
* [[vid_describemode]]
* [[vid_describemodes]]
* [[vid_forcemode]]
* [[vid_fullscreen]]
* [[vid_minimize]]
* [[vid_nummodes]]
* [[vid_testmode]]
* [[vid_windowed]]
* [[viewframe]]
* [[viewmodel]]
* [[viewnext]]
* [[viewprev]]
* [[wait]]

{{Console}}</text>
      <sha1>pco4urudzuv6mt1evtj5h5ue00dq95o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>List of console variables</title>
    <ns>0</ns>
    <id>46</id>
    <revision>
      <id>55</id>
      <timestamp>2007-10-30T18:10:12Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: * [[_cl_color]] * [[_cl_name]] * [[_config_com_baud]] * [[_config_com_irq]] * [[_config_com_modem]] * [[_config_com_port]] * [[_config_modem_clear]] * [[_config_modem_dialtype]] * [[_confi...</comment>
      <text xml:space="preserve" bytes="3672">* [[_cl_color]]
* [[_cl_name]]
* [[_config_com_baud]]
* [[_config_com_irq]]
* [[_config_com_modem]]
* [[_config_com_port]]
* [[_config_modem_clear]]
* [[_config_modem_dialtype]]
* [[_config_modem_hangup]]
* [[_config_modem_init]]
* [[_snd_mixahead]]
* [[_vid_default_mode]]
* [[_vid_default_mode_win]]
* [[_vid_wait_override]]
* [[_windowed_mouse]]
* [[ambient_fade]]
* [[ambient_level]]
* [[bgmbuffer]]
* [[bgmvolume]]
* [[block_switch]]
* [[chase_active]]
* [[chase_back]]
* [[chase_right]]
* [[chase_up]]
* [[cl_anglespeedkey]]
* [[cl_backspeed]]
* [[cl_bob]]
* [[cl_bobcycle]]
* [[cl_bobup]]
* [[cl_forwardspeed]]
* [[cl_movespeedkey]]
* [[cl_nolerp]]
* [[cl_pitchspeed]]
* [[cl_rollangle]]
* [[cl_rollspeed]]
* [[cl_shownet]]
* [[cl_sidespeed]]
* [[cl_upspeed]]
* [[cl_yawspeed]]
* [[cmdline]]
* [[con_notifytime]]
* [[coop]]
* [[crosshair]]
* [[d_mipcap]]
* [[d_mipscale]]
* [[deathmatch]]
* [[developer]]
* [[edgefriction]]
* [[fov]]
* [[fraglimit]]
* [[gamecfg]]
* [[gamma]]
* [[gl_affinemodels]]
* [[gl_clear]]
* [[gl_cull]]
* [[gl_finish]]
* [[gl_flashblend]]
* [[gl_keeptjunctions]]
* [[gl_max_size]]
* [[gl_nobind]]
* [[gl_nocolors]]
* [[gl_picmip]]
* [[gl_playermip]]
* [[gl_polyblend]]
* [[gl_reporttjunctions]]
* [[gl_smoothmodels]]
* [[gl_subdivide_size]]
* [[gl_texsort]]
* [[gl_texturemode]]
* [[gl_triplebuffer]]
* [[gl_ztrick]]
* [[host_framerate]]
* [[host_speeds]]
* [[hostname]]
* [[joyadvanced]]
* [[joyadvaxisr]]
* [[joyadvaxisu]]
* [[joyadvaxisv]]
* [[joyadvaxisx]]
* [[joyadvaxisy]]
* [[joyadvaxisz]]
* [[joyforwardsensitivity]]
* [[joyforwardthreshold]]
* [[joyname]]
* [[joypitchsensitivity]]
* [[joypitchthreshold]]
* [[joysidesensitivity]]
* [[joysidethreshold]]
* [[joystick]]
* [[joywwhack1]]
* [[joywwhack2]]
* [[joyyawsensitivity]]
* [[joyyawthreshold]]
* [[lcd_x]]
* [[lcd_yaw]]
* [[loadas8bit]]
* [[lookspring]]
* [[lookstrafe]]
* [[m_filter]]
* [[m_forward]]
* [[m_pitch]]
* [[m_side]]
* [[m_yaw]]
* [[maxplayers]]
* [[net_messagetimeout]]
* [[noexit]]
* [[nomonsters]]
* [[nosound]]
* [[pausable]]
* [[port]]
* [[precache]]
* [[r_aliastransadj]]
* [[r_aliastransbase]]
* [[r_ambient]]
* [[r_clearcolor]]
* [[r_drawentities]]
* [[r_drawflat]]
* [[r_draworder]]
* [[r_drawviewmodel]]
* [[r_dspeeds]]
* [[r_dynamic]]
* [[r_fullbright]]
* [[r_graphheight]]
* [[r_maxedges]]
* [[r_lightmap]]
* [[r_maxsurfs]]
* [[r_mirroralpha]]
* [[r_norefresh]]
* [[r_novis]]
* [[r_numedges]]
* [[r_numsurfs]]
* [[r_polymodelstats]]
* [[r_reportedgeout]]
* [[r_reportsurfout]]
* [[r_shadows]]
* [[r_speeds]]
* [[r_timegraph]]
* [[r_wateralpha]]
* [[r_waterwarp]]
* [[registered]]
* [[samelevel]]
* [[saved1]]
* [[saved2]]
* [[saved3]]
* [[saved4]]
* [[savedgamecfg]]
* [[scr_centertime]]
* [[scr_conspeed]]
* [[scr_ofsx]]
* [[scr_ofsy]]
* [[scr_ofsz]]
* [[scr_printspeed]]
* [[scratch1]]
* [[scratch2]]
* [[scratch3]]
* [[scratch4]]
* [[sensitivity]]
* [[serverprofile]]
* [[showpause]]
* [[showram]]
* [[showturtle]]
* [[skill]]
* [[snd_noextraupdate]]
* [[snd_show]]
* [[sv_accelerate]]
* [[sv_aim]]
* [[sv_friction]]
* [[sv_gravity]]
* [[sv_idealpitchscale]]
* [[sv_maxspeed]]
* [[sv_maxvelocity]]
* [[sv_nostep]]
* [[sv_stopspeed]]
* [[sys_ticrate]]
* [[teamplay]]
* [[temp1]]
* [[timelimit]]
* [[v_centermove]]
* [[v_centerspeed]]
* [[v_idlescale]]
* [[v_ipitch_cycle]]
* [[v_ipitch_level]]
* [[v_iroll_cycle]]
* [[v_iroll_level]]
* [[v_iyaw_cycle]]
* [[v_iyaw_level]]
* [[v_kickpitch]]
* [[v_kickroll]]
* [[v_kicktime]]
* [[vid_config_x]]
* [[vid_config_y]]
* [[vid_fullscreen_mode]]
* [[vid_mode]]
* [[vid_nopageflip]]
* [[vid_stretch_by_2]]
* [[vid_wait]]
* [[vid_window_x]]
* [[vid_window_y]]
* [[vid_windowed_mode]]
* [[viewsize]]
* [[volume]]</text>
      <sha1>o12fymz8smg3njin7x7kw055c0lnegm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>96</id>
      <parentid>55</parentid>
      <timestamp>2007-10-30T19:57:15Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <comment>[[Console variables]] moved to [[List of console variables]]</comment>
      <text xml:space="preserve" bytes="3672">* [[_cl_color]]
* [[_cl_name]]
* [[_config_com_baud]]
* [[_config_com_irq]]
* [[_config_com_modem]]
* [[_config_com_port]]
* [[_config_modem_clear]]
* [[_config_modem_dialtype]]
* [[_config_modem_hangup]]
* [[_config_modem_init]]
* [[_snd_mixahead]]
* [[_vid_default_mode]]
* [[_vid_default_mode_win]]
* [[_vid_wait_override]]
* [[_windowed_mouse]]
* [[ambient_fade]]
* [[ambient_level]]
* [[bgmbuffer]]
* [[bgmvolume]]
* [[block_switch]]
* [[chase_active]]
* [[chase_back]]
* [[chase_right]]
* [[chase_up]]
* [[cl_anglespeedkey]]
* [[cl_backspeed]]
* [[cl_bob]]
* [[cl_bobcycle]]
* [[cl_bobup]]
* [[cl_forwardspeed]]
* [[cl_movespeedkey]]
* [[cl_nolerp]]
* [[cl_pitchspeed]]
* [[cl_rollangle]]
* [[cl_rollspeed]]
* [[cl_shownet]]
* [[cl_sidespeed]]
* [[cl_upspeed]]
* [[cl_yawspeed]]
* [[cmdline]]
* [[con_notifytime]]
* [[coop]]
* [[crosshair]]
* [[d_mipcap]]
* [[d_mipscale]]
* [[deathmatch]]
* [[developer]]
* [[edgefriction]]
* [[fov]]
* [[fraglimit]]
* [[gamecfg]]
* [[gamma]]
* [[gl_affinemodels]]
* [[gl_clear]]
* [[gl_cull]]
* [[gl_finish]]
* [[gl_flashblend]]
* [[gl_keeptjunctions]]
* [[gl_max_size]]
* [[gl_nobind]]
* [[gl_nocolors]]
* [[gl_picmip]]
* [[gl_playermip]]
* [[gl_polyblend]]
* [[gl_reporttjunctions]]
* [[gl_smoothmodels]]
* [[gl_subdivide_size]]
* [[gl_texsort]]
* [[gl_texturemode]]
* [[gl_triplebuffer]]
* [[gl_ztrick]]
* [[host_framerate]]
* [[host_speeds]]
* [[hostname]]
* [[joyadvanced]]
* [[joyadvaxisr]]
* [[joyadvaxisu]]
* [[joyadvaxisv]]
* [[joyadvaxisx]]
* [[joyadvaxisy]]
* [[joyadvaxisz]]
* [[joyforwardsensitivity]]
* [[joyforwardthreshold]]
* [[joyname]]
* [[joypitchsensitivity]]
* [[joypitchthreshold]]
* [[joysidesensitivity]]
* [[joysidethreshold]]
* [[joystick]]
* [[joywwhack1]]
* [[joywwhack2]]
* [[joyyawsensitivity]]
* [[joyyawthreshold]]
* [[lcd_x]]
* [[lcd_yaw]]
* [[loadas8bit]]
* [[lookspring]]
* [[lookstrafe]]
* [[m_filter]]
* [[m_forward]]
* [[m_pitch]]
* [[m_side]]
* [[m_yaw]]
* [[maxplayers]]
* [[net_messagetimeout]]
* [[noexit]]
* [[nomonsters]]
* [[nosound]]
* [[pausable]]
* [[port]]
* [[precache]]
* [[r_aliastransadj]]
* [[r_aliastransbase]]
* [[r_ambient]]
* [[r_clearcolor]]
* [[r_drawentities]]
* [[r_drawflat]]
* [[r_draworder]]
* [[r_drawviewmodel]]
* [[r_dspeeds]]
* [[r_dynamic]]
* [[r_fullbright]]
* [[r_graphheight]]
* [[r_maxedges]]
* [[r_lightmap]]
* [[r_maxsurfs]]
* [[r_mirroralpha]]
* [[r_norefresh]]
* [[r_novis]]
* [[r_numedges]]
* [[r_numsurfs]]
* [[r_polymodelstats]]
* [[r_reportedgeout]]
* [[r_reportsurfout]]
* [[r_shadows]]
* [[r_speeds]]
* [[r_timegraph]]
* [[r_wateralpha]]
* [[r_waterwarp]]
* [[registered]]
* [[samelevel]]
* [[saved1]]
* [[saved2]]
* [[saved3]]
* [[saved4]]
* [[savedgamecfg]]
* [[scr_centertime]]
* [[scr_conspeed]]
* [[scr_ofsx]]
* [[scr_ofsy]]
* [[scr_ofsz]]
* [[scr_printspeed]]
* [[scratch1]]
* [[scratch2]]
* [[scratch3]]
* [[scratch4]]
* [[sensitivity]]
* [[serverprofile]]
* [[showpause]]
* [[showram]]
* [[showturtle]]
* [[skill]]
* [[snd_noextraupdate]]
* [[snd_show]]
* [[sv_accelerate]]
* [[sv_aim]]
* [[sv_friction]]
* [[sv_gravity]]
* [[sv_idealpitchscale]]
* [[sv_maxspeed]]
* [[sv_maxvelocity]]
* [[sv_nostep]]
* [[sv_stopspeed]]
* [[sys_ticrate]]
* [[teamplay]]
* [[temp1]]
* [[timelimit]]
* [[v_centermove]]
* [[v_centerspeed]]
* [[v_idlescale]]
* [[v_ipitch_cycle]]
* [[v_ipitch_level]]
* [[v_iroll_cycle]]
* [[v_iroll_level]]
* [[v_iyaw_cycle]]
* [[v_iyaw_level]]
* [[v_kickpitch]]
* [[v_kickroll]]
* [[v_kicktime]]
* [[vid_config_x]]
* [[vid_config_y]]
* [[vid_fullscreen_mode]]
* [[vid_mode]]
* [[vid_nopageflip]]
* [[vid_stretch_by_2]]
* [[vid_wait]]
* [[vid_window_x]]
* [[vid_window_y]]
* [[vid_windowed_mode]]
* [[viewsize]]
* [[volume]]</text>
      <sha1>o12fymz8smg3njin7x7kw055c0lnegm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>164</id>
      <parentid>96</parentid>
      <timestamp>2007-10-30T23:49:37Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>maxplayers is not a cvar</comment>
      <text xml:space="preserve" bytes="3655">* [[_cl_color]]
* [[_cl_name]]
* [[_config_com_baud]]
* [[_config_com_irq]]
* [[_config_com_modem]]
* [[_config_com_port]]
* [[_config_modem_clear]]
* [[_config_modem_dialtype]]
* [[_config_modem_hangup]]
* [[_config_modem_init]]
* [[_snd_mixahead]]
* [[_vid_default_mode]]
* [[_vid_default_mode_win]]
* [[_vid_wait_override]]
* [[_windowed_mouse]]
* [[ambient_fade]]
* [[ambient_level]]
* [[bgmbuffer]]
* [[bgmvolume]]
* [[block_switch]]
* [[chase_active]]
* [[chase_back]]
* [[chase_right]]
* [[chase_up]]
* [[cl_anglespeedkey]]
* [[cl_backspeed]]
* [[cl_bob]]
* [[cl_bobcycle]]
* [[cl_bobup]]
* [[cl_forwardspeed]]
* [[cl_movespeedkey]]
* [[cl_nolerp]]
* [[cl_pitchspeed]]
* [[cl_rollangle]]
* [[cl_rollspeed]]
* [[cl_shownet]]
* [[cl_sidespeed]]
* [[cl_upspeed]]
* [[cl_yawspeed]]
* [[cmdline]]
* [[con_notifytime]]
* [[coop]]
* [[crosshair]]
* [[d_mipcap]]
* [[d_mipscale]]
* [[deathmatch]]
* [[developer]]
* [[edgefriction]]
* [[fov]]
* [[fraglimit]]
* [[gamecfg]]
* [[gamma]]
* [[gl_affinemodels]]
* [[gl_clear]]
* [[gl_cull]]
* [[gl_finish]]
* [[gl_flashblend]]
* [[gl_keeptjunctions]]
* [[gl_max_size]]
* [[gl_nobind]]
* [[gl_nocolors]]
* [[gl_picmip]]
* [[gl_playermip]]
* [[gl_polyblend]]
* [[gl_reporttjunctions]]
* [[gl_smoothmodels]]
* [[gl_subdivide_size]]
* [[gl_texsort]]
* [[gl_texturemode]]
* [[gl_triplebuffer]]
* [[gl_ztrick]]
* [[host_framerate]]
* [[host_speeds]]
* [[hostname]]
* [[joyadvanced]]
* [[joyadvaxisr]]
* [[joyadvaxisu]]
* [[joyadvaxisv]]
* [[joyadvaxisx]]
* [[joyadvaxisy]]
* [[joyadvaxisz]]
* [[joyforwardsensitivity]]
* [[joyforwardthreshold]]
* [[joyname]]
* [[joypitchsensitivity]]
* [[joypitchthreshold]]
* [[joysidesensitivity]]
* [[joysidethreshold]]
* [[joystick]]
* [[joywwhack1]]
* [[joywwhack2]]
* [[joyyawsensitivity]]
* [[joyyawthreshold]]
* [[lcd_x]]
* [[lcd_yaw]]
* [[loadas8bit]]
* [[lookspring]]
* [[lookstrafe]]
* [[m_filter]]
* [[m_forward]]
* [[m_pitch]]
* [[m_side]]
* [[m_yaw]]
* [[net_messagetimeout]]
* [[noexit]]
* [[nomonsters]]
* [[nosound]]
* [[pausable]]
* [[port]]
* [[precache]]
* [[r_aliastransadj]]
* [[r_aliastransbase]]
* [[r_ambient]]
* [[r_clearcolor]]
* [[r_drawentities]]
* [[r_drawflat]]
* [[r_draworder]]
* [[r_drawviewmodel]]
* [[r_dspeeds]]
* [[r_dynamic]]
* [[r_fullbright]]
* [[r_graphheight]]
* [[r_maxedges]]
* [[r_lightmap]]
* [[r_maxsurfs]]
* [[r_mirroralpha]]
* [[r_norefresh]]
* [[r_novis]]
* [[r_numedges]]
* [[r_numsurfs]]
* [[r_polymodelstats]]
* [[r_reportedgeout]]
* [[r_reportsurfout]]
* [[r_shadows]]
* [[r_speeds]]
* [[r_timegraph]]
* [[r_wateralpha]]
* [[r_waterwarp]]
* [[registered]]
* [[samelevel]]
* [[saved1]]
* [[saved2]]
* [[saved3]]
* [[saved4]]
* [[savedgamecfg]]
* [[scr_centertime]]
* [[scr_conspeed]]
* [[scr_ofsx]]
* [[scr_ofsy]]
* [[scr_ofsz]]
* [[scr_printspeed]]
* [[scratch1]]
* [[scratch2]]
* [[scratch3]]
* [[scratch4]]
* [[sensitivity]]
* [[serverprofile]]
* [[showpause]]
* [[showram]]
* [[showturtle]]
* [[skill]]
* [[snd_noextraupdate]]
* [[snd_show]]
* [[sv_accelerate]]
* [[sv_aim]]
* [[sv_friction]]
* [[sv_gravity]]
* [[sv_idealpitchscale]]
* [[sv_maxspeed]]
* [[sv_maxvelocity]]
* [[sv_nostep]]
* [[sv_stopspeed]]
* [[sys_ticrate]]
* [[teamplay]]
* [[temp1]]
* [[timelimit]]
* [[v_centermove]]
* [[v_centerspeed]]
* [[v_idlescale]]
* [[v_ipitch_cycle]]
* [[v_ipitch_level]]
* [[v_iroll_cycle]]
* [[v_iroll_level]]
* [[v_iyaw_cycle]]
* [[v_iyaw_level]]
* [[v_kickpitch]]
* [[v_kickroll]]
* [[v_kicktime]]
* [[vid_config_x]]
* [[vid_config_y]]
* [[vid_fullscreen_mode]]
* [[vid_mode]]
* [[vid_nopageflip]]
* [[vid_stretch_by_2]]
* [[vid_wait]]
* [[vid_window_x]]
* [[vid_window_y]]
* [[vid_windowed_mode]]
* [[viewsize]]
* [[volume]]</text>
      <sha1>12b0xhwzdhh37dw3vqc3x724w5cya8t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>167</id>
      <parentid>164</parentid>
      <timestamp>2007-10-30T23:50:31Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="3668">* [[_cl_color]]
* [[_cl_name]]
* [[_config_com_baud]]
* [[_config_com_irq]]
* [[_config_com_modem]]
* [[_config_com_port]]
* [[_config_modem_clear]]
* [[_config_modem_dialtype]]
* [[_config_modem_hangup]]
* [[_config_modem_init]]
* [[_snd_mixahead]]
* [[_vid_default_mode]]
* [[_vid_default_mode_win]]
* [[_vid_wait_override]]
* [[_windowed_mouse]]
* [[ambient_fade]]
* [[ambient_level]]
* [[bgmbuffer]]
* [[bgmvolume]]
* [[block_switch]]
* [[chase_active]]
* [[chase_back]]
* [[chase_right]]
* [[chase_up]]
* [[cl_anglespeedkey]]
* [[cl_backspeed]]
* [[cl_bob]]
* [[cl_bobcycle]]
* [[cl_bobup]]
* [[cl_forwardspeed]]
* [[cl_movespeedkey]]
* [[cl_nolerp]]
* [[cl_pitchspeed]]
* [[cl_rollangle]]
* [[cl_rollspeed]]
* [[cl_shownet]]
* [[cl_sidespeed]]
* [[cl_upspeed]]
* [[cl_yawspeed]]
* [[cmdline]]
* [[con_notifytime]]
* [[coop]]
* [[crosshair]]
* [[d_mipcap]]
* [[d_mipscale]]
* [[deathmatch]]
* [[developer]]
* [[edgefriction]]
* [[fov]]
* [[fraglimit]]
* [[gamecfg]]
* [[gamma]]
* [[gl_affinemodels]]
* [[gl_clear]]
* [[gl_cull]]
* [[gl_finish]]
* [[gl_flashblend]]
* [[gl_keeptjunctions]]
* [[gl_max_size]]
* [[gl_nobind]]
* [[gl_nocolors]]
* [[gl_picmip]]
* [[gl_playermip]]
* [[gl_polyblend]]
* [[gl_reporttjunctions]]
* [[gl_smoothmodels]]
* [[gl_subdivide_size]]
* [[gl_texsort]]
* [[gl_texturemode]]
* [[gl_triplebuffer]]
* [[gl_ztrick]]
* [[host_framerate]]
* [[host_speeds]]
* [[hostname]]
* [[joyadvanced]]
* [[joyadvaxisr]]
* [[joyadvaxisu]]
* [[joyadvaxisv]]
* [[joyadvaxisx]]
* [[joyadvaxisy]]
* [[joyadvaxisz]]
* [[joyforwardsensitivity]]
* [[joyforwardthreshold]]
* [[joyname]]
* [[joypitchsensitivity]]
* [[joypitchthreshold]]
* [[joysidesensitivity]]
* [[joysidethreshold]]
* [[joystick]]
* [[joywwhack1]]
* [[joywwhack2]]
* [[joyyawsensitivity]]
* [[joyyawthreshold]]
* [[lcd_x]]
* [[lcd_yaw]]
* [[loadas8bit]]
* [[lookspring]]
* [[lookstrafe]]
* [[m_filter]]
* [[m_forward]]
* [[m_pitch]]
* [[m_side]]
* [[m_yaw]]
* [[net_messagetimeout]]
* [[noexit]]
* [[nomonsters]]
* [[nosound]]
* [[pausable]]
* [[port]]
* [[precache]]
* [[r_aliastransadj]]
* [[r_aliastransbase]]
* [[r_ambient]]
* [[r_clearcolor]]
* [[r_drawentities]]
* [[r_drawflat]]
* [[r_draworder]]
* [[r_drawviewmodel]]
* [[r_dspeeds]]
* [[r_dynamic]]
* [[r_fullbright]]
* [[r_graphheight]]
* [[r_maxedges]]
* [[r_lightmap]]
* [[r_maxsurfs]]
* [[r_mirroralpha]]
* [[r_norefresh]]
* [[r_novis]]
* [[r_numedges]]
* [[r_numsurfs]]
* [[r_polymodelstats]]
* [[r_reportedgeout]]
* [[r_reportsurfout]]
* [[r_shadows]]
* [[r_speeds]]
* [[r_timegraph]]
* [[r_wateralpha]]
* [[r_waterwarp]]
* [[registered]]
* [[samelevel]]
* [[saved1]]
* [[saved2]]
* [[saved3]]
* [[saved4]]
* [[savedgamecfg]]
* [[scr_centertime]]
* [[scr_conspeed]]
* [[scr_ofsx]]
* [[scr_ofsy]]
* [[scr_ofsz]]
* [[scr_printspeed]]
* [[scratch1]]
* [[scratch2]]
* [[scratch3]]
* [[scratch4]]
* [[sensitivity]]
* [[serverprofile]]
* [[showpause]]
* [[showram]]
* [[showturtle]]
* [[skill]]
* [[snd_noextraupdate]]
* [[snd_show]]
* [[sv_accelerate]]
* [[sv_aim]]
* [[sv_friction]]
* [[sv_gravity]]
* [[sv_idealpitchscale]]
* [[sv_maxspeed]]
* [[sv_maxvelocity]]
* [[sv_nostep]]
* [[sv_stopspeed]]
* [[sys_ticrate]]
* [[teamplay]]
* [[temp1]]
* [[timelimit]]
* [[v_centermove]]
* [[v_centerspeed]]
* [[v_idlescale]]
* [[v_ipitch_cycle]]
* [[v_ipitch_level]]
* [[v_iroll_cycle]]
* [[v_iroll_level]]
* [[v_iyaw_cycle]]
* [[v_iyaw_level]]
* [[v_kickpitch]]
* [[v_kickroll]]
* [[v_kicktime]]
* [[vid_config_x]]
* [[vid_config_y]]
* [[vid_fullscreen_mode]]
* [[vid_mode]]
* [[vid_nopageflip]]
* [[vid_stretch_by_2]]
* [[vid_wait]]
* [[vid_window_x]]
* [[vid_window_y]]
* [[vid_windowed_mode]]
* [[viewsize]]
* [[volume]]

{{Console}}</text>
      <sha1>gessb1ja2momm8zx0dhl483xr19b9mg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2784</id>
      <parentid>167</parentid>
      <timestamp>2013-04-07T09:17:41Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <minor/>
      <comment>r_showbboxes &amp; r_showtris added</comment>
      <text xml:space="preserve" bytes="3704">* [[_cl_color]]
* [[_cl_name]]
* [[_config_com_baud]]
* [[_config_com_irq]]
* [[_config_com_modem]]
* [[_config_com_port]]
* [[_config_modem_clear]]
* [[_config_modem_dialtype]]
* [[_config_modem_hangup]]
* [[_config_modem_init]]
* [[_snd_mixahead]]
* [[_vid_default_mode]]
* [[_vid_default_mode_win]]
* [[_vid_wait_override]]
* [[_windowed_mouse]]
* [[ambient_fade]]
* [[ambient_level]]
* [[bgmbuffer]]
* [[bgmvolume]]
* [[block_switch]]
* [[chase_active]]
* [[chase_back]]
* [[chase_right]]
* [[chase_up]]
* [[cl_anglespeedkey]]
* [[cl_backspeed]]
* [[cl_bob]]
* [[cl_bobcycle]]
* [[cl_bobup]]
* [[cl_forwardspeed]]
* [[cl_movespeedkey]]
* [[cl_nolerp]]
* [[cl_pitchspeed]]
* [[cl_rollangle]]
* [[cl_rollspeed]]
* [[cl_shownet]]
* [[cl_sidespeed]]
* [[cl_upspeed]]
* [[cl_yawspeed]]
* [[cmdline]]
* [[con_notifytime]]
* [[coop]]
* [[crosshair]]
* [[d_mipcap]]
* [[d_mipscale]]
* [[deathmatch]]
* [[developer]]
* [[edgefriction]]
* [[fov]]
* [[fraglimit]]
* [[gamecfg]]
* [[gamma]]
* [[gl_affinemodels]]
* [[gl_clear]]
* [[gl_cull]]
* [[gl_finish]]
* [[gl_flashblend]]
* [[gl_keeptjunctions]]
* [[gl_max_size]]
* [[gl_nobind]]
* [[gl_nocolors]]
* [[gl_picmip]]
* [[gl_playermip]]
* [[gl_polyblend]]
* [[gl_reporttjunctions]]
* [[gl_smoothmodels]]
* [[gl_subdivide_size]]
* [[gl_texsort]]
* [[gl_texturemode]]
* [[gl_triplebuffer]]
* [[gl_ztrick]]
* [[host_framerate]]
* [[host_speeds]]
* [[hostname]]
* [[joyadvanced]]
* [[joyadvaxisr]]
* [[joyadvaxisu]]
* [[joyadvaxisv]]
* [[joyadvaxisx]]
* [[joyadvaxisy]]
* [[joyadvaxisz]]
* [[joyforwardsensitivity]]
* [[joyforwardthreshold]]
* [[joyname]]
* [[joypitchsensitivity]]
* [[joypitchthreshold]]
* [[joysidesensitivity]]
* [[joysidethreshold]]
* [[joystick]]
* [[joywwhack1]]
* [[joywwhack2]]
* [[joyyawsensitivity]]
* [[joyyawthreshold]]
* [[lcd_x]]
* [[lcd_yaw]]
* [[loadas8bit]]
* [[lookspring]]
* [[lookstrafe]]
* [[m_filter]]
* [[m_forward]]
* [[m_pitch]]
* [[m_side]]
* [[m_yaw]]
* [[net_messagetimeout]]
* [[noexit]]
* [[nomonsters]]
* [[nosound]]
* [[pausable]]
* [[port]]
* [[precache]]
* [[r_aliastransadj]]
* [[r_aliastransbase]]
* [[r_ambient]]
* [[r_clearcolor]]
* [[r_drawentities]]
* [[r_drawflat]]
* [[r_draworder]]
* [[r_drawviewmodel]]
* [[r_dspeeds]]
* [[r_dynamic]]
* [[r_fullbright]]
* [[r_graphheight]]
* [[r_maxedges]]
* [[r_lightmap]]
* [[r_maxsurfs]]
* [[r_mirroralpha]]
* [[r_norefresh]]
* [[r_novis]]
* [[r_numedges]]
* [[r_numsurfs]]
* [[r_polymodelstats]]
* [[r_reportedgeout]]
* [[r_reportsurfout]]
* [[r_shadows]]
* [[r_showbboxes]]
* [[r_showtris]]
* [[r_speeds]]
* [[r_timegraph]]
* [[r_wateralpha]]
* [[r_waterwarp]]
* [[registered]]
* [[samelevel]]
* [[saved1]]
* [[saved2]]
* [[saved3]]
* [[saved4]]
* [[savedgamecfg]]
* [[scr_centertime]]
* [[scr_conspeed]]
* [[scr_ofsx]]
* [[scr_ofsy]]
* [[scr_ofsz]]
* [[scr_printspeed]]
* [[scratch1]]
* [[scratch2]]
* [[scratch3]]
* [[scratch4]]
* [[sensitivity]]
* [[serverprofile]]
* [[showpause]]
* [[showram]]
* [[showturtle]]
* [[skill]]
* [[snd_noextraupdate]]
* [[snd_show]]
* [[sv_accelerate]]
* [[sv_aim]]
* [[sv_friction]]
* [[sv_gravity]]
* [[sv_idealpitchscale]]
* [[sv_maxspeed]]
* [[sv_maxvelocity]]
* [[sv_nostep]]
* [[sv_stopspeed]]
* [[sys_ticrate]]
* [[teamplay]]
* [[temp1]]
* [[timelimit]]
* [[v_centermove]]
* [[v_centerspeed]]
* [[v_idlescale]]
* [[v_ipitch_cycle]]
* [[v_ipitch_level]]
* [[v_iroll_cycle]]
* [[v_iroll_level]]
* [[v_iyaw_cycle]]
* [[v_iyaw_level]]
* [[v_kickpitch]]
* [[v_kickroll]]
* [[v_kicktime]]
* [[vid_config_x]]
* [[vid_config_y]]
* [[vid_fullscreen_mode]]
* [[vid_mode]]
* [[vid_nopageflip]]
* [[vid_stretch_by_2]]
* [[vid_wait]]
* [[vid_window_x]]
* [[vid_window_y]]
* [[vid_windowed_mode]]
* [[viewsize]]
* [[volume]]

{{Console}}</text>
      <sha1>6an8tpqgi43j223irynmhgf5iyrogp9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3024</id>
      <parentid>2784</parentid>
      <timestamp>2013-11-23T21:57:26Z</timestamp>
      <contributor>
        <username>FifthElephant</username>
        <id>49</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="3725">* [[_cl_color]]
* [[_cl_name]]
* [[_config_com_baud]]
* [[_config_com_irq]]
* [[_config_com_modem]]
* [[_config_com_port]]
* [[_config_modem_clear]]
* [[_config_modem_dialtype]]
* [[_config_modem_hangup]]
* [[_config_modem_init]]
* [[_snd_mixahead]]
* [[_vid_default_mode]]
* [[_vid_default_mode_win]]
* [[_vid_wait_override]]
* [[_windowed_mouse]]
* [[ambient_fade]]
* [[ambient_level]]
* [[bgmbuffer]]
* [[bgmvolume]]
* [[block_switch]]
* [[chase_active]]
* [[chase_back]]
* [[chase_right]]
* [[chase_up]]
* [[cl_anglespeedkey]]
* [[cl_backspeed]]
* [[cl_bob]]
* [[cl_bobcycle]]
* [[cl_bobup]]
* [[cl_forwardspeed]]
* [[cl_movespeedkey]]
* [[cl_nolerp]]
* [[cl_pitchspeed]]
* [[cl_rollangle]]
* [[cl_rollspeed]]
* [[cl_shownet]]
* [[cl_sidespeed]]
* [[cl_upspeed]]
* [[cl_yawspeed]]
* [[cmdline]]
* [[con_notifytime]]
* [[coop]]
* [[crosshair]]
* [[d_mipcap]]
* [[d_mipscale]]
* [[deathmatch]]
* [[developer]]
* [[edgefriction]]
* [[fov]]
* [[fraglimit]]
* [[gamecfg]]
* [[gamma]]
* [[gl_affinemodels]]
* [[gl_clear]]
* [[gl_cull]]
* [[gl_finish]]
* [[gl_flashblend]]
* [[gl_fullbrights]]
* [[gl_keeptjunctions]]
* [[gl_max_size]]
* [[gl_nobind]]
* [[gl_nocolors]]
* [[gl_picmip]]
* [[gl_playermip]]
* [[gl_polyblend]]
* [[gl_reporttjunctions]]
* [[gl_smoothmodels]]
* [[gl_subdivide_size]]
* [[gl_texsort]]
* [[gl_texturemode]]
* [[gl_triplebuffer]]
* [[gl_ztrick]]
* [[host_framerate]]
* [[host_speeds]]
* [[hostname]]
* [[joyadvanced]]
* [[joyadvaxisr]]
* [[joyadvaxisu]]
* [[joyadvaxisv]]
* [[joyadvaxisx]]
* [[joyadvaxisy]]
* [[joyadvaxisz]]
* [[joyforwardsensitivity]]
* [[joyforwardthreshold]]
* [[joyname]]
* [[joypitchsensitivity]]
* [[joypitchthreshold]]
* [[joysidesensitivity]]
* [[joysidethreshold]]
* [[joystick]]
* [[joywwhack1]]
* [[joywwhack2]]
* [[joyyawsensitivity]]
* [[joyyawthreshold]]
* [[lcd_x]]
* [[lcd_yaw]]
* [[loadas8bit]]
* [[lookspring]]
* [[lookstrafe]]
* [[m_filter]]
* [[m_forward]]
* [[m_pitch]]
* [[m_side]]
* [[m_yaw]]
* [[net_messagetimeout]]
* [[noexit]]
* [[nomonsters]]
* [[nosound]]
* [[pausable]]
* [[port]]
* [[precache]]
* [[r_aliastransadj]]
* [[r_aliastransbase]]
* [[r_ambient]]
* [[r_clearcolor]]
* [[r_drawentities]]
* [[r_drawflat]]
* [[r_draworder]]
* [[r_drawviewmodel]]
* [[r_dspeeds]]
* [[r_dynamic]]
* [[r_fullbright]]
* [[r_graphheight]]
* [[r_maxedges]]
* [[r_lightmap]]
* [[r_maxsurfs]]
* [[r_mirroralpha]]
* [[r_norefresh]]
* [[r_novis]]
* [[r_numedges]]
* [[r_numsurfs]]
* [[r_polymodelstats]]
* [[r_reportedgeout]]
* [[r_reportsurfout]]
* [[r_shadows]]
* [[r_showbboxes]]
* [[r_showtris]]
* [[r_speeds]]
* [[r_timegraph]]
* [[r_wateralpha]]
* [[r_waterwarp]]
* [[registered]]
* [[samelevel]]
* [[saved1]]
* [[saved2]]
* [[saved3]]
* [[saved4]]
* [[savedgamecfg]]
* [[scr_centertime]]
* [[scr_conspeed]]
* [[scr_ofsx]]
* [[scr_ofsy]]
* [[scr_ofsz]]
* [[scr_printspeed]]
* [[scratch1]]
* [[scratch2]]
* [[scratch3]]
* [[scratch4]]
* [[sensitivity]]
* [[serverprofile]]
* [[showpause]]
* [[showram]]
* [[showturtle]]
* [[skill]]
* [[snd_noextraupdate]]
* [[snd_show]]
* [[sv_accelerate]]
* [[sv_aim]]
* [[sv_friction]]
* [[sv_gravity]]
* [[sv_idealpitchscale]]
* [[sv_maxspeed]]
* [[sv_maxvelocity]]
* [[sv_nostep]]
* [[sv_stopspeed]]
* [[sys_ticrate]]
* [[teamplay]]
* [[temp1]]
* [[timelimit]]
* [[v_centermove]]
* [[v_centerspeed]]
* [[v_idlescale]]
* [[v_ipitch_cycle]]
* [[v_ipitch_level]]
* [[v_iroll_cycle]]
* [[v_iroll_level]]
* [[v_iyaw_cycle]]
* [[v_iyaw_level]]
* [[v_kickpitch]]
* [[v_kickroll]]
* [[v_kicktime]]
* [[vid_config_x]]
* [[vid_config_y]]
* [[vid_fullscreen_mode]]
* [[vid_mode]]
* [[vid_nopageflip]]
* [[vid_stretch_by_2]]
* [[vid_wait]]
* [[vid_window_x]]
* [[vid_window_y]]
* [[vid_windowed_mode]]
* [[viewsize]]
* [[volume]]

{{Console}}</text>
      <sha1>bubezl2g5dkyom47n2dwrwy24qtmo4v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>List of engines and ports</title>
    <ns>0</ns>
    <id>64</id>
    <revision>
      <id>103</id>
      <timestamp>2007-10-30T21:26:50Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: ===[[Quake Engine Technology Licensees]] - Closed source licensees=== * [[Hexen II]]: [[Raven Software]] (1997) * [[Half-Life]]: [http://www.valvesoftware.com/ Valve] (1998, also includes ...</comment>
      <text xml:space="preserve" bytes="3578">===[[Quake Engine Technology Licensees]] - Closed source licensees===
* [[Hexen II]]: [[Raven Software]] (1997)
* [[Half-Life]]: [http://www.valvesoftware.com/ Valve] (1998, also includes a little bit of [[Quake II]] code)
* [[Half-Life 2]]: [http://www.valvesoftware.com/ Valve] (2004)

===[[SinglePlayer Quake Engines]] - Only single player===
* [[Industri]]: http://industri.sourceforge.net/
* [http://telejano.berlios.de/wiki3/index.php/SinglePlayer Telejano SinglePlayer]

===[[NetQuake]] - Single player, LAN and internet===
* [[CheapHack]]: http://www.planetgargoyle.com/qtools/cheaphack
* [[D3DQuake]]: http://dxquake.sourceforge.net/
* [[DarkPlaces]]: http://www.icculus.org/twilight/darkplaces/
* [[FitzQuake]]: http://www.celephais.net/fitzquake/
* [[GlQuake For Mac]]: http://macglquake.sourceforge.net/
* [[GQ]]: http://www.planetquake.com/gzone/gq.shtml
* [[JoeQuake]]: http://delfin.unideb.hu/%7Esj0002/news.html
* [[MHQuake]]: Currently homeless...
* [[NetChild]]: http://home.online.no/%7Equaker/netchild/main.htm
* [[NewWolf]]: (mix engine, q1&amp;q2): http://newwolf.sourceforge.net/
* [[NPRQuake]]: http://www.cs.wisc.edu/graphics/Gallery/NPRQuake/
* [[OmiQuake]]: http://mods.moddb.com/2193/
* [[ProQuake]]: http://www.planetquake.com/proquake/
* [[Q2K4]]: http://www.inovagames.com/q2k4/
* [[QMB]]: http://www.flyingsaucepan.com/QMB/
* [[QuakeForge]]: http://www.quakeforge.net/
* [[Telejano]]: http://telejano.berlios.de/wiki3/
* [[Tenebrae]]: http://tenebrae.sourceforge.net/
* [[Tenebrae2]]: http://www.tenebrae2.com/
* [[TomazQuake]]: http://tomaz.quakesrc.org/
* [[Tremor]]: http://tremor.quakedev.com/
* [[TTYQuake]]: http://webpages.mr.net/bobz/ttyquake/
* [[TyrQuake]]: http://disenchant.net/engine.html
* [[Vengeance]]: http://www.freewebs.com/entar/vfull.html
* [[Vengeance r2]]: http://entar.quakedev.com/
* [[wmQuake]]: http://freshmeat.net/projects/wmquake/

===[[QuakeWorld]] - Internet optimized Quake netcode flavour. (QW)===
* [[ezQuake]]: http://ezquake.sourceforge.net/
* [[FuhQuake]]: http://www.fuhquake.net/
* [[FTE QuakeWorld]]: http://fteqw.com/
* KrimZoN QuakeWorld Client: http://slightly.quakesrc.org/
* [[More QuakeWorld]]: http://hem.passagen.se/mjyyk/mqwcl/news.html
* [[QuakeForge]]: http://www.quakeforge.net/
* QuakeWorld Python: http://freshmeat.net/projects/qwpython/
* [[Twilight]]: http://twilight.sourceforge.net/
* [[ZQuake]]: http://zquake.frag.ru/

===[[Dedicated Servers]] - Servers only console apps===
* The GeneBot Project http://www.telefragged.com/thefatal/genebot.shtml
* CheapServ
* [[FTE QuakeWorld]] http://www.fteqw.com/
* DarkPlaces-dedicated
* MVDSV(Multiview demo server) http://mvdsv.sourceforge.net/
* ZQuake dedicated QW server http://zquake.frag.ru

===[[Dreamcast Quake]] - For the DC scene===
* Titanium Port (QuakeDC): http://dumbass.hypermart.net/presents/downloads/quakedc/quakedc_req.htm
* Bero Port (DCQuake): http://prdownloads.sourceforge.net/dcquake/dcquake-2002-08-11-bin.zip
* Makaqu (???) http://www.dcemulation.com/phpBB/viewtopic.php?t=65193

===[[Pocket PC Quake]] - A tiny lovable Quake===
* http://quake.pocketmatrix.com/
* http://www.planetquake.com/impel/

===Screenshots and videos===
Screenshots
* [[The best of 2002 Screenshots, by Tei|Best of 2002]]
* [[The best of 2003 Screenshots, by Tei|Best of 2003]]
* [[The best of 2004 Screenshots, by Tei|Best of 2004]]
* [[The best of 2005 Screenshots, by Tei|Best of 2005]]
* [[The best of 2006 Screenshots, by Tei|Best of 2006]]

Videos
* [[Quake Video Collection 2004]]
* [[Quake Video Collection 2005]]
** Please contribute here!!</text>
      <sha1>7ni4iuahgan21fesr1ni6agwgd1f8ae</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>237</id>
      <parentid>103</parentid>
      <timestamp>2007-11-02T20:09:57Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="3642">See [[:Category:Engines]] for a list of engines with articles.

===[[Quake Engine Technology Licensees]] - Closed source licensees===
* [[Hexen II]]: [[Raven Software]] (1997)
* [[Half-Life]]: [http://www.valvesoftware.com/ Valve] (1998, also includes a little bit of [[Quake II]] code)
* [[Half-Life 2]]: [http://www.valvesoftware.com/ Valve] (2004)

===[[SinglePlayer Quake Engines]] - Only single player===
* [[Industri]]: http://industri.sourceforge.net/
* [http://telejano.berlios.de/wiki3/index.php/SinglePlayer Telejano SinglePlayer]

===[[NetQuake]] - Single player, LAN and internet===
* [[CheapHack]]: http://www.planetgargoyle.com/qtools/cheaphack
* [[D3DQuake]]: http://dxquake.sourceforge.net/
* [[DarkPlaces]]: http://www.icculus.org/twilight/darkplaces/
* [[FitzQuake]]: http://www.celephais.net/fitzquake/
* [[GlQuake For Mac]]: http://macglquake.sourceforge.net/
* [[GQ]]: http://www.planetquake.com/gzone/gq.shtml
* [[JoeQuake]]: http://delfin.unideb.hu/%7Esj0002/news.html
* [[MHQuake]]: Currently homeless...
* [[NetChild]]: http://home.online.no/%7Equaker/netchild/main.htm
* [[NewWolf]]: (mix engine, q1&amp;q2): http://newwolf.sourceforge.net/
* [[NPRQuake]]: http://www.cs.wisc.edu/graphics/Gallery/NPRQuake/
* [[OmiQuake]]: http://mods.moddb.com/2193/
* [[ProQuake]]: http://www.planetquake.com/proquake/
* [[Q2K4]]: http://www.inovagames.com/q2k4/
* [[QMB]]: http://www.flyingsaucepan.com/QMB/
* [[QuakeForge]]: http://www.quakeforge.net/
* [[Telejano]]: http://telejano.berlios.de/wiki3/
* [[Tenebrae]]: http://tenebrae.sourceforge.net/
* [[Tenebrae2]]: http://www.tenebrae2.com/
* [[TomazQuake]]: http://tomaz.quakesrc.org/
* [[Tremor]]: http://tremor.quakedev.com/
* [[TTYQuake]]: http://webpages.mr.net/bobz/ttyquake/
* [[TyrQuake]]: http://disenchant.net/engine.html
* [[Vengeance]]: http://www.freewebs.com/entar/vfull.html
* [[Vengeance r2]]: http://entar.quakedev.com/
* [[wmQuake]]: http://freshmeat.net/projects/wmquake/

===[[QuakeWorld]] - Internet optimized Quake netcode flavour. (QW)===
* [[ezQuake]]: http://ezquake.sourceforge.net/
* [[FuhQuake]]: http://www.fuhquake.net/
* [[FTE QuakeWorld]]: http://fteqw.com/
* KrimZoN QuakeWorld Client: http://slightly.quakesrc.org/
* [[More QuakeWorld]]: http://hem.passagen.se/mjyyk/mqwcl/news.html
* [[QuakeForge]]: http://www.quakeforge.net/
* QuakeWorld Python: http://freshmeat.net/projects/qwpython/
* [[Twilight]]: http://twilight.sourceforge.net/
* [[ZQuake]]: http://zquake.frag.ru/

===[[Dedicated Servers]] - Servers only console apps===
* The GeneBot Project http://www.telefragged.com/thefatal/genebot.shtml
* CheapServ
* [[FTE QuakeWorld]] http://www.fteqw.com/
* DarkPlaces-dedicated
* MVDSV(Multiview demo server) http://mvdsv.sourceforge.net/
* ZQuake dedicated QW server http://zquake.frag.ru

===[[Dreamcast Quake]] - For the DC scene===
* Titanium Port (QuakeDC): http://dumbass.hypermart.net/presents/downloads/quakedc/quakedc_req.htm
* Bero Port (DCQuake): http://prdownloads.sourceforge.net/dcquake/dcquake-2002-08-11-bin.zip
* Makaqu (???) http://www.dcemulation.com/phpBB/viewtopic.php?t=65193

===[[Pocket PC Quake]] - A tiny lovable Quake===
* http://quake.pocketmatrix.com/
* http://www.planetquake.com/impel/

===Screenshots and videos===
Screenshots
* [[The best of 2002 Screenshots, by Tei|Best of 2002]]
* [[The best of 2003 Screenshots, by Tei|Best of 2003]]
* [[The best of 2004 Screenshots, by Tei|Best of 2004]]
* [[The best of 2005 Screenshots, by Tei|Best of 2005]]
* [[The best of 2006 Screenshots, by Tei|Best of 2006]]

Videos
* [[Quake Video Collection 2004]]
* [[Quake Video Collection 2005]]
** Please contribute here!!</text>
      <sha1>sz5ifdtzlp15otfdmsq2kdmhhwc6629</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>400</id>
      <parentid>237</parentid>
      <timestamp>2008-02-26T11:39:18Z</timestamp>
      <contributor>
        <ip>79.77.98.175</ip>
      </contributor>
      <comment>/* [[QuakeWorld]] - Internet optimized Quake netcode flavour. (QW) */</comment>
      <text xml:space="preserve" bytes="3642">See [[:Category:Engines]] for a list of engines with articles.

===[[Quake Engine Technology Licensees]] - Closed source licensees===
* [[Hexen II]]: [[Raven Software]] (1997)
* [[Half-Life]]: [http://www.valvesoftware.com/ Valve] (1998, also includes a little bit of [[Quake II]] code)
* [[Half-Life 2]]: [http://www.valvesoftware.com/ Valve] (2004)

===[[SinglePlayer Quake Engines]] - Only single player===
* [[Industri]]: http://industri.sourceforge.net/
* [http://telejano.berlios.de/wiki3/index.php/SinglePlayer Telejano SinglePlayer]

===[[NetQuake]] - Single player, LAN and internet===
* [[CheapHack]]: http://www.planetgargoyle.com/qtools/cheaphack
* [[D3DQuake]]: http://dxquake.sourceforge.net/
* [[DarkPlaces]]: http://www.icculus.org/twilight/darkplaces/
* [[FitzQuake]]: http://www.celephais.net/fitzquake/
* [[GlQuake For Mac]]: http://macglquake.sourceforge.net/
* [[GQ]]: http://www.planetquake.com/gzone/gq.shtml
* [[JoeQuake]]: http://delfin.unideb.hu/%7Esj0002/news.html
* [[MHQuake]]: Currently homeless...
* [[NetChild]]: http://home.online.no/%7Equaker/netchild/main.htm
* [[NewWolf]]: (mix engine, q1&amp;q2): http://newwolf.sourceforge.net/
* [[NPRQuake]]: http://www.cs.wisc.edu/graphics/Gallery/NPRQuake/
* [[OmiQuake]]: http://mods.moddb.com/2193/
* [[ProQuake]]: http://www.planetquake.com/proquake/
* [[Q2K4]]: http://www.inovagames.com/q2k4/
* [[QMB]]: http://www.flyingsaucepan.com/QMB/
* [[QuakeForge]]: http://www.quakeforge.net/
* [[Telejano]]: http://telejano.berlios.de/wiki3/
* [[Tenebrae]]: http://tenebrae.sourceforge.net/
* [[Tenebrae2]]: http://www.tenebrae2.com/
* [[TomazQuake]]: http://tomaz.quakesrc.org/
* [[Tremor]]: http://tremor.quakedev.com/
* [[TTYQuake]]: http://webpages.mr.net/bobz/ttyquake/
* [[TyrQuake]]: http://disenchant.net/engine.html
* [[Vengeance]]: http://www.freewebs.com/entar/vfull.html
* [[Vengeance r2]]: http://entar.quakedev.com/
* [[wmQuake]]: http://freshmeat.net/projects/wmquake/

===[[QuakeWorld]] - Internet optimized Quake netcode flavour. (QW)===
* [[ezQuake]]: http://ezquake.sourceforge.net/
* [[FuhQuake]]: http://www.fuhquake.net/
* [[FTE QuakeWorld]]: http://fteqw.com/
* KrimZon QuakeWorld Client: http://slightly.quakesrc.org/
* [[More QuakeWorld]]: http://hem.passagen.se/mjyyk/mqwcl/news.html
* [[QuakeForge]]: http://www.quakeforge.net/
* QuakeWorld Python: http://freshmeat.net/projects/qwpython/
* [[Twilight]]: http://twilight.sourceforge.net/
* [[ZQuake]]: http://zquake.frag.ru/

===[[Dedicated Servers]] - Servers only console apps===
* The GeneBot Project http://www.telefragged.com/thefatal/genebot.shtml
* CheapServ
* [[FTE QuakeWorld]] http://www.fteqw.com/
* DarkPlaces-dedicated
* MVDSV(Multiview demo server) http://mvdsv.sourceforge.net/
* ZQuake dedicated QW server http://zquake.frag.ru

===[[Dreamcast Quake]] - For the DC scene===
* Titanium Port (QuakeDC): http://dumbass.hypermart.net/presents/downloads/quakedc/quakedc_req.htm
* Bero Port (DCQuake): http://prdownloads.sourceforge.net/dcquake/dcquake-2002-08-11-bin.zip
* Makaqu (???) http://www.dcemulation.com/phpBB/viewtopic.php?t=65193

===[[Pocket PC Quake]] - A tiny lovable Quake===
* http://quake.pocketmatrix.com/
* http://www.planetquake.com/impel/

===Screenshots and videos===
Screenshots
* [[The best of 2002 Screenshots, by Tei|Best of 2002]]
* [[The best of 2003 Screenshots, by Tei|Best of 2003]]
* [[The best of 2004 Screenshots, by Tei|Best of 2004]]
* [[The best of 2005 Screenshots, by Tei|Best of 2005]]
* [[The best of 2006 Screenshots, by Tei|Best of 2006]]

Videos
* [[Quake Video Collection 2004]]
* [[Quake Video Collection 2005]]
** Please contribute here!!</text>
      <sha1>nh5e2rp1xpx9aplvcej0fo4s1vuq4rz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>787</id>
      <parentid>400</parentid>
      <timestamp>2008-05-08T22:06:01Z</timestamp>
      <contributor>
        <ip>79.77.86.6</ip>
      </contributor>
      <comment>/* [[QuakeWorld]] - Internet optimized Quake netcode flavour. (QW) */</comment>
      <text xml:space="preserve" bytes="3646">See [[:Category:Engines]] for a list of engines with articles.

===[[Quake Engine Technology Licensees]] - Closed source licensees===
* [[Hexen II]]: [[Raven Software]] (1997)
* [[Half-Life]]: [http://www.valvesoftware.com/ Valve] (1998, also includes a little bit of [[Quake II]] code)
* [[Half-Life 2]]: [http://www.valvesoftware.com/ Valve] (2004)

===[[SinglePlayer Quake Engines]] - Only single player===
* [[Industri]]: http://industri.sourceforge.net/
* [http://telejano.berlios.de/wiki3/index.php/SinglePlayer Telejano SinglePlayer]

===[[NetQuake]] - Single player, LAN and internet===
* [[CheapHack]]: http://www.planetgargoyle.com/qtools/cheaphack
* [[D3DQuake]]: http://dxquake.sourceforge.net/
* [[DarkPlaces]]: http://www.icculus.org/twilight/darkplaces/
* [[FitzQuake]]: http://www.celephais.net/fitzquake/
* [[GlQuake For Mac]]: http://macglquake.sourceforge.net/
* [[GQ]]: http://www.planetquake.com/gzone/gq.shtml
* [[JoeQuake]]: http://delfin.unideb.hu/%7Esj0002/news.html
* [[MHQuake]]: Currently homeless...
* [[NetChild]]: http://home.online.no/%7Equaker/netchild/main.htm
* [[NewWolf]]: (mix engine, q1&amp;q2): http://newwolf.sourceforge.net/
* [[NPRQuake]]: http://www.cs.wisc.edu/graphics/Gallery/NPRQuake/
* [[OmiQuake]]: http://mods.moddb.com/2193/
* [[ProQuake]]: http://www.planetquake.com/proquake/
* [[Q2K4]]: http://www.inovagames.com/q2k4/
* [[QMB]]: http://www.flyingsaucepan.com/QMB/
* [[QuakeForge]]: http://www.quakeforge.net/
* [[Telejano]]: http://telejano.berlios.de/wiki3/
* [[Tenebrae]]: http://tenebrae.sourceforge.net/
* [[Tenebrae2]]: http://www.tenebrae2.com/
* [[TomazQuake]]: http://tomaz.quakesrc.org/
* [[Tremor]]: http://tremor.quakedev.com/
* [[TTYQuake]]: http://webpages.mr.net/bobz/ttyquake/
* [[TyrQuake]]: http://disenchant.net/engine.html
* [[Vengeance]]: http://www.freewebs.com/entar/vfull.html
* [[Vengeance r2]]: http://entar.quakedev.com/
* [[wmQuake]]: http://freshmeat.net/projects/wmquake/

===[[QuakeWorld]] - Internet optimized Quake netcode flavour. (QW)===
* [[ezQuake]]: http://ezquake.sourceforge.net/
* [[FuhQuake]]: http://www.fuhquake.net/
* [[FTE QuakeWorld]]: http://fteqw.com/
* [[KrimZon QuakeWorld Client]]: http://slightly.quakesrc.org/
* [[More QuakeWorld]]: http://hem.passagen.se/mjyyk/mqwcl/news.html
* [[QuakeForge]]: http://www.quakeforge.net/
* QuakeWorld Python: http://freshmeat.net/projects/qwpython/
* [[Twilight]]: http://twilight.sourceforge.net/
* [[ZQuake]]: http://zquake.frag.ru/

===[[Dedicated Servers]] - Servers only console apps===
* The GeneBot Project http://www.telefragged.com/thefatal/genebot.shtml
* CheapServ
* [[FTE QuakeWorld]] http://www.fteqw.com/
* DarkPlaces-dedicated
* MVDSV(Multiview demo server) http://mvdsv.sourceforge.net/
* ZQuake dedicated QW server http://zquake.frag.ru

===[[Dreamcast Quake]] - For the DC scene===
* Titanium Port (QuakeDC): http://dumbass.hypermart.net/presents/downloads/quakedc/quakedc_req.htm
* Bero Port (DCQuake): http://prdownloads.sourceforge.net/dcquake/dcquake-2002-08-11-bin.zip
* Makaqu (???) http://www.dcemulation.com/phpBB/viewtopic.php?t=65193

===[[Pocket PC Quake]] - A tiny lovable Quake===
* http://quake.pocketmatrix.com/
* http://www.planetquake.com/impel/

===Screenshots and videos===
Screenshots
* [[The best of 2002 Screenshots, by Tei|Best of 2002]]
* [[The best of 2003 Screenshots, by Tei|Best of 2003]]
* [[The best of 2004 Screenshots, by Tei|Best of 2004]]
* [[The best of 2005 Screenshots, by Tei|Best of 2005]]
* [[The best of 2006 Screenshots, by Tei|Best of 2006]]

Videos
* [[Quake Video Collection 2004]]
* [[Quake Video Collection 2005]]
** Please contribute here!!</text>
      <sha1>679jcx13j4r0us6b9d1r6tc0pawfltf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1454</id>
      <parentid>787</parentid>
      <timestamp>2009-11-17T08:38:54Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="3646">See [[:Category:Engines]] for a list of engines with articles.

===[[Quake Engine Technology Licensees]] - Closed source licensees===
* [[Hexen II]]: [[Raven Software]] (1997)
* [[Half-Life]]: [http://www.valvesoftware.com/ Valve] (1998, also includes a little bit of [[Quake II]] code)
* [[Half-Life 2]]: [http://www.valvesoftware.com/ Valve] (2004)

===[[SinglePlayer Quake Engines]] - Only single player===
* [[Industri]]: http://industri.sourceforge.net/
* [http://telejano.berlios.de/wiki3/index.php/SinglePlayer Telejano SinglePlayer]

===[[NetQuake]] - Single player, LAN and internet===
* [[CheapHack]]: http://www.planetgargoyle.com/qtools/cheaphack
* [[D3DQuake]]: http://dxquake.sourceforge.net/
* [[DarkPlaces]]: http://www.icculus.org/twilight/darkplaces/
* [[Fitzquake]]: http://www.celephais.net/fitzquake/
* [[GlQuake For Mac]]: http://macglquake.sourceforge.net/
* [[GQ]]: http://www.planetquake.com/gzone/gq.shtml
* [[JoeQuake]]: http://delfin.unideb.hu/%7Esj0002/news.html
* [[MHQuake]]: Currently homeless...
* [[NetChild]]: http://home.online.no/%7Equaker/netchild/main.htm
* [[NewWolf]]: (mix engine, q1&amp;q2): http://newwolf.sourceforge.net/
* [[NPRQuake]]: http://www.cs.wisc.edu/graphics/Gallery/NPRQuake/
* [[OmiQuake]]: http://mods.moddb.com/2193/
* [[ProQuake]]: http://www.planetquake.com/proquake/
* [[Q2K4]]: http://www.inovagames.com/q2k4/
* [[QMB]]: http://www.flyingsaucepan.com/QMB/
* [[QuakeForge]]: http://www.quakeforge.net/
* [[Telejano]]: http://telejano.berlios.de/wiki3/
* [[Tenebrae]]: http://tenebrae.sourceforge.net/
* [[Tenebrae2]]: http://www.tenebrae2.com/
* [[TomazQuake]]: http://tomaz.quakesrc.org/
* [[Tremor]]: http://tremor.quakedev.com/
* [[TTYQuake]]: http://webpages.mr.net/bobz/ttyquake/
* [[TyrQuake]]: http://disenchant.net/engine.html
* [[Vengeance]]: http://www.freewebs.com/entar/vfull.html
* [[Vengeance r2]]: http://entar.quakedev.com/
* [[wmQuake]]: http://freshmeat.net/projects/wmquake/

===[[QuakeWorld]] - Internet optimized Quake netcode flavour. (QW)===
* [[ezQuake]]: http://ezquake.sourceforge.net/
* [[FuhQuake]]: http://www.fuhquake.net/
* [[FTE QuakeWorld]]: http://fteqw.com/
* [[KrimZon QuakeWorld Client]]: http://slightly.quakesrc.org/
* [[More QuakeWorld]]: http://hem.passagen.se/mjyyk/mqwcl/news.html
* [[QuakeForge]]: http://www.quakeforge.net/
* QuakeWorld Python: http://freshmeat.net/projects/qwpython/
* [[Twilight]]: http://twilight.sourceforge.net/
* [[ZQuake]]: http://zquake.frag.ru/

===[[Dedicated Servers]] - Servers only console apps===
* The GeneBot Project http://www.telefragged.com/thefatal/genebot.shtml
* CheapServ
* [[FTE QuakeWorld]] http://www.fteqw.com/
* DarkPlaces-dedicated
* MVDSV(Multiview demo server) http://mvdsv.sourceforge.net/
* ZQuake dedicated QW server http://zquake.frag.ru

===[[Dreamcast Quake]] - For the DC scene===
* Titanium Port (QuakeDC): http://dumbass.hypermart.net/presents/downloads/quakedc/quakedc_req.htm
* Bero Port (DCQuake): http://prdownloads.sourceforge.net/dcquake/dcquake-2002-08-11-bin.zip
* Makaqu (???) http://www.dcemulation.com/phpBB/viewtopic.php?t=65193

===[[Pocket PC Quake]] - A tiny lovable Quake===
* http://quake.pocketmatrix.com/
* http://www.planetquake.com/impel/

===Screenshots and videos===
Screenshots
* [[The best of 2002 Screenshots, by Tei|Best of 2002]]
* [[The best of 2003 Screenshots, by Tei|Best of 2003]]
* [[The best of 2004 Screenshots, by Tei|Best of 2004]]
* [[The best of 2005 Screenshots, by Tei|Best of 2005]]
* [[The best of 2006 Screenshots, by Tei|Best of 2006]]

Videos
* [[Quake Video Collection 2004]]
* [[Quake Video Collection 2005]]
** Please contribute here!!</text>
      <sha1>lygbv0mkyl1dasruiaktdpi8yo41vv9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>List of mods</title>
    <ns>0</ns>
    <id>25</id>
    <revision>
      <id>31</id>
      <timestamp>2007-10-30T17:04:32Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: * [http://www.inside3d.com/prydongate/ Prydon Gate] * [http://telejano.berlios.de/wiki3/index.php/kanada Kanada invade USA] * [http://slightly.quakesrc.org/index.php Avionix] * [http://www...</comment>
      <text xml:space="preserve" bytes="1469">* [http://www.inside3d.com/prydongate/ Prydon Gate]
* [http://telejano.berlios.de/wiki3/index.php/kanada Kanada invade USA]
* [http://slightly.quakesrc.org/index.php Avionix]
* [http://www.gonzulator.da.ru/index.php WarQraft]
* [http://www.freewebs.com/entar/iq.html Improved Quake]
* [http://www.runequake.com RuneQuake]
* [http://www.rqplus.com RuneQuake Plus]
* [http://www.nexuiz.com/ Nexuiz (a game)]
* [http://www.planetquake.com/rocketland Rocketland]
* [[FrikaC's Mods and Sods]]
* [http://www.agrip.org.uk/ AGRIP]

CheapAlert's mods
* [http://nerfwar.moddb.com NerfWar]
* [http://stalker.moddb.com Stalker]
* [http://www.planetquake.com/gargoyle/modsquad.htm Squad Warfare]
* [http://medevile.moddb.com MedEvile]
* [http://seb.moddb.com SEB]
* [http://O_o.moddb.com O_o]
* [http://qtest.moddb.com QTest Mod]
* [http://www.fileplanet.com/dl.aspx?/planetquake/gargoyle/shotfest.zip ShotgunFest]

Bondo's Mods
* [http://mods.moddb.com/2769 SuperDuper Quake]
* [http://mods.moddb.com/2769 SuperDuper DMSP Quake]

(add your mod here)

===See Also===
* [http://telejano.berlios.de/wiki3/index.php/Historical%20Mods Historical Mods, by Tei]
* [http://games.moddb.com/2/ Quake1 ModDB]
* [http://www.planetquake.com/gargoyle/lost.htm Gargoyle Spawning Lair- Lost Mods]
* [http://www.quaketerminus.com/addon.htm Quake Terminus Mods Page]
* [http://www.planetquake.com/retroquake/ Retro Quake]
* [http://www.planetquake.com/quake1/hosted/mods.shtml PlanetQuake Mods Page]</text>
      <sha1>0m7ukpvy0de3clvu3k9l2xq6bmsllfh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>111</id>
      <parentid>31</parentid>
      <timestamp>2007-10-30T21:45:52Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <comment>[[Mod list]] moved to [[List of mods]]</comment>
      <text xml:space="preserve" bytes="1469">* [http://www.inside3d.com/prydongate/ Prydon Gate]
* [http://telejano.berlios.de/wiki3/index.php/kanada Kanada invade USA]
* [http://slightly.quakesrc.org/index.php Avionix]
* [http://www.gonzulator.da.ru/index.php WarQraft]
* [http://www.freewebs.com/entar/iq.html Improved Quake]
* [http://www.runequake.com RuneQuake]
* [http://www.rqplus.com RuneQuake Plus]
* [http://www.nexuiz.com/ Nexuiz (a game)]
* [http://www.planetquake.com/rocketland Rocketland]
* [[FrikaC's Mods and Sods]]
* [http://www.agrip.org.uk/ AGRIP]

CheapAlert's mods
* [http://nerfwar.moddb.com NerfWar]
* [http://stalker.moddb.com Stalker]
* [http://www.planetquake.com/gargoyle/modsquad.htm Squad Warfare]
* [http://medevile.moddb.com MedEvile]
* [http://seb.moddb.com SEB]
* [http://O_o.moddb.com O_o]
* [http://qtest.moddb.com QTest Mod]
* [http://www.fileplanet.com/dl.aspx?/planetquake/gargoyle/shotfest.zip ShotgunFest]

Bondo's Mods
* [http://mods.moddb.com/2769 SuperDuper Quake]
* [http://mods.moddb.com/2769 SuperDuper DMSP Quake]

(add your mod here)

===See Also===
* [http://telejano.berlios.de/wiki3/index.php/Historical%20Mods Historical Mods, by Tei]
* [http://games.moddb.com/2/ Quake1 ModDB]
* [http://www.planetquake.com/gargoyle/lost.htm Gargoyle Spawning Lair- Lost Mods]
* [http://www.quaketerminus.com/addon.htm Quake Terminus Mods Page]
* [http://www.planetquake.com/retroquake/ Retro Quake]
* [http://www.planetquake.com/quake1/hosted/mods.shtml PlanetQuake Mods Page]</text>
      <sha1>0m7ukpvy0de3clvu3k9l2xq6bmsllfh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>340</id>
      <parentid>111</parentid>
      <timestamp>2008-01-23T02:11:23Z</timestamp>
      <contributor>
        <username>Chris</username>
        <id>6</id>
      </contributor>
      <text xml:space="preserve" bytes="1527">* [http://www.inside3d.com/prydongate/ Prydon Gate]
* [http://telejano.berlios.de/wiki3/index.php/kanada Kanada invade USA]
* [http://slightly.quakesrc.org/index.php Avionix]
* [http://www.gonzulator.da.ru/index.php WarQraft]
* [http://www.freewebs.com/entar/iq.html Improved Quake]
* [http://www.runequake.com RuneQuake]
* [http://www.rqplus.com RuneQuake Plus]
* [http://www.nexuiz.com/ Nexuiz (a game)]
* [http://the-hunted.com/ The Hunted Chronicles (a game)]
* [http://www.planetquake.com/rocketland Rocketland]
* [[FrikaC's Mods and Sods]]
* [http://www.agrip.org.uk/ AGRIP]

CheapAlert's mods
* [http://nerfwar.moddb.com NerfWar]
* [http://stalker.moddb.com Stalker]
* [http://www.planetquake.com/gargoyle/modsquad.htm Squad Warfare]
* [http://medevile.moddb.com MedEvile]
* [http://seb.moddb.com SEB]
* [http://O_o.moddb.com O_o]
* [http://qtest.moddb.com QTest Mod]
* [http://www.fileplanet.com/dl.aspx?/planetquake/gargoyle/shotfest.zip ShotgunFest]

Bondo's Mods
* [http://mods.moddb.com/2769 SuperDuper Quake]
* [http://mods.moddb.com/2769 SuperDuper DMSP Quake]

(add your mod here)

===See Also===
* [http://telejano.berlios.de/wiki3/index.php/Historical%20Mods Historical Mods, by Tei]
* [http://games.moddb.com/2/ Quake1 ModDB]
* [http://www.planetquake.com/gargoyle/lost.htm Gargoyle Spawning Lair- Lost Mods]
* [http://www.quaketerminus.com/addon.htm Quake Terminus Mods Page]
* [http://www.planetquake.com/retroquake/ Retro Quake]
* [http://www.planetquake.com/quake1/hosted/mods.shtml PlanetQuake Mods Page]</text>
      <sha1>a00vldugta0wr0dw0qjz7cbocbio2nu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>871</id>
      <parentid>340</parentid>
      <timestamp>2008-05-18T04:58:31Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>bad link! bad bad link!</comment>
      <text xml:space="preserve" bytes="1487">* [http://www.inside3d.com/prydongate/ Prydon Gate]
* [http://telejano.berlios.de/wiki3/index.php/kanada Kanada invade USA]
* [http://slightly.quakesrc.org/index.php Avionix]
* WarQraft
* [http://www.freewebs.com/entar/iq.html Improved Quake]
* [http://www.runequake.com RuneQuake]
* [http://www.rqplus.com RuneQuake Plus]
* [http://www.nexuiz.com/ Nexuiz (a game)]
* [http://the-hunted.com/ The Hunted Chronicles (a game)]
* [http://www.planetquake.com/rocketland Rocketland]
* [[FrikaC's Mods and Sods]]
* [http://www.agrip.org.uk/ AGRIP]

CheapAlert's mods
* [http://nerfwar.moddb.com NerfWar]
* [http://stalker.moddb.com Stalker]
* [http://www.planetquake.com/gargoyle/modsquad.htm Squad Warfare]
* [http://medevile.moddb.com MedEvile]
* [http://seb.moddb.com SEB]
* [http://O_o.moddb.com O_o]
* [http://qtest.moddb.com QTest Mod]
* [http://www.fileplanet.com/dl.aspx?/planetquake/gargoyle/shotfest.zip ShotgunFest]

Bondo's Mods
* [http://mods.moddb.com/2769 SuperDuper Quake]
* [http://mods.moddb.com/2769 SuperDuper DMSP Quake]

(add your mod here)

===See Also===
* [http://telejano.berlios.de/wiki3/index.php/Historical%20Mods Historical Mods, by Tei]
* [http://games.moddb.com/2/ Quake1 ModDB]
* [http://www.planetquake.com/gargoyle/lost.htm Gargoyle Spawning Lair- Lost Mods]
* [http://www.quaketerminus.com/addon.htm Quake Terminus Mods Page]
* [http://www.planetquake.com/retroquake/ Retro Quake]
* [http://www.planetquake.com/quake1/hosted/mods.shtml PlanetQuake Mods Page]</text>
      <sha1>bm1xyr7tltimjwa2wdf4nw95b2wgx2u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Localcmd</title>
    <ns>0</ns>
    <id>896</id>
    <redirect title="localcmd" />
    <revision>
      <id>2559</id>
      <timestamp>2013-03-29T14:22:09Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Localcmd]] to [[localcmd]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="22">#REDIRECT [[localcmd]]</text>
      <sha1>9z3kam8csnglro6zojwktt8jxmus17o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Locking In the Player</title>
    <ns>0</ns>
    <id>1073</id>
    <revision>
      <id>3226</id>
      <timestamp>2014-03-09T21:29:47Z</timestamp>
      <contributor>
        <ip>77.3.109.214</ip>
      </contributor>
      <comment>Created page with &quot;Immediately, as the door closes behind you, enemies appear all around each chamber.  Rather than inhabit a world where it was okay for the level designer to directly use the l...&quot;</comment>
      <text xml:space="preserve" bytes="3180">Immediately, as the door closes behind you, enemies appear all around each chamber.

Rather than inhabit a world where it was okay for the level designer to directly use the level to interact with the player, apparently all anyone remembers Doom actually doing is seal you in a giant thoughtless arena, lock the doors, and spawn guys until it was time to open the doors again and let you into the next, bigger arena.


Did Doom *ever* actually do that?
It did at least once. There's an exit trick where you go to press the button and, oops, floor drops out - combat bowl! but it signals itself as a trap (it's too early for the exit and you're carrying unused keys) and you're free to just dash across the room and leave by the escape route. It isn't really an arena with rounds of monsters, just a nasty 270-degree ambush.

&quot;Let's lock the player in a big room and just spawn guys for a while&quot; is like the level designer throwing up his hands and admitting he can't think of anything. 


like in Sock's maps where he mixes up the enemy types along with having the neat traps to play with. 

I dont mind barriers as long as they make sense. As a designer it can be a real slog to make intricate levels without them conforming to the flow of the level, however it's also poor to constrain your gameplay too much because you want to make something that is fun to replay. 
 The reason why Doom and Quake are nice to play is that you can approach the levels differently each time if you like, this is especially true for Quake as the rocket/grenade jumping allows for lots of very creative routes. 

But this pattern can be sparingly put to good use, can't it?

A fight is boring because the best strategy is to wait at the entrance to an arena and snipe enemies, rather than going in. 

But The solution to a player standing in a doorway shooting all the enemies is not to wait until he goes through it to spawn them and then arbitrarily block backward progression. That's a forced fix; a level design hack. 

* Perhaps an open enough layout and good enough AI that the enemies flank and come from behind. 
* Put a quad or other powerful weapons in the middle of the room. Players want the power, they will run in and grab it. Quad also has the built-in timer as an incentive to do as much damage as fast as possible, rather than being slow and cautious. 
* Create a space inside the arena that is tactically better than the entry point. For example, the player enters the room through a low tight hallway which all of the ogres in the arena can easily target. That hallway would be death and it's much easier to move into the larger central space and dodge grenades that way, than sit in a trench and have 10 grenades all bouncing around you. 
* This might be almost the same as the locked door, but have the player drop down into a space from above. This makes backtracking impossible until they find a new way out of the arena. What makes this different than locking the door behind you is you know and choose to go through the point of no return, rather than it being a cheap surprise. 
*Built fun close encounter combat instead of filling your big open spaces with toy soldiers.</text>
      <sha1>coyyeusqvx86rpx4arblt5vvxlwc2hs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3227</id>
      <parentid>3226</parentid>
      <timestamp>2014-03-09T21:37:14Z</timestamp>
      <contributor>
        <ip>77.3.109.214</ip>
      </contributor>
      <text xml:space="preserve" bytes="10328">Immediately, as the door closes behind you, enemies appear all around each chamber.

Rather than inhabit a world where it was okay for the level designer to directly use the level to interact with the player, apparently all anyone remembers Doom actually doing is seal you in a giant thoughtless arena, lock the doors, and spawn guys until it was time to open the doors again and let you into the next, bigger arena.


Did Doom *ever* actually do that?
It did at least once. There's an exit trick where you go to press the button and, oops, floor drops out - combat bowl! but it signals itself as a trap (it's too early for the exit and you're carrying unused keys) and you're free to just dash across the room and leave by the escape route. It isn't really an arena with rounds of monsters, just a nasty 270-degree ambush.

&quot;Let's lock the player in a big room and just spawn guys for a while&quot; is like the level designer throwing up his hands and admitting he can't think of anything. 


like in Sock's maps where he mixes up the enemy types along with having the neat traps to play with. 

I dont mind barriers as long as they make sense. As a designer it can be a real slog to make intricate levels without them conforming to the flow of the level, however it's also poor to constrain your gameplay too much because you want to make something that is fun to replay. 
The reason why Doom and Quake are nice to play is that you can approach the levels differently each time if you like, this is especially true for Quake as the rocket/grenade jumping allows for lots of very creative routes. 

But this pattern can be sparingly put to good use, can't it?

A fight is boring because the best strategy is to wait at the entrance to an arena and snipe enemies, rather than going in. 

But The solution to a player standing in a doorway shooting all the enemies is not to wait until he goes through it to spawn them and then arbitrarily block backward progression. That's a forced fix; a level design hack. 

It's actually a hard problem because the doorway is the safest spot in the room. It's a funnel, you're protected from all threats and can easily scoot to the side when you need to reload or whatever. 

You'll be hard pressed to give me a better vantage point than the door to the arena. Unless I'm low on ammo and HAVE to enter the arena to get more but even then ... I'm going to circle back to the doorway. 

Back spawning isn't the answer because that's pretty much universally loathed and considered cheap. 

&quot;This might be almost the same as the locked door, but have the player drop down into a space from above. This makes backtracking impossible until they find a new way out of the arena. What makes this different than locking the door behind you is you know and choose to go through the point of no return, rather than it being a cheap surprise.&quot; 

This is usually a good solution although it's also pretty obvious these days. There were several times in RAGE I saw a drop down and saved immediately - you KNOW there's an ambush waiting just beyond that invisible trigger brush on the floor. 

But Left for Dead and Uncharted developers have talked about this tactic. L4D has a name for it but I can't recall right now ... but yes, it's all about player initiation. They don't have to activate the encounter until they're ready. That at least gives them some empowerment and control over the situation.

Dropdowns, lifts that don't go back down again, wind tunnels, and other one-way means of spitting you into a room do all function the same way as back-locking the door. They represent a designer using his power as &quot;guy who built the place&quot; to remove the player's power to turn around and leave a situation he doesn't feel ready for or in adequate control of. 

Any time you leverage that omnipotent designer power, you have to be very measured in how much force you apply. Sometimes it's okay, like when you know better than the player does (since you're the only one who understands the next room) that he's ready for it and doesn't need to backpedal and you've decided it's a good time for a panic beat. Using that power now and then to spike the pacing is okay - relying on it just wears the player down. 

Eliminating optimal but un-fun choices like sniping from a safe spot (like the door) is also a good time to use the power, but the rules still apply. When you do it with architecture that has that backblocking effect as a natural outcome (the dropdown, the lift) you're playing a little more fair, and also not being quite so naked in your intrusion on the experience. func_plats don't go back down if you stay on them - players already know that. If you can't fly back up through a hole, that's the game world doing that, and players understand why. Doors don't always suddenly lock - someone did that. 

Rendering the optimal un-fun choice non-optimal by moving some brushes, shifting where you put the ogres, and changing the nature of the cover just a little bit is a lot more subtle, and leads to a much smoother experience since you're encouraging the player to choose to dive into that room rather than forcing him to. 

interesting point that a vertical fall-off is another variant of the same basic pattern. In zendar, I really enjoyed the func_illusionary window that you can jump through down into a room where you're ambushed by a fiend. This is an optional side area, though, so the ambush didn't feel cheap - and you get a bunch of rewards for finding that area and surviving the trap. 

IMHO Quake is about traps, ambushes and locked areas, if you take that away you are left with just a standard FPS game. In Quake the environment is trying to kill you, with crushers, spike shooters and large pits of lava/slime. Quake is about the fear and dread of what is around you in all directions and being thrown into difficult situations. 

I think it is perfectly fine to have locked areas if the visual language is right, single items on Indiana style plinths, floors covered in blood where traps trigger or dark ominous holes in walls around powerful items to collect. Creating visual clues for the observant player is all part of the charm of the setup. 

&quot;Knowing where the trap is - is half the battle won&quot; 

The key to designing good ambush areas is there should be plenty of cover (destructible or moving), multiple routes around the space and it should be obvious where all supplies are or going to be. Ideally a player should be allowed to explore the area first, let the player feel the moment, the silence before the storm.

The final fight is the ONLY locked area in the map, but it is very large with all the monsters spawning from specific locations. There is even a side area with supplies that the player can go to if they don't want to move around the central hub. All of the monsters are setup to wake up on sight of the player (not other monsters) and there are counters on all waves to allow the player to control the pace of the fight. 

I think the &quot;locked in&quot; final fight in Zendar works because the player knows this area already, they have passed through it several times and understand where everything is. The environment is a known quantity, the only thing that has changed is not knowing where the waves of encounters are going to initially spawn. 

Locking players into confined areas is a good game mechanic if used sparely and with good supporting visual language. Traps and ambushes are the life blood of Quake and IMHO think it would be unwise to ignore this fact if creating new maps. 

* Perhaps an open enough layout and good enough AI that the enemies flank and come from behind. 
* Put a quad or other powerful weapons in the middle of the room. Players want the power, they will run in and grab it. Quad also has the built-in timer as an incentive to do as much damage as fast as possible, rather than being slow and cautious. 
* Create a space inside the arena that is tactically better than the entry point. For example, the player enters the room through a low tight hallway which all of the ogres in the arena can easily target. That hallway would be death and it's much easier to move into the larger central space and dodge grenades that way, than sit in a trench and have 10 grenades all bouncing around you.  E.g. Backspawn tarbabies behind the player, yay! (can't we just make a firing squad follow the player and execute him if he turns around? &quot;BWWEEEEP BWWEEEEEPPP BWEEEEPPP TURN AROUND YOU ARE LEAVING THE COMBAT ZONE BWWEEEEP BWWEEEEEPPP BWEEEEPPP &quot;)
* This might be almost the same as the locked door, but have the player drop down into a space from above. This makes backtracking impossible until they find a new way out of the arena. What makes this different than locking the door behind you is you know and choose to go through the point of no return, rather than it being a cheap surprise. 
*Built fun close encounter combat instead of filling your big open spaces with toy soldiers.
* Place a trap in the corridor before the doorway - once the player sees the monsters they're unwilling to backpedal into a nailshooter or pit of death.   It doesn't have to be a literal trap, just a hazard that you can only navigate slowly and carefully, and therefore can't just backpedal through at full speed. A ladder for example. 
* You could combine the drop-down and trapped-retreat-route to create a soft obstacle. Have a series of short drops, like little cliff face things, where you can jump back up each time, but you can't just walk back up like steps. That way it's slow to retreat and requires some concentration to pull off, but you maintain two-way flow through the level to return for ammo or health. Obviously this is much less effective if the enemies at the bottom are melee-based, as you can escape them in a single jump. 
* Place a big, obvious button in the middle of the room - when it's pressed, the fight starts.
* Don't have doorways. Build organic spaces that aren't conceptually divided by corridors and thresholds, and there's never a doorway for the player to stand in. He's just always somewhere where there are knights in front and ogres above and scrags circling, but still entirely controls the pace of his own progression.
* Give them a mega health beforehand.  



Behaviour depends on the player though.</text>
      <sha1>st85z8wtlshzbf0zsars0p0j1l7dycu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>LordHavoc</title>
    <ns>0</ns>
    <id>378</id>
    <revision>
      <id>634</id>
      <timestamp>2008-04-16T15:27:17Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: ..Programmer of [[Darkplaces]]</comment>
      <text xml:space="preserve" bytes="30">..Programmer of [[Darkplaces]]</text>
      <sha1>cd9q4eaypipa914yrysh2he0swfd82g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Main P</title>
    <ns>0</ns>
    <id>350</id>
    <redirect title="Main Page" />
    <revision>
      <id>573</id>
      <timestamp>2008-04-09T04:53:16Z</timestamp>
      <contributor>
        <ip>96.234.51.88</ip>
      </contributor>
      <comment>Inside 3D Error</comment>
      <text xml:space="preserve" bytes="23">#REDIRECT [[Main Page]]</text>
      <sha1>modmu9pqjk76od7mzb24xgw5a8qpfof</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Main Page</title>
    <ns>0</ns>
    <id>1</id>
    <revision>
      <id>1</id>
      <timestamp>2007-10-30T16:04:47Z</timestamp>
      <contributor>
        <username>MediaWiki default</username>
        <id>0</id>
      </contributor>
      <text xml:space="preserve" bytes="449">&lt;big&gt;'''MediaWiki has been successfully installed.'''&lt;/big&gt;

Consult the [http://meta.wikimedia.org/wiki/Help:Contents User's Guide] for information on using the wiki software.

== Getting started ==

* [http://www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
* [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
* [http://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]</text>
      <sha1>11sfdpsavc6prom4f32muy7cdiqy9ko</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2</id>
      <parentid>1</parentid>
      <timestamp>2007-10-30T16:12:40Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="1403">[[Quake Wiki]]

* [[Installing Quake]]
* [[Singleplayer Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Gameplay Tips]]

[[Quake Mapping]]

* [[Mapping Tools]]
* [[Textures]]
* [[Entity Guide]]
* [[Mapping Tutorials]]
* [[Map List]]
* [[Mapping Links]]

[[QuakeC]] / [[Modding]]

* [[Getting Started]] (links to download id1 qc and various important resources)
* [[Modding Tools]]
* [[QuakeC Basics]]
* [[Builtin Function List]]
* [[System Globals]]
* [[System Fields]]
* [[MenuQC Basics]]
* [[MenuQC Builtin Function List]]
* [[MenuQC System Constants]]
* [[QuakeC Tips]]
* [[QuakeC Tutorials]]
* [[Free Resources]]
* [[Mod List]]
* [[QuakeC Compilers List]]
* [[Legal Status]]

[[Quake Movies]]

* [[Demo Tools]]
* [[Movie List]]

[[Quake Engine Info]]

* [[Engine Getting Started]]
* [[Engine and Port List]]
* [[QSG Extensions]]
* [[Engine Tutorials]]
* [[Enhanced Engine Features]]
* [[Engines]]

[[Quake Technical]]

* [[Quake Error Guide]]
* [[Console Variables]]
* [[Console Commands]]
* [[Quake Bugs]]
* [[Command Line Parameters]]
* [[Quake File Formats]]
* [[Quake Network Messages]]
* [[Temporary Entity Messages]]
* [[Quake Font]]
* [[Quake Palette]]
* [[Quake Tools]]

[[Quake Wiki]]

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Statistics and Info]]
* [[Site Help]]
* [[Register]]
* [[Preferences]]
* [[Search]]
* [[Discussion]]
* [[Links]]</text>
      <sha1>j2v4remat10iu5q0gg613j7o8hsdby7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3</id>
      <parentid>2</parentid>
      <timestamp>2007-10-30T16:14:30Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1487">__NOTOC__
Welcome to the Quake Wiki.

===[[Quake Gameplay]]===

* [[Installing Quake]]
* [[Singleplayer Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Gameplay Tips]]

===[[Quake Mapping]]===

* [[Mapping Tools]]
* [[Textures]]
* [[Entity Guide]]
* [[Mapping Tutorials]]
* [[Map List]]
* [[Mapping Links]]

===[[QuakeC]] / [[Modding]]===

* [[Getting Started]] (links to download id1 qc and various important resources)
* [[Modding Tools]]
* [[QuakeC Basics]]
* [[Builtin Function List]]
* [[System Globals]]
* [[System Fields]]
* [[MenuQC Basics]]
* [[MenuQC Builtin Function List]]
* [[MenuQC System Constants]]
* [[QuakeC Tips]]
* [[QuakeC Tutorials]]
* [[Free Resources]]
* [[Mod List]]
* [[QuakeC Compilers List]]
* [[Legal Status]]

===[[Quake Movies]]===

* [[Demo Tools]]
* [[Movie List]]

===[[Quake Engine Info]]===

* [[Engine Getting Started]]
* [[Engine and Port List]]
* [[QSG Extensions]]
* [[Engine Tutorials]]
* [[Enhanced Engine Features]]
* [[Engines]]

===[[Quake Technical]]===

* [[Quake Error Guide]]
* [[Console Variables]]
* [[Console Commands]]
* [[Quake Bugs]]
* [[Command Line Parameters]]
* [[Quake File Formats]]
* [[Quake Network Messages]]
* [[Temporary Entity Messages]]
* [[Quake Font]]
* [[Quake Palette]]
* [[Quake Tools]]

===[[Quake Wiki]]===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Statistics and Info]]
* [[Site Help]]
* [[Register]]
* [[Preferences]]
* [[Search]]
* [[Discussion]]
* [[Links]]</text>
      <sha1>7fkn7sse9ydt9u4ybrreuduc0k604dg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>4</id>
      <parentid>3</parentid>
      <timestamp>2007-10-30T16:19:57Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1459">__NOTOC__
Welcome to the Quake Wiki.

===Quake Gameplay===

* [[Installing Quake]]
* [[Singleplayer Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Gameplay Tips]]

===Quake Mapping===

* [[Mapping Tools]]
* [[Textures]]
* [[Entity Guide]]
* [[Mapping Tutorials]]
* [[Map List]]
* [[Mapping Links]]

===[[QuakeC]] / Modding===

* [[Getting Started]] (links to download id1 qc and various important resources)
* [[Modding Tools]]
* [[QuakeC Basics]]
* [[Builtin Function List]]
* [[System Globals]]
* [[System Fields]]
* [[MenuQC Basics]]
* [[MenuQC Builtin Function List]]
* [[MenuQC System Constants]]
* [[QuakeC Tips]]
* [[QuakeC Tutorials]]
* [[Free Resources]]
* [[Mod List]]
* [[QuakeC Compilers List]]
* [[Legal Status]]

===Quake Movies===

* [[Demo Tools]]
* [[Movie List]]

===Quake Engine Info===

* [[Engine Getting Started]]
* [[Engine and Port List]]
* [[QSG Extensions]]
* [[Engine Tutorials]]
* [[Enhanced Engine Features]]
* [[Engines]]

===Quake Technical===

* [[Quake Error Guide]]
* [[Console Variables]]
* [[Console Commands]]
* [[Quake Bugs]]
* [[Command Line Parameters]]
* [[Quake File Formats]]
* [[Quake Network Messages]]
* [[Temporary Entity Messages]]
* [[Quake Font]]
* [[Quake Palette]]
* [[Quake Tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Statistics and Info]]
* [[Site Help]]
* [[Register]]
* [[Preferences]]
* [[Search]]
* [[Discussion]]
* [[Links]]</text>
      <sha1>l7w2ug9merdkmdqoyl20wmdl8nwnvx7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>17</id>
      <parentid>4</parentid>
      <timestamp>2007-10-30T16:47:42Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1467">__NOTOC__
Welcome to the Quake Wiki.

===Quake Gameplay===

* [[Installing Quake]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Installing addons]]
* [[Gameplay tips]]

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[Builtin function list]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[Mod list]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting gtarted]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[Console variables]]
* [[Console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Statistics and info]]
* [[Site help]]
* [[Register]]
* [[Preferences]]
* [[Search]]
* [[Discussion]]
* [[Links]]</text>
      <sha1>aonqd5dw73ih7jkuula3jubmg7vu3wq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>40</id>
      <parentid>17</parentid>
      <timestamp>2007-10-30T17:35:02Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1467">__NOTOC__
Welcome to the Quake Wiki.

===Quake Gameplay===

* [[Installing Quake]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Installing addons]]
* [[Gameplay tips]]

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[Builtin function list]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[Mod list]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[Console variables]]
* [[Console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Statistics and info]]
* [[Site help]]
* [[Register]]
* [[Preferences]]
* [[Search]]
* [[Discussion]]
* [[Links]]</text>
      <sha1>lya6sevq988kurolbmqq0saaxpj56g0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>48</id>
      <parentid>40</parentid>
      <timestamp>2007-10-30T17:44:30Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1477">__NOTOC__
Welcome to the Quake Wiki.

===Quake Gameplay===

* [[Installing Quake]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Installing addons]]
* [[Gameplay tips]]

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[Builtin function list]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[Mod list]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[Console variables]]
* [[Console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Register]]
* [[Preferences]]
* [[Search]]
* [[Discussion]]
* [[Links]]</text>
      <sha1>qofgg950yp14kh7d7o2zsidt0qvhudn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>59</id>
      <parentid>48</parentid>
      <timestamp>2007-10-30T18:14:45Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1481">__NOTOC__
Welcome to the Quake Wiki.

===Quake Gameplay===

* [[Installing Quake]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Installing addons]]
* [[Gameplay tips]]

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[List of builtin functions]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[Mod list]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[Console variables]]
* [[Console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Register]]
* [[Preferences]]
* [[Search]]
* [[Discussion]]
* [[Links]]</text>
      <sha1>bzkbnkropkukp80s3szzyerjnkkiyh6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>63</id>
      <parentid>59</parentid>
      <timestamp>2007-10-30T18:24:33Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1418">__NOTOC__
Welcome to the Quake Wiki.

===Quake Gameplay===

* [[Installing Quake]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Installing addons]]
* [[Gameplay tips]]

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[List of builtin functions]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[Mod list]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[Console variables]]
* [[Console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>awihrf9zzgyznqf7wdswvph3nskn5mk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>98</id>
      <parentid>63</parentid>
      <timestamp>2007-10-30T19:57:44Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="1434">__NOTOC__
Welcome to the Quake Wiki.

===Quake Gameplay===

* [[Installing Quake]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Installing addons]]
* [[Gameplay tips]]

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[List of builtin functions]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[Mod list]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>l32tpek9qmgrcnn2566b0d8j0tfdmrz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>113</id>
      <parentid>98</parentid>
      <timestamp>2007-10-30T21:46:04Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1438">__NOTOC__
Welcome to the Quake Wiki.

===Quake Gameplay===

* [[Installing Quake]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Installing addons]]
* [[Gameplay tips]]

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[List of builtin functions]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[List of mods]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>ifevoflyo5dm926gjb916q40syjx4xt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>204</id>
      <parentid>113</parentid>
      <timestamp>2007-10-31T02:32:23Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="1943">__NOTOC__
Welcome to the Quake Wiki.

The old one's at http://wiki.quakesrc.org, so start copying stuff over. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Quake Gameplay===

* [[Installing Quake]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Installing addons]]
* [[Gameplay tips]]

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[List of builtin functions]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[List of mods]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>cglqxfkfuol7mckmiqgq7gvopesg9hp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>621</id>
      <parentid>204</parentid>
      <timestamp>2008-04-14T20:35:00Z</timestamp>
      <contributor>
        <ip>85.134.153.142</ip>
      </contributor>
      <comment>/* Quake Engine Info */</comment>
      <text xml:space="preserve" bytes="1966">__NOTOC__
Welcome to the Quake Wiki.

The old one's at http://wiki.quakesrc.org, so start copying stuff over. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Quake Gameplay===

* [[Installing Quake]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Installing addons]]
* [[Gameplay tips]]

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[List of builtin functions]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[List of mods]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine Standards]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>1wggk772jzk50vhy6p7pjmm4zaol4eu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>635</id>
      <parentid>621</parentid>
      <timestamp>2008-04-20T18:08:22Z</timestamp>
      <contributor>
        <ip>79.78.39.159</ip>
      </contributor>
      <text xml:space="preserve" bytes="1981">__NOTOC__
Welcome to the Quake Wiki.

The old was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Quake Gameplay===

* [[Installing Quake]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Installing addons]]
* [[Gameplay tips]]

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[List of builtin functions]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[List of mods]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine Standards]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>qln6a9ckabcz1vtiv58byuscohmbwh6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>907</id>
      <parentid>635</parentid>
      <timestamp>2008-07-11T20:51:54Z</timestamp>
      <contributor>
        <ip>69.205.88.53</ip>
      </contributor>
      <comment>/* Quake Gameplay */</comment>
      <text xml:space="preserve" bytes="2031">__NOTOC__
Welcome to the Quake Wiki.

The old was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

tmcEL3  &lt;a href=&quot;http://fjdtwauurezr.com/&quot;&gt;fjdtwauurezr&lt;/a&gt;, [url=http://ewpwmbfdnhfh.com/]ewpwmbfdnhfh[/url], [link=http://osisqxkxvgpq.com/]osisqxkxvgpq[/link], http://dxmyidctxvdf.com/

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[List of builtin functions]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[List of mods]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine Standards]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>lzan7pc8x52r885m4bompa6y2xsh7tk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>908</id>
      <parentid>907</parentid>
      <timestamp>2008-07-21T19:59:24Z</timestamp>
      <contributor>
        <ip>91.201.193.194</ip>
      </contributor>
      <text xml:space="preserve" bytes="1842">__NOTOC__
Welcome to the Quake Wiki.

The old was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[List of builtin functions]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[List of mods]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine Standards]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>sdp8otigx1mykj4el5qs9kzbfs7tgor</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>913</id>
      <parentid>908</parentid>
      <timestamp>2008-08-04T23:51:52Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <comment>/* [[QuakeC]] / Modding */</comment>
      <text xml:space="preserve" bytes="1857">__NOTOC__
Welcome to the Quake Wiki.

The old was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[List of builtin functions]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[EXT_CSQC]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[List of mods]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine Standards]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>pshyd1afihtmdd38npcsz4c81mdlmic</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>914</id>
      <parentid>913</parentid>
      <timestamp>2008-08-04T23:52:29Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <comment>/* [[QuakeC]] / Modding */</comment>
      <text xml:space="preserve" bytes="1912">__NOTOC__
Welcome to the Quake Wiki.

The old was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[List of builtin functions]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[EXT_CSQC]]
* [[EXT CSQC System Globals Fields and Builtins List]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[List of mods]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine Standards]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>cgu5wdshemi0zcz1da6cff00uzor9u0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>921</id>
      <parentid>914</parentid>
      <timestamp>2008-08-29T21:27:36Z</timestamp>
      <contributor>
        <ip>71.108.190.247</ip>
      </contributor>
      <text xml:space="preserve" bytes="1920">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Quake Mapping===

* [[Mapping tools]]
* [[Textures]]
* [[Entity guide]]
* [[Mapping tutorials]]
* [[Map list]]
* [[Mapping links]]

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[List of builtin functions]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[EXT_CSQC]]
* [[EXT CSQC System Globals Fields and Builtins List]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[List of mods]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine Standards]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>stard3ulutmp953px4kfto1lo0dygc7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>923</id>
      <parentid>921</parentid>
      <timestamp>2008-09-02T01:42:26Z</timestamp>
      <contributor>
        <ip>203.29.67.179</ip>
      </contributor>
      <comment>/* Quake Mapping */</comment>
      <text xml:space="preserve" bytes="1792">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

PENIS

===[[QuakeC]] / Modding===

* [[Getting started]] (links to download id1 qc and various important resources)
* [[Modding tools]]
* [[QuakeC basics]]
* [[List of builtin functions]]
* [[System globals]]
* [[System fields]]
* [[MenuQC basics]]
* [[MenuQC builtin function list]]
* [[MenuQC system constants]]
* [[EXT_CSQC]]
* [[EXT CSQC System Globals Fields and Builtins List]]
* [[QuakeC tips]]
* [[QuakeC tutorials]]
* [[Free resources]]
* [[List of mods]]
* [[List of QuakeC compilers]]
* [[Legal status]]

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine Standards]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>a05sqxlcylfx7mx9ylwttk1hqtlpihb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>924</id>
      <parentid>923</parentid>
      <timestamp>2008-09-02T01:43:04Z</timestamp>
      <contributor>
        <ip>203.29.67.179</ip>
      </contributor>
      <comment>/* [[QuakeC]] / Modding */</comment>
      <text xml:space="preserve" bytes="1290">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

PENIS

PENIS

===Quake Movies===

* [[Demo tools]]
* [[Movie list]]

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine Standards]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>9c8we5ch91umy3vpu8qk74vwesdiwvn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>925</id>
      <parentid>924</parentid>
      <timestamp>2008-09-02T01:44:15Z</timestamp>
      <contributor>
        <ip>203.29.67.179</ip>
      </contributor>
      <comment>/* Quake Movies */</comment>
      <text xml:space="preserve" bytes="1276">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

PENIS

PENIS

JESUS HAD SEX WITH MANY LITTLE CHILDREN

===Quake Engine Info===

* [[Engine getting started]]
* [[List of engines and ports]]
* [[QSG extensions]]
* [[Engine Standards]]
* [[Engine tutorials]]
* [[Enhanced engine features]]
* [[Engines]]

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>5ijhv5wrw61omhwy4ff7n31wrz2ffk3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>926</id>
      <parentid>925</parentid>
      <timestamp>2008-09-02T01:45:01Z</timestamp>
      <contributor>
        <ip>203.29.67.179</ip>
      </contributor>
      <comment>/* Quake Engine Info */</comment>
      <text xml:space="preserve" bytes="1095">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

PENIS

PENIS

JESUS HAD SEX WITH MANY LITTLE CHILDREN

clear all please

===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>kyondom0nxo6r36d1ys90fexo52d9b9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>927</id>
      <parentid>926</parentid>
      <timestamp>2008-09-02T01:46:00Z</timestamp>
      <contributor>
        <ip>203.29.67.179</ip>
      </contributor>
      <comment>Replacing page with 'VAGINA

MANGINA

PENIS

TITS

ASSHOLE

BUMFLUFF

FUCK YOU ALL'</comment>
      <text xml:space="preserve" bytes="61">VAGINA

MANGINA

PENIS

TITS

ASSHOLE

BUMFLUFF

FUCK YOU ALL</text>
      <sha1>8occmmrkik2v8sup43vmqpj7jizw2rq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>928</id>
      <parentid>927</parentid>
      <timestamp>2008-09-02T01:46:22Z</timestamp>
      <contributor>
        <ip>203.29.67.179</ip>
      </contributor>
      <text xml:space="preserve" bytes="1023">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.


===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>p8b49oav5q6smv2rk9qb8r5b5u6edfx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>929</id>
      <parentid>928</parentid>
      <timestamp>2008-10-15T16:54:29Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <text xml:space="preserve" bytes="1055">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.


===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]
* [[List of builtin functions]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>3bdch47a34wvap74h6kspdy5ft60phg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>930</id>
      <parentid>929</parentid>
      <timestamp>2008-10-15T16:56:27Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <text xml:space="preserve" bytes="1070">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.


===Quake Technical===

* [[Quake error guide]]
* [[List of console variables]]
* [[List of console commands]]
* [[Quake bugs]]
* [[Command line parameters]]
* [[Quake file formats]]
* [[Quake network messages]]
* [[Temporary entity messages]]
* [[Quake font]]
* [[Quake palette]]
* [[Quake tools]]
* [[List of builtin functions]]
* [[EXT CSQC]]

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>0gsldn5a67lh31x6y4hb2k3bfri8lfh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>939</id>
      <parentid>930</parentid>
      <timestamp>2008-11-12T11:48:38Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>Major attempt at giving structure to the front page.</comment>
      <text xml:space="preserve" bytes="1956">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Information for Players===
* [[Getting Started]] (Getting, installing, patching, running Quake)
* Playing Quake
** [[Single Player]] (monsters, weapons, tips, map guide, walkthrough, etc.)
** [[Speed Running]]
** [[Multiplayer]] (connecting to a server, QW vs. NQ, tactics, map guide, etc.)
** [[Demos]] (recording, playing)
** [[Bots]] (or merge this into &quot;mods&quot; below?)
* [[Engines]] (using, configuring, compatability)
* Add-on Content
** [[Playing Mods]]
** [[Playing Maps]]
** [[Customizing Quake]] (all the HUD/crosshair/replacement texture/etc. stuff )
* Technical
** [[Quake error guide|Runtime Errors]]
** [[Quake bugs]]
** [[Cvars]]
** [[Console commands]]
** [[Command line parameters]]
** [[Config Files]]
* [[Tools]] (dzip, fun name makers, idgamma , front-ends)

===Information for Developers===
* [[Developing Content]]
** [[Coding QuakeC]]
** [[Modelling]] (and skinning)
** [[Mapping]]
** [[Making Textures]] (both wad and tga/etc, and skyboxes?)
** [[Making Graphics]] (lmp/wad/spr, but also tga/etc.)
** [[Making Sounds]]
** [[Quake file formats]]
** [[Quake tools|Development Tools]]
* [[Engine Development]]
** [[Network Protocols]]
** [[Extensions]]
* [[Tool Development]] (compilers, file convertes, etc.)

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>7adwkgilwksruvbvuymc6d6snhejc0q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>941</id>
      <parentid>939</parentid>
      <timestamp>2008-11-12T11:53:11Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>/* Information for Developers */</comment>
      <text xml:space="preserve" bytes="1963">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Information for Players===
* [[Getting Started]] (Getting, installing, patching, running Quake)
* Playing Quake
** [[Single Player]] (monsters, weapons, tips, map guide, walkthrough, etc.)
** [[Speed Running]]
** [[Multiplayer]] (connecting to a server, QW vs. NQ, tactics, map guide, etc.)
** [[Demos]] (recording, playing)
** [[Bots]] (or merge this into &quot;mods&quot; below?)
* [[Engines]] (using, configuring, compatability)
* Add-on Content
** [[Playing Mods]]
** [[Playing Maps]]
** [[Customizing Quake]] (all the HUD/crosshair/replacement texture/etc. stuff )
* Technical
** [[Quake error guide|Runtime Errors]]
** [[Quake bugs]]
** [[Cvars]]
** [[Console commands]]
** [[Command line parameters]]
** [[Config Files]]
* [[Tools]] (dzip, fun name makers, idgamma , front-ends)

===Information for Developers===
* [[Developing Content]]
** [[Coding QuakeC]]
** [[Modelling]] (and skinning)
** [[Mapping]]
** [[Making Textures]] (both wad and tga/etc, and skyboxes?)
** [[Making Graphics]] (lmp/wad/spr, but also tga/etc.)
** [[Making Sounds]]
** [[Quake file formats]]
** [[Quake tools|Development Tools]]
* [[Engine Development]]
** [[Network Protocols]]
** [[Extensions]]
** ...
* [[Tool Development]] (compilers, file convertes, etc.)

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>cgn1d861n5t4ntchxda4p1k1v8mv4rr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>942</id>
      <parentid>941</parentid>
      <timestamp>2008-11-12T11:55:31Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>/* Information for Players */</comment>
      <text xml:space="preserve" bytes="2031">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Information for Players===
* [[Getting Started]] (Getting, installing, patching, running Quake)
* Playing Quake
** [[Single Player]] (monsters, weapons, tips, map guide, walkthrough, etc.)
** [[Speed Running]]
** [[Multiplayer]] (connecting to a server, QW vs. NQ, tactics, map guide, etc.)
** [[Demos]] (recording, playing)
** [[Bots]] (or merge this into &quot;mods&quot; below?)
* [[Engines]] (list, using, configuring, compatability)
** [[Quake on other platforms]] (dreamcast, DS, iPhone, etc.)
* Add-on Content
** [[Playing Mods]]
** [[Playing Maps]]
** [[Customizing Quake]] (all the HUD/crosshair/replacement texture/etc. stuff )
* Technical
** [[Quake error guide|Runtime Errors]]
** [[Quake bugs]]
** [[Cvars]]
** [[Console commands]]
** [[Command line parameters]]
** [[Config Files]]
* [[Tools]] (dzip, fun name makers, idgamma , front-ends)

===Information for Developers===
* [[Developing Content]]
** [[Coding QuakeC]]
** [[Modelling]] (and skinning)
** [[Mapping]]
** [[Making Textures]] (both wad and tga/etc, and skyboxes?)
** [[Making Graphics]] (lmp/wad/spr, but also tga/etc.)
** [[Making Sounds]]
** [[Quake file formats]]
** [[Quake tools|Development Tools]]
* [[Engine Development]]
** [[Network Protocols]]
** [[Extensions]]
** ...
* [[Tool Development]] (compilers, file convertes, etc.)

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>kx8kl4cuf32lsgvg52yeoq1y4awck4r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>944</id>
      <parentid>942</parentid>
      <timestamp>2008-11-12T12:02:52Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>/* Information for Players */</comment>
      <text xml:space="preserve" bytes="1984">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Information for Players===
* [[Getting Started]]
* Playing Quake
** [[Single Player]] (monsters, weapons, tips, map guide, walkthrough, etc.)
** [[Speed Running]]
** [[Multiplayer]] (connecting to a server, QW vs. NQ, tactics, map guide, etc.)
** [[Demos]] (recording, playing)
** [[Bots]] (or merge this into &quot;mods&quot; below?)
* [[Engines]] (list, using, configuring, compatability)
** [[Quake on other platforms]] (dreamcast, DS, iPhone, etc.)
* Add-on Content
** [[Playing Mods]]
** [[Playing Maps]]
** [[Customizing Quake]] (all the HUD/crosshair/replacement texture/etc. stuff )
* Technical
** [[Quake error guide|Runtime Errors]]
** [[Quake bugs]]
** [[Cvars]]
** [[Console commands]]
** [[Command line parameters]]
** [[Config Files]]
* [[Tools]] (dzip, fun name makers, idgamma , front-ends)

===Information for Developers===
* [[Developing Content]]
** [[Coding QuakeC]]
** [[Modelling]] (and skinning)
** [[Mapping]]
** [[Making Textures]] (both wad and tga/etc, and skyboxes?)
** [[Making Graphics]] (lmp/wad/spr, but also tga/etc.)
** [[Making Sounds]]
** [[Quake file formats]]
** [[Quake tools|Development Tools]]
* [[Engine Development]]
** [[Network Protocols]]
** [[Extensions]]
** ...
* [[Tool Development]] (compilers, file convertes, etc.)

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>bsongxkoafm06yh6lrk3fjm2qht4b83</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>946</id>
      <parentid>944</parentid>
      <timestamp>2008-11-12T12:07:35Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>/* Information for Players */</comment>
      <text xml:space="preserve" bytes="1922">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Information for Players===
* [[Getting Started]]
* Playing Quake
** [[Single Player]] (monsters, weapons, tips, map guide, walkthrough, etc.)
** [[Speed Running]]
** [[Multiplayer]] (connecting to a server, QW vs. NQ, tactics, map guide, etc.)
** [[Demos]] (recording, playing)
** [[Bots]] (or merge this into &quot;mods&quot; below?)
* [[Engines]] (list, using, configuring, compatability)
* Add-on Content
** [[Playing Mods]]
** [[Playing Maps]]
** [[Customizing Quake]] (all the HUD/crosshair/replacement texture/etc. stuff )
* Technical
** [[Quake error guide|Runtime Errors]]
** [[Quake bugs]]
** [[Cvars]]
** [[Console commands]]
** [[Command line parameters]]
** [[Config Files]]
* [[Tools]] (dzip, fun name makers, idgamma , front-ends)

===Information for Developers===
* [[Developing Content]]
** [[Coding QuakeC]]
** [[Modelling]] (and skinning)
** [[Mapping]]
** [[Making Textures]] (both wad and tga/etc, and skyboxes?)
** [[Making Graphics]] (lmp/wad/spr, but also tga/etc.)
** [[Making Sounds]]
** [[Quake file formats]]
** [[Quake tools|Development Tools]]
* [[Engine Development]]
** [[Network Protocols]]
** [[Extensions]]
** ...
* [[Tool Development]] (compilers, file convertes, etc.)

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>fjisf9pcjwtn4pm048uf28qaxqpifob</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>947</id>
      <parentid>946</parentid>
      <timestamp>2008-11-12T12:10:17Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <minor/>
      <comment>/* Information for Players */</comment>
      <text xml:space="preserve" bytes="1942">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Information for Players===
* [[Getting Started]]
* Playing Quake
** [[Single Player]] (monsters, weapons, tips, map guide, walkthrough, etc.)
** [[Speed Running]]
** [[Multiplayer]] (connecting to a server, QW vs. NQ, tactics, map guide, etc.)
** [[Demos]] (recording, playing)
** [[Bots]] (or merge this into &quot;mods&quot; below?)
* [[Engines]] (list, using, configuring, compatability)
* Add-on Content
** [[Playing Mods]]
** [[Playing Maps]]
** [[Customizing Quake]] (all the HUD/crosshair/replacement texture/etc. stuff )
* Technical
** [[Quake error guide|Runtime Errors]]
** [[Quake bugs]]
** [[Cvars]]
** [[Console commands]]
** [[Command line parameters]]
** [[Config Files]]
* [[Tools]] (dzip, fun name makers, idgamma , front-ends, server browsers...)

===Information for Developers===
* [[Developing Content]]
** [[Coding QuakeC]]
** [[Modelling]] (and skinning)
** [[Mapping]]
** [[Making Textures]] (both wad and tga/etc, and skyboxes?)
** [[Making Graphics]] (lmp/wad/spr, but also tga/etc.)
** [[Making Sounds]]
** [[Quake file formats]]
** [[Quake tools|Development Tools]]
* [[Engine Development]]
** [[Network Protocols]]
** [[Extensions]]
** ...
* [[Tool Development]] (compilers, file convertes, etc.)

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>mk20xmw6eei6yga570ng3epkfxr1v5f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>948</id>
      <parentid>947</parentid>
      <timestamp>2008-11-12T22:36:31Z</timestamp>
      <contributor>
        <ip>64.175.155.252</ip>
      </contributor>
      <text xml:space="preserve" bytes="1954">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from archive.org. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Information for Players===
* [[Getting Started]]
* Playing Quake
** [[Single Player]] (monsters, weapons, tips, map guide, walkthrough, etc.)
** [[Speed Running]]
** [[Multiplayer]] (connecting to a server, QW vs. NQ, tactics, map guide, etc.)
** [[Demos]] (recording, playing)
** [[Bots]] (or merge this into &quot;mods&quot; below?)
* [[Engines]] (list, using, configuring, compatability)
* Add-on Content
** [[Playing Mods]]
** [[Playing Maps]]
** [[Customizing Quake]] (all the HUD/crosshair/replacement texture/etc. stuff )
* Technical
** [[Quake error guide|Runtime Errors]]
** [[Quake bugs]]
** [[Console variables]]
** [[Console commands]]
** [[Command line parameters]]
** [[Config Files]]
* [[Tools]] (dzip, fun name makers, idgamma , front-ends, server browsers...)

===Information for Developers===
* [[Developing Content]]
** [[Coding QuakeC]]
** [[Modelling]] (and skinning)
** [[Mapping]]
** [[Making Textures]] (both wad and tga/etc, and skyboxes?)
** [[Making Graphics]] (lmp/wad/spr, but also tga/etc.)
** [[Making Sounds]]
** [[Quake file formats]]
** [[Quake tools|Development Tools]]
* [[Engine Development]]
** [[Network Protocols]]
** [[Extensions]]
** ...
* [[Tool Development]] (compilers, file convertes, etc.)

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>fiqzscw4du8ahn607s8zzd0142ivtox</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>949</id>
      <parentid>948</parentid>
      <timestamp>2008-11-14T07:33:22Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="2024">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Information for Players===
* [[Getting Started]]
* Playing Quake
** [[Single Player]] (monsters, weapons, tips, map guide, walkthrough, etc.)
** [[Speed Running]]
** [[Multiplayer]] (connecting to a server, QW vs. NQ, tactics, map guide, etc.)
** [[Demos]] (recording, playing)
** [[Bots]] (or merge this into &quot;mods&quot; below?)
* [[Engines]] (list, using, configuring, compatability)
* Add-on Content
** [[Playing Mods]]
** [[Playing Maps]]
** [[Customizing Quake]] (all the HUD/crosshair/replacement texture/etc. stuff )
* Technical
** [[Quake error guide|Runtime Errors]]
** [[Quake bugs]]
** [[Console variables]]
** [[Console commands]]
** [[Command line parameters]]
** [[Config Files]]
* [[Tools]] (dzip, fun name makers, idgamma , front-ends, server browsers...)

===Information for Developers===
* [[Developing Content]]
** [[Coding QuakeC]]
** [[Modelling]] (and skinning)
** [[Mapping]]
** [[Making Textures]] (both wad and tga/etc, and skyboxes?)
** [[Making Graphics]] (lmp/wad/spr, but also tga/etc.)
** [[Making Sounds]]
** [[Quake file formats]]
** [[Quake tools|Development Tools]]
* [[Engine Development]]
** [[Network Protocols]]
** [[Extensions]]
** ...
* [[Tool Development]] (compilers, file convertes, etc.)

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>buypzd7eocg7afl2h22fu2920pk94m6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>953</id>
      <parentid>949</parentid>
      <timestamp>2008-11-14T07:52:53Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>/* Information for Developers */</comment>
      <text xml:space="preserve" bytes="2018">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Information for Players===
* [[Getting Started]]
* Playing Quake
** [[Single Player]] (monsters, weapons, tips, map guide, walkthrough, etc.)
** [[Speed Running]]
** [[Multiplayer]] (connecting to a server, QW vs. NQ, tactics, map guide, etc.)
** [[Demos]] (recording, playing)
** [[Bots]] (or merge this into &quot;mods&quot; below?)
* [[Engines]] (list, using, configuring, compatability)
* Add-on Content
** [[Playing Mods]]
** [[Playing Maps]]
** [[Customizing Quake]] (all the HUD/crosshair/replacement texture/etc. stuff )
* Technical
** [[Quake error guide|Runtime Errors]]
** [[Quake bugs]]
** [[Console variables]]
** [[Console commands]]
** [[Command line parameters]]
** [[Config Files]]
* [[Tools]] (dzip, fun name makers, idgamma , front-ends, server browsers...)

===Information for Developers===
* [[Developing Content]]
** [[Modding]]
** [[Modelling]] (and skinning)
** [[Mapping]]
** [[Making Textures]] (both wad and tga/etc, and skyboxes?)
** [[Making Graphics]] (lmp/wad/spr, but also tga/etc.)
** [[Making Sounds]]
** [[Quake file formats]]
** [[Quake tools|Development Tools]]
* [[Engine Development]]
** [[Network Protocols]]
** [[Extensions]]
** ...
* [[Tool Development]] (compilers, file convertes, etc.)

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>pazh6qbemvg4ehtljoz4prfoicraxik</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>954</id>
      <parentid>953</parentid>
      <timestamp>2008-11-14T07:55:55Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>some reorganization based on quakesrc.org wiki</comment>
      <text xml:space="preserve" bytes="1750">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

===Information for Players===
* [[Getting Started]]
* [[Engines]]
* [[Single Player Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Customizing Quake]] (all the HUD/crosshair/replacement texture/etc. stuff )
* [[Speed Running]]
* [[Demos]]
* [[Bots]]
=== Technical ===
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]] (dzip, fun name makers, idgamma , front-ends, server browsers...)

===Information for Developers===
* [[Developing Content]]
** [[Modding]]
** [[Modelling]] (and skinning)
** [[Mapping]]
** [[Making Textures]] (both wad and tga/etc, and skyboxes?)
** [[Making Graphics]] (lmp/wad/spr, but also tga/etc.)
** [[Making Sounds]]
** [[Quake file formats]]
** [[Quake tools|Development Tools]]
* [[Engine Development]]
** [[Network Protocols]]
** [[Extensions]]
** ...
* [[Tool Development]] (compilers, file convertes, etc.)

===Quake Wiki===

* [[Glossary]]
* [[Acknowledgments]]
* [[Quake Hall of Fame]]
* [[Archive]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
* [[Links]]</text>
      <sha1>omc058do17yluzqgylpuoa8gw5ucxj6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>957</id>
      <parentid>954</parentid>
      <timestamp>2008-11-14T08:40:43Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>another attempt to get things organized... took some guidance from the old quake wiki, and added a table for formatting</comment>
      <text xml:space="preserve" bytes="2067">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

===Information for Players===
* [[Getting Started]]
* [[Engines]]
* [[Single Player Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Customizing Quake]]
* [[Speed Running]]
===Quake Technical===
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

===[[Mapping]]===
* [[Mapping Tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity Guide]]
* [[Mapping Tutorials]]
* [[Mapping Links]]
===Making Assets===
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]

|width=&quot;25%&quot;|

===[[Modding]]===
* [[Modding Tools]]
* [[QuakeC Basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[ModdingLinks]]
===Engine Development===
* [[Network Protocols]]
* [[Extensions]]
* ...

|width=&quot;25%&quot;|
===Demos and Movies===
* [[Demo Recording]]
* [[Movie Tools]]
* [[Machinima]]
===Miscellaneous===
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal Status]]
* [[Online Resources]]
* [[Archives]]
===Quake Wiki===
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>ca2i7ywq7hawvwz4zk2lwp9f21mtqdq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>958</id>
      <parentid>957</parentid>
      <timestamp>2008-11-14T08:44:46Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="2166">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Information for Players'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Single Player Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Customizing Quake]]
* [[Speed Running]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping Tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity Guide]]
* [[Mapping Tutorials]]
* [[Mapping Links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Modding Tools]]
* [[QuakeC Basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[ModdingLinks]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Network Protocols]]
* [[Extensions]]
* ...

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Movie Tools]]
* [[Machinima]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal Status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>88felc43q4d0074dwzls1ex8xla9hlx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>959</id>
      <parentid>958</parentid>
      <timestamp>2008-11-14T08:48:20Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2188">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Information for Players'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Single Player Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Customizing Quake]]
* [[Speed Running]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping Tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity Guide]]
* [[Mapping Errors]]
* [[Mapping Tutorials]]
* [[Mapping Links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Modding Tools]]
* [[QuakeC Basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Network Protocols]]
* [[Extensions]]
* ...

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Movie Tools]]
* [[Machinima]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal Status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>5j1crp1hln2kuixjrdg7tlhi16386pz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>965</id>
      <parentid>959</parentid>
      <timestamp>2008-11-14T11:22:00Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="2178">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Single Player Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Customizing Quake]]
* [[Speed Running]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping Tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity Guide]]
* [[Mapping Errors]]
* [[Mapping Tutorials]]
* [[Mapping Links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Modding Tools]]
* [[QuakeC Basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Network Protocols]]
* [[Extensions]]
* ...

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Movie Tools]]
* [[Machinima]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal Status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>dcb8myjedxx2joqsd80kmx6yta2t1m4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>973</id>
      <parentid>965</parentid>
      <timestamp>2009-03-10T03:47:55Z</timestamp>
      <contributor>
        <ip>64.175.155.252</ip>
      </contributor>
      <text xml:space="preserve" bytes="2177">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Single Player Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Customizing Quake]]
* [[Speed Running]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity Guide]]
* [[Mapping Errors]]
* [[Mapping Tutorials]]
* [[Mapping Links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Modding tools]]
* [[QuakeC Basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Network Protocols]]
* [[Extensions]]
* ...

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal Status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>trluw9o4vl83b02mntlttbcfqvvaoms</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1017</id>
      <parentid>973</parentid>
      <timestamp>2009-06-05T06:29:48Z</timestamp>
      <contributor>
        <username>Idontknowthisguy</username>
        <id>17</id>
      </contributor>
      <comment>Added the 'Getting Started' page to the 'Engine Development' list; transfering it over from the old site</comment>
      <text xml:space="preserve" bytes="2199">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Single Player Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Customizing Quake]]
* [[Speed Running]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity Guide]]
* [[Mapping Errors]]
* [[Mapping Tutorials]]
* [[Mapping Links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Modding tools]]
* [[QuakeC Basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Getting Started]]
* [[Network Protocols]]
* [[Extensions]]
* ...

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal Status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>knhfx626rs66sfh1mqedmbybbcwkf7m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1018</id>
      <parentid>1017</parentid>
      <timestamp>2009-06-05T06:31:41Z</timestamp>
      <contributor>
        <username>Idontknowthisguy</username>
        <id>17</id>
      </contributor>
      <comment>Already was a getting started page for general purposes; changing the title to include development</comment>
      <text xml:space="preserve" bytes="2210">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Single Player Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Customizing Quake]]
* [[Speed Running]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity Guide]]
* [[Mapping Errors]]
* [[Mapping Tutorials]]
* [[Mapping Links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Modding tools]]
* [[QuakeC Basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* ...

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal Status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>rvp2z0lhoo7zrqgr4qr25i9fos2d28c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1160</id>
      <parentid>1018</parentid>
      <timestamp>2009-09-23T20:24:41Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2230">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Single Player Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Customizing Quake]]
* [[Speed Running]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity Guide]]
* [[Mapping Errors]]
* [[Mapping Tutorials]]
* [[Mapping Links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Modding tools]]
* [[QuakeC Basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* ...

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal Status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>9ahwva9b8d4gqdjoq7nc198jz3kw06z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1175</id>
      <parentid>1160</parentid>
      <timestamp>2009-09-24T00:20:06Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="2391">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later. There is no &quot;standard&quot; way of doing things that you'll &quot;upset&quot;, this wiki is still in its infancy, so if you see something that could be cleaned up, have at it!

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Single Player Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Customizing Quake]]
* [[Speed Running]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity Guide]]
* [[Mapping Errors]]
* [[Mapping Tutorials]]
* [[Mapping Links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Modding tools]]
* [[QuakeC Basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* ...

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal Status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>4u5j9e4sln93qkxpftn8bdclfx38x36</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1199</id>
      <parentid>1175</parentid>
      <timestamp>2009-09-24T17:55:11Z</timestamp>
      <contributor>
        <username>Mh</username>
        <id>20</id>
      </contributor>
      <comment>Added engine limits link to Development section</comment>
      <text xml:space="preserve" bytes="2411">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later. There is no &quot;standard&quot; way of doing things that you'll &quot;upset&quot;, this wiki is still in its infancy, so if you see something that could be cleaned up, have at it!

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Single Player Guide]]
* [[Multiplayer Guide]]
* [[Installing Addons]]
* [[Customizing Quake]]
* [[Speed Running]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity Guide]]
* [[Mapping Errors]]
* [[Mapping Tutorials]]
* [[Mapping Links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Modding tools]]
* [[QuakeC Basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Engine Limits]]
* ...

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal Status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>f0y0uoqq89iment1rpdyzbsougp7ega</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1224</id>
      <parentid>1199</parentid>
      <timestamp>2009-09-25T07:22:27Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <comment>adding links to some orphaned pages (some of which should be pruned or merged later)</comment>
      <text xml:space="preserve" bytes="2506">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later. There is no &quot;standard&quot; way of doing things that you'll &quot;upset&quot;, this wiki is still in its infancy, so if you see something that could be cleaned up, have at it!

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing Addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity Guide]]
* [[Mapping Errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Modding tools]]
* [[QuakeC Basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal Status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>s7lxerlxxeudxnmcxhikpa33vp255h4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1225</id>
      <parentid>1224</parentid>
      <timestamp>2009-09-25T07:24:22Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>more links fixed (watch the capitalization!)</comment>
      <text xml:space="preserve" bytes="2568">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later. There is no &quot;standard&quot; way of doing things that you'll &quot;upset&quot;, this wiki is still in its infancy, so if you see something that could be cleaned up, have at it!

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity guide]]
* [[Mapping Errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting started]]
* [[Modding tools]]
* [[QuakeC Basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>dog7r7f8q96xy1il6pepw1sohwneccw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1226</id>
      <parentid>1225</parentid>
      <timestamp>2009-09-25T07:25:06Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2568">__NOTOC__
Welcome to the Quake Wiki.

The old version was at http://wiki.quakesrc.org, so start copying stuff over from [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ archive.org]. Notice the GNU Free Document License thingy at the bottom left, I hope you're all OK with that.

Try to be consistent with page styles. If no similar pages exist here yet, use Wikipedia as a base on how to format stuff on your new page (tables, infoboxes, etc.)

If you're too lazy or dim to bother with wiki formatting, but you still have some good information to share, go ahead. It's a wiki, other people can spruce it up later. There is no &quot;standard&quot; way of doing things that you'll &quot;upset&quot;, this wiki is still in its infancy, so if you see something that could be cleaned up, have at it!

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity guide]]
* [[Mapping Errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting started]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>gtbriytxwgv0ez4khdo56ns08ggke4r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1292</id>
      <parentid>1226</parentid>
      <timestamp>2009-09-27T08:37:43Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="2227">__NOTOC__
Welcome to the Quake Wiki.

The old version was at [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ http://wiki.quakesrc.org]. Not everything has been moved over yet, so feel free to help out.

See [[Quake Wiki:Policies and guidelines|Policies and guidelines]] for some guidelines on formatting and naming conventions, but don't worry too much. If you have something good to add, other people can always clean it up later...

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity guide]]
* [[Mapping Errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting started]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>n2k6wnh74qd6qzocfb4owdvki7ja570</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1431</id>
      <parentid>1292</parentid>
      <timestamp>2009-11-15T10:32:50Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="2235">__NOTOC__
Welcome to the Quake Wiki.

The old version was at [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ http://wiki.quakesrc.org]. Not everything has been moved over yet, so feel free to help out.

See [[Quake Wiki:Policies and guidelines|Policies and guidelines]] for some guidelines on formatting and naming conventions, but don't worry too much. If you have something good to add, other people can always clean it up later...

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping tools]]
* [[Mapping Basics]]
* [[Map Compiling]]
* [[Entity guide]]
* [[Mapping Errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting Started Modding]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>6gu9t0ryty2ly46t9u16r3f1iycqbkl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1517</id>
      <parentid>1431</parentid>
      <timestamp>2010-01-11T08:08:14Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="2235">__NOTOC__
Welcome to the Quake Wiki.

The old version was at [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ http://wiki.quakesrc.org]. Not everything has been moved over yet, so feel free to help out.

See [[Quake Wiki:Policies and guidelines|Policies and guidelines]] for some guidelines on formatting and naming conventions, but don't worry too much. If you have something good to add, other people can always clean it up later...

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Mapping Basics]]
* [[Mapping tools]]
* [[Map compiling]]
* [[Entity guide]]
* [[Mapping Errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making Textures]]
* [[Making Graphics]]
* [[Making Sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting Started Modding]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>beosd7j40hkvcepkjzpluoloql2mex8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1535</id>
      <parentid>1517</parentid>
      <timestamp>2010-01-12T03:36:17Z</timestamp>
      <contributor>
        <ip>173.11.92.50</ip>
      </contributor>
      <text xml:space="preserve" bytes="2244">__NOTOC__
Welcome to the Quake Wiki.

The old version was at [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ http://wiki.quakesrc.org]. Not everything has been moved over yet, so feel free to help out.

See [[Quake Wiki:Policies and guidelines|Policies and guidelines]] for some guidelines on formatting and naming conventions, but don't worry too much. If you have something good to add, other people can always clean it up later...

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config Files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Getting started mapping]]
* [[Mapping tools]]
* [[Map compiling]]
* [[Entity guide]]
* [[Mapping Errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making textures]]
* [[Making Graphics]]
* [[Making sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting Started Modding]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>tt75268u1oy2bjr7dcaczxprtqpd7fp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1542</id>
      <parentid>1535</parentid>
      <timestamp>2010-01-12T10:11:59Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>lowercased some page names</comment>
      <text xml:space="preserve" bytes="2244">__NOTOC__
Welcome to the Quake Wiki.

The old version was at [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ http://wiki.quakesrc.org]. Not everything has been moved over yet, so feel free to help out.

See [[Quake Wiki:Policies and guidelines|Policies and guidelines]] for some guidelines on formatting and naming conventions, but don't worry too much. If you have something good to add, other people can always clean it up later...

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Getting started mapping]]
* [[Mapping tools]]
* [[Map compiling]]
* [[Entity guide]]
* [[Mapping errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making textures]]
* [[Making graphics]]
* [[Making sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting Started Modding]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>5uqfg7n2fbvmmv9dguac7koj9gy8wzd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1577</id>
      <parentid>1542</parentid>
      <timestamp>2010-02-06T19:11:53Z</timestamp>
      <contributor>
        <ip>83.226.254.64</ip>
      </contributor>
      <comment>Added QSB to modding list</comment>
      <text xml:space="preserve" bytes="2275">__NOTOC__
Welcome to the Quake Wiki.

The old version was at [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ http://wiki.quakesrc.org]. Not everything has been moved over yet, so feel free to help out.

See [[Quake Wiki:Policies and guidelines|Policies and guidelines]] for some guidelines on formatting and naming conventions, but don't worry too much. If you have something good to add, other people can always clean it up later...

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Getting started mapping]]
* [[Mapping tools]]
* [[Map compiling]]
* [[Entity guide]]
* [[Mapping errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making textures]]
* [[Making graphics]]
* [[Making sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting Started Modding]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
* [[QSB|Quake Standards Base]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>4v8929j75sgu1axhs93tvzlvbkj8rsn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1685</id>
      <parentid>1577</parentid>
      <timestamp>2013-03-24T16:37:01Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <text xml:space="preserve" bytes="2461">__NOTOC__


== Update ==

Do not play around anymore, I consider the data now live. Thanks for your testing! [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 16:37, 24 March 2013 (UTC)


== Welcome to the Quake Wiki. ==


The old version was at [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ http://wiki.quakesrc.org]. Not everything has been moved over yet, so feel free to help out.

See [[Quake Wiki:Policies and guidelines|Policies and guidelines]] for some guidelines on formatting and naming conventions, but don't worry too much. If you have something good to add, other people can always clean it up later...

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Getting started mapping]]
* [[Mapping tools]]
* [[Map compiling]]
* [[Entity guide]]
* [[Mapping errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making textures]]
* [[Making graphics]]
* [[Making sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting Started Modding]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
* [[QSB|Quake Standards Base]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>008u6kvbmwxpabez8jf56n4y1pcn82y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1687</id>
      <parentid>1685</parentid>
      <timestamp>2013-03-24T18:07:52Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>new intro text</comment>
      <text xml:space="preserve" bytes="2421">__NOTOC__
== Welcome to the Quake Wiki. ==

This is currently 99% an import of the [http://web.archive.org/web/20081120082126/http://quakery.quakedev.com/qwiki/ Quakery Qwiki]. That itself was a mixture of imported content from the [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ Quakesrc Wiki] and quite a lot of new content.

See [[Quake Wiki:Policies and guidelines|Policies and guidelines]] for some guidelines on formatting and naming conventions, but don't worry too much. If you have something good to add, other people can always clean it up later... This is a do-ocracy.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Getting started mapping]]
* [[Mapping tools]]
* [[Map compiling]]
* [[Entity guide]]
* [[Mapping errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making textures]]
* [[Making graphics]]
* [[Making sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting Started Modding]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
* [[QSB|Quake Standards Base]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>4w0h7mu70aefkv9jc9y6ciejeqi3tf0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2096</id>
      <parentid>1687</parentid>
      <timestamp>2013-03-25T16:29:39Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Welcome to the Quake Wiki. */</comment>
      <text xml:space="preserve" bytes="2447">__NOTOC__
== Welcome to the Quake Wiki. ==

This is currently 99% an import of the [http://web.archive.org/web/20081120082126/http://quakery.quakedev.com/qwiki/ Quakery Qwiki]. That itself was a mixture of imported content from the [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ Quakesrc Wiki] and quite a lot of new content.

See [[Quake Wiki:Policies and guidelines|Policies and guidelines]] for some guidelines on formatting and naming conventions, but don't worry too much. If you have something good to add, other people can always clean it up later... This is a do-ocracy.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Quake|What is Quake]]
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Getting started mapping]]
* [[Mapping tools]]
* [[Map compiling]]
* [[Entity guide]]
* [[Mapping errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making textures]]
* [[Making graphics]]
* [[Making sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting Started Modding]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
* [[QSB|Quake Standards Base]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>0tpnipyojcksa4y9lo07jz6y0wgw8vi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2193</id>
      <parentid>2096</parentid>
      <timestamp>2013-03-26T04:25:30Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Welcome to the Quake Wiki. */</comment>
      <text xml:space="preserve" bytes="2447">__NOTOC__
== Welcome to the Quake Wiki. ==

This is currently 99% an import of the [http://web.archive.org/web/20081120082126/http://quakery.quakedev.com/qwiki/ Quakery Qwiki]. That itself was a mixture of imported content from the [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ Quakesrc Wiki] and quite a lot of new content.

See [[Quake Wiki:Policies and guidelines|Policies and guidelines]] for some guidelines on formatting and naming conventions, but don't worry too much. If you have something good to add, other people can always clean it up later... This is a do-ocracy.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Quake|What is Quake]]
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Getting Started Mapping]]
* [[Mapping tools]]
* [[Map compiling]]
* [[Entity guide]]
* [[Mapping errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Making textures]]
* [[Making graphics]]
* [[Making sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting Started Modding]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
* [[QSB|Quake Standards Base]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>idhy4vpuq0yj3414csvnp6w7sb0pdla</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2318</id>
      <parentid>2193</parentid>
      <timestamp>2013-03-26T21:37:07Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Welcome to the Quake Wiki. */</comment>
      <text xml:space="preserve" bytes="2456">__NOTOC__
== Welcome to the Quake Wiki. ==

This is currently 99% an import of the [http://web.archive.org/web/20081120082126/http://quakery.quakedev.com/qwiki/ Quakery Qwiki]. That itself was a mixture of imported content from the [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ Quakesrc Wiki] and quite a lot of new content.

See [[Quake Wiki:Policies and guidelines|Policies and guidelines]] for some guidelines on formatting and naming conventions, but don't worry too much. If you have something good to add, other people can always clean it up later... This is a do-ocracy.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Quake|What is Quake]]
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Getting Started Mapping]]
* [[Mapping tools]]
* [[Map compiling]]
* [[Entity guide]]
* [[Mapping errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Textures|Making textures]]
* [[Making graphics]]
* [[Making sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting Started Modding]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
* [[QSB|Quake Standards Base]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>kvvwj0hbf8kts3m68kws1q879yrkzfg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2419</id>
      <parentid>2318</parentid>
      <timestamp>2013-03-28T15:14:05Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>/* Welcome to the Quake Wiki. */</comment>
      <text xml:space="preserve" bytes="2165">__NOTOC__
== Welcome to the Quake Wiki. ==
If you're interested contributing, feel free to do so! See the [[Quake Wiki:Community Portal|Community Portal]] for some information first, but don't worry too much. If you have something good to add, other people can always clean it up later... This is a do-ocracy.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Quake|What is Quake]]
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Getting Started Mapping]]
* [[Mapping tools]]
* [[Map compiling]]
* [[Entity guide]]
* [[Mapping errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Textures|Making textures]]
* [[Making graphics]]
* [[Making sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting Started Modding]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
* [[QSB|Quake Standards Base]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>6xa5gyz7zipti4y781wx4mkrx1sjfw1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2421</id>
      <parentid>2419</parentid>
      <timestamp>2013-03-28T15:23:36Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>/* Welcome to the Quake Wiki. */</comment>
      <text xml:space="preserve" bytes="2165">__NOTOC__
== Welcome to the Quake Wiki. ==
If you're interested contributing, feel free to do so! See the [[Quake Wiki:Community portal|Community Portal]] for some information first, but don't worry too much. If you have something good to add, other people can always clean it up later... This is a do-ocracy.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Quake|What is Quake]]
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Getting Started Mapping]]
* [[Mapping tools]]
* [[Map compiling]]
* [[Entity guide]]
* [[Mapping errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Textures|Making textures]]
* [[Making graphics]]
* [[Making sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting Started Modding]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
* [[QSB|Quake Standards Base]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>jnxha87zoozfs2g1a2gk0famj2uhqu2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3003</id>
      <parentid>2421</parentid>
      <timestamp>2013-09-13T04:50:52Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <comment>/* Welcome to the Quake Wiki. */</comment>
      <text xml:space="preserve" bytes="2168">__NOTOC__
== Welcome to the Quake Wiki. ==
If you're interested in contributing, feel free to do so! See the [[Quake Wiki:Community portal|Community Portal]] for some information first, but don't worry too much. If you have something good to add, other people can always clean it up later... This is a do-ocracy.

{| style=&quot;background:#999&quot; width=&quot;100%&quot; cellpadding=&quot;0&quot; cellspacing=&quot;1&quot;
|-
|
{| style=&quot;background:#F8F8F8&quot; width=&quot;100%&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;
|-valign=&quot;top&quot;
|width=&quot;25%&quot;|

&lt;big&gt;'''Playing Quake'''&lt;/big&gt;
* [[Quake|What is Quake]]
* [[Getting Started]]
* [[Engines]]
* [[Singleplayer guide]]
* [[Multiplayer guide]]
* [[Gameplay tips]]
* [[Installing addons]]
* [[Customizing Quake]]
* [[Speedrunning]]
&lt;big&gt;'''Quake Technical'''&lt;/big&gt;
* [[Console variables]]
* [[Console commands]]
* [[Command line parameters]]
* [[Config files]]
* [[Quake error guide]]
* [[Quake bugs]]
* [[Quake tools]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Mapping]]'''&lt;/big&gt;
* [[Getting Started Mapping]]
* [[Mapping tools]]
* [[Map compiling]]
* [[Entity guide]]
* [[Mapping errors]]
* [[Mapping tutorials]]
* [[Mapping links]]
&lt;big&gt;'''Making Assets'''&lt;/big&gt;
* [[Modelling]]
* [[Textures|Making textures]]
* [[Making graphics]]
* [[Making sounds]]
* [[Quake file formats]]
* [[Quake palette]]

|width=&quot;25%&quot;|

&lt;big&gt;'''[[Modding]]'''&lt;/big&gt;
* [[Getting Started Modding]]
* [[Modding tools]]
* [[QuakeC basics]]
* [[Compiling QuakeC]]
* [[QuakeC Globals]]
* [[QuakeC Fields]]
* [[Builtin Functions]]
* [[Modding Tutorials]]
* [[Modding Links]]
* [[QSB|Quake Standards Base]]
&lt;big&gt;'''Engine Development'''&lt;/big&gt;
* [[Engine getting started]]
* [[Getting Started Developing]]
* [[Network Protocols]]
* [[Extensions]]
* [[Enhanced engine features]]
* [[Engine Standards]]
* [[Engine Limits]]
* [[Engine tutorials]]

|width=&quot;25%&quot;|
&lt;big&gt;'''Demos and Movies'''&lt;/big&gt;
* [[Demo Recording]]
* [[Demo tools]]
* [[Machinima]]
* [[Movie list]]
&lt;big&gt;'''Miscellaneous'''&lt;/big&gt;
* [[Glossary]]
* [[Quake Development]]
* [[History of Quake]]
* [[Legal status]]
* [[Online Resources]]
* [[Archives]]
&lt;big&gt;'''Quake Wiki'''&lt;/big&gt;
* [[Acknowledgments]]
* [[Special:Statistics|Statistics]]
* [[Site help]]
|}
|}</text>
      <sha1>jqnhc2ltf2nk3ya1sh41k97lmlxkqtn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Makevectors</title>
    <ns>0</ns>
    <id>205</id>
    <revision>
      <id>386</id>
      <timestamp>2008-02-23T18:31:24Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  void '''makevectors'''(vector ''angles'')  ''angle'' = 'pitch yaw 0'   Calculate the vectors pointing forward, right and up, according to the provided angles. Returns result in the '''glo...</comment>
      <text xml:space="preserve" bytes="326"> void '''makevectors'''(vector ''angles'')

''angle'' = 'pitch yaw 0' 

Calculate the vectors pointing forward, right and up, according to the provided angles.
Returns result in the '''global variables''':

 vector	v_forward;  // points forward
 vector  v_up;       // points up
 vector  v_right;    // points toward the right</text>
      <sha1>fvxmvm7p0ggsp98nco9y37m31fs2d3w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Making Graphics</title>
    <ns>0</ns>
    <id>584</id>
    <redirect title="Making graphics" />
    <revision>
      <id>1539</id>
      <timestamp>2010-01-12T10:10:44Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>[[Making Graphics]] moved to [[Making graphics]]</comment>
      <text xml:space="preserve" bytes="29">#REDIRECT [[Making graphics]]</text>
      <sha1>j7ysxow2dvj6g36mdoohyu8jfwjrd2g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Making graphics</title>
    <ns>0</ns>
    <id>472</id>
    <revision>
      <id>934</id>
      <timestamp>2008-11-12T11:39:44Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>New page: This is about how to make all the various graphics that quake uses, except [[Making Textures|Textures]].  ===Files formats===  * [[.wad]] * [[.lmp]] * [[.spr]]  ===Notable Files===  * [[gf...</comment>
      <text xml:space="preserve" bytes="243">This is about how to make all the various graphics that quake uses, except [[Making Textures|Textures]].

===Files formats===

* [[.wad]]
* [[.lmp]]
* [[.spr]]

===Notable Files===

* [[gfx.wad]] (contains [[Quake palette]])
* [[colormap.lmp]]</text>
      <sha1>50y2smmzgztnfzyb6eby836x98lm723</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>935</id>
      <parentid>934</parentid>
      <timestamp>2008-11-12T11:39:51Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="242">This is about how to make all the various graphics that quake uses, except [[Making Textures|Textures]].

===File formats===

* [[.wad]]
* [[.lmp]]
* [[.spr]]

===Notable Files===

* [[gfx.wad]] (contains [[Quake palette]])
* [[colormap.lmp]]</text>
      <sha1>34qxrutdmt9w9eogv81c8kfp7ahrqb3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>936</id>
      <parentid>935</parentid>
      <timestamp>2008-11-12T11:42:52Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="286">This is about how to make all the various graphics that quake uses, except [[Making Textures|Textures]].

===File formats===

* [[.wad]]
* [[.lmp]]
* [[.spr]]

===Notable Files===

* [[gfx.wad]] (includes [[Quake font]])
* [[palette.lmp]] (contains [[Quake palette]])
* [[colormap.lmp]]</text>
      <sha1>q8w9cjqzt483cdphmnzw4e6ry5mp2as</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>972</id>
      <parentid>936</parentid>
      <timestamp>2009-03-10T03:35:13Z</timestamp>
      <contributor>
        <ip>64.175.155.252</ip>
      </contributor>
      <comment>/* Notable Files */</comment>
      <text xml:space="preserve" bytes="346">This is about how to make all the various graphics that quake uses, except [[Making Textures|Textures]].

===File formats===

* [[.wad]]
* [[.lmp]]
* [[.spr]]

===Notable Files===

* [[gfx.wad]] (includes [[Quake font]])
* [[palette.lmp]] (contains [[Quake palette]])
* [[colormap.lmp]] (lookup table for lighting, used only by software renderer)</text>
      <sha1>g96kkunueflvmnsk54nn48x3qh9gwwc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1538</id>
      <parentid>972</parentid>
      <timestamp>2010-01-12T10:10:44Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <minor/>
      <comment>[[Making Graphics]] moved to [[Making graphics]]</comment>
      <text xml:space="preserve" bytes="346">This is about how to make all the various graphics that quake uses, except [[Making Textures|Textures]].

===File formats===

* [[.wad]]
* [[.lmp]]
* [[.spr]]

===Notable Files===

* [[gfx.wad]] (includes [[Quake font]])
* [[palette.lmp]] (contains [[Quake palette]])
* [[colormap.lmp]] (lookup table for lighting, used only by software renderer)</text>
      <sha1>g96kkunueflvmnsk54nn48x3qh9gwwc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2313</id>
      <parentid>1538</parentid>
      <timestamp>2013-03-26T19:52:47Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* File formats */</comment>
      <text xml:space="preserve" bytes="358">This is about how to make all the various graphics that quake uses, except [[Making Textures|Textures]].

===File formats===

* [[Texture_Wad|.wad]]
* [[.lmp]]
* [[.spr]]

===Notable Files===

* [[gfx.wad]] (includes [[Quake font]])
* [[palette.lmp]] (contains [[Quake palette]])
* [[colormap.lmp]] (lookup table for lighting, used only by software renderer)</text>
      <sha1>fjyneca2y4yi7etojyckt0oes950nwj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3005</id>
      <parentid>2313</parentid>
      <timestamp>2013-09-13T05:13:45Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>Added another line basically telling people to make something in any image editor, and then using Fimg</comment>
      <text xml:space="preserve" bytes="570">This is about how to make all the various graphics that quake uses, except [[Making Textures|Textures]].

The most contemporary pipeline for graphics other than textures and models is to make use of your preferred image composition program, and then put it through [[Fimg]] to make sure it is ready for use in Quake.

===File formats===

* [[Texture_Wad|.wad]]
* [[.lmp]]
* [[.spr]]

===Notable Files===

* [[gfx.wad]] (includes [[Quake font]])
* [[palette.lmp]] (contains [[Quake palette]])
* [[colormap.lmp]] (lookup table for lighting, used only by software renderer)</text>
      <sha1>8wj6l1rxpi81gi98bviing0bemaykii</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Making sounds</title>
    <ns>0</ns>
    <id>1043</id>
    <revision>
      <id>2993</id>
      <timestamp>2013-06-30T09:00:55Z</timestamp>
      <contributor>
        <ip>58.170.242.170</ip>
      </contributor>
      <comment>it's not much but it's there</comment>
      <text xml:space="preserve" bytes="114">The original quake sounds were 8bit .wav files at 11khz. If you want higher quality sounds check your engine docs.</text>
      <sha1>6w3icpx3fw7tppw8iqygc1b2n1e4g4c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Making textures</title>
    <ns>0</ns>
    <id>789</id>
    <redirect title="Textures" />
    <revision>
      <id>2320</id>
      <timestamp>2013-03-26T21:42:02Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Created page with &quot;See [[Textures]]&quot;</comment>
      <text xml:space="preserve" bytes="16">See [[Textures]]</text>
      <sha1>05t55820lkyz5gwiamu3nplk7nuqti7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2322</id>
      <parentid>2320</parentid>
      <timestamp>2013-03-26T21:57:54Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>This would work better as a immediate redirect, fixed.</comment>
      <text xml:space="preserve" bytes="22">#REDIRECT [[Textures]]</text>
      <sha1>16n6uyix81mg44up65aj23mfa32ejsk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Map Compiling</title>
    <ns>0</ns>
    <id>580</id>
    <redirect title="Map compiling" />
    <revision>
      <id>1516</id>
      <timestamp>2010-01-11T08:07:36Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>[[Map Compiling]] moved to [[Map compiling]]</comment>
      <text xml:space="preserve" bytes="27">#REDIRECT [[Map compiling]]</text>
      <sha1>bpdpwcmd2oap8cm34uborb3ivdre4a6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Map based hacks</title>
    <ns>0</ns>
    <id>768</id>
    <revision>
      <id>2200</id>
      <timestamp>2013-03-26T04:43:45Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created a basic stub. Would be good if Preach or Negke could get this one started properly</comment>
      <text xml:space="preserve" bytes="299">'''Map based hacks''' are keys added to entities that add functionality to the entity that it was not originally intended to have. They are possible because of the way Quake C works and allow the level designer to effectively replace functions in entities with other functions from the Quake C code.</text>
      <sha1>6u076vo8h9lxzeb9rvlqgfp8vcd72hh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2203</id>
      <parentid>2200</parentid>
      <timestamp>2013-03-26T04:54:27Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="584">This page is intended to be an explanation of the tricks written about on this page: http://www.celephais.net/board/view_thread.php?id=37116

If the people who have used the tricks in here, or know a lot about them (i.e. Preach, Negke) could add stuff, that would be fantastic.
----


'''Map based hacks''' are keys added to entities that add functionality to the entity that it was not originally intended to have. They are possible because of the way Quake C works and allow the level designer to effectively replace functions in entities with other functions from the Quake C code.</text>
      <sha1>aalyijrbkasmac94oava0j2vepg0bt5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2372</id>
      <parentid>2203</parentid>
      <timestamp>2013-03-28T12:29:56Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>added an example and the hope that other, more pro people like Preach might drop by and tidy it up etc :)</comment>
      <text xml:space="preserve" bytes="2942">This page is intended to be an explanation of the tricks written about on this page: http://www.celephais.net/board/view_thread.php?id=37116

If the people who have used the tricks in here, or know a lot about them (i.e. Preach, Negke) could add stuff, that would be fantastic.
----


'''Map based hacks''' are keys added to entities that add functionality to the entity that it was not originally intended to have. They are possible because of the way Quake C works and allow the level designer to effectively replace functions in entities with other functions from the Quake C code.

==Theory behind the hacks==

===The 'use' field===
''When an entity is targetted by a trigger, the QC calls whatever function is in the use field of an entity. Most entities like doors and triggers set this field when they are spawned, overwriting what you might want to add. But an info_notnull has no code in it's spawn function, so you can add any function to use, and it will be called.'' 

''If you root around the quake source, you can find other functions that do things besides explosion effects, and many of them can be performed from the use field of an info_notnull. In addition, any other entity that doesn't have anything in it's use field by default(eg ammo) can do this same trick and explode on a trigger. Exploding ammo probably isn't the best example, but I'm sure there's some useful example of the idea. '' - [[Preacher]] [http://www.celephais.net/board/view_thread.php?id=37116&amp;start=7&amp;end=7]

==Specific hacks==
Many of these hacks are taken directly from [http://www.celephais.net/board/view_thread.php?id=37116 this] thread over at [[Func_MsgBoard]].

===info_notnull explosion===
One of the most well known tricks allows the creation of a triggerable explosion using the '''info_notnull''' entity. It is created as follows:

* Create an info_notnull entity.
* Add the key (use : barrel_explode).
* Give it a targetname and create some kind of trigger that targets it.

When the trigger is fired, an explosion will occur where the info_notnull is. Be careful, since the explosion is more than just an effect and will injure the player if they are near enough. This is especially true of barrel_explode, as it is one of the most powerful explosions in the game. Fortunately, there are two other explosions that can be used instead by setting the value of the 'use' key to one of the following:

* ''OgreGrenadeExplode'' - Ogre grenade explosion (low damage and fairly safe)
* ''tbaby_die2'' - Spawn death explosion

Note that these explosion functions remove the info_notnull entity from the level when the explosion animation has played, so it is not possible to use them multiple times unless the trigger is fired repeatedly at intervals of less than 0.5 seconds. For larger explosion effects, it is possible to set up multiple small explosions in the same way and trigger them in a sequence using [[trigger_relay|trigger_relays]].</text>
      <sha1>eon1ornmvds05ytlzp5kc0twikpqx3q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2374</id>
      <parentid>2372</parentid>
      <timestamp>2013-03-28T14:12:24Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>removed some quoted stuff and added suggested topics (feel free to change of course!)</comment>
      <text xml:space="preserve" bytes="2204">This page is intended to be an explanation of the tricks written about on this page: http://www.celephais.net/board/view_thread.php?id=37116
and Preach's excellent blog posts on the subject:
http://tomeofpreach.wordpress.com/category/map-hacks/

If the people who have used the tricks in here, or know a lot about them (i.e. Preach, Negke) could add stuff, that would be fantastic.
----


'''Map based hacks''' are keys added to entities that add functionality to the entity that it was not originally intended to have. They are possible because of the way Quake C works and allow the level designer to effectively replace functions in entities with other functions from the Quake C code.

==Theory behind the hacks==

===info_notnull===

===The 'use' field===


==Specific hacks==
Many of these hacks are taken directly from [http://www.celephais.net/board/view_thread.php?id=37116 this] thread over at [[Func_MsgBoard]].

===info_notnull explosion===
One of the most well known tricks allows the creation of a triggerable explosion using the '''info_notnull''' entity. It is created as follows:

* Create an info_notnull entity.
* Add the key (use : barrel_explode).
* Give it a targetname and create some kind of trigger that targets it.

When the trigger is fired, an explosion will occur where the info_notnull is. Be careful, since the explosion is more than just an effect and will injure the player if they are near enough. This is especially true of barrel_explode, as it is one of the most powerful explosions in the game. Fortunately, there are two other explosions that can be used instead by setting the value of the 'use' key to one of the following:

* ''OgreGrenadeExplode'' - Ogre grenade explosion (low damage and fairly safe)
* ''tbaby_die2'' - Spawn death explosion

Note that these explosion functions remove the info_notnull entity from the level when the explosion animation has played, so it is not possible to use them multiple times unless the trigger is fired repeatedly at intervals of less than 0.5 seconds. For larger explosion effects, it is possible to set up multiple small explosions in the same way and trigger them in a sequence using [[trigger_relay|trigger_relays]].</text>
      <sha1>1rsysscidztmnb0sjc04brcfqq1wgl2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2411</id>
      <parentid>2374</parentid>
      <timestamp>2013-03-28T15:04:53Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Specific hacks */</comment>
      <text xml:space="preserve" bytes="3074">This page is intended to be an explanation of the tricks written about on this page: http://www.celephais.net/board/view_thread.php?id=37116
and Preach's excellent blog posts on the subject:
http://tomeofpreach.wordpress.com/category/map-hacks/

If the people who have used the tricks in here, or know a lot about them (i.e. Preach, Negke) could add stuff, that would be fantastic.
----


'''Map based hacks''' are keys added to entities that add functionality to the entity that it was not originally intended to have. They are possible because of the way Quake C works and allow the level designer to effectively replace functions in entities with other functions from the Quake C code.

==Theory behind the hacks==

===info_notnull===

===The 'use' field===


==Specific hacks==
Many of these hacks are taken directly from [http://www.celephais.net/board/view_thread.php?id=37116 this] thread over at [[Func_MsgBoard]].

===info_notnull explosion===
One of the most well known tricks allows the creation of a triggerable explosion using the '''info_notnull''' entity. It is created as follows:

* Create an info_notnull entity.
* Add the key (use : barrel_explode).
* Give it a targetname and create some kind of trigger that targets it.

When the trigger is fired, an explosion will occur where the info_notnull is. Be careful, since the explosion is more than just an effect and will injure the player if they are near enough. This is especially true of barrel_explode, as it is one of the most powerful explosions in the game. Fortunately, there are two other explosions that can be used instead by setting the value of the 'use' key to one of the following:

* ''OgreGrenadeExplode'' - Ogre grenade explosion (low damage and fairly safe)
* ''tbaby_die2'' - Spawn death explosion

Note that these explosion functions remove the info_notnull entity from the level when the explosion animation has played, so it is not possible to use them multiple times unless the trigger is fired repeatedly at intervals of less than 0.5 seconds. For larger explosion effects, it is possible to set up multiple small explosions in the same way and trigger them in a sequence using [[trigger_relay|trigger_relays]].


===Increment the Monsters Killed===
This is a useful one if you have placed monsters in a map that the player will not ever be able to kill, such as in combination with another hack which requires a precache. It is also quite simple!

* Create an info_notnull entity.
* Add the key (use : boss_death10).
* Give it a targetname and create some kind of trigger that targets it.

How does this work? boss_death10 is a function used by Cthon that is triggered at the end of his death animation which increments the counter that tracks the monsters you have killed. This also removes the entity that calls it, so you must have one of these info_notnull entities set up for each increment you want to do. Misuse of this hack also lead to situations where you have 'killed' more monsters than exist in the map, such as a counter showing the player has killed 11/10 monsters.</text>
      <sha1>p8h9i07sp65elm48vw19sn9ij5c9jqz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2412</id>
      <parentid>2411</parentid>
      <timestamp>2013-03-28T15:05:51Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <minor/>
      <comment>/* Increment the Monsters Killed */</comment>
      <text xml:space="preserve" bytes="3075">This page is intended to be an explanation of the tricks written about on this page: http://www.celephais.net/board/view_thread.php?id=37116
and Preach's excellent blog posts on the subject:
http://tomeofpreach.wordpress.com/category/map-hacks/

If the people who have used the tricks in here, or know a lot about them (i.e. Preach, Negke) could add stuff, that would be fantastic.
----


'''Map based hacks''' are keys added to entities that add functionality to the entity that it was not originally intended to have. They are possible because of the way Quake C works and allow the level designer to effectively replace functions in entities with other functions from the Quake C code.

==Theory behind the hacks==

===info_notnull===

===The 'use' field===


==Specific hacks==
Many of these hacks are taken directly from [http://www.celephais.net/board/view_thread.php?id=37116 this] thread over at [[Func_MsgBoard]].

===info_notnull explosion===
One of the most well known tricks allows the creation of a triggerable explosion using the '''info_notnull''' entity. It is created as follows:

* Create an info_notnull entity.
* Add the key (use : barrel_explode).
* Give it a targetname and create some kind of trigger that targets it.

When the trigger is fired, an explosion will occur where the info_notnull is. Be careful, since the explosion is more than just an effect and will injure the player if they are near enough. This is especially true of barrel_explode, as it is one of the most powerful explosions in the game. Fortunately, there are two other explosions that can be used instead by setting the value of the 'use' key to one of the following:

* ''OgreGrenadeExplode'' - Ogre grenade explosion (low damage and fairly safe)
* ''tbaby_die2'' - Spawn death explosion

Note that these explosion functions remove the info_notnull entity from the level when the explosion animation has played, so it is not possible to use them multiple times unless the trigger is fired repeatedly at intervals of less than 0.5 seconds. For larger explosion effects, it is possible to set up multiple small explosions in the same way and trigger them in a sequence using [[trigger_relay|trigger_relays]].


===Increment the Monsters Killed===
This is a useful one if you have placed monsters in a map that the player will not ever be able to kill, such as in combination with another hack which requires a precache. It is also quite simple!

* Create an info_notnull entity.
* Add the key (use : boss_death10).
* Give it a targetname and create some kind of trigger that targets it.

How does this work? boss_death10 is a function used by Chthon that is triggered at the end of his death animation which increments the counter that tracks the monsters you have killed. This also removes the entity that calls it, so you must have one of these info_notnull entities set up for each increment you want to do. Misuse of this hack also lead to situations where you have 'killed' more monsters than exist in the map, such as a counter showing the player has killed 11/10 monsters.</text>
      <sha1>mahdadkn8ww7e03zreswzmmh97h1tlu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2423</id>
      <parentid>2412</parentid>
      <timestamp>2013-03-28T15:37:35Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Specific hacks */</comment>
      <text xml:space="preserve" bytes="5037">This page is intended to be an explanation of the tricks written about on this page: http://www.celephais.net/board/view_thread.php?id=37116
and Preach's excellent blog posts on the subject:
http://tomeofpreach.wordpress.com/category/map-hacks/

If the people who have used the tricks in here, or know a lot about them (i.e. Preach, Negke) could add stuff, that would be fantastic.
----


'''Map based hacks''' are keys added to entities that add functionality to the entity that it was not originally intended to have. They are possible because of the way Quake C works and allow the level designer to effectively replace functions in entities with other functions from the Quake C code.

==Theory behind the hacks==

===info_notnull===

===The 'use' field===


==Specific hacks==
Many of these hacks are taken directly from [http://www.celephais.net/board/view_thread.php?id=37116 this] thread over at [[Func_MsgBoard]].

===info_notnull explosion===
One of the most well known tricks allows the creation of a triggerable explosion using the '''info_notnull''' entity. It is created as follows:

* Create an info_notnull entity.
* Add the key &quot;use&quot; &quot;barrel_explode&quot;.
* Give it a targetname and create some kind of trigger that targets it.

When the trigger is fired, an explosion will occur where the info_notnull is. Be careful, since the explosion is more than just an effect and will injure the player if they are near enough. This is especially true of barrel_explode, as it is one of the most powerful explosions in the game. Fortunately, there are two other explosions that can be used instead by setting the value of the 'use' key to one of the following:

* ''barrel_explode'' - Barrel explosion
* ''OgreGrenadeExplode'' - Ogre grenade explosion (low damage and fairly safe)
* ''tbaby_die2'' - Spawn death explosion

Note that these explosion functions remove the info_notnull entity from the level when the explosion animation has played, so it is not possible to use them multiple times unless the trigger is fired repeatedly at intervals of less than 0.5 seconds. For larger explosion effects, it is possible to set up multiple small explosions in the same way and trigger them in a sequence using [[trigger_relay|trigger_relays]].


===Shoot Monster Projectiles===
This can be a fun one to fool around with. Many of the monsters in Quake have projectile attacks, and we can make an entity that can shoot them on command! Note that these do also play the sounds of the monster shooting them. 

There are also a few caveats: First, in general, you need the monster already present in the map so that the precaching of sounds and sprites and such will work. Second, you need to target them at an entity that will be the 'enemy', which means knowing it's index in the edict list.  If you want to shoot at Player1, this is simple, as Player1 is always index 1. Some of these also require the targeted enemy to be alive, which means they need &quot;health&quot; &quot;1&quot;.

* Create an info_notnull entity.
* Add the key &quot;use&quot; &quot;OgreFireGrenade&quot;. (Or any other function listed below)
* Add the key &quot;health&quot; &quot;1&quot;. (Being 'alive' is required by some enemy attacks)
* Add the key &quot;enemy&quot; &quot;&lt;index of enemy to target&gt;&quot;.
* Give it a targetname and create some kind of trigger that targets it.

When triggered, the info_notnull above will fire a grenade toward it's enemy (remember, Ogres are not Z-Aware, so will not angle the shot up or down). You can find the index of entities via the console command ''edictlist'' in most modern engines. Note that the index of an entity is not always guaranteed to be the same on all difficulties or after adding or removing entities from a map. Here are some other projectiles you can use:

* &quot;OgreFireGrenade&quot; - [[Ogre]]'s Grenade.
* &quot;CastLightning&quot; - [[Shambler]] Lightning (you may want to trigger this multiple times)
* &quot;hknight_shot&quot; - [[Death_Knight|Hell Knight]] magic attack. This is just 1 missile.
* &quot;Wiz_StartFast&quot; - [[Scrag]] slime bolt. 2 are fired.
* &quot;enforcer_fire&quot; - [[Enforcer]] laser.
* &quot;ZombieFireGrenade&quot; - [[Zombie]] gib toss.
* &quot;boss_missile&quot; - [[Chthon]]'s homing lava balls.
* &quot;ShalMissile&quot; - [[Vore]]'s homing voreball.

===Increment the Monsters Killed===
This is a useful one if you have placed monsters in a map that the player will not ever be able to kill, such as in combination with another hack which requires a precache. It is also quite simple!

* Create an info_notnull entity.
* Add the key (use : boss_death10).
* Give it a targetname and create some kind of trigger that targets it.

How does this work? boss_death10 is a function used by Chthon that is triggered at the end of his death animation which increments the counter that tracks the monsters you have killed. This also removes the entity that calls it, so you must have one of these info_notnull entities set up for each increment you want to do. Misuse of this hack also lead to situations where you have 'killed' more monsters than exist in the map, such as a counter showing the player has killed 11/10 monsters.</text>
      <sha1>ombc8h1b1sbzooaa97koyb5qzyghv1b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2427</id>
      <parentid>2423</parentid>
      <timestamp>2013-03-28T16:54:36Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Specific hacks */</comment>
      <text xml:space="preserve" bytes="5559">This page is intended to be an explanation of the tricks written about on this page: http://www.celephais.net/board/view_thread.php?id=37116
and Preach's excellent blog posts on the subject:
http://tomeofpreach.wordpress.com/category/map-hacks/

If the people who have used the tricks in here, or know a lot about them (i.e. Preach, Negke) could add stuff, that would be fantastic.
----


'''Map based hacks''' are keys added to entities that add functionality to the entity that it was not originally intended to have. They are possible because of the way Quake C works and allow the level designer to effectively replace functions in entities with other functions from the Quake C code.

==Theory behind the hacks==

===info_notnull===

===The 'use' field===


==Specific hacks==
Many of these hacks are taken directly from [http://www.celephais.net/board/view_thread.php?id=37116 this] thread over at [[Func_MsgBoard]].

===info_notnull explosion===
One of the most well known tricks allows the creation of a triggerable explosion using the '''info_notnull''' entity. It is created as follows:

* Create an info_notnull entity.
* Add the key &quot;use&quot; &quot;barrel_explode&quot;.
* Give it a targetname and create some kind of trigger that targets it.

When the trigger is fired, an explosion will occur where the info_notnull is. Be careful, since the explosion is more than just an effect and will injure the player if they are near enough. This is especially true of barrel_explode, as it is one of the most powerful explosions in the game. Fortunately, there are two other explosions that can be used instead by setting the value of the 'use' key to one of the following:

* ''barrel_explode'' - Barrel explosion
* ''OgreGrenadeExplode'' - Ogre grenade explosion (low damage and fairly safe)
* ''tbaby_die2'' - Spawn death explosion

Note that these explosion functions remove the info_notnull entity from the level when the explosion animation has played, so it is not possible to use them multiple times unless the trigger is fired repeatedly at intervals of less than 0.5 seconds. For larger explosion effects, it is possible to set up multiple small explosions in the same way and trigger them in a sequence using [[trigger_relay|trigger_relays]].

===Triggered sounds===
You can play most any sound you wish by triggering it! This requires the sound to be precached, so an entity which uses it must be present in the map beforehand (for example, place an Ogre if you want to use it's chainsaw sounds). It's a pretty simple setup too:

* Create an info_notnull entity.
* Add the key &quot;use&quot; &quot;train_wait&quot;.
* Add the key &quot;noise&quot; &quot;&lt;sound you wish to play&gt;&quot;. (example:&quot;weapon/lhit.wav&quot; lightning gun zap)
* Give it a targetname and create some kind of trigger that targets it.

===Shoot Monster Projectiles===
This can be a fun one to fool around with. Many of the monsters in Quake have projectile attacks, and we can make an entity that can shoot them on command! Note that these do also play the sounds of the monster shooting them. 

There are also a few caveats: First, in general, you need the monster already present in the map so that the precaching of sounds and sprites and such will work. Second, you need to target them at an entity that will be the 'enemy', which means knowing it's index in the edict list.  If you want to shoot at Player1, this is simple, as Player1 is always index 1. Some of these also require the targeted enemy to be alive, which means they need &quot;health&quot; &quot;1&quot;.

* Create an info_notnull entity.
* Add the key &quot;use&quot; &quot;OgreFireGrenade&quot;. (Or any other function listed below)
* Add the key &quot;health&quot; &quot;1&quot;. (Being 'alive' is required by some enemy attacks)
* Add the key &quot;enemy&quot; &quot;&lt;index of enemy to target&gt;&quot;.
* Give it a targetname and create some kind of trigger that targets it.

When triggered, the info_notnull above will fire a grenade toward it's enemy (remember, Ogres are not Z-Aware, so will not angle the shot up or down). You can find the index of entities via the console command ''edictlist'' in most modern engines. Note that the index of an entity is not always guaranteed to be the same on all difficulties or after adding or removing entities from a map. Here are some other projectiles you can use:

* &quot;OgreFireGrenade&quot; - [[Ogre]]'s Grenade.
* &quot;CastLightning&quot; - [[Shambler]] Lightning (you may want to trigger this multiple times)
* &quot;hknight_shot&quot; - [[Death_Knight|Hell Knight]] magic attack. This is just 1 missile.
* &quot;Wiz_StartFast&quot; - [[Scrag]] slime bolt. 2 are fired.
* &quot;enforcer_fire&quot; - [[Enforcer]] laser.
* &quot;ZombieFireGrenade&quot; - [[Zombie]] gib toss.
* &quot;boss_missile&quot; - [[Chthon]]'s homing lava balls.
* &quot;ShalMissile&quot; - [[Vore]]'s homing voreball.

===Increment the Monsters Killed===
This is a useful one if you have placed monsters in a map that the player will not ever be able to kill, such as in combination with another hack which requires a precache. It is also quite simple!

* Create an info_notnull entity.
* Add the key (use : boss_death10).
* Give it a targetname and create some kind of trigger that targets it.

How does this work? boss_death10 is a function used by Chthon that is triggered at the end of his death animation which increments the counter that tracks the monsters you have killed. This also removes the entity that calls it, so you must have one of these info_notnull entities set up for each increment you want to do. Misuse of this hack also lead to situations where you have 'killed' more monsters than exist in the map, such as a counter showing the player has killed 11/10 monsters.</text>
      <sha1>ivh8cc67afqwecvjvx6zi398hhn8tyz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2428</id>
      <parentid>2427</parentid>
      <timestamp>2013-03-28T17:01:33Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Triggered sounds */</comment>
      <text xml:space="preserve" bytes="5786">This page is intended to be an explanation of the tricks written about on this page: http://www.celephais.net/board/view_thread.php?id=37116
and Preach's excellent blog posts on the subject:
http://tomeofpreach.wordpress.com/category/map-hacks/

If the people who have used the tricks in here, or know a lot about them (i.e. Preach, Negke) could add stuff, that would be fantastic.
----


'''Map based hacks''' are keys added to entities that add functionality to the entity that it was not originally intended to have. They are possible because of the way Quake C works and allow the level designer to effectively replace functions in entities with other functions from the Quake C code.

==Theory behind the hacks==

===info_notnull===

===The 'use' field===


==Specific hacks==
Many of these hacks are taken directly from [http://www.celephais.net/board/view_thread.php?id=37116 this] thread over at [[Func_MsgBoard]].

===info_notnull explosion===
One of the most well known tricks allows the creation of a triggerable explosion using the '''info_notnull''' entity. It is created as follows:

* Create an info_notnull entity.
* Add the key &quot;use&quot; &quot;barrel_explode&quot;.
* Give it a targetname and create some kind of trigger that targets it.

When the trigger is fired, an explosion will occur where the info_notnull is. Be careful, since the explosion is more than just an effect and will injure the player if they are near enough. This is especially true of barrel_explode, as it is one of the most powerful explosions in the game. Fortunately, there are two other explosions that can be used instead by setting the value of the 'use' key to one of the following:

* ''barrel_explode'' - Barrel explosion
* ''OgreGrenadeExplode'' - Ogre grenade explosion (low damage and fairly safe)
* ''tbaby_die2'' - Spawn death explosion

Note that these explosion functions remove the info_notnull entity from the level when the explosion animation has played, so it is not possible to use them multiple times unless the trigger is fired repeatedly at intervals of less than 0.5 seconds. For larger explosion effects, it is possible to set up multiple small explosions in the same way and trigger them in a sequence using [[trigger_relay|trigger_relays]].

===Triggered sounds===
You can play most any sound you wish by triggering it! This requires the sound to be precached, so an entity which uses it must be present in the map beforehand (for example, place an Ogre if you want to use it's chainsaw sounds). It's a pretty simple setup too:

* Create an info_notnull entity.
* Add the key &quot;use&quot; &quot;train_wait&quot;.
* Add the key &quot;noise&quot; &quot;&lt;sound you wish to play&gt;&quot;. (example:&quot;weapon/lhit.wav&quot; lightning gun zap)
* Give it a targetname and create some kind of trigger that targets it.

How does this work? train_wait is a function used by [[func_train]] entities, which plays it's &quot;noise&quot; property. A variation on this hack is to do &quot;use&quot; &quot;plat_hit_bottom&quot; and &quot;noise1&quot; &quot;&lt;sound&gt;&quot;, which works much the same way.

===Shoot Monster Projectiles===
This can be a fun one to fool around with. Many of the monsters in Quake have projectile attacks, and we can make an entity that can shoot them on command! Note that these do also play the sounds of the monster shooting them. 

There are also a few caveats: First, in general, you need the monster already present in the map so that the precaching of sounds and sprites and such will work. Second, you need to target them at an entity that will be the 'enemy', which means knowing it's index in the edict list.  If you want to shoot at Player1, this is simple, as Player1 is always index 1. Some of these also require the targeted enemy to be alive, which means they need &quot;health&quot; &quot;1&quot;.

* Create an info_notnull entity.
* Add the key &quot;use&quot; &quot;OgreFireGrenade&quot;. (Or any other function listed below)
* Add the key &quot;health&quot; &quot;1&quot;. (Being 'alive' is required by some enemy attacks)
* Add the key &quot;enemy&quot; &quot;&lt;index of enemy to target&gt;&quot;.
* Give it a targetname and create some kind of trigger that targets it.

When triggered, the info_notnull above will fire a grenade toward it's enemy (remember, Ogres are not Z-Aware, so will not angle the shot up or down). You can find the index of entities via the console command ''edictlist'' in most modern engines. Note that the index of an entity is not always guaranteed to be the same on all difficulties or after adding or removing entities from a map. Here are some other projectiles you can use:

* &quot;OgreFireGrenade&quot; - [[Ogre]]'s Grenade.
* &quot;CastLightning&quot; - [[Shambler]] Lightning (you may want to trigger this multiple times)
* &quot;hknight_shot&quot; - [[Death_Knight|Hell Knight]] magic attack. This is just 1 missile.
* &quot;Wiz_StartFast&quot; - [[Scrag]] slime bolt. 2 are fired.
* &quot;enforcer_fire&quot; - [[Enforcer]] laser.
* &quot;ZombieFireGrenade&quot; - [[Zombie]] gib toss.
* &quot;boss_missile&quot; - [[Chthon]]'s homing lava balls.
* &quot;ShalMissile&quot; - [[Vore]]'s homing voreball.

===Increment the Monsters Killed===
This is a useful one if you have placed monsters in a map that the player will not ever be able to kill, such as in combination with another hack which requires a precache. It is also quite simple!

* Create an info_notnull entity.
* Add the key (use : boss_death10).
* Give it a targetname and create some kind of trigger that targets it.

How does this work? boss_death10 is a function used by Chthon that is triggered at the end of his death animation which increments the counter that tracks the monsters you have killed. This also removes the entity that calls it, so you must have one of these info_notnull entities set up for each increment you want to do. Misuse of this hack also lead to situations where you have 'killed' more monsters than exist in the map, such as a counter showing the player has killed 11/10 monsters.</text>
      <sha1>ho4uwulphtr484hzarj90o53t3f03cu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2769</id>
      <parentid>2428</parentid>
      <timestamp>2013-04-06T11:43:13Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Rewrote introduction, added information on spawn functions</comment>
      <text xml:space="preserve" bytes="8422">This page is intended to be an explanation of the tricks written about on this page: http://www.celephais.net/board/view_thread.php?id=37116
and Preach's excellent blog posts on the subject:
http://tomeofpreach.wordpress.com/category/map-hacks/

If the people who have used the tricks in here, or know a lot about them (i.e. Preach, Negke) could add stuff, that would be fantastic.
----


'''Map-based hacks''' are non-standard techniques in [[Mapping | mapping]] that allow the customization of [[Entity | entities]] in a map without resorting to [[Modding | modding]]. They are made possible due to the fairly open nature of [[Quake-C]]. The so-called hacks involve the modification, replacment or addition of keys in existing entities to enhance their functionality as well as the creation of completely new ones. While they generally work reliably in [[Vanilla Quake]] (&quot;[[ID1]]&quot;), they can cause compatibility problems if the map is run with a [[Mod | mod]], ranging from incorrect appearance to engine crashes, which means they have to be used with caution.

==Theory behind the hacks==

All map entities have a set of core functions and default keys defined in their corresponding [[Quake-C]] file which determine their behavior. In most cases, these functions are fixed with the classname and cannot be changed. However, there are a few exceptions either due to a difference in terminology used in the map source and in the game code (for instance, the definition of sound effects), or because certain functions remain unused in some entities.

Most hacks revolve around creating new versions of existing entities by incorporating their desired functions into an [[info_notnull]] entity, which can be regarded as a blank canvas since it does not have any predefined functions or behavior. Therefore, it is possible to recreate every single map entity in the game as into_notnull.
When using this ''wildcard'' entity, it is often essential to set a corresponding field to define its spawn function, how it behaves when triggered or touched.

*'''think''' - This function determines the what the entity does automatically after the server starts, or to be more precise, after the amount of time set in its mandatory sub-function ''nextthink''. Depending on which kind of role the info_notnull is meant is fulfill, the think field must contain the spawn function, e.g. ''InitTrigger'', ''PlaceItem'', ''walkmonster_start_go''.
*'''use''' - This function determines how the entity reacts when being triggered by another entity, or in some cases when being activated or killed. It can serve as a spawn function for an initially dormant entity, e.g. ''InitTrigger'', ''classname'', or call a subroutine like e.g. ''SUB_UseTargets'', ''SUB_Remove'', ''SUB_regen''.
*'''touch''' - This function determines what happens if the entity is touched by another entity, most notably in triggers, e.g. ''multi_touch'', ''hurt_touch'',''SUB_Null''.

In addition to the spawn function, there are several other possibilities or requirements to further determine the behavior of the new entity and its appearance in the game, such as its [[Model | model]] and [[Sounds | sound effects]]. For many hacks to work, it is important that all of such resources are precached, which require the corresponding standard [[Entities | entities]] to be present in the map alongside the new ones.

==Specific hacks==
Many of these hacks are taken directly from [http://www.celephais.net/board/view_thread.php?id=37116 this] thread over at [[Func_MsgBoard]].

===Triggerable explosion===
One of the most well known tricks allows the creation of a triggerable explosion using the '''info_notnull''' entity. It is created as follows:

* Create an info_notnull entity.
* Add the key &quot;use&quot; &quot;barrel_explode&quot;.
* Give it a targetname and create some kind of trigger that targets it.

When the trigger is fired, an explosion will occur where the info_notnull is. Be careful, since the explosion is more than just an effect and will injure the player if they are near enough. This is especially true of barrel_explode, as it is one of the most powerful explosions in the game. Fortunately, there are two other explosions that can be used instead by setting the value of the 'use' key to one of the following:

* ''barrel_explode'' - Barrel explosion
* ''OgreGrenadeExplode'' - Ogre grenade explosion (low damage and fairly safe)
* ''tbaby_die2'' - Spawn death explosion

Note that these explosion functions remove the info_notnull entity from the level when the explosion animation has played, so it is not possible to use them multiple times unless the trigger is fired repeatedly at intervals of less than 0.5 seconds. For larger explosion effects, it is possible to set up multiple small explosions in the same way and trigger them in a sequence using [[trigger_relay|trigger_relays]].

===Triggered sounds===
You can play most any sound you wish by triggering it! This requires the sound to be precached, so an entity which uses it must be present in the map beforehand (for example, place an Ogre if you want to use it's chainsaw sounds). It's a pretty simple setup too:

* Create an info_notnull entity.
* Add the key &quot;use&quot; &quot;train_wait&quot; or &quot;use&quot; &quot;plat_hit_bottom&quot;.
* Add the key &quot;noise&quot; &quot;&lt;sound you wish to play&gt;&quot;. (example:&quot;weapon/lhit.wav&quot; lightning gun zap)
* Give it a targetname and create some kind of trigger that targets it.

How does this work? train_wait is a function used by [[func_train]] entities, which plays it's &quot;noise&quot; property. A variation on this hack is to do &quot;use&quot; &quot;plat_hit_bottom&quot; and &quot;noise1&quot; &quot;&lt;sound&gt;&quot;, which works much the same way.

===Shoot Monster Projectiles===
This can be a fun one to fool around with. Many of the monsters in Quake have projectile attacks, and we can make an entity that can shoot them on command! Note that these do also play the sounds of the monster shooting them. 

There are also a few caveats: First, in general, you need the monster already present in the map so that the precaching of sounds and sprites and such will work. Second, you need to target them at an entity that will be the 'enemy', which means knowing it's index in the edict list.  If you want to shoot at Player1, this is simple, as Player1 is always index 1. Some of these also require the targeted enemy to be alive, which means they need &quot;health&quot; &quot;1&quot;.

* Create an info_notnull entity.
* Add the key &quot;use&quot; &quot;OgreFireGrenade&quot;. (Or any other function listed below)
* Add the key &quot;health&quot; &quot;1&quot;. (Being 'alive' is required by some enemy attacks)
* Add the key &quot;enemy&quot; &quot;&lt;index of enemy to target&gt;&quot;.
* Give it a targetname and create some kind of trigger that targets it.

When triggered, the info_notnull above will fire a grenade toward it's enemy (remember, Ogres are not Z-Aware, so will not angle the shot up or down). You can find the index of entities via the console command ''edictlist'' in most modern engines. Note that the index of an entity is not always guaranteed to be the same on all difficulties or after adding or removing entities from a map. Here are some other projectiles you can use:

* &quot;OgreFireGrenade&quot; - [[Ogre]]'s Grenade.
* &quot;CastLightning&quot; - [[Shambler]] Lightning (you may want to trigger this multiple times)
* &quot;hknight_shot&quot; - [[Death_Knight|Hell Knight]] magic attack. This is just 1 missile.
* &quot;Wiz_StartFast&quot; - [[Scrag]] slime bolt. 2 are fired.
* &quot;enforcer_fire&quot; - [[Enforcer]] laser.
* &quot;ZombieFireGrenade&quot; - [[Zombie]] gib toss.
* &quot;boss_missile&quot; - [[Chthon]]'s homing lava balls.
* &quot;ShalMissile&quot; - [[Vore]]'s homing voreball.

===Increment the Monsters Killed===
This is a useful one if you have placed monsters in a map that the player will not ever be able to kill, such as in combination with another hack which requires a precache. It is also quite simple!

* Create an info_notnull entity.
* Add the key (use : boss_death10).
* Give it a targetname and create some kind of trigger that targets it.

How does this work? boss_death10 is a function used by Chthon that is triggered at the end of his death animation which increments the counter that tracks the monsters you have killed. This also removes the entity that calls it, so you must have one of these info_notnull entities set up for each increment you want to do. Misuse of this hack also lead to situations where you have 'killed' more monsters than exist in the map, such as a counter showing the player has killed 11/10 monsters.</text>
      <sha1>s234xyw4biq30st6w7noeb8bewx2phi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2802</id>
      <parentid>2769</parentid>
      <timestamp>2013-04-07T13:23:00Z</timestamp>
      <contributor>
        <ip>31.18.177.112</ip>
      </contributor>
      <comment>point triggers</comment>
      <text xml:space="preserve" bytes="10158">This page is intended to be an explanation of the tricks written about on this page: http://www.celephais.net/board/view_thread.php?id=37116
and Preach's excellent blog posts on the subject:
http://tomeofpreach.wordpress.com/category/map-hacks/

If the people who have used the tricks in here, or know a lot about them (i.e. Preach, Negke) could add stuff, that would be fantastic.
----


'''Map-based hacks''' are non-standard techniques in [[Mapping | mapping]] that allow the customization of [[Entity | entities]] in a map without resorting to [[Modding | modding]]. They are made possible due to the fairly open nature of [[Quake-C]]. The so-called hacks involve the modification, replacment or addition of keys in existing entities to enhance their functionality as well as the creation of completely new ones. While they generally work reliably in [[Vanilla Quake]] (&quot;[[ID1]]&quot;), they can cause compatibility problems if the map is run with a [[Mod | mod]], ranging from incorrect appearance to engine crashes, which means they have to be used with caution.

==Theory behind the hacks==

All map entities have a set of core functions and default keys defined in their corresponding [[Quake-C]] file which determine their behavior. In most cases, these functions are fixed with the classname and cannot be changed. However, there are a few exceptions either due to a difference in terminology used in the map source and in the game code (for instance, the definition of sound effects), or because certain functions remain unused in some entities.

Most hacks revolve around creating new versions of existing entities by incorporating their desired functions into an [[info_notnull]] entity, which can be regarded as a blank canvas since it does not have any predefined functions or behavior. Therefore, it is possible to recreate every single map entity in the game as into_notnull.
When using this ''wildcard'' entity, it is often essential to set a corresponding field to define its spawn function, how it behaves when triggered or touched.

*'''think''' - This function determines the what the entity does automatically after the server starts, or to be more precise, after the amount of time set in its mandatory sub-function ''nextthink''. Depending on which kind of role the info_notnull is meant is fulfill, the think field must contain the spawn function, e.g. ''InitTrigger'', ''PlaceItem'', ''walkmonster_start_go''.
*'''use''' - This function determines how the entity reacts when being triggered by another entity, or in some cases when being activated or killed. It can serve as a spawn function for an initially dormant entity, e.g. ''InitTrigger'', ''classname'', or call a subroutine like e.g. ''SUB_UseTargets'', ''SUB_Remove'', ''SUB_regen''.
*'''touch''' - This function determines what happens if the entity is touched by another entity, most notably in triggers, e.g. ''multi_touch'', ''hurt_touch'',''SUB_Null''.

In addition to the spawn function, there are several other possibilities or requirements to further determine the behavior of the new entity and its appearance in the game, such as its [[Model | model]] and [[Sounds | sound effects]]. For many hacks to work, it is important that all of such resources are precached, which require the corresponding standard [[Entity_guide | entities]] to be present in the map alongside the new ones.

==Specific hacks==

==Triggers==
===Point-based triggers with custom bounding box===
While most of the standard [[Entity_guide | triggers]] are by default defined as [[Entity#Overview | brush entities]], it is possible to for them to be used as [[Entity#Overview | point entities]] as well. The difference is that they only work at a single [[Origin | point]] instead of not a larger volume that would otherwise be defined by the [[Brush | brush]]. They also do not count against the [[Engine_Limits | model limit]]. Among other fields of use, this makes them a good alternative for monster [[Teleport | teleporters]] (the ''silent'' spawnflag must be set), for example.
There are two downsides, however. If set to be shootable, point triggers can only be activated by splash damage. Furthermore, in a normal map environment, touchable point triggers are easily missable by the player. The latter can be worked around as it is possible to assign any precached model to serve as the bounding box of the point trigger. This is achieved by adding a '''model''' field to the trigger which can point to any available entity, such as items, monsters, or other brush entities.

For example, ''&quot;model&quot; &quot;maps/b_bh100.bsp&quot;'' will make the bounding box be the size of a [[Megahealth]] box (32*32*32 units), ''&quot;model&quot; &quot;progs/shambler.mdl&quot;'' will make it the size of a [[Shambler]] (64*64*96 units). Using any kind of .bsp and .mdl model is the easiest way, but it bears the risk of incompatibility to mods that lack the referenced objects or treat them differently, which will result in a crash. A safe, but also more complicated way is to reference existing brush models from within the map, e.g. ''&quot;model&quot; &quot;*10&quot;''. This makes placing the such a trigger very tricky, however, because its location has to be determined by the location of the original brush entity in relation to the map origin (0 0 0).


===Triggerable explosion===
One of the most well known tricks allows the creation of a triggerable explosion using the '''info_notnull''' entity. It is created as follows:

* Create an info_notnull entity.
* Add the key &quot;use&quot; &quot;barrel_explode&quot;.
* Give it a targetname and create some kind of trigger that targets it.

When the trigger is fired, an explosion will occur where the info_notnull is. Be careful, since the explosion is more than just an effect and will injure the player if they are near enough. This is especially true of barrel_explode, as it is one of the most powerful explosions in the game. Fortunately, there are two other explosions that can be used instead by setting the value of the 'use' key to one of the following:

* ''barrel_explode'' - Barrel explosion
* ''OgreGrenadeExplode'' - Ogre grenade explosion (low damage and fairly safe)
* ''tbaby_die2'' - Spawn death explosion

Note that these explosion functions remove the info_notnull entity from the level when the explosion animation has played, so it is not possible to use them multiple times unless the trigger is fired repeatedly at intervals of less than 0.5 seconds. For larger explosion effects, it is possible to set up multiple small explosions in the same way and trigger them in a sequence using [[trigger_relay|trigger_relays]].

===Triggered sounds===
You can play most any sound you wish by triggering it! This requires the sound to be precached, so an entity which uses it must be present in the map beforehand (for example, place an Ogre if you want to use it's chainsaw sounds). It's a pretty simple setup too:

* Create an info_notnull entity.
* Add the key &quot;use&quot; &quot;train_wait&quot; or &quot;use&quot; &quot;plat_hit_bottom&quot;.
* Add the key &quot;noise&quot; &quot;&lt;sound you wish to play&gt;&quot;. (example:&quot;weapon/lhit.wav&quot; lightning gun zap)
* Give it a targetname and create some kind of trigger that targets it.

How does this work? train_wait is a function used by [[func_train]] entities, which plays it's &quot;noise&quot; property. A variation on this hack is to do &quot;use&quot; &quot;plat_hit_bottom&quot; and &quot;noise1&quot; &quot;&lt;sound&gt;&quot;, which works much the same way.

===Shoot Monster Projectiles===
This can be a fun one to fool around with. Many of the monsters in Quake have projectile attacks, and we can make an entity that can shoot them on command! Note that these do also play the sounds of the monster shooting them. 

There are also a few caveats: First, in general, you need the monster already present in the map so that the precaching of sounds and sprites and such will work. Second, you need to target them at an entity that will be the 'enemy', which means knowing it's index in the edict list.  If you want to shoot at Player1, this is simple, as Player1 is always index 1. Some of these also require the targeted enemy to be alive, which means they need &quot;health&quot; &quot;1&quot;.

* Create an info_notnull entity.
* Add the key &quot;use&quot; &quot;OgreFireGrenade&quot;. (Or any other function listed below)
* Add the key &quot;health&quot; &quot;1&quot;. (Being 'alive' is required by some enemy attacks)
* Add the key &quot;enemy&quot; &quot;&lt;index of enemy to target&gt;&quot;.
* Give it a targetname and create some kind of trigger that targets it.

When triggered, the info_notnull above will fire a grenade toward it's enemy (remember, Ogres are not Z-Aware, so will not angle the shot up or down). You can find the index of entities via the console command ''edictlist'' in most modern engines. Note that the index of an entity is not always guaranteed to be the same on all difficulties or after adding or removing entities from a map. Here are some other projectiles you can use:

* &quot;OgreFireGrenade&quot; - [[Ogre]]'s Grenade.
* &quot;CastLightning&quot; - [[Shambler]] Lightning (you may want to trigger this multiple times)
* &quot;hknight_shot&quot; - [[Death_Knight|Hell Knight]] magic attack. This is just 1 missile.
* &quot;Wiz_StartFast&quot; - [[Scrag]] slime bolt. 2 are fired.
* &quot;enforcer_fire&quot; - [[Enforcer]] laser.
* &quot;ZombieFireGrenade&quot; - [[Zombie]] gib toss.
* &quot;boss_missile&quot; - [[Chthon]]'s homing lava balls.
* &quot;ShalMissile&quot; - [[Vore]]'s homing voreball.

===Increment the Monsters Killed===
This is a useful one if you have placed monsters in a map that the player will not ever be able to kill, such as in combination with another hack which requires a precache. It is also quite simple!

* Create an info_notnull entity.
* Add the key (use : boss_death10).
* Give it a targetname and create some kind of trigger that targets it.

How does this work? boss_death10 is a function used by Chthon that is triggered at the end of his death animation which increments the counter that tracks the monsters you have killed. This also removes the entity that calls it, so you must have one of these info_notnull entities set up for each increment you want to do. Misuse of this hack also lead to situations where you have 'killed' more monsters than exist in the map, such as a counter showing the player has killed 11/10 monsters.</text>
      <sha1>ay5ymg46wpt1edeaqdly6y7du8fj40v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2805</id>
      <parentid>2802</parentid>
      <timestamp>2013-04-07T13:36:23Z</timestamp>
      <contributor>
        <ip>31.18.177.112</ip>
      </contributor>
      <text xml:space="preserve" bytes="10121">This page is intended to be an explanation of the tricks written about on this page: http://www.celephais.net/board/view_thread.php?id=37116
and Preach's excellent blog posts on the subject:
http://tomeofpreach.wordpress.com/category/map-hacks/
----


'''Map-based hacks''' are non-standard techniques in [[Mapping | mapping]] that allow the customization of [[Entity | entities]] in a map without resorting to [[Modding | modding]]. They are made possible due to the fairly open nature of [[Quake-C]]. The so-called hacks involve the modification, replacment or addition of keys in existing entities to enhance their functionality as well as the creation of completely new ones. While they generally work reliably in [[Vanilla Quake]] (&quot;[[ID1]]&quot;), they can cause compatibility problems if the map is run with a [[Mod | mod]], ranging from incorrect appearance to engine crashes, which means they have to be used with caution.

==Theory behind the hacks==

All map entities have a set of core functions and default keys defined in their corresponding [[Quake-C]] file which determine their behavior. In most cases, these functions are fixed with the classname and cannot be changed. However, there are a few exceptions either due to a difference in terminology used in the map source and in the game code (for instance, the definition of sound effects), or because certain functions remain unused in some entities.

Most hacks revolve around creating new versions of existing entities by incorporating their desired functions into an [[info_notnull]] entity, which can be regarded as a blank canvas since it does not have any predefined functions or behavior. Therefore, it is possible to recreate every single map entity in the game as into_notnull.
When using this ''wildcard'' entity, it is often essential to set a corresponding field to define its spawn function, how it behaves when triggered or touched.

*'''think''' - This function determines the what the entity does automatically after the server starts, or to be more precise, after the amount of time set in its mandatory sub-function ''nextthink''. Depending on which kind of role the info_notnull is meant is fulfill, the think field must contain the spawn function, e.g. ''InitTrigger'', ''PlaceItem'', ''walkmonster_start_go''.
*'''use''' - This function determines how the entity reacts when being triggered by another entity, or in some cases when being activated or killed. It can serve as a spawn function for an initially dormant entity, e.g. ''InitTrigger'', ''classname'', or call a subroutine like e.g. ''SUB_UseTargets'', ''SUB_Remove'', ''SUB_regen''.
*'''touch''' - This function determines what happens if the entity is touched by another entity, most notably in triggers, e.g. ''multi_touch'', ''hurt_touch'',''SUB_Null''.

In addition to the spawn function, there are several other possibilities or requirements to further determine the behavior of the new entity and its appearance in the game, such as its [[Model | model]] and [[Sounds | sound effects]]. For many hacks to work, it is important that all of such resources are precached, which require the corresponding standard [[Entity_guide | entities]] to be present in the map alongside the new ones.

==Specific hacks==

==Triggers==
===Point-based triggers with custom bounding box===
While most of the standard [[Entity_guide | triggers]] are by default defined as [[Entity#Overview | brush entities]], it is possible to for them to be used as [[Entity#Overview | point entities]] as well. The difference is that they only work at a single [[Origin | point]] instead of a larger volume that would otherwise be defined by the [[Brush | brush]]. They also do not count against the [[Engine_Limits | model limit]]. Among other fields of use, this makes them a good alternative for monster [[Teleport | teleporters]] (the ''silent'' spawnflag must be set), for example.
There are two downsides, however. If set to be shootable, point triggers can only be activated by splash damage. Furthermore, in a normal map environment, touchable point triggers are easily missable by the player. The latter can be worked around as it is possible to assign any precached model to serve as the bounding box of the point trigger. This is achieved by adding a '''model''' field to the trigger which points the corresponding entity, such as an item, a monster, or a brush entity.

For instance, ''&quot;model&quot; &quot;maps/b_bh100.bsp&quot;'' will make the bounding box the size of a [[Megahealth]] (32*32*32 units), ''&quot;model&quot; &quot;progs/shambler.mdl&quot;'' will make it the size of a [[Shambler]] (64*64*96 units). Using any kind of .bsp and .mdl model is the easiest way, but it bears the risk of incompatibility to mods that lack the referenced objects or treat them differently, and will likely result in a crash. A safe, but also more complicated way is to reference existing brush models from within the map, e.g. ''&quot;model&quot; &quot;*10&quot;''. This makes placing the such a trigger very tricky, however, because its location has to be determined by the location of the original brush entity in its relation to the map origin (0 0 0).

Example:
&lt;pre&gt;&quot;classname&quot; &quot;trigger_once&quot;
&quot;origin&quot; &quot;1 2 3&quot;
&quot;target&quot; &quot;t1&quot;
&quot;model&quot; &quot;progs/player.mdl&quot;&lt;/pre&gt;


===Triggerable explosion===
One of the most well known tricks allows the creation of a triggerable explosion using the '''info_notnull''' entity. It is created as follows:

* Create an info_notnull entity.
* Add the key &quot;use&quot; &quot;barrel_explode&quot;.
* Give it a targetname and create some kind of trigger that targets it.

When the trigger is fired, an explosion will occur where the info_notnull is. Be careful, since the explosion is more than just an effect and will injure the player if they are near enough. This is especially true of barrel_explode, as it is one of the most powerful explosions in the game. Fortunately, there are two other explosions that can be used instead by setting the value of the 'use' key to one of the following:

* ''barrel_explode'' - Barrel explosion
* ''OgreGrenadeExplode'' - Ogre grenade explosion (low damage and fairly safe)
* ''tbaby_die2'' - Spawn death explosion

Note that these explosion functions remove the info_notnull entity from the level when the explosion animation has played, so it is not possible to use them multiple times unless the trigger is fired repeatedly at intervals of less than 0.5 seconds. For larger explosion effects, it is possible to set up multiple small explosions in the same way and trigger them in a sequence using [[trigger_relay|trigger_relays]].

===Triggered sounds===
You can play most any sound you wish by triggering it! This requires the sound to be precached, so an entity which uses it must be present in the map beforehand (for example, place an Ogre if you want to use it's chainsaw sounds). It's a pretty simple setup too:

* Create an info_notnull entity.
* Add the key &quot;use&quot; &quot;train_wait&quot; or &quot;use&quot; &quot;plat_hit_bottom&quot;.
* Add the key &quot;noise&quot; &quot;&lt;sound you wish to play&gt;&quot;. (example:&quot;weapon/lhit.wav&quot; lightning gun zap)
* Give it a targetname and create some kind of trigger that targets it.

How does this work? train_wait is a function used by [[func_train]] entities, which plays it's &quot;noise&quot; property. A variation on this hack is to do &quot;use&quot; &quot;plat_hit_bottom&quot; and &quot;noise1&quot; &quot;&lt;sound&gt;&quot;, which works much the same way.

===Shoot Monster Projectiles===
This can be a fun one to fool around with. Many of the monsters in Quake have projectile attacks, and we can make an entity that can shoot them on command! Note that these do also play the sounds of the monster shooting them. 

There are also a few caveats: First, in general, you need the monster already present in the map so that the precaching of sounds and sprites and such will work. Second, you need to target them at an entity that will be the 'enemy', which means knowing it's index in the edict list.  If you want to shoot at Player1, this is simple, as Player1 is always index 1. Some of these also require the targeted enemy to be alive, which means they need &quot;health&quot; &quot;1&quot;.

* Create an info_notnull entity.
* Add the key &quot;use&quot; &quot;OgreFireGrenade&quot;. (Or any other function listed below)
* Add the key &quot;health&quot; &quot;1&quot;. (Being 'alive' is required by some enemy attacks)
* Add the key &quot;enemy&quot; &quot;&lt;index of enemy to target&gt;&quot;.
* Give it a targetname and create some kind of trigger that targets it.

When triggered, the info_notnull above will fire a grenade toward it's enemy (remember, Ogres are not Z-Aware, so will not angle the shot up or down). You can find the index of entities via the console command ''edictlist'' in most modern engines. Note that the index of an entity is not always guaranteed to be the same on all difficulties or after adding or removing entities from a map. Here are some other projectiles you can use:

* &quot;OgreFireGrenade&quot; - [[Ogre]]'s Grenade.
* &quot;CastLightning&quot; - [[Shambler]] Lightning (you may want to trigger this multiple times)
* &quot;hknight_shot&quot; - [[Death_Knight|Hell Knight]] magic attack. This is just 1 missile.
* &quot;Wiz_StartFast&quot; - [[Scrag]] slime bolt. 2 are fired.
* &quot;enforcer_fire&quot; - [[Enforcer]] laser.
* &quot;ZombieFireGrenade&quot; - [[Zombie]] gib toss.
* &quot;boss_missile&quot; - [[Chthon]]'s homing lava balls.
* &quot;ShalMissile&quot; - [[Vore]]'s homing voreball.

===Increment the Monsters Killed===
This is a useful one if you have placed monsters in a map that the player will not ever be able to kill, such as in combination with another hack which requires a precache. It is also quite simple!

* Create an info_notnull entity.
* Add the key (use : boss_death10).
* Give it a targetname and create some kind of trigger that targets it.

How does this work? boss_death10 is a function used by Chthon that is triggered at the end of his death animation which increments the counter that tracks the monsters you have killed. This also removes the entity that calls it, so you must have one of these info_notnull entities set up for each increment you want to do. Misuse of this hack also lead to situations where you have 'killed' more monsters than exist in the map, such as a counter showing the player has killed 11/10 monsters.</text>
      <sha1>ba1eulfvwhsd8ss94xk0kwapmz7m2jk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2809</id>
      <parentid>2805</parentid>
      <timestamp>2013-04-07T15:19:59Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Dormant triggers hack</comment>
      <text xml:space="preserve" bytes="11429">This page is intended to be an explanation of the tricks written about on this page: http://www.celephais.net/board/view_thread.php?id=37116
and Preach's excellent blog posts on the subject:
http://tomeofpreach.wordpress.com/category/map-hacks/
----


'''Map-based hacks''' are non-standard techniques in [[Mapping | mapping]] that allow the customization of [[Entity | entities]] in a map without resorting to [[Modding | modding]]. They are made possible due to the fairly open nature of [[Quake-C]]. The so-called hacks involve the modification, replacment or addition of keys in existing entities to enhance their functionality as well as the creation of completely new ones. While they generally work reliably in [[Vanilla Quake]] (&quot;ID1&quot;), they can cause compatibility problems if the map is run with a [[Mod | mod]], ranging from incorrect appearance to engine crashes, which means they have to be used with caution.

==Theory behind the hacks==

All map entities have a set of core functions and default keys defined in their corresponding [[Quake-C]] file which determine their behavior. In most cases, these functions are fixed with the classname and cannot be changed. However, there are a few exceptions either due to a difference in terminology used in the map source and in the game code (for instance, the definition of sound effects), or because certain functions remain unused in some entities.

Most hacks revolve around creating new versions of existing entities by incorporating their desired functions into an [[info_notnull]] entity, which can be regarded as a blank canvas since it does not have any predefined functions or behavior. Therefore, it is possible to recreate every single map entity in the game as into_notnull.
When using this ''wildcard'' entity, it is often essential to set a corresponding field to define its spawn function, how it behaves when triggered or touched.

*'''think''' - This function determines the what the entity does automatically after the server starts, or to be more precise, after the amount of time set in its mandatory sub-function ''nextthink''. Depending on which kind of role the info_notnull is meant is fulfill, the think field must contain the spawn function, e.g. ''InitTrigger'', ''PlaceItem'', ''walkmonster_start_go''.
*'''use''' - This function determines how the entity reacts when being triggered by another entity, or in some cases when being activated or killed. It can serve as a spawn function for an initially dormant entity, e.g. ''InitTrigger'', ''classname'', or call a subroutine like e.g. ''SUB_UseTargets'', ''SUB_Remove'', ''SUB_regen''.
*'''touch''' - This function determines what happens if the entity is touched by another entity, most notably in triggers, e.g. ''multi_touch'', ''hurt_touch'',''SUB_Null''.

In addition to the spawn function, there are several other possibilities or requirements to further determine the behavior of the new entity and its appearance in the game, such as its [[Model | model]] and [[Sounds | sound effects]]. For many hacks to work, it is important that all of such resources are precached, which require the corresponding standard [[Entity_guide | entities]] to be present in the map alongside the new ones.

==Triggers==
===Point-based triggers with custom bounding box===
While most of the standard [[Entity_guide | triggers]] are by default defined as [[Entity#Overview | brush entities]], it is possible to for them to be used as [[Entity#Overview | point entities]] as well. The difference is that they only work at a single point instead of a larger volume that would otherwise be defined by the [[Brush | brush]]. They also do not count against the [[Engine_Limits | model limit]]. Among other fields of use, this makes them a good alternative for monster teleporters (the ''silent'' spawnflag must be set), for example.
There are two downsides, however. If set to be shootable, point triggers can only be activated by splash damage. Furthermore, in a normal map environment, touchable point triggers are easy to miss for the player. The latter can be worked around as it is possible to assign any precached model to serve as the bounding box of the point trigger. This is achieved by adding a '''model''' field to the trigger which points the corresponding entity, such as an item, a monster, or a brush entity.

For instance, ''&quot;model&quot; &quot;maps/b_bh100.bsp&quot;'' will make the bounding box the size of a [[Megahealth]] (32*32*32 units), ''&quot;model&quot; &quot;progs/shambler.mdl&quot;'' will make it the size of a [[Shambler]] (64*64*96 units). Using any kind of .bsp and .mdl model is the easiest way, but it bears the risk of incompatibility to mods that lack the referenced objects or treat them differently, and will likely result in a crash. A safe, but also more complicated way is to reference existing brush models from within the map, e.g. ''&quot;model&quot; &quot;*10&quot;''. This makes placing the such a trigger very tricky, however, because its location has to be determined by the location of the original brush entity in its relation to the world [[Origin|origin]] (0 0 0).

Example:
&lt;pre&gt;&quot;classname&quot; &quot;trigger_once&quot;
&quot;origin&quot; &quot;1 2 3&quot;
&quot;target&quot; &quot;t1&quot;
&quot;model&quot; &quot;progs/player.mdl&quot;&lt;/pre&gt;

===Dormant triggers===
Like any other entities, triggers spawn immediately upon map start. In some occasions, however, it is desirable for triggers to remain initially dormant and only be activated after a certain event or if the player passes through an area for the second time. The trick to create such a trigger is to use a brush-based [[info_notnull]] entity that has its '''use''' field set to ''InitTrigger'', so it will spawn a trigger entity when being triggered itself, and a '''touch''' field that calls the appropriate [[triggers.qc|function]] for interaction. Additional keys required for proper functionality are the same as for the standard entity. This works with all standard trigger varieties and can also be used in conjunction with the [[Map_based_hacks#Point-based triggers with custom bounding box|point trigger]] hack.

Example: &lt;pre&gt;&quot;classname&quot; &quot;info_notnull&quot;
&quot;targetname&quot; &quot;t1&quot;
&quot;use&quot; &quot;InitTrigger&quot;
&quot;touch&quot; &quot;changelevel_touch&quot;
&quot;map&quot; &quot;start&quot;
// brush&lt;/pre&gt;

It can also be done by simply inserting the classname of the desired trigger into the '''use''' field of the [[info_notnull]]. This does not require setting the corresponding '''touch''' function as it is called automatically.

Example:
&lt;pre&gt;&quot;classname&quot; &quot;info_notnull&quot;
&quot;targetname&quot; &quot;t1&quot;
&quot;use&quot; &quot;trigger_changelevel&quot;
&quot;map&quot; &quot;start&quot;
// brush&lt;/pre&gt;


==Miscellaneous hacks==
===Triggerable explosion===
One of the most well known tricks allows the creation of a triggerable explosion using the '''info_notnull''' entity. It is created as follows:

* Create an info_notnull entity.
* Add the key &quot;use&quot; &quot;barrel_explode&quot;.
* Give it a targetname and create some kind of trigger that targets it.

When the trigger is fired, an explosion will occur where the info_notnull is. Be careful, since the explosion is more than just an effect and will injure the player if they are near enough. This is especially true of barrel_explode, as it is one of the most powerful explosions in the game. Fortunately, there are two other explosions that can be used instead by setting the value of the 'use' key to one of the following:

* ''barrel_explode'' - Barrel explosion
* ''OgreGrenadeExplode'' - Ogre grenade explosion (low damage and fairly safe)
* ''tbaby_die2'' - Spawn death explosion

Note that these explosion functions remove the info_notnull entity from the level when the explosion animation has played, so it is not possible to use them multiple times unless the trigger is fired repeatedly at intervals of less than 0.5 seconds. For larger explosion effects, it is possible to set up multiple small explosions in the same way and trigger them in a sequence using [[trigger_relay|trigger_relays]].

===Triggered sounds===
You can play most any sound you wish by triggering it! This requires the sound to be precached, so an entity which uses it must be present in the map beforehand (for example, place an Ogre if you want to use it's chainsaw sounds). It's a pretty simple setup too:

* Create an info_notnull entity.
* Add the key &quot;use&quot; &quot;train_wait&quot; or &quot;use&quot; &quot;plat_hit_bottom&quot;.
* Add the key &quot;noise&quot; &quot;&lt;sound you wish to play&gt;&quot;. (example:&quot;weapon/lhit.wav&quot; lightning gun zap)
* Give it a targetname and create some kind of trigger that targets it.

How does this work? train_wait is a function used by [[func_train]] entities, which plays it's &quot;noise&quot; property. A variation on this hack is to do &quot;use&quot; &quot;plat_hit_bottom&quot; and &quot;noise1&quot; &quot;&lt;sound&gt;&quot;, which works much the same way.

===Shoot Monster Projectiles===
This can be a fun one to fool around with. Many of the monsters in Quake have projectile attacks, and we can make an entity that can shoot them on command! Note that these do also play the sounds of the monster shooting them. 

There are also a few caveats: First, in general, you need the monster already present in the map so that the precaching of sounds and sprites and such will work. Second, you need to target them at an entity that will be the 'enemy', which means knowing it's index in the edict list.  If you want to shoot at Player1, this is simple, as Player1 is always index 1. Some of these also require the targeted enemy to be alive, which means they need &quot;health&quot; &quot;1&quot;.

* Create an info_notnull entity.
* Add the key &quot;use&quot; &quot;OgreFireGrenade&quot;. (Or any other function listed below)
* Add the key &quot;health&quot; &quot;1&quot;. (Being 'alive' is required by some enemy attacks)
* Add the key &quot;enemy&quot; &quot;&lt;index of enemy to target&gt;&quot;.
* Give it a targetname and create some kind of trigger that targets it.

When triggered, the info_notnull above will fire a grenade toward it's enemy (remember, Ogres are not Z-Aware, so will not angle the shot up or down). You can find the index of entities via the console command ''edictlist'' in most modern engines. Note that the index of an entity is not always guaranteed to be the same on all difficulties or after adding or removing entities from a map. Here are some other projectiles you can use:

* &quot;OgreFireGrenade&quot; - [[Ogre]]'s Grenade.
* &quot;CastLightning&quot; - [[Shambler]] Lightning (you may want to trigger this multiple times)
* &quot;hknight_shot&quot; - [[Death_Knight|Hell Knight]] magic attack. This is just 1 missile.
* &quot;Wiz_StartFast&quot; - [[Scrag]] slime bolt. 2 are fired.
* &quot;enforcer_fire&quot; - [[Enforcer]] laser.
* &quot;ZombieFireGrenade&quot; - [[Zombie]] gib toss.
* &quot;boss_missile&quot; - [[Chthon]]'s homing lava balls.
* &quot;ShalMissile&quot; - [[Vore]]'s homing voreball.

===Increment the Monsters Killed===
This is a useful one if you have placed monsters in a map that the player will not ever be able to kill, such as in combination with another hack which requires a precache. It is also quite simple!

* Create an info_notnull entity.
* Add the key (use : boss_death10).
* Give it a targetname and create some kind of trigger that targets it.

How does this work? boss_death10 is a function used by Chthon that is triggered at the end of his death animation which increments the counter that tracks the monsters you have killed. This also removes the entity that calls it, so you must have one of these info_notnull entities set up for each increment you want to do. Misuse of this hack also lead to situations where you have 'killed' more monsters than exist in the map, such as a counter showing the player has killed 11/10 monsters.</text>
      <sha1>g6yde116y2ockpkznsbufuwaogvursf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2810</id>
      <parentid>2809</parentid>
      <timestamp>2013-04-07T15:27:59Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <minor/>
      <comment>/* Point-based triggers with custom bounding box */</comment>
      <text xml:space="preserve" bytes="11442">This page is intended to be an explanation of the tricks written about on this page: http://www.celephais.net/board/view_thread.php?id=37116
and Preach's excellent blog posts on the subject:
http://tomeofpreach.wordpress.com/category/map-hacks/
----


'''Map-based hacks''' are non-standard techniques in [[Mapping | mapping]] that allow the customization of [[Entity | entities]] in a map without resorting to [[Modding | modding]]. They are made possible due to the fairly open nature of [[Quake-C]]. The so-called hacks involve the modification, replacment or addition of keys in existing entities to enhance their functionality as well as the creation of completely new ones. While they generally work reliably in [[Vanilla Quake]] (&quot;ID1&quot;), they can cause compatibility problems if the map is run with a [[Mod | mod]], ranging from incorrect appearance to engine crashes, which means they have to be used with caution.

==Theory behind the hacks==

All map entities have a set of core functions and default keys defined in their corresponding [[Quake-C]] file which determine their behavior. In most cases, these functions are fixed with the classname and cannot be changed. However, there are a few exceptions either due to a difference in terminology used in the map source and in the game code (for instance, the definition of sound effects), or because certain functions remain unused in some entities.

Most hacks revolve around creating new versions of existing entities by incorporating their desired functions into an [[info_notnull]] entity, which can be regarded as a blank canvas since it does not have any predefined functions or behavior. Therefore, it is possible to recreate every single map entity in the game as into_notnull.
When using this ''wildcard'' entity, it is often essential to set a corresponding field to define its spawn function, how it behaves when triggered or touched.

*'''think''' - This function determines the what the entity does automatically after the server starts, or to be more precise, after the amount of time set in its mandatory sub-function ''nextthink''. Depending on which kind of role the info_notnull is meant is fulfill, the think field must contain the spawn function, e.g. ''InitTrigger'', ''PlaceItem'', ''walkmonster_start_go''.
*'''use''' - This function determines how the entity reacts when being triggered by another entity, or in some cases when being activated or killed. It can serve as a spawn function for an initially dormant entity, e.g. ''InitTrigger'', ''classname'', or call a subroutine like e.g. ''SUB_UseTargets'', ''SUB_Remove'', ''SUB_regen''.
*'''touch''' - This function determines what happens if the entity is touched by another entity, most notably in triggers, e.g. ''multi_touch'', ''hurt_touch'',''SUB_Null''.

In addition to the spawn function, there are several other possibilities or requirements to further determine the behavior of the new entity and its appearance in the game, such as its [[Model | model]] and [[Sounds | sound effects]]. For many hacks to work, it is important that all of such resources are precached, which require the corresponding standard [[Entity_guide | entities]] to be present in the map alongside the new ones.

==Triggers==
===Point-based triggers with custom bounding box===
While most of the standard [[Entity_guide | triggers]] are by default defined as [[Entity#Overview | brush entities]], it is possible to for them to be used as [[Entity#Overview | point entities]] as well. The difference is that they only work at a single point instead of a larger volume that would otherwise be determined by the [[Brush | brush]]. They also do not count towards the [[Engine_Limits | model limit]]. Among other fields of use, this makes them a good alternative for monster teleporters (the ''silent'' spawnflag must be set), for example.
There are two downsides, however. If set to be shootable, point triggers can only be activated by splash damage. Furthermore, in a normal map environment, touchable point triggers are easy to miss for the player. The latter can be worked around as it is possible to assign any precached model to serve as the bounding box of the point trigger. This is achieved by adding a '''model''' field to the trigger which points the corresponding entity, such as an item, a monster, or a brush entity.

For instance, ''&quot;model&quot; &quot;maps/b_bh100.bsp&quot;'' will make the bounding box the size of a [[Megahealth]] (32*32*32 units), ''&quot;model&quot; &quot;progs/shambler.mdl&quot;'' will make it the size of a [[Shambler]] (64*64*96 units). Using any kind of .bsp and .mdl model is the easiest way, but it bears the risk of producing incompatibility to mods that lack the referenced objects or treat them differently, and will likely result in a crash. A safe, but also more complicated way is to reference existing brush models from within the map, e.g. ''&quot;model&quot; &quot;*10&quot;''. This makes placing the such a trigger very tricky, however, because its location has to be determined by the location of the original brush entity in its relation to the world [[Origin|origin]] (0 0 0).

Example:
&lt;pre&gt;&quot;classname&quot; &quot;trigger_once&quot;
&quot;origin&quot; &quot;1 2 3&quot;
&quot;target&quot; &quot;t1&quot;
&quot;model&quot; &quot;progs/player.mdl&quot;&lt;/pre&gt;

===Dormant triggers===
Like any other entities, triggers spawn immediately upon map start. In some occasions, however, it is desirable for triggers to remain initially dormant and only be activated after a certain event or if the player passes through an area for the second time. The trick to create such a trigger is to use a brush-based [[info_notnull]] entity that has its '''use''' field set to ''InitTrigger'', so it will spawn a trigger entity when being triggered itself, and a '''touch''' field that calls the appropriate [[triggers.qc|function]] for interaction. Additional keys required for proper functionality are the same as for the standard entity. This works with all standard trigger varieties and can also be used in conjunction with the [[Map_based_hacks#Point-based triggers with custom bounding box|point trigger]] hack.

Example: &lt;pre&gt;&quot;classname&quot; &quot;info_notnull&quot;
&quot;targetname&quot; &quot;t1&quot;
&quot;use&quot; &quot;InitTrigger&quot;
&quot;touch&quot; &quot;changelevel_touch&quot;
&quot;map&quot; &quot;start&quot;
// brush&lt;/pre&gt;

It can also be done by simply inserting the classname of the desired trigger into the '''use''' field of the [[info_notnull]]. This does not require setting the corresponding '''touch''' function as it is called automatically.

Example:
&lt;pre&gt;&quot;classname&quot; &quot;info_notnull&quot;
&quot;targetname&quot; &quot;t1&quot;
&quot;use&quot; &quot;trigger_changelevel&quot;
&quot;map&quot; &quot;start&quot;
// brush&lt;/pre&gt;


==Miscellaneous hacks==
===Triggerable explosion===
One of the most well known tricks allows the creation of a triggerable explosion using the '''info_notnull''' entity. It is created as follows:

* Create an info_notnull entity.
* Add the key &quot;use&quot; &quot;barrel_explode&quot;.
* Give it a targetname and create some kind of trigger that targets it.

When the trigger is fired, an explosion will occur where the info_notnull is. Be careful, since the explosion is more than just an effect and will injure the player if they are near enough. This is especially true of barrel_explode, as it is one of the most powerful explosions in the game. Fortunately, there are two other explosions that can be used instead by setting the value of the 'use' key to one of the following:

* ''barrel_explode'' - Barrel explosion
* ''OgreGrenadeExplode'' - Ogre grenade explosion (low damage and fairly safe)
* ''tbaby_die2'' - Spawn death explosion

Note that these explosion functions remove the info_notnull entity from the level when the explosion animation has played, so it is not possible to use them multiple times unless the trigger is fired repeatedly at intervals of less than 0.5 seconds. For larger explosion effects, it is possible to set up multiple small explosions in the same way and trigger them in a sequence using [[trigger_relay|trigger_relays]].

===Triggered sounds===
You can play most any sound you wish by triggering it! This requires the sound to be precached, so an entity which uses it must be present in the map beforehand (for example, place an Ogre if you want to use it's chainsaw sounds). It's a pretty simple setup too:

* Create an info_notnull entity.
* Add the key &quot;use&quot; &quot;train_wait&quot; or &quot;use&quot; &quot;plat_hit_bottom&quot;.
* Add the key &quot;noise&quot; &quot;&lt;sound you wish to play&gt;&quot;. (example:&quot;weapon/lhit.wav&quot; lightning gun zap)
* Give it a targetname and create some kind of trigger that targets it.

How does this work? train_wait is a function used by [[func_train]] entities, which plays it's &quot;noise&quot; property. A variation on this hack is to do &quot;use&quot; &quot;plat_hit_bottom&quot; and &quot;noise1&quot; &quot;&lt;sound&gt;&quot;, which works much the same way.

===Shoot Monster Projectiles===
This can be a fun one to fool around with. Many of the monsters in Quake have projectile attacks, and we can make an entity that can shoot them on command! Note that these do also play the sounds of the monster shooting them. 

There are also a few caveats: First, in general, you need the monster already present in the map so that the precaching of sounds and sprites and such will work. Second, you need to target them at an entity that will be the 'enemy', which means knowing it's index in the edict list.  If you want to shoot at Player1, this is simple, as Player1 is always index 1. Some of these also require the targeted enemy to be alive, which means they need &quot;health&quot; &quot;1&quot;.

* Create an info_notnull entity.
* Add the key &quot;use&quot; &quot;OgreFireGrenade&quot;. (Or any other function listed below)
* Add the key &quot;health&quot; &quot;1&quot;. (Being 'alive' is required by some enemy attacks)
* Add the key &quot;enemy&quot; &quot;&lt;index of enemy to target&gt;&quot;.
* Give it a targetname and create some kind of trigger that targets it.

When triggered, the info_notnull above will fire a grenade toward it's enemy (remember, Ogres are not Z-Aware, so will not angle the shot up or down). You can find the index of entities via the console command ''edictlist'' in most modern engines. Note that the index of an entity is not always guaranteed to be the same on all difficulties or after adding or removing entities from a map. Here are some other projectiles you can use:

* &quot;OgreFireGrenade&quot; - [[Ogre]]'s Grenade.
* &quot;CastLightning&quot; - [[Shambler]] Lightning (you may want to trigger this multiple times)
* &quot;hknight_shot&quot; - [[Death_Knight|Hell Knight]] magic attack. This is just 1 missile.
* &quot;Wiz_StartFast&quot; - [[Scrag]] slime bolt. 2 are fired.
* &quot;enforcer_fire&quot; - [[Enforcer]] laser.
* &quot;ZombieFireGrenade&quot; - [[Zombie]] gib toss.
* &quot;boss_missile&quot; - [[Chthon]]'s homing lava balls.
* &quot;ShalMissile&quot; - [[Vore]]'s homing voreball.

===Increment the Monsters Killed===
This is a useful one if you have placed monsters in a map that the player will not ever be able to kill, such as in combination with another hack which requires a precache. It is also quite simple!

* Create an info_notnull entity.
* Add the key (use : boss_death10).
* Give it a targetname and create some kind of trigger that targets it.

How does this work? boss_death10 is a function used by Chthon that is triggered at the end of his death animation which increments the counter that tracks the monsters you have killed. This also removes the entity that calls it, so you must have one of these info_notnull entities set up for each increment you want to do. Misuse of this hack also lead to situations where you have 'killed' more monsters than exist in the map, such as a counter showing the player has killed 11/10 monsters.</text>
      <sha1>8oui77hu9agztbd4jkgpy6of9h83t4m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Map compiling</title>
    <ns>0</ns>
    <id>577</id>
    <revision>
      <id>1499</id>
      <timestamp>2009-12-21T11:23:24Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Added links to BJP's and LordHavocs tools as a start. Should each tool/step of the compiling process have its own wiki page or all be on this one?</comment>
      <text xml:space="preserve" bytes="277">Compiling a map is done in three steps.

* [[QBSP]]
* [[VIS]]
* [[LIGHT]]


----


Compiling tools:

* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]</text>
      <sha1>g5j1waqdyw3lpdzwwmivk32bsfcnpxd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1506</id>
      <parentid>1499</parentid>
      <timestamp>2010-01-10T07:05:31Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="2148">'''Map Compiling''' is the process of converting a [[level]] from the [[map file]] generated by a [[level editor]] into a [[bsp file]] which is ready to be played in-game.  It generally consists of three steps: QBSP, Light, and Vis.

==QBSP==
{{Main|QBSP}}
'''QBSP''' is the first stage of map compilation.  It is the process that reads the map file and generates the bsp, and in doing so calculates all of the geometry and collision data for the level.  It also extracts any needed textures from the [[wad files]] and repackages them into the bsp file.  After this step, the level can be loaded into the game engine.  However, it will not have any lighting or visibility data.

==Light==
{{Main|Light (map compiling)}}
'''Light''' is the stage of map compilation that calculates [[lightmaps]] for the level.  Using the light entities from the [[entity lump]] of the bsp file, it precalculates the lighting on every surface in the level, and saves that lighting as lightmaps in the bsp file.

==Vis==
{{Main|Vis}}
'''Vis''' is the stage of map compilation that calculates [[PVS]] data for the level.  With PVS data, the engine need only draw those parts of the level (and those entities) that might be visible from the current player location.  This performance optimization was necessary to allow levels as large and as complex as Quake's on the computers of the day.  And even today, most games use equivalent systems to allow levels, props, and NPCs to be as detailed as possible.

==Other Compiling Tools==
In addition to the above three tools, some mappers need additional tools for their specific develompent pipeline.

===Map Converters===
Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.

===Skip===
Skip tools are standalone programs that can remove [[skip texture|skip textures]] from a level, as skip textures are not supported by any QBSP version.

==Links==
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]</text>
      <sha1>g59l8tohagreel0uy4pc3vqykvqn22a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1507</id>
      <parentid>1506</parentid>
      <timestamp>2010-01-10T07:08:13Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>/* Map Converters */</comment>
      <text xml:space="preserve" bytes="2301">'''Map Compiling''' is the process of converting a [[level]] from the [[map file]] generated by a [[level editor]] into a [[bsp file]] which is ready to be played in-game.  It generally consists of three steps: QBSP, Light, and Vis.

==QBSP==
{{Main|QBSP}}
'''QBSP''' is the first stage of map compilation.  It is the process that reads the map file and generates the bsp, and in doing so calculates all of the geometry and collision data for the level.  It also extracts any needed textures from the [[wad files]] and repackages them into the bsp file.  After this step, the level can be loaded into the game engine.  However, it will not have any lighting or visibility data.

==Light==
{{Main|Light (map compiling)}}
'''Light''' is the stage of map compilation that calculates [[lightmaps]] for the level.  Using the light entities from the [[entity lump]] of the bsp file, it precalculates the lighting on every surface in the level, and saves that lighting as lightmaps in the bsp file.

==Vis==
{{Main|Vis}}
'''Vis''' is the stage of map compilation that calculates [[PVS]] data for the level.  With PVS data, the engine need only draw those parts of the level (and those entities) that might be visible from the current player location.  This performance optimization was necessary to allow levels as large and as complex as Quake's on the computers of the day.  And even today, most games use equivalent systems to allow levels, props, and NPCs to be as detailed as possible.

==Other Compiling Tools==
In addition to the above three tools, some mappers need additional tools for their specific develompent pipeline.

===Map Converters===
A number of games based on [[id software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.

===Skip===
Skip tools are standalone programs that can remove [[skip texture|skip textures]] from a level, as skip textures are not supported by any QBSP version.

==Links==
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]</text>
      <sha1>nnf45oflo07pzn46wwy9zzh0ntoi4zv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1508</id>
      <parentid>1507</parentid>
      <timestamp>2010-01-10T10:27:49Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>/* Skip */</comment>
      <text xml:space="preserve" bytes="2391">'''Map Compiling''' is the process of converting a [[level]] from the [[map file]] generated by a [[level editor]] into a [[bsp file]] which is ready to be played in-game.  It generally consists of three steps: QBSP, Light, and Vis.

==QBSP==
{{Main|QBSP}}
'''QBSP''' is the first stage of map compilation.  It is the process that reads the map file and generates the bsp, and in doing so calculates all of the geometry and collision data for the level.  It also extracts any needed textures from the [[wad files]] and repackages them into the bsp file.  After this step, the level can be loaded into the game engine.  However, it will not have any lighting or visibility data.

==Light==
{{Main|Light (map compiling)}}
'''Light''' is the stage of map compilation that calculates [[lightmaps]] for the level.  Using the light entities from the [[entity lump]] of the bsp file, it precalculates the lighting on every surface in the level, and saves that lighting as lightmaps in the bsp file.

==Vis==
{{Main|Vis}}
'''Vis''' is the stage of map compilation that calculates [[PVS]] data for the level.  With PVS data, the engine need only draw those parts of the level (and those entities) that might be visible from the current player location.  This performance optimization was necessary to allow levels as large and as complex as Quake's on the computers of the day.  And even today, most games use equivalent systems to allow levels, props, and NPCs to be as detailed as possible.

==Other Compiling Tools==
In addition to the above three tools, some mappers need additional tools for their specific develompent pipeline.

===Map Converters===
A number of games based on [[id software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.

===Skip===
Skip tools are standalone programs that can remove all surfaces textured with a [[skip texture]] from a level, so that they are not rendered in-game.  This requires a seperate tool because skip textures are not supported by any QBSP version.

==Links==
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]</text>
      <sha1>auaz629ja2h47xeqj8kock9k58kalg7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1509</id>
      <parentid>1508</parentid>
      <timestamp>2010-01-10T10:30:02Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="2398">'''Map Compiling''' is the process of converting a [[level]] from a [[map file]], which generated by a [[level editor]], into a [[bsp file]], which is ready to be played in-game.  It generally consists of three steps: QBSP, Light, and Vis.

==QBSP==
{{Main|QBSP}}
'''QBSP''' is the first stage of map compilation.  It is the process that reads the map file and generates the bsp, and in doing so calculates all of the geometry and collision data for the level.  It also extracts any needed textures from the [[wad files]] and repackages them into the bsp file.  After this step, the level can be loaded into the game engine.  However, it will not have any lighting or visibility data.

==Light==
{{Main|Light (map compiling)}}
'''Light''' is the stage of map compilation that calculates [[lightmaps]] for the level.  Using the light entities from the [[entity lump]] of the bsp file, it precalculates the lighting on every surface in the level, and saves that lighting as lightmaps in the bsp file.

==Vis==
{{Main|Vis}}
'''Vis''' is the stage of map compilation that calculates [[PVS]] data for the level.  With PVS data, the engine need only draw those parts of the level (and those entities) that might be visible from the current player location.  This performance optimization was necessary to allow levels as large and as complex as Quake's on the computers of the day.  And even today, most games use equivalent systems to allow levels, props, and NPCs to be as detailed as possible.

==Other Compiling Tools==
In addition to the above three tools, some mappers need additional tools for their specific develompent pipeline.

===Map Converters===
A number of games based on [[id software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.

===Skip===
Skip tools are standalone programs that can remove all surfaces textured with a [[skip texture]] from a level, so that they are not rendered in-game.  This requires a seperate tool because skip textures are not supported by any QBSP version.

==Links==
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]</text>
      <sha1>ov9pxo9hfae9y5yfi0ts9zx2mul6x8u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1510</id>
      <parentid>1509</parentid>
      <timestamp>2010-01-11T07:29:52Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="2410">'''Map Compiling''' is the process of converting a [[level]] from a [[map file]], which generated by a [[level editor]], into a [[bsp file]], which is ready to be played in-game.  It generally consists of three steps: [[QBSP]], [[Light]], and [[Vis]].

==QBSP==
{{Main|QBSP}}
'''QBSP''' is the first stage of map compilation.  It is the process that reads the map file and generates the bsp, and in doing so calculates all of the geometry and collision data for the level.  It also extracts any needed textures from the [[wad files]] and repackages them into the bsp file.  After this step, the level can be loaded into the game engine.  However, it will not have any lighting or visibility data.

==Light==
{{Main|Light (map compiling)}}
'''Light''' is the stage of map compilation that calculates [[lightmaps]] for the level.  Using the light entities from the [[entity lump]] of the bsp file, it precalculates the lighting on every surface in the level, and saves that lighting as lightmaps in the bsp file.

==Vis==
{{Main|Vis}}
'''Vis''' is the stage of map compilation that calculates [[PVS]] data for the level.  With PVS data, the engine need only draw those parts of the level (and those entities) that might be visible from the current player location.  This performance optimization was necessary to allow levels as large and as complex as Quake's on the computers of the day.  And even today, most games use equivalent systems to allow levels, props, and NPCs to be as detailed as possible.

==Other Compiling Tools==
In addition to the above three tools, some mappers need additional tools for their specific develompent pipeline.

===Map Converters===
A number of games based on [[id software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.

===Skip===
Skip tools are standalone programs that can remove all surfaces textured with a [[skip texture]] from a level, so that they are not rendered in-game.  This requires a seperate tool because skip textures are not supported by any QBSP version.

==Links==
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]</text>
      <sha1>1yz57wyokyix7i4abodrd675tdobl4x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1515</id>
      <parentid>1510</parentid>
      <timestamp>2010-01-11T08:07:36Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <minor/>
      <comment>[[Map Compiling]] moved to [[Map compiling]]</comment>
      <text xml:space="preserve" bytes="2410">'''Map Compiling''' is the process of converting a [[level]] from a [[map file]], which generated by a [[level editor]], into a [[bsp file]], which is ready to be played in-game.  It generally consists of three steps: [[QBSP]], [[Light]], and [[Vis]].

==QBSP==
{{Main|QBSP}}
'''QBSP''' is the first stage of map compilation.  It is the process that reads the map file and generates the bsp, and in doing so calculates all of the geometry and collision data for the level.  It also extracts any needed textures from the [[wad files]] and repackages them into the bsp file.  After this step, the level can be loaded into the game engine.  However, it will not have any lighting or visibility data.

==Light==
{{Main|Light (map compiling)}}
'''Light''' is the stage of map compilation that calculates [[lightmaps]] for the level.  Using the light entities from the [[entity lump]] of the bsp file, it precalculates the lighting on every surface in the level, and saves that lighting as lightmaps in the bsp file.

==Vis==
{{Main|Vis}}
'''Vis''' is the stage of map compilation that calculates [[PVS]] data for the level.  With PVS data, the engine need only draw those parts of the level (and those entities) that might be visible from the current player location.  This performance optimization was necessary to allow levels as large and as complex as Quake's on the computers of the day.  And even today, most games use equivalent systems to allow levels, props, and NPCs to be as detailed as possible.

==Other Compiling Tools==
In addition to the above three tools, some mappers need additional tools for their specific develompent pipeline.

===Map Converters===
A number of games based on [[id software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.

===Skip===
Skip tools are standalone programs that can remove all surfaces textured with a [[skip texture]] from a level, so that they are not rendered in-game.  This requires a seperate tool because skip textures are not supported by any QBSP version.

==Links==
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]</text>
      <sha1>1yz57wyokyix7i4abodrd675tdobl4x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1522</id>
      <parentid>1515</parentid>
      <timestamp>2010-01-11T08:36:00Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>/* Map Converters */</comment>
      <text xml:space="preserve" bytes="2410">'''Map Compiling''' is the process of converting a [[level]] from a [[map file]], which generated by a [[level editor]], into a [[bsp file]], which is ready to be played in-game.  It generally consists of three steps: [[QBSP]], [[Light]], and [[Vis]].

==QBSP==
{{Main|QBSP}}
'''QBSP''' is the first stage of map compilation.  It is the process that reads the map file and generates the bsp, and in doing so calculates all of the geometry and collision data for the level.  It also extracts any needed textures from the [[wad files]] and repackages them into the bsp file.  After this step, the level can be loaded into the game engine.  However, it will not have any lighting or visibility data.

==Light==
{{Main|Light (map compiling)}}
'''Light''' is the stage of map compilation that calculates [[lightmaps]] for the level.  Using the light entities from the [[entity lump]] of the bsp file, it precalculates the lighting on every surface in the level, and saves that lighting as lightmaps in the bsp file.

==Vis==
{{Main|Vis}}
'''Vis''' is the stage of map compilation that calculates [[PVS]] data for the level.  With PVS data, the engine need only draw those parts of the level (and those entities) that might be visible from the current player location.  This performance optimization was necessary to allow levels as large and as complex as Quake's on the computers of the day.  And even today, most games use equivalent systems to allow levels, props, and NPCs to be as detailed as possible.

==Other Compiling Tools==
In addition to the above three tools, some mappers need additional tools for their specific develompent pipeline.

===Map Converters===
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.

===Skip===
Skip tools are standalone programs that can remove all surfaces textured with a [[skip texture]] from a level, so that they are not rendered in-game.  This requires a seperate tool because skip textures are not supported by any QBSP version.

==Links==
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]</text>
      <sha1>4z3rrb1ps7kq7m1zvqysbnkcueoyrpa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1523</id>
      <parentid>1522</parentid>
      <timestamp>2010-01-11T08:36:23Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>/* QBSP */</comment>
      <text xml:space="preserve" bytes="2419">'''Map Compiling''' is the process of converting a [[level]] from a [[map file]], which generated by a [[level editor]], into a [[bsp file]], which is ready to be played in-game.  It generally consists of three steps: [[QBSP]], [[Light]], and [[Vis]].

==QBSP==
{{Main|QBSP}}
'''QBSP''' is the first stage of map compilation.  It is the process that reads the map file and generates the bsp, and in doing so calculates all of the geometry and collision data for the level.  It also extracts any needed textures from the [[wad file|wad files]] and repackages them into the bsp file.  After this step, the level can be loaded into the game engine.  However, it will not have any lighting or visibility data.

==Light==
{{Main|Light (map compiling)}}
'''Light''' is the stage of map compilation that calculates [[lightmaps]] for the level.  Using the light entities from the [[entity lump]] of the bsp file, it precalculates the lighting on every surface in the level, and saves that lighting as lightmaps in the bsp file.

==Vis==
{{Main|Vis}}
'''Vis''' is the stage of map compilation that calculates [[PVS]] data for the level.  With PVS data, the engine need only draw those parts of the level (and those entities) that might be visible from the current player location.  This performance optimization was necessary to allow levels as large and as complex as Quake's on the computers of the day.  And even today, most games use equivalent systems to allow levels, props, and NPCs to be as detailed as possible.

==Other Compiling Tools==
In addition to the above three tools, some mappers need additional tools for their specific develompent pipeline.

===Map Converters===
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.

===Skip===
Skip tools are standalone programs that can remove all surfaces textured with a [[skip texture]] from a level, so that they are not rendered in-game.  This requires a seperate tool because skip textures are not supported by any QBSP version.

==Links==
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]</text>
      <sha1>n8qjw0vr5jmmj8exjmnq1c54lkydy03</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1524</id>
      <parentid>1523</parentid>
      <timestamp>2010-01-11T08:36:38Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>/* Light */</comment>
      <text xml:space="preserve" bytes="2428">'''Map Compiling''' is the process of converting a [[level]] from a [[map file]], which generated by a [[level editor]], into a [[bsp file]], which is ready to be played in-game.  It generally consists of three steps: [[QBSP]], [[Light]], and [[Vis]].

==QBSP==
{{Main|QBSP}}
'''QBSP''' is the first stage of map compilation.  It is the process that reads the map file and generates the bsp, and in doing so calculates all of the geometry and collision data for the level.  It also extracts any needed textures from the [[wad file|wad files]] and repackages them into the bsp file.  After this step, the level can be loaded into the game engine.  However, it will not have any lighting or visibility data.

==Light==
{{Main|Light (map compiling)}}
'''Light''' is the stage of map compilation that calculates [[lightmap|lightmaps]] for the level.  Using the light entities from the [[entity lump]] of the bsp file, it precalculates the lighting on every surface in the level, and saves that lighting as lightmaps in the bsp file.

==Vis==
{{Main|Vis}}
'''Vis''' is the stage of map compilation that calculates [[PVS]] data for the level.  With PVS data, the engine need only draw those parts of the level (and those entities) that might be visible from the current player location.  This performance optimization was necessary to allow levels as large and as complex as Quake's on the computers of the day.  And even today, most games use equivalent systems to allow levels, props, and NPCs to be as detailed as possible.

==Other Compiling Tools==
In addition to the above three tools, some mappers need additional tools for their specific develompent pipeline.

===Map Converters===
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.

===Skip===
Skip tools are standalone programs that can remove all surfaces textured with a [[skip texture]] from a level, so that they are not rendered in-game.  This requires a seperate tool because skip textures are not supported by any QBSP version.

==Links==
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]</text>
      <sha1>7m52zmutq2c5n1camdh485ujgz93qzt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1525</id>
      <parentid>1524</parentid>
      <timestamp>2010-01-11T08:50:29Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="2450">'''Map Compiling''' is the process of converting a [[level]] from a [[map file]], which generated by a [[level editor]], into a [[bsp file]], which is ready to be played in-game.  It generally consists of three steps: [[QBSP]], [[Light (map compiling)|Light]], and [[Vis]].

==QBSP==
{{Main|QBSP}}
'''QBSP''' is the first stage of map compilation.  It is the process that reads the map file and generates the bsp, and in doing so calculates all of the geometry and collision data for the level.  It also extracts any needed textures from the [[wad file|wad files]] and repackages them into the bsp file.  After this step, the level can be loaded into the game engine.  However, it will not have any lighting or visibility data.

==Light==
{{Main|Light (map compiling)}}
'''Light''' is the stage of map compilation that calculates [[lightmap|lightmaps]] for the level.  Using the light entities from the [[entity lump]] of the bsp file, it precalculates the lighting on every surface in the level, and saves that lighting as lightmaps in the bsp file.

==Vis==
{{Main|Vis}}
'''Vis''' is the stage of map compilation that calculates [[PVS]] data for the level.  With PVS data, the engine need only draw those parts of the level (and those entities) that might be visible from the current player location.  This performance optimization was necessary to allow levels as large and as complex as Quake's on the computers of the day.  And even today, most games use equivalent systems to allow levels, props, and NPCs to be as detailed as possible.

==Other Compiling Tools==
In addition to the above three tools, some mappers need additional tools for their specific develompent pipeline.

===Map Converters===
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.

===Skip===
Skip tools are standalone programs that can remove all surfaces textured with a [[skip texture]] from a level, so that they are not rendered in-game.  This requires a seperate tool because skip textures are not supported by any QBSP version.

==Links==
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]</text>
      <sha1>lippvharje7oe1sn894eizs26ahlv8s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1527</id>
      <parentid>1525</parentid>
      <timestamp>2010-01-11T09:25:10Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="1634">'''Map Compiling''' is the process of converting a [[level]] from a [[map file]], which generated by a [[level editor]], into a [[bsp file]], which is ready to be played in-game.  It generally consists of three steps: [[QBSP]], [[Light (map compiling)|Light]], and [[Vis]].

==QBSP==
{{Main|QBSP}}
'''QBSP''' is the first stage of map compilation.  It is the process that reads the map file and generates the bsp, and in doing so calculates all of the geometry and collision data for the level.  It also extracts any needed textures from the [[wad file|wad files]] and repackages them into the bsp file.  After this step, the level can be loaded into the game engine.  However, it will not have any lighting or visibility data.

==Light==
{{Main|Light (map compiling)}}
'''Light''' is the stage of map compilation that calculates [[lightmap|lightmaps]] for the level.  Using the light entities from the [[entity lump]] of the bsp file, it precalculates the lighting on every surface in the level, and saves that lighting as lightmaps in the bsp file.

==Vis==
{{Main|Vis}}
'''Vis''' is the stage of map compilation that calculates [[PVS]] data for the level.  With PVS data, the engine need only draw those parts of the level (and those entities) that might be visible from the current player location.  This performance optimization was necessary to allow levels as large and as complex as Quake's on the computers of the day.  And even today, most games use equivalent systems to allow levels, props, and NPCs to be as detailed as possible.

==Map Compiling Tools==
For links to download QBSP, Light, and Vis, see [[Mapping tools]].</text>
      <sha1>su9xbx4mez9kkycnhmyn63f998q940r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1529</id>
      <parentid>1527</parentid>
      <timestamp>2010-01-11T09:36:51Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="1576">'''Map Compiling''' is the process of converting a [[level]] from a [[map file]], which generated by a [[level editor]], into a [[bsp file]], which is ready to be played in-game.  It generally consists of three steps: [[QBSP]], [[Light (map compiling)|Light]], and [[Vis]].

==QBSP==
{{Main|QBSP}}
'''QBSP''' is the first stage of map compilation.  It is the process that reads the map file and generates the bsp, and in doing so calculates all of the geometry and collision data for the level.  It also extracts any needed textures from the [[wad file|wad files]] and repackages them into the bsp file.  After this step, the level can be loaded into the game engine.  However, it will not have any lighting or visibility data.

==Light==
{{Main|Light (map compiling)}}
'''Light''' is the stage of map compilation that calculates [[lightmap|lightmaps]] for the level.  Using the light entities from the [[entity lump]] of the bsp file, it precalculates the lighting on every surface in the level, and saves that lighting as lightmaps in the bsp file.

==Vis==
{{Main|Vis}}
'''Vis''' is the stage of map compilation that calculates [[PVS]] data for the level.  With PVS data, the engine need only draw those parts of the level (and those entities) that might be visible from the current player location.  This performance optimization was necessary to allow levels as large and as complex as Quake's on the computers of the day.  And even today, most games use equivalent systems to allow levels, props, and NPCs to be as detailed as possible.

==See Also==
* [[Mapping tools]]</text>
      <sha1>8p4l2r9795sovlwkv4dqneirnrh2zfd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1908</id>
      <parentid>1529</parentid>
      <timestamp>2013-03-25T03:13:52Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>fixing misdirected links</comment>
      <text xml:space="preserve" bytes="1614">'''Map Compiling''' is the process of converting a [[level]] from a [[Quake file formats|map file]], which generated by a [[level editor]], into a [[Quake file formats|bsp file]], which is ready to be played in-game.  It generally consists of three steps: [[QBSP]], [[Light (map compiling)|Light]], and [[Vis]].

==QBSP==
{{Main|QBSP}}
'''QBSP''' is the first stage of map compilation.  It is the process that reads the map file and generates the bsp, and in doing so calculates all of the geometry and collision data for the level.  It also extracts any needed textures from the [[wad file|wad files]] and repackages them into the bsp file.  After this step, the level can be loaded into the game engine.  However, it will not have any lighting or visibility data.

==Light==
{{Main|Light (map compiling)}}
'''Light''' is the stage of map compilation that calculates [[lightmap|lightmaps]] for the level.  Using the light entities from the [[entity lump]] of the bsp file, it precalculates the lighting on every surface in the level, and saves that lighting as lightmaps in the bsp file.

==Vis==
{{Main|Vis}}
'''Vis''' is the stage of map compilation that calculates [[PVS]] data for the level.  With PVS data, the engine need only draw those parts of the level (and those entities) that might be visible from the current player location.  This performance optimization was necessary to allow levels as large and as complex as Quake's on the computers of the day.  And even today, most games use equivalent systems to allow levels, props, and NPCs to be as detailed as possible.

==See Also==
* [[Mapping tools]]</text>
      <sha1>lxgj93jg8a2zhdvo657t7wbayx0sumk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Map list</title>
    <ns>0</ns>
    <id>21</id>
    <revision>
      <id>27</id>
      <timestamp>2007-10-30T16:56:31Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: Due to the (expected) volume, this category is split up as follows:  * [[Deathmatch Maps Nums - F]] * [[Deathmatch Maps G - L]] * [[Deathmatch Maps M - R]] * [[Deathmatch Maps S - Z]] * [[...</comment>
      <text xml:space="preserve" bytes="264">Due to the (expected) volume, this category is split up as follows:

* [[Deathmatch Maps Nums - F]]
* [[Deathmatch Maps G - L]]
* [[Deathmatch Maps M - R]]
* [[Deathmatch Maps S - Z]]
* [[Singleplayer Maps Nums - J]]
* [[Singleplayer Maps K - Z]]
* FIXME: Add more</text>
      <sha1>4s06a2xsi7ud9a7l4ou4z1v8h3nvvfc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Mapping</title>
    <ns>0</ns>
    <id>830</id>
    <revision>
      <id>2445</id>
      <timestamp>2013-03-29T09:30:57Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Basic overview page, to get rid of the red link on the front page</comment>
      <text xml:space="preserve" bytes="260">This page is about Mapping, the act of creating custom levels for singleplayer or deathmatch game modes.


* [[Getting Started Mapping]]
* [[Mapping tools]]
* [[Map compiling]]
* [[Entity guide]]
* [[Mapping errors]]
* [[Mapping tutorials]]
* [[Mapping links]]</text>
      <sha1>o7w0lze66extqu9ncmfa33r2yklrhnx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Mapping Errors</title>
    <ns>0</ns>
    <id>583</id>
    <redirect title="Mapping errors" />
    <revision>
      <id>1537</id>
      <timestamp>2010-01-12T10:10:05Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>[[Mapping Errors]] moved to [[Mapping errors]]</comment>
      <text xml:space="preserve" bytes="28">#REDIRECT [[Mapping errors]]</text>
      <sha1>pwu5guephs565alslfgfutb95zcr3lk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Mapping errors</title>
    <ns>0</ns>
    <id>576</id>
    <revision>
      <id>1498</id>
      <timestamp>2009-12-21T11:14:07Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Added link to BJP's tooltips.txt as a starting point - TODO: add information on the most common errors here.</comment>
      <text xml:space="preserve" bytes="137">The most common errors and possible solutions are explained in [http://user.tninet.se/~xir870k/tooltips.txt Bengt Jardrup's Q1 ToolTips].</text>
      <sha1>tkrtvsv2vkq6yhqbkmyi70ke9jqbjy2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1536</id>
      <parentid>1498</parentid>
      <timestamp>2010-01-12T10:10:04Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <minor/>
      <comment>[[Mapping Errors]] moved to [[Mapping errors]]</comment>
      <text xml:space="preserve" bytes="137">The most common errors and possible solutions are explained in [http://user.tninet.se/~xir870k/tooltips.txt Bengt Jardrup's Q1 ToolTips].</text>
      <sha1>tkrtvsv2vkq6yhqbkmyi70ke9jqbjy2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2681</id>
      <parentid>1536</parentid>
      <timestamp>2013-03-30T03:20:52Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="333">The most common errors and possible solutions are explained in [http://user.tninet.se/~xir870k/tooltips.txt Bengt Jardrup's Q1 ToolTips].

Token too large:

Valve Hammer 3.3:
There are too many individual .wad files in the textures menu (5 (8?) or more).

Solution:
Reduce the number of .wad files by consolidating custom .wad files.</text>
      <sha1>8pc3539ye8kxkc048wzjh77buq4log7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2682</id>
      <parentid>2681</parentid>
      <timestamp>2013-03-30T03:25:19Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="328">The most common errors and possible solutions are explained in [http://user.tninet.se/~xir870k/tooltips.txt Bengt Jardrup's Q1 ToolTips].

'''Token too large''':

Worldcraft:
There are too many individual .wad files in the textures menu (5 or more).

Solution:
Reduce the number of .wad files by consolidating custom .wad files.</text>
      <sha1>7jui5p37l16diaoijb58du43xes7yzz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2683</id>
      <parentid>2682</parentid>
      <timestamp>2013-03-30T04:00:59Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="328">The most common errors and possible solutions are explained in [http://user.tninet.se/~xir870k/tooltips.txt Bengt Jardrup's Q1 ToolTips].

'''token too large''':

Worldcraft:
There are too many individual .wad files in the textures menu (5 or more).

Solution:
Reduce the number of .wad files by consolidating custom .wad files.</text>
      <sha1>skf07lh4cq69lxdaiw4nt2x6u5ucqaq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Mapping links</title>
    <ns>0</ns>
    <id>22</id>
    <revision>
      <id>28</id>
      <timestamp>2007-10-30T16:57:17Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: ===QMAP=== &quot;QMap is your custom Quake mapping forum and rant centre. It's totally driven by the community through it's intergrated messageboards which allow you to inform the mapping commu...</comment>
      <text xml:space="preserve" bytes="628">===QMAP===
&quot;QMap is your custom Quake mapping forum and rant centre. It's totally driven by the community through it's intergrated messageboards which allow you to inform the mapping community your mapping news and information.&quot;

The main news section is located http://www.qmap.org
and the actual maps section : http://www.qmap.org/qmap.php3

===Func MsgBoard===
You can find Func MsgBoard: http://www.celephais.net/board/

===hmap2===
hmap2 is a Quake map compiler by LordHavoc and Vic with a host of useful options.  You can find it on the DarkPlaces downloads page, here: http://icculus.org/twilight/darkplaces/download.html</text>
      <sha1>gdgoidaz49olkcdv7pnu97l3dycymf5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2095</id>
      <parentid>28</parentid>
      <timestamp>2013-03-25T16:27:05Z</timestamp>
      <contributor>
        <username>Vigil</username>
        <id>35</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="289">===func_msgboard===
You can find Func MsgBoard here: http://www.celephais.net/board/

===hmap2===
hmap2 is a Quake map compiler by LordHavoc and Vic with a host of useful options.  You can find it on the DarkPlaces downloads page, here: http://icculus.org/twilight/darkplaces/download.html</text>
      <sha1>261zvyo82z83u7aggsiomu6ginsrox2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2199</id>
      <parentid>2095</parentid>
      <timestamp>2013-03-26T04:43:41Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="347">===Func_Msgboard===
[http://www.celephais.net/board/ Func_Msgboard] is the main level design forum/news site for Quake.

===Quaddicted===
[http://www.quaddicted.com/ Quaddicted] serves as both the major 'review' and archive of Quake levels. It also has an extensive archive of tools and files related to Quake and the modding community in general.</text>
      <sha1>98ckt0dmitwc4jrfgpxvk8tlla48t8y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2201</id>
      <parentid>2199</parentid>
      <timestamp>2013-03-26T04:47:05Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="577">===Func_Msgboard===
[http://www.celephais.net/board/ Func_Msgboard] is the main level design forum/news site for Quake.

===Quaddicted===
[http://www.quaddicted.com/ Quaddicted] serves as both the major 'review' and archive of Quake levels. It also has an extensive archive of tools and files related to Quake and the modding community in general.

===Quoth===
[http://www.quaddicted.com/webarchive/kell.quaddicted.com/ Quoth] is a major mod for Quake that includes a suite of new enemies, weapons, and entity functionality that are invaluable for modern Quake level designers.</text>
      <sha1>h2kvcgpb7svfj2mc1hhez7r75rl4209</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Mapping tools</title>
    <ns>0</ns>
    <id>17</id>
    <revision>
      <id>23</id>
      <timestamp>2007-10-30T16:50:37Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: * [[QE5]] * [[QuArK]] * [[WorldCraft]] * [[GTKRadiant]] * [[Ogier]] * [[TerrainGen]] * [http://www.bspquakeeditor.com/ BSP]  ===See Also=== * [[Quake tools]]</comment>
      <text xml:space="preserve" bytes="157">* [[QE5]]
* [[QuArK]]
* [[WorldCraft]]
* [[GTKRadiant]]
* [[Ogier]]
* [[TerrainGen]]
* [http://www.bspquakeeditor.com/ BSP]

===See Also===
* [[Quake tools]]</text>
      <sha1>3e0c1ezcds0s8pww5lwrzmo6wtl17wm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>213</id>
      <parentid>23</parentid>
      <timestamp>2007-11-02T00:01:06Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="267">* [[QE5]]
* [http://quark.planetquake.gamespy.com/ QuArK]
* [[WorldCraft]]
* [http://www.qeradiant.com/ GTKRadiant]
* [[Ogier]]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]
* [http://www.bspquakeeditor.com/ BSP]

===See Also===
* [[Quake tools]]</text>
      <sha1>tjrtcw7lzrbu4rcrvjo0jlkxi8jy5wv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>818</id>
      <parentid>213</parentid>
      <timestamp>2008-05-14T21:26:07Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="363">* [http://www.bspquakeeditor.com/ BSP]
* [http://www.qeradiant.com/ GTKRadiant]
* [[Ogier]]
* [[QE5]]
* [http://quark.planetquake.gamespy.com/ QuArK]
* [[WorldCraft]]

===Terrain Generators===
* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* Gensurf
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]


===See Also===
* [[Quake tools]]</text>
      <sha1>m5wzezhgsjogftmxh05k46jn3dn2i3a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>819</id>
      <parentid>818</parentid>
      <timestamp>2008-05-14T21:27:53Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>/* Terrain Generators */</comment>
      <text xml:space="preserve" bytes="402">* [http://www.bspquakeeditor.com/ BSP]
* [http://www.qeradiant.com/ GTKRadiant]
* [[Ogier]]
* [[QE5]]
* [http://quark.planetquake.gamespy.com/ QuArK]
* [[WorldCraft]]

===Terrain Generators===
* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

===See Also===
* [[Quake tools]]</text>
      <sha1>rziwxt3yledzsg1dd5p1w67yy7gok37</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>820</id>
      <parentid>819</parentid>
      <timestamp>2008-05-14T22:57:06Z</timestamp>
      <contributor>
        <ip>74.76.3.9</ip>
      </contributor>
      <text xml:space="preserve" bytes="503">* [http://www.bspquakeeditor.com/ BSP]
* [http://www.qeradiant.com/ GTKRadiant]
* [[Ogier]]
* [[QE5]]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://quark.planetquake.gamespy.com/ QuArK]
* [http://tread.planetquake.gamespy.com/ Tread3D]
* [[WorldCraft]]

===Terrain Generators===
* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

===See Also===
* [[Quake tools]]</text>
      <sha1>kxqvu15rqbr9jqowqbw7rm2y14iuhha</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>979</id>
      <parentid>820</parentid>
      <timestamp>2009-04-16T07:42:00Z</timestamp>
      <contributor>
        <ip>88.70.85.76</ip>
      </contributor>
      <comment>Worldcraft, Quest, ToeTag added</comment>
      <text xml:space="preserve" bytes="648">* [http://www.bspquakeeditor.com/ BSP]
* [http://www.qeradiant.com/ GTKRadiant]
* [[Ogier]]
* [[QE5]]
* [http://quark.planetquake.gamespy.com/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://tread.planetquake.gamespy.com/ Tread3D]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]

===Terrain Generators===
* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

===See Also===
* [[Quake tools]]</text>
      <sha1>of1ed08r7rnnyftpozsw9n2dmbl3uky</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>980</id>
      <parentid>979</parentid>
      <timestamp>2009-04-16T07:46:34Z</timestamp>
      <contributor>
        <ip>88.70.85.76</ip>
      </contributor>
      <comment>BJP's compilers added</comment>
      <text xml:space="preserve" bytes="763">* [http://www.bspquakeeditor.com/ BSP]
* [http://www.qeradiant.com/ GTKRadiant]
* [[Ogier]]
* [[QE5]]
* [http://quark.planetquake.gamespy.com/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://tread.planetquake.gamespy.com/ Tread3D]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]


* [http://user.tninet.se/xir870k/ Enhanced versions of TxQBSP, TreeQBSP, rVIS, Light] - Latest map compile tools

===Terrain Generators===
* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

===See Also===
* [[Quake tools]]</text>
      <sha1>8otcvr79vayqgzt5arpuiiliscn8ovq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>984</id>
      <parentid>980</parentid>
      <timestamp>2009-05-17T02:49:14Z</timestamp>
      <contributor>
        <ip>24.130.223.174</ip>
      </contributor>
      <text xml:space="preserve" bytes="811">
===General Map Editors===

* [http://www.bspquakeeditor.com/ BSP]
* [http://www.qeradiant.com/ GTKRadiant]
* [[Ogier]]
* [[QE5]]
* [http://quark.planetquake.gamespy.com/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://tread.planetquake.gamespy.com/ Tread3D]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]

===Compile Tools===

* [http://user.tninet.se/xir870k/ Enhanced versions of TxQBSP, TreeQBSP, rVIS, Light] - Latest map compile tools

===Terrain Generators===
* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

===See Also===
* [[Quake tools]]</text>
      <sha1>hhrpfnza9e7v6m0f9n9og6040hkq40s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1528</id>
      <parentid>984</parentid>
      <timestamp>2010-01-11T09:36:36Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="2715">==Level Editors==
These are general-purpose CAD-like programs used to construct and populate a level.  They include tools to create and modify [[brushes]], apply [[textures]], place and modify [[entities]], and set up simple [[scripting]].  Some of these programs have their own proprietary file format for saving levels, but they can all save or export your level to a [[map file]], which is needed by compilers in order to generate a game-ready [[bsp file]].

* [http://www.bspquakeeditor.com/ BSP]
* [http://www.qeradiant.com/ GTKRadiant]
* [[Ogier]]
* [[QE5]]
* [http://quark.planetquake.gamespy.com/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://tread.planetquake.gamespy.com/ Tread3D]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]

==Terrain Generators==
These programs are specialized to generate terrain-like geometry out of brushes, but have no general-purpose editing capabilities.  They generate map files that can then be imported into the general purpose level editors.

* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

==Model Converters==
These are programs that can be used to convert geometry of another file type, especially files exported by modelling software, into map files.

TODO

==Map Decompilers==
These are programs that can reverse-compile a bsp file back into a map file, with varying results.

TODO

==Map Converters==
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.

* SleepwalkR's mapconv

==Map Compiling Tools==
Tools to use for [[map compiling]], a process that turns a map file into a bsp file.

===QBSP, Light and Vis===
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]

===Skip Removal===
Skip removal tools are standalone programs that can process a [[bsp file]] and remove all surfaces textured with a [[skip texture]], so that those surfaces are not rendered in-game.  This requires a seperate tool because skip textures are not supported by any QBSP version.

* Tyrann's original skippy.exe (has some known bugs)
* metlslime's [http://www.celephais.net/board/view_thread.php?id=60088 newskip]

==See Also==
* [[Quake tools]]</text>
      <sha1>a21txogzxogi9dln2r4dx1bievn6h69</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1530</id>
      <parentid>1528</parentid>
      <timestamp>2010-01-11T09:52:17Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="3119">'''Mapping tools''' are devoted to the various tasks of Quake level development.

==Level Editors==
These are CAD-like programs used to construct and populate a level.  They include tools to create and modify [[brushes]], apply [[textures]], place and modify [[entities]], and set up simple [[scripting]].  Some of these programs have their own proprietary file format for saving levels, but they can all save or export your level to a [[map file]], which is needed by compilers in order to generate a game-ready [[bsp file]].

===General Purpose Editors===
* [http://www.bspquakeeditor.com/ BSP]
* [http://www.qeradiant.com/ GTKRadiant]
* [[QERadiant]]
* [[Ogier]]
* [[QE5]]
* [http://quark.planetquake.gamespy.com/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://tread.planetquake.gamespy.com/ Tread3D]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]

===Terrain Generators===
These programs are specialized to generate terrain-like geometry out of brushes, but have no general-purpose editing capabilities.  They generate map files that can then be imported into the general purpose level editors.

* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

==Map Converters==
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.  Commonly supported game formats include Quake 2, Quake III Arena, and Half-Life.

* SleepwalkR's mapconv

===Model-to-Map Converters===
These are programs that can be used to convert geometry of another file type, especially files exported by modelling software, into map files.

TODO

==Map Compiling Tools==
Tools to use for [[map compiling]], a process that turns a map file into a bsp file.

===QBSP, Light and Vis===
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]

===Skip Removal===
Skip removal tools are standalone programs that can process a [[bsp file]] and remove all surfaces textured with a [[skip texture]], so that those surfaces are not rendered in-game.  This requires a seperate tool because skip textures are not supported by any QBSP version.

* Tyrann's original skippy.exe (has some known bugs)
* metlslime's [http://www.celephais.net/board/view_thread.php?id=60088 newskip]

==Map Decompilers==
These are programs that can reverse-compile a bsp file back into a map file, with varying results.

TODO

==Other Tools==
Miscellaneous tools.

* bsp2prt can generate a [[prt file]] from a bsp file without needing to rebuild it from scratch using QBSP.
* bspinfo can generate statistics about a bsp file

==See Also==
* [[Quake tools]]</text>
      <sha1>bjlxdp5emt6xsubgljaqqr7blb44abs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1531</id>
      <parentid>1530</parentid>
      <timestamp>2010-01-11T13:27:07Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>/* Other Tools */</comment>
      <text xml:space="preserve" bytes="3387">'''Mapping tools''' are devoted to the various tasks of Quake level development.

==Level Editors==
These are CAD-like programs used to construct and populate a level.  They include tools to create and modify [[brushes]], apply [[textures]], place and modify [[entities]], and set up simple [[scripting]].  Some of these programs have their own proprietary file format for saving levels, but they can all save or export your level to a [[map file]], which is needed by compilers in order to generate a game-ready [[bsp file]].

===General Purpose Editors===
* [http://www.bspquakeeditor.com/ BSP]
* [http://www.qeradiant.com/ GTKRadiant]
* [[QERadiant]]
* [[Ogier]]
* [[QE5]]
* [http://quark.planetquake.gamespy.com/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://tread.planetquake.gamespy.com/ Tread3D]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]

===Terrain Generators===
These programs are specialized to generate terrain-like geometry out of brushes, but have no general-purpose editing capabilities.  They generate map files that can then be imported into the general purpose level editors.

* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

==Map Converters==
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.  Commonly supported game formats include Quake 2, Quake III Arena, and Half-Life.

* SleepwalkR's mapconv

===Model-to-Map Converters===
These are programs that can be used to convert geometry of another file type, especially files exported by modelling software, into map files.

TODO

==Map Compiling Tools==
Tools to use for [[map compiling]], a process that turns a map file into a bsp file.

===QBSP, Light and Vis===
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]

===Skip Removal===
Skip removal tools are standalone programs that can process a [[bsp file]] and remove all surfaces textured with a [[skip texture]], so that those surfaces are not rendered in-game.  This requires a seperate tool because skip textures are not supported by any QBSP version.

* Tyrann's original skippy.exe (has some known bugs)
* metlslime's [http://www.celephais.net/board/view_thread.php?id=60088 newskip]

==Map Decompilers==
These are programs that can reverse-compile a bsp file back into a map file, with varying results.

TODO

==Other Tools==
Miscellaneous tools.

* bsp2prt can generate a [[prt file]] from a bsp file without needing to rebuild it from scratch using QBSP.
* bspinfo can generate statistics about a bsp file, an improved [[prt file]], extract entities, and remove all VIS and light data
* bsp2map can decompile a bsp file back into .map format by generating brushes for every surface in the level
* winbspc can decompile a bsp file (with far more usable results than bsp2map)

==See Also==
* [[Quake tools]]</text>
      <sha1>eabqmvvjnq2m5gbj56xi9x49y1wkyqv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1532</id>
      <parentid>1531</parentid>
      <timestamp>2010-01-11T13:29:18Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>/* Other Tools */  accidentally inserted map decompilers here</comment>
      <text xml:space="preserve" bytes="3198">'''Mapping tools''' are devoted to the various tasks of Quake level development.

==Level Editors==
These are CAD-like programs used to construct and populate a level.  They include tools to create and modify [[brushes]], apply [[textures]], place and modify [[entities]], and set up simple [[scripting]].  Some of these programs have their own proprietary file format for saving levels, but they can all save or export your level to a [[map file]], which is needed by compilers in order to generate a game-ready [[bsp file]].

===General Purpose Editors===
* [http://www.bspquakeeditor.com/ BSP]
* [http://www.qeradiant.com/ GTKRadiant]
* [[QERadiant]]
* [[Ogier]]
* [[QE5]]
* [http://quark.planetquake.gamespy.com/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://tread.planetquake.gamespy.com/ Tread3D]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]

===Terrain Generators===
These programs are specialized to generate terrain-like geometry out of brushes, but have no general-purpose editing capabilities.  They generate map files that can then be imported into the general purpose level editors.

* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

==Map Converters==
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.  Commonly supported game formats include Quake 2, Quake III Arena, and Half-Life.

* SleepwalkR's mapconv

===Model-to-Map Converters===
These are programs that can be used to convert geometry of another file type, especially files exported by modelling software, into map files.

TODO

==Map Compiling Tools==
Tools to use for [[map compiling]], a process that turns a map file into a bsp file.

===QBSP, Light and Vis===
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]

===Skip Removal===
Skip removal tools are standalone programs that can process a [[bsp file]] and remove all surfaces textured with a [[skip texture]], so that those surfaces are not rendered in-game.  This requires a seperate tool because skip textures are not supported by any QBSP version.

* Tyrann's original skippy.exe (has some known bugs)
* metlslime's [http://www.celephais.net/board/view_thread.php?id=60088 newskip]

==Map Decompilers==
These are programs that can reverse-compile a bsp file back into a map file, with varying results.

TODO

==Other Tools==
Miscellaneous tools.

* bsp2prt can generate a [[prt file]] from a bsp file without needing to rebuild it from scratch using QBSP.
* bspinfo can generate statistics about a bsp file, an improved [[prt file]], extract entities, and remove all VIS and light data

==See Also==
* [[Quake tools]]</text>
      <sha1>iac8octnlumytyvubxbu8280h3yiaq4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1533</id>
      <parentid>1532</parentid>
      <timestamp>2010-01-11T13:40:42Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>/* Map Decompilers */</comment>
      <text xml:space="preserve" bytes="3574">'''Mapping tools''' are devoted to the various tasks of Quake level development.

==Level Editors==
These are CAD-like programs used to construct and populate a level.  They include tools to create and modify [[brushes]], apply [[textures]], place and modify [[entities]], and set up simple [[scripting]].  Some of these programs have their own proprietary file format for saving levels, but they can all save or export your level to a [[map file]], which is needed by compilers in order to generate a game-ready [[bsp file]].

===General Purpose Editors===
* [http://www.bspquakeeditor.com/ BSP]
* [http://www.qeradiant.com/ GTKRadiant]
* [[QERadiant]]
* [[Ogier]]
* [[QE5]]
* [http://quark.planetquake.gamespy.com/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://tread.planetquake.gamespy.com/ Tread3D]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]

===Terrain Generators===
These programs are specialized to generate terrain-like geometry out of brushes, but have no general-purpose editing capabilities.  They generate map files that can then be imported into the general purpose level editors.

* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

==Map Converters==
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.  Commonly supported game formats include Quake 2, Quake III Arena, and Half-Life.

* SleepwalkR's mapconv

===Model-to-Map Converters===
These are programs that can be used to convert geometry of another file type, especially files exported by modelling software, into map files.

TODO

==Map Compiling Tools==
Tools to use for [[map compiling]], a process that turns a map file into a bsp file.

===QBSP, Light and Vis===
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]

===Skip Removal===
Skip removal tools are standalone programs that can process a [[bsp file]] and remove all surfaces textured with a [[skip texture]], so that those surfaces are not rendered in-game.  This requires a seperate tool because skip textures are not supported by any QBSP version.

* Tyrann's original skippy.exe (has some known bugs)
* metlslime's [http://www.celephais.net/board/view_thread.php?id=60088 newskip]

==Map Decompilers==
These are programs that can reverse-compile a bsp file back into a map file, with varying results.


* bsp2map - This program generates a map file by creating brushes for every surface in the level. Large walls are split up into multiple brushes according to bsp polys.
* winbspc - This program generates a map file by more closely trying to match texture/brush volumes. It has several options for decompiling a bsp file and usually produces far more usuable results than bsp2map.

==Other Tools==
Miscellaneous tools.

* bsp2prt can generate a [[prt file]] from a bsp file without needing to rebuild it from scratch using QBSP.
* bspinfo can generate statistics about a bsp file, an improved [[prt file]], extract entities, and remove all VIS and light data

==See Also==
* [[Quake tools]]</text>
      <sha1>2vbrldevtrq1z41aw9fyxvz4q7r706s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1534</id>
      <parentid>1533</parentid>
      <timestamp>2010-01-11T13:41:00Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>/* Map Decompilers */</comment>
      <text xml:space="preserve" bytes="3573">'''Mapping tools''' are devoted to the various tasks of Quake level development.

==Level Editors==
These are CAD-like programs used to construct and populate a level.  They include tools to create and modify [[brushes]], apply [[textures]], place and modify [[entities]], and set up simple [[scripting]].  Some of these programs have their own proprietary file format for saving levels, but they can all save or export your level to a [[map file]], which is needed by compilers in order to generate a game-ready [[bsp file]].

===General Purpose Editors===
* [http://www.bspquakeeditor.com/ BSP]
* [http://www.qeradiant.com/ GTKRadiant]
* [[QERadiant]]
* [[Ogier]]
* [[QE5]]
* [http://quark.planetquake.gamespy.com/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://tread.planetquake.gamespy.com/ Tread3D]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]

===Terrain Generators===
These programs are specialized to generate terrain-like geometry out of brushes, but have no general-purpose editing capabilities.  They generate map files that can then be imported into the general purpose level editors.

* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

==Map Converters==
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.  Commonly supported game formats include Quake 2, Quake III Arena, and Half-Life.

* SleepwalkR's mapconv

===Model-to-Map Converters===
These are programs that can be used to convert geometry of another file type, especially files exported by modelling software, into map files.

TODO

==Map Compiling Tools==
Tools to use for [[map compiling]], a process that turns a map file into a bsp file.

===QBSP, Light and Vis===
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]

===Skip Removal===
Skip removal tools are standalone programs that can process a [[bsp file]] and remove all surfaces textured with a [[skip texture]], so that those surfaces are not rendered in-game.  This requires a seperate tool because skip textures are not supported by any QBSP version.

* Tyrann's original skippy.exe (has some known bugs)
* metlslime's [http://www.celephais.net/board/view_thread.php?id=60088 newskip]

==Map Decompilers==
These are programs that can reverse-compile a bsp file back into a map file, with varying results.

* bsp2map - This program generates a map file by creating brushes for every surface in the level. Large walls are split up into multiple brushes according to bsp polys.
* winbspc - This program generates a map file by more closely trying to match texture/brush volumes. It has several options for decompiling a bsp file and usually produces far more usuable results than bsp2map.

==Other Tools==
Miscellaneous tools.

* bsp2prt can generate a [[prt file]] from a bsp file without needing to rebuild it from scratch using QBSP.
* bspinfo can generate statistics about a bsp file, an improved [[prt file]], extract entities, and remove all VIS and light data

==See Also==
* [[Quake tools]]</text>
      <sha1>9vbsktkllc64uvkw76ibfwxyshh7za5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1694</id>
      <parentid>1534</parentid>
      <timestamp>2013-03-24T20:02:38Z</timestamp>
      <contributor>
        <ip>92.231.232.211</ip>
      </contributor>
      <comment>/* General Purpose Editors */</comment>
      <text xml:space="preserve" bytes="3626">'''Mapping tools''' are devoted to the various tasks of Quake level development.

==Level Editors==
These are CAD-like programs used to construct and populate a level.  They include tools to create and modify [[brushes]], apply [[textures]], place and modify [[entities]], and set up simple [[scripting]].  Some of these programs have their own proprietary file format for saving levels, but they can all save or export your level to a [[map file]], which is needed by compilers in order to generate a game-ready [[bsp file]].

===General Purpose Editors===
* [http://www.bspquakeeditor.com/ BSP]
* [http://www.qeradiant.com/ GTKRadiant]
* [[QERadiant]]
* [[Ogier]]
* [[QE5]]
* [http://quark.planetquake.gamespy.com/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://tread.planetquake.gamespy.com/ Tread3D]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]
* [http://kristianduske.com/trenchbroom TrenchBroom]

===Terrain Generators===
These programs are specialized to generate terrain-like geometry out of brushes, but have no general-purpose editing capabilities.  They generate map files that can then be imported into the general purpose level editors.

* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

==Map Converters==
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.  Commonly supported game formats include Quake 2, Quake III Arena, and Half-Life.

* SleepwalkR's mapconv

===Model-to-Map Converters===
These are programs that can be used to convert geometry of another file type, especially files exported by modelling software, into map files.

TODO

==Map Compiling Tools==
Tools to use for [[map compiling]], a process that turns a map file into a bsp file.

===QBSP, Light and Vis===
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]

===Skip Removal===
Skip removal tools are standalone programs that can process a [[bsp file]] and remove all surfaces textured with a [[skip texture]], so that those surfaces are not rendered in-game.  This requires a seperate tool because skip textures are not supported by any QBSP version.

* Tyrann's original skippy.exe (has some known bugs)
* metlslime's [http://www.celephais.net/board/view_thread.php?id=60088 newskip]

==Map Decompilers==
These are programs that can reverse-compile a bsp file back into a map file, with varying results.

* bsp2map - This program generates a map file by creating brushes for every surface in the level. Large walls are split up into multiple brushes according to bsp polys.
* winbspc - This program generates a map file by more closely trying to match texture/brush volumes. It has several options for decompiling a bsp file and usually produces far more usuable results than bsp2map.

==Other Tools==
Miscellaneous tools.

* bsp2prt can generate a [[prt file]] from a bsp file without needing to rebuild it from scratch using QBSP.
* bspinfo can generate statistics about a bsp file, an improved [[prt file]], extract entities, and remove all VIS and light data

==See Also==
* [[Quake tools]]</text>
      <sha1>m9ksbz2dhh7uwlwxdy89oqmtcwath0c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1695</id>
      <parentid>1694</parentid>
      <timestamp>2013-03-24T21:13:06Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>/* QBSP, Light and Vis */</comment>
      <text xml:space="preserve" bytes="3845">'''Mapping tools''' are devoted to the various tasks of Quake level development.

==Level Editors==
These are CAD-like programs used to construct and populate a level.  They include tools to create and modify [[brushes]], apply [[textures]], place and modify [[entities]], and set up simple [[scripting]].  Some of these programs have their own proprietary file format for saving levels, but they can all save or export your level to a [[map file]], which is needed by compilers in order to generate a game-ready [[bsp file]].

===General Purpose Editors===
* [http://www.bspquakeeditor.com/ BSP]
* [http://www.qeradiant.com/ GTKRadiant]
* [[QERadiant]]
* [[Ogier]]
* [[QE5]]
* [http://quark.planetquake.gamespy.com/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://tread.planetquake.gamespy.com/ Tread3D]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]
* [http://kristianduske.com/trenchbroom TrenchBroom]

===Terrain Generators===
These programs are specialized to generate terrain-like geometry out of brushes, but have no general-purpose editing capabilities.  They generate map files that can then be imported into the general purpose level editors.

* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

==Map Converters==
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.  Commonly supported game formats include Quake 2, Quake III Arena, and Half-Life.

* SleepwalkR's mapconv

===Model-to-Map Converters===
These are programs that can be used to convert geometry of another file type, especially files exported by modelling software, into map files.

TODO

==Map Compiling Tools==
Tools to use for [[map compiling]], a process that turns a map file into a bsp file.

===QBSP, Light and Vis===
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]
* Tyrann's TyrUtils V0.5 [http://disenchant.net/files/utils/tyrutils-0.6-win32.zip Win], [http://disenchant.net/files/utils/tyrutils-0.6-osx.zip Mac OS X], [http://disenchant.net/files/utils/tyrutils-0.6.tar.gz Source]

===Skip Removal===
Skip removal tools are standalone programs that can process a [[bsp file]] and remove all surfaces textured with a [[skip texture]], so that those surfaces are not rendered in-game.  This requires a seperate tool because skip textures are not supported by any QBSP version.

* Tyrann's original skippy.exe (has some known bugs)
* metlslime's [http://www.celephais.net/board/view_thread.php?id=60088 newskip]

==Map Decompilers==
These are programs that can reverse-compile a bsp file back into a map file, with varying results.

* bsp2map - This program generates a map file by creating brushes for every surface in the level. Large walls are split up into multiple brushes according to bsp polys.
* winbspc - This program generates a map file by more closely trying to match texture/brush volumes. It has several options for decompiling a bsp file and usually produces far more usuable results than bsp2map.

==Other Tools==
Miscellaneous tools.

* bsp2prt can generate a [[prt file]] from a bsp file without needing to rebuild it from scratch using QBSP.
* bspinfo can generate statistics about a bsp file, an improved [[prt file]], extract entities, and remove all VIS and light data

==See Also==
* [[Quake tools]]</text>
      <sha1>rnp7zy3kozlzy8x9oeb7hjmgtfax7gv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1696</id>
      <parentid>1695</parentid>
      <timestamp>2013-03-24T21:15:28Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <minor/>
      <comment>/* General Purpose Editors */</comment>
      <text xml:space="preserve" bytes="3809">'''Mapping tools''' are devoted to the various tasks of Quake level development.

==Level Editors==
These are CAD-like programs used to construct and populate a level.  They include tools to create and modify [[brushes]], apply [[textures]], place and modify [[entities]], and set up simple [[scripting]].  Some of these programs have their own proprietary file format for saving levels, but they can all save or export your level to a [[map file]], which is needed by compilers in order to generate a game-ready [[bsp file]].

===General Purpose Editors===
* [http://www.bspquakeeditor.com/ BSP]
* [[GTKRadiant]]
* [[QERadiant]]
* [[Ogier]]
* [[QE5]]
* [http://quark.sourceforge.net/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://www.joecodegood.net/tread/ Tread3D]
* [http://kristianduske.com/trenchbroom TrenchBroom]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]

===Terrain Generators===
These programs are specialized to generate terrain-like geometry out of brushes, but have no general-purpose editing capabilities.  They generate map files that can then be imported into the general purpose level editors.

* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

==Map Converters==
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.  Commonly supported game formats include Quake 2, Quake III Arena, and Half-Life.

* SleepwalkR's mapconv

===Model-to-Map Converters===
These are programs that can be used to convert geometry of another file type, especially files exported by modelling software, into map files.

TODO

==Map Compiling Tools==
Tools to use for [[map compiling]], a process that turns a map file into a bsp file.

===QBSP, Light and Vis===
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]
* Tyrann's TyrUtils V0.5 [http://disenchant.net/files/utils/tyrutils-0.6-win32.zip Win], [http://disenchant.net/files/utils/tyrutils-0.6-osx.zip Mac OS X], [http://disenchant.net/files/utils/tyrutils-0.6.tar.gz Source]

===Skip Removal===
Skip removal tools are standalone programs that can process a [[bsp file]] and remove all surfaces textured with a [[skip texture]], so that those surfaces are not rendered in-game.  This requires a seperate tool because skip textures are not supported by any QBSP version.

* Tyrann's original skippy.exe (has some known bugs)
* metlslime's [http://www.celephais.net/board/view_thread.php?id=60088 newskip]

==Map Decompilers==
These are programs that can reverse-compile a bsp file back into a map file, with varying results.

* bsp2map - This program generates a map file by creating brushes for every surface in the level. Large walls are split up into multiple brushes according to bsp polys.
* winbspc - This program generates a map file by more closely trying to match texture/brush volumes. It has several options for decompiling a bsp file and usually produces far more usuable results than bsp2map.

==Other Tools==
Miscellaneous tools.

* bsp2prt can generate a [[prt file]] from a bsp file without needing to rebuild it from scratch using QBSP.
* bspinfo can generate statistics about a bsp file, an improved [[prt file]], extract entities, and remove all VIS and light data

==See Also==
* [[Quake tools]]</text>
      <sha1>1zb443zhjdw2cyta3f3rqtjxhvy5wv9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2223</id>
      <parentid>1696</parentid>
      <timestamp>2013-03-26T13:07:13Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>/* General Purpose Editors */</comment>
      <text xml:space="preserve" bytes="3959">'''Mapping tools''' are devoted to the various tasks of Quake level development.

==Level Editors==
These are CAD-like programs used to construct and populate a level.  They include tools to create and modify [[brushes]], apply [[textures]], place and modify [[entities]], and set up simple [[scripting]].  Some of these programs have their own proprietary file format for saving levels, but they can all save or export your level to a [[map file]], which is needed by compilers in order to generate a game-ready [[bsp file]].

===General Purpose Editors===
* [http://www.bspquakeeditor.com/ BSP]
* [[GTKRadiant]]
* [[QERadiant]]
* [[Ogier]]
* [[QE5]]
* [http://quark.sourceforge.net/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://www.joecodegood.net/tread/ Tread3D]
* [http://kristianduske.com/trenchbroom TrenchBroom]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]
{{todo|user=[[Hectate]]|todo=The list of editors would look and function better as a table that detailed things like OS, engine compatibility, etc.}}

===Terrain Generators===
These programs are specialized to generate terrain-like geometry out of brushes, but have no general-purpose editing capabilities.  They generate map files that can then be imported into the general purpose level editors.

* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

==Map Converters==
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.  Commonly supported game formats include Quake 2, Quake III Arena, and Half-Life.

* SleepwalkR's mapconv

===Model-to-Map Converters===
These are programs that can be used to convert geometry of another file type, especially files exported by modelling software, into map files.

TODO

==Map Compiling Tools==
Tools to use for [[map compiling]], a process that turns a map file into a bsp file.

===QBSP, Light and Vis===
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]
* Tyrann's TyrUtils V0.5 [http://disenchant.net/files/utils/tyrutils-0.6-win32.zip Win], [http://disenchant.net/files/utils/tyrutils-0.6-osx.zip Mac OS X], [http://disenchant.net/files/utils/tyrutils-0.6.tar.gz Source]

===Skip Removal===
Skip removal tools are standalone programs that can process a [[bsp file]] and remove all surfaces textured with a [[skip texture]], so that those surfaces are not rendered in-game.  This requires a seperate tool because skip textures are not supported by any QBSP version.

* Tyrann's original skippy.exe (has some known bugs)
* metlslime's [http://www.celephais.net/board/view_thread.php?id=60088 newskip]

==Map Decompilers==
These are programs that can reverse-compile a bsp file back into a map file, with varying results.

* bsp2map - This program generates a map file by creating brushes for every surface in the level. Large walls are split up into multiple brushes according to bsp polys.
* winbspc - This program generates a map file by more closely trying to match texture/brush volumes. It has several options for decompiling a bsp file and usually produces far more usuable results than bsp2map.

==Other Tools==
Miscellaneous tools.

* bsp2prt can generate a [[prt file]] from a bsp file without needing to rebuild it from scratch using QBSP.
* bspinfo can generate statistics about a bsp file, an improved [[prt file]], extract entities, and remove all VIS and light data

==See Also==
* [[Quake tools]]</text>
      <sha1>iutxziymor2yuh8xct2qhtpehukga78</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2224</id>
      <parentid>2223</parentid>
      <timestamp>2013-03-26T13:13:19Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>/* Model-to-Map Converters */</comment>
      <text xml:space="preserve" bytes="3963">'''Mapping tools''' are devoted to the various tasks of Quake level development.

==Level Editors==
These are CAD-like programs used to construct and populate a level.  They include tools to create and modify [[brushes]], apply [[textures]], place and modify [[entities]], and set up simple [[scripting]].  Some of these programs have their own proprietary file format for saving levels, but they can all save or export your level to a [[map file]], which is needed by compilers in order to generate a game-ready [[bsp file]].

===General Purpose Editors===
* [http://www.bspquakeeditor.com/ BSP]
* [[GTKRadiant]]
* [[QERadiant]]
* [[Ogier]]
* [[QE5]]
* [http://quark.sourceforge.net/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://www.joecodegood.net/tread/ Tread3D]
* [http://kristianduske.com/trenchbroom TrenchBroom]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]
{{todo|user=[[Hectate]]|todo=The list of editors would look and function better as a table that detailed things like OS, engine compatibility, etc.}}

===Terrain Generators===
These programs are specialized to generate terrain-like geometry out of brushes, but have no general-purpose editing capabilities.  They generate map files that can then be imported into the general purpose level editors.

* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

==Map Converters==
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.  Commonly supported game formats include Quake 2, Quake III Arena, and Half-Life.

* SleepwalkR's mapconv

===Model-to-Map Converters===
These are programs that can be used to convert geometry of another file type, especially files exported by modelling software, into map files.

{{todo}}

==Map Compiling Tools==
Tools to use for [[map compiling]], a process that turns a map file into a bsp file.

===QBSP, Light and Vis===
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]
* Tyrann's TyrUtils V0.5 [http://disenchant.net/files/utils/tyrutils-0.6-win32.zip Win], [http://disenchant.net/files/utils/tyrutils-0.6-osx.zip Mac OS X], [http://disenchant.net/files/utils/tyrutils-0.6.tar.gz Source]

===Skip Removal===
Skip removal tools are standalone programs that can process a [[bsp file]] and remove all surfaces textured with a [[skip texture]], so that those surfaces are not rendered in-game.  This requires a seperate tool because skip textures are not supported by any QBSP version.

* Tyrann's original skippy.exe (has some known bugs)
* metlslime's [http://www.celephais.net/board/view_thread.php?id=60088 newskip]

==Map Decompilers==
These are programs that can reverse-compile a bsp file back into a map file, with varying results.

* bsp2map - This program generates a map file by creating brushes for every surface in the level. Large walls are split up into multiple brushes according to bsp polys.
* winbspc - This program generates a map file by more closely trying to match texture/brush volumes. It has several options for decompiling a bsp file and usually produces far more usuable results than bsp2map.

==Other Tools==
Miscellaneous tools.

* bsp2prt can generate a [[prt file]] from a bsp file without needing to rebuild it from scratch using QBSP.
* bspinfo can generate statistics about a bsp file, an improved [[prt file]], extract entities, and remove all VIS and light data

==See Also==
* [[Quake tools]]</text>
      <sha1>1wobjjn2dne2qn7qs9hdky324nut8sq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2324</id>
      <parentid>2224</parentid>
      <timestamp>2013-03-26T22:41:40Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* General Purpose Editors */</comment>
      <text xml:space="preserve" bytes="3928">'''Mapping tools''' are devoted to the various tasks of Quake level development.

==Level Editors==
These are CAD-like programs used to construct and populate a level.  They include tools to create and modify [[brushes]], apply [[textures]], place and modify [[entities]], and set up simple [[scripting]].  Some of these programs have their own proprietary file format for saving levels, but they can all save or export your level to a [[map file]], which is needed by compilers in order to generate a game-ready [[bsp file]].

===General Purpose Editors===
* [http://www.bspquakeeditor.com/ BSP]
* [[GTKRadiant]]
* [[QERadiant]]
* [[Ogier]]
* [[QE5]]
* [http://quark.sourceforge.net/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://www.joecodegood.net/tread/ Tread3D]
* [[TrenchBroom]]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]
{{todo|user=[[Hectate]]|todo=The list of editors would look and function better as a table that detailed things like OS, engine compatibility, etc.}}

===Terrain Generators===
These programs are specialized to generate terrain-like geometry out of brushes, but have no general-purpose editing capabilities.  They generate map files that can then be imported into the general purpose level editors.

* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

==Map Converters==
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.  Commonly supported game formats include Quake 2, Quake III Arena, and Half-Life.

* SleepwalkR's mapconv

===Model-to-Map Converters===
These are programs that can be used to convert geometry of another file type, especially files exported by modelling software, into map files.

{{todo}}

==Map Compiling Tools==
Tools to use for [[map compiling]], a process that turns a map file into a bsp file.

===QBSP, Light and Vis===
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]
* Tyrann's TyrUtils V0.5 [http://disenchant.net/files/utils/tyrutils-0.6-win32.zip Win], [http://disenchant.net/files/utils/tyrutils-0.6-osx.zip Mac OS X], [http://disenchant.net/files/utils/tyrutils-0.6.tar.gz Source]

===Skip Removal===
Skip removal tools are standalone programs that can process a [[bsp file]] and remove all surfaces textured with a [[skip texture]], so that those surfaces are not rendered in-game.  This requires a seperate tool because skip textures are not supported by any QBSP version.

* Tyrann's original skippy.exe (has some known bugs)
* metlslime's [http://www.celephais.net/board/view_thread.php?id=60088 newskip]

==Map Decompilers==
These are programs that can reverse-compile a bsp file back into a map file, with varying results.

* bsp2map - This program generates a map file by creating brushes for every surface in the level. Large walls are split up into multiple brushes according to bsp polys.
* winbspc - This program generates a map file by more closely trying to match texture/brush volumes. It has several options for decompiling a bsp file and usually produces far more usuable results than bsp2map.

==Other Tools==
Miscellaneous tools.

* bsp2prt can generate a [[prt file]] from a bsp file without needing to rebuild it from scratch using QBSP.
* bspinfo can generate statistics about a bsp file, an improved [[prt file]], extract entities, and remove all VIS and light data

==See Also==
* [[Quake tools]]</text>
      <sha1>gokelzvqrzieddq44p2p73judntif10</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2325</id>
      <parentid>2324</parentid>
      <timestamp>2013-03-26T22:42:05Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* General Purpose Editors */</comment>
      <text xml:space="preserve" bytes="3928">'''Mapping tools''' are devoted to the various tasks of Quake level development.

==Level Editors==
These are CAD-like programs used to construct and populate a level.  They include tools to create and modify [[brushes]], apply [[textures]], place and modify [[entities]], and set up simple [[scripting]].  Some of these programs have their own proprietary file format for saving levels, but they can all save or export your level to a [[map file]], which is needed by compilers in order to generate a game-ready [[bsp file]].

===General Purpose Editors===
* [http://www.bspquakeeditor.com/ BSP]
* [[GTKRadiant]]
* [[QERadiant]]
* [[Ogier]]
* [[QE5]]
* [http://quark.sourceforge.net/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://www.joecodegood.net/tread/ Tread3D]
* [[Trenchbroom]]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]
{{todo|user=[[Hectate]]|todo=The list of editors would look and function better as a table that detailed things like OS, engine compatibility, etc.}}

===Terrain Generators===
These programs are specialized to generate terrain-like geometry out of brushes, but have no general-purpose editing capabilities.  They generate map files that can then be imported into the general purpose level editors.

* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

==Map Converters==
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.  Commonly supported game formats include Quake 2, Quake III Arena, and Half-Life.

* SleepwalkR's mapconv

===Model-to-Map Converters===
These are programs that can be used to convert geometry of another file type, especially files exported by modelling software, into map files.

{{todo}}

==Map Compiling Tools==
Tools to use for [[map compiling]], a process that turns a map file into a bsp file.

===QBSP, Light and Vis===
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]
* Tyrann's TyrUtils V0.5 [http://disenchant.net/files/utils/tyrutils-0.6-win32.zip Win], [http://disenchant.net/files/utils/tyrutils-0.6-osx.zip Mac OS X], [http://disenchant.net/files/utils/tyrutils-0.6.tar.gz Source]

===Skip Removal===
Skip removal tools are standalone programs that can process a [[bsp file]] and remove all surfaces textured with a [[skip texture]], so that those surfaces are not rendered in-game.  This requires a seperate tool because skip textures are not supported by any QBSP version.

* Tyrann's original skippy.exe (has some known bugs)
* metlslime's [http://www.celephais.net/board/view_thread.php?id=60088 newskip]

==Map Decompilers==
These are programs that can reverse-compile a bsp file back into a map file, with varying results.

* bsp2map - This program generates a map file by creating brushes for every surface in the level. Large walls are split up into multiple brushes according to bsp polys.
* winbspc - This program generates a map file by more closely trying to match texture/brush volumes. It has several options for decompiling a bsp file and usually produces far more usuable results than bsp2map.

==Other Tools==
Miscellaneous tools.

* bsp2prt can generate a [[prt file]] from a bsp file without needing to rebuild it from scratch using QBSP.
* bspinfo can generate statistics about a bsp file, an improved [[prt file]], extract entities, and remove all VIS and light data

==See Also==
* [[Quake tools]]</text>
      <sha1>piwahhsfh6g4e2egmppmvwfrjlxlckx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2326</id>
      <parentid>2325</parentid>
      <timestamp>2013-03-26T22:42:20Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* General Purpose Editors */</comment>
      <text xml:space="preserve" bytes="3928">'''Mapping tools''' are devoted to the various tasks of Quake level development.

==Level Editors==
These are CAD-like programs used to construct and populate a level.  They include tools to create and modify [[brushes]], apply [[textures]], place and modify [[entities]], and set up simple [[scripting]].  Some of these programs have their own proprietary file format for saving levels, but they can all save or export your level to a [[map file]], which is needed by compilers in order to generate a game-ready [[bsp file]].

===General Purpose Editors===
* [http://www.bspquakeeditor.com/ BSP]
* [[GTKRadiant]]
* [[QERadiant]]
* [[Ogier]]
* [[QE5]]
* [http://quark.sourceforge.net/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://www.joecodegood.net/tread/ Tread3D]
* [[TrenchBroom]]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]
{{todo|user=[[Hectate]]|todo=The list of editors would look and function better as a table that detailed things like OS, engine compatibility, etc.}}

===Terrain Generators===
These programs are specialized to generate terrain-like geometry out of brushes, but have no general-purpose editing capabilities.  They generate map files that can then be imported into the general purpose level editors.

* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

==Map Converters==
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.  Commonly supported game formats include Quake 2, Quake III Arena, and Half-Life.

* SleepwalkR's mapconv

===Model-to-Map Converters===
These are programs that can be used to convert geometry of another file type, especially files exported by modelling software, into map files.

{{todo}}

==Map Compiling Tools==
Tools to use for [[map compiling]], a process that turns a map file into a bsp file.

===QBSP, Light and Vis===
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]
* Tyrann's TyrUtils V0.5 [http://disenchant.net/files/utils/tyrutils-0.6-win32.zip Win], [http://disenchant.net/files/utils/tyrutils-0.6-osx.zip Mac OS X], [http://disenchant.net/files/utils/tyrutils-0.6.tar.gz Source]

===Skip Removal===
Skip removal tools are standalone programs that can process a [[bsp file]] and remove all surfaces textured with a [[skip texture]], so that those surfaces are not rendered in-game.  This requires a seperate tool because skip textures are not supported by any QBSP version.

* Tyrann's original skippy.exe (has some known bugs)
* metlslime's [http://www.celephais.net/board/view_thread.php?id=60088 newskip]

==Map Decompilers==
These are programs that can reverse-compile a bsp file back into a map file, with varying results.

* bsp2map - This program generates a map file by creating brushes for every surface in the level. Large walls are split up into multiple brushes according to bsp polys.
* winbspc - This program generates a map file by more closely trying to match texture/brush volumes. It has several options for decompiling a bsp file and usually produces far more usuable results than bsp2map.

==Other Tools==
Miscellaneous tools.

* bsp2prt can generate a [[prt file]] from a bsp file without needing to rebuild it from scratch using QBSP.
* bspinfo can generate statistics about a bsp file, an improved [[prt file]], extract entities, and remove all VIS and light data

==See Also==
* [[Quake tools]]</text>
      <sha1>gokelzvqrzieddq44p2p73judntif10</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2351</id>
      <parentid>2326</parentid>
      <timestamp>2013-03-27T13:39:17Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>/* General Purpose Editors */  added a couple more editors to the list...</comment>
      <text xml:space="preserve" bytes="3954">'''Mapping tools''' are devoted to the various tasks of Quake level development.

==Level Editors==
These are CAD-like programs used to construct and populate a level.  They include tools to create and modify [[brushes]], apply [[textures]], place and modify [[entities]], and set up simple [[scripting]].  Some of these programs have their own proprietary file format for saving levels, but they can all save or export your level to a [[map file]], which is needed by compilers in order to generate a game-ready [[bsp file]].

===General Purpose Editors===
* [http://www.bspquakeeditor.com/ BSP]
* [[GTKRadiant]]
* [[QERadiant]]
* [[Ogier]]
* [[QE5]]
* [[Thred]]
* [[QuakeEd]]
* [http://quark.sourceforge.net/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://www.joecodegood.net/tread/ Tread3D]
* [[TrenchBroom]]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]
{{todo|user=[[Hectate]]|todo=The list of editors would look and function better as a table that detailed things like OS, engine compatibility, etc.}}

===Terrain Generators===
These programs are specialized to generate terrain-like geometry out of brushes, but have no general-purpose editing capabilities.  They generate map files that can then be imported into the general purpose level editors.

* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

==Map Converters==
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.  Commonly supported game formats include Quake 2, Quake III Arena, and Half-Life.

* SleepwalkR's mapconv

===Model-to-Map Converters===
These are programs that can be used to convert geometry of another file type, especially files exported by modelling software, into map files.

{{todo}}

==Map Compiling Tools==
Tools to use for [[map compiling]], a process that turns a map file into a bsp file.

===QBSP, Light and Vis===
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]
* Tyrann's TyrUtils V0.5 [http://disenchant.net/files/utils/tyrutils-0.6-win32.zip Win], [http://disenchant.net/files/utils/tyrutils-0.6-osx.zip Mac OS X], [http://disenchant.net/files/utils/tyrutils-0.6.tar.gz Source]

===Skip Removal===
Skip removal tools are standalone programs that can process a [[bsp file]] and remove all surfaces textured with a [[skip texture]], so that those surfaces are not rendered in-game.  This requires a seperate tool because skip textures are not supported by any QBSP version.

* Tyrann's original skippy.exe (has some known bugs)
* metlslime's [http://www.celephais.net/board/view_thread.php?id=60088 newskip]

==Map Decompilers==
These are programs that can reverse-compile a bsp file back into a map file, with varying results.

* bsp2map - This program generates a map file by creating brushes for every surface in the level. Large walls are split up into multiple brushes according to bsp polys.
* winbspc - This program generates a map file by more closely trying to match texture/brush volumes. It has several options for decompiling a bsp file and usually produces far more usuable results than bsp2map.

==Other Tools==
Miscellaneous tools.

* bsp2prt can generate a [[prt file]] from a bsp file without needing to rebuild it from scratch using QBSP.
* bspinfo can generate statistics about a bsp file, an improved [[prt file]], extract entities, and remove all VIS and light data

==See Also==
* [[Quake tools]]</text>
      <sha1>ip5ofwvqw5kljoj0zpdnc0ni20xvvng</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2352</id>
      <parentid>2351</parentid>
      <timestamp>2013-03-27T14:56:46Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>/* General Purpose Editors */  moved editors into table</comment>
      <text xml:space="preserve" bytes="5155">'''Mapping tools''' are devoted to the various tasks of Quake level development.

==Level Editors==
These are CAD-like programs used to construct and populate a level.  They include tools to create and modify [[brushes]], apply [[textures]], place and modify [[entities]], and set up simple [[scripting]].  Some of these programs have their own proprietary file format for saving levels, but they can all save or export your level to a [[map file]], which is needed by compilers in order to generate a game-ready [[bsp file]].

===General Purpose Editors===

{| class=&quot;sortable wikitable&quot;
! Name 
! Supported OS
! width=&quot;150px&quot; | Author
! width=&quot;50px&quot; | Initial release
! width=&quot;100px&quot; | Latest release
|- 
| [[BSP (level editor)]]
| Windows
| Yahn Bernier, Ben ???
| 1996
| 2007 (0.96d)
|-
| [[GTKRadiant]]
|-
| [[QERadiant]]
|-
| [[QE5]]
|-
| [[QuakeEd]]
| NeXTSTEP
| id Software
| 1996
| 1996 (???)
|-
| [[QuArK]]
| Windows
| Armin Rigo, Quark team
| 1996
| 2012 (6.6.0 beta 5)
|-
| [[Quest]]
| DOS, Linux, Windows
| Chris Carollo, Trey Harrison and Alexander Malmberg
| 1996
| 2002 (2.4)
|-
| [[Qoole]]
| Windows
| Pablo Zurita
| ???
| ??? (99 0.98)
|-
| [[Quiver]]
| Mac OS9
| Scott Kevill
| 1997
| 1999 (1.2)
|-
| [[ToeTag]]
| Mac OSX
| Warren Marshall
| 2008
| 2008 (2.30)
|-
| [[Thred]]
| Windows
| Jim Lowell
| 1996
| 1996 (0.9b)
|-
| [[Tread3D]]
| Windows
| Joe Riedel
| 1999
| 2009 (3.0 Alpha 3)
|-
| [[TrenchBroom]]
| Linux, Mac OSX, Windows
| Kristian Duske
| 2012
| 2013 (1.0.5)
|-
| [[Worldcraft]]
| Windows
| Ben Morris / Valve Software
| 1996
| 1998 (1.6a)
|}

&lt;!--
* [http://www.bspquakeeditor.com/ BSP]
* [http://quark.sourceforge.net/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://www.joecodegood.net/tread/ Tread3D]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]
--&gt;
{{todo|user=[[Hectate]]|todo=The list of editors would look and function better as a table that detailed things like OS, engine compatibility, etc.}}
{{todo|user=[[Than]]|todo=I moved the list to a table, but left the old links here (edit page to see as it's commented out), since I think we should create a small page for all the editors. It's possible to get information about all of them using internet archive etc.}}

===Terrain Generators===
These programs are specialized to generate terrain-like geometry out of brushes, but have no general-purpose editing capabilities.  They generate map files that can then be imported into the general purpose level editors.

* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

==Map Converters==
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.  Commonly supported game formats include Quake 2, Quake III Arena, and Half-Life.

* SleepwalkR's mapconv

===Model-to-Map Converters===
These are programs that can be used to convert geometry of another file type, especially files exported by modelling software, into map files.

{{todo}}

==Map Compiling Tools==
Tools to use for [[map compiling]], a process that turns a map file into a bsp file.

===QBSP, Light and Vis===
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]
* Tyrann's TyrUtils V0.5 [http://disenchant.net/files/utils/tyrutils-0.6-win32.zip Win], [http://disenchant.net/files/utils/tyrutils-0.6-osx.zip Mac OS X], [http://disenchant.net/files/utils/tyrutils-0.6.tar.gz Source]

===Skip Removal===
Skip removal tools are standalone programs that can process a [[bsp file]] and remove all surfaces textured with a [[skip texture]], so that those surfaces are not rendered in-game.  This requires a seperate tool because skip textures are not supported by any QBSP version.

* Tyrann's original skippy.exe (has some known bugs)
* metlslime's [http://www.celephais.net/board/view_thread.php?id=60088 newskip]

==Map Decompilers==
These are programs that can reverse-compile a bsp file back into a map file, with varying results.

* bsp2map - This program generates a map file by creating brushes for every surface in the level. Large walls are split up into multiple brushes according to bsp polys.
* winbspc - This program generates a map file by more closely trying to match texture/brush volumes. It has several options for decompiling a bsp file and usually produces far more usuable results than bsp2map.

==Other Tools==
Miscellaneous tools.

* bsp2prt can generate a [[prt file]] from a bsp file without needing to rebuild it from scratch using QBSP.
* bspinfo can generate statistics about a bsp file, an improved [[prt file]], extract entities, and remove all VIS and light data

==See Also==
* [[Quake tools]]</text>
      <sha1>rcf6cn0y7f6utl3kbrnm7zc5cqfxrpy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2356</id>
      <parentid>2352</parentid>
      <timestamp>2013-03-27T15:23:39Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>/* Level Editors */  fixed some wiki links</comment>
      <text xml:space="preserve" bytes="5210">'''Mapping tools''' are devoted to the various tasks of Quake level development.

==Level Editors==
These are CAD-like programs used to construct and populate a level.  They include tools to create and modify [[Brush|brushes]], apply [[Texture|textures]], place and modify [[Entity|entities]], and set up simple [[scripting]].  Some of these programs have their own proprietary file format for saving levels, but they can all save or export your level to a [[Quake_Map_Format|map file]], which is needed by compilers in order to generate a game-ready [[Quake_BSP_Format|bsp file]].

===General Purpose Editors===

{| class=&quot;sortable wikitable&quot;
! Name 
! Supported OS
! width=&quot;150px&quot; | Author
! width=&quot;50px&quot; | Initial release
! width=&quot;100px&quot; | Latest release
|- 
| [[BSP (level editor)]]
| Windows
| Yahn Bernier, Ben ???
| 1996
| 2007 (0.96d)
|-
| [[GTKRadiant]]
|-
| [[QERadiant]]
|-
| [[QE5]]
|-
| [[QuakeEd]]
| NeXTSTEP
| id Software
| 1996
| 1996 (???)
|-
| [[QuArK]]
| Windows
| Armin Rigo, Quark team
| 1996
| 2012 (6.6.0 beta 5)
|-
| [[Quest]]
| DOS, Linux, Windows
| Chris Carollo, Trey Harrison and Alexander Malmberg
| 1996
| 2002 (2.4)
|-
| [[Qoole]]
| Windows
| Pablo Zurita
| ???
| ??? (99 0.98)
|-
| [[Quiver]]
| Mac OS9
| Scott Kevill
| 1997
| 1999 (1.2)
|-
| [[ToeTag]]
| Mac OSX
| Warren Marshall
| 2008
| 2008 (2.30)
|-
| [[Thred]]
| Windows
| Jim Lowell
| 1996
| 1996 (0.9b)
|-
| [[Tread3D]]
| Windows
| Joe Riedel
| 1999
| 2009 (3.0 Alpha 3)
|-
| [[TrenchBroom]]
| Linux, Mac OSX, Windows
| Kristian Duske
| 2012
| 2013 (1.0.5)
|-
| [[Worldcraft]]
| Windows
| Ben Morris / Valve Software
| 1996
| 1998 (1.6a)
|}

&lt;!--
* [http://www.bspquakeeditor.com/ BSP]
* [http://quark.sourceforge.net/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://www.joecodegood.net/tread/ Tread3D]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]
--&gt;
{{todo|user=[[Hectate]]|todo=The list of editors would look and function better as a table that detailed things like OS, engine compatibility, etc.}}
{{todo|user=[[Than]]|todo=I moved the list to a table, but left the old links here (edit page to see as it's commented out), since I think we should create a small page for all the editors. It's possible to get information about all of them using internet archive etc.}}

===Terrain Generators===
These programs are specialized to generate terrain-like geometry out of brushes, but have no general-purpose editing capabilities.  They generate map files that can then be imported into the general purpose level editors.

* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

==Map Converters==
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.  Commonly supported game formats include Quake 2, Quake III Arena, and Half-Life.

* SleepwalkR's mapconv

===Model-to-Map Converters===
These are programs that can be used to convert geometry of another file type, especially files exported by modelling software, into map files.

{{todo}}

==Map Compiling Tools==
Tools to use for [[map compiling]], a process that turns a map file into a bsp file.

===QBSP, Light and Vis===
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]
* Tyrann's TyrUtils V0.5 [http://disenchant.net/files/utils/tyrutils-0.6-win32.zip Win], [http://disenchant.net/files/utils/tyrutils-0.6-osx.zip Mac OS X], [http://disenchant.net/files/utils/tyrutils-0.6.tar.gz Source]

===Skip Removal===
Skip removal tools are standalone programs that can process a [[bsp file]] and remove all surfaces textured with a [[skip texture]], so that those surfaces are not rendered in-game.  This requires a seperate tool because skip textures are not supported by any QBSP version.

* Tyrann's original skippy.exe (has some known bugs)
* metlslime's [http://www.celephais.net/board/view_thread.php?id=60088 newskip]

==Map Decompilers==
These are programs that can reverse-compile a bsp file back into a map file, with varying results.

* bsp2map - This program generates a map file by creating brushes for every surface in the level. Large walls are split up into multiple brushes according to bsp polys.
* winbspc - This program generates a map file by more closely trying to match texture/brush volumes. It has several options for decompiling a bsp file and usually produces far more usuable results than bsp2map.

==Other Tools==
Miscellaneous tools.

* bsp2prt can generate a [[prt file]] from a bsp file without needing to rebuild it from scratch using QBSP.
* bspinfo can generate statistics about a bsp file, an improved [[prt file]], extract entities, and remove all VIS and light data

==See Also==
* [[Quake tools]]</text>
      <sha1>9o7nydmsczuyclvh762pqp2mz2na2jo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2468</id>
      <parentid>2356</parentid>
      <timestamp>2013-03-29T10:53:36Z</timestamp>
      <contributor>
        <ip>203.122.220.108</ip>
      </contributor>
      <comment>/* QBSP, Light and Vis */</comment>
      <text xml:space="preserve" bytes="5117">'''Mapping tools''' are devoted to the various tasks of Quake level development.

==Level Editors==
These are CAD-like programs used to construct and populate a level.  They include tools to create and modify [[Brush|brushes]], apply [[Texture|textures]], place and modify [[Entity|entities]], and set up simple [[scripting]].  Some of these programs have their own proprietary file format for saving levels, but they can all save or export your level to a [[Quake_Map_Format|map file]], which is needed by compilers in order to generate a game-ready [[Quake_BSP_Format|bsp file]].

===General Purpose Editors===

{| class=&quot;sortable wikitable&quot;
! Name 
! Supported OS
! width=&quot;150px&quot; | Author
! width=&quot;50px&quot; | Initial release
! width=&quot;100px&quot; | Latest release
|- 
| [[BSP (level editor)]]
| Windows
| Yahn Bernier, Ben ???
| 1996
| 2007 (0.96d)
|-
| [[GTKRadiant]]
|-
| [[QERadiant]]
|-
| [[QE5]]
|-
| [[QuakeEd]]
| NeXTSTEP
| id Software
| 1996
| 1996 (???)
|-
| [[QuArK]]
| Windows
| Armin Rigo, Quark team
| 1996
| 2012 (6.6.0 beta 5)
|-
| [[Quest]]
| DOS, Linux, Windows
| Chris Carollo, Trey Harrison and Alexander Malmberg
| 1996
| 2002 (2.4)
|-
| [[Qoole]]
| Windows
| Pablo Zurita
| ???
| ??? (99 0.98)
|-
| [[Quiver]]
| Mac OS9
| Scott Kevill
| 1997
| 1999 (1.2)
|-
| [[ToeTag]]
| Mac OSX
| Warren Marshall
| 2008
| 2008 (2.30)
|-
| [[Thred]]
| Windows
| Jim Lowell
| 1996
| 1996 (0.9b)
|-
| [[Tread3D]]
| Windows
| Joe Riedel
| 1999
| 2009 (3.0 Alpha 3)
|-
| [[TrenchBroom]]
| Linux, Mac OSX, Windows
| Kristian Duske
| 2012
| 2013 (1.0.5)
|-
| [[Worldcraft]]
| Windows
| Ben Morris / Valve Software
| 1996
| 1998 (1.6a)
|}

&lt;!--
* [http://www.bspquakeeditor.com/ BSP]
* [http://quark.sourceforge.net/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://www.joecodegood.net/tread/ Tread3D]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]
--&gt;
{{todo|user=[[Hectate]]|todo=The list of editors would look and function better as a table that detailed things like OS, engine compatibility, etc.}}
{{todo|user=[[Than]]|todo=I moved the list to a table, but left the old links here (edit page to see as it's commented out), since I think we should create a small page for all the editors. It's possible to get information about all of them using internet archive etc.}}

===Terrain Generators===
These programs are specialized to generate terrain-like geometry out of brushes, but have no general-purpose editing capabilities.  They generate map files that can then be imported into the general purpose level editors.

* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

==Map Converters==
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.  Commonly supported game formats include Quake 2, Quake III Arena, and Half-Life.

* SleepwalkR's mapconv

===Model-to-Map Converters===
These are programs that can be used to convert geometry of another file type, especially files exported by modelling software, into map files.

{{todo}}

==Map Compiling Tools==
Tools to use for [[map compiling]], a process that turns a map file into a bsp file.

===QBSP, Light and Vis===
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]
* Tyrann's [http://disenchant.net/utils.html TyrUtils] - Windows and Mac OS X binaries, plus Linux/Unix supported via source.

===Skip Removal===
Skip removal tools are standalone programs that can process a [[bsp file]] and remove all surfaces textured with a [[skip texture]], so that those surfaces are not rendered in-game.  This requires a seperate tool because skip textures are not supported by any QBSP version.

* Tyrann's original skippy.exe (has some known bugs)
* metlslime's [http://www.celephais.net/board/view_thread.php?id=60088 newskip]

==Map Decompilers==
These are programs that can reverse-compile a bsp file back into a map file, with varying results.

* bsp2map - This program generates a map file by creating brushes for every surface in the level. Large walls are split up into multiple brushes according to bsp polys.
* winbspc - This program generates a map file by more closely trying to match texture/brush volumes. It has several options for decompiling a bsp file and usually produces far more usuable results than bsp2map.

==Other Tools==
Miscellaneous tools.

* bsp2prt can generate a [[prt file]] from a bsp file without needing to rebuild it from scratch using QBSP.
* bspinfo can generate statistics about a bsp file, an improved [[prt file]], extract entities, and remove all VIS and light data

==See Also==
* [[Quake tools]]</text>
      <sha1>0cfgtqvxlk4fpf5mag52ahq9ygtdpuf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2470</id>
      <parentid>2468</parentid>
      <timestamp>2013-03-29T10:54:08Z</timestamp>
      <contributor>
        <ip>203.122.220.108</ip>
      </contributor>
      <comment>/* QBSP, Light and Vis */</comment>
      <text xml:space="preserve" bytes="5112">'''Mapping tools''' are devoted to the various tasks of Quake level development.

==Level Editors==
These are CAD-like programs used to construct and populate a level.  They include tools to create and modify [[Brush|brushes]], apply [[Texture|textures]], place and modify [[Entity|entities]], and set up simple [[scripting]].  Some of these programs have their own proprietary file format for saving levels, but they can all save or export your level to a [[Quake_Map_Format|map file]], which is needed by compilers in order to generate a game-ready [[Quake_BSP_Format|bsp file]].

===General Purpose Editors===

{| class=&quot;sortable wikitable&quot;
! Name 
! Supported OS
! width=&quot;150px&quot; | Author
! width=&quot;50px&quot; | Initial release
! width=&quot;100px&quot; | Latest release
|- 
| [[BSP (level editor)]]
| Windows
| Yahn Bernier, Ben ???
| 1996
| 2007 (0.96d)
|-
| [[GTKRadiant]]
|-
| [[QERadiant]]
|-
| [[QE5]]
|-
| [[QuakeEd]]
| NeXTSTEP
| id Software
| 1996
| 1996 (???)
|-
| [[QuArK]]
| Windows
| Armin Rigo, Quark team
| 1996
| 2012 (6.6.0 beta 5)
|-
| [[Quest]]
| DOS, Linux, Windows
| Chris Carollo, Trey Harrison and Alexander Malmberg
| 1996
| 2002 (2.4)
|-
| [[Qoole]]
| Windows
| Pablo Zurita
| ???
| ??? (99 0.98)
|-
| [[Quiver]]
| Mac OS9
| Scott Kevill
| 1997
| 1999 (1.2)
|-
| [[ToeTag]]
| Mac OSX
| Warren Marshall
| 2008
| 2008 (2.30)
|-
| [[Thred]]
| Windows
| Jim Lowell
| 1996
| 1996 (0.9b)
|-
| [[Tread3D]]
| Windows
| Joe Riedel
| 1999
| 2009 (3.0 Alpha 3)
|-
| [[TrenchBroom]]
| Linux, Mac OSX, Windows
| Kristian Duske
| 2012
| 2013 (1.0.5)
|-
| [[Worldcraft]]
| Windows
| Ben Morris / Valve Software
| 1996
| 1998 (1.6a)
|}

&lt;!--
* [http://www.bspquakeeditor.com/ BSP]
* [http://quark.sourceforge.net/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://www.joecodegood.net/tread/ Tread3D]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]
--&gt;
{{todo|user=[[Hectate]]|todo=The list of editors would look and function better as a table that detailed things like OS, engine compatibility, etc.}}
{{todo|user=[[Than]]|todo=I moved the list to a table, but left the old links here (edit page to see as it's commented out), since I think we should create a small page for all the editors. It's possible to get information about all of them using internet archive etc.}}

===Terrain Generators===
These programs are specialized to generate terrain-like geometry out of brushes, but have no general-purpose editing capabilities.  They generate map files that can then be imported into the general purpose level editors.

* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

==Map Converters==
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.  Commonly supported game formats include Quake 2, Quake III Arena, and Half-Life.

* SleepwalkR's mapconv

===Model-to-Map Converters===
These are programs that can be used to convert geometry of another file type, especially files exported by modelling software, into map files.

{{todo}}

==Map Compiling Tools==
Tools to use for [[map compiling]], a process that turns a map file into a bsp file.

===QBSP, Light and Vis===
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]
* Tyrann's [http://disenchant.net/utils TyrUtils] - Windows and Mac OS X binaries, plus Linux/Unix supported via source.

===Skip Removal===
Skip removal tools are standalone programs that can process a [[bsp file]] and remove all surfaces textured with a [[skip texture]], so that those surfaces are not rendered in-game.  This requires a seperate tool because skip textures are not supported by any QBSP version.

* Tyrann's original skippy.exe (has some known bugs)
* metlslime's [http://www.celephais.net/board/view_thread.php?id=60088 newskip]

==Map Decompilers==
These are programs that can reverse-compile a bsp file back into a map file, with varying results.

* bsp2map - This program generates a map file by creating brushes for every surface in the level. Large walls are split up into multiple brushes according to bsp polys.
* winbspc - This program generates a map file by more closely trying to match texture/brush volumes. It has several options for decompiling a bsp file and usually produces far more usuable results than bsp2map.

==Other Tools==
Miscellaneous tools.

* bsp2prt can generate a [[prt file]] from a bsp file without needing to rebuild it from scratch using QBSP.
* bspinfo can generate statistics about a bsp file, an improved [[prt file]], extract entities, and remove all VIS and light data

==See Also==
* [[Quake tools]]</text>
      <sha1>izybtath50x2d6e7d2gb3bwvbysgdou</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2471</id>
      <parentid>2470</parentid>
      <timestamp>2013-03-29T10:56:49Z</timestamp>
      <contributor>
        <ip>203.122.220.108</ip>
      </contributor>
      <comment>/* Skip Removal */</comment>
      <text xml:space="preserve" bytes="5132">'''Mapping tools''' are devoted to the various tasks of Quake level development.

==Level Editors==
These are CAD-like programs used to construct and populate a level.  They include tools to create and modify [[Brush|brushes]], apply [[Texture|textures]], place and modify [[Entity|entities]], and set up simple [[scripting]].  Some of these programs have their own proprietary file format for saving levels, but they can all save or export your level to a [[Quake_Map_Format|map file]], which is needed by compilers in order to generate a game-ready [[Quake_BSP_Format|bsp file]].

===General Purpose Editors===

{| class=&quot;sortable wikitable&quot;
! Name 
! Supported OS
! width=&quot;150px&quot; | Author
! width=&quot;50px&quot; | Initial release
! width=&quot;100px&quot; | Latest release
|- 
| [[BSP (level editor)]]
| Windows
| Yahn Bernier, Ben ???
| 1996
| 2007 (0.96d)
|-
| [[GTKRadiant]]
|-
| [[QERadiant]]
|-
| [[QE5]]
|-
| [[QuakeEd]]
| NeXTSTEP
| id Software
| 1996
| 1996 (???)
|-
| [[QuArK]]
| Windows
| Armin Rigo, Quark team
| 1996
| 2012 (6.6.0 beta 5)
|-
| [[Quest]]
| DOS, Linux, Windows
| Chris Carollo, Trey Harrison and Alexander Malmberg
| 1996
| 2002 (2.4)
|-
| [[Qoole]]
| Windows
| Pablo Zurita
| ???
| ??? (99 0.98)
|-
| [[Quiver]]
| Mac OS9
| Scott Kevill
| 1997
| 1999 (1.2)
|-
| [[ToeTag]]
| Mac OSX
| Warren Marshall
| 2008
| 2008 (2.30)
|-
| [[Thred]]
| Windows
| Jim Lowell
| 1996
| 1996 (0.9b)
|-
| [[Tread3D]]
| Windows
| Joe Riedel
| 1999
| 2009 (3.0 Alpha 3)
|-
| [[TrenchBroom]]
| Linux, Mac OSX, Windows
| Kristian Duske
| 2012
| 2013 (1.0.5)
|-
| [[Worldcraft]]
| Windows
| Ben Morris / Valve Software
| 1996
| 1998 (1.6a)
|}

&lt;!--
* [http://www.bspquakeeditor.com/ BSP]
* [http://quark.sourceforge.net/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://www.joecodegood.net/tread/ Tread3D]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]
--&gt;
{{todo|user=[[Hectate]]|todo=The list of editors would look and function better as a table that detailed things like OS, engine compatibility, etc.}}
{{todo|user=[[Than]]|todo=I moved the list to a table, but left the old links here (edit page to see as it's commented out), since I think we should create a small page for all the editors. It's possible to get information about all of them using internet archive etc.}}

===Terrain Generators===
These programs are specialized to generate terrain-like geometry out of brushes, but have no general-purpose editing capabilities.  They generate map files that can then be imported into the general purpose level editors.

* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

==Map Converters==
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.  Commonly supported game formats include Quake 2, Quake III Arena, and Half-Life.

* SleepwalkR's mapconv

===Model-to-Map Converters===
These are programs that can be used to convert geometry of another file type, especially files exported by modelling software, into map files.

{{todo}}

==Map Compiling Tools==
Tools to use for [[map compiling]], a process that turns a map file into a bsp file.

===QBSP, Light and Vis===
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]
* Tyrann's [http://disenchant.net/utils TyrUtils] - Windows and Mac OS X binaries, plus Linux/Unix supported via source.

===Skip Removal===
Skip removal tools are standalone programs that can process a [[bsp file]] and remove all surfaces textured with a [[skip texture]], so that those surfaces are not rendered in-game.  This can be done by some QBSP tools or via a separate tool.

* Tyrann's [http://disenchant.net/utils TyrUtils] qbsp include skip surface removal (since version 0.6)
* metlslime's [http://www.celephais.net/board/view_thread.php?id=60088 newskip]

==Map Decompilers==
These are programs that can reverse-compile a bsp file back into a map file, with varying results.

* bsp2map - This program generates a map file by creating brushes for every surface in the level. Large walls are split up into multiple brushes according to bsp polys.
* winbspc - This program generates a map file by more closely trying to match texture/brush volumes. It has several options for decompiling a bsp file and usually produces far more usuable results than bsp2map.

==Other Tools==
Miscellaneous tools.

* bsp2prt can generate a [[prt file]] from a bsp file without needing to rebuild it from scratch using QBSP.
* bspinfo can generate statistics about a bsp file, an improved [[prt file]], extract entities, and remove all VIS and light data

==See Also==
* [[Quake tools]]</text>
      <sha1>kdyakubfil784peijpni7vywdqva5l2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3014</id>
      <parentid>2471</parentid>
      <timestamp>2013-10-23T18:37:43Z</timestamp>
      <contributor>
        <username>Spiney</username>
        <id>40</id>
      </contributor>
      <comment>/* Other Tools */</comment>
      <text xml:space="preserve" bytes="5246">'''Mapping tools''' are devoted to the various tasks of Quake level development.

==Level Editors==
These are CAD-like programs used to construct and populate a level.  They include tools to create and modify [[Brush|brushes]], apply [[Texture|textures]], place and modify [[Entity|entities]], and set up simple [[scripting]].  Some of these programs have their own proprietary file format for saving levels, but they can all save or export your level to a [[Quake_Map_Format|map file]], which is needed by compilers in order to generate a game-ready [[Quake_BSP_Format|bsp file]].

===General Purpose Editors===

{| class=&quot;sortable wikitable&quot;
! Name 
! Supported OS
! width=&quot;150px&quot; | Author
! width=&quot;50px&quot; | Initial release
! width=&quot;100px&quot; | Latest release
|- 
| [[BSP (level editor)]]
| Windows
| Yahn Bernier, Ben ???
| 1996
| 2007 (0.96d)
|-
| [[GTKRadiant]]
|-
| [[QERadiant]]
|-
| [[QE5]]
|-
| [[QuakeEd]]
| NeXTSTEP
| id Software
| 1996
| 1996 (???)
|-
| [[QuArK]]
| Windows
| Armin Rigo, Quark team
| 1996
| 2012 (6.6.0 beta 5)
|-
| [[Quest]]
| DOS, Linux, Windows
| Chris Carollo, Trey Harrison and Alexander Malmberg
| 1996
| 2002 (2.4)
|-
| [[Qoole]]
| Windows
| Pablo Zurita
| ???
| ??? (99 0.98)
|-
| [[Quiver]]
| Mac OS9
| Scott Kevill
| 1997
| 1999 (1.2)
|-
| [[ToeTag]]
| Mac OSX
| Warren Marshall
| 2008
| 2008 (2.30)
|-
| [[Thred]]
| Windows
| Jim Lowell
| 1996
| 1996 (0.9b)
|-
| [[Tread3D]]
| Windows
| Joe Riedel
| 1999
| 2009 (3.0 Alpha 3)
|-
| [[TrenchBroom]]
| Linux, Mac OSX, Windows
| Kristian Duske
| 2012
| 2013 (1.0.5)
|-
| [[Worldcraft]]
| Windows
| Ben Morris / Valve Software
| 1996
| 1998 (1.6a)
|}

&lt;!--
* [http://www.bspquakeeditor.com/ BSP]
* [http://quark.sourceforge.net/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://www.joecodegood.net/tread/ Tread3D]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]
--&gt;
{{todo|user=[[Hectate]]|todo=The list of editors would look and function better as a table that detailed things like OS, engine compatibility, etc.}}
{{todo|user=[[Than]]|todo=I moved the list to a table, but left the old links here (edit page to see as it's commented out), since I think we should create a small page for all the editors. It's possible to get information about all of them using internet archive etc.}}

===Terrain Generators===
These programs are specialized to generate terrain-like geometry out of brushes, but have no general-purpose editing capabilities.  They generate map files that can then be imported into the general purpose level editors.

* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

==Map Converters==
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.  Commonly supported game formats include Quake 2, Quake III Arena, and Half-Life.

* SleepwalkR's mapconv

===Model-to-Map Converters===
These are programs that can be used to convert geometry of another file type, especially files exported by modelling software, into map files.

{{todo}}

==Map Compiling Tools==
Tools to use for [[map compiling]], a process that turns a map file into a bsp file.

===QBSP, Light and Vis===
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]
* Tyrann's [http://disenchant.net/utils TyrUtils] - Windows and Mac OS X binaries, plus Linux/Unix supported via source.

===Skip Removal===
Skip removal tools are standalone programs that can process a [[bsp file]] and remove all surfaces textured with a [[skip texture]], so that those surfaces are not rendered in-game.  This can be done by some QBSP tools or via a separate tool.

* Tyrann's [http://disenchant.net/utils TyrUtils] qbsp include skip surface removal (since version 0.6)
* metlslime's [http://www.celephais.net/board/view_thread.php?id=60088 newskip]

==Map Decompilers==
These are programs that can reverse-compile a bsp file back into a map file, with varying results.

* bsp2map - This program generates a map file by creating brushes for every surface in the level. Large walls are split up into multiple brushes according to bsp polys.
* winbspc - This program generates a map file by more closely trying to match texture/brush volumes. It has several options for decompiling a bsp file and usually produces far more usuable results than bsp2map.

==Other Tools==
Miscellaneous tools.

* bsp2prt can generate a [[prt file]] from a bsp file without needing to rebuild it from scratch using QBSP.
* bspinfo can generate statistics about a bsp file, an improved [[prt file]], extract entities, and remove all VIS and light data
* Scrama's MapConverter can perform scaling and convert map formats between Half-Life, Quake, Quake 2 and Quake 3

==See Also==
* [[Quake tools]]</text>
      <sha1>gidd7utg8bisgsm395l0xbmsjqo4gob</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3016</id>
      <parentid>3014</parentid>
      <timestamp>2013-10-23T18:47:10Z</timestamp>
      <contributor>
        <username>Spiney</username>
        <id>40</id>
      </contributor>
      <comment>/* Other Tools */</comment>
      <text xml:space="preserve" bytes="5277">'''Mapping tools''' are devoted to the various tasks of Quake level development.

==Level Editors==
These are CAD-like programs used to construct and populate a level.  They include tools to create and modify [[Brush|brushes]], apply [[Texture|textures]], place and modify [[Entity|entities]], and set up simple [[scripting]].  Some of these programs have their own proprietary file format for saving levels, but they can all save or export your level to a [[Quake_Map_Format|map file]], which is needed by compilers in order to generate a game-ready [[Quake_BSP_Format|bsp file]].

===General Purpose Editors===

{| class=&quot;sortable wikitable&quot;
! Name 
! Supported OS
! width=&quot;150px&quot; | Author
! width=&quot;50px&quot; | Initial release
! width=&quot;100px&quot; | Latest release
|- 
| [[BSP (level editor)]]
| Windows
| Yahn Bernier, Ben ???
| 1996
| 2007 (0.96d)
|-
| [[GTKRadiant]]
|-
| [[QERadiant]]
|-
| [[QE5]]
|-
| [[QuakeEd]]
| NeXTSTEP
| id Software
| 1996
| 1996 (???)
|-
| [[QuArK]]
| Windows
| Armin Rigo, Quark team
| 1996
| 2012 (6.6.0 beta 5)
|-
| [[Quest]]
| DOS, Linux, Windows
| Chris Carollo, Trey Harrison and Alexander Malmberg
| 1996
| 2002 (2.4)
|-
| [[Qoole]]
| Windows
| Pablo Zurita
| ???
| ??? (99 0.98)
|-
| [[Quiver]]
| Mac OS9
| Scott Kevill
| 1997
| 1999 (1.2)
|-
| [[ToeTag]]
| Mac OSX
| Warren Marshall
| 2008
| 2008 (2.30)
|-
| [[Thred]]
| Windows
| Jim Lowell
| 1996
| 1996 (0.9b)
|-
| [[Tread3D]]
| Windows
| Joe Riedel
| 1999
| 2009 (3.0 Alpha 3)
|-
| [[TrenchBroom]]
| Linux, Mac OSX, Windows
| Kristian Duske
| 2012
| 2013 (1.0.5)
|-
| [[Worldcraft]]
| Windows
| Ben Morris / Valve Software
| 1996
| 1998 (1.6a)
|}

&lt;!--
* [http://www.bspquakeeditor.com/ BSP]
* [http://quark.sourceforge.net/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://www.joecodegood.net/tread/ Tread3D]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]
--&gt;
{{todo|user=[[Hectate]]|todo=The list of editors would look and function better as a table that detailed things like OS, engine compatibility, etc.}}
{{todo|user=[[Than]]|todo=I moved the list to a table, but left the old links here (edit page to see as it's commented out), since I think we should create a small page for all the editors. It's possible to get information about all of them using internet archive etc.}}

===Terrain Generators===
These programs are specialized to generate terrain-like geometry out of brushes, but have no general-purpose editing capabilities.  They generate map files that can then be imported into the general purpose level editors.

* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

==Map Converters==
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.  Commonly supported game formats include Quake 2, Quake III Arena, and Half-Life.

* SleepwalkR's mapconv

===Model-to-Map Converters===
These are programs that can be used to convert geometry of another file type, especially files exported by modelling software, into map files.

{{todo}}

==Map Compiling Tools==
Tools to use for [[map compiling]], a process that turns a map file into a bsp file.

===QBSP, Light and Vis===
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]
* Tyrann's [http://disenchant.net/utils TyrUtils] - Windows and Mac OS X binaries, plus Linux/Unix supported via source.

===Skip Removal===
Skip removal tools are standalone programs that can process a [[bsp file]] and remove all surfaces textured with a [[skip texture]], so that those surfaces are not rendered in-game.  This can be done by some QBSP tools or via a separate tool.

* Tyrann's [http://disenchant.net/utils TyrUtils] qbsp include skip surface removal (since version 0.6)
* metlslime's [http://www.celephais.net/board/view_thread.php?id=60088 newskip]

==Map Decompilers==
These are programs that can reverse-compile a bsp file back into a map file, with varying results.

* bsp2map - This program generates a map file by creating brushes for every surface in the level. Large walls are split up into multiple brushes according to bsp polys.
* winbspc - This program generates a map file by more closely trying to match texture/brush volumes. It has several options for decompiling a bsp file and usually produces far more usuable results than bsp2map.

==Other Tools==
Miscellaneous tools.

* bsp2prt can generate a [[prt file]] from a bsp file without needing to rebuild it from scratch using QBSP.
* bspinfo can generate statistics about a bsp file, an improved [[prt file]], extract entities, and remove all VIS and light data
* Scrama's MapConverter [ [[image:MapConverter.zip]] ] can perform scaling and convert map formats between Half-Life, Quake, Quake 2 and Quake 3

==See Also==
* [[Quake tools]]</text>
      <sha1>nki1riqnmquwhpcw5ck7ew86prcqu9o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3017</id>
      <parentid>3016</parentid>
      <timestamp>2013-10-23T18:53:24Z</timestamp>
      <contributor>
        <username>Spiney</username>
        <id>40</id>
      </contributor>
      <comment>/* Other Tools */</comment>
      <text xml:space="preserve" bytes="5276">'''Mapping tools''' are devoted to the various tasks of Quake level development.

==Level Editors==
These are CAD-like programs used to construct and populate a level.  They include tools to create and modify [[Brush|brushes]], apply [[Texture|textures]], place and modify [[Entity|entities]], and set up simple [[scripting]].  Some of these programs have their own proprietary file format for saving levels, but they can all save or export your level to a [[Quake_Map_Format|map file]], which is needed by compilers in order to generate a game-ready [[Quake_BSP_Format|bsp file]].

===General Purpose Editors===

{| class=&quot;sortable wikitable&quot;
! Name 
! Supported OS
! width=&quot;150px&quot; | Author
! width=&quot;50px&quot; | Initial release
! width=&quot;100px&quot; | Latest release
|- 
| [[BSP (level editor)]]
| Windows
| Yahn Bernier, Ben ???
| 1996
| 2007 (0.96d)
|-
| [[GTKRadiant]]
|-
| [[QERadiant]]
|-
| [[QE5]]
|-
| [[QuakeEd]]
| NeXTSTEP
| id Software
| 1996
| 1996 (???)
|-
| [[QuArK]]
| Windows
| Armin Rigo, Quark team
| 1996
| 2012 (6.6.0 beta 5)
|-
| [[Quest]]
| DOS, Linux, Windows
| Chris Carollo, Trey Harrison and Alexander Malmberg
| 1996
| 2002 (2.4)
|-
| [[Qoole]]
| Windows
| Pablo Zurita
| ???
| ??? (99 0.98)
|-
| [[Quiver]]
| Mac OS9
| Scott Kevill
| 1997
| 1999 (1.2)
|-
| [[ToeTag]]
| Mac OSX
| Warren Marshall
| 2008
| 2008 (2.30)
|-
| [[Thred]]
| Windows
| Jim Lowell
| 1996
| 1996 (0.9b)
|-
| [[Tread3D]]
| Windows
| Joe Riedel
| 1999
| 2009 (3.0 Alpha 3)
|-
| [[TrenchBroom]]
| Linux, Mac OSX, Windows
| Kristian Duske
| 2012
| 2013 (1.0.5)
|-
| [[Worldcraft]]
| Windows
| Ben Morris / Valve Software
| 1996
| 1998 (1.6a)
|}

&lt;!--
* [http://www.bspquakeeditor.com/ BSP]
* [http://quark.sourceforge.net/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://www.joecodegood.net/tread/ Tread3D]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]
--&gt;
{{todo|user=[[Hectate]]|todo=The list of editors would look and function better as a table that detailed things like OS, engine compatibility, etc.}}
{{todo|user=[[Than]]|todo=I moved the list to a table, but left the old links here (edit page to see as it's commented out), since I think we should create a small page for all the editors. It's possible to get information about all of them using internet archive etc.}}

===Terrain Generators===
These programs are specialized to generate terrain-like geometry out of brushes, but have no general-purpose editing capabilities.  They generate map files that can then be imported into the general purpose level editors.

* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

==Map Converters==
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.  Commonly supported game formats include Quake 2, Quake III Arena, and Half-Life.

* SleepwalkR's mapconv

===Model-to-Map Converters===
These are programs that can be used to convert geometry of another file type, especially files exported by modelling software, into map files.

{{todo}}

==Map Compiling Tools==
Tools to use for [[map compiling]], a process that turns a map file into a bsp file.

===QBSP, Light and Vis===
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]
* Tyrann's [http://disenchant.net/utils TyrUtils] - Windows and Mac OS X binaries, plus Linux/Unix supported via source.

===Skip Removal===
Skip removal tools are standalone programs that can process a [[bsp file]] and remove all surfaces textured with a [[skip texture]], so that those surfaces are not rendered in-game.  This can be done by some QBSP tools or via a separate tool.

* Tyrann's [http://disenchant.net/utils TyrUtils] qbsp include skip surface removal (since version 0.6)
* metlslime's [http://www.celephais.net/board/view_thread.php?id=60088 newskip]

==Map Decompilers==
These are programs that can reverse-compile a bsp file back into a map file, with varying results.

* bsp2map - This program generates a map file by creating brushes for every surface in the level. Large walls are split up into multiple brushes according to bsp polys.
* winbspc - This program generates a map file by more closely trying to match texture/brush volumes. It has several options for decompiling a bsp file and usually produces far more usuable results than bsp2map.

==Other Tools==
Miscellaneous tools.

* bsp2prt can generate a [[prt file]] from a bsp file without needing to rebuild it from scratch using QBSP.
* bspinfo can generate statistics about a bsp file, an improved [[prt file]], extract entities, and remove all VIS and light data
* Scrama's MapConverter [ [[image:MapConverter.zip]] ] can perform scaling and convert map formats from Half-Life to Quake, Quake 2 and Quake 3

==See Also==
* [[Quake tools]]</text>
      <sha1>p4coj8zszltkwtbryxfo2m9emyvvc5m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3246</id>
      <parentid>3017</parentid>
      <timestamp>2014-08-27T14:45:10Z</timestamp>
      <contributor>
        <ip>192.168.4.107</ip>
      </contributor>
      <comment>/* QBSP, Light and Vis */</comment>
      <text xml:space="preserve" bytes="5455">'''Mapping tools''' are devoted to the various tasks of Quake level development.

==Level Editors==
These are CAD-like programs used to construct and populate a level.  They include tools to create and modify [[Brush|brushes]], apply [[Texture|textures]], place and modify [[Entity|entities]], and set up simple [[scripting]].  Some of these programs have their own proprietary file format for saving levels, but they can all save or export your level to a [[Quake_Map_Format|map file]], which is needed by compilers in order to generate a game-ready [[Quake_BSP_Format|bsp file]].

===General Purpose Editors===

{| class=&quot;sortable wikitable&quot;
! Name 
! Supported OS
! width=&quot;150px&quot; | Author
! width=&quot;50px&quot; | Initial release
! width=&quot;100px&quot; | Latest release
|- 
| [[BSP (level editor)]]
| Windows
| Yahn Bernier, Ben ???
| 1996
| 2007 (0.96d)
|-
| [[GTKRadiant]]
|-
| [[QERadiant]]
|-
| [[QE5]]
|-
| [[QuakeEd]]
| NeXTSTEP
| id Software
| 1996
| 1996 (???)
|-
| [[QuArK]]
| Windows
| Armin Rigo, Quark team
| 1996
| 2012 (6.6.0 beta 5)
|-
| [[Quest]]
| DOS, Linux, Windows
| Chris Carollo, Trey Harrison and Alexander Malmberg
| 1996
| 2002 (2.4)
|-
| [[Qoole]]
| Windows
| Pablo Zurita
| ???
| ??? (99 0.98)
|-
| [[Quiver]]
| Mac OS9
| Scott Kevill
| 1997
| 1999 (1.2)
|-
| [[ToeTag]]
| Mac OSX
| Warren Marshall
| 2008
| 2008 (2.30)
|-
| [[Thred]]
| Windows
| Jim Lowell
| 1996
| 1996 (0.9b)
|-
| [[Tread3D]]
| Windows
| Joe Riedel
| 1999
| 2009 (3.0 Alpha 3)
|-
| [[TrenchBroom]]
| Linux, Mac OSX, Windows
| Kristian Duske
| 2012
| 2013 (1.0.5)
|-
| [[Worldcraft]]
| Windows
| Ben Morris / Valve Software
| 1996
| 1998 (1.6a)
|}

&lt;!--
* [http://www.bspquakeeditor.com/ BSP]
* [http://quark.sourceforge.net/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://www.joecodegood.net/tread/ Tread3D]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]
--&gt;
{{todo|user=[[Hectate]]|todo=The list of editors would look and function better as a table that detailed things like OS, engine compatibility, etc.}}
{{todo|user=[[Than]]|todo=I moved the list to a table, but left the old links here (edit page to see as it's commented out), since I think we should create a small page for all the editors. It's possible to get information about all of them using internet archive etc.}}

===Terrain Generators===
These programs are specialized to generate terrain-like geometry out of brushes, but have no general-purpose editing capabilities.  They generate map files that can then be imported into the general purpose level editors.

* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

==Map Converters==
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.  Commonly supported game formats include Quake 2, Quake III Arena, and Half-Life.

* SleepwalkR's mapconv

===Model-to-Map Converters===
These are programs that can be used to convert geometry of another file type, especially files exported by modelling software, into map files.

{{todo}}

==Map Compiling Tools==
Tools to use for [[map compiling]], a process that turns a map file into a bsp file.

===QBSP, Light and Vis===
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* [http://voidspark.net/projects/bjptools_xt/ Jury-Rigged BJP Tools], modified version of Bengt Jardrup's tools with BSP2 support, details brushes and several other improvements.
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]
* Tyrann's [http://disenchant.net/utils TyrUtils] - Windows and Mac OS X binaries, plus Linux/Unix supported via source.

===Skip Removal===
Skip removal tools are standalone programs that can process a [[bsp file]] and remove all surfaces textured with a [[skip texture]], so that those surfaces are not rendered in-game.  This can be done by some QBSP tools or via a separate tool.

* Tyrann's [http://disenchant.net/utils TyrUtils] qbsp include skip surface removal (since version 0.6)
* metlslime's [http://www.celephais.net/board/view_thread.php?id=60088 newskip]

==Map Decompilers==
These are programs that can reverse-compile a bsp file back into a map file, with varying results.

* bsp2map - This program generates a map file by creating brushes for every surface in the level. Large walls are split up into multiple brushes according to bsp polys.
* winbspc - This program generates a map file by more closely trying to match texture/brush volumes. It has several options for decompiling a bsp file and usually produces far more usuable results than bsp2map.

==Other Tools==
Miscellaneous tools.

* bsp2prt can generate a [[prt file]] from a bsp file without needing to rebuild it from scratch using QBSP.
* bspinfo can generate statistics about a bsp file, an improved [[prt file]], extract entities, and remove all VIS and light data
* Scrama's MapConverter [ [[image:MapConverter.zip]] ] can perform scaling and convert map formats from Half-Life to Quake, Quake 2 and Quake 3

==See Also==
* [[Quake tools]]</text>
      <sha1>my8d3omc34wyjfjotu7rkg2pc25f0j2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3247</id>
      <parentid>3246</parentid>
      <timestamp>2014-08-27T14:47:08Z</timestamp>
      <contributor>
        <ip>192.168.4.107</ip>
      </contributor>
      <comment>/* General Purpose Editors */</comment>
      <text xml:space="preserve" bytes="5455">'''Mapping tools''' are devoted to the various tasks of Quake level development.

==Level Editors==
These are CAD-like programs used to construct and populate a level.  They include tools to create and modify [[Brush|brushes]], apply [[Texture|textures]], place and modify [[Entity|entities]], and set up simple [[scripting]].  Some of these programs have their own proprietary file format for saving levels, but they can all save or export your level to a [[Quake_Map_Format|map file]], which is needed by compilers in order to generate a game-ready [[Quake_BSP_Format|bsp file]].

===General Purpose Editors===

{| class=&quot;sortable wikitable&quot;
! Name 
! Supported OS
! width=&quot;150px&quot; | Author
! width=&quot;50px&quot; | Initial release
! width=&quot;100px&quot; | Latest release
|- 
| [[BSP (level editor)]]
| Windows
| Yahn Bernier, Ben ???
| 1996
| 2007 (0.96d)
|-
| [[GTKRadiant]]
|-
| [[QERadiant]]
|-
| [[QE5]]
|-
| [[QuakeEd]]
| NeXTSTEP
| id Software
| 1996
| 1996 (???)
|-
| [[QuArK]]
| Windows
| Armin Rigo, QuArK team
| 1996
| 2013 (6.6.0 beta 6)
|-
| [[Quest]]
| DOS, Linux, Windows
| Chris Carollo, Trey Harrison and Alexander Malmberg
| 1996
| 2002 (2.4)
|-
| [[Qoole]]
| Windows
| Pablo Zurita
| ???
| ??? (99 0.98)
|-
| [[Quiver]]
| Mac OS9
| Scott Kevill
| 1997
| 1999 (1.2)
|-
| [[ToeTag]]
| Mac OSX
| Warren Marshall
| 2008
| 2008 (2.30)
|-
| [[Thred]]
| Windows
| Jim Lowell
| 1996
| 1996 (0.9b)
|-
| [[Tread3D]]
| Windows
| Joe Riedel
| 1999
| 2009 (3.0 Alpha 3)
|-
| [[TrenchBroom]]
| Linux, Mac OSX, Windows
| Kristian Duske
| 2012
| 2013 (1.0.5)
|-
| [[Worldcraft]]
| Windows
| Ben Morris / Valve Software
| 1996
| 1998 (1.6a)
|}

&lt;!--
* [http://www.bspquakeeditor.com/ BSP]
* [http://quark.sourceforge.net/ QuArK]
* [http://quest-ed.sourceforge.net/ Quest]
* [http://www.volved.com/qsr/download.shtml Qoole]
* [http://wantonhubris.com/toetag/ ToeTag]
* [http://www.joecodegood.net/tread/ Tread3D]
* [http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm WorldCraft]
--&gt;
{{todo|user=[[Hectate]]|todo=The list of editors would look and function better as a table that detailed things like OS, engine compatibility, etc.}}
{{todo|user=[[Than]]|todo=I moved the list to a table, but left the old links here (edit page to see as it's commented out), since I think we should create a small page for all the editors. It's possible to get information about all of them using internet archive etc.}}

===Terrain Generators===
These programs are specialized to generate terrain-like geometry out of brushes, but have no general-purpose editing capabilities.  They generate map files that can then be imported into the general purpose level editors.

* [http://www.surfacegroup.org/tutorials/easygen/ EasyGen]
* [http://tarot.telefragged.com/gensurf/ Gensurf]
* [http://entar.quakedev.com/wiki/index.php/TerrainGen TerrainGen]

==Map Converters==
A number of games based on [[id Software]]'s technology use map files as their level source format, but these files differ in format from game to game.  Map converters are used to convert map files from one format to another, so that mappers can use a level editor that does not natively support Quake.  Commonly supported game formats include Quake 2, Quake III Arena, and Half-Life.

* SleepwalkR's mapconv

===Model-to-Map Converters===
These are programs that can be used to convert geometry of another file type, especially files exported by modelling software, into map files.

{{todo}}

==Map Compiling Tools==
Tools to use for [[map compiling]], a process that turns a map file into a bsp file.

===QBSP, Light and Vis===
* Bengt Jardrup's [http://user.tninet.se/~xir870k/ enhanced versions of TxQBSP/TreeQBSP, RVis, Light]
* [http://voidspark.net/projects/bjptools_xt/ Jury-Rigged BJP Tools], modified version of Bengt Jardrup's tools with BSP2 support, details brushes and several other improvements.
* LordHavoc's [http://icculus.org/twilight/darkplaces/download.html Hmap2]
* Tyrann's [http://disenchant.net/utils TyrUtils] - Windows and Mac OS X binaries, plus Linux/Unix supported via source.

===Skip Removal===
Skip removal tools are standalone programs that can process a [[bsp file]] and remove all surfaces textured with a [[skip texture]], so that those surfaces are not rendered in-game.  This can be done by some QBSP tools or via a separate tool.

* Tyrann's [http://disenchant.net/utils TyrUtils] qbsp include skip surface removal (since version 0.6)
* metlslime's [http://www.celephais.net/board/view_thread.php?id=60088 newskip]

==Map Decompilers==
These are programs that can reverse-compile a bsp file back into a map file, with varying results.

* bsp2map - This program generates a map file by creating brushes for every surface in the level. Large walls are split up into multiple brushes according to bsp polys.
* winbspc - This program generates a map file by more closely trying to match texture/brush volumes. It has several options for decompiling a bsp file and usually produces far more usuable results than bsp2map.

==Other Tools==
Miscellaneous tools.

* bsp2prt can generate a [[prt file]] from a bsp file without needing to rebuild it from scratch using QBSP.
* bspinfo can generate statistics about a bsp file, an improved [[prt file]], extract entities, and remove all VIS and light data
* Scrama's MapConverter [ [[image:MapConverter.zip]] ] can perform scaling and convert map formats from Half-Life to Quake, Quake 2 and Quake 3

==See Also==
* [[Quake tools]]</text>
      <sha1>axm5wojepyjbwyg5j3304ytx580h8hh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Mapping tutorials</title>
    <ns>0</ns>
    <id>20</id>
    <revision>
      <id>26</id>
      <timestamp>2007-10-30T16:56:08Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: A good number of tutorials are based around the old favorite [[WorldCraft]]. Many parts of [[Quake]], Quake 2 and Half-Life tutorials are interchangeable. Because of this I've linked tutor...</comment>
      <text xml:space="preserve" bytes="2394">A good number of tutorials are based around the old favorite [[WorldCraft]].
Many parts of [[Quake]], Quake 2 and Half-Life tutorials are interchangeable. Because of this I've linked tutorials for all three engines.

===Basic and Intermediate Tutorials===

[http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm &quot;The Forge&quot;]
:The official site for worldcraft 1.6 It details many things involved in making your own maps for quake1 and/or quake2 using worldcraft. The site includes some sample maps to show how some of the (otherwise abstract) ideas like a switch door or &quot;path_corners&quot; work.

[http://www.visi.com/%7Ejlowell/thred/editing.html Quake Editing Tips]
:An older and somewhat short question and answer session with American McGee, Tim Willis, Jim Molinets and a few others. Some of this info is now well known to mappers but there may be a thing or two newer mappers don't know. The info is all very old though. The site is dated September 27, 1996

[http://www.gamedesign.net/?file=rust/content Rust - Level Design Tutorials]
:A collection of editing tips and tutorials for games based on a various engines. You may want to check the Quake 2, Halflife, and Generic tutorials. Some bits and pieces from other sections could be helpful as well.

[http://www.vibrants.dk/jchq/faq.htm JCH Headquarters Advanced Half-life editing FAQ]
:Aimed at halflife there are many things that are not useful to the Quake1 mapper. Some of the things are still very useful to the Quake1 mapper. Its easy to fallow &quot;FAQ&quot; setup will answer many of the questions mappers have.

[http://www.gamedesign.net/?file=rust/content/quake2/tutorials/poly_count Polygon Reduction Methods]
:by David Hyde, Mad Dog, and Richard Neff. This is aimed at Quake2 and it is very informative. The screenshots are taken using Quake2's gl_showtris command which Quake1 is lacking. This tutorial is in the Rust Tutorials but the concept is so important its being linked seperately here.

[http://www.planethalflife.com/davej/detail_versus_design.htm DETAIL VERSUS DESIGN]
:This is a short editorial by Dave J on when design the overal design of a map is more important then the fine details. He uses Halflife as referance... but there are some cases of detail overpowering design in Quake maps. Since details are often harder on the engine it is extra important to find the right balance for maps designed for Quake use.</text>
      <sha1>0e0nom2xorue8tbwcd60z4g56v2jypi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2990</id>
      <parentid>26</parentid>
      <timestamp>2013-06-16T17:39:22Z</timestamp>
      <contributor>
        <username>Deqer</username>
        <id>42</id>
      </contributor>
      <minor/>
      <comment>Added link for an extensive radiant tutorial page, which also talks about to Quoth.</comment>
      <text xml:space="preserve" bytes="2584">A good number of tutorials are based around the old favorite [[WorldCraft]].
Many parts of [[Quake]], Quake 2 and Half-Life tutorials are interchangeable. Because of this I've linked tutorials for all three engines.

===Basic and Intermediate Tutorials===

[http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm &quot;The Forge&quot;]
:The official site for worldcraft 1.6 It details many things involved in making your own maps for quake1 and/or quake2 using worldcraft. The site includes some sample maps to show how some of the (otherwise abstract) ideas like a switch door or &quot;path_corners&quot; work.

[http://www.visi.com/%7Ejlowell/thred/editing.html Quake Editing Tips]
:An older and somewhat short question and answer session with American McGee, Tim Willis, Jim Molinets and a few others. Some of this info is now well known to mappers but there may be a thing or two newer mappers don't know. The info is all very old though. The site is dated September 27, 1996

[http://www.gamedesign.net/?file=rust/content Rust - Level Design Tutorials]
:A collection of editing tips and tutorials for games based on a various engines. You may want to check the Quake 2, Halflife, and Generic tutorials. Some bits and pieces from other sections could be helpful as well.

[http://www.vibrants.dk/jchq/faq.htm JCH Headquarters Advanced Half-life editing FAQ]
:Aimed at halflife there are many things that are not useful to the Quake1 mapper. Some of the things are still very useful to the Quake1 mapper. Its easy to fallow &quot;FAQ&quot; setup will answer many of the questions mappers have.

[http://www.gamedesign.net/?file=rust/content/quake2/tutorials/poly_count Polygon Reduction Methods]
:by David Hyde, Mad Dog, and Richard Neff. This is aimed at Quake2 and it is very informative. The screenshots are taken using Quake2's gl_showtris command which Quake1 is lacking. This tutorial is in the Rust Tutorials but the concept is so important its being linked seperately here.

[http://www.planethalflife.com/davej/detail_versus_design.htm DETAIL VERSUS DESIGN]
:This is a short editorial by Dave J on when design the overal design of a map is more important then the fine details. He uses Halflife as referance... but there are some cases of detail overpowering design in Quake maps. Since details are often harder on the engine it is extra important to find the right balance for maps designed for Quake use.

[http://spawnhost.wordpress.com/tutorials/quake-1-radiant-tutorial/ Extensive Radiant Tutorial for Quake 1]
:An extensive radiant setup/usage tutorial.  Even talks about Quoth setup/usage.</text>
      <sha1>19v9vongl5n3jbz00u3wbupv0r4p494</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3236</id>
      <parentid>2990</parentid>
      <timestamp>2014-05-08T11:01:07Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>/* Basic and Intermediate Tutorials */ changed links to archive.org where possible because they were ALL dead</comment>
      <text xml:space="preserve" bytes="2832">A good number of tutorials are based around the old favorite [[WorldCraft]].
Many parts of [[Quake]], Quake 2 and Half-Life tutorials are interchangeable. Because of this I've linked tutorials for all three engines.

===Basic and Intermediate Tutorials===

[http://web.archive.org/web/20090506031258/http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm &quot;The Forge&quot;]
:The official site for worldcraft 1.6 It details many things involved in making your own maps for quake1 and/or quake2 using worldcraft. The site includes some sample maps to show how some of the (otherwise abstract) ideas like a switch door or &quot;path_corners&quot; work.

[http://www.visi.com/%7Ejlowell/thred/editing.html Quake Editing Tips]
:An older and somewhat short question and answer session with American McGee, Tim Willis, Jim Molinets and a few others. Some of this info is now well known to mappers but there may be a thing or two newer mappers don't know. The info is all very old though. The site is dated September 27, 1996

[http://web.archive.org/web/20070824235721/http://www.gamedesign.net/?file=rust/content Rust - Level Design Tutorials]
:A collection of editing tips and tutorials for games based on a various engines. You may want to check the Quake 2, Halflife, and Generic tutorials. Some bits and pieces from other sections could be helpful as well.

[http://web.archive.org/web/20030206034529/http://vibrants.dk/jchq/faq.htm JCH Headquarters Advanced Half-life editing FAQ]
:Aimed at halflife there are many things that are not useful to the Quake1 mapper. Some of the things are still very useful to the Quake1 mapper. Its easy to fallow &quot;FAQ&quot; setup will answer many of the questions mappers have.

[http://web.archive.org/web/20020112020304/http://www.gamedesign.net/?file=rust/content/quake2/tutorials/poly_count Polygon Reduction Methods]
:by David Hyde, Mad Dog, and Richard Neff. This is aimed at Quake2 and it is very informative. The screenshots are taken using Quake2's gl_showtris command which Quake1 is lacking. This tutorial is in the Rust Tutorials but the concept is so important its being linked seperately here.

[http://web.archive.org/web/20030219113111/http://www.planethalflife.com/davej/detail_versus_design.htm DETAIL VERSUS DESIGN]
:This is a short editorial by Dave J on when design the overal design of a map is more important then the fine details. He uses Halflife as referance... but there are some cases of detail overpowering design in Quake maps. Since details are often harder on the engine it is extra important to find the right balance for maps designed for Quake use.

[http://web.archive.org/web/20131028004037/http://spawnhost.wordpress.com/tutorials/quake-1-radiant-tutorial/ Extensive Radiant Tutorial for Quake 1]
:An extensive radiant setup/usage tutorial.  Even talks about Quoth setup/usage.</text>
      <sha1>kbuq5wwnivbth2rkv905i65sanqw6q8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3237</id>
      <parentid>3236</parentid>
      <timestamp>2014-05-08T11:05:27Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>scampies</comment>
      <text xml:space="preserve" bytes="2911">A good number of tutorials are based around the old favorite [[WorldCraft]].
Many parts of [[Quake]], Quake 2 and Half-Life tutorials are interchangeable. So here are some guides and tutorials for all three engines.

===Basic and Intermediate Tutorials===

[[Getting Started Mapping]]
:A basic [[Trenchbroom]] tutorial by [[Scampie]].

[http://web.archive.org/web/20090506031258/http://hosted.planetquake.gamespy.com/worldcraft/index2.shtm &quot;The Forge&quot;]
:The official site for worldcraft 1.6 It details many things involved in making your own maps for quake1 and/or quake2 using worldcraft. The site includes some sample maps to show how some of the (otherwise abstract) ideas like a switch door or &quot;path_corners&quot; work.

[http://www.visi.com/%7Ejlowell/thred/editing.html Quake Editing Tips]
:An older and somewhat short question and answer session with American McGee, Tim Willis, Jim Molinets and a few others. Some of this info is now well known to mappers but there may be a thing or two newer mappers don't know. The info is all very old though. The site is dated September 27, 1996

[http://web.archive.org/web/20070824235721/http://www.gamedesign.net/?file=rust/content Rust - Level Design Tutorials]
:A collection of editing tips and tutorials for games based on a various engines. You may want to check the Quake 2, Halflife, and Generic tutorials. Some bits and pieces from other sections could be helpful as well.

[http://web.archive.org/web/20030206034529/http://vibrants.dk/jchq/faq.htm JCH Headquarters Advanced Half-life editing FAQ]
:Aimed at halflife there are many things that are not useful to the Quake1 mapper. Some of the things are still very useful to the Quake1 mapper. Its easy to fallow &quot;FAQ&quot; setup will answer many of the questions mappers have.

[http://web.archive.org/web/20020112020304/http://www.gamedesign.net/?file=rust/content/quake2/tutorials/poly_count Polygon Reduction Methods]
:by David Hyde, Mad Dog, and Richard Neff. This is aimed at Quake2 and it is very informative. The screenshots are taken using Quake2's gl_showtris command which Quake1 is lacking. This tutorial is in the Rust Tutorials but the concept is so important its being linked seperately here.

[http://web.archive.org/web/20030219113111/http://www.planethalflife.com/davej/detail_versus_design.htm DETAIL VERSUS DESIGN]
:This is a short editorial by Dave J on when design the overal design of a map is more important then the fine details. He uses Halflife as referance... but there are some cases of detail overpowering design in Quake maps. Since details are often harder on the engine it is extra important to find the right balance for maps designed for Quake use.

[http://web.archive.org/web/20131028004037/http://spawnhost.wordpress.com/tutorials/quake-1-radiant-tutorial/ Extensive Radiant Tutorial for Quake 1]
:An extensive radiant setup/usage tutorial.  Even talks about Quoth setup/usage.</text>
      <sha1>rngtdyu6w2gwllhziusg5re79ooie4z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Common.css</title>
    <ns>8</ns>
    <id>73</id>
    <revision>
      <id>115</id>
      <timestamp>2007-10-30T21:51:04Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: /** CSS placed here will be applied to all skins */  /* Infobox template style */  .infobox {    border: 1px solid #aaa;    background-color: #f9f9f9;    color: black;    margin-bottom: 0....</comment>
      <text xml:space="preserve" bytes="600">/** CSS placed here will be applied to all skins */

/* Infobox template style */

.infobox {
   border: 1px solid #aaa;
   background-color: #f9f9f9;
   color: black;
   margin-bottom: 0.5em;
   margin-left: 1em;
   padding: 0.2em;
   float: right;
   clear: right;
}
.infobox td,
.infobox th {
   vertical-align: top;
}
.infobox caption {
   font-size: larger;
   margin-left: inherit;
}
.infobox.bordered {
   border-collapse: collapse;
}
.infobox.bordered td,
.infobox.bordered th {
   border: 1px solid #aaa;
}
.infobox.bordered .borderless td,
.infobox.bordered .borderless th {
   border: 0;
}</text>
      <sha1>lv41ufw3uj6x12xzq163w296yo9990v</sha1>
      <model>css</model>
      <format>text/css</format>
    </revision>
    <revision>
      <id>1221</id>
      <parentid>115</parentid>
      <timestamp>2009-09-25T05:38:14Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <comment>swiped from wikipedia</comment>
      <text xml:space="preserve" bytes="1079">/** CSS placed here will be applied to all skins */

/* Infobox template style */

.infobox {
   border: 1px solid #aaa;
   background-color: #f9f9f9;
   color: black;
   margin-bottom: 0.5em;
   margin-left: 1em;
   padding: 0.2em;
   float: right;
   clear: right;
}
.infobox td,
.infobox th {
   vertical-align: top;
}
.infobox caption {
   font-size: larger;
   margin-left: inherit;
}
.infobox.bordered {
   border-collapse: collapse;
}
.infobox.bordered td,
.infobox.bordered th {
   border: 1px solid #aaa;
}
.infobox.bordered .borderless td,
.infobox.bordered .borderless th {
   border: 0;
}

/* wikitable/prettytable class for skinning normal tables */
table.wikitable,
table.prettytable {
    margin: 1em 1em 1em 0;
    background: #f9f9f9;
    border: 1px #aaa solid;
    border-collapse: collapse;
}
.wikitable th, .wikitable td,
.prettytable th, .prettytable td {
    border: 1px #aaa solid;
    padding: 0.2em;
}
.wikitable th,
.prettytable th {
    background: #f2f2f2;
    text-align: center;
}
.wikitable caption,
.prettytable caption {
    font-weight: bold;
}</text>
      <sha1>q0a397n3ss7e7vwrxbwdaenp5fqawb3</sha1>
      <model>css</model>
      <format>text/css</format>
    </revision>
    <revision>
      <id>1686</id>
      <parentid>1221</parentid>
      <timestamp>2013-03-24T17:03:27Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <text xml:space="preserve" bytes="125">/** CSS placed here will be applied to all skins */

@import url(&quot;https://dl.dropbox.com/u/7216632/quakewiki/quakewiki.css&quot;);</text>
      <sha1>pmljrbv3oiklo4tfw1fgdvs530wwfza</sha1>
      <model>css</model>
      <format>text/css</format>
    </revision>
    <revision>
      <id>2097</id>
      <parentid>1686</parentid>
      <timestamp>2013-03-25T16:34:58Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>max width and bigger font for now</comment>
      <text xml:space="preserve" bytes="255">/** CSS placed here will be applied to all skins */

@import url(&quot;https://dl.dropbox.com/u/7216632/quakewiki/quakewiki.css&quot;);

body, div.monaco_shrinkwrap {
 margin-left: auto;
 margin-right: auto;
 width: 960px;
}

#div#bodyContent {
  font-size: 12px;
}</text>
      <sha1>4t0phxh4hx8qsdj7q5mh1b6tonwhz1d</sha1>
      <model>css</model>
      <format>text/css</format>
    </revision>
    <revision>
      <id>2098</id>
      <parentid>2097</parentid>
      <timestamp>2013-03-25T16:37:26Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>typo</comment>
      <text xml:space="preserve" bytes="265">/** CSS placed here will be applied to all skins */

@import url(&quot;https://dl.dropbox.com/u/7216632/quakewiki/quakewiki.css&quot;);

body, div.monaco_shrinkwrap {
 margin-left: auto;
 margin-right: auto;
 width: 960px;
}

div#bodyContent {
  font-size: 12px !important;
}</text>
      <sha1>ju7u21wwcpsl2h6193ufb3jk4ycyh3s</sha1>
      <model>css</model>
      <format>text/css</format>
    </revision>
    <revision>
      <id>2417</id>
      <parentid>2098</parentid>
      <timestamp>2013-03-28T15:11:15Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Collapsible tables</comment>
      <text xml:space="preserve" bytes="950">/** CSS placed here will be applied to all skins */

@import url(&quot;https://dl.dropbox.com/u/7216632/quakewiki/quakewiki.css&quot;);

body, div.monaco_shrinkwrap {
 margin-left: auto;
 margin-right: auto;
 width: 960px;
}

div#bodyContent {
  font-size: 12px !important;
}

/** Collapsible tables *********************************************************
 *
 *  Description: Allows tables to be collapsed, showing only the header. See
 *                         http://www.mediawiki.org/wiki/Manual:Collapsible_tables.
 *  Maintainers: [[en:User:R. Koot]]
 */
 
table.collapsed tr.collapsible {
        display: none;
}
 
.collapseButton {               /* 'show'/'hide' buttons created dynamically by the             */
        float: right;           /* CollapsibleTables JavaScript in [[MediaWiki:Common.js]] */
        font-weight: normal;    /* are styled here so they can be customised.             */
        text-align: right;
        width: auto;
}</text>
      <sha1>j2hcmsj1tyslm5eh0h9afmem3wk2fx8</sha1>
      <model>css</model>
      <format>text/css</format>
    </revision>
    <revision>
      <id>2974</id>
      <parentid>2417</parentid>
      <timestamp>2013-05-28T15:59:57Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>integrating starbuck's css, local image paths</comment>
      <text xml:space="preserve" bytes="9754">/** CSS placed here will be applied to all skins */

/* QuakeWiki Custom Style by Starbuck 
=========================================================================== */

/* Imports */
@import url('http://fonts.googleapis.com/css?family=Open+Sans:300,400,500,700');    

/* General Page Nonsense */
body { 
	margin: 10px;
	color: #333; 
	background: none;
	/* line-height: 150% !important; */
}
html { 
	background-image: url(/w/images/5/5b/Background-concrete.jpg); 
	background-repeat: no-repeat, repeat;
	background-position: top left;
}

#wikia_header { background :none !important; }

a { color: #456abd; }
a:visited { color: #8160a9 }

ul { list-style-image: none; list-style-type: circle; }
li.new a, a.new { color :#bb341a !important; }

input:focus {
    outline:none;
}

#wiki_logo { background-image: url(/w/images/8/89/Logo2.png) !important; margin: -50px 0 -10px -10px; }

hr { color: #ddd; background-color: #ddd; margin: 5px 0 20px 0;}
div.noarticletext, #catlinks { color: inherit; border: 1px solid #ddd; background: #f9f9f9;}

.dark_text_1 { color: #555; }
/* =========================================================================== */

/* Please Can We Use A Nice Font */
body, .page_bar, .page_tabs, .compact_page_tabs li, .sidebox #navigation ul { 
	font-family: 'Open Sans' !important;
}

.page article { font-size: 100%; }
/* More Type Fixes */
.hover-navigation .menu-item { font-weight: normal !important; }

/* Headings */
h1, h2, h3, h4, h5, h6 {
	border-bottom: 1px solid #ddd !important;
	padding-bottom: 0.35em !important;
	margin-bottom: 15px !important;
}


/* #editform .editOptions { clear: both; overflow: hidden; } */

/* =========================================================================== */

/* Backgrounds */
.color2 { background: inherit; }
.color1 { background: url(/w/images/7/77/Background-concrete2.jpg) top left repeat #5e5540; }

/* Awful Background Strip Thing The Logo Goes On */
#background_strip { background: none; border: none; display: none; }
#wikia_header { border: none; }

/* Page Layout Classes */
.page article { padding: 20px !important; }
.page { font: 13px 'Open Sans' sans-serif !important; }

/* header menu */
#headerMenuUser ul { background: #fff;}
#userData span, #userData span a { font-weight: normal; font-size: 13px; text-shadow: 0px 1px 1px #fff;}
#userData { right: 20px; clear: both; }
#userData a.wikia-button { margin-top: -5px; box-shadow: 0px 1px 1px #000; }

/* That Bar At The Top */
.page_bar { 
	margin: 0px 0px !important;
	font-size: 13px;
	-webkit-box-shadow: inset 0 -3px 4px rgba(0, 0, 0, 0.2);
	/*-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
	box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);} */
}

ul.page_tabs li, .page_bar { 
	-webkit-border-radius: 4px 4px 0 0;
	-moz-border-radius: 4px 4px 0 0;
	border-radius: 4px 4px 0 0;
}

#wikia_page, .sidebox { 
	-webkit-border-radius: 6px;
	-moz-border-radius: 6px;
	border-radius: 6px;
	border: none;
	margin-bottom: 20px;
}

div#userloginForm form, div#userlogin form#userlogin2, div.noarticletext, fieldset, #catlinks {
	-webkit-border-radius: 4px;
	-moz-border-radius: 4px;
	border-radius: 4px;
}


#wikia_page, .sidebox { box-shadow: 0px 2px 4px #5e5540; }

ul.page_tabs .selected a { color: #333; text-decoration: none; cursor: normal; } 

#page_controls a { color: #fff !important; text-shadow: 0px 2px 1px #000;}
#page_controls li { margin: 0px 15px 0px 5px !important; }
.page_bar .page_tabs li.selected { font-weight: normal; }
.page_bar .page_buttons li.selected { background: none; }
.page_bar .page_buttons a { margin-left: 4px; }

/* User Masthead / Accent */
.accent { background: none; }
#user_masthead h2 { font-weight: normal; border: none !important; margin-left: 10px; }
body.masthead-regular #page_controls a { color: red; text-shadow: none !important; color: #333 !important; }
#user_masthead_scorecard { padding: 8px; font-size: 48px; }
#user_masthead_tabs li.color1 { background: none;}

/* =========================================================================== */

/* Sidebox */
.sidebox { 
	padding: 0 !important; 
	margin-right: 20px;
}

#monaco_shrinkwrap_main.with_left_sidebar #page_wrapper { left: 218px; }
.sidebox #navigation li { padding: 3px; }
.sidebox #link_box li { padding: 6px 4px; }
.sidebox #link_box li a { color: #5e5540 !important; }
.sidebox #link_box.color2 { background: url(/w/images/b/b1/Background-concrete3.jpg) top left repeat #e1dbd1; }
.sidebox #link_box.color2  {
	-webkit-border-radius: 4px !important;
	-moz-border-radius: 4px !important;
	border-radius: 4px !important;
	border: none;
	font-weight: normal !important;
	font-size: 11px !important; 
}
.sidebox #link_box.color2 a {text-shadow: 0px 2px 2px #fff;}
.hover-navigation em { right: 8px; top: 3px; color: #999;}

#link_box_dynamic .link_box_dynamic_item {padding: 5px; font-weight: normal; }
#link_box_dynamic img#dynamic-links-add-image-img { margin-right: 4px; }

/* Footer */
.article_footer td { padding: 20px !important;}
.article_footer ul.actions li { min-width: 160px; margin-right: 10px; }

/* Forms and Buttons */
/* =========================================================================== */

/* Button */
a.wikia-button, span.wikia-button a, input[type=&quot;submit&quot;], input[type=&quot;reset&quot;], input[type=&quot;button&quot;], button {
	border: none !important;
	color: #ffffff !important;
	text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25) !important;
	background-color: #006dcc;
	background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
	background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
	background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
	background-image: -o-linear-gradient(top, #0088cc, #0044cc);
	background-image: linear-gradient(to bottom, #0088cc, #0044cc);
	background-repeat: repeat-x;
	border-color: #0044cc #0044cc #002a80;
	border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);
	filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
	/* btn */
	display: inline-block;
	padding: 4px 8px;
	margin: 5px;
	font-size: 12px !important;
	font-weight: normal !important;
	line-height: 18px;
	text-align: center;
	vertical-align: middle;
	cursor: pointer;
	-webkit-border-radius: 4px;
	-moz-border-radius: 4px;
	border-radius: 4px;
	height: auto !important;
	outline: none;
	-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
	-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
	box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
}

fieldset { border: 1px solid #ddd; }

input, input[type=&quot;text&quot;], input[type=&quot;password&quot;], input[type=&quot;datetime&quot;], input[type=&quot;datetime-local&quot;], input[type=&quot;date&quot;], input[type=&quot;month&quot;], input[type=&quot;time&quot;], input[type=&quot;week&quot;], input[type=&quot;number&quot;], input[type=&quot;email&quot;], input[type=&quot;url&quot;], input[type=&quot;tel&quot;], input[type=&quot;color&quot;], .uneditable-input {
	border: 1px solid #cccccc;
	-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
	-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
	box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
	-webkit-border-radius: 4px;
	-moz-border-radius: 4px;
	border-radius: 4px;
	height: 18px;
	padding: 4px 6px;
	margin-bottom: 10px;
	line-height: 18px;
	font-size: 14px !important;
	color: #555555;
}
input[type=&quot;radio&quot;], input[type=&quot;checkbox&quot;] {
margin: 3px 4px 0 0;
line-height: normal;
vertical-align: middle;
}

label { line-height: 18px !important; margin-right: 10px; }

/* Search */
#search_box.color1 { background: none; }
#search-button { top: 17px; right: 20px; border: none;}
#searchform { 
	background: #fff;
	-webkit-border-radius: 15px;
	-moz-border-radius: 15px;
	border-radius: 15px;
	border: 1px solid #cccccc;
	-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
	-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
	box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);

	height: 20px;
	padding: 3px 6px 5px 10px !important;
	margin: 6px;
	font-size: 16px !important;
	line-height: 20px;
	color: #555555;
}

#searchform input { border: none; 	-webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; color: #555; }
.suggestions-result-current { background-color: #bb341a}

textarea { 
	font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace !important;
	font-size: 12px;
	color: #48484c;
	background: #f5f5f5;
	border: 1px solid #e5e5e5;
	padding: 10px;
	margin-top: 10px;
	line-height: 20px !important;
	width: 98%;
	outline: none;
	border-radius: 4px;
	margin-bottom: 10px;
}

div#userloginForm form, div#userlogin form#userlogin2 {
	border: 1px solid #ddd;
}

/* End of Starbuck's CSS */


/* are these still needed? */
body, div.monaco_shrinkwrap {
 margin-left: auto;
 margin-right: auto;
 width: 960px;
}

div#bodyContent {
  font-size: 12px !important;
}
/* END OF are these still needed? */

/** Collapsible tables *********************************************************
 *
 *  Description: Allows tables to be collapsed, showing only the header. See
 *                         http://www.mediawiki.org/wiki/Manual:Collapsible_tables.
 *  Maintainers: [[en:User:R. Koot]]
 */
 
table.collapsed tr.collapsible {
        display: none;
}
 
.collapseButton {               /* 'show'/'hide' buttons created dynamically by the             */
        float: right;           /* CollapsibleTables JavaScript in [[MediaWiki:Common.js]] */
        font-weight: normal;    /* are styled here so they can be customised.             */
        text-align: right;
        width: auto;
}</text>
      <sha1>jnf2w01wiw0g4bmatccbaykh27incp1</sha1>
      <model>css</model>
      <format>text/css</format>
    </revision>
    <revision>
      <id>2975</id>
      <parentid>2974</parentid>
      <timestamp>2013-05-28T16:02:41Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="9820">/** CSS placed here will be applied to all skins */

/* QuakeWiki Custom Style by Starbuck 
=========================================================================== */

/* Imports */
@import url('http://fonts.googleapis.com/css?family=Open+Sans:300,400,500,700');    

/* General Page Nonsense */
body { 
	margin: 10px;
	color: #333; 
	background: none;
	/* line-height: 150% !important; */
}
html { 
	background-image: url(https://dl.dropbox.com/u/7216632/quakewiki/gradientNOPE.png), url(/w/images/5/5b/Background-concrete.jpg); 
	background-repeat: no-repeat, repeat;
	background-position: top left;
}

#wikia_header { background :none !important; }

a { color: #456abd; }
a:visited { color: #8160a9 }

ul { list-style-image: none; list-style-type: circle; }
li.new a, a.new { color :#bb341a !important; }

input:focus {
    outline:none;
}

#wiki_logo { background-image: url(/w/images/8/89/Logo2.png) !important; margin: -50px 0 -10px -10px; }

hr { color: #ddd; background-color: #ddd; margin: 5px 0 20px 0;}
div.noarticletext, #catlinks { color: inherit; border: 1px solid #ddd; background: #f9f9f9;}

.dark_text_1 { color: #555; }
/* =========================================================================== */

/* Please Can We Use A Nice Font */
body, .page_bar, .page_tabs, .compact_page_tabs li, .sidebox #navigation ul { 
	font-family: 'Open Sans' !important;
}

.page article { font-size: 100%; }
/* More Type Fixes */
.hover-navigation .menu-item { font-weight: normal !important; }

/* Headings */
h1, h2, h3, h4, h5, h6 {
	border-bottom: 1px solid #ddd !important;
	padding-bottom: 0.35em !important;
	margin-bottom: 15px !important;
}


/* #editform .editOptions { clear: both; overflow: hidden; } */

/* =========================================================================== */

/* Backgrounds */
.color2 { background: inherit; }
.color1 { background: url(/w/images/7/77/Background-concrete2.jpg) top left repeat #5e5540; }

/* Awful Background Strip Thing The Logo Goes On */
#background_strip { background: none; border: none; display: none; }
#wikia_header { border: none; }

/* Page Layout Classes */
.page article { padding: 20px !important; }
.page { font: 13px 'Open Sans' sans-serif !important; }

/* header menu */
#headerMenuUser ul { background: #fff;}
#userData span, #userData span a { font-weight: normal; font-size: 13px; text-shadow: 0px 1px 1px #fff;}
#userData { right: 20px; clear: both; }
#userData a.wikia-button { margin-top: -5px; box-shadow: 0px 1px 1px #000; }

/* That Bar At The Top */
.page_bar { 
	margin: 0px 0px !important;
	font-size: 13px;
	-webkit-box-shadow: inset 0 -3px 4px rgba(0, 0, 0, 0.2);
	/*-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
	box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);} */
}

ul.page_tabs li, .page_bar { 
	-webkit-border-radius: 4px 4px 0 0;
	-moz-border-radius: 4px 4px 0 0;
	border-radius: 4px 4px 0 0;
}

#wikia_page, .sidebox { 
	-webkit-border-radius: 6px;
	-moz-border-radius: 6px;
	border-radius: 6px;
	border: none;
	margin-bottom: 20px;
}

div#userloginForm form, div#userlogin form#userlogin2, div.noarticletext, fieldset, #catlinks {
	-webkit-border-radius: 4px;
	-moz-border-radius: 4px;
	border-radius: 4px;
}


#wikia_page, .sidebox { box-shadow: 0px 2px 4px #5e5540; }

ul.page_tabs .selected a { color: #333; text-decoration: none; cursor: normal; } 

#page_controls a { color: #fff !important; text-shadow: 0px 2px 1px #000;}
#page_controls li { margin: 0px 15px 0px 5px !important; }
.page_bar .page_tabs li.selected { font-weight: normal; }
.page_bar .page_buttons li.selected { background: none; }
.page_bar .page_buttons a { margin-left: 4px; }

/* User Masthead / Accent */
.accent { background: none; }
#user_masthead h2 { font-weight: normal; border: none !important; margin-left: 10px; }
body.masthead-regular #page_controls a { color: red; text-shadow: none !important; color: #333 !important; }
#user_masthead_scorecard { padding: 8px; font-size: 48px; }
#user_masthead_tabs li.color1 { background: none;}

/* =========================================================================== */

/* Sidebox */
.sidebox { 
	padding: 0 !important; 
	margin-right: 20px;
}

#monaco_shrinkwrap_main.with_left_sidebar #page_wrapper { left: 218px; }
.sidebox #navigation li { padding: 3px; }
.sidebox #link_box li { padding: 6px 4px; }
.sidebox #link_box li a { color: #5e5540 !important; }
.sidebox #link_box.color2 { background: url(/w/images/b/b1/Background-concrete3.jpg) top left repeat #e1dbd1; }
.sidebox #link_box.color2  {
	-webkit-border-radius: 4px !important;
	-moz-border-radius: 4px !important;
	border-radius: 4px !important;
	border: none;
	font-weight: normal !important;
	font-size: 11px !important; 
}
.sidebox #link_box.color2 a {text-shadow: 0px 2px 2px #fff;}
.hover-navigation em { right: 8px; top: 3px; color: #999;}

#link_box_dynamic .link_box_dynamic_item {padding: 5px; font-weight: normal; }
#link_box_dynamic img#dynamic-links-add-image-img { margin-right: 4px; }

/* Footer */
.article_footer td { padding: 20px !important;}
.article_footer ul.actions li { min-width: 160px; margin-right: 10px; }

/* Forms and Buttons */
/* =========================================================================== */

/* Button */
a.wikia-button, span.wikia-button a, input[type=&quot;submit&quot;], input[type=&quot;reset&quot;], input[type=&quot;button&quot;], button {
	border: none !important;
	color: #ffffff !important;
	text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25) !important;
	background-color: #006dcc;
	background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
	background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
	background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
	background-image: -o-linear-gradient(top, #0088cc, #0044cc);
	background-image: linear-gradient(to bottom, #0088cc, #0044cc);
	background-repeat: repeat-x;
	border-color: #0044cc #0044cc #002a80;
	border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);
	filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
	/* btn */
	display: inline-block;
	padding: 4px 8px;
	margin: 5px;
	font-size: 12px !important;
	font-weight: normal !important;
	line-height: 18px;
	text-align: center;
	vertical-align: middle;
	cursor: pointer;
	-webkit-border-radius: 4px;
	-moz-border-radius: 4px;
	border-radius: 4px;
	height: auto !important;
	outline: none;
	-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
	-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
	box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
}

fieldset { border: 1px solid #ddd; }

input, input[type=&quot;text&quot;], input[type=&quot;password&quot;], input[type=&quot;datetime&quot;], input[type=&quot;datetime-local&quot;], input[type=&quot;date&quot;], input[type=&quot;month&quot;], input[type=&quot;time&quot;], input[type=&quot;week&quot;], input[type=&quot;number&quot;], input[type=&quot;email&quot;], input[type=&quot;url&quot;], input[type=&quot;tel&quot;], input[type=&quot;color&quot;], .uneditable-input {
	border: 1px solid #cccccc;
	-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
	-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
	box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
	-webkit-border-radius: 4px;
	-moz-border-radius: 4px;
	border-radius: 4px;
	height: 18px;
	padding: 4px 6px;
	margin-bottom: 10px;
	line-height: 18px;
	font-size: 14px !important;
	color: #555555;
}
input[type=&quot;radio&quot;], input[type=&quot;checkbox&quot;] {
margin: 3px 4px 0 0;
line-height: normal;
vertical-align: middle;
}

label { line-height: 18px !important; margin-right: 10px; }

/* Search */
#search_box.color1 { background: none; }
#search-button { top: 17px; right: 20px; border: none;}
#searchform { 
	background: #fff;
	-webkit-border-radius: 15px;
	-moz-border-radius: 15px;
	border-radius: 15px;
	border: 1px solid #cccccc;
	-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
	-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
	box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);

	height: 20px;
	padding: 3px 6px 5px 10px !important;
	margin: 6px;
	font-size: 16px !important;
	line-height: 20px;
	color: #555555;
}

#searchform input { border: none; 	-webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; color: #555; }
.suggestions-result-current { background-color: #bb341a}

textarea { 
	font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace !important;
	font-size: 12px;
	color: #48484c;
	background: #f5f5f5;
	border: 1px solid #e5e5e5;
	padding: 10px;
	margin-top: 10px;
	line-height: 20px !important;
	width: 98%;
	outline: none;
	border-radius: 4px;
	margin-bottom: 10px;
}

div#userloginForm form, div#userlogin form#userlogin2 {
	border: 1px solid #ddd;
}

/* End of Starbuck's CSS */


/* are these still needed? */
body, div.monaco_shrinkwrap {
 margin-left: auto;
 margin-right: auto;
 width: 960px;
}

div#bodyContent {
  font-size: 12px !important;
}
/* END OF are these still needed? */

/** Collapsible tables *********************************************************
 *
 *  Description: Allows tables to be collapsed, showing only the header. See
 *                         http://www.mediawiki.org/wiki/Manual:Collapsible_tables.
 *  Maintainers: [[en:User:R. Koot]]
 */
 
table.collapsed tr.collapsible {
        display: none;
}
 
.collapseButton {               /* 'show'/'hide' buttons created dynamically by the             */
        float: right;           /* CollapsibleTables JavaScript in [[MediaWiki:Common.js]] */
        font-weight: normal;    /* are styled here so they can be customised.             */
        text-align: right;
        width: auto;
}</text>
      <sha1>d191eo5k31kr0k4nvbjd9k06jpr3rdk</sha1>
      <model>css</model>
      <format>text/css</format>
    </revision>
    <revision>
      <id>2976</id>
      <parentid>2975</parentid>
      <timestamp>2013-05-28T16:03:23Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>removed the 404 gradientNOPE.png</comment>
      <text xml:space="preserve" bytes="9743">/** CSS placed here will be applied to all skins */

/* QuakeWiki Custom Style by Starbuck 
=========================================================================== */

/* Imports */
@import url('http://fonts.googleapis.com/css?family=Open+Sans:300,400,500,700');    

/* General Page Nonsense */
body { 
	margin: 10px;
	color: #333; 
	background: none;
	/* line-height: 150% !important; */
}
html { 
	background-image: url(/w/images/5/5b/Background-concrete.jpg); 
	background-repeat: repeat;
	background-position: top left;
}

#wikia_header { background :none !important; }

a { color: #456abd; }
a:visited { color: #8160a9 }

ul { list-style-image: none; list-style-type: circle; }
li.new a, a.new { color :#bb341a !important; }

input:focus {
    outline:none;
}

#wiki_logo { background-image: url(/w/images/8/89/Logo2.png) !important; margin: -50px 0 -10px -10px; }

hr { color: #ddd; background-color: #ddd; margin: 5px 0 20px 0;}
div.noarticletext, #catlinks { color: inherit; border: 1px solid #ddd; background: #f9f9f9;}

.dark_text_1 { color: #555; }
/* =========================================================================== */

/* Please Can We Use A Nice Font */
body, .page_bar, .page_tabs, .compact_page_tabs li, .sidebox #navigation ul { 
	font-family: 'Open Sans' !important;
}

.page article { font-size: 100%; }
/* More Type Fixes */
.hover-navigation .menu-item { font-weight: normal !important; }

/* Headings */
h1, h2, h3, h4, h5, h6 {
	border-bottom: 1px solid #ddd !important;
	padding-bottom: 0.35em !important;
	margin-bottom: 15px !important;
}


/* #editform .editOptions { clear: both; overflow: hidden; } */

/* =========================================================================== */

/* Backgrounds */
.color2 { background: inherit; }
.color1 { background: url(/w/images/7/77/Background-concrete2.jpg) top left repeat #5e5540; }

/* Awful Background Strip Thing The Logo Goes On */
#background_strip { background: none; border: none; display: none; }
#wikia_header { border: none; }

/* Page Layout Classes */
.page article { padding: 20px !important; }
.page { font: 13px 'Open Sans' sans-serif !important; }

/* header menu */
#headerMenuUser ul { background: #fff;}
#userData span, #userData span a { font-weight: normal; font-size: 13px; text-shadow: 0px 1px 1px #fff;}
#userData { right: 20px; clear: both; }
#userData a.wikia-button { margin-top: -5px; box-shadow: 0px 1px 1px #000; }

/* That Bar At The Top */
.page_bar { 
	margin: 0px 0px !important;
	font-size: 13px;
	-webkit-box-shadow: inset 0 -3px 4px rgba(0, 0, 0, 0.2);
	/*-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
	box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);} */
}

ul.page_tabs li, .page_bar { 
	-webkit-border-radius: 4px 4px 0 0;
	-moz-border-radius: 4px 4px 0 0;
	border-radius: 4px 4px 0 0;
}

#wikia_page, .sidebox { 
	-webkit-border-radius: 6px;
	-moz-border-radius: 6px;
	border-radius: 6px;
	border: none;
	margin-bottom: 20px;
}

div#userloginForm form, div#userlogin form#userlogin2, div.noarticletext, fieldset, #catlinks {
	-webkit-border-radius: 4px;
	-moz-border-radius: 4px;
	border-radius: 4px;
}


#wikia_page, .sidebox { box-shadow: 0px 2px 4px #5e5540; }

ul.page_tabs .selected a { color: #333; text-decoration: none; cursor: normal; } 

#page_controls a { color: #fff !important; text-shadow: 0px 2px 1px #000;}
#page_controls li { margin: 0px 15px 0px 5px !important; }
.page_bar .page_tabs li.selected { font-weight: normal; }
.page_bar .page_buttons li.selected { background: none; }
.page_bar .page_buttons a { margin-left: 4px; }

/* User Masthead / Accent */
.accent { background: none; }
#user_masthead h2 { font-weight: normal; border: none !important; margin-left: 10px; }
body.masthead-regular #page_controls a { color: red; text-shadow: none !important; color: #333 !important; }
#user_masthead_scorecard { padding: 8px; font-size: 48px; }
#user_masthead_tabs li.color1 { background: none;}

/* =========================================================================== */

/* Sidebox */
.sidebox { 
	padding: 0 !important; 
	margin-right: 20px;
}

#monaco_shrinkwrap_main.with_left_sidebar #page_wrapper { left: 218px; }
.sidebox #navigation li { padding: 3px; }
.sidebox #link_box li { padding: 6px 4px; }
.sidebox #link_box li a { color: #5e5540 !important; }
.sidebox #link_box.color2 { background: url(/w/images/b/b1/Background-concrete3.jpg) top left repeat #e1dbd1; }
.sidebox #link_box.color2  {
	-webkit-border-radius: 4px !important;
	-moz-border-radius: 4px !important;
	border-radius: 4px !important;
	border: none;
	font-weight: normal !important;
	font-size: 11px !important; 
}
.sidebox #link_box.color2 a {text-shadow: 0px 2px 2px #fff;}
.hover-navigation em { right: 8px; top: 3px; color: #999;}

#link_box_dynamic .link_box_dynamic_item {padding: 5px; font-weight: normal; }
#link_box_dynamic img#dynamic-links-add-image-img { margin-right: 4px; }

/* Footer */
.article_footer td { padding: 20px !important;}
.article_footer ul.actions li { min-width: 160px; margin-right: 10px; }

/* Forms and Buttons */
/* =========================================================================== */

/* Button */
a.wikia-button, span.wikia-button a, input[type=&quot;submit&quot;], input[type=&quot;reset&quot;], input[type=&quot;button&quot;], button {
	border: none !important;
	color: #ffffff !important;
	text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25) !important;
	background-color: #006dcc;
	background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
	background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
	background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
	background-image: -o-linear-gradient(top, #0088cc, #0044cc);
	background-image: linear-gradient(to bottom, #0088cc, #0044cc);
	background-repeat: repeat-x;
	border-color: #0044cc #0044cc #002a80;
	border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);
	filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
	/* btn */
	display: inline-block;
	padding: 4px 8px;
	margin: 5px;
	font-size: 12px !important;
	font-weight: normal !important;
	line-height: 18px;
	text-align: center;
	vertical-align: middle;
	cursor: pointer;
	-webkit-border-radius: 4px;
	-moz-border-radius: 4px;
	border-radius: 4px;
	height: auto !important;
	outline: none;
	-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
	-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
	box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
}

fieldset { border: 1px solid #ddd; }

input, input[type=&quot;text&quot;], input[type=&quot;password&quot;], input[type=&quot;datetime&quot;], input[type=&quot;datetime-local&quot;], input[type=&quot;date&quot;], input[type=&quot;month&quot;], input[type=&quot;time&quot;], input[type=&quot;week&quot;], input[type=&quot;number&quot;], input[type=&quot;email&quot;], input[type=&quot;url&quot;], input[type=&quot;tel&quot;], input[type=&quot;color&quot;], .uneditable-input {
	border: 1px solid #cccccc;
	-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
	-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
	box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
	-webkit-border-radius: 4px;
	-moz-border-radius: 4px;
	border-radius: 4px;
	height: 18px;
	padding: 4px 6px;
	margin-bottom: 10px;
	line-height: 18px;
	font-size: 14px !important;
	color: #555555;
}
input[type=&quot;radio&quot;], input[type=&quot;checkbox&quot;] {
margin: 3px 4px 0 0;
line-height: normal;
vertical-align: middle;
}

label { line-height: 18px !important; margin-right: 10px; }

/* Search */
#search_box.color1 { background: none; }
#search-button { top: 17px; right: 20px; border: none;}
#searchform { 
	background: #fff;
	-webkit-border-radius: 15px;
	-moz-border-radius: 15px;
	border-radius: 15px;
	border: 1px solid #cccccc;
	-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
	-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
	box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);

	height: 20px;
	padding: 3px 6px 5px 10px !important;
	margin: 6px;
	font-size: 16px !important;
	line-height: 20px;
	color: #555555;
}

#searchform input { border: none; 	-webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; color: #555; }
.suggestions-result-current { background-color: #bb341a}

textarea { 
	font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace !important;
	font-size: 12px;
	color: #48484c;
	background: #f5f5f5;
	border: 1px solid #e5e5e5;
	padding: 10px;
	margin-top: 10px;
	line-height: 20px !important;
	width: 98%;
	outline: none;
	border-radius: 4px;
	margin-bottom: 10px;
}

div#userloginForm form, div#userlogin form#userlogin2 {
	border: 1px solid #ddd;
}

/* End of Starbuck's CSS */


/* are these still needed? */
body, div.monaco_shrinkwrap {
 margin-left: auto;
 margin-right: auto;
 width: 960px;
}

div#bodyContent {
  font-size: 12px !important;
}
/* END OF are these still needed? */

/** Collapsible tables *********************************************************
 *
 *  Description: Allows tables to be collapsed, showing only the header. See
 *                         http://www.mediawiki.org/wiki/Manual:Collapsible_tables.
 *  Maintainers: [[en:User:R. Koot]]
 */
 
table.collapsed tr.collapsible {
        display: none;
}
 
.collapseButton {               /* 'show'/'hide' buttons created dynamically by the             */
        float: right;           /* CollapsibleTables JavaScript in [[MediaWiki:Common.js]] */
        font-weight: normal;    /* are styled here so they can be customised.             */
        text-align: right;
        width: auto;
}</text>
      <sha1>6z9g3ztp8zsa654qanqnw2pdlcif138</sha1>
      <model>css</model>
      <format>text/css</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Common.js</title>
    <ns>8</ns>
    <id>826</id>
    <revision>
      <id>2416</id>
      <timestamp>2013-03-28T15:10:52Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>collapsible tables</comment>
      <text xml:space="preserve" bytes="4504">/* Any JavaScript here will be loaded for all users on every page load. */
/** Collapsible tables *********************************************************
 *
 *  Description: Allows tables to be collapsed, showing only the header. See
 *                         http://www.mediawiki.org/wiki/Manual:Collapsible_tables.
 *  Maintainers: [[en:User:R. Koot]]
 */
 
var autoCollapse = 2;
var collapseCaption = 'hide';
var expandCaption = 'show';
 
function collapseTable( tableIndex ) {
        var Button = document.getElementById( 'collapseButton' + tableIndex );
        var Table = document.getElementById( 'collapsibleTable' + tableIndex );
 
        if ( !Table || !Button ) {
                return false;
        }
 
        var Rows = Table.rows;
 
        if ( Button.firstChild.data == collapseCaption ) {
                for ( var i = 1; i &lt; Rows.length; i++ ) {
                        Rows[i].style.display = 'none';
                }
                Button.firstChild.data = expandCaption;
        } else {
                for ( var i = 1; i &lt; Rows.length; i++ ) {
                        Rows[i].style.display = Rows[0].style.display;
                }
                Button.firstChild.data = collapseCaption;
        }
}
 
function createCollapseButtons() {
        var tableIndex = 0;
        var NavigationBoxes = new Object();
        var Tables = document.getElementsByTagName( 'table' );
 
        for ( var i = 0; i &lt; Tables.length; i++ ) {
                if ( hasClass( Tables[i], 'collapsible' ) ) {
 
                        /* only add button and increment count if there is a header row to work with */
                        var HeaderRow = Tables[i].getElementsByTagName( 'tr' )[0];
                        if ( !HeaderRow ) {
                                continue;
                        }
                        var Header = HeaderRow.getElementsByTagName( 'th' )[0];
                        if ( !Header ) {
                                continue;
                        }
 
                        NavigationBoxes[tableIndex] = Tables[i];
                        Tables[i].setAttribute( 'id', 'collapsibleTable' + tableIndex );
 
                        var Button = document.createElement( 'span' );
                        var ButtonLink = document.createElement( 'a' );
                        var ButtonText = document.createTextNode( collapseCaption );
 
                        Button.className = 'collapseButton'; // Styles are declared in [[MediaWiki:Common.css]]
 
                        ButtonLink.style.color = Header.style.color;
                        ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );
                        ButtonLink.setAttribute( 'href', &quot;javascript:collapseTable(&quot; + tableIndex + &quot;);&quot; );
                        ButtonLink.appendChild( ButtonText );
 
                        Button.appendChild( document.createTextNode( '[' ) );
                        Button.appendChild( ButtonLink );
                        Button.appendChild( document.createTextNode( ']' ) );
 
                        Header.insertBefore( Button, Header.childNodes[0] );
                        tableIndex++;
                }
        }
 
        for ( var i = 0;  i &lt; tableIndex; i++ ) {
                if ( hasClass( NavigationBoxes[i], 'collapsed' ) || ( tableIndex &gt;= autoCollapse &amp;&amp; hasClass( NavigationBoxes[i], 'autocollapse' ) ) ) {
                        collapseTable( i );
                } else if ( hasClass( NavigationBoxes[i], 'innercollapse' ) ) {
                        var element = NavigationBoxes[i];
                        while ( element = element.parentNode ) {
                                if ( hasClass( element, 'outercollapse' ) ) {
                                        collapseTable( i );
                                        break;
                                }
                        }
                }
        }
}
 
addOnloadHook( createCollapseButtons );
 
/** Test if an element has a certain class **************************************
 *
 * Description: Uses regular expressions and caching for better performance.
 * Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]]
 */
 
var hasClass = ( function() {
        var reCache = {};
        return function( element, className ) {
                return ( reCache[className] ? reCache[className] : ( reCache[className] = new RegExp( &quot;(?:\\s|^)&quot; + className + &quot;(?:\\s|$)&quot; ) ) ).test( element.className );
        };
})();</text>
      <sha1>qhl7d9ya05wsddeu67sh11aas97d9fe</sha1>
      <model>javascript</model>
      <format>text/javascript</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Monaco-sidebar</title>
    <ns>8</ns>
    <id>731</id>
    <revision>
      <id>2078</id>
      <timestamp>2013-03-25T15:07:51Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>let's see what happens with a huge list</comment>
      <text xml:space="preserve" bytes="1378">
* mainpage|mainpage-description
* Playing Quake
** Getting Started
** Engines
** Singleplayer guide
** Multiplayer guide
** Gameplay tips
** Installing addons
** Customizing Quake
** Speedrunning
* Quake Technical
** Console variables
** Console commands
** Command line parameters
** Config files
** Quake error guide
** Quake bugs
** Quake tools
* Mapping
** Getting started mapping
** Mapping tools
** Map compiling
** Entity guide
** Mapping errors
** Mapping tutorials
** Mapping links
* Making Assets
** Modelling
** Making textures
** Making graphics
** Making sounds
** Quake file formats
** Quake palette

* Modding
** Getting Started Modding
** Modding tools
** QuakeC basics
** Compiling QuakeC
** QuakeC Globals
** QuakeC Fields
** Builtin Functions
** Modding Tutorials
** Modding Links
** QSB|Quake Standards Base
* Engine Development
** Engine getting started
** Getting Started Developing
** Network Protocols
** Extensions
** Enhanced engine features
** Engine Standards
** Engine Limits
** Engine tutorials

* Demos and Movies
** Demo Recording
** Demo tools
** Machinima
** Movie list
* Miscellaneous
** Glossary
** Quake Development
** History of Quake
** Legal status
** Online Resources
** Archives
* Quake Wiki
** Acknowledgments
** Special:Statistics|Statistics
** Site help
* portal-url|community
** portal-url|portal
** currentevents-url|currentevents</text>
      <sha1>461qnrsrdd8pn40bzx6n9uxnicfopzh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2208</id>
      <parentid>2078</parentid>
      <timestamp>2013-03-26T10:04:29Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <text xml:space="preserve" bytes="1378">
* mainpage|mainpage-description
* Playing Quake
** Getting Started
** Engines
** Singleplayer guide
** Multiplayer guide
** Gameplay tips
** Installing addons
** Customizing Quake
** Speedrunning
* Quake Technical
** Console variables
** Console commands
** Command line parameters
** Config files
** Quake error guide
** Quake bugs
** Quake tools
* Mapping
** Getting Started Mapping
** Mapping tools
** Map compiling
** Entity guide
** Mapping errors
** Mapping tutorials
** Mapping links
* Making Assets
** Modelling
** Making textures
** Making graphics
** Making sounds
** Quake file formats
** Quake palette

* Modding
** Getting Started Modding
** Modding tools
** QuakeC basics
** Compiling QuakeC
** QuakeC Globals
** QuakeC Fields
** Builtin Functions
** Modding Tutorials
** Modding Links
** QSB|Quake Standards Base
* Engine Development
** Engine getting started
** Getting Started Developing
** Network Protocols
** Extensions
** Enhanced engine features
** Engine Standards
** Engine Limits
** Engine tutorials

* Demos and Movies
** Demo Recording
** Demo tools
** Machinima
** Movie list
* Miscellaneous
** Glossary
** Quake Development
** History of Quake
** Legal status
** Online Resources
** Archives
* Quake Wiki
** Acknowledgments
** Special:Statistics|Statistics
** Site help
* portal-url|community
** portal-url|portal
** currentevents-url|currentevents</text>
      <sha1>akyehnq8rmz5xespkedv9hbn1fxdjyz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>MediaWiki:Uploadtext</title>
    <ns>8</ns>
    <id>953</id>
    <revision>
      <id>2702</id>
      <timestamp>2013-03-30T15:28:04Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Created page with &quot;Use the form below to upload files. To view or search previously uploaded files go to the [[Special:FileList|list of uploaded files]], (re)uploads are also logged in the [[Spe...&quot;</comment>
      <text xml:space="preserve" bytes="1479">Use the form below to upload files.
To view or search previously uploaded files go to the [[Special:FileList|list of uploaded files]], (re)uploads are also logged in the [[Special:Log/upload|upload log]], deletions in the [[Special:Log/delete|deletion log]].

To include a file in a page, use a link in one of the following forms:
* '''&lt;code&gt;&lt;nowiki&gt;[[&lt;/nowiki&gt;{{ns:file}}&lt;nowiki&gt;:File.jpg]]&lt;/nowiki&gt;&lt;/code&gt;''' to use the full version of the file
* '''&lt;code&gt;&lt;nowiki&gt;[[&lt;/nowiki&gt;{{ns:file}}&lt;nowiki&gt;:File.png|200px|thumb|left|alt text]]&lt;/nowiki&gt;&lt;/code&gt;''' to use a 200 pixel wide rendition in a box in the left margin with 'alt text' as description
* '''&lt;code&gt;&lt;nowiki&gt;[[&lt;/nowiki&gt;{{ns:media}}&lt;nowiki&gt;:File.ogg]]&lt;/nowiki&gt;&lt;/code&gt;''' for directly linking to the file without displaying the file


PNG is preferred to JPEG as it is lossless and allows later editing without quality losses. Please use a transparent background if applicable, do not use a background to match the Wiki's background color as that might change.

If your images include text, please try to add it without sub-pixel hinting.

Screenshots from Quake are usually very dark. Please adjust the gamma in-game before taking them. Adjusting it later does not look as nice. Do not adjust brightness and contrast later, that looks really bad.

Please choose meaningful and unique filenames. If you can imagine someone else reading your filename and deducing the exact image contents from it, then it is a good filename.</text>
      <sha1>bza158n29mcd9o9dft4uovj587nrtx8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Mega-Health</title>
    <ns>0</ns>
    <id>407</id>
    <revision>
      <id>693</id>
      <timestamp>2008-05-07T19:54:58Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page:  == Description ==  A megahealth gives you 100 extra points of health. You have a maximum of 250 health points, so you can actually pick up a couple of these things. After a short grace pe...</comment>
      <text xml:space="preserve" bytes="313">
== Description ==

A megahealth gives you 100 extra points of health. You have a maximum of 250 health points, so you can actually pick up a couple of these things. After a short grace period, any extra health you have wears off at a rate of about 1 point per second until it reaches the standard maximum of 100.</text>
      <sha1>mne1zgcuv83a5zmj77c034tw2c7wu8o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>695</id>
      <parentid>693</parentid>
      <timestamp>2008-05-07T19:55:38Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="293">A megahealth gives you 100 extra points of health. You have a maximum of 250 health points, so you can actually pick up a couple of these things. After a short grace period, any extra health you have wears off at a rate of about 1 point per second until it reaches the standard maximum of 100.</text>
      <sha1>ht9iabi0n5tenr1ax80m0ppi5d8p2aa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>886</id>
      <parentid>695</parentid>
      <timestamp>2008-06-18T21:52:39Z</timestamp>
      <contributor>
        <ip>65.66.150.198</ip>
      </contributor>
      <text xml:space="preserve" bytes="310">A megahealth gives you 100 extra points of health. You have a maximum of 250 health points, so you can actually pick up a couple of these things. After a short grace period, any extra health you have wears off at a rate of about 1 point per second until it reaches the standard maximum of 100.

{{Quake items}}</text>
      <sha1>lvzyueb9mllvotglczkotmoynugp8vf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>MenuQC basics</title>
    <ns>0</ns>
    <id>51</id>
    <revision>
      <id>64</id>
      <timestamp>2007-10-30T18:25:17Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: ===Note=== Even if MenuQC has been around for a while, it is still being worked on, and is a subject to change until further notice, so don't take the following description as final.  The ...</comment>
      <text xml:space="preserve" bytes="585">===Note===
Even if MenuQC has been around for a while, it is still being worked on, and is a subject to change until further notice, so don't take the following description as final.

The only system global used by MenuQC

entity self

MenuQC doesn't use any other system globals, and no system fields, but the following two globals are required by the compiler

*[[void]] [[end_sys_globals]]
*[[void]] [[end_sys_fields]]

System functions

These functions are called by the engine

* [[m_init]]
* [[m_keydown]]
* [[m_draw]]
* [[m_display]]
* [[m_toggle]]
* [[m_hide]]
* [[m_shutdown]]</text>
      <sha1>154btexnu5tqbmkllr3tebuyzsgr1qa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>MenuQC builtin function list</title>
    <ns>0</ns>
    <id>458</id>
    <revision>
      <id>838</id>
      <timestamp>2008-05-16T10:20:53Z</timestamp>
      <contributor>
        <username>DrLabman</username>
        <id>11</id>
      </contributor>
      <comment>New page: 	 ==Note==  ===Even if MenuQC has been around for a while, it is still being worked on, and is a subject to change until further notice, so don't take the following description as final.==...</comment>
      <text xml:space="preserve" bytes="3828">	
==Note==

===Even if MenuQC has been around for a while, it is still being worked on, and is a subject to change until further notice, so don't take the following description as final.===

Just as the serverside [[QuakeC]], [[MenuQC]] uses builtin functions to call bits of C code that can do 'jobs' for the MenuQC that otherwise can't be done.

'''Note:''' The letters &quot;MQC&quot; added at the end of each function name are to distinguish them from the serverside counterpart. Those letters are not part of the actual builtin name. Some might not need this distinguishing, or perhaps any MenuQC specifics could be added as a side-note in the serverside builtin function description.

At the time of writing, the only engines to support [[MenuQC]] are [[DarkPlaces]] and [[FTE]].
 #  	 Function 
 1  	 ?checkextensionMQC 
 2  	 ?errorMQC 
 3  	 ?objerrorMQC 
 4  	 ?printMQC 
 5  	 ?bprintMQC 
 6  	 ?sprintMQC 
 7  	 ?centerprintMQC 
 8  	 ?normalizeMQC 
 9  	 ?vlenMQC 
 10  	 ?vectoyawMQC 
 11  	 ?vectoanglesMQC 
 12  	 ?randomMQC 
 13  	 ?cmdMQC 
 14  	 ?cvarMQC 
 15  	 ?str_cvarMQC 
 16  	 ?cvar_setMQC 
 17  	 ?dprintMQC 
 18  	 ?ftosMQC 
 19  	 ?fabsMQC 
 20  	 ?vtosMQC 
 21  	 ?etosMQC 
 22  	 ?stofMQC 
 23  	 ?spawnMQC 
 24  	 ?removeMQC 
 25  	 ?findstringMQC 
 26  	 ?findfloatMQC 
 27  	 ?findentityMQC 
 28  	 ?findchainstringMQC 
 29  	 ?findchainfloatMQC 
 30  	 ?findchainentityMQC 
 31  	 ?precache_fileMQC 
 32  	 ?precache_soundMQC 
 33  	 ?crashMQC 
 34  	 ?coredumpMQC 
 35  	 ?stackdumpMQC 
 36  	 ?traceonMQC 
 37  	 ?traceoffMQC 
 38  	 ?eprintMQC 
 39  	 ?rintMQC 
 40  	 ?floorMQC 
 41  	 ?ceilMQC 
 42  	 ?nextentMQC 
 43  	 ?sinMQC 
 44  	 ?cosMQC 
 45  	 ?sqrtMQC 
 46  	 ?randomvecMQC 
 47  	 ?registercvarMQC 
 48  	 ?minMQC 
 49  	 ?maxMQC 
 50  	 ?boundMQC 
 51  	 ?powMQC 
 52  	 ?copyentityMQC 
 53  	 ?fopenMQC 
 54  	 ?fcloseMQC 
 55  	 ?fgetsMQC 
 56  	 ?fputsMQC 
 57  	 ?strlenMQC 
 58  	 ?strcatMQC 
 59  	 ?substringMQC 
 60  	 ?stovMQC 
 61  	 ?strzoneMQC 
 62  	 ?strunzoneMQC 
 63  	 ?tokenizeMQC 
 64  	 ?argvMQC 
 65  	 ?isserverMQC 
 66  	 ?clientcountMQC 
 67  	 ?clientstateMQC 
 68  	 ?clientcommandMQC 
 69  	 ?changelevelMQC 
 70  	 ?localsoundMQC 
 71  	 ?getmouseposMQC 
 72  	 ?gettimeMQC 
 73  	 ?loadfromdataMQC 
 74  	 ?loadfromfileMQC 
 75  	 ?modMQC 
 76  	 ?search_beginMQC 
 77  	 ?search_endMQC 
 78  	 ?search_getsizeMQC 
 79  	 ?search_getfilenameMQC 
 80  	 ?chrMQC 
 81  	 ?etofMQC 
 82  	 ?ftoeMQC 
 83  	 ?validstringMQC 
 84  	 ?altstr_countMQC 
 85  	 ?altstr_prepareMQC 
 86  	 ?altstr_getMQC 
 87  	 ?altstr_setMQC 
 88  	 ?altstr_insMQC 
 89  	 ?WriteByteMQC 
 90  	 ?WriteCharMQC 
 91  	 ?WriteShortMQC 
 92  	 ?WriteLongMQC 
 93  	 ?WriteAngleMQC 
 94  	 ?WriteCoordMQC 
 95  	 ?WriteStringMQC 
 96  	 ?WriteEntityMQC 
 97  	 ?iscachedpicMQC 
 98  	 ?precache_picMQC 
 99  	 ?freepicMQC 
 100  	 ?drawcharacterMQC 
 101  	 ?drawstringMQC 
 102  	 ?drawpicMQC 
 103  	 ?drawfillMQC 
 104  	 ?drawsetclipareaMQC 
 105  	 ?drawresetclipareaMQC 
 106  	 ?drawgetimagesizeMQC 
 107  	 ?cin_openMQC 
 108  	 ?cin_closeMQC 
 109  	 ?cin_setstateMQC 
 110  	 ?cin_getstateMQC 
 111  	 ?setkeydestMQC 
 112  	 ?getkeydestMQC 
 113  	 ?setmousetargetMQC 
 114  	 ?getmousetargetMQC 
 115  	 ?isfunctionMQC 
 116  	 ?callfunctionMQC 
 117  	 ?writetofileMQC 
 118  	 ?getresolutionMQC 
 119  	 ?keynumtostringMQC 
 120  	 ?findkeysforcommandMQC 
 121  	 ?gethostcachevalueMQC 
 122  	 ?gethostcachestringMQC 
 123  	 ?parseentitydataMQC 
 124  	 ?stringtokeynumMQC 
 125  	 ?resethostcachemasksMQC 
 126  	 ?sethostcachemaskstringMQC 
 127  	 ?sethostcachemasknumberMQC 
 128  	 ?resorthostcacheMQC 
 129  	 ?sethostcachesortMQC 
 130  	 ?refreshhostcacheMQC 
 131  	 ?gethostcachenumberMQC 
 132  	 ?gethostcacheindexforkeyMQC 
 133  	 ?addwantedhostcachekeyMQC</text>
      <sha1>hx3new18om9qlaz0rkr8i5f0dn8f7hy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1855</id>
      <parentid>838</parentid>
      <timestamp>2013-03-25T00:33:57Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="3853">	
==Note==

===Even if MenuQC has been around for a while, it is still being worked on, and is a subject to change until further notice, so don't take the following description as final.===

Just as the serverside [[QuakeC]], [[MenuQC]] uses builtin functions to call bits of C code that can do 'jobs' for the MenuQC that otherwise can't be done.

'''Note:''' The letters &quot;MQC&quot; added at the end of each function name are to distinguish them from the serverside counterpart. Those letters are not part of the actual builtin name. Some might not need this distinguishing, or perhaps any MenuQC specifics could be added as a side-note in the serverside builtin function description.

At the time of writing, the only engines to support [[MenuQC]] are [[DarkPlaces]] and [[FTE]].
 #  	 Function 
 1  	 ?checkextensionMQC 
 2  	 ?errorMQC 
 3  	 ?objerrorMQC 
 4  	 ?printMQC 
 5  	 ?bprintMQC 
 6  	 ?sprintMQC 
 7  	 ?centerprintMQC 
 8  	 ?normalizeMQC 
 9  	 ?vlenMQC 
 10  	 ?vectoyawMQC 
 11  	 ?vectoanglesMQC 
 12  	 ?randomMQC 
 13  	 ?cmdMQC 
 14  	 ?cvarMQC 
 15  	 ?str_cvarMQC 
 16  	 ?cvar_setMQC 
 17  	 ?dprintMQC 
 18  	 ?ftosMQC 
 19  	 ?fabsMQC 
 20  	 ?vtosMQC 
 21  	 ?etosMQC 
 22  	 ?stofMQC 
 23  	 ?spawnMQC 
 24  	 ?removeMQC 
 25  	 ?findstringMQC 
 26  	 ?findfloatMQC 
 27  	 ?findentityMQC 
 28  	 ?findchainstringMQC 
 29  	 ?findchainfloatMQC 
 30  	 ?findchainentityMQC 
 31  	 ?precache_fileMQC 
 32  	 ?precache_soundMQC 
 33  	 ?crashMQC 
 34  	 ?coredumpMQC 
 35  	 ?stackdumpMQC 
 36  	 ?traceonMQC 
 37  	 ?traceoffMQC 
 38  	 ?eprintMQC 
 39  	 ?rintMQC 
 40  	 ?floorMQC 
 41  	 ?ceilMQC 
 42  	 ?nextentMQC 
 43  	 ?sinMQC 
 44  	 ?cosMQC 
 45  	 ?sqrtMQC 
 46  	 ?randomvecMQC 
 47  	 ?registercvarMQC 
 48  	 ?minMQC 
 49  	 ?maxMQC 
 50  	 ?boundMQC 
 51  	 ?powMQC 
 52  	 ?copyentityMQC 
 53  	 ?fopenMQC 
 54  	 ?fcloseMQC 
 55  	 ?fgetsMQC 
 56  	 ?fputsMQC 
 57  	 ?strlenMQC 
 58  	 ?strcatMQC 
 59  	 ?substringMQC 
 60  	 ?stovMQC 
 61  	 ?strzoneMQC 
 62  	 ?strunzoneMQC 
 63  	 ?tokenizeMQC 
 64  	 ?argvMQC 
 65  	 ?isserverMQC 
 66  	 ?clientcountMQC 
 67  	 ?clientstateMQC 
 68  	 ?clientcommandMQC 
 69  	 ?changelevelMQC 
 70  	 ?localsoundMQC 
 71  	 ?getmouseposMQC 
 72  	 ?gettimeMQC 
 73  	 ?loadfromdataMQC 
 74  	 ?loadfromfileMQC 
 75  	 ?modMQC 
 76  	 ?search_beginMQC 
 77  	 ?search_endMQC 
 78  	 ?search_getsizeMQC 
 79  	 ?search_getfilenameMQC 
 80  	 ?chrMQC 
 81  	 ?etofMQC 
 82  	 ?ftoeMQC 
 83  	 ?validstringMQC 
 84  	 ?altstr_countMQC 
 85  	 ?altstr_prepareMQC 
 86  	 ?altstr_getMQC 
 87  	 ?altstr_setMQC 
 88  	 ?altstr_insMQC 
 89  	 ?WriteByteMQC 
 90  	 ?WriteCharMQC 
 91  	 ?WriteShortMQC 
 92  	 ?WriteLongMQC 
 93  	 ?WriteAngleMQC 
 94  	 ?WriteCoordMQC 
 95  	 ?WriteStringMQC 
 96  	 ?WriteEntityMQC 
 97  	 ?iscachedpicMQC 
 98  	 ?precache_picMQC 
 99  	 ?freepicMQC 
 100  	 ?drawcharacterMQC 
 101  	 ?drawstringMQC 
 102  	 ?drawpicMQC 
 103  	 ?drawfillMQC 
 104  	 ?drawsetclipareaMQC 
 105  	 ?drawresetclipareaMQC 
 106  	 ?drawgetimagesizeMQC 
 107  	 ?cin_openMQC 
 108  	 ?cin_closeMQC 
 109  	 ?cin_setstateMQC 
 110  	 ?cin_getstateMQC 
 111  	 ?setkeydestMQC 
 112  	 ?getkeydestMQC 
 113  	 ?setmousetargetMQC 
 114  	 ?getmousetargetMQC 
 115  	 ?isfunctionMQC 
 116  	 ?callfunctionMQC 
 117  	 ?writetofileMQC 
 118  	 ?getresolutionMQC 
 119  	 ?keynumtostringMQC 
 120  	 ?findkeysforcommandMQC 
 121  	 ?gethostcachevalueMQC 
 122  	 ?gethostcachestringMQC 
 123  	 ?parseentitydataMQC 
 124  	 ?stringtokeynumMQC 
 125  	 ?resethostcachemasksMQC 
 126  	 ?sethostcachemaskstringMQC 
 127  	 ?sethostcachemasknumberMQC 
 128  	 ?resorthostcacheMQC 
 129  	 ?sethostcachesortMQC 
 130  	 ?refreshhostcacheMQC 
 131  	 ?gethostcachenumberMQC 
 132  	 ?gethostcacheindexforkeyMQC 
 133  	 ?addwantedhostcachekeyMQC

[[Category:DarkPlaces]]</text>
      <sha1>mof0jzytuokozjp6qj3609pb0gohp1q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>MenuQC system constants</title>
    <ns>0</ns>
    <id>459</id>
    <revision>
      <id>839</id>
      <timestamp>2008-05-16T10:22:15Z</timestamp>
      <contributor>
        <username>DrLabman</username>
        <id>11</id>
      </contributor>
      <comment>New page: 	 == Note ==  === Even if MenuQC has been around for a while, it is still being worked on, and is a subject to change until further notice, so don't take the following description as final...</comment>
      <text xml:space="preserve" bytes="5528">	
== Note ==

=== Even if MenuQC has been around for a while, it is still being worked on, and is a subject to change until further notice, so don't take the following description as final. ===

=== Key constants ===

These are the key numbers that should be passed to Key_Event

    * float K_TAB = 9
    * float K_ENTER = 13
    * float K_ESCAPE = 27
    * float K_SPACE = 32

Normal keys should be passed as lowercased ascii

    * float K_BACKSPACE = 127
    * float K_UPARROW = 128
    * float K_DOWNARROW = 129
    * float K_LEFTARROW = 130
    * float K_RIGHTARROW = 131
    * float K_ALT = 132
    * float K_CTRL = 133
    * float K_SHIFT = 134
    * float K_F1 = 135
    * float K_F2 = 136
    * float K_F3 = 137
    * float K_F4 = 138
    * float K_F5 = 139
    * float K_F6 = 140
    * float K_F7 = 141
    * float K_F8 = 142
    * float K_F9 = 143
    * float K_F10 = 144
    * float K_F11 = 145
    * float K_F12 = 146
    * float K_INS = 147
    * float K_DEL = 148
    * float K_PGDN = 149
    * float K_PGUP = 150
    * float K_HOME = 151
    * float K_END = 152
    * float K_KP_HOME = 160
    * float K_KP_UPARROW = 161
    * float K_KP_PGUP = 162
    * float K_KP_LEFTARROW = 163
    * float K_KP_5 = 164
    * float K_KP_RIGHTARROW = 165
    * float K_KP_END = 166
    * float K_KP_DOWNARROW = 167
    * float K_KP_PGDN = 168
    * float K_KP_ENTER = 169
    * float K_KP_INS = 170
    * float K_KP_DEL = 171
    * float K_KP_SLASH = 172
    * float K_KP_MINUS = 173
    * float K_KP_PLUS = 174
    * float K_PAUSE= 255

Joystick buttons

    * float K_JOY1 = 768
    * float K_JOY2 = 769
    * float K_JOY3 = 770
    * float K_JOY4 = 771

Aux keys are for multi-buttoned joysticks to generate so they can use the normal binding process

    * float K_AUX1 = 772
    * float K_AUX2 = 773
    * float K_AUX3 = 774
    * float K_AUX4 = 775
    * float K_AUX5 = 776
    * float K_AUX6 = 777
    * float K_AUX7 = 778
    * float K_AUX8 = 779
    * float K_AUX9 = 780
    * float K_AUX10 = 781
    * float K_AUX11 = 782
    * float K_AUX12 = 783
    * float K_AUX13 = 784
    * float K_AUX14 = 785
    * float K_AUX15 = 786
    * float K_AUX16 = 787
    * float K_AUX17 = 788
    * float K_AUX18 = 789
    * float K_AUX19 = 790
    * float K_AUX20 = 791
    * float K_AUX21 = 792
    * float K_AUX22 = 793
    * float K_AUX23 = 794
    * float K_AUX24 = 795
    * float K_AUX25 = 796
    * float K_AUX26 = 797
    * float K_AUX27 = 798
    * float K_AUX28 = 799
    * float K_AUX29 = 800
    * float K_AUX30 = 801
    * float K_AUX31 = 802
    * float K_AUX32 = 803

Mouse buttons generate virtual keys

    * float K_MOUSE1 = 512
    * float K_MOUSE2 = 513
    * float K_MOUSE3 = 514
    * float K_MOUSE4 = 515
    * float K_MOUSE5 = 516
    * float K_MOUSE6 = 517
    * float K_MOUSE7 = 518
    * float K_MOUSE8 = 519
    * float K_MOUSE9 = 520
    * float K_MOUSE10 = 521
    * float K_MWHEELDOWN = K_MOUSE4
    * float K_MWHEELUP = K_MOUSE5

Key dest constants

    * float KEY_GAME = 0
    * float KEY_MENU = 2
    * float KEY_UNKNOWN = 3

File constants

    * float FILE_READ = 0
    * float FILE_APPEND = 1
    * float FILE_WRITE = 2

Logical constants (just for completeness)

    * float TRUE = 1
    * float FALSE = 0

Boolean constants

    * float true = 1
    * float false = 0

MSG constants

    * float MSG_BROADCAST = 0 // unreliable to all
    * float MSG_ONE = 1 // reliable to one (msg_entity)
    * float MSG_ALL = 2 // reliable to all
    * float MSG_INIT = 3 // write to the init string

Mouse target constants

    * float MT_MENU = 1
    * float MT_CLIENT = 2

Client state constants

    * float CS_DEDICATED = 0
    * float CS_DISCONNECTED = 1
    * float CS_CONNECTED = 2

Blend flags

    * float DRAWFLAG_NORMAL = 0
    * float DRAWFLAG_ADDITIVE = 1
    * float DRAWFLAG_MODULATE = 2
    * float DRAWFLAG_2XMODULATE = 3

Cvar constants

    * float CVAR_SAVE = 1
    * float CVAR_NOTIFY = 2
    * float CVAR_READONLY = 4

Server list constants

    * float SLIST_HOSTCACHEVIEWCOUNT = 0
    * float SLIST_HOSTCACHETOTALCOUNT = 1
    * float SLIST_MASTERQUERYCOUNT = 2
    * float SLIST_MASTERREPLYCOUNT = 3
    * float SLIST_SERVERQUERYCOUNT = 4
    * float SLIST_SERVERREPLYCOUNT = 5
    * float SLIST_SORTFIELD = 6
    * float SLIST_SORTDESCENDING = 7
    * float SLIST_LEGACY_LINE1 = 1024
    * float SLIST_LEGACY_LINE2 = 1025
    * float SLIST_TEST_CONTAINS = 0
    * float SLIST_TEST_NOTCONTAIN = 1
    * float SLIST_TEST_LESSEQUAL = 2
    * float SLIST_TEST_LESS = 3
    * float SLIST_TEST_EQUAL = 4
    * float SLIST_TEST_GREATER = 5
    * float SLIST_TEST_GREATEREQUAL = 6
    * float SLIST_TEST_NOTEQUAL = 7
    * float SLIST_MASK_AND = 0
    * float SLIST_MASK_OR = 512
    * float NET_CURRENTPROTOCOL = 3

Cinematic action constants

    * float CINE_PLAY = 1
    * float CINE_LOOP = 2
    * float CINE_PAUSE = 3
    * float CINE_FIRSTFRAME = 4
    * float CINE_RESETONWAKEUP =5

Null entity (actually it is the same like the world entity)

entity null_entity

Error constants

file handling

    * float ERR_CANNOTOPEN = -1 // fopen
    * float ERR_NOTENOUGHFILEHANDLES = -2 // fopen
    * float ERR_INVALIDMODE = -3 // fopen
    * float ERR_BADFILENAME = -4 // fopen

drawing functions

    * float ERR_NULLSTRING = -1
    * float ERR_BADDRAWFLAG = -2
    * float ERR_BADSCALE = -3
    * float ERR_BADSIZE = ERR_BADSCALE
    * float ERR_NOTCACHED = -4

not supported at the moment

os constants

    * float OS_WINDOWS = 0
    * float OS_LINUX = 1
    * float OS_MAC = 2</text>
      <sha1>icoff77f6mrkbx637vk4r8avr0dkfm1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Mod list</title>
    <ns>0</ns>
    <id>71</id>
    <redirect title="List of mods" />
    <revision>
      <id>112</id>
      <timestamp>2007-10-30T21:45:52Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>[[Mod list]] moved to [[List of mods]]</comment>
      <text xml:space="preserve" bytes="26">#REDIRECT [[List of mods]]</text>
      <sha1>7kv5c3gggj4c84ms7venset2d3d9kka</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Modding</title>
    <ns>0</ns>
    <id>474</id>
    <revision>
      <id>938</id>
      <timestamp>2008-11-12T11:47:55Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>New page: This page is about coding, the act of writing [[QuakeC]], which is compiled into the [[progs.dat]], or [[qwprogs.dat]].  ===Links===  * [[List of builtin functions]]</comment>
      <text xml:space="preserve" bytes="165">This page is about coding, the act of writing [[QuakeC]], which is compiled into the [[progs.dat]], or [[qwprogs.dat]].

===Links===

* [[List of builtin functions]]</text>
      <sha1>e118gwqwayhxbhv753r8bn2sxr7d7zo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>950</id>
      <parentid>938</parentid>
      <timestamp>2008-11-14T07:52:26Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <minor/>
      <comment>[[Coding QuakeC]] moved to [[Modding]]</comment>
      <text xml:space="preserve" bytes="165">This page is about coding, the act of writing [[QuakeC]], which is compiled into the [[progs.dat]], or [[qwprogs.dat]].

===Links===

* [[List of builtin functions]]</text>
      <sha1>e118gwqwayhxbhv753r8bn2sxr7d7zo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>952</id>
      <parentid>950</parentid>
      <timestamp>2008-11-14T07:52:40Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="166">This page is about modding, the act of writing [[QuakeC]], which is compiled into the [[progs.dat]], or [[qwprogs.dat]].

===Links===

* [[List of builtin functions]]</text>
      <sha1>e61d2sz6wjub0dnb4lmd8kwu0y754kz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Modding Links</title>
    <ns>0</ns>
    <id>1041</id>
    <revision>
      <id>2984</id>
      <timestamp>2013-06-13T08:09:09Z</timestamp>
      <contributor>
        <ip>137.147.79.36</ip>
      </contributor>
      <comment>started list 3 sites and brief descriptions</comment>
      <text xml:space="preserve" bytes="314">[http://www.inside3d.com Inside3D] - forum for quakec modders, large collection of tutorials

[http://www.quakeone.com QuakeOne] - another modding forum, quite active, has graphics and engine modding focus

[http://www.celephais.net/board/ func_msgboard] - mapping focus, many tools released here, run by metlslime</text>
      <sha1>4pj5s0mcbjghj9cev5u3yvndc0pa6gy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2997</id>
      <parentid>2984</parentid>
      <timestamp>2013-07-04T07:20:38Z</timestamp>
      <contributor>
        <ip>58.165.16.87</ip>
      </contributor>
      <comment>added qw-dev, alphabetized.</comment>
      <text xml:space="preserve" bytes="487">TODO: add all the sites I don't know about and link a bunch of cvs repos for mods/engine dev

[http://www.celephais.net/board/ func_msgboard] - mapping focus, many tools released here, run by metlslime

[http://www.inside3d.com Inside3D] - forum for quakec modders, large collection of tutorials

[http://www.quakeone.com QuakeOne] - another modding forum, quite active, has graphics and engine modding focus

[http://www.qw-dev.net QW-DEV] - hosts multiple quake and quakeworld projects</text>
      <sha1>7zgrv8bdanha1lfsz5z6ff3j4kvlet2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Modding Tutorials</title>
    <ns>0</ns>
    <id>1048</id>
    <revision>
      <id>3010</id>
      <timestamp>2013-09-22T07:16:35Z</timestamp>
      <contributor>
        <ip>124.176.241.241</ip>
      </contributor>
      <comment>put in some links to orphaned, incomplete, but relevant articles. they should probably be integrated then deleted.</comment>
      <text xml:space="preserve" bytes="37">[[QuakeC tips]]

[[QuakeC tutorials]]</text>
      <sha1>fnfg0nnd93qhd044a9y5tnel0twglal</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Modding tools</title>
    <ns>0</ns>
    <id>24</id>
    <revision>
      <id>30</id>
      <timestamp>2007-10-30T17:02:25Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: ===QuakeC Source=== * [[Downloads]] - Download the v1.06 QuakeC code here and get started on your mod today!  ===QuakeC Compilers=== * [[FTEQCC]] - more C like compiler :) * [[FrikQCC]] - ...</comment>
      <text xml:space="preserve" bytes="670">===QuakeC Source===
* [[Downloads]] - Download the v1.06 QuakeC code here and get started on your mod today!

===QuakeC Compilers===
* [[FTEQCC]] - more C like compiler :)
* [[FrikQCC]] - okay compiler
* [[QCCX]] - [[evile]]
* [[meQCC]] - very nice builtin precompiler
* [[ProQCC]] - old, don't use
* [[fastqcc]] - old, don't use
* [[QCC]] - id's original, don't use

===QuakeC Editors===
* Notepad
* TexPad
* [[CODER4]]
* Microsoft Visual Studio
* UltraEdit 32
* SciTE - general programmers editor
* [[QCide]] - User friendly QuakeC IDE based on SciTE
* Eclipse
* [[Project Editor 2006]] - IDE for project oriented QuakeC modifications

===See Also===
* [[Quake tools]]</text>
      <sha1>4wz3n7zk0fl12mus6w953hxvrw24h81</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>816</id>
      <parentid>30</parentid>
      <timestamp>2008-05-14T20:52:56Z</timestamp>
      <contributor>
        <ip>74.76.3.9</ip>
      </contributor>
      <comment>/* QuakeC Editors */</comment>
      <text xml:space="preserve" bytes="708">===QuakeC Source===
* [[Downloads]] - Download the v1.06 QuakeC code here and get started on your mod today!

===QuakeC Compilers===
* [[FTEQCC]] - more C like compiler :)
* [[FrikQCC]] - okay compiler
* [[QCCX]] - [[evile]]
* [[meQCC]] - very nice builtin precompiler
* [[ProQCC]] - old, don't use
* [[fastqcc]] - old, don't use
* [[QCC]] - id's original, don't use

===QuakeC Editors===
====Free====
* Notepad
* TexPad
* [[CODER4]]
* SciTE - general programmers editor
* [[QCide]] - User friendly QuakeC IDE based on SciTE
* Eclipse
* [[Project Editor 2006]] - IDE for project oriented QuakeC modifications
====Commerical====
* Microsoft Visual Studio
* UltraEdit/UEStudio

===See Also===
* [[Quake tools]]</text>
      <sha1>b8yshiz46p5sn96w8lua8a7ehzk4gdx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>817</id>
      <parentid>816</parentid>
      <timestamp>2008-05-14T20:55:35Z</timestamp>
      <contributor>
        <ip>74.76.3.9</ip>
      </contributor>
      <comment>/* QuakeC Compilers */</comment>
      <text xml:space="preserve" bytes="719">===QuakeC Source===
* [[Downloads]] - Download the v1.06 QuakeC code here and get started on your mod today!

===QuakeC Compilers===
* [[FTEQCC]]  - more C like compiler :)
* [[FrikQCC]] - okay compiler
* [[QCCX]]    - [[evile]]
* [[meQCC]]   - very nice builtin precompiler
* [[ProQCC]]  - old, don't use
* [[fastqcc]] - old, don't use
* [[QCC]]     - id's original, don't use

===QuakeC Editors===
====Free====
* Notepad
* TexPad
* [[CODER4]]
* SciTE - general programmers editor
* [[QCide]] - User friendly QuakeC IDE based on SciTE
* Eclipse
* [[Project Editor 2006]] - IDE for project oriented QuakeC modifications
====Commerical====
* Microsoft Visual Studio
* UltraEdit/UEStudio

===See Also===
* [[Quake tools]]</text>
      <sha1>bii249pfo4hl034jhon2dhzo140fxow</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>821</id>
      <parentid>817</parentid>
      <timestamp>2008-05-14T23:25:35Z</timestamp>
      <contributor>
        <ip>74.76.3.9</ip>
      </contributor>
      <comment>/* QuakeC Source */</comment>
      <text xml:space="preserve" bytes="769">===QuakeC Source===
* [ftp://ftp.idsoftware.com/idstuff/unsup/progs106.zip Downloads] - Download the v1.06 QuakeC code here and get started on your mod today!

===QuakeC Compilers===
* [[FTEQCC]]  - more C like compiler :)
* [[FrikQCC]] - okay compiler
* [[QCCX]]    - [[evile]]
* [[meQCC]]   - very nice builtin precompiler
* [[ProQCC]]  - old, don't use
* [[fastqcc]] - old, don't use
* [[QCC]]     - id's original, don't use

===QuakeC Editors===
====Free====
* Notepad
* TexPad
* [[CODER4]]
* SciTE - general programmers editor
* [[QCide]] - User friendly QuakeC IDE based on SciTE
* Eclipse
* [[Project Editor 2006]] - IDE for project oriented QuakeC modifications
====Commerical====
* Microsoft Visual Studio
* UltraEdit/UEStudio

===See Also===
* [[Quake tools]]</text>
      <sha1>tc5ig53371yc8lje55tws1qe5udi8hl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>822</id>
      <parentid>821</parentid>
      <timestamp>2008-05-14T23:30:45Z</timestamp>
      <contributor>
        <ip>74.76.3.9</ip>
      </contributor>
      <comment>/* QuakeC Source */</comment>
      <text xml:space="preserve" bytes="770">===QuakeC Source===
* [ftp://ftp.idsoftware.com/idstuff/unsup/progs106.zip Downloads] - Download id's v1.06 QuakeC code here and get started on your mod today!

===QuakeC Compilers===
* [[FTEQCC]]  - more C like compiler :)
* [[FrikQCC]] - okay compiler
* [[QCCX]]    - [[evile]]
* [[meQCC]]   - very nice builtin precompiler
* [[ProQCC]]  - old, don't use
* [[fastqcc]] - old, don't use
* [[QCC]]     - id's original, don't use

===QuakeC Editors===
====Free====
* Notepad
* TexPad
* [[CODER4]]
* SciTE - general programmers editor
* [[QCide]] - User friendly QuakeC IDE based on SciTE
* Eclipse
* [[Project Editor 2006]] - IDE for project oriented QuakeC modifications
====Commerical====
* Microsoft Visual Studio
* UltraEdit/UEStudio

===See Also===
* [[Quake tools]]</text>
      <sha1>qwj07qgnadj1ivm12ssao99wueu9h5c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1263</id>
      <parentid>822</parentid>
      <timestamp>2009-09-25T09:56:32Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="838">===QuakeC Source===
* [ftp://ftp.idsoftware.com/idstuff/unsup/progs106.zip progs106.zip] ([http://quakery.quakedev.com/qfiles/progs106.zip local mirror]) - Download id's v1.06 QuakeC code here and get started on your mod today!

===QuakeC Compilers===
* [[FTEQCC]]  - more C like compiler :)
* [[FrikQCC]] - okay compiler
* [[QCCX]]    - [[evile]]
* [[meQCC]]   - very nice builtin precompiler
* [[ProQCC]]  - old, don't use
* [[fastqcc]] - old, don't use
* [[QCC]]     - id's original, don't use

===QuakeC Editors===
====Free====
* Notepad
* TexPad
* [[CODER4]]
* SciTE - general programmers editor
* [[QCide]] - User friendly QuakeC IDE based on SciTE
* Eclipse
* [[Project Editor 2006]] - IDE for project oriented QuakeC modifications
====Commerical====
* Microsoft Visual Studio
* UltraEdit/UEStudio

===See Also===
* [[Quake tools]]</text>
      <sha1>i6b8pk9l7g257rvg54d5kbly0r7mevt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2367</id>
      <parentid>1263</parentid>
      <timestamp>2013-03-28T01:27:17Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>/* Free */</comment>
      <text xml:space="preserve" bytes="858">===QuakeC Source===
* [ftp://ftp.idsoftware.com/idstuff/unsup/progs106.zip progs106.zip] ([http://quakery.quakedev.com/qfiles/progs106.zip local mirror]) - Download id's v1.06 QuakeC code here and get started on your mod today!

===QuakeC Compilers===
* [[FTEQCC]]  - more C like compiler :)
* [[FrikQCC]] - okay compiler
* [[QCCX]]    - [[evile]]
* [[meQCC]]   - very nice builtin precompiler
* [[ProQCC]]  - old, don't use
* [[fastqcc]] - old, don't use
* [[QCC]]     - id's original, don't use

===QuakeC Editors===
====Free====
* Notepad
* TexPad
* [[CODER4]]
* SciTE - general programmers editor
* [[QCide]] - User friendly QuakeC IDE based on SciTE
* Eclipse
* [[Project Editor 2006]] - IDE for project oriented QuakeC modifications
* [[Code::Blocks]]

====Commerical====
* Microsoft Visual Studio
* UltraEdit/UEStudio

===See Also===
* [[Quake tools]]</text>
      <sha1>gvps0rpl9edc92qd3kngi9108a4x6da</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2981</id>
      <parentid>2367</parentid>
      <timestamp>2013-06-10T08:39:07Z</timestamp>
      <contributor>
        <ip>101.160.5.169</ip>
      </contributor>
      <comment>/* QuakeC Compilers */</comment>
      <text xml:space="preserve" bytes="921">===QuakeC Source===
* [ftp://ftp.idsoftware.com/idstuff/unsup/progs106.zip progs106.zip] ([http://quakery.quakedev.com/qfiles/progs106.zip local mirror]) - Download id's v1.06 QuakeC code here and get started on your mod today!

===QuakeC Compilers===
* [[FTEQCC]]  - more C like compiler :)
* [[FrikQCC]] - okay compiler
* [[QCCX]]    - [[evile]]
* [[meQCC]]   - very nice builtin precompiler
* [[ProQCC]]  - old, don't use
* [[fastqcc]] - old, don't use
* [[QCC]]     - id's original, don't use
* [[GMQCC]]   - new compiler developed for the xonotic project

===QuakeC Editors===
====Free====
* Notepad
* TexPad
* [[CODER4]]
* SciTE - general programmers editor
* [[QCide]] - User friendly QuakeC IDE based on SciTE
* Eclipse
* [[Project Editor 2006]] - IDE for project oriented QuakeC modifications
* [[Code::Blocks]]

====Commerical====
* Microsoft Visual Studio
* UltraEdit/UEStudio

===See Also===
* [[Quake tools]]</text>
      <sha1>agrudrwv9hlhhcehz7dl13h4g4w9hwl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Modelling</title>
    <ns>0</ns>
    <id>677</id>
    <revision>
      <id>2002</id>
      <timestamp>2013-03-25T10:38:06Z</timestamp>
      <contributor>
        <ip>78.37.177.78</ip>
      </contributor>
      <comment>Created page with &quot;To keep it short: Make models in w/e 3d modeling software, like Blender, 3ds MAX etc. Export to FBX (it supports animations). Then use [http://oasis.xentax.com/index.php?conte...&quot;</comment>
      <text xml:space="preserve" bytes="266">To keep it short:
Make models in w/e 3d modeling software, like Blender, 3ds MAX etc. Export to FBX (it supports animations).
Then use [http://oasis.xentax.com/index.php?content=downloads Noesis] to convert to MDl or other format supported by quake engines, like IQM</text>
      <sha1>duribokawvx40xesyz39hgn5ud35ah4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2004</id>
      <parentid>2002</parentid>
      <timestamp>2013-03-25T10:38:52Z</timestamp>
      <contributor>
        <ip>78.37.177.78</ip>
      </contributor>
      <text xml:space="preserve" bytes="267">To keep it short:
Make models in w/e 3d modeling software, like Blender, 3ds MAX etc. Export to FBX (it supports animations).

Then use [http://oasis.xentax.com/index.php?content=downloads Noesis] to convert to MDL or other format supported by quake engines, like IQM</text>
      <sha1>qoqti2udrkzhcsauhi20ywes1tv88m3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2996</id>
      <parentid>2004</parentid>
      <timestamp>2013-07-02T11:44:00Z</timestamp>
      <contributor>
        <ip>110.148.133.64</ip>
      </contributor>
      <comment>blender section, make page no suck!</comment>
      <text xml:space="preserve" bytes="1010">To keep it short:
Make models in w/e 3d modeling software, like Blender, 3ds MAX etc. Export to FBX (it supports animations).

Then use [http://oasis.xentax.com/index.php?content=downloads Noesis] to convert to MDL or other format supported by quake engines, like IQM


== Blender ==
Blender is a free and open source modeling suite that includes tools for modelling, texturing, rigging and animating. Using plugins Blender can export directly into many of the formats supported by various quake engines

FIXME: Write sum tutes ya mooks!

'''.mdl'''

classic vertex animated format.

[http://leileilol.mancubus.net/quackstuff/blender/ ajmdl_export]
[http://quakeforge.net/files.php quakeforge tools]

'''.md3'''

quake3 mdl

[http://www.katsbits.com/tools/ Katsbits import and export scripts, tools and utillities]

'''.md5'''

doom3 mdl

[http://www.katsbits.com/tools/ Katsbits import and export scripts, tools and utillities]

'''.iqm'''

opensource skeletal format.

[http://lee.fov120.com/iqm/ iqm devkit]</text>
      <sha1>fkb02a3g336ujpmioc6maudyrrpgcpy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Monster army</title>
    <ns>0</ns>
    <id>897</id>
    <redirect title="monster army" />
    <revision>
      <id>2561</id>
      <timestamp>2013-03-29T14:22:09Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Monster army]] to [[monster army]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="26">#REDIRECT [[monster army]]</text>
      <sha1>90qib64juwjkm9n8dwr40qkkz94p5a3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Monster demon1</title>
    <ns>0</ns>
    <id>898</id>
    <redirect title="monster demon1" />
    <revision>
      <id>2563</id>
      <timestamp>2013-03-29T14:22:09Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Monster demon1]] to [[monster demon1]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="28">#REDIRECT [[monster demon1]]</text>
      <sha1>fx30f5lq9m4irkbvezczoyjiwn3b9yt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Monster dog</title>
    <ns>0</ns>
    <id>899</id>
    <redirect title="monster dog" />
    <revision>
      <id>2565</id>
      <timestamp>2013-03-29T14:22:10Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Monster dog]] to [[monster dog]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="25">#REDIRECT [[monster dog]]</text>
      <sha1>mo292ykjr1tw0327szfye03o09ccl8i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Monster enforcer</title>
    <ns>0</ns>
    <id>900</id>
    <redirect title="monster enforcer" />
    <revision>
      <id>2567</id>
      <timestamp>2013-03-29T14:22:10Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Monster enforcer]] to [[monster enforcer]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[monster enforcer]]</text>
      <sha1>bba7lavkz5af6j699uw51oz9s26jfgj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Monster fish</title>
    <ns>0</ns>
    <id>901</id>
    <redirect title="monster fish" />
    <revision>
      <id>2569</id>
      <timestamp>2013-03-29T14:22:10Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Monster fish]] to [[monster fish]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="26">#REDIRECT [[monster fish]]</text>
      <sha1>2x4i5g5o8g4grkf9kferz5a6vie7ifr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Monster hell knight</title>
    <ns>0</ns>
    <id>902</id>
    <redirect title="monster hell knight" />
    <revision>
      <id>2571</id>
      <timestamp>2013-03-29T14:22:11Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Monster hell knight]] to [[monster hell knight]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="33">#REDIRECT [[monster hell knight]]</text>
      <sha1>qwea8fks0qfgbw4jq8xklm635k7ndyv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Monster knight</title>
    <ns>0</ns>
    <id>903</id>
    <redirect title="monster knight" />
    <revision>
      <id>2573</id>
      <timestamp>2013-03-29T14:22:11Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Monster knight]] to [[monster knight]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="28">#REDIRECT [[monster knight]]</text>
      <sha1>852a9hev3glib355r2enam6bfoe972f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Monster ogre</title>
    <ns>0</ns>
    <id>904</id>
    <redirect title="monster ogre" />
    <revision>
      <id>2575</id>
      <timestamp>2013-03-29T14:22:12Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Monster ogre]] to [[monster ogre]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="26">#REDIRECT [[monster ogre]]</text>
      <sha1>9y1zkxt2r2e62llnnunih4p58uo1dxd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Monster ogre marksman</title>
    <ns>0</ns>
    <id>905</id>
    <redirect title="monster ogre marksman" />
    <revision>
      <id>2577</id>
      <timestamp>2013-03-29T14:22:13Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Monster ogre marksman]] to [[monster ogre marksman]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="35">#REDIRECT [[monster ogre marksman]]</text>
      <sha1>bei4lq6s2cmvrea7aybu8w8oqej6hjo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Monster oldone</title>
    <ns>0</ns>
    <id>906</id>
    <redirect title="monster oldone" />
    <revision>
      <id>2579</id>
      <timestamp>2013-03-29T14:22:13Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Monster oldone]] to [[monster oldone]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="28">#REDIRECT [[monster oldone]]</text>
      <sha1>tq773jyb9yuw1dkssztjf29gyq17aq0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Monster shambler</title>
    <ns>0</ns>
    <id>907</id>
    <redirect title="monster shambler" />
    <revision>
      <id>2581</id>
      <timestamp>2013-03-29T14:22:13Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Monster shambler]] to [[monster shambler]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[monster shambler]]</text>
      <sha1>fgmi0275oygj7zojzrzfffdowj0yb43</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Monster wizard</title>
    <ns>0</ns>
    <id>908</id>
    <redirect title="monster wizard" />
    <revision>
      <id>2583</id>
      <timestamp>2013-03-29T14:22:14Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Monster wizard]] to [[monster wizard]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="28">#REDIRECT [[monster wizard]]</text>
      <sha1>4983jy3zttkm4dpf71b90j03uutbnc1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Monster zombie</title>
    <ns>0</ns>
    <id>909</id>
    <redirect title="monster zombie" />
    <revision>
      <id>2585</id>
      <timestamp>2013-03-29T14:22:14Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Monster zombie]] to [[monster zombie]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="28">#REDIRECT [[monster zombie]]</text>
      <sha1>0ruphx9sbi2ai2knvihel56l7ctxgqn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Monsters</title>
    <ns>0</ns>
    <id>6</id>
    <revision>
      <id>9</id>
      <timestamp>2007-10-30T16:31:38Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: ===[[Quake]] Monsters===  * [[Rottweiler]] * [[Grunt]] * [[Enforcer]] * [[Knight]] * [[Death Knight]] * [[Rotfish]] * [[Zombie]] * [[Scrag]] * [[Ogre]] * [[Spawn]] * [[Fiend]] * [[Vore]] *...</comment>
      <text xml:space="preserve" bytes="625">===[[Quake]] Monsters===

* [[Rottweiler]]
* [[Grunt]]
* [[Enforcer]]
* [[Knight]]
* [[Death Knight]]
* [[Rotfish]]
* [[Zombie]]
* [[Scrag]]
* [[Ogre]]
* [[Spawn]]
* [[Fiend]]
* [[Vore]]
* [[Shambler]]

===[[Scourge of Armagon]] Monsters===

* [[Centroid]]
* [[Gremlin]]

===[[Dissolution of Eternity]] Monsters===
* [[Phanton Swordsman]]
* [[Electric Eel]]
* [[Statue]]
* [[Hell Spawn]]
* [[Multi-Grenade Ogre]]
* [[Wrath]]
* [[Guardian]]

===[[Quake]] Bosses===

* [[Chthon]]
* [[Shub-Niggurath]]

===[[Scourge of Armagon]] Bosses===

* [[Armagon]]

===[[Dissolution of Eternity]] Bosses===

* [[Overlord]]
* [[The Dragon]]</text>
      <sha1>ef68y4dqi64c62erog63toamon5x617</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>716</id>
      <parentid>9</parentid>
      <timestamp>2008-05-07T20:08:26Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>/* [[Quake]] Monsters */</comment>
      <text xml:space="preserve" bytes="634">===[[Quake]] Monsters===

* [[Rottweiler]]
* [[Grunt]]
* [[Enforcer]]
* [[Knight]]
* [[Death Knight]]
* [[Rotfish]]
* [[Zombie]]
* [[Scrag]]
* [[Ogre]]
* [[Spawn(monster)]]
* [[Fiend]]
* [[Vore]]
* [[Shambler]]

===[[Scourge of Armagon]] Monsters===

* [[Centroid]]
* [[Gremlin]]

===[[Dissolution of Eternity]] Monsters===
* [[Phanton Swordsman]]
* [[Electric Eel]]
* [[Statue]]
* [[Hell Spawn]]
* [[Multi-Grenade Ogre]]
* [[Wrath]]
* [[Guardian]]

===[[Quake]] Bosses===

* [[Chthon]]
* [[Shub-Niggurath]]

===[[Scourge of Armagon]] Bosses===

* [[Armagon]]

===[[Dissolution of Eternity]] Bosses===

* [[Overlord]]
* [[The Dragon]]</text>
      <sha1>ct91equ18hot0uv2nge4rm963acmxbj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>717</id>
      <parentid>716</parentid>
      <timestamp>2008-05-07T20:08:34Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>/* [[Quake]] Monsters */</comment>
      <text xml:space="preserve" bytes="635">===[[Quake]] Monsters===

* [[Rottweiler]]
* [[Grunt]]
* [[Enforcer]]
* [[Knight]]
* [[Death Knight]]
* [[Rotfish]]
* [[Zombie]]
* [[Scrag]]
* [[Ogre]]
* [[Spawn (monster)]]
* [[Fiend]]
* [[Vore]]
* [[Shambler]]

===[[Scourge of Armagon]] Monsters===

* [[Centroid]]
* [[Gremlin]]

===[[Dissolution of Eternity]] Monsters===
* [[Phanton Swordsman]]
* [[Electric Eel]]
* [[Statue]]
* [[Hell Spawn]]
* [[Multi-Grenade Ogre]]
* [[Wrath]]
* [[Guardian]]

===[[Quake]] Bosses===

* [[Chthon]]
* [[Shub-Niggurath]]

===[[Scourge of Armagon]] Bosses===

* [[Armagon]]

===[[Dissolution of Eternity]] Bosses===

* [[Overlord]]
* [[The Dragon]]</text>
      <sha1>tom2d58xx3h9haj29skpx6dwazfc660</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>792</id>
      <parentid>717</parentid>
      <timestamp>2008-05-09T15:35:16Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>alphabetized, added bosses to normal lists as there arent enough to justify their own section</comment>
      <text xml:space="preserve" bytes="535">===[[Quake]] Monsters===

* [[Chthon]]
* [[Death Knight]]
* [[Grunt]]
* [[Enforcer]]
* [[Fiend]]
* [[Knight]]
* [[Ogre]]
* [[Rotfish]]
* [[Rottweiler]]
* [[Scrag]]
* [[Shambler]]
* [[Shub-Niggurath]]
* [[Spawn (monster)|Spawn]]
* [[Vore]]
* [[Zombie]]

===[[Scourge of Armagon]] Monsters===

* [[Armagon]]
* [[Centroid]]
* [[Gremlin]]

===[[Dissolution of Eternity]] Monsters===
* [[Electric Eel]]
* [[Guardian]]
* [[Hell Spawn]]
* [[Multi-Grenade Ogre]]
* [[Overlord]]
* [[Phanton Swordsman]]
* [[Statue]]
* [[The Dragon]]
* [[Wrath]]</text>
      <sha1>ry44l1te3m3sdpm8urztsnm0vn0zg6v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>793</id>
      <parentid>792</parentid>
      <timestamp>2008-05-09T15:44:16Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>/* [[Dissolution of Eternity]] Monsters */    forgot this guy</comment>
      <text xml:space="preserve" bytes="549">===[[Quake]] Monsters===

* [[Chthon]]
* [[Death Knight]]
* [[Grunt]]
* [[Enforcer]]
* [[Fiend]]
* [[Knight]]
* [[Ogre]]
* [[Rotfish]]
* [[Rottweiler]]
* [[Scrag]]
* [[Shambler]]
* [[Shub-Niggurath]]
* [[Spawn (monster)|Spawn]]
* [[Vore]]
* [[Zombie]]

===[[Scourge of Armagon]] Monsters===

* [[Armagon]]
* [[Centroid]]
* [[Gremlin]]

===[[Dissolution of Eternity]] Monsters===
* [[Electric Eel]]
* [[Guardian]]
* [[Hell Spawn]]
* [[Lavaman]]
* [[Multi-Grenade Ogre]]
* [[Overlord]]
* [[Phanton Swordsman]]
* [[Statue]]
* [[The Dragon]]
* [[Wrath]]</text>
      <sha1>p6fa5x7wz0j6upxn4quwxosksrva1ut</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>794</id>
      <parentid>793</parentid>
      <timestamp>2008-05-09T15:45:33Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>/* [[Quake]] Monsters */   doh</comment>
      <text xml:space="preserve" bytes="549">===[[Quake]] Monsters===

* [[Chthon]]
* [[Death Knight]]
* [[Enforcer]]
* [[Fiend]]
* [[Grunt]]
* [[Knight]]
* [[Ogre]]
* [[Rotfish]]
* [[Rottweiler]]
* [[Scrag]]
* [[Shambler]]
* [[Shub-Niggurath]]
* [[Spawn (monster)|Spawn]]
* [[Vore]]
* [[Zombie]]

===[[Scourge of Armagon]] Monsters===

* [[Armagon]]
* [[Centroid]]
* [[Gremlin]]

===[[Dissolution of Eternity]] Monsters===
* [[Electric Eel]]
* [[Guardian]]
* [[Hell Spawn]]
* [[Lavaman]]
* [[Multi-Grenade Ogre]]
* [[Overlord]]
* [[Phanton Swordsman]]
* [[Statue]]
* [[The Dragon]]
* [[Wrath]]</text>
      <sha1>32desbuonqvx13ezbgjpquvsltrpc13</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1860</id>
      <parentid>794</parentid>
      <timestamp>2013-03-25T00:45:51Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="572">===[[Quake]] Monsters===

* [[Chthon]]
* [[Death Knight]]
* [[Enforcer]]
* [[Fiend]]
* [[Grunt]]
* [[Knight]]
* [[Ogre]]
* [[Rotfish]]
* [[Rottweiler]]
* [[Scrag]]
* [[Shambler]]
* [[Shub-Niggurath]]
* [[Spawn (monster)|Spawn]]
* [[Vore]]
* [[Zombie]]

===[[Scourge of Armagon]] Monsters===

* [[Armagon]]
* [[Centroid]]
* [[Gremlin]]

===[[Dissolution of Eternity]] Monsters===
* [[Electric Eel]]
* [[Guardian]]
* [[Hell Spawn]]
* [[Lavaman]]
* [[Multi-Grenade Ogre]]
* [[Overlord]]
* [[Phanton Swordsman]]
* [[Statue]]
* [[The Dragon]]
* [[Wrath]]

[[Category:Monsters]]</text>
      <sha1>f288f4ex2x9apb18o02ntnpwglnr1ng</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Movie list</title>
    <ns>0</ns>
    <id>68</id>
    <revision>
      <id>108</id>
      <timestamp>2007-10-30T21:35:58Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: &lt;Tei&gt;Eh!! Please mirror this files has posible. The machinima downloading server is quota limited. Blah is very cool to be unavailable for download!&lt;/Tei&gt;  ===Eschaton=== * http://www.stra...</comment>
      <text xml:space="preserve" bytes="1373">&lt;Tei&gt;Eh!! Please mirror this files has posible. The machinima downloading server is quota limited. Blah is very cool to be unavailable for download!&lt;/Tei&gt;

===Eschaton===
* http://www.strangecompany.org/Eschaton
* Its really themed in the Lovercraft universe.

===Blahbalicious===
* http://www.planetquake.com/blah/
* http://www.machinima.com/displayarticle2.php?article=94

===Operation Bayshield===
* http://www.machinima.com/displayarticle2.php?article=63 (broken link)

===netQuake Productions===
* http://gamefiles.blueyonder.co.uk/blueyondergames/trailers/movies/quakeworld/netQuake_Brotherwars.avi
* http://gamefiles.blueyonder.co.uk/blueyondergames/trailers/movies/quakeworld/netQuake_Overclocked_2-hi.avi
* Good music, good footage, Impresive.
* Eh!! the correct name is Telejano, not Telejarno!!
* More fun than the FDE productions, I think.

===Others===
* Torn Appart
* Monster on Parade
* http://www.planetquake.com/cineplex -- A very good site, though it has a few dated [The Fall of CDRom.com|cdrom.com] links.
* http://www.machinema.com -- Came across it when searching for [[Blahbalicous]]
* http://www.planetquake.com/qdq/ -- Home of the Quake done Quick speedrun movies

* Here you can find all quakeworldmovies you could possibly want (it also works with ftp if you like that better): http://gamefiles.blueyonder.co.uk/blueyondergames/movies/quakeworld/</text>
      <sha1>atp4m08n1op1nprqnh182wtouabu4ic</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Multiplayer guide</title>
    <ns>0</ns>
    <id>12</id>
    <revision>
      <id>15</id>
      <timestamp>2007-10-30T16:38:25Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: * [[Multiplayer Maps|Maps]] * [[Weapons]] * [[Items]] * [[Hazards]] * [[Game modes]]</comment>
      <text xml:space="preserve" bytes="84">* [[Multiplayer Maps|Maps]]
* [[Weapons]]
* [[Items]]
* [[Hazards]]
* [[Game modes]]</text>
      <sha1>8jaic49q34wivtabckrz2it5j2hlzr8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>20</id>
      <parentid>15</parentid>
      <timestamp>2007-10-30T16:48:17Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <comment>[[Multiplayer Guide]] moved to [[Multiplayer guide]]</comment>
      <text xml:space="preserve" bytes="84">* [[Multiplayer Maps|Maps]]
* [[Weapons]]
* [[Items]]
* [[Hazards]]
* [[Game modes]]</text>
      <sha1>8jaic49q34wivtabckrz2it5j2hlzr8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1291</id>
      <parentid>20</parentid>
      <timestamp>2009-09-27T08:19:29Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="84">* [[Multiplayer maps|Maps]]
* [[Weapons]]
* [[Items]]
* [[Hazards]]
* [[Game modes]]</text>
      <sha1>dajk4wtozsia6pgne4207i1934pspei</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Multiplayer maps</title>
    <ns>0</ns>
    <id>532</id>
    <revision>
      <id>1276</id>
      <timestamp>2009-09-27T03:00:36Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>New page: This page catalogs all the multiplayer levels included with Quake, Scourge of Armagon and Dissolution of Eternity. Infos about the author, secrets, etc. These maps are not the extent of st...</comment>
      <text xml:space="preserve" bytes="948">This page catalogs all the multiplayer levels included with Quake, Scourge of Armagon and Dissolution of Eternity. Infos about the author, secrets, etc. These maps are not the extent of stock Quake multiplayer levels however, as it was standard for singleplayer maps to also support multiplayer with the presence of spawnspots, deathmatch only items, and sometimes adjusted connectivity. For the multiplayer aspects of singleplayer maps, see the respective maps article in [[Singleplayer Maps]].

==[[Quake]] maps==
* [[dm1]] Place of Two Deaths - [[Sandy Petersen]]
* [[dm2]] Claustrophobopolis - [[American McGee]]
* [[dm3]] The Abandonded Base - [[John Romero]]
* [[dm4]] The Bad Place - American McGee
* [[dm5]] The Cistern - [[Tim Willits]]
* [[dm6]] The Dark Zone - Tim Willits
==[[Scourge of Armagon]] maps==
* [[hipdm1]] the Edge of Oblivion - [[Richard Gray]]
==[[Dissolution of Eternity]] maps==
* [[ctf1 (rogue)|ctf1]] Division of Change</text>
      <sha1>jsjncnl6fwkifvn1eicysetf7l2jodx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1281</id>
      <parentid>1276</parentid>
      <timestamp>2009-09-27T08:15:34Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <comment>fixed credit</comment>
      <text xml:space="preserve" bytes="941">This page catalogs all the multiplayer levels included with Quake, Scourge of Armagon and Dissolution of Eternity. Infos about the author, secrets, etc. These maps are not the extent of stock Quake multiplayer levels however, as it was standard for singleplayer maps to also support multiplayer with the presence of spawnspots, deathmatch only items, and sometimes adjusted connectivity. For the multiplayer aspects of singleplayer maps, see the respective maps article in [[Singleplayer Maps]].

==[[Quake]] maps==
* [[dm1]] Place of Two Deaths - [[Tim Willits]]
* [[dm2]] Claustrophobopolis - [[American McGee]]
* [[dm3]] The Abandonded Base - [[John Romero]]
* [[dm4]] The Bad Place - American McGee
* [[dm5]] The Cistern - Tim Willits
* [[dm6]] The Dark Zone - Tim Willits
==[[Scourge of Armagon]] maps==
* [[hipdm1]] the Edge of Oblivion - [[Richard Gray]]
==[[Dissolution of Eternity]] maps==
* [[ctf1 (rogue)|ctf1]] Division of Change</text>
      <sha1>o6g28fza2at6zri1a8n09gb73vhn7u5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1286</id>
      <parentid>1281</parentid>
      <timestamp>2009-09-27T08:18:50Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="941">This page catalogs all the multiplayer levels included with Quake, Scourge of Armagon and Dissolution of Eternity. Infos about the author, secrets, etc. These maps are not the extent of stock Quake multiplayer levels however, as it was standard for singleplayer maps to also support multiplayer with the presence of spawnspots, deathmatch only items, and sometimes adjusted connectivity. For the multiplayer aspects of singleplayer maps, see the respective maps article in [[Singleplayer maps]].

==[[Quake]] maps==
* [[dm1]] Place of Two Deaths - [[Tim Willits]]
* [[dm2]] Claustrophobopolis - [[American McGee]]
* [[dm3]] The Abandonded Base - [[John Romero]]
* [[dm4]] The Bad Place - American McGee
* [[dm5]] The Cistern - Tim Willits
* [[dm6]] The Dark Zone - Tim Willits
==[[Scourge of Armagon]] maps==
* [[hipdm1]] the Edge of Oblivion - [[Richard Gray]]
==[[Dissolution of Eternity]] maps==
* [[ctf1 (rogue)|ctf1]] Division of Change</text>
      <sha1>7fkre33h6foxl96kyj27tl486mz603i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1287</id>
      <parentid>1286</parentid>
      <timestamp>2009-09-27T08:19:15Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>[[Multiplayer Maps]] moved to [[Multiplayer maps]]</comment>
      <text xml:space="preserve" bytes="941">This page catalogs all the multiplayer levels included with Quake, Scourge of Armagon and Dissolution of Eternity. Infos about the author, secrets, etc. These maps are not the extent of stock Quake multiplayer levels however, as it was standard for singleplayer maps to also support multiplayer with the presence of spawnspots, deathmatch only items, and sometimes adjusted connectivity. For the multiplayer aspects of singleplayer maps, see the respective maps article in [[Singleplayer maps]].

==[[Quake]] maps==
* [[dm1]] Place of Two Deaths - [[Tim Willits]]
* [[dm2]] Claustrophobopolis - [[American McGee]]
* [[dm3]] The Abandonded Base - [[John Romero]]
* [[dm4]] The Bad Place - American McGee
* [[dm5]] The Cistern - Tim Willits
* [[dm6]] The Dark Zone - Tim Willits
==[[Scourge of Armagon]] maps==
* [[hipdm1]] the Edge of Oblivion - [[Richard Gray]]
==[[Dissolution of Eternity]] maps==
* [[ctf1 (rogue)|ctf1]] Division of Change</text>
      <sha1>7fkre33h6foxl96kyj27tl486mz603i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>NEH CMD PLAY2</title>
    <ns>0</ns>
    <id>341</id>
    <revision>
      <id>549</id>
      <timestamp>2008-02-29T12:06:39Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Shows that the engine supports the &quot;play2&quot; console command (plays a sound without spatialization).</comment>
      <text xml:space="preserve" bytes="98">Shows that the engine supports the &quot;play2&quot; console command (plays a sound without spatialization).</text>
      <sha1>t17eny7tyiynd8jz4il5y0r266jtjbp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>NEH RESTOREGAME</title>
    <ns>0</ns>
    <id>342</id>
    <revision>
      <id>550</id>
      <timestamp>2008-02-29T12:07:07Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Engine-called QC prototypes: &lt;pre&gt; void() RestoreGame; &lt;/pre&gt;  When a savegame is loaded, this function is called.</comment>
      <text xml:space="preserve" bytes="114">Engine-called QC prototypes:
&lt;pre&gt;
void() RestoreGame;
&lt;/pre&gt;

When a savegame is loaded, this function is called.</text>
      <sha1>khe5q7h4i29ufdmsyzfyoiyactggvxd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>NEXUIZ PLAYERMODEL</title>
    <ns>0</ns>
    <id>343</id>
    <revision>
      <id>551</id>
      <timestamp>2008-02-29T12:07:46Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Console commands: &lt;pre&gt; playermodel &lt;name&gt; - FIXME: EXAMPLE NEEDED playerskin &lt;name&gt; - FIXME: EXAMPLE NEEDED &lt;/pre&gt;  Field definitions: &lt;pre&gt; .string playermodel; // name of player model s...</comment>
      <text xml:space="preserve" bytes="311">Console commands:
&lt;pre&gt;
playermodel &lt;name&gt; - FIXME: EXAMPLE NEEDED
playerskin &lt;name&gt; - FIXME: EXAMPLE NEEDED
&lt;/pre&gt;

Field definitions:
&lt;pre&gt;
.string playermodel; // name of player model sent by client
.string playerskin; // name of player skin sent by client
&lt;/pre&gt;

These client properties are used by Nexuiz.</text>
      <sha1>hm3xyory5sccwb9yw4689nm7gsh4liq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>NXQ GFX LETTERBOX</title>
    <ns>0</ns>
    <id>344</id>
    <revision>
      <id>552</id>
      <timestamp>2008-02-29T12:08:11Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Shows that the engine supports the &quot;r_letterbox&quot; console variable, set to values in the range 0-100 this restricts the view vertically (and turns off sbar and crosshair), value is a 0-100 ...</comment>
      <text xml:space="preserve" bytes="328">Shows that the engine supports the &quot;r_letterbox&quot; console variable, set to values in the range 0-100 this restricts the view vertically (and turns off sbar and crosshair), value is a 0-100 percentage of how much to constrict the view, &lt;=0 = normal view height, 25 = 75% of normal view height, 50 = 50%, 75 = 25%, &gt;=100 = no view.</text>
      <sha1>lzjfkzkjcwc9qjcupslirwlork89v1b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Nailgun</title>
    <ns>0</ns>
    <id>404</id>
    <revision>
      <id>690</id>
      <timestamp>2008-05-07T19:51:21Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page:  == Description ==  The nailgun is, overall, a good weapon. Although the nails only deal 9 damage each, they are fired quickly enough to keep the player on his toes. In most close-range si...</comment>
      <text xml:space="preserve" bytes="1701">
== Description ==

The nailgun is, overall, a good weapon. Although the nails only deal 9 damage each, they are fired quickly enough to keep the player on his toes. In most close-range situations, the double-barreled shotgun would probably serve you better - but when there is more than one opponent or your target is farther away, it's a very good weapon to use.

With the nailgun, strafing really helps a lot. Sending a straight line of nails towards a person will not do nearly as much good as sending an entire wall of them. By filling the room in this matter you use more ammo, but it will do the job more quickly and make them defensive, probably saving you some harm. Jumping helps a little bit, but really only if the other person is jumping too - otherwise, a lot of your nails are going to go right over his head.

It's pretty hard to avoid the nailgun because it fires so quickly. It's not really a good idea to go head-to-head with a nailgun unless you have a lot of health and a weapon that can kill very quickly. A better thing to do is force them to run out of ammo by avoiding the nails as much as you can. Jump around and strafe a lot, and keep it as random as possible. If you just start going left, right, left, right, and so on, he's going to catch on pretty quick and start following you. If you can get up close to the player, definitely orbit them - this way you can get some bonus damage in before the real fight begins. Once the nails stop coming and the shells start spreading, simply let him have it. Obviously, if you have a rocket launcher or something of the sort, you can just let them have it right away.

----
'''Effectiveness:''' Average

'''Avoidability:''' Average</text>
      <sha1>e3j26wdwvybcr02kwk8wunnzxac1mrj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>991</id>
      <parentid>690</parentid>
      <timestamp>2009-05-22T08:50:20Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>as the current weapon descriptions were taken from http://euroquake.webs.com/guides2.htm i am getting the old ones from archive.org, i renamed armour into armor here as that is what Quake calls it</comment>
      <text xml:space="preserve" bytes="700">{{Infobox Weapon
|weapon=Nailgun
|ammotype=Nails
|ammousage=1 per shot
|shottype=projectile
|dpshot=9
|dpsecond=45
|range=6000
|cycletime=0.2s
}}

A two-barrel dingus that prickles bad guys with armor-piercing darts, technically termed &quot;[[Nails|nails]]&quot;.

An effective rapid-fire weapon, useful for long-range situations when accuracy is the key. It fires projectiles, so remember to lead moving targets.
On the subject of armor piercing, the only weapon that armour has any effect (positive or negative) on is the rocket/grenade launcher vs the [[Shambler]]'s armor. The nailgun will always deal a total of 9 damage per nail divided between the target's armor and health.

==See Also==
* [[Weapons]]</text>
      <sha1>863g9s3dtnh1oqp84m5lvpu1ozr9hmw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1309</id>
      <parentid>991</parentid>
      <timestamp>2009-09-27T18:36:00Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="685">{{Infobox Weapon
|weapon=Nailgun
|ammotype=Nails
|ammousage=1 per shot
|shottype=projectile
|dpshot=9
|dpsecond=45
|range=6000
|cycletime=0.2s
}}

A two-barrel dingus that prickles bad guys with armor-piercing darts, technically termed &quot;[[Nails|nails]]&quot;.

An effective rapid-fire weapon, useful for long-range situations when accuracy is the key. It fires projectiles, so remember to lead moving targets.
On the subject of armor piercing, the only weapon that armour has any effect (positive or negative) on is the rocket/grenade launcher vs the [[Shambler]]'s armor. The nailgun will always deal a total of 9 damage per nail divided between the target's armor and health.

{{Weapons}}</text>
      <sha1>js6tj1mwhi4o36tnn5yr1efw356p56h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3044</id>
      <parentid>1309</parentid>
      <timestamp>2013-12-18T01:13:39Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <text xml:space="preserve" bytes="826">{{Infobox Weapon
|weapon=Nailgun
|image_w=weapon_mailgun.png
|image_v=v_nailgunt.png
|manualtext=A two-barrel dingus that prickles bad guys with armor-piercing darts, technically termed 'nails'.
|ammotype=[[Nails]]
|ammousage=1 per shot
|shottype=[[Projectile]]
|dpshot=9
|dpsecond=45
|range=6000 [[unit]]s
|cycletime=0.2s
|1stappearance=[[E1M1]]
|obituary1=(Target) was nailed by (attacker).
}}

An effective rapid-fire weapon, useful for long-range situations when accuracy is the key. It fires projectiles, so remember to lead moving targets.
On the subject of armor piercing, the only weapon that armour has any effect (positive or negative) on is the rocket/grenade launcher vs the [[Shambler]]'s armor. The nailgun will always deal a total of 9 damage per nail divided between the target's armor and health.

{{Weapons}}</text>
      <sha1>p7ehj8c9qee5nmrcqq1wvehvlp1erxw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3057</id>
      <parentid>3044</parentid>
      <timestamp>2013-12-18T04:33:53Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="825">{{Infobox Weapon
|weapon=Nailgun
|image_w=weapon_nailgun.png
|image_v=v_nailgun.png
|manualtext=A two-barrel dingus that prickles bad guys with armor-piercing darts, technically termed 'nails'.
|ammotype=[[Nails]]
|ammousage=1 per shot
|shottype=[[Projectile]]
|dpshot=9
|dpsecond=45
|range=6000 [[unit]]s
|cycletime=0.2s
|1stappearance=[[E1M1]]
|obituary1=(Target) was nailed by (attacker).
}}

An effective rapid-fire weapon, useful for long-range situations when accuracy is the key. It fires projectiles, so remember to lead moving targets.
On the subject of armor piercing, the only weapon that armour has any effect (positive or negative) on is the rocket/grenade launcher vs the [[Shambler]]'s armor. The nailgun will always deal a total of 9 damage per nail divided between the target's armor and health.

{{Weapons}}</text>
      <sha1>c1i0pnf7baza8kxf6x2j4rfzl23aq0a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Nehahra</title>
    <ns>0</ns>
    <id>775</id>
    <revision>
      <id>2256</id>
      <timestamp>2013-03-26T15:04:24Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Created page with &quot;Nehahra, is a large [[quake mod|Quake mod]], which was released along side a 3 hour and 55 minute companion [http://en.wikipedia.org/wiki/Machinima Machinima] film, The Seal o...&quot;</comment>
      <text xml:space="preserve" bytes="1573">Nehahra, is a large [[quake mod|Quake mod]], which was released along side a 3 hour and 55 minute companion [http://en.wikipedia.org/wiki/Machinima Machinima] film, The Seal of Nehahra. It's website is now dead, but is archived [http://quakewiki.net/archives/nehahra/nehindex.html here].

==Nehahra: Mod==
Released in August 2000, the Nehahra project was lead by [[Mindcrime]], who recruited several of the best level designers in the community at the time, such as [[ELEK]], [[CZG]], [[Bal]], [[Vondur]], [[Damaul]], and [[Vigil]]. Also along for the ride was famed Quake engine coder [[LordHavoc]]. Nehahra was a 2 episode mission which continued the story of [[Quake]], with new enemies, weapons, and pickups. Several technical enhancements were included as well, supported by a new [[Quake engine]], such as improved AI, colored lighting, fog, and skyboxes.

==The Seal of Nehahra==
Also released in August 2000, a week before the mod, The Seal of Nehahra was a 4 hour in-engine film that greatly expanded on the backstory of Quake, fleshes out the details of what happened during the game, and leads into the Nehahra mod's storyline. Most of the story concerns Max, but also presents the wisecracking [[Quakeguy|Phil]] as the unlikely hero of Quake, and Jack Torres, the hero of the Nehahra mod. At the time of it's release, The Seal of Nehahra was the longest Machinima film, a title it held for several years. Mindcrime was nearly solely responsible for everything in the film, from animation to models to voice acting, with the mod level designers pitching in sets.</text>
      <sha1>hbfc5kz96yflf61g3fucnq5lw0x7mpe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2257</id>
      <parentid>2256</parentid>
      <timestamp>2013-03-26T15:04:51Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="1572">Nehahra, is a large [[quake mod|Quake mod]], which was released along side a 3 hour and 55 minute companion [http://en.wikipedia.org/wiki/Machinima Machinima] film, The Seal of Nehahra. It's website is now dead, but is archived [http://quakewiki.net/archives/nehahra/nehindex.html here].

==Nehahra: Mod==
Released in August 2000, the Nehahra project was led by [[Mindcrime]], who recruited several of the best level designers in the community at the time, such as [[ELEK]], [[CZG]], [[Bal]], [[Vondur]], [[Damaul]], and [[Vigil]]. Also along for the ride was famed Quake engine coder [[LordHavoc]]. Nehahra was a 2 episode mission which continued the story of [[Quake]], with new enemies, weapons, and pickups. Several technical enhancements were included as well, supported by a new [[Quake engine]], such as improved AI, colored lighting, fog, and skyboxes.

==The Seal of Nehahra==
Also released in August 2000, a week before the mod, The Seal of Nehahra was a 4 hour in-engine film that greatly expanded on the backstory of Quake, fleshes out the details of what happened during the game, and leads into the Nehahra mod's storyline. Most of the story concerns Max, but also presents the wisecracking [[Quakeguy|Phil]] as the unlikely hero of Quake, and Jack Torres, the hero of the Nehahra mod. At the time of it's release, The Seal of Nehahra was the longest Machinima film, a title it held for several years. Mindcrime was nearly solely responsible for everything in the film, from animation to models to voice acting, with the mod level designers pitching in sets.</text>
      <sha1>glzltgqzimezyxldt8olwu5a44nz4tj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2259</id>
      <parentid>2257</parentid>
      <timestamp>2013-03-26T15:08:42Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="1588">Nehahra, is a large [[Installing addons|Quake mod]], which was released along side a 3 hour and 55 minute companion [http://en.wikipedia.org/wiki/Machinima Machinima] film, The Seal of Nehahra. It's website is now dead, but is archived [http://quakewiki.net/archives/nehahra/nehindex.html here].

==Nehahra: Mod==
Released in August 2000, the Nehahra project was led by [[Mindcrime]], who recruited several of the best level designers in the community at the time, such as [[ELEK]], [[CZG]], [[Bal]], [[Vondur]], [[Damaul]], and [[Vigil]]. Also along for the ride was famed Quake engine coder [[LordHavoc]]. Nehahra was a 2 episode mission which continued the story of [[Quake]], with new enemies, weapons, and pickups. Several technical enhancements were included as well, supported by a new [[Engines|Quake engine]], such as improved AI, colored lighting, fog, and skyboxes.

==The Seal of Nehahra==
Also released in August 2000, a week before the mod, The Seal of Nehahra was a 4 hour in-engine film that greatly expanded on the backstory of Quake, fleshes out the details of what happened during the game, and leads into the Nehahra mod's storyline. Most of the story concerns Max, but also presents the wisecracking [[Quakeguy|Phil]] as the unlikely hero of Quake, and Jack Torres, the hero of the Nehahra mod. At the time of it's release, The Seal of Nehahra was the longest Machinima film, a title it held for several years. Mindcrime was nearly solely responsible for everything in the film, from animation to models to voice acting, with the mod level designers pitching in sets.</text>
      <sha1>onfy4r24dq0v5ip2yk22298ehwuwplt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2261</id>
      <parentid>2259</parentid>
      <timestamp>2013-03-26T15:11:54Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* The Seal of Nehahra */</comment>
      <text xml:space="preserve" bytes="1635">Nehahra, is a large [[Installing addons|Quake mod]], which was released along side a 3 hour and 55 minute companion [http://en.wikipedia.org/wiki/Machinima Machinima] film, The Seal of Nehahra. It's website is now dead, but is archived [http://quakewiki.net/archives/nehahra/nehindex.html here].

==Nehahra: Mod==
Released in August 2000, the Nehahra project was led by [[Mindcrime]], who recruited several of the best level designers in the community at the time, such as [[ELEK]], [[CZG]], [[Bal]], [[Vondur]], [[Damaul]], and [[Vigil]]. Also along for the ride was famed Quake engine coder [[LordHavoc]]. Nehahra was a 2 episode mission which continued the story of [[Quake]], with new enemies, weapons, and pickups. Several technical enhancements were included as well, supported by a new [[Engines|Quake engine]], such as improved AI, colored lighting, fog, and skyboxes.

==The Seal of Nehahra==
[[File:Nehahra.jpg|thumb|The Seal of Nehahra]]
Also released in August 2000, a week before the mod, The Seal of Nehahra was a 4 hour in-engine film that greatly expanded on the backstory of Quake, fleshes out the details of what happened during the game, and leads into the Nehahra mod's storyline. Most of the story concerns Max, but also presents the wisecracking [[Quakeguy|Phil]] as the unlikely hero of Quake, and Jack Torres, the hero of the Nehahra mod. At the time of it's release, The Seal of Nehahra was the longest Machinima film, a title it held for several years. Mindcrime was nearly solely responsible for everything in the film, from animation to models to voice acting, with the mod level designers pitching in sets.</text>
      <sha1>pqasbl3t3lau0k3z859ehz9sv2sgopj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2263</id>
      <parentid>2261</parentid>
      <timestamp>2013-03-26T15:14:53Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Nehahra: Mod */</comment>
      <text xml:space="preserve" bytes="1707">Nehahra, is a large [[Installing addons|Quake mod]], which was released along side a 3 hour and 55 minute companion [http://en.wikipedia.org/wiki/Machinima Machinima] film, The Seal of Nehahra. It's website is now dead, but is archived [http://quakewiki.net/archives/nehahra/nehindex.html here].

==Nehahra: Mod==
[[File:Lastcupofsorrow.jpg|thumb|left|Your Last Cup of Sorrow, by Bal]]
Released in August 2000, the Nehahra project was led by [[Mindcrime]], who recruited several of the best level designers in the community at the time, such as [[ELEK]], [[CZG]], [[Bal]], [[Vondur]], [[Damaul]], and [[Vigil]]. Also along for the ride was famed Quake engine coder [[LordHavoc]]. Nehahra was a 2 episode mission which continued the story of [[Quake]], with new enemies, weapons, and pickups. Several technical enhancements were included as well, supported by a new [[Engines|Quake engine]], such as improved AI, colored lighting, fog, and skyboxes.

==The Seal of Nehahra==
[[File:Nehahra.jpg|thumb|The Seal of Nehahra]]
Also released in August 2000, a week before the mod, The Seal of Nehahra was a 4 hour in-engine film that greatly expanded on the backstory of Quake, fleshes out the details of what happened during the game, and leads into the Nehahra mod's storyline. Most of the story concerns Max, but also presents the wisecracking [[Quakeguy|Phil]] as the unlikely hero of Quake, and Jack Torres, the hero of the Nehahra mod. At the time of it's release, The Seal of Nehahra was the longest Machinima film, a title it held for several years. Mindcrime was nearly solely responsible for everything in the film, from animation to models to voice acting, with the mod level designers pitching in sets.</text>
      <sha1>nxr7ayf49aa2ugesdlc16z4vv6d3j6i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2265</id>
      <parentid>2263</parentid>
      <timestamp>2013-03-26T15:15:37Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="1709">Nehahra, is a large [[Installing addons|Quake mod]], which was released along side a 3 hour and 55 minute companion [http://en.wikipedia.org/wiki/Machinima Machinima] film, The Seal of Nehahra. It's website is now dead, but is archived [http://quakewiki.net/archives/nehahra/nehindex.html here].

==Nehahra: Mod==
[[File:Lastcupofsorrow.jpg|thumb|left|Your Last Cup of Sorrow, by Bal]]
Released in August 2000, the Nehahra project was led by [[Mindcrime]], who recruited several of the best level designers in the community at the time, such as [[ELEK]], [[CZG]], [[Bal]], [[Vondur]], [[Damaul]], and [[Vigil]]. Also along for the ride was famed Quake engine coder [[LordHavoc]]. Nehahra was a 2 episode mission which continued the story of [[Quake]], with new enemies, weapons, and pickups. Several technical enhancements were included as well, supported by a new [[Engines|Quake engine]], such as improved AI, colored lighting, fog, and skyboxes.



==The Seal of Nehahra==
[[File:Nehahra.jpg|thumb|The Seal of Nehahra]]
Also released in August 2000, a week before the mod, The Seal of Nehahra was a 4 hour in-engine film that greatly expanded on the backstory of Quake, fleshes out the details of what happened during the game, and leads into the Nehahra mod's storyline. Most of the story concerns Max, but also presents the wisecracking [[Quakeguy|Phil]] as the unlikely hero of Quake, and Jack Torres, the hero of the Nehahra mod. At the time of it's release, The Seal of Nehahra was the longest Machinima film, a title it held for several years. Mindcrime was nearly solely responsible for everything in the film, from animation to models to voice acting, with the mod level designers pitching in sets.</text>
      <sha1>aifnildrdlatiwj7x0yomk8v4anrvjd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2362</id>
      <parentid>2265</parentid>
      <timestamp>2013-03-27T19:48:34Z</timestamp>
      <contributor>
        <username>Vondur</username>
        <id>33</id>
      </contributor>
      <comment>/* Nehahra: Mod */</comment>
      <text xml:space="preserve" bytes="1707">Nehahra, is a large [[Installing addons|Quake mod]], which was released along side a 3 hour and 55 minute companion [http://en.wikipedia.org/wiki/Machinima Machinima] film, The Seal of Nehahra. It's website is now dead, but is archived [http://quakewiki.net/archives/nehahra/nehindex.html here].

==Nehahra: Mod==
[[File:Lastcupofsorrow.jpg|thumb|left|Your Last Cup of Sorrow, by Bal]]
Released in August 2000, the Nehahra project was led by [[Mindcrime]], who recruited several of the best level designers in the community at the time, such as [[ELEK]], [[czg]], [[Bal]], [[Vondur]], [[Damaul]], and [[Vigil]]. Also along for the ride was famed Quake engine coder [[LordHavoc]]. Nehahra was a 2 episode mission which continued the story of [[Quake]], with new enemies, weapons, and pickups. Several technical enhancements were included as well, supported by a new [[Engines|Quake engine]], such as improved AI, colored lighting, fog, and skyboxes.

==The Seal of Nehahra==
[[File:Nehahra.jpg|thumb|The Seal of Nehahra]]
Also released in August 2000, a week before the mod, The Seal of Nehahra was a 4 hour in-engine film that greatly expanded on the backstory of Quake, fleshes out the details of what happened during the game, and leads into the Nehahra mod's storyline. Most of the story concerns Max, but also presents the wisecracking [[Quakeguy|Phil]] as the unlikely hero of Quake, and Jack Torres, the hero of the Nehahra mod. At the time of it's release, The Seal of Nehahra was the longest Machinima film, a title it held for several years. Mindcrime was nearly solely responsible for everything in the film, from animation to models to voice acting, with the mod level designers pitching in sets.</text>
      <sha1>j5pbd596x869sgb4eh779c8s563bdvm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>NetQuake</title>
    <ns>0</ns>
    <id>501</id>
    <revision>
      <id>1058</id>
      <timestamp>2009-07-09T08:29:56Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>new article</comment>
      <text xml:space="preserve" bytes="1312">When writing about Quake, people sometimes use the terms ''NetQuake'' and ''QuakeWorld''.

==NetQuake==
'''NetQuake''' is an informal name for the original Quake [[engine]], or for Quake games played with the same networking code as in the original engine. The original engine had severe shortcomings in its playability over relatively high-latency networks like the Internet.

==QuakeWorld==
'''[[QuakeWorld]]''' is an alternative, official Quake engine which id Software released in order to make multiplayer games of Quake more playable over the Internet. Its networking code was rewritten, the in-game physics is slightly different, and there are various improvements in the client. The official versions of QuakeWorld don't support single-player games, but some of the unofficial engines do.

''QuakeWorld'' is also an informal name for multiplayer Quake games played with the QuakeWorld networking code.

==Compatibility==
An engine will generally either have NetQuake code or QuakeWorld code, not both.

Quake (NetQuake) clients aren't compatible with QuakeWorld servers, and QuakeWorld clients are compatible with ordinary Quake (NetQuake) servers.

Virtually all multiplayer Quake games on the Internet are QuakeWorld games. So if you want to play online, you need to get a QuakeWorld-compatible engine.</text>
      <sha1>dmpsyrfwm1llzhwv9rg3f6iuxly8jh6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1060</id>
      <parentid>1058</parentid>
      <timestamp>2009-07-09T08:36:55Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>+TODO and referral to [[QuakeWorld]] article; +some think of QuakeWorld as a spearate game.</comment>
      <text xml:space="preserve" bytes="1523">When writing about Quake, people sometimes use the terms ''NetQuake'' and ''QuakeWorld''.

==NetQuake==
'''NetQuake''' is just an informal name for the original Quake [[Engines|engine]], or for Quake games played with the same networking code as in the original engine.

The original engine had severe shortcomings in its playability over relatively high-latency networks like the Internet.
''TODO: list those shortcomings here.''

==QuakeWorld==
'''[[QuakeWorld]]''' is an alternative, official Quake engine which id Software released in order to make multiplayer games of Quake more playable over the Internet. Its networking code was rewritten, the in-game physics is slightly different, and there are various improvements in the client. The official versions of QuakeWorld don't support single-player games, but some of the unofficial engines do.

''QuakeWorld'' is also an informal name for multiplayer Quake games played with the QuakeWorld networking code.

Some people prefer to think of QuakeWorld as an entirely separate game from Quake/NetQuake.

See the [[QuakeWorld]] article for more info about QuakeWorld.

==Compatibility==
An engine will generally either have NetQuake code or QuakeWorld code, not both.

Quake (NetQuake) clients aren't compatible with QuakeWorld servers, and QuakeWorld clients are compatible with ordinary Quake (NetQuake) servers.

Virtually all multiplayer Quake games on the Internet are QuakeWorld games. So if you want to play online, you need to get a QuakeWorld-compatible engine.</text>
      <sha1>h80o062q479b6a1u6lbr1f9oyra4tzz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2230</id>
      <parentid>1060</parentid>
      <timestamp>2013-03-26T13:19:39Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>/* NetQuake */</comment>
      <text xml:space="preserve" bytes="1592">When writing about Quake, people sometimes use the terms ''NetQuake'' and ''QuakeWorld''.

==NetQuake==
'''NetQuake''' is just an informal name for the original Quake [[Engines|engine]], or for Quake games played with the same networking code as in the original engine.

The original engine had severe shortcomings in its playability over relatively high-latency networks like the Internet.
{{todo|todo=list those shortcomings here - optionally refer to the [[Engine Limitations]] article instead?}}

==QuakeWorld==
'''[[QuakeWorld]]''' is an alternative, official Quake engine which id Software released in order to make multiplayer games of Quake more playable over the Internet. Its networking code was rewritten, the in-game physics is slightly different, and there are various improvements in the client. The official versions of QuakeWorld don't support single-player games, but some of the unofficial engines do.

''QuakeWorld'' is also an informal name for multiplayer Quake games played with the QuakeWorld networking code.

Some people prefer to think of QuakeWorld as an entirely separate game from Quake/NetQuake.

See the [[QuakeWorld]] article for more info about QuakeWorld.

==Compatibility==
An engine will generally either have NetQuake code or QuakeWorld code, not both.

Quake (NetQuake) clients aren't compatible with QuakeWorld servers, and QuakeWorld clients are compatible with ordinary Quake (NetQuake) servers.

Virtually all multiplayer Quake games on the Internet are QuakeWorld games. So if you want to play online, you need to get a QuakeWorld-compatible engine.</text>
      <sha1>qspjmv6b3y4t59avc5qthlqz9t24b1a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3223</id>
      <parentid>2230</parentid>
      <timestamp>2014-03-04T03:48:46Z</timestamp>
      <contributor>
        <ip>97.96.12.121</ip>
      </contributor>
      <text xml:space="preserve" bytes="1436">When writing about Quake, people sometimes use the terms ''NetQuake'' and ''QuakeWorld''.

==NetQuake==
'''NetQuake''' is just an informal name for the original Quake [[Engines|engine]], or for Quake games played with the same networking code as in the original engine.

The original engine had severe shortcomings in its playability over relatively high-latency networks like the Internet.
{{todo|todo=list those shortcomings here - optionally refer to the [[Engine Limitations]] article instead?}}

==QuakeWorld==
'''[[QuakeWorld]]''' is an alternative, official Quake engine which id Software released in order to make multiplayer games of Quake more playable over the Internet. Its networking code was rewritten, the in-game physics is slightly different, and there are various improvements in the client. The official versions of QuakeWorld don't support single-player games, but some of the unofficial engines do.

''QuakeWorld'' is also an informal name for multiplayer Quake games played with the QuakeWorld networking code.

Some people prefer to think of QuakeWorld as an entirely separate game from Quake/NetQuake.

See the [[QuakeWorld]] article for more info about QuakeWorld.

==Compatibility==
An engine will generally either have NetQuake code or QuakeWorld code, not both.

Quake (NetQuake) clients aren't compatible with QuakeWorld servers, and QuakeWorld clients are compatible with ordinary Quake (NetQuake) servers.</text>
      <sha1>261imzjxozo0f1u7ctrt888el5gz5qu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3224</id>
      <parentid>3223</parentid>
      <timestamp>2014-03-04T11:38:51Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Reverted edits by [[Special:Contributions/97.96.12.121|97.96.12.121]] ([[User talk:97.96.12.121|talk]]) to last revision by [[User:Hectate|Hectate]]</comment>
      <text xml:space="preserve" bytes="1592">When writing about Quake, people sometimes use the terms ''NetQuake'' and ''QuakeWorld''.

==NetQuake==
'''NetQuake''' is just an informal name for the original Quake [[Engines|engine]], or for Quake games played with the same networking code as in the original engine.

The original engine had severe shortcomings in its playability over relatively high-latency networks like the Internet.
{{todo|todo=list those shortcomings here - optionally refer to the [[Engine Limitations]] article instead?}}

==QuakeWorld==
'''[[QuakeWorld]]''' is an alternative, official Quake engine which id Software released in order to make multiplayer games of Quake more playable over the Internet. Its networking code was rewritten, the in-game physics is slightly different, and there are various improvements in the client. The official versions of QuakeWorld don't support single-player games, but some of the unofficial engines do.

''QuakeWorld'' is also an informal name for multiplayer Quake games played with the QuakeWorld networking code.

Some people prefer to think of QuakeWorld as an entirely separate game from Quake/NetQuake.

See the [[QuakeWorld]] article for more info about QuakeWorld.

==Compatibility==
An engine will generally either have NetQuake code or QuakeWorld code, not both.

Quake (NetQuake) clients aren't compatible with QuakeWorld servers, and QuakeWorld clients are compatible with ordinary Quake (NetQuake) servers.

Virtually all multiplayer Quake games on the Internet are QuakeWorld games. So if you want to play online, you need to get a QuakeWorld-compatible engine.</text>
      <sha1>qspjmv6b3y4t59avc5qthlqz9t24b1a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3225</id>
      <parentid>3224</parentid>
      <timestamp>2014-03-04T11:40:22Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>reworded nq/qw server tendency</comment>
      <text xml:space="preserve" bytes="1695">When writing about Quake, people sometimes use the terms ''NetQuake'' and ''QuakeWorld''.

==NetQuake==
'''NetQuake''' is just an informal name for the original Quake [[Engines|engine]], or for Quake games played with the same networking code as in the original engine.

The original engine had severe shortcomings in its playability over relatively high-latency networks like the Internet.
{{todo|todo=list those shortcomings here - optionally refer to the [[Engine Limitations]] article instead?}}

==QuakeWorld==
'''[[QuakeWorld]]''' is an alternative, official Quake engine which id Software released in order to make multiplayer games of Quake more playable over the Internet. Its networking code was rewritten, the in-game physics is slightly different, and there are various improvements in the client. The official versions of QuakeWorld don't support single-player games, but some of the unofficial engines do.

''QuakeWorld'' is also an informal name for multiplayer Quake games played with the QuakeWorld networking code.

Some people prefer to think of QuakeWorld as an entirely separate game from Quake/NetQuake.

See the [[QuakeWorld]] article for more info about QuakeWorld.

==Compatibility==
An engine will generally either have NetQuake code or QuakeWorld code, not both.

Quake (NetQuake) clients aren't compatible with QuakeWorld servers, and QuakeWorld clients are compatible with ordinary Quake (NetQuake) servers.

The majority of multiplayer Quake games on the Internet are QuakeWorld games. There is a geographic tendency of US based servers being NetQuake and the rest of the world using QuakeWorld. So if you want to play online, you need to get an appropriate client.</text>
      <sha1>fhezed03w4a7yje158kimo9defbajt6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Network Protocols</title>
    <ns>0</ns>
    <id>471</id>
    <revision>
      <id>932</id>
      <timestamp>2008-11-12T11:18:00Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>New page: introduction goes here  ===Standard Protocols===  * [[Netquake protocol]] * [[Quakeworld protocol]]  ===New Protocols===  add list here</comment>
      <text xml:space="preserve" bytes="135">introduction goes here

===Standard Protocols===

* [[Netquake protocol]]
* [[Quakeworld protocol]]

===New Protocols===

add list here</text>
      <sha1>8hleoifo4d1yah9zjlrvyupeefd2e6w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>933</id>
      <parentid>932</parentid>
      <timestamp>2008-11-12T11:20:35Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="306">introduction goes here

===Standard Protocols===

* [[Netquake protocol]]
* [[Quakeworld protocol]]


* [[Quake network messages]] (seems to be netquake-only, move there?)
* [[Temporary entity messages]] (seems to be a combination of stock engine and custom engine data)

===New Protocols===

add list here</text>
      <sha1>a6l023njig2olfzbohkh4ltqssg6ok0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>961</id>
      <parentid>933</parentid>
      <timestamp>2008-11-14T09:19:43Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="3780">introduction goes here

===List of Protocols===
TODO: this list should be edited for accuracy, this was cobbled together from snippets of info -metlslime
{| style=&quot;background:#999&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
! Number
! Protocol
! Client Support
! Notes

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| [[Netquake Protocol]]
| quake.exe&lt;br/&gt;winquake.exe&lt;br/&gt;glquake.exe
| Orignal Quake protocol

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| QUAKEDP
| 
| LH: &quot;darkplaces extended quake protocol (used by TomazQuake and others), backwards compatible as long as no extended features are used&quot;
	
|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| TOMAZ
| 
| LH: &quot;this unfortunately does not match up with the QUAKEDP protocol it claims to use, it has some different entity encodings, and it's not easy to fix this&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| NEH15
| 
| almost same as 15, but with weird transparency/fullbright data added on used by joequake, nehahra

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 28
| [[Quakeworld Protocol]]
| qwcl.exe&lt;br/&gt;glqwcl.exe
| id Software's improved protocol, optimized for netplay.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 28
| FTEQW
| 
| LH: &quot;I do not know the details of this, but it uses the same QW protocol ID, it negotiates extra features on connect, I don't know how well demo playback works.&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 96
| DARKPLACES1
| 
| LH: &quot;uses EntityFrame entity snapshot encoder/decoder which is a QuakeWorld-like entity snapshot delta compression method&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 97
| DARKPLACES2
| 
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 250
| NEHAHRAMOVIE
| 
| LH: &quot;Nehahra movie protocol, a big nasty hack dating back to early days of the Quake Standards Group (but only ever used by neh_gl.exe), this is potentially backwards compatible with quake protocol as long as no extended features are used (but in actuality the neh_gl.exe which wrote this protocol ALWAYS wrote the extended&quot;
							
|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3500
| DARKPLACES3
| 
| LH: &quot;uses EntityFrame4 entity snapshot encoder/decoder which is broken, this  attempted to do partial snapshot updates on a QuakeWorld-like protocol, but it is broken and impossible to fix&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3501
| DARKPLACES4
| 
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3502
| DARKPLACES5
| 
| LH: &quot;uses EntityFrame5 entity snapshot encoder/decoder which is based on a Tribes networking article at [http://www.garagegames.com/articles/networking1/]&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3503
| DARKPLACES6
| 
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3504
| DARKPLACES7
| 
| LH: &quot;added QuakeWorld-style movement protocol to allow more consistent prediction&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10000
| NEHAHRABJP
| aglquake&lt;br/&gt;darkplaces
| LH: &quot;same as NEH15 but with 16bit modelindex&quot;&lt;br/&gt;BJP: &quot;Extended protocol (models &gt; 256 etc), hopefully no conflict&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10001
| NEHAHRABJP2
| aglquake&lt;br/&gt;darkplaces
| LH: &quot;same as NEHAHRABJP but with 16bit soundindex&quot;&lt;br/&gt;BJP: &quot;Extended protocol (sounds &gt; 256), problems with Marcher (Some progs (Marcher) send sound services)&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10002
| NEHAHRABJP3
| aglquake&lt;br/&gt;darkplaces
| LH: &quot;same as NEHAHRABJP2 but with some changes&quot;&lt;br/&gt;BJP: &quot;Extended protocol (sounds &gt; 256), more compatible, but less functional&quot;

|}

===Unsorted Pages===

* [[Quake network messages]] (seems to be netquake-only, move there?)
* [[Temporary entity messages]] (seems to be a combination of stock engine and custom engine data)</text>
      <sha1>bbtjyiezy3zl25wtg2rlgrgpwa4ys7r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>970</id>
      <parentid>961</parentid>
      <timestamp>2009-02-13T10:18:43Z</timestamp>
      <contributor>
        <ip>24.130.223.174</ip>
      </contributor>
      <comment>/* List of Protocols */</comment>
      <text xml:space="preserve" bytes="4041">introduction goes here

===List of Protocols===
TODO: this list should be edited for accuracy, this was cobbled together from snippets of info -metlslime
{| style=&quot;background:#999&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
! Number
! Protocol
! Client Support
! Notes

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| [[Netquake Protocol]]
| quake.exe&lt;br/&gt;winquake.exe&lt;br/&gt;glquake.exe
| Orignal Quake protocol

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| QUAKEDP
| 
| LH: &quot;darkplaces extended quake protocol (used by TomazQuake and others), backwards compatible as long as no extended features are used&quot;
	
|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| TOMAZ
| 
| LH: &quot;this unfortunately does not match up with the QUAKEDP protocol it claims to use, it has some different entity encodings, and it's not easy to fix this&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| NEH15
| 
| almost same as 15, 8-12 byte transparency/fullbright data added on to entities. used by joequake, nehahra, and bjp (with sv_protocol 15)
|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 28
| [[Quakeworld Protocol]]
| qwcl.exe&lt;br/&gt;glqwcl.exe
| id Software's improved protocol, optimized for netplay.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 28
| FTEQW
| 
| LH: &quot;I do not know the details of this, but it uses the same QW protocol ID, it negotiates extra features on connect, I don't know how well demo playback works.&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 96
| DARKPLACES1
| 
| LH: &quot;uses EntityFrame entity snapshot encoder/decoder which is a QuakeWorld-like entity snapshot delta compression method&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 97
| DARKPLACES2
| 
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 250
| NEHAHRAMOVIE
| 
| LH: &quot;Nehahra movie protocol, a big nasty hack dating back to early days of the Quake Standards Group (but only ever used by neh_gl.exe), this is potentially backwards compatible with quake protocol as long as no extended features are used (but in actuality the neh_gl.exe which wrote this protocol ALWAYS wrote the extended&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 666
| FITZQUAKE
| 
| Fitzquake protocol, introduced in version 0.85, supports more models, sounds, frames, edicts, adds entity alpha, high-precision client aim, and a few other things.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3500
| DARKPLACES3
| 
| LH: &quot;uses EntityFrame4 entity snapshot encoder/decoder which is broken, this  attempted to do partial snapshot updates on a QuakeWorld-like protocol, but it is broken and impossible to fix&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3501
| DARKPLACES4
| 
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3502
| DARKPLACES5
| 
| LH: &quot;uses EntityFrame5 entity snapshot encoder/decoder which is based on a Tribes networking article at [http://www.garagegames.com/articles/networking1/]&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3503
| DARKPLACES6
| 
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3504
| DARKPLACES7
| 
| LH: &quot;added QuakeWorld-style movement protocol to allow more consistent prediction&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10000
| NEHAHRABJP
| aglquake&lt;br/&gt;darkplaces
| LH: &quot;same as NEH15 but with 16bit modelindex&quot;&lt;br/&gt;BJP: &quot;Extended protocol (models &gt; 256 etc), hopefully no conflict&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10001
| NEHAHRABJP2
| aglquake&lt;br/&gt;darkplaces
| LH: &quot;same as NEHAHRABJP but with 16bit soundindex&quot;&lt;br/&gt;BJP: &quot;Extended protocol (sounds &gt; 256), problems with Marcher (Some progs (Marcher) send sound services)&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10002
| NEHAHRABJP3
| aglquake&lt;br/&gt;darkplaces
| LH: &quot;same as NEHAHRABJP2 but with some changes&quot;&lt;br/&gt;BJP: &quot;Extended protocol (sounds &gt; 256), more compatible, but less functional&quot;

|}

===Unsorted Pages===

* [[Quake network messages]] (seems to be netquake-only, move there?)
* [[Temporary entity messages]] (seems to be a combination of stock engine and custom engine data)</text>
      <sha1>f6j4vq1vvvrfhtbu1rsbb2rni2use7u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1204</id>
      <parentid>970</parentid>
      <timestamp>2009-09-24T18:15:33Z</timestamp>
      <contributor>
        <username>Mh</username>
        <id>20</id>
      </contributor>
      <comment>Added DirectQ Protocols</comment>
      <text xml:space="preserve" bytes="4077">introduction goes here

===List of Protocols===
TODO: this list should be edited for accuracy, this was cobbled together from snippets of info -metlslime
{| style=&quot;background:#999&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
! Number
! Protocol
! Client Support
! Notes

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| [[Netquake Protocol]]
| quake.exe&lt;br/&gt;winquake.exe&lt;br/&gt;glquake.exe
| Orignal Quake protocol

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| QUAKEDP
| 
| LH: &quot;darkplaces extended quake protocol (used by TomazQuake and others), backwards compatible as long as no extended features are used&quot;
	
|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| TOMAZ
| 
| LH: &quot;this unfortunately does not match up with the QUAKEDP protocol it claims to use, it has some different entity encodings, and it's not easy to fix this&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| NEH15
| 
| almost same as 15, 8-12 byte transparency/fullbright data added on to entities. used by joequake, nehahra, and bjp (with sv_protocol 15)
|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 28
| [[Quakeworld Protocol]]
| qwcl.exe&lt;br/&gt;glqwcl.exe
| id Software's improved protocol, optimized for netplay.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 28
| FTEQW
| 
| LH: &quot;I do not know the details of this, but it uses the same QW protocol ID, it negotiates extra features on connect, I don't know how well demo playback works.&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 96
| DARKPLACES1
| 
| LH: &quot;uses EntityFrame entity snapshot encoder/decoder which is a QuakeWorld-like entity snapshot delta compression method&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 97
| DARKPLACES2
| 
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 250
| NEHAHRAMOVIE
| 
| LH: &quot;Nehahra movie protocol, a big nasty hack dating back to early days of the Quake Standards Group (but only ever used by neh_gl.exe), this is potentially backwards compatible with quake protocol as long as no extended features are used (but in actuality the neh_gl.exe which wrote this protocol ALWAYS wrote the extended&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 666
| FITZQUAKE
| 
| Fitzquake protocol, introduced in version 0.85, supports more models, sounds, frames, edicts, adds entity alpha, high-precision client aim, and a few other things.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3500
| DARKPLACES3
| 
| LH: &quot;uses EntityFrame4 entity snapshot encoder/decoder which is broken, this  attempted to do partial snapshot updates on a QuakeWorld-like protocol, but it is broken and impossible to fix&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3501
| DARKPLACES4
| 
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3502
| DARKPLACES5
| 
| LH: &quot;uses EntityFrame5 entity snapshot encoder/decoder which is based on a Tribes networking article at [http://www.garagegames.com/articles/networking1/]&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3503
| DARKPLACES6
| 
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3504
| DARKPLACES7
| 
| LH: &quot;added QuakeWorld-style movement protocol to allow more consistent prediction&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10000
| NEHAHRABJP
| aglquake&lt;br/&gt;darkplaces&lt;br/&gt;DirectQ
| LH: &quot;same as NEH15 but with 16bit modelindex&quot;&lt;br/&gt;BJP: &quot;Extended protocol (models &gt; 256 etc), hopefully no conflict&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10001
| NEHAHRABJP2
| aglquake&lt;br/&gt;darkplaces&lt;br/&gt;DirectQ
| LH: &quot;same as NEHAHRABJP but with 16bit soundindex&quot;&lt;br/&gt;BJP: &quot;Extended protocol (sounds &gt; 256), problems with Marcher (Some progs (Marcher) send sound services)&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10002
| NEHAHRABJP3
| aglquake&lt;br/&gt;darkplaces&lt;br/&gt;DirectQ
| LH: &quot;same as NEHAHRABJP2 but with some changes&quot;&lt;br/&gt;BJP: &quot;Extended protocol (sounds &gt; 256), more compatible, but less functional&quot;

|}

===Unsorted Pages===

* [[Quake network messages]] (seems to be netquake-only, move there?)
* [[Temporary entity messages]] (seems to be a combination of stock engine and custom engine data)</text>
      <sha1>c16i3wxcbf05mcq7a8dk84ho3t6uj4o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1433</id>
      <parentid>1204</parentid>
      <timestamp>2009-11-15T10:35:43Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="4090">introduction goes here

===List of Protocols===
TODO: this list should be edited for accuracy, this was cobbled together from snippets of info -metlslime
{| style=&quot;background:#999&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
! Number
! Protocol
! Client Support
! Notes

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| [[Netquake Protocol]]
| quake.exe&lt;br/&gt;winquake.exe&lt;br/&gt;glquake.exe
| Orignal Quake protocol

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| QUAKEDP
| 
| LH: &quot;darkplaces extended quake protocol (used by TomazQuake and others), backwards compatible as long as no extended features are used&quot;
	
|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| TOMAZ
| 
| LH: &quot;this unfortunately does not match up with the QUAKEDP protocol it claims to use, it has some different entity encodings, and it's not easy to fix this&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| NEH15
| 
| almost same as 15, 8-12 byte transparency/fullbright data added on to entities. used by joequake, nehahra, and bjp (with sv_protocol 15)
|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 28
| [[Quakeworld Protocol]]
| qwcl.exe&lt;br/&gt;glqwcl.exe
| id Software's improved protocol, optimized for netplay.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 28
| FTEQW
| 
| LH: &quot;I do not know the details of this, but it uses the same QW protocol ID, it negotiates extra features on connect, I don't know how well demo playback works.&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 96
| DARKPLACES1
| 
| LH: &quot;uses EntityFrame entity snapshot encoder/decoder which is a QuakeWorld-like entity snapshot delta compression method&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 97
| DARKPLACES2
| 
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 250
| NEHAHRAMOVIE
| 
| LH: &quot;Nehahra movie protocol, a big nasty hack dating back to early days of the Quake Standards Group (but only ever used by neh_gl.exe), this is potentially backwards compatible with quake protocol as long as no extended features are used (but in actuality the neh_gl.exe which wrote this protocol ALWAYS wrote the extended&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 666
| [[Fitzquake Protocol]]
| 
| Fitzquake protocol, introduced in version 0.85, supports more models, sounds, frames, edicts, adds entity alpha, high-precision client aim, and a few other things.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3500
| DARKPLACES3
| 
| LH: &quot;uses EntityFrame4 entity snapshot encoder/decoder which is broken, this  attempted to do partial snapshot updates on a QuakeWorld-like protocol, but it is broken and impossible to fix&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3501
| DARKPLACES4
| 
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3502
| DARKPLACES5
| 
| LH: &quot;uses EntityFrame5 entity snapshot encoder/decoder which is based on a Tribes networking article at [http://www.garagegames.com/articles/networking1/]&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3503
| DARKPLACES6
| 
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3504
| DARKPLACES7
| 
| LH: &quot;added QuakeWorld-style movement protocol to allow more consistent prediction&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10000
| NEHAHRABJP
| aglquake&lt;br/&gt;darkplaces&lt;br/&gt;DirectQ
| LH: &quot;same as NEH15 but with 16bit modelindex&quot;&lt;br/&gt;BJP: &quot;Extended protocol (models &gt; 256 etc), hopefully no conflict&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10001
| NEHAHRABJP2
| aglquake&lt;br/&gt;darkplaces&lt;br/&gt;DirectQ
| LH: &quot;same as NEHAHRABJP but with 16bit soundindex&quot;&lt;br/&gt;BJP: &quot;Extended protocol (sounds &gt; 256), problems with Marcher (Some progs (Marcher) send sound services)&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10002
| NEHAHRABJP3
| aglquake&lt;br/&gt;darkplaces&lt;br/&gt;DirectQ
| LH: &quot;same as NEHAHRABJP2 but with some changes&quot;&lt;br/&gt;BJP: &quot;Extended protocol (sounds &gt; 256), more compatible, but less functional&quot;

|}

===Unsorted Pages===

* [[Quake network messages]] (seems to be netquake-only, move there?)
* [[Temporary entity messages]] (seems to be a combination of stock engine and custom engine data)</text>
      <sha1>7ubqn3x2ndldvvk3qtyg8358dwjo9sz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1467</id>
      <parentid>1433</parentid>
      <timestamp>2009-12-03T09:41:13Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="4953">A '''Network Protocol''' defines how the Quake [[client]] and [[server]] communicate after the initial connection is established.  Originally Quake only had one protocol, now called the [[Netquake Protocol]].  Later [[id Software]] released [[QuakeWorld]], which included a major overhaul of the protocol designed to work well over higher-latency internet connections.  Now that the source code is released, several custom engines have introduced their own network protocols to extend limits or add capabilities.  When a client connects to a server, the server informs the client which protocol is being used, and the client will either adapt its behavior or disconnect if it does not recognize the protocol or cannot support it.

===List of Protocols===
TODO: this list should be edited for accuracy, this was cobbled together from snippets of info -metlslime
{| style=&quot;background:#999&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
! Number
! Protocol
! Client Support
! Notes

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| [[Netquake Protocol]]
| quake.exe&lt;br/&gt;winquake.exe&lt;br/&gt;glquake.exe
| Orignal Quake protocol

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| QUAKEDP
| 
| LH: &quot;darkplaces extended quake protocol (used by TomazQuake and others), backwards compatible as long as no extended features are used&quot;
	
|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| TOMAZ
| 
| LH: &quot;this unfortunately does not match up with the QUAKEDP protocol it claims to use, it has some different entity encodings, and it's not easy to fix this&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| NEH15
| 
| almost same as 15, 8-12 byte transparency/fullbright data added on to entities. used by joequake, nehahra, and bjp (with sv_protocol 15)
|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 28
| [[Quakeworld Protocol]]
| qwcl.exe&lt;br/&gt;glqwcl.exe
| id Software's improved protocol, optimized for netplay.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 28
| FTEQW
| 
| LH: &quot;I do not know the details of this, but it uses the same QW protocol ID, it negotiates extra features on connect, I don't know how well demo playback works.&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 96
| DARKPLACES1
| 
| LH: &quot;uses EntityFrame entity snapshot encoder/decoder which is a QuakeWorld-like entity snapshot delta compression method&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 97
| DARKPLACES2
| 
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 250
| NEHAHRAMOVIE
| 
| LH: &quot;Nehahra movie protocol, a big nasty hack dating back to early days of the Quake Standards Group (but only ever used by neh_gl.exe), this is potentially backwards compatible with quake protocol as long as no extended features are used (but in actuality the neh_gl.exe which wrote this protocol ALWAYS wrote the extended&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 666
| [[Fitzquake Protocol]]
| Fitzquake&lt;br/&gt;DirectQ
| Fitzquake protocol, introduced in version 0.85, supports more models, sounds, frames, edicts, adds entity alpha, high-precision client aim, and a few other things.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3500
| DARKPLACES3
| 
| LH: &quot;uses EntityFrame4 entity snapshot encoder/decoder which is broken, this  attempted to do partial snapshot updates on a QuakeWorld-like protocol, but it is broken and impossible to fix&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3501
| DARKPLACES4
| 
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3502
| DARKPLACES5
| 
| LH: &quot;uses EntityFrame5 entity snapshot encoder/decoder which is based on a Tribes networking article at [http://www.garagegames.com/articles/networking1/]&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3503
| DARKPLACES6
| 
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3504
| DARKPLACES7
| 
| LH: &quot;added QuakeWorld-style movement protocol to allow more consistent prediction&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10000
| NEHAHRABJP
| aglquake&lt;br/&gt;darkplaces&lt;br/&gt;DirectQ
| LH: &quot;same as NEH15 but with 16bit modelindex&quot;&lt;br/&gt;BJP: &quot;Extended protocol (models &gt; 256 etc), hopefully no conflict&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10001
| NEHAHRABJP2
| aglquake&lt;br/&gt;darkplaces&lt;br/&gt;DirectQ
| LH: &quot;same as NEHAHRABJP but with 16bit soundindex&quot;&lt;br/&gt;BJP: &quot;Extended protocol (sounds &gt; 256), problems with Marcher (Some progs (Marcher) send sound services)&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10002
| NEHAHRABJP3
| aglquake&lt;br/&gt;darkplaces&lt;br/&gt;DirectQ
| LH: &quot;same as NEHAHRABJP2 but with some changes&quot;&lt;br/&gt;BJP: &quot;Extended protocol (sounds &gt; 256), more compatible, but less functional&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10003
| MH
| DirectQ
| MH: &quot;Extended protocol, as 10002 but extends coords to full float&quot;

|}

===Unsorted Pages===

* [[Quake network messages]] (seems to be netquake-only, move there?)
* [[Temporary entity messages]] (seems to be a combination of stock engine and custom engine data)</text>
      <sha1>eqbhje57u2x199jfyij0akyd5y2qn3j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1670</id>
      <parentid>1467</parentid>
      <timestamp>2011-02-20T01:33:11Z</timestamp>
      <contributor>
        <ip>67.188.81.46</ip>
      </contributor>
      <comment>attempted to add the RMQ protocols (778 and 999?)</comment>
      <text xml:space="preserve" bytes="5344">A '''Network Protocol''' defines how the Quake [[client]] and [[server]] communicate after the initial connection is established.  Originally Quake only had one protocol, now called the [[Netquake Protocol]].  Later [[id Software]] released [[QuakeWorld]], which included a major overhaul of the protocol designed to work well over higher-latency internet connections.  Now that the source code is released, several custom engines have introduced their own network protocols to extend limits or add capabilities.  When a client connects to a server, the server informs the client which protocol is being used, and the client will either adapt its behavior or disconnect if it does not recognize the protocol or cannot support it.

===List of Protocols===
TODO: this list should be edited for accuracy, this was cobbled together from snippets of info -metlslime
{| style=&quot;background:#999&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
! Number
! Protocol
! Client Support
! Notes

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| [[Netquake Protocol]]
| quake.exe&lt;br/&gt;winquake.exe&lt;br/&gt;glquake.exe
| Orignal Quake protocol

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| QUAKEDP
| 
| LH: &quot;darkplaces extended quake protocol (used by TomazQuake and others), backwards compatible as long as no extended features are used&quot;
	
|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| TOMAZ
| 
| LH: &quot;this unfortunately does not match up with the QUAKEDP protocol it claims to use, it has some different entity encodings, and it's not easy to fix this&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| NEH15
| 
| almost same as 15, 8-12 byte transparency/fullbright data added on to entities. used by joequake, nehahra, and bjp (with sv_protocol 15)
|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 28
| [[Quakeworld Protocol]]
| qwcl.exe&lt;br/&gt;glqwcl.exe
| id Software's improved protocol, optimized for netplay.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 28
| FTEQW
| 
| LH: &quot;I do not know the details of this, but it uses the same QW protocol ID, it negotiates extra features on connect, I don't know how well demo playback works.&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 96
| DARKPLACES1
| 
| LH: &quot;uses EntityFrame entity snapshot encoder/decoder which is a QuakeWorld-like entity snapshot delta compression method&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 97
| DARKPLACES2
| 
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 250
| NEHAHRAMOVIE
| 
| LH: &quot;Nehahra movie protocol, a big nasty hack dating back to early days of the Quake Standards Group (but only ever used by neh_gl.exe), this is potentially backwards compatible with quake protocol as long as no extended features are used (but in actuality the neh_gl.exe which wrote this protocol ALWAYS wrote the extended&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 666
| [[Fitzquake Protocol]]
| Fitzquake&lt;br/&gt;DirectQ
| Fitzquake protocol, introduced in version 0.85, supports more models, sounds, frames, edicts, adds entity alpha, high-precision client aim, and a few other things.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 778
| RMQ_MINUS2
| DirectQ
| In the DirectQ source, the comment is &quot;RemakeQuake (current draft protocol, subject to change)&quot;&lt;br/&gt;Seems to be based on the Fitzquake protocol.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 999
| RMQ
| RMQ Engine
| Remake Quake protocol, based on Fitzquake Protocol.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3500
| DARKPLACES3
| darkplaces
| LH: &quot;uses EntityFrame4 entity snapshot encoder/decoder which is broken, this  attempted to do partial snapshot updates on a QuakeWorld-like protocol, but it is broken and impossible to fix&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3501
| DARKPLACES4
| darkplaces
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3502
| DARKPLACES5
| darkplaces
| LH: &quot;uses EntityFrame5 entity snapshot encoder/decoder which is based on a Tribes networking article at [http://www.garagegames.com/articles/networking1/]&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3503
| DARKPLACES6
| darkplaces
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3504
| DARKPLACES7
| darkplaces
| LH: &quot;added QuakeWorld-style movement protocol to allow more consistent prediction&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10000
| NEHAHRABJP
| aglquake&lt;br/&gt;darkplaces&lt;br/&gt;DirectQ
| LH: &quot;same as NEH15 but with 16bit modelindex&quot;&lt;br/&gt;BJP: &quot;Extended protocol (models &gt; 256 etc), hopefully no conflict&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10001
| NEHAHRABJP2
| aglquake&lt;br/&gt;darkplaces&lt;br/&gt;DirectQ
| LH: &quot;same as NEHAHRABJP but with 16bit soundindex&quot;&lt;br/&gt;BJP: &quot;Extended protocol (sounds &gt; 256), problems with Marcher (Some progs (Marcher) send sound services)&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10002
| NEHAHRABJP3
| aglquake&lt;br/&gt;darkplaces&lt;br/&gt;DirectQ
| LH: &quot;same as NEHAHRABJP2 but with some changes&quot;&lt;br/&gt;BJP: &quot;Extended protocol (sounds &gt; 256), more compatible, but less functional&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10003
| MH
| DirectQ
| MH: &quot;Extended protocol, as 10002 but extends coords to full float&quot;

|}

===Unsorted Pages===

* [[Quake network messages]] (seems to be netquake-only, move there?)
* [[Temporary entity messages]] (seems to be a combination of stock engine and custom engine data)</text>
      <sha1>kum2twbzrnw39l2rp7s4z4murylgzke</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1671</id>
      <parentid>1670</parentid>
      <timestamp>2011-02-21T08:48:16Z</timestamp>
      <contributor>
        <ip>67.188.81.46</ip>
      </contributor>
      <text xml:space="preserve" bytes="5605">A '''Network Protocol''' defines how the Quake [[client]] and [[server]] communicate after the initial connection is established.  Originally Quake only had one protocol, now called the [[Netquake Protocol]].  Later [[id Software]] released [[QuakeWorld]], which included a major overhaul of the protocol designed to work well over higher-latency internet connections.  Now that the source code is released, several custom engines have introduced their own network protocols to extend limits or add capabilities.  When a client connects to a server, the server informs the client which protocol is being used, and the client will either adapt its behavior or disconnect if it does not recognize the protocol or cannot support it.

===List of Protocols===
TODO: this list should be edited for accuracy, this was cobbled together from snippets of info -metlslime
{| style=&quot;background:#999&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
! Number
! Protocol
! Client Support
! Notes

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| [[Netquake Protocol]]
| quake.exe&lt;br/&gt;winquake.exe&lt;br/&gt;glquake.exe
| Orignal Quake protocol

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| QUAKEDP
| 
| LH: &quot;darkplaces extended quake protocol (used by TomazQuake and others), backwards compatible as long as no extended features are used&quot;
	
|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| TOMAZ
| 
| LH: &quot;this unfortunately does not match up with the QUAKEDP protocol it claims to use, it has some different entity encodings, and it's not easy to fix this&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| NEH15
| 
| almost same as 15, 8-12 byte transparency/fullbright data added on to entities. used by joequake, nehahra, and bjp (with sv_protocol 15)
|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 28
| [[Quakeworld Protocol]]
| qwcl.exe&lt;br/&gt;glqwcl.exe
| id Software's improved protocol, optimized for netplay.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 28
| FTEQW
| 
| LH: &quot;I do not know the details of this, but it uses the same QW protocol ID, it negotiates extra features on connect, I don't know how well demo playback works.&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 96
| DARKPLACES1
| 
| LH: &quot;uses EntityFrame entity snapshot encoder/decoder which is a QuakeWorld-like entity snapshot delta compression method&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 97
| DARKPLACES2
| 
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 250
| NEHAHRAMOVIE
| 
| LH: &quot;Nehahra movie protocol, a big nasty hack dating back to early days of the Quake Standards Group (but only ever used by neh_gl.exe), this is potentially backwards compatible with quake protocol as long as no extended features are used (but in actuality the neh_gl.exe which wrote this protocol ALWAYS wrote the extended&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 666
| [[Fitzquake Protocol]]
| Fitzquake&lt;br/&gt;DirectQ
| Fitzquake protocol, introduced in version 0.85, supports more models, sounds, frames, edicts, adds entity alpha, high-precision client aim, and a few other things.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 778
| RMQ_MINUS2
| DirectQ
| MH: &quot;I'd been using DirectQ for protocol experiments at one point and unfortunately it got released. I'm pretty sure that the only difference between it and Fitz is that it uses floats for coords and angles everywhere. I'd say let it die; DirectQ itself is going back to 666 as the default. &quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 999
| RMQ
| RMQ Engine
| [[Remake Quake]] protocol, still in development and subject to ongoing changes. It is based on Fitzquake Protocol, but uses higher-precision coordinates and angles.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3500
| DARKPLACES3
| darkplaces
| LH: &quot;uses EntityFrame4 entity snapshot encoder/decoder which is broken, this  attempted to do partial snapshot updates on a QuakeWorld-like protocol, but it is broken and impossible to fix&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3501
| DARKPLACES4
| darkplaces
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3502
| DARKPLACES5
| darkplaces
| LH: &quot;uses EntityFrame5 entity snapshot encoder/decoder which is based on a Tribes networking article at [http://www.garagegames.com/articles/networking1/]&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3503
| DARKPLACES6
| darkplaces
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3504
| DARKPLACES7
| darkplaces
| LH: &quot;added QuakeWorld-style movement protocol to allow more consistent prediction&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10000
| NEHAHRABJP
| aglquake&lt;br/&gt;darkplaces&lt;br/&gt;DirectQ
| LH: &quot;same as NEH15 but with 16bit modelindex&quot;&lt;br/&gt;BJP: &quot;Extended protocol (models &gt; 256 etc), hopefully no conflict&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10001
| NEHAHRABJP2
| aglquake&lt;br/&gt;darkplaces&lt;br/&gt;DirectQ
| LH: &quot;same as NEHAHRABJP but with 16bit soundindex&quot;&lt;br/&gt;BJP: &quot;Extended protocol (sounds &gt; 256), problems with Marcher (Some progs (Marcher) send sound services)&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10002
| NEHAHRABJP3
| aglquake&lt;br/&gt;darkplaces&lt;br/&gt;DirectQ
| LH: &quot;same as NEHAHRABJP2 but with some changes&quot;&lt;br/&gt;BJP: &quot;Extended protocol (sounds &gt; 256), more compatible, but less functional&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10003
| MH
| DirectQ
| MH: &quot;Extended protocol, as 10002 but extends coords to full float&quot;

|}

===Unsorted Pages===

* [[Quake network messages]] (seems to be netquake-only, move there?)
* [[Temporary entity messages]] (seems to be a combination of stock engine and custom engine data)</text>
      <sha1>nvj2e2qfvtliqsf6z6l479v5i40ew2n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1856</id>
      <parentid>1671</parentid>
      <timestamp>2013-03-25T00:34:15Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="5629">A '''Network Protocol''' defines how the Quake [[client]] and [[server]] communicate after the initial connection is established.  Originally Quake only had one protocol, now called the [[Netquake Protocol]].  Later [[id Software]] released [[QuakeWorld]], which included a major overhaul of the protocol designed to work well over higher-latency internet connections.  Now that the source code is released, several custom engines have introduced their own network protocols to extend limits or add capabilities.  When a client connects to a server, the server informs the client which protocol is being used, and the client will either adapt its behavior or disconnect if it does not recognize the protocol or cannot support it.

===List of Protocols===
TODO: this list should be edited for accuracy, this was cobbled together from snippets of info -metlslime
{| style=&quot;background:#999&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
! Number
! Protocol
! Client Support
! Notes

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| [[Netquake Protocol]]
| quake.exe&lt;br/&gt;winquake.exe&lt;br/&gt;glquake.exe
| Orignal Quake protocol

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| QUAKEDP
| 
| LH: &quot;darkplaces extended quake protocol (used by TomazQuake and others), backwards compatible as long as no extended features are used&quot;
	
|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| TOMAZ
| 
| LH: &quot;this unfortunately does not match up with the QUAKEDP protocol it claims to use, it has some different entity encodings, and it's not easy to fix this&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| NEH15
| 
| almost same as 15, 8-12 byte transparency/fullbright data added on to entities. used by joequake, nehahra, and bjp (with sv_protocol 15)
|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 28
| [[Quakeworld Protocol]]
| qwcl.exe&lt;br/&gt;glqwcl.exe
| id Software's improved protocol, optimized for netplay.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 28
| FTEQW
| 
| LH: &quot;I do not know the details of this, but it uses the same QW protocol ID, it negotiates extra features on connect, I don't know how well demo playback works.&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 96
| DARKPLACES1
| 
| LH: &quot;uses EntityFrame entity snapshot encoder/decoder which is a QuakeWorld-like entity snapshot delta compression method&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 97
| DARKPLACES2
| 
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 250
| NEHAHRAMOVIE
| 
| LH: &quot;Nehahra movie protocol, a big nasty hack dating back to early days of the Quake Standards Group (but only ever used by neh_gl.exe), this is potentially backwards compatible with quake protocol as long as no extended features are used (but in actuality the neh_gl.exe which wrote this protocol ALWAYS wrote the extended&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 666
| [[Fitzquake Protocol]]
| Fitzquake&lt;br/&gt;DirectQ
| Fitzquake protocol, introduced in version 0.85, supports more models, sounds, frames, edicts, adds entity alpha, high-precision client aim, and a few other things.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 778
| RMQ_MINUS2
| DirectQ
| MH: &quot;I'd been using DirectQ for protocol experiments at one point and unfortunately it got released. I'm pretty sure that the only difference between it and Fitz is that it uses floats for coords and angles everywhere. I'd say let it die; DirectQ itself is going back to 666 as the default. &quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 999
| RMQ
| RMQ Engine
| [[Remake Quake]] protocol, still in development and subject to ongoing changes. It is based on Fitzquake Protocol, but uses higher-precision coordinates and angles.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3500
| DARKPLACES3
| darkplaces
| LH: &quot;uses EntityFrame4 entity snapshot encoder/decoder which is broken, this  attempted to do partial snapshot updates on a QuakeWorld-like protocol, but it is broken and impossible to fix&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3501
| DARKPLACES4
| darkplaces
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3502
| DARKPLACES5
| darkplaces
| LH: &quot;uses EntityFrame5 entity snapshot encoder/decoder which is based on a Tribes networking article at [http://www.garagegames.com/articles/networking1/]&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3503
| DARKPLACES6
| darkplaces
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3504
| DARKPLACES7
| darkplaces
| LH: &quot;added QuakeWorld-style movement protocol to allow more consistent prediction&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10000
| NEHAHRABJP
| aglquake&lt;br/&gt;darkplaces&lt;br/&gt;DirectQ
| LH: &quot;same as NEH15 but with 16bit modelindex&quot;&lt;br/&gt;BJP: &quot;Extended protocol (models &gt; 256 etc), hopefully no conflict&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10001
| NEHAHRABJP2
| aglquake&lt;br/&gt;darkplaces&lt;br/&gt;DirectQ
| LH: &quot;same as NEHAHRABJP but with 16bit soundindex&quot;&lt;br/&gt;BJP: &quot;Extended protocol (sounds &gt; 256), problems with Marcher (Some progs (Marcher) send sound services)&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10002
| NEHAHRABJP3
| aglquake&lt;br/&gt;darkplaces&lt;br/&gt;DirectQ
| LH: &quot;same as NEHAHRABJP2 but with some changes&quot;&lt;br/&gt;BJP: &quot;Extended protocol (sounds &gt; 256), more compatible, but less functional&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10003
| MH
| DirectQ
| MH: &quot;Extended protocol, as 10002 but extends coords to full float&quot;

|}

===Unsorted Pages===

* [[Quake network messages]] (seems to be netquake-only, move there?)
* [[Temporary entity messages]] (seems to be a combination of stock engine and custom engine data)
[[Category:DarkPlaces]]</text>
      <sha1>21o6tk463ijyuu6ee8k6ulq0scwso4l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2228</id>
      <parentid>1856</parentid>
      <timestamp>2013-03-26T13:18:21Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>/* List of Protocols */</comment>
      <text xml:space="preserve" bytes="5641">A '''Network Protocol''' defines how the Quake [[client]] and [[server]] communicate after the initial connection is established.  Originally Quake only had one protocol, now called the [[Netquake Protocol]].  Later [[id Software]] released [[QuakeWorld]], which included a major overhaul of the protocol designed to work well over higher-latency internet connections.  Now that the source code is released, several custom engines have introduced their own network protocols to extend limits or add capabilities.  When a client connects to a server, the server informs the client which protocol is being used, and the client will either adapt its behavior or disconnect if it does not recognize the protocol or cannot support it.

===List of Protocols===
{{todo|user=metlslime|todo=this list should be edited for accuracy, this was cobbled together from snippets of info}}
{| style=&quot;background:#999&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
! Number
! Protocol
! Client Support
! Notes

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| [[Netquake Protocol]]
| quake.exe&lt;br/&gt;winquake.exe&lt;br/&gt;glquake.exe
| Orignal Quake protocol

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| QUAKEDP
| 
| LH: &quot;darkplaces extended quake protocol (used by TomazQuake and others), backwards compatible as long as no extended features are used&quot;
	
|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| TOMAZ
| 
| LH: &quot;this unfortunately does not match up with the QUAKEDP protocol it claims to use, it has some different entity encodings, and it's not easy to fix this&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| NEH15
| 
| almost same as 15, 8-12 byte transparency/fullbright data added on to entities. used by joequake, nehahra, and bjp (with sv_protocol 15)
|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 28
| [[Quakeworld Protocol]]
| qwcl.exe&lt;br/&gt;glqwcl.exe
| id Software's improved protocol, optimized for netplay.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 28
| FTEQW
| 
| LH: &quot;I do not know the details of this, but it uses the same QW protocol ID, it negotiates extra features on connect, I don't know how well demo playback works.&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 96
| DARKPLACES1
| 
| LH: &quot;uses EntityFrame entity snapshot encoder/decoder which is a QuakeWorld-like entity snapshot delta compression method&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 97
| DARKPLACES2
| 
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 250
| NEHAHRAMOVIE
| 
| LH: &quot;Nehahra movie protocol, a big nasty hack dating back to early days of the Quake Standards Group (but only ever used by neh_gl.exe), this is potentially backwards compatible with quake protocol as long as no extended features are used (but in actuality the neh_gl.exe which wrote this protocol ALWAYS wrote the extended&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 666
| [[Fitzquake Protocol]]
| Fitzquake&lt;br/&gt;DirectQ
| Fitzquake protocol, introduced in version 0.85, supports more models, sounds, frames, edicts, adds entity alpha, high-precision client aim, and a few other things.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 778
| RMQ_MINUS2
| DirectQ
| MH: &quot;I'd been using DirectQ for protocol experiments at one point and unfortunately it got released. I'm pretty sure that the only difference between it and Fitz is that it uses floats for coords and angles everywhere. I'd say let it die; DirectQ itself is going back to 666 as the default. &quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 999
| RMQ
| RMQ Engine
| [[Remake Quake]] protocol, still in development and subject to ongoing changes. It is based on Fitzquake Protocol, but uses higher-precision coordinates and angles.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3500
| DARKPLACES3
| darkplaces
| LH: &quot;uses EntityFrame4 entity snapshot encoder/decoder which is broken, this  attempted to do partial snapshot updates on a QuakeWorld-like protocol, but it is broken and impossible to fix&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3501
| DARKPLACES4
| darkplaces
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3502
| DARKPLACES5
| darkplaces
| LH: &quot;uses EntityFrame5 entity snapshot encoder/decoder which is based on a Tribes networking article at [http://www.garagegames.com/articles/networking1/]&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3503
| DARKPLACES6
| darkplaces
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3504
| DARKPLACES7
| darkplaces
| LH: &quot;added QuakeWorld-style movement protocol to allow more consistent prediction&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10000
| NEHAHRABJP
| aglquake&lt;br/&gt;darkplaces&lt;br/&gt;DirectQ
| LH: &quot;same as NEH15 but with 16bit modelindex&quot;&lt;br/&gt;BJP: &quot;Extended protocol (models &gt; 256 etc), hopefully no conflict&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10001
| NEHAHRABJP2
| aglquake&lt;br/&gt;darkplaces&lt;br/&gt;DirectQ
| LH: &quot;same as NEHAHRABJP but with 16bit soundindex&quot;&lt;br/&gt;BJP: &quot;Extended protocol (sounds &gt; 256), problems with Marcher (Some progs (Marcher) send sound services)&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10002
| NEHAHRABJP3
| aglquake&lt;br/&gt;darkplaces&lt;br/&gt;DirectQ
| LH: &quot;same as NEHAHRABJP2 but with some changes&quot;&lt;br/&gt;BJP: &quot;Extended protocol (sounds &gt; 256), more compatible, but less functional&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10003
| MH
| DirectQ
| MH: &quot;Extended protocol, as 10002 but extends coords to full float&quot;

|}

===Unsorted Pages===

* [[Quake network messages]] (seems to be netquake-only, move there?)
* [[Temporary entity messages]] (seems to be a combination of stock engine and custom engine data)
[[Category:DarkPlaces]]</text>
      <sha1>13wjo3tm9lzr55en52k8z8fzu89oqpm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2697</id>
      <parentid>2228</parentid>
      <timestamp>2013-03-30T14:58:50Z</timestamp>
      <contributor>
        <ip>86.140.150.18</ip>
      </contributor>
      <text xml:space="preserve" bytes="5844">A '''Network Protocol''' defines how the Quake [[client]] and [[server]] communicate after the initial connection is established.  Originally Quake only had one protocol, now called the [[Netquake Protocol]].  Later [[id Software]] released [[QuakeWorld]], which included a major overhaul of the protocol designed to work well over higher-latency internet connections.  Now that the source code is released, several custom engines have introduced their own network protocols to extend limits or add capabilities.  When a client connects to a server, the server informs the client which protocol is being used, and the client will either adapt its behavior or disconnect if it does not recognize the protocol or cannot support it.

===List of Protocols===
{{todo|user=metlslime|todo=this list should be edited for accuracy, this was cobbled together from snippets of info}}
{| style=&quot;background:#999&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
! Number
! Protocol
! Client Support
! Notes

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| [[Netquake Protocol]]
| quake.exe&lt;br/&gt;winquake.exe&lt;br/&gt;glquake.exe
| Orignal Quake protocol

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| QUAKEDP
| 
| LH: &quot;darkplaces extended quake protocol (used by TomazQuake and others), backwards compatible as long as no extended features are used&quot;
	
|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| TOMAZ
| 
| LH: &quot;this unfortunately does not match up with the QUAKEDP protocol it claims to use, it has some different entity encodings, and it's not easy to fix this&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| NEH15
| 
| almost same as 15, 8-12 byte transparency/fullbright data added on to entities. used by joequake, nehahra, and bjp (with sv_protocol 15)
|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 28
| [[Quakeworld Protocol]]
| qwcl.exe&lt;br/&gt;glqwcl.exe
| id Software's improved protocol, optimized for netplay.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 96
| DARKPLACES1
| 
| LH: &quot;uses EntityFrame entity snapshot encoder/decoder which is a QuakeWorld-like entity snapshot delta compression method&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 97
| DARKPLACES2
| 
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 250
| NEHAHRAMOVIE
| 
| LH: &quot;Nehahra movie protocol, a big nasty hack dating back to early days of the Quake Standards Group (but only ever used by neh_gl.exe), this is potentially backwards compatible with quake protocol as long as no extended features are used (but in actuality the neh_gl.exe which wrote this protocol ALWAYS wrote the extended&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 666
| [[Fitzquake Protocol]]
| Fitzquake&lt;br/&gt;DirectQ
| Fitzquake protocol, introduced in version 0.85, supports more models, sounds, frames, edicts, adds entity alpha, high-precision client aim, and a few other things.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 778
| RMQ_MINUS2
| DirectQ
| MH: &quot;I'd been using DirectQ for protocol experiments at one point and unfortunately it got released. I'm pretty sure that the only difference between it and Fitz is that it uses floats for coords and angles everywhere. I'd say let it die; DirectQ itself is going back to 666 as the default. &quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 999
| RMQ
| RMQ Engine
| [[Remake Quake]] protocol, still in development and subject to ongoing changes. It is based on Fitzquake Protocol, but uses higher-precision coordinates and angles.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3500
| DARKPLACES3
| darkplaces
| LH: &quot;uses EntityFrame4 entity snapshot encoder/decoder which is broken, this  attempted to do partial snapshot updates on a QuakeWorld-like protocol, but it is broken and impossible to fix&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3501
| DARKPLACES4
| darkplaces
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3502
| DARKPLACES5
| darkplaces
| LH: &quot;uses EntityFrame5 entity snapshot encoder/decoder which is based on a Tribes networking article at [http://www.garagegames.com/articles/networking1/]&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3503
| DARKPLACES6
| darkplaces
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3504
| DARKPLACES7
| darkplaces
| LH: &quot;added QuakeWorld-style movement protocol to allow more consistent prediction&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10000
| NEHAHRABJP
| aglquake&lt;br/&gt;darkplaces&lt;br/&gt;DirectQ
| LH: &quot;same as NEH15 but with 16bit modelindex&quot;&lt;br/&gt;BJP: &quot;Extended protocol (models &gt; 256 etc), hopefully no conflict&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10001
| NEHAHRABJP2
| aglquake&lt;br/&gt;darkplaces&lt;br/&gt;DirectQ
| LH: &quot;same as NEHAHRABJP but with 16bit soundindex&quot;&lt;br/&gt;BJP: &quot;Extended protocol (sounds &gt; 256), problems with Marcher (Some progs (Marcher) send sound services)&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10002
| NEHAHRABJP3
| aglquake&lt;br/&gt;darkplaces&lt;br/&gt;DirectQ
| LH: &quot;same as NEHAHRABJP2 but with some changes&quot;&lt;br/&gt;BJP: &quot;Extended protocol (sounds &gt; 256), more compatible, but less functional&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10003
| MH
| DirectQ
| MH: &quot;Extended protocol, as 10002 but extends coords to full float&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 1480938566('FTEX') 843404358('FTE2')
| FTE Protocol Extensions
| fteqw&lt;br/&gt;ezquake(partial)&lt;br/&gt;fodquake(partial)
| Due to the use of a handshake, you will typically only see errors relating to these protocol numbers within demos. The exact featureset is expressed as a bitmask of separate extensions to an underlying protocol, typically QW but potentially Fitz/NQ protocols also.

|}

===Unsorted Pages===

* [[Quake network messages]] (seems to be netquake-only, move there?)
* [[Temporary entity messages]] (seems to be a combination of stock engine and custom engine data)
[[Category:DarkPlaces]]</text>
      <sha1>cy7s7jqcdkg8txbj927rdv2s5c6lcjd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2701</id>
      <parentid>2697</parentid>
      <timestamp>2013-03-30T15:16:15Z</timestamp>
      <contributor>
        <ip>86.140.150.18</ip>
      </contributor>
      <text xml:space="preserve" bytes="5864">A '''Network Protocol''' defines how the Quake [[client]] and [[server]] communicate after the initial connection is established.  Originally Quake only had one protocol, now called the [[Netquake Protocol]].  Later [[id Software]] released [[QuakeWorld]], which included a major overhaul of the protocol designed to work well over higher-latency internet connections.  Now that the source code is released, several custom engines have introduced their own network protocols to extend limits or add capabilities.  When a client connects to a server, the server informs the client which protocol is being used, and the client will either adapt its behavior or disconnect if it does not recognize the protocol or cannot support it.

===List of Protocols===
{{todo|user=metlslime|todo=this list should be edited for accuracy, this was cobbled together from snippets of info}}
{| style=&quot;background:#999&quot; cellpadding=&quot;4&quot; cellspacing=&quot;1&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
! Number
! Protocol
! Client Support
! Notes

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| [[Netquake Protocol]]
| quake.exe&lt;br/&gt;winquake.exe&lt;br/&gt;glquake.exe
| Orignal Quake protocol

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| QUAKEDP
| 
| LH: &quot;darkplaces extended quake protocol (used by TomazQuake and others), backwards compatible as long as no extended features are used&quot;
	
|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| TOMAZ
| 
| LH: &quot;this unfortunately does not match up with the QUAKEDP protocol it claims to use, it has some different entity encodings, and it's not easy to fix this&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 15
| NEH15
| 
| almost same as 15, 8-12 byte transparency/fullbright data added on to entities. used by joequake, nehahra, and bjp (with sv_protocol 15)
|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 28
| [[Quakeworld Protocol]]
| qwcl.exe&lt;br/&gt;glqwcl.exe
| id Software's improved protocol, optimized for netplay.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 96
| DARKPLACES1
| 
| LH: &quot;uses EntityFrame entity snapshot encoder/decoder which is a QuakeWorld-like entity snapshot delta compression method&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 97
| DARKPLACES2
| 
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 250
| NEHAHRAMOVIE
| 
| LH: &quot;Nehahra movie protocol, a big nasty hack dating back to early days of the Quake Standards Group (but only ever used by neh_gl.exe), this is potentially backwards compatible with quake protocol as long as no extended features are used (but in actuality the neh_gl.exe which wrote this protocol ALWAYS wrote the extended&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 666
| [[Fitzquake Protocol]]
| Fitzquake&lt;br/&gt;DirectQ&lt;br/&gt;fteqw
| Fitzquake protocol, introduced in version 0.85, supports more models, sounds, frames, edicts, adds entity alpha, high-precision client aim, and a few other things.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 778
| RMQ_MINUS2
| DirectQ
| MH: &quot;I'd been using DirectQ for protocol experiments at one point and unfortunately it got released. I'm pretty sure that the only difference between it and Fitz is that it uses floats for coords and angles everywhere. I'd say let it die; DirectQ itself is going back to 666 as the default. &quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 999
| RMQ
| RMQ Engine&lt;br/&gt;fteqw
| [[Remake Quake]] protocol, still in development and subject to ongoing changes. It is based on Fitzquake Protocol, but uses higher-precision coordinates and angles.

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3500
| DARKPLACES3
| darkplaces
| LH: &quot;uses EntityFrame4 entity snapshot encoder/decoder which is broken, this  attempted to do partial snapshot updates on a QuakeWorld-like protocol, but it is broken and impossible to fix&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3501
| DARKPLACES4
| darkplaces
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3502
| DARKPLACES5
| darkplaces
| LH: &quot;uses EntityFrame5 entity snapshot encoder/decoder which is based on a Tribes networking article at [http://www.garagegames.com/articles/networking1/]&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3503
| DARKPLACES6
| darkplaces
| LH: &quot;various changes&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 3504
| DARKPLACES7
| darkplaces
| LH: &quot;added QuakeWorld-style movement protocol to allow more consistent prediction&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10000
| NEHAHRABJP
| aglquake&lt;br/&gt;darkplaces&lt;br/&gt;DirectQ
| LH: &quot;same as NEH15 but with 16bit modelindex&quot;&lt;br/&gt;BJP: &quot;Extended protocol (models &gt; 256 etc), hopefully no conflict&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10001
| NEHAHRABJP2
| aglquake&lt;br/&gt;darkplaces&lt;br/&gt;DirectQ
| LH: &quot;same as NEHAHRABJP but with 16bit soundindex&quot;&lt;br/&gt;BJP: &quot;Extended protocol (sounds &gt; 256), problems with Marcher (Some progs (Marcher) send sound services)&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10002
| NEHAHRABJP3
| aglquake&lt;br/&gt;darkplaces&lt;br/&gt;DirectQ
| LH: &quot;same as NEHAHRABJP2 but with some changes&quot;&lt;br/&gt;BJP: &quot;Extended protocol (sounds &gt; 256), more compatible, but less functional&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 10003
| MH
| DirectQ
| MH: &quot;Extended protocol, as 10002 but extends coords to full float&quot;

|-valign=&quot;top&quot; style=&quot;background:#F8F8F8&quot;
| 1480938566('FTEX') 843404358('FTE2')
| FTE Protocol Extensions
| fteqw&lt;br/&gt;ezquake(partial)&lt;br/&gt;fodquake(partial)
| Due to the use of a handshake, you will typically only see errors relating to these protocol numbers within demos. The exact featureset is expressed as a bitmask of separate extensions to an underlying protocol, typically QW but potentially Fitz/NQ protocols also.

|}

===Unsorted Pages===

* [[Quake network messages]] (seems to be netquake-only, move there?)
* [[Temporary entity messages]] (seems to be a combination of stock engine and custom engine data)
[[Category:DarkPlaces]]</text>
      <sha1>k394fh5i0xly1o0xy8f6ss9wxp7fwxv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Nextent</title>
    <ns>0</ns>
    <id>910</id>
    <redirect title="nextent" />
    <revision>
      <id>2587</id>
      <timestamp>2013-03-29T14:22:14Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Nextent]] to [[nextent]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="21">#REDIRECT [[nextent]]</text>
      <sha1>l76zav086ako4ejxagg9wxoed4wzxy4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Nexuiz</title>
    <ns>0</ns>
    <id>441</id>
    <revision>
      <id>774</id>
      <timestamp>2008-05-08T19:12:08Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <comment>New page: {{Infobox Project |name=Nexuiz |author=[[AlienTrap]] |license=GNU GPL v2 |engine=[[DarkPlaces]] |first-release=2005 |newest-release=2008 |website=[http://nexuiz.com Nexuiz] }}   {{Derivati...</comment>
      <text xml:space="preserve" bytes="198">{{Infobox Project
|name=Nexuiz
|author=[[AlienTrap]]
|license=GNU GPL v2
|engine=[[DarkPlaces]]
|first-release=2005
|newest-release=2008
|website=[http://nexuiz.com Nexuiz]
}}


{{Derivative Games}}</text>
      <sha1>moi3kfg8rbj5a8i78if6sjydp6fe6wa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Normalize</title>
    <ns>0</ns>
    <id>192</id>
    <revision>
      <id>368</id>
      <timestamp>2008-02-22T19:26:15Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  vector '''normalize'''(vector ''v'')  returns a vector of length '''1'''  Gives the vector colinear to ''v'', but of length 1. This can be useful for calculation of distance along an axis...</comment>
      <text xml:space="preserve" bytes="189"> vector '''normalize'''(vector ''v'')

returns a vector of length '''1'''

Gives the vector colinear to ''v'', but of length 1. This can be useful for calculation of distance along an axis.</text>
      <sha1>l45n1w6pckqtsnguxbu7x7vw40rvf4i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>OQPlus</title>
    <ns>0</ns>
    <id>383</id>
    <revision>
      <id>653</id>
      <timestamp>2008-04-21T21:27:58Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <comment>New page: {{Infobox Project |name=OQPlus |author=[[User:Leilei]] |license=GNU GPL v2 |engine=[[Quake]] |first-release=TBA |newest-release=TBA |website=[http://openquartz.sourceforge.net Open Quartz]...</comment>
      <text xml:space="preserve" bytes="850">{{Infobox Project
|name=OQPlus
|author=[[User:Leilei]]
|license=GNU GPL v2
|engine=[[Quake]]
|first-release=TBA
|newest-release=TBA
|website=[http://openquartz.sourceforge.net Open Quartz]
}}

OQPlus (''Open Quartz Plus'') is a Free data replacement project licensed under the GNU GPL v2.  It is a fork of [[Open Quartz]] for the reasons seen in the [[Open Quartz#Criticism|Criticism section]].

Unlike '''Open Quartz''', it is designed for optimal rendering/memory efficiency and compatibility with all source ports (that do not restrict the data).  It also has a goal of replacing every texture used in Quake's maps.


== Criticism ==

Although it does not have a public release and little was shown of it, some people speculate it may be anime-styled or over-sexualized and that it won't capture the original atmosphere well.

{{Content Projects}}</text>
      <sha1>726qtetvnqmdwxym3ncf0n2vl304dle</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Objerror</title>
    <ns>0</ns>
    <id>213</id>
    <revision>
      <id>394</id>
      <timestamp>2008-02-23T18:49:50Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  void '''objerror''' (string ''text'')  Prints an error message related to object '''self'''.  An example of '''objerror''' being used is in doors.qc, where an objerror is called if it det...</comment>
      <text xml:space="preserve" bytes="313"> void '''objerror''' (string ''text'')

Prints an error message related to object '''self'''.

An example of '''objerror''' being used is in doors.qc, where an objerror is called if it detects cross-linked doors. If it didn't call objerror, the function would cycle for infinity.

When called the game will crash.</text>
      <sha1>e6fb2qq4v6nht3idqvpvajrzpykv3uw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Ogre</title>
    <ns>0</ns>
    <id>140</id>
    <revision>
      <id>222</id>
      <timestamp>2007-11-02T19:40:45Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: What's worse than a cannibal monster eight feet tall? One with a chainsaw. And a sackful of grenades.  * '''Weapon:''' Chainsaw and [[Grenade Launcher]] * '''Health:''' 200 * '''Treasure:'...</comment>
      <text xml:space="preserve" bytes="806">What's worse than a cannibal monster eight feet tall? One with a chainsaw. And a sackful of grenades.

* '''Weapon:''' Chainsaw and [[Grenade Launcher]]
* '''Health:''' 200
* '''Treasure:''' 2 rockets

'''Tips:''' Ogres are a common foe in the realms of Quake. With a deadly chainsaw for melee fights and a grenade launcher otherwise, they can truly pack a punch. If you can, get somewhere higher up than they are, because they have trouble aiming their grenades upwards and the grenade might bounce back and hit them :) Use a [[Double-Barrelled Shotgun]] at close range, 4 shots should put them down. Otherwise, use a [[Grenade Launcher]] or a [[Rocket Launcher]].

'''Entity name:''' [[monster_ogre]] or [[monster_ogre_marksman]]

[http://frikqcc.quakesrc.org/files/ogre.gif]

==See Also==
* [[Monsters]]</text>
      <sha1>5bp82i0ly7ijhz7b3gjz0m8wbk8xqbc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>282</id>
      <parentid>222</parentid>
      <timestamp>2007-11-05T22:20:12Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <text xml:space="preserve" bytes="805">What's worse than a cannibal monster eight feet tall? One with a chainsaw. And a sackful of grenades.

* '''Weapon:''' Chainsaw and [[Grenade Launcher]]
* '''Health:''' 200
* '''Treasure:''' 2 rockets

'''Tips:''' Ogres are a common foe in the realms of Quake. With a deadly chainsaw for melee fights and a grenade launcher otherwise, they can truly pack a punch. If you can, get somewhere higher up than they are, because they have trouble aiming their grenades upwards and the grenade might bounce back and hit them. Use a [[Double-Barrelled Shotgun]] at close range, 4 shots should put them down. Otherwise, use a [[Grenade Launcher]] or a [[Rocket Launcher]] for an even return of ammo.

[[Image:ogre.gif]]

'''Entity name:''' [[monster_ogre]] or [[monster_ogre_marksman]]

==See Also==
* [[Monsters]]</text>
      <sha1>5tz7t3ptegqwarj9quskl89b14yqs3i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>845</id>
      <parentid>282</parentid>
      <timestamp>2008-05-17T17:58:15Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="961">{{Infobox Monster
|monstername=Ogre
|entityname=monster_ogre&lt;br /&gt;monster_ogre_marksman
|monsterhealth=200
|monstermelee=Chainsaw
|monstermissile=Grenade Launcher
|movetype=MOVETYPE_STEP
|monsterspeed=
|monsterclass=
}}

[[Image:ogre.gif|left]]

Ogres are the most common foe in the realms of Quake. With a deadly chainsaw for melee fights and a grenade launcher otherwise (though their grenade launcher is weaker than the player's), they can truly pack a punch. If you can, get somewhere higher up than they are, because they are unable to aim upwards and their own grenades might bounce back and hit them. Use a [[Double-Barrelled Shotgun]] at close range, 4 shots should put them down. Otherwise, use a [[Grenade Launcher]] or a [[Rocket Launcher]] for an even return of ammo, as they drop two rockets upon their demise.

''&quot;What's worse than a cannibal monster eight feet tall? One with a chainsaw. And a sackful of grenades.&quot;''

==See Also==
* [[Monsters]]</text>
      <sha1>mp5rxptcpwli6tvdwidgwcap6iw2eke</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>862</id>
      <parentid>845</parentid>
      <timestamp>2008-05-17T18:53:03Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="984">{{Infobox Monster
|monstername=Ogre
|entityname=monster_ogre&lt;br /&gt;monster_ogre_marksman
|monsterhealth=200
|monstermelee=Chainsaw
|monstermissile=Grenade Launcher
|movetype=MOVETYPE_STEP
|monsterspeed=
|monsterclass=
|monsterdrop=2 rockets
}}

[[Image:ogre.gif|left]]

Ogres are the most common foe in the realms of Quake. With a deadly chainsaw for melee fights and a grenade launcher otherwise (though their grenade launcher is weaker than the player's), they can truly pack a punch. If you can, get somewhere higher up than they are, because they are unable to aim upwards and their own grenades might bounce back and hit them. Use a [[Double-Barrelled Shotgun]] at close range, 4 shots should put them down. Otherwise, use a [[Grenade Launcher]] or a [[Rocket Launcher]] for an even return of ammo, as they drop two rockets upon their demise.

''&quot;What's worse than a cannibal monster eight feet tall? One with a chainsaw. And a sackful of grenades.&quot;''

==See Also==
* [[Monsters]]</text>
      <sha1>09hqmvq2ns6ax4nofxqae5yzmq2999e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1245</id>
      <parentid>862</parentid>
      <timestamp>2009-09-25T08:07:54Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="1242">{{Infobox Monster
|name=Ogre
|entity=monster_ogre
|model=ogre.mdl&lt;br /&gt;ogre.mdl (head gib)
|health=200
|attacks=Chainsaw, grenade launcher
|drop=2 rockets
|gameversion=Shareware
}}
[[Image:ogre.gif|left]]
'''Ogres''' are the most common foe in the realms of Quake. With a deadly chainsaw for melee fights and a grenade launcher otherwise (though their grenade launcher is weaker than the player's), they can truly pack a punch. If you can, get somewhere higher up than they are, because they are unable to aim upwards and their own grenades might bounce back and hit them. Use a [[Double-Barrelled Shotgun]] at close range, 4 shots should put them down. Otherwise, use a [[Grenade Launcher]] or a [[Rocket Launcher]] for an even return of ammo, as they drop two rockets upon their demise.

The [[monster_ogre_marksman]] entity produces a slightly different ogre (won't make a sound when the player is sighted, won't make chainsaw dragging sounds, won't make a proper obituary message, has a different decision-making process when choosing whether to attack, and will [[Monster infighting|in-fight]] with regular ogres).

''&quot;What's worse than a cannibal monster eight feet tall? One with a chainsaw. And a sackful of grenades.&quot;''

{{Monsters}}</text>
      <sha1>j5s0l6jao79gky7a9vso7e06q48yvdf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1303</id>
      <parentid>1245</parentid>
      <timestamp>2009-09-27T13:02:05Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <comment>those old monster model shots should all be replaced with in-game screenshots</comment>
      <text xml:space="preserve" bytes="1292">{{Infobox Monster
|name=Ogre
|entity=monster_ogre
|model=ogre.mdl&lt;br /&gt;ogre.mdl (head gib)
|health=200
|attacks=Chainsaw, grenade launcher
|drop=2 rockets
|gameversion=Shareware
}}
[[Image:ogre.png|left|thumb|Two Ogres in [[e3m3]] (The Tomb of Terror).]]
'''Ogres''' are the most common foe in the realms of Quake. With a deadly chainsaw for melee fights and a grenade launcher otherwise (though their grenade launcher is weaker than the player's), they can truly pack a punch. If you can, get somewhere higher up than they are, because they are unable to aim upwards and their own grenades might bounce back and hit them. Use a [[Double-Barrelled Shotgun]] at close range, 4 shots should put them down. Otherwise, use a [[Grenade Launcher]] or a [[Rocket Launcher]] for an even return of ammo, as they drop two rockets upon their demise.

The [[monster_ogre_marksman]] entity produces a slightly different ogre (won't make a sound when the player is sighted, won't make chainsaw dragging sounds, won't make a proper obituary message, has a different decision-making process when choosing whether to attack, and will [[Monster infighting|in-fight]] with regular ogres).

''&quot;What's worse than a cannibal monster eight feet tall? One with a chainsaw. And a sackful of grenades.&quot;''

{{Monsters}}</text>
      <sha1>ky7ygrrczcu0cyv8gjynvgiy5fc7gpj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1304</id>
      <parentid>1303</parentid>
      <timestamp>2009-09-27T13:03:59Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1294">{{Infobox Monster
|name=Ogre
|entity=monster_ogre
|model=ogre.mdl&lt;br /&gt;h_ogre.mdl (head gib)
|health=200
|attacks=Chainsaw, grenade launcher
|drop=2 rockets
|gameversion=Shareware
}}
[[Image:ogre.png|left|thumb|Two Ogres in [[e3m3]] (The Tomb of Terror).]]
'''Ogres''' are the most common foe in the realms of Quake. With a deadly chainsaw for melee fights and a grenade launcher otherwise (though their grenade launcher is weaker than the player's), they can truly pack a punch. If you can, get somewhere higher up than they are, because they are unable to aim upwards and their own grenades might bounce back and hit them. Use a [[Double-Barrelled Shotgun]] at close range, 4 shots should put them down. Otherwise, use a [[Grenade Launcher]] or a [[Rocket Launcher]] for an even return of ammo, as they drop two rockets upon their demise.

The [[monster_ogre_marksman]] entity produces a slightly different ogre (won't make a sound when the player is sighted, won't make chainsaw dragging sounds, won't make a proper obituary message, has a different decision-making process when choosing whether to attack, and will [[Monster infighting|in-fight]] with regular ogres).

''&quot;What's worse than a cannibal monster eight feet tall? One with a chainsaw. And a sackful of grenades.&quot;''

{{Monsters}}</text>
      <sha1>hs98tz88eh0862fr037hb8vm9ko4f37</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1384</id>
      <parentid>1304</parentid>
      <timestamp>2009-10-08T23:21:35Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1318">{{Infobox Monster
|name=Ogre
|entity=monster_ogre
|model=ogre.mdl&lt;br /&gt;h_ogre.mdl (head gib)
|health=200
|attacks=Chainsaw, grenade launcher
|drop=2 rockets
|1stappearance=[[e1m2]]
|gameversion=Shareware
}}
[[Image:ogre.png|left|thumb|Two Ogres in [[e3m3]] (The Tomb of Terror).]]
'''Ogres''' are the most common foe in the realms of Quake. With a deadly chainsaw for melee fights and a grenade launcher otherwise (though their grenade launcher is weaker than the player's), they can truly pack a punch. If you can, get somewhere higher up than they are, because they are unable to aim upwards and their own grenades might bounce back and hit them. Use a [[Double-Barrelled Shotgun]] at close range, 4 shots should put them down. Otherwise, use a [[Grenade Launcher]] or a [[Rocket Launcher]] for an even return of ammo, as they drop two rockets upon their demise.

The [[monster_ogre_marksman]] entity produces a slightly different ogre (won't make a sound when the player is sighted, won't make chainsaw dragging sounds, won't make a proper obituary message, has a different decision-making process when choosing whether to attack, and will [[Monster infighting|in-fight]] with regular ogres).

''&quot;What's worse than a cannibal monster eight feet tall? One with a chainsaw. And a sackful of grenades.&quot;''

{{Monsters}}</text>
      <sha1>8mqqmqq47je63as4ivuhh3mjplzao5k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1398</id>
      <parentid>1384</parentid>
      <timestamp>2009-10-08T23:46:15Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1357">{{Infobox Monster
|name=Ogre
|entity=monster_ogre
|model=ogre.mdl&lt;br /&gt;h_ogre.mdl (head gib)
|health=200
|attacks=Chainsaw, grenade launcher
|drop=2 rockets
|1stappearance=[[e1m2]]
|gameversion=Shareware
}}
[[Image:ogre.png|left|thumb|Two Ogres in [[e3m3]] (The Tomb of Terror).]]
''&quot;What's worse than a cannibal monster eight feet tall? One with a chainsaw. And a sackful of grenades.&quot;''

'''Ogres''' are the most common foe in the realms of Quake. With a deadly chainsaw for melee fights and a grenade launcher otherwise (though their grenade launcher is weaker than the player's), they can truly pack a punch. If you can, get somewhere higher up than they are, because they are unable to aim upwards and their own grenades might bounce back and hit them. Use a [[Double-Barrelled Shotgun]] at close range, 4 shots should put them down. Otherwise, use a [[Grenade Launcher]] or a [[Rocket Launcher]] for an even return of ammo, as they drop two rockets upon their demise.

The [[monster_ogre_marksman]] entity produces a slightly different ogre (won't make a sound when the player is sighted, won't make chainsaw dragging sounds, won't make a proper obituary message, has a different decision-making process when choosing whether to attack, and will [[Monster infighting|in-fight]] with regular ogres).

''&quot;Player was destroyed by an Ogre&quot;''

{{Monsters}}</text>
      <sha1>roilgf4bfecr6gw3bz4ylfia4ws9i8t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1915</id>
      <parentid>1398</parentid>
      <timestamp>2013-03-25T03:31:55Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>fixed image location and file link</comment>
      <text xml:space="preserve" bytes="1357">{{Infobox Monster
|name=Ogre
|entity=monster_ogre
|model=ogre.mdl&lt;br /&gt;h_ogre.mdl (head gib)
|health=200
|attacks=Chainsaw, grenade launcher
|drop=2 rockets
|1stappearance=[[e1m2]]
|gameversion=Shareware
}}
[[Image:Ogre.png|left|thumb|Two Ogres in [[e3m3]] (The Tomb of Terror).]]
''&quot;What's worse than a cannibal monster eight feet tall? One with a chainsaw. And a sackful of grenades.&quot;''

'''Ogres''' are the most common foe in the realms of Quake. With a deadly chainsaw for melee fights and a grenade launcher otherwise (though their grenade launcher is weaker than the player's), they can truly pack a punch. If you can, get somewhere higher up than they are, because they are unable to aim upwards and their own grenades might bounce back and hit them. Use a [[Double-Barrelled Shotgun]] at close range, 4 shots should put them down. Otherwise, use a [[Grenade Launcher]] or a [[Rocket Launcher]] for an even return of ammo, as they drop two rockets upon their demise.

The [[monster_ogre_marksman]] entity produces a slightly different ogre (won't make a sound when the player is sighted, won't make chainsaw dragging sounds, won't make a proper obituary message, has a different decision-making process when choosing whether to attack, and will [[Monster infighting|in-fight]] with regular ogres).

''&quot;Player was destroyed by an Ogre&quot;''

{{Monsters}}</text>
      <sha1>io0mvj88jzww2axb2euw5dal46sy6yg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2837</id>
      <parentid>1915</parentid>
      <timestamp>2013-04-08T13:50:45Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>updated infobox</comment>
      <text xml:space="preserve" bytes="1364">{{Infobox Monster
| name = Ogre
| image = monster_quake_ogre.png
| manualtext = What's worse than a cannibal monster eight feet tall? One with a chainsaw. And a sackful of grenades.
| health = 200
| attacks = Chainsaw, grenade launcher
| drop = 2 rockets
| 1stappearance = [[e1m2]]
| gameversion = Shareware
| deathmessage = Player was destroyed by an Ogre
}}

[[Image:Ogre.png|left|thumb|Two Ogres in [[e3m3]] (The Tomb of Terror).]]

'''Ogres''' are the most common foe in the realms of Quake. With a deadly chainsaw for melee fights and a grenade launcher otherwise (though their grenade launcher is weaker than the player's), they can truly pack a punch. If you can, get somewhere higher up than they are, because they are unable to aim upwards and their own grenades might bounce back and hit them. Use a [[Double-Barrelled Shotgun]] at close range, 4 shots should put them down. Otherwise, use a [[Grenade Launcher]] or a [[Rocket Launcher]] for an even return of ammo, as they drop two rockets upon their demise.

The [[monster_ogre_marksman]] entity produces a slightly different ogre (won't make a sound when the player is sighted, won't make chainsaw dragging sounds, won't make a proper obituary message, has a different decision-making process when choosing whether to attack, and will [[Monster infighting|in-fight]] with regular ogres).

{{Monsters}}</text>
      <sha1>7marla3nmq61l445z079pjmc5kkj9x2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2876</id>
      <parentid>2837</parentid>
      <timestamp>2013-04-09T04:16:36Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>added basic entity info</comment>
      <text xml:space="preserve" bytes="3628">{{Infobox Monster
| name = Ogre
| image = monster_quake_ogre.png
| manualtext = What's worse than a cannibal monster eight feet tall? One with a chainsaw. And a sackful of grenades.
| health = 200
| attacks = Chainsaw, grenade launcher
| drop = 2 rockets
| 1stappearance = [[e1m2]]
| gameversion = Shareware
| deathmessage = Player was destroyed by an Ogre
}}

[[Image:Ogre.png|left|thumb|Two Ogres in [[e3m3]] (The Tomb of Terror).]]

'''Ogres''' are the most common foe in the realms of Quake. With a deadly chainsaw for melee fights and a grenade launcher otherwise (though their grenade launcher is weaker than the player's), they can truly pack a punch. If you can, get somewhere higher up than they are, because they are unable to aim upwards and their own grenades might bounce back and hit them. Use a [[Double-Barrelled Shotgun]] at close range, 4 shots should put them down. Otherwise, use a [[Grenade Launcher]] or a [[Rocket Launcher]] for an even return of ammo, as they drop two rockets upon their demise.

The [[monster_ogre_marksman]] entity produces a slightly different ogre (won't make a sound when the player is sighted, won't make chainsaw dragging sounds, won't make a proper obituary message, has a different decision-making process when choosing whether to attack, and will [[Monster infighting|in-fight]] with regular ogres).

==Tactics==


&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_ogre
| commonname = [[Ogre]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 88
| quakec = [[ogre.qc]]
| precaches =
progs/ogre.mdl&lt;br&gt;
progs/h_ogre.mdl&lt;br&gt;
progs/grenade.mdl&lt;br&gt;
ogre/ogdrag.wav&lt;br&gt;
ogre/ogdth.wav&lt;br&gt;
ogre/ogidle.wav&lt;br&gt;
ogre/ogidle2.wav&lt;br&gt;
ogre/ogpain1.wav&lt;br&gt;
ogre/ogsawatk.wav&lt;br&gt;
ogre/ogwake.wav
}}

==Entity information==

'''monster_ogre''' is the [[Entity|entity]] for placing '''Ogres''' in a level.

There is also an entity called '''monster_ogre_marksman''', which can also be used to place Ogres in a level. There is no functional difference between the two, but due to them being treated as separate monster types, they can be made to fight each other.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Ogre. When triggered, the Ogre will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Ogre dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Ogre dies.
|}

====Spawnflags====
The monster_ogre entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Ogre will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Ogre
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model(&quot;:progs/ogre.mdl&quot;)
    = monster_ogre : &quot;Ogre&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_ogre (1 0 0) (-16 -16 -24) (16 16 40) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>ayk1ff9c8ivvbtvvogg8ftvibeeocq5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2948</id>
      <parentid>2876</parentid>
      <timestamp>2013-05-04T16:10:51Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <minor/>
      <comment>gibs, manualtext correction</comment>
      <text xml:space="preserve" bytes="3643">{{Infobox Monster
| name = Ogre
| image = monster_quake_ogre.png
| manualtext = What's worse than a cannibal monster eight feet tall? One with a chainsaw. And a sack of grenades.
| health = 200
| gibthresh = -80
| attacks = Chainsaw, grenade launcher
| drop = 2 rockets
| 1stappearance = [[e1m2]]
| gameversion = Shareware
| deathmessage = Player was destroyed by an Ogre
}}

[[Image:Ogre.png|left|thumb|Two Ogres in [[e3m3]] (The Tomb of Terror).]]

'''Ogres''' are the most common foe in the realms of Quake. With a deadly chainsaw for melee fights and a grenade launcher otherwise (though their grenade launcher is weaker than the player's), they can truly pack a punch. If you can, get somewhere higher up than they are, because they are unable to aim upwards and their own grenades might bounce back and hit them. Use a [[Double-Barrelled Shotgun]] at close range, 4 shots should put them down. Otherwise, use a [[Grenade Launcher]] or a [[Rocket Launcher]] for an even return of ammo, as they drop two rockets upon their demise.

The [[monster_ogre_marksman]] entity produces a slightly different ogre (won't make a sound when the player is sighted, won't make chainsaw dragging sounds, won't make a proper obituary message, has a different decision-making process when choosing whether to attack, and will [[Monster infighting|in-fight]] with regular ogres).

==Tactics==


&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_ogre
| commonname = [[Ogre]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 88
| quakec = [[ogre.qc]]
| precaches =
progs/ogre.mdl&lt;br&gt;
progs/h_ogre.mdl&lt;br&gt;
progs/grenade.mdl&lt;br&gt;
ogre/ogdrag.wav&lt;br&gt;
ogre/ogdth.wav&lt;br&gt;
ogre/ogidle.wav&lt;br&gt;
ogre/ogidle2.wav&lt;br&gt;
ogre/ogpain1.wav&lt;br&gt;
ogre/ogsawatk.wav&lt;br&gt;
ogre/ogwake.wav
}}

==Entity information==

'''monster_ogre''' is the [[Entity|entity]] for placing '''Ogres''' in a level.

There is also an entity called '''monster_ogre_marksman''', which can also be used to place Ogres in a level. There is no functional difference between the two, but due to them being treated as separate monster types, they can be made to fight each other.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Ogre. When triggered, the Ogre will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Ogre dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Ogre dies.
|}

====Spawnflags====
The monster_ogre entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Ogre will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Ogre
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model(&quot;:progs/ogre.mdl&quot;)
    = monster_ogre : &quot;Ogre&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_ogre (1 0 0) (-16 -16 -24) (16 16 40) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>ttgclr7werxkl8slyfgmoc1h6l5iasq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Online Resources</title>
    <ns>0</ns>
    <id>1028</id>
    <revision>
      <id>2931</id>
      <timestamp>2013-04-22T20:57:09Z</timestamp>
      <contributor>
        <username>Baker5</username>
        <id>30</id>
      </contributor>
      <comment>Created page with &quot;[http://www.quakewiki.net/archives/console/commands/quake.html Quake Console Commands] List of commands and console variables in Quake.&quot;</comment>
      <text xml:space="preserve" bytes="135">[http://www.quakewiki.net/archives/console/commands/quake.html Quake Console Commands] List of commands and console variables in Quake.</text>
      <sha1>7y24epy18xejopy939u2t7ykih9790c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Open Quartz</title>
    <ns>0</ns>
    <id>381</id>
    <revision>
      <id>646</id>
      <timestamp>2008-04-21T20:56:19Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <comment>New page: {{Infobox Engine |name=Open Quartz |author=[[Galbraith Games]] |first-release=2000 |newest-release=November 14, 1997 |website=[http://openquartz.sourceforge.net Open Quartz] }}  Open Quart...</comment>
      <text xml:space="preserve" bytes="543">{{Infobox Engine
|name=Open Quartz
|author=[[Galbraith Games]]
|first-release=2000
|newest-release=November 14, 1997
|website=[http://openquartz.sourceforge.net Open Quartz]
}}

Open Quartz is a Free data replacement project licensed under the GNU GPL v2.

== Criticism ==

Many people do not like Open Quartz because of the bizarre artistic direction, such as having living trees for zombies, guns with wheels for enforcers, and replacing the classic mechanical weaponry with conventional real-life trademarked weapons. 

{{Content Projects}}</text>
      <sha1>jmw4xmthl717t5cpi4mxjl4ocoqxt38</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>648</id>
      <parentid>646</parentid>
      <timestamp>2008-04-21T20:57:55Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <text xml:space="preserve" bytes="551">{{Infobox Project
|name=Open Quartz
|author=[[Galbraith Games]]
|license=GNU GPL v2
|first-release=2000
|newest-release=2004
|website=[http://openquartz.sourceforge.net Open Quartz]
}}

Open Quartz is a Free data replacement project licensed under the GNU GPL v2.

== Criticism ==

Many people do not like Open Quartz because of the bizarre artistic direction, such as having living trees for zombies, guns with wheels for enforcers, and replacing the classic mechanical weaponry with conventional real-life trademarked weapons. 

{{Content Projects}}</text>
      <sha1>qwubxrjhk25c82pafi8yp0qwsr3ywuw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>650</id>
      <parentid>648</parentid>
      <timestamp>2008-04-21T20:59:47Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <text xml:space="preserve" bytes="590">{{Infobox Project
|name=Open Quartz
|author=[[Galbraith Games]]
|license=GNU GPL v2
|engine=[[Quakeforge]], [[DarkPlaces]]
|first-release=2000
|newest-release=2004
|website=[http://openquartz.sourceforge.net Open Quartz]
}}

Open Quartz is a Free data replacement project licensed under the GNU GPL v2.

== Criticism ==

Many people do not like Open Quartz because of the bizarre artistic direction, such as having living trees for zombies, guns with wheels for enforcers, and replacing the classic mechanical weaponry with conventional real-life trademarked weapons. 

{{Content Projects}}</text>
      <sha1>p4rkhzs7xn3s0vt52v2qdzq4gp8rkd2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>651</id>
      <parentid>650</parentid>
      <timestamp>2008-04-21T21:04:11Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <text xml:space="preserve" bytes="610">{{Infobox Project
|name=Open Quartz
|author=[[Galbraith Games]]
|license=GNU GPL v2
|engine=[[Quakeforge]] (2000-2003), [[DarkPlaces]] (2004-)
|first-release=2000
|newest-release=2004
|website=[http://openquartz.sourceforge.net Open Quartz]
}}

Open Quartz is a Free data replacement project licensed under the GNU GPL v2.

== Criticism ==

Many people do not like Open Quartz because of the bizarre artistic direction, such as having living trees for zombies, guns with wheels for enforcers, and replacing the classic mechanical weaponry with conventional real-life trademarked weapons. 

{{Content Projects}}</text>
      <sha1>nvqgzxfl0u4k6m0slcc6gra2rf5y1qk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>652</id>
      <parentid>651</parentid>
      <timestamp>2008-04-21T21:21:04Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <text xml:space="preserve" bytes="783">{{Infobox Project
|name=Open Quartz
|author=[[Galbraith Games]]
|license=GNU GPL v2
|engine=[[Quakeforge]] (2000-2003), [[DarkPlaces]] (2004-)
|first-release=2000
|newest-release=2004
|website=[http://openquartz.sourceforge.net Open Quartz]
}}

Open Quartz is a Free data replacement project licensed under the GNU GPL v2.
As of 2005, it is currently maintained by Toddd.

== Derived projects ==
Two projects are known to derive from OpenQuartz as a base:
* [[Zombie Uprising 20XX]]
* [[OQPlus]]

== Criticism ==

Many people do not like Open Quartz because of the bizarre artistic direction, such as having living trees for zombies, guns with wheels for enforcers, and replacing the classic mechanical weaponry with conventional real-life trademarked weapons. 

{{Content Projects}}</text>
      <sha1>kyjuoz1uh356zm445j5wp8tvg91hvqi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1853</id>
      <parentid>652</parentid>
      <timestamp>2013-03-25T00:32:31Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="807">{{Infobox Project
|name=Open Quartz
|author=[[Galbraith Games]]
|license=GNU GPL v2
|engine=[[Quakeforge]] (2000-2003), [[DarkPlaces]] (2004-)
|first-release=2000
|newest-release=2004
|website=[http://openquartz.sourceforge.net Open Quartz]
}}

Open Quartz is a Free data replacement project licensed under the GNU GPL v2.
As of 2005, it is currently maintained by Toddd.

== Derived projects ==
Two projects are known to derive from OpenQuartz as a base:
* [[Zombie Uprising 20XX]]
* [[OQPlus]]

== Criticism ==

Many people do not like Open Quartz because of the bizarre artistic direction, such as having living trees for zombies, guns with wheels for enforcers, and replacing the classic mechanical weaponry with conventional real-life trademarked weapons. 

{{Content Projects}}
[[Category:DarkPlaces]]</text>
      <sha1>ide98oiuppz3b1fm5if2mh6dv4rfcis</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>PAK file</title>
    <ns>0</ns>
    <id>504</id>
    <revision>
      <id>1066</id>
      <timestamp>2009-07-09T10:16:52Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>new article</comment>
      <text xml:space="preserve" bytes="667">A PAK file is an archive (collection of folders &amp; files) much like a Zip or RAR file.

The contents of a PAK file may be compressed or uncompressed, but is usually compressed using ZLib compression.

PAK files are commonly used to store data loaded by games like Quake. The data may include graphics, objects, textures, sounds, and other game data.

Quake engines usually load whatever PAK archives they find in the game directory (subfolder) they're told to use. The PAKs are treated exactly the same as if their contents were extracted into separate files, rather than being packed together in one PAK archive.

PAK explorer/viewer/extractor programs are available.</text>
      <sha1>cutz3yennuen5ddt3lgeqzwdba8w391</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1067</id>
      <parentid>1066</parentid>
      <timestamp>2009-07-09T10:17:15Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <minor/>
      <comment>grammar</comment>
      <text xml:space="preserve" bytes="672">A PAK file is an archive (collection of folders &amp; files) much like a Zip or RAR file.

The contents of a PAK file may be compressed or uncompressed, but they're usually compressed using ZLib compression.

PAK files are commonly used to store data loaded by games like Quake. The data may include graphics, objects, textures, sounds, and other game data.

Quake engines usually load whatever PAK archives they find in the game directory (subfolder) they're told to use. The PAKs are treated exactly the same as if their contents were extracted into separate files, rather than being packed together in one PAK archive.

PAK explorer/viewer/extractor programs are available.</text>
      <sha1>8tmp3knm23p9rjvklqwils9i5z0me9r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1074</id>
      <parentid>1067</parentid>
      <timestamp>2009-07-12T00:11:51Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>+naming convention and link to [[pak0.pak]]</comment>
      <text xml:space="preserve" bytes="880">A PAK file is an archive (collection of folders &amp; files) much like a Zip or RAR file.

The contents of a PAK file may be compressed or uncompressed, but they're usually compressed using ZLib compression.

PAK files are commonly used to store data to be loaded by a Quake game [[engine]]. The data may include graphics, objects, textures, sounds, and other game data.

Quake engines usually load whatever PAK archives they find in the game directory (subfolder) they're told to use. The PAKs are treated exactly the same as if their contents were extracted into separate files, rather than being packed together in one PAK archive.

PAK files are typically named ''pak0.pak'', ''pak1.pak'', ''pak2.pak'', and so on. The ''[[pak0.pak]]'' which comes with Quake and lives in the ID1 folder is required by all Quake game engines.

PAK explorer/viewer/extractor programs are available.</text>
      <sha1>0s6d0ks7glf8rl6n9ramtyeul0yygg1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1104</id>
      <parentid>1074</parentid>
      <timestamp>2009-07-20T02:31:31Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>minor clarification</comment>
      <text xml:space="preserve" bytes="935">A PAK file is an archive (collection of folders &amp; files) much like a Zip or RAR file.

The contents of a PAK file may be compressed or uncompressed, but they're usually compressed using ZLib compression.

PAK files are commonly used to store data to be loaded by a Quake game [[engine]]. The data may include graphics, objects, textures, sounds, and other game data.

Quake engines usually load the ''pak0.pak'' file in the ID1 subfolder, plus whatever other PAK archives they find in the game directory (subfolder) they're told to use. The PAKs are treated exactly the same as if their contents were extracted into separate files, rather than being packed together in one PAK archive.

PAK files are typically named ''pak0.pak'', ''pak1.pak'', ''pak2.pak'', and so on. The ''[[pak0.pak]]'' which comes with Quake and lives in the ID1 folder is required by all Quake game engines.

PAK explorer/viewer/extractor programs are available.</text>
      <sha1>ejl4vriy64w208jqzzgc8cz9in29t6w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1105</id>
      <parentid>1104</parentid>
      <timestamp>2009-07-20T02:32:00Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <minor/>
      <comment>avoid redirect</comment>
      <text xml:space="preserve" bytes="943">A PAK file is an archive (collection of folders &amp; files) much like a Zip or RAR file.

The contents of a PAK file may be compressed or uncompressed, but they're usually compressed using ZLib compression.

PAK files are commonly used to store data to be loaded by a Quake game [[engines|engine]]. The data may include graphics, objects, textures, sounds, and other game data.

Quake engines usually load the ''pak0.pak'' file in the ID1 subfolder, plus whatever other PAK archives they find in the game directory (subfolder) they're told to use. The PAKs are treated exactly the same as if their contents were extracted into separate files, rather than being packed together in one PAK archive.

PAK files are typically named ''pak0.pak'', ''pak1.pak'', ''pak2.pak'', and so on. The ''[[pak0.pak]]'' which comes with Quake and lives in the ID1 folder is required by all Quake game engines.

PAK explorer/viewer/extractor programs are available.</text>
      <sha1>6utbhjk1xfyckzyl5pppagphk7gj87m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>PAK0.PAK</title>
    <ns>0</ns>
    <id>509</id>
    <redirect title="pak0.pak" />
    <revision>
      <id>1099</id>
      <timestamp>2009-07-20T02:23:24Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>capitalization variation should redirect</comment>
      <text xml:space="preserve" bytes="22">#REDIRECT [[Pak0.pak]]</text>
      <sha1>bjsyzn2z8pywfuti62xttl5dbvj0t9y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2698</id>
      <parentid>1099</parentid>
      <timestamp>2013-03-30T15:04:06Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Redirected page to [[pak0.pak]]</comment>
      <text xml:space="preserve" bytes="22">#REDIRECT [[pak0.pak]]</text>
      <sha1>6gvpwjux48l5myxsogkatanhuqnlkoa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>PRYDON CLIENTCURSOR</title>
    <ns>0</ns>
    <id>345</id>
    <revision>
      <id>553</id>
      <timestamp>2008-02-29T12:09:36Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Effects bit: &lt;pre&gt; float EF_SELECTABLE = 16384; // allows cursor to highlight entity (brighten) &lt;/pre&gt;  Field definitions: &lt;pre&gt; .float cursor_active;        // True if cl_prydoncursor mod...</comment>
      <text xml:space="preserve" bytes="1449">Effects bit:
&lt;pre&gt;
float EF_SELECTABLE = 16384; // allows cursor to highlight entity (brighten)
&lt;/pre&gt;

Field definitions:
&lt;pre&gt;
.float cursor_active;        // True if cl_prydoncursor mode is on
.vector cursor_screen; // Screen position of cursor as -1 to +1 in _x and _y (_z unused)
.vector cursor_trace_start;  // Position of camera
.vector cursor_trace_endpos; // Position of cursor in world (as traced from camera)
.entity cursor_trace_ent;    // Entity the cursor is pointing at (server forces this to 
                             // world if the entity is currently free at time of receipt)
&lt;/pre&gt;

Cvar definitions:
&lt;pre&gt;
cl_prydoncursor (0/1+, default 0, 1 and above use cursors named 
   gfx/prydoncursor%03i.lmp - or .tga and such if DP_GFX_EXTERNALTEXTURES is implemented)
&lt;/pre&gt;

Shows that the engine supports the cl_prydoncursor cvar, this puts a clientside mouse pointer on the screen and feeds input to the server for the QuakeC to use as it sees fit.

The mouse pointer triggers button4 if cursor is at left edge of screen, button5 if at right edge of screen, button6 if at top edge of screen, button7 if at bottom edge of screen.

The clientside trace skips transparent entities (except those marked EF_SELECTABLE).

The selected entity highlights only if EF_SELECTABLE is set, a typical selection method would be doubling the brightness of the entity by some means (such as colormod[] *= 2).

Intended to be used by Prydon Gate.</text>
      <sha1>aglyzut7gjm1k7u79ig8n1jy991mel4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Pentagram of Protection</title>
    <ns>0</ns>
    <id>410</id>
    <revision>
      <id>697</id>
      <timestamp>2008-05-07T19:56:23Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: Evil, evil, evil. You can't be hurt - by anything. The only disadvantage to this is it scares the living bejesus out of anyone within half a mile, which makes it a little difficult to get ...</comment>
      <text xml:space="preserve" bytes="569">Evil, evil, evil. You can't be hurt - by anything. The only disadvantage to this is it scares the living bejesus out of anyone within half a mile, which makes it a little difficult to get frags. The best way to avoid being lonely is to avoid being hurt - you will make a loud sound that screams &quot;Run!&quot; to any seasoned Quake player whenever the pentagram is damaged. Use rockets if you can, because they deal the most damage and can't hurt you now. Grenades also tend to become more useful. For laughs, take a dive into a pool with 100 cells and your trusty thunderbolt.</text>
      <sha1>3d7u1fbuhaxf600xfoetqqhrwsj2hha</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>883</id>
      <parentid>697</parentid>
      <timestamp>2008-06-18T21:50:12Z</timestamp>
      <contributor>
        <ip>65.66.150.198</ip>
      </contributor>
      <text xml:space="preserve" bytes="586">Evil, evil, evil. You can't be hurt - by anything. The only disadvantage to this is it scares the living bejesus out of anyone within half a mile, which makes it a little difficult to get frags. The best way to avoid being lonely is to avoid being hurt - you will make a loud sound that screams &quot;Run!&quot; to any seasoned Quake player whenever the pentagram is damaged. Use rockets if you can, because they deal the most damage and can't hurt you now. Grenades also tend to become more useful. For laughs, take a dive into a pool with 100 cells and your trusty thunderbolt.

{{Quake items}}</text>
      <sha1>aymsop9x3i5512hdistwe848gwjhy3k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>897</id>
      <parentid>883</parentid>
      <timestamp>2008-07-01T11:31:15Z</timestamp>
      <contributor>
        <ip>195.199.147.174</ip>
      </contributor>
      <text xml:space="preserve" bytes="590">Evil, evil, evil. You can't be hurt - by anything. The only disadvantage to this is it scares the living bejesus out of anyone within half a mile, which makes it a little difficult to get frags. The best way to avoid being lonely is to avoid being hurt - you will make a loud sound that screams &quot;Run!&quot; to any seasoned Quake player whenever the pentagram is damaged. Use rockets if you can, because they deal the most damage and can't hurt you now. Grenades also tend to become more useful. For laughs, take a dive into a pool with 100 cells and your trusty [[Thunderbolt]].

{{Quake items}}</text>
      <sha1>040a1d2v7qkpqjekvd6j9ilc3aa1snd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Pointcontents</title>
    <ns>0</ns>
    <id>391</id>
    <revision>
      <id>662</id>
      <timestamp>2008-05-07T17:24:27Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: === Function: pointcontents ===   float pointcontents(vector pos)   Returns the contents of the area situated at position pos. Used to know if an area is in water, in slime or in lava. Mak...</comment>
      <text xml:space="preserve" bytes="244">=== Function: pointcontents ===
  float pointcontents(vector pos) 

Returns the contents of the area situated at position pos.
Used to know if an area is in water, in slime or in lava.
Makes use of the BSP tree, and is supposed to be very fast.</text>
      <sha1>h9aovot6ckqnu7oa6pmfcrjgtlzjzhh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Precache model</title>
    <ns>0</ns>
    <id>197</id>
    <revision>
      <id>373</id>
      <timestamp>2008-02-22T19:39:29Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  void '''precache_model'''(string ''file'')  ''file'' = name of the MDL or BSP file to include in PAK file.  Does nothing during game play. Must be used in a model's spawn function, to dec...</comment>
      <text xml:space="preserve" bytes="256"> void '''precache_model'''(string ''file'')

''file'' = name of the MDL or BSP file to include in PAK file.

Does nothing during game play.
Must be used in a model's spawn function, to declare the model file.
Use '''precache_model2''' for registered Quake.</text>
      <sha1>ggt8s8o1wnpf538nudd93uyrfd5901b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Precache sound</title>
    <ns>0</ns>
    <id>198</id>
    <revision>
      <id>374</id>
      <timestamp>2008-02-22T19:40:36Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  void '''precache_sound'''(string ''file'')  ''file'' = name of the WAV file to include in PAK file.  Does nothing during game play. Must be used in a model's spawn function, to declare th...</comment>
      <text xml:space="preserve" bytes="250"> void '''precache_sound'''(string ''file'')

''file'' = name of the WAV file to include in PAK file.

Does nothing during game play.
Must be used in a model's spawn function, to declare the sound files.
Use '''precache_sound2''' for registered Quake.</text>
      <sha1>lybvewo38hwrhrlrnkoecha1td9swf4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>ProQuake 4</title>
    <ns>0</ns>
    <id>578</id>
    <revision>
      <id>1502</id>
      <timestamp>2010-01-07T20:34:29Z</timestamp>
      <contributor>
        <ip>99.54.146.62</ip>
      </contributor>
      <comment>New page: ProQuake 4 is the official extension of JP Grossman's original ProQuake engine, which Grossman handed off in December 2007 and is maintained by Baker.  ProQuake is considered the baseline ...</comment>
      <text xml:space="preserve" bytes="3986">ProQuake 4 is the official extension of JP Grossman's original ProQuake engine, which Grossman handed off in December 2007 and is maintained by Baker.

ProQuake is considered the baseline standard in the NetQuake multiplayer community.

The original ProQuake had the following extended features:

1. High precision aim.
2. Ping in scoreboard.
3. NAT Fix.
4. &quot;Smoothcam&quot; features.
5. Client version detection.
6. IP address logging capability.
7. Support for CRMOD &quot;team scores feature&quot;, which is supported by Clan Arena X and Rune Quake.
8. RCON support (remote server console)
9. Clock display always visible to increase awareness of time limits.
10. Ability to stay connected to a ProQuake server without maps and models.
11. Best-weapon support
12. Record a demo at any time capability
13. Crosshair positioning

'''Cheat-Free Mode'''

Cheat-Free mode was a security dll verified way to authenticate the client to the server.  On Windows, this was a reasonably ensured on Windows that a client was unmodified and not using an assist patched or wallhacking client.  And while this proved a strong deterrent to hacked clients, did not protect against cheat-oriented drivers, like &quot;cheater&quot; opengl32.dll files which could have wallhack or aim assist capabilities.  An additional downside was that this cheat-free mode was only supported in ProQuake and caused users of other engines such as DarkPlaces or Qrack to be unable to participate on such servers.

In December 2007, the &quot;Anti-Wallhack&quot; feature in FTEQW was ported to ProQuake 3.91 and within a couple of weeks ended up installed on virtually every deathmatch oriented NetQuake server.  This proved to be a more effective assurance against at least wall hacking and due to the client-neutral nature of the server, was quickly and widely adopted.

Cheat-Free mode by the end of 2009 is essentially a retired and unused feature as a result.

The original ProQuake reached version 3.50 in Summer '02 and essentially stopped.

'''ProQuake 4'''

ProQuake 4 is a continuation of the original ProQuake meant to resolve many severe problems that have cropped up over the years.

1. FOV rendering issues
2. Widescreen support
3. CPU clock fix on Windows
4. Multiplatform support
5. Lack of a texture cache mismatch fix.
6. Countless other small and troublesome issues.

'''Goals'''

The goal of ProQuake 4 is essentially to lift the baseline standard of the NetQuake community.  As many users prefer the old GLQuake or WinQuake look, it is a &quot;Quake purist&quot; engine of choice for NetQuake multiplayer.

ProQuake 4 doesn't support any external media (replacement textures, colored lits, etc.) but does support 512x512 skyboxes and the Half-Life map format and basic fog support, but ProQuake 4 has a number of convenient features:

* Video mode switching
* Ability to switch to -dinput use on the fly
* Gamma adjustment on the fly
* Up and down volume sound keys (-/+)
* Vid_vsync on | off
* Countless small bug-fixes like SV_Touchlinks fix.
* AVI creation ability on Windows
* Windows, OS X, Linux builds (native -- not SDL builds).  [And actually a FlashQuake build].
* Support for 5 mouse buttons (both with and without DirectInput)
* Gamedir switching
* Clipboard copy
* Ability to render views in software renderer that old software engines cannot due too many surfaces

And with modestly extended MAX_EDICTS (2048) is capable of playing all the single player maps that JoeQuake and FitzQuake 0.80 are able to play, but without the radically extended limits supported by FitzQuake 0.85, DarkPlaces, aguirRe's Quake cannot play the 16-20 largest single player maps.

ProQuake 4 has several other enhanced features, but they default to OFF or are server side features that generally only interest server administrators.

* Interpolation (OFF by default, also known as animation smoothing)
* Fullbright texture support in GL version (OFF by defaults)

By modding standards, ProQuake 4 has no modding advantages over the original WinQuake.</text>
      <sha1>lf47g74ppustbmwqbt1tg89igee79wr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1503</id>
      <parentid>1502</parentid>
      <timestamp>2010-01-08T01:48:06Z</timestamp>
      <contributor>
        <ip>99.54.146.62</ip>
      </contributor>
      <text xml:space="preserve" bytes="3963">ProQuake 4 is the official extension of JP Grossman's original ProQuake engine, which Grossman handed off in December 2007 and is maintained by Baker.

ProQuake is considered the baseline standard in the NetQuake multiplayer community.

The original ProQuake had the following extended features:

# High precision aim.
# Ping in scoreboard.
# NAT Fix.
# &quot;Smoothcam&quot; features.
# Client version detection.
# IP address logging capability.
# Support for CRMOD &quot;team scores feature&quot;, which is supported by Clan Arena X and Rune Quake.
# RCON support (remote server console)
# Clock display always visible to increase awareness of time limits.
# Ability to stay connected to a ProQuake server without maps and models.
# Best-weapon support
# Record a demo at any time capability
# Crosshair positioning

'''Cheat-Free Mode'''

Cheat-Free mode was a security dll verified way to authenticate the client to the server.  On Windows, this was a reasonably ensured on Windows that a client was unmodified and not using an assist patched or wallhacking client.  And while this proved a strong deterrent to hacked clients, did not protect against cheat-oriented drivers, like &quot;cheater&quot; opengl32.dll files which could have wallhack or aim assist capabilities.  An additional downside was that this cheat-free mode was only supported in ProQuake and caused users of other engines such as DarkPlaces or Qrack to be unable to participate on such servers.

In December 2007, the &quot;Anti-Wallhack&quot; feature in FTEQW was ported to ProQuake 3.91 and within a couple of weeks ended up installed on virtually every deathmatch oriented NetQuake server.  This proved to be a more effective assurance against at least wall hacking and due to the client-neutral nature of the server, was quickly and widely adopted.

Cheat-Free mode by the end of 2009 is essentially a retired and unused feature as a result.

The original ProQuake reached version 3.50 in Summer '02 and essentially stopped.

'''ProQuake 4'''

ProQuake 4 is a continuation of the original ProQuake meant to resolve many severe problems that have cropped up over the years.

# FOV rendering issues
# Widescreen support
# CPU clock fix on Windows
# Multiplatform support
# Lack of a texture cache mismatch fix.
# Countless other small and troublesome issues.

'''Goals'''

The goal of ProQuake 4 is essentially to lift the baseline standard of the NetQuake community.  As many users prefer the old GLQuake or WinQuake look, it is a &quot;Quake purist&quot; engine of choice for NetQuake multiplayer.

ProQuake 4 doesn't support any external media (replacement textures, colored lits, etc.) but does support 512x512 skyboxes and the Half-Life map format and basic fog support, but ProQuake 4 has a number of convenient features:

* Video mode switching
* Ability to switch to -dinput use on the fly
* Gamma adjustment on the fly
* Up and down volume sound keys (-/+)
* Vid_vsync on | off
* Countless small bug-fixes like SV_Touchlinks fix.
* AVI creation ability on Windows
* Windows, OS X, Linux builds (native -- not SDL builds).  [And actually a FlashQuake build].
* Support for 5 mouse buttons (both with and without DirectInput)
* Gamedir switching
* Clipboard copy
* Ability to render views in software renderer that old software engines cannot due too many surfaces

And with modestly extended MAX_EDICTS (2048) is capable of playing all the single player maps that JoeQuake and FitzQuake 0.80 are able to play, but without the radically extended limits supported by FitzQuake 0.85, DarkPlaces, aguirRe's Quake cannot play the 16-20 largest single player maps.

ProQuake 4 has several other enhanced features, but they default to OFF or are server side features that generally only interest server administrators.

* Interpolation (OFF by default, also known as animation smoothing)
* Fullbright texture support in GL version (OFF by defaults)

By modding standards, ProQuake 4 has no modding advantages over the original WinQuake.</text>
      <sha1>abv12dt0bvtyuxiqtgngd5c14j1p6xl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1504</id>
      <parentid>1503</parentid>
      <timestamp>2010-01-08T01:49:07Z</timestamp>
      <contributor>
        <ip>99.54.146.62</ip>
      </contributor>
      <text xml:space="preserve" bytes="3967">ProQuake 4 is the official extension of JP Grossman's original ProQuake engine, which Grossman handed off in December 2007 and is maintained by Baker.

ProQuake is considered the baseline standard in the NetQuake multiplayer community.

The original ProQuake had the following extended features:

# High precision aim.
# Ping in scoreboard.
# NAT Fix.
# &quot;Smoothcam&quot; features.
# Client version detection.
# IP address logging capability.
# Support for CRMOD &quot;team scores feature&quot;, which is supported by Clan Arena X and Rune Quake.
# RCON support (remote server console)
# Clock display always visible to increase awareness of time limits.
# Ability to stay connected to a ProQuake server without maps and models.
# Best-weapon support
# Record a demo at any time capability
# Crosshair positioning

'''Cheat-Free Mode'''

Cheat-Free mode was a security dll verified way to authenticate the client to the server.  On Windows, this was a reasonably ensured on Windows that a client was unmodified and not using an aim assist patched or wallhacking client.  And while this proved a strong deterrent to hacked clients, did not protect against cheat-oriented drivers, like &quot;cheater&quot; opengl32.dll files which could have wallhack or aim assist capabilities.  An additional downside was that this cheat-free mode was only supported in ProQuake and caused users of other engines such as DarkPlaces or Qrack to be unable to participate on such servers.

In December 2007, the &quot;Anti-Wallhack&quot; feature in FTEQW was ported to ProQuake 3.91 and within a couple of weeks ended up installed on virtually every deathmatch oriented NetQuake server.  This proved to be a more effective assurance against at least wall hacking and due to the client-neutral nature of the server, was quickly and widely adopted.

Cheat-Free mode by the end of 2009 is essentially a retired and unused feature as a result.

The original ProQuake reached version 3.50 in Summer '02 and essentially stopped.

'''ProQuake 4'''

ProQuake 4 is a continuation of the original ProQuake meant to resolve many severe problems that have cropped up over the years.

# FOV rendering issues
# Widescreen support
# CPU clock fix on Windows
# Multiplatform support
# Lack of a texture cache mismatch fix.
# Countless other small and troublesome issues.

'''Goals'''

The goal of ProQuake 4 is essentially to lift the baseline standard of the NetQuake community.  As many users prefer the old GLQuake or WinQuake look, it is a &quot;Quake purist&quot; engine of choice for NetQuake multiplayer.

ProQuake 4 doesn't support any external media (replacement textures, colored lits, etc.) but does support 512x512 skyboxes and the Half-Life map format and basic fog support, but ProQuake 4 has a number of convenient features:

* Video mode switching
* Ability to switch to -dinput use on the fly
* Gamma adjustment on the fly
* Up and down volume sound keys (-/+)
* Vid_vsync on | off
* Countless small bug-fixes like SV_Touchlinks fix.
* AVI creation ability on Windows
* Windows, OS X, Linux builds (native -- not SDL builds).  [And actually a FlashQuake build].
* Support for 5 mouse buttons (both with and without DirectInput)
* Gamedir switching
* Clipboard copy
* Ability to render views in software renderer that old software engines cannot due too many surfaces

And with modestly extended MAX_EDICTS (2048) is capable of playing all the single player maps that JoeQuake and FitzQuake 0.80 are able to play, but without the radically extended limits supported by FitzQuake 0.85, DarkPlaces, aguirRe's Quake cannot play the 16-20 largest single player maps.

ProQuake 4 has several other enhanced features, but they default to OFF or are server side features that generally only interest server administrators.

* Interpolation (OFF by default, also known as animation smoothing)
* Fullbright texture support in GL version (OFF by defaults)

By modding standards, ProQuake 4 has no modding advantages over the original WinQuake.</text>
      <sha1>ra4s3korft5fhukfm8j9mwuesyrpc6a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1543</id>
      <parentid>1504</parentid>
      <timestamp>2010-01-12T13:00:35Z</timestamp>
      <contributor>
        <ip>99.54.146.62</ip>
      </contributor>
      <text xml:space="preserve" bytes="4198">ProQuake 4 is the official extension of JP Grossman's original ProQuake engine, which Grossman handed off in December 2007 and is maintained by Baker.

ProQuake is considered the baseline standard in the NetQuake multiplayer community.

ProQuake is compatible with original Quake, ProQuake clients can connect to original Quake servers, original Quake clients can connect to ProQuake servers and ProQuake demos and save games can be played in original Quake clients.

The original ProQuake had the following extended features:

# High precision aim.
# Ping in scoreboard.
# NAT Fix.
# &quot;Smoothcam&quot; features.
# Client version detection.
# IP address logging capability.
# Support for CRMOD &quot;team scores feature&quot;, which is supported by Clan Arena X and Rune Quake.
# RCON support (remote server console)
# Clock display always visible to increase awareness of time limits.
# Ability to stay connected to a ProQuake server without maps and models.
# Best-weapon support
# Record a demo at any time capability
# Crosshair positioning

'''Cheat-Free Mode'''

Cheat-Free mode was a security dll verified way to authenticate the client to the server.  On Windows, this was a reasonably ensured on Windows that a client was unmodified and not using an aim assist patched or wallhacking client.  And while this proved a strong deterrent to hacked clients, did not protect against cheat-oriented drivers, like &quot;cheater&quot; opengl32.dll files which could have wallhack or aim assist capabilities.  An additional downside was that this cheat-free mode was only supported in ProQuake and caused users of other engines such as DarkPlaces or Qrack to be unable to participate on such servers.

In December 2007, the &quot;Anti-Wallhack&quot; feature in FTEQW was ported to ProQuake 3.91 and within a couple of weeks ended up installed on virtually every deathmatch oriented NetQuake server.  This proved to be a more effective assurance against at least wall hacking and due to the client-neutral nature of the server, was quickly and widely adopted.

Cheat-Free mode by the end of 2009 is essentially a retired and unused feature as a result.

The original ProQuake reached version 3.50 in Summer '02 and essentially stopped.

'''ProQuake 4'''

ProQuake 4 is a continuation of the original ProQuake meant to resolve many severe problems that have cropped up over the years.

# FOV rendering issues
# Widescreen support
# CPU clock fix on Windows
# Multiplatform support
# Lack of a texture cache mismatch fix.
# Countless other small and troublesome issues.

'''Goals'''

The goal of ProQuake 4 is essentially to lift the baseline standard of the NetQuake community.  As many users prefer the old GLQuake or WinQuake look, it is a &quot;Quake purist&quot; engine of choice for NetQuake multiplayer.

ProQuake 4 doesn't support any external media (replacement textures, colored lits, etc.) but does support 512x512 skyboxes and the Half-Life map format and basic fog support, but ProQuake 4 has a number of convenient features:

* Video mode switching
* Ability to switch to -dinput use on the fly
* Gamma adjustment on the fly
* Up and down volume sound keys (-/+)
* Vid_vsync on | off
* Countless small bug-fixes like SV_Touchlinks fix.
* AVI creation ability on Windows
* Windows, OS X, Linux builds (native -- not SDL builds).  [And actually a FlashQuake build].
* Support for 5 mouse buttons (both with and without DirectInput)
* Gamedir switching
* Clipboard copy
* Ability to render views in software renderer that old software engines cannot due too many surfaces

And with modestly extended MAX_EDICTS (2048) is capable of playing all the single player maps that JoeQuake and FitzQuake 0.80 are able to play, but without the radically extended limits supported by FitzQuake 0.85, DarkPlaces, aguirRe's Quake cannot play the 16-20 largest single player maps.

ProQuake 4 has several other enhanced features, but they default to OFF or are server side features that generally only interest server administrators.

* Interpolation (OFF by default, also known as animation smoothing)
* Fullbright texture support in GL version (OFF by defaults)

By modding standards, ProQuake 4 has no modding advantages over the original WinQuake.</text>
      <sha1>kpymxulv8ornjrvjh9zxlki4wc0hh8c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1545</id>
      <parentid>1543</parentid>
      <timestamp>2010-01-12T13:07:01Z</timestamp>
      <contributor>
        <ip>99.54.146.62</ip>
      </contributor>
      <text xml:space="preserve" bytes="4235">ProQuake 4 is the official extension of JP Grossman's original ProQuake engine, which Grossman handed off in December 2007 and is maintained by Baker.

Site: http://quakeone.com/proquake/

ProQuake is considered the baseline standard in the NetQuake multiplayer community.

ProQuake is compatible with original Quake, ProQuake clients can connect to original Quake servers, original Quake clients can connect to ProQuake servers and ProQuake demos and save games can be played in original Quake clients.

The original ProQuake had the following extended features:

# High precision aim.
# Ping in scoreboard.
# NAT Fix.
# &quot;Smoothcam&quot; features.
# Client version detection.
# IP address logging capability.
# Support for CRMOD &quot;team scores feature&quot;, which is supported by Clan Arena X and Rune Quake.
# RCON support (remote server console)
# Clock display always visible to increase awareness of time limits.
# Ability to stay connected to a ProQuake server without maps and models.
# Best-weapon support
# Record a demo at any time capability
# Crosshair positioning

'''Cheat-Free Mode'''

Cheat-Free mode was a security dll verified way to authenticate the client to the server.  On Windows, this was a reasonably ensured on Windows that a client was unmodified and not using an aim assist patched or wallhacking client.  And while this proved a strong deterrent to hacked clients, did not protect against cheat-oriented drivers, like &quot;cheater&quot; opengl32.dll files which could have wallhack or aim assist capabilities.  An additional downside was that this cheat-free mode was only supported in ProQuake and caused users of other engines such as DarkPlaces or Qrack to be unable to participate on such servers.

In December 2007, the &quot;Anti-Wallhack&quot; feature in FTEQW was ported to ProQuake 3.91 and within a couple of weeks ended up installed on virtually every deathmatch oriented NetQuake server.  This proved to be a more effective assurance against at least wall hacking and due to the client-neutral nature of the server, was quickly and widely adopted.

Cheat-Free mode by the end of 2009 is essentially a retired and unused feature as a result.

The original ProQuake reached version 3.50 in Summer '02 and essentially stopped.

'''ProQuake 4'''

ProQuake 4 is a continuation of the original ProQuake meant to resolve many severe problems that have cropped up over the years.

# FOV rendering issues
# Widescreen support
# CPU clock fix on Windows
# Multiplatform support
# Lack of a texture cache mismatch fix.
# Countless other small and troublesome issues.

'''Goals'''

The goal of ProQuake 4 is essentially to lift the baseline standard of the NetQuake community.  As many users prefer the old GLQuake or WinQuake look, it is a &quot;Quake purist&quot; engine of choice for NetQuake multiplayer.

ProQuake 4 doesn't support any external media (replacement textures, colored lits, etc.) but does support 512x512 skyboxes and the Half-Life map format and basic fog support, but ProQuake 4 has a number of convenient features:

* Video mode switching
* Ability to switch to -dinput use on the fly
* Gamma adjustment on the fly
* Up and down volume sound keys (-/+)
* Vid_vsync on | off
* Countless small bug-fixes like SV_Touchlinks fix.
* AVI creation ability on Windows
* Windows, OS X, Linux builds (native -- not SDL builds).  [And actually a FlashQuake build].
* Support for 5 mouse buttons (both with and without DirectInput)
* Gamedir switching
* Clipboard copy
* Ability to render views in software renderer that old software engines cannot due too many surfaces

And with modestly extended MAX_EDICTS (2048) is capable of playing all the single player maps that JoeQuake and FitzQuake 0.80 are able to play, but without the radically extended limits supported by FitzQuake 0.85, DarkPlaces, aguirRe's Quake cannot play the 16-20 largest single player maps.

ProQuake 4 has several other enhanced features, but they default to OFF or are server side features that generally only interest server administrators.

* Interpolation (OFF by default, also known as animation smoothing)
* Fullbright texture support in GL version (OFF by defaults)

By modding standards, ProQuake 4 has no modding advantages over the original WinQuake.</text>
      <sha1>7n5vizf8awd7cbhafm6oykf9kqc0ib5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1546</id>
      <parentid>1545</parentid>
      <timestamp>2010-01-12T13:19:50Z</timestamp>
      <contributor>
        <ip>99.54.146.62</ip>
      </contributor>
      <text xml:space="preserve" bytes="4511">{{Infobox Engine
|name=ProQuake 4
|based-on=[[GLQuake]]
|author=[[Baker]]; previously [[JP Grossman]]
|first-release=[http://www.quakeone.com/proquake 2001]
|newest-release=[http://www.quakeone.com/proquake August 12 2209]
|website=[http://www.quakeone.com/proquake here]
}}

ProQuake 4 is the official extension of JP Grossman's original ProQuake engine, which Grossman handed off in December 2007 and is maintained by Baker.

Site: http://quakeone.com/proquake/

ProQuake is considered the baseline standard in the NetQuake multiplayer community.

ProQuake is compatible with original Quake, ProQuake clients can connect to original Quake servers, original Quake clients can connect to ProQuake servers and ProQuake demos and save games can be played in original Quake clients.

The original ProQuake had the following extended features:

# High precision aim.
# Ping in scoreboard.
# NAT Fix.
# &quot;Smoothcam&quot; features.
# Client version detection.
# IP address logging capability.
# Support for CRMOD &quot;team scores feature&quot;, which is supported by Clan Arena X and Rune Quake.
# RCON support (remote server console)
# Clock display always visible to increase awareness of time limits.
# Ability to stay connected to a ProQuake server without maps and models.
# Best-weapon support
# Record a demo at any time capability
# Crosshair positioning

'''Cheat-Free Mode'''

Cheat-Free mode was a security dll verified way to authenticate the client to the server.  On Windows, this was a reasonably ensured on Windows that a client was unmodified and not using an aim assist patched or wallhacking client.  And while this proved a strong deterrent to hacked clients, did not protect against cheat-oriented drivers, like &quot;cheater&quot; opengl32.dll files which could have wallhack or aim assist capabilities.  An additional downside was that this cheat-free mode was only supported in ProQuake and caused users of other engines such as DarkPlaces or Qrack to be unable to participate on such servers.

In December 2007, the &quot;Anti-Wallhack&quot; feature in FTEQW was ported to ProQuake 3.91 and within a couple of weeks ended up installed on virtually every deathmatch oriented NetQuake server.  This proved to be a more effective assurance against at least wall hacking and due to the client-neutral nature of the server, was quickly and widely adopted.

Cheat-Free mode by the end of 2009 is essentially a retired and unused feature as a result.

The original ProQuake reached version 3.50 in Summer '02 and essentially stopped.

'''ProQuake 4'''

ProQuake 4 is a continuation of the original ProQuake meant to resolve many severe problems that have cropped up over the years.

# FOV rendering issues
# Widescreen support
# CPU clock fix on Windows
# Multiplatform support
# Lack of a texture cache mismatch fix.
# Countless other small and troublesome issues.

'''Goals'''

The goal of ProQuake 4 is essentially to lift the baseline standard of the NetQuake community.  As many users prefer the old GLQuake or WinQuake look, it is a &quot;Quake purist&quot; engine of choice for NetQuake multiplayer.

ProQuake 4 doesn't support any external media (replacement textures, colored lits, etc.) but does support 512x512 skyboxes and the Half-Life map format and basic fog support, but ProQuake 4 has a number of convenient features:

* Video mode switching
* Ability to switch to -dinput use on the fly
* Gamma adjustment on the fly
* Up and down volume sound keys (-/+)
* Vid_vsync on | off
* Countless small bug-fixes like SV_Touchlinks fix.
* AVI creation ability on Windows
* Windows, OS X, Linux builds (native -- not SDL builds).  [And actually a FlashQuake build].
* Support for 5 mouse buttons (both with and without DirectInput)
* Gamedir switching
* Clipboard copy
* Ability to render views in software renderer that old software engines cannot due too many surfaces

And with modestly extended MAX_EDICTS (2048) is capable of playing all the single player maps that JoeQuake and FitzQuake 0.80 are able to play, but without the radically extended limits supported by FitzQuake 0.85, DarkPlaces, aguirRe's Quake cannot play the 16-20 largest single player maps.

ProQuake 4 has several other enhanced features, but they default to OFF or are server side features that generally only interest server administrators.

* Interpolation (OFF by default, also known as animation smoothing)
* Fullbright texture support in GL version (OFF by defaults)

By modding standards, ProQuake 4 has no modding advantages over the original WinQuake.</text>
      <sha1>5zkpsx13dqnc4cjgo0kuuzc0tfw2rqq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1547</id>
      <parentid>1546</parentid>
      <timestamp>2010-01-12T13:28:24Z</timestamp>
      <contributor>
        <ip>99.54.146.62</ip>
      </contributor>
      <text xml:space="preserve" bytes="4514">{{Infobox Engine
|name=ProQuake 4
|based-on=[[GLQuake]]
|author=[[Baker]]&lt;br&gt;[[J.P. Grossman]] thru 3.50
|first-release=[http://www.quakeone.com/proquake 2001]
|newest-release=[http://www.quakeone.com/proquake August 12 2209]
|website=[http://www.quakeone.com/proquake here]
}}

ProQuake 4 is the official extension of JP Grossman's original ProQuake engine, which Grossman handed off in December 2007 and is maintained by Baker.

Site: http://quakeone.com/proquake/

ProQuake is considered the baseline standard in the NetQuake multiplayer community.

ProQuake is compatible with original Quake, ProQuake clients can connect to original Quake servers, original Quake clients can connect to ProQuake servers and ProQuake demos and save games can be played in original Quake clients.

The original ProQuake had the following extended features:

# High precision aim.
# Ping in scoreboard.
# NAT Fix.
# &quot;Smoothcam&quot; features.
# Client version detection.
# IP address logging capability.
# Support for CRMOD &quot;team scores feature&quot;, which is supported by Clan Arena X and Rune Quake.
# RCON support (remote server console)
# Clock display always visible to increase awareness of time limits.
# Ability to stay connected to a ProQuake server without maps and models.
# Best-weapon support
# Record a demo at any time capability
# Crosshair positioning

'''Cheat-Free Mode'''

Cheat-Free mode was a security dll verified way to authenticate the client to the server.  On Windows, this was a reasonably ensured on Windows that a client was unmodified and not using an aim assist patched or wallhacking client.  And while this proved a strong deterrent to hacked clients, did not protect against cheat-oriented drivers, like &quot;cheater&quot; opengl32.dll files which could have wallhack or aim assist capabilities.  An additional downside was that this cheat-free mode was only supported in ProQuake and caused users of other engines such as DarkPlaces or Qrack to be unable to participate on such servers.

In December 2007, the &quot;Anti-Wallhack&quot; feature in FTEQW was ported to ProQuake 3.91 and within a couple of weeks ended up installed on virtually every deathmatch oriented NetQuake server.  This proved to be a more effective assurance against at least wall hacking and due to the client-neutral nature of the server, was quickly and widely adopted.

Cheat-Free mode by the end of 2009 is essentially a retired and unused feature as a result.

The original ProQuake reached version 3.50 in Summer '02 and essentially stopped.

'''ProQuake 4'''

ProQuake 4 is a continuation of the original ProQuake meant to resolve many severe problems that have cropped up over the years.

# FOV rendering issues
# Widescreen support
# CPU clock fix on Windows
# Multiplatform support
# Lack of a texture cache mismatch fix.
# Countless other small and troublesome issues.

'''Goals'''

The goal of ProQuake 4 is essentially to lift the baseline standard of the NetQuake community.  As many users prefer the old GLQuake or WinQuake look, it is a &quot;Quake purist&quot; engine of choice for NetQuake multiplayer.

ProQuake 4 doesn't support any external media (replacement textures, colored lits, etc.) but does support 512x512 skyboxes and the Half-Life map format and basic fog support, but ProQuake 4 has a number of convenient features:

* Video mode switching
* Ability to switch to -dinput use on the fly
* Gamma adjustment on the fly
* Up and down volume sound keys (-/+)
* Vid_vsync on | off
* Countless small bug-fixes like SV_Touchlinks fix.
* AVI creation ability on Windows
* Windows, OS X, Linux builds (native -- not SDL builds).  [And actually a FlashQuake build].
* Support for 5 mouse buttons (both with and without DirectInput)
* Gamedir switching
* Clipboard copy
* Ability to render views in software renderer that old software engines cannot due too many surfaces

And with modestly extended MAX_EDICTS (2048) is capable of playing all the single player maps that JoeQuake and FitzQuake 0.80 are able to play, but without the radically extended limits supported by FitzQuake 0.85, DarkPlaces, aguirRe's Quake cannot play the 16-20 largest single player maps.

ProQuake 4 has several other enhanced features, but they default to OFF or are server side features that generally only interest server administrators.

* Interpolation (OFF by default, also known as animation smoothing)
* Fullbright texture support in GL version (OFF by defaults)

By modding standards, ProQuake 4 has no modding advantages over the original WinQuake.</text>
      <sha1>3ya9w5y1ak0c0tnpf7v82f44g73mjl2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Proximity Bomb</title>
    <ns>0</ns>
    <id>487</id>
    <revision>
      <id>999</id>
      <timestamp>2009-05-22T09:01:37Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>plain copy'n'paste from old wiki</comment>
      <text xml:space="preserve" bytes="222">This weapon is a [[Grenade Launcher|grenade launcher]. It shoots a redish grenade, and it sticks to the ground. It will blow up in around 20 seconds, or whenever anything goes within it's range.

==See Also==
* [[Weapons]]</text>
      <sha1>fw2fqegoxqhabgr8h83e00xufy1un5z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1001</id>
      <parentid>999</parentid>
      <timestamp>2009-05-23T08:00:50Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="221">This weapon is a [Grenade Launcher|grenade launcher]. It shoots a redish grenade, and it sticks to the ground. It will blow up in around 20 seconds, or whenever anything goes within it's range.

==See Also==
* [[Weapons]]</text>
      <sha1>8zldck1i34ub0xmrh4meadke86a0pnh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1002</id>
      <parentid>1001</parentid>
      <timestamp>2009-05-23T08:00:58Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="223">This weapon is a [[Grenade Launcher|grenade launcher]]. It shoots a redish grenade, and it sticks to the ground. It will blow up in around 20 seconds, or whenever anything goes within it's range.

==See Also==
* [[Weapons]]</text>
      <sha1>66gpriu5lzsq27tgg8i0dzr6aobc4kc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QBSP</title>
    <ns>0</ns>
    <id>579</id>
    <revision>
      <id>1511</id>
      <timestamp>2010-01-11T07:57:23Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>New page: '''QBSP''' is the first stage of [[map compilation]]. It is the process that reads the [[map file]] and generates the [[bsp file]], and in doing so calculates all of the geometry and colli...</comment>
      <text xml:space="preserve" bytes="2007">'''QBSP''' is the first stage of [[map compilation]]. It is the process that reads the [[map file]] and generates the [[bsp file]], and in doing so calculates all of the geometry and collision data for the level. It also extracts any needed textures from the associated [[wad files]] and repackages them into the bsp file. After this step, the level can be loaded into the game engine. However, it will not have any lighting or visibility data until you run [[Light]] and [[Vis]].

==What QBSP Does==  
Using the [[brushes]] from the map file's [[worldspawn]] entity, it calculates the [[bsp tree]] that stores all visible surfaces in the game.  It also generates the [[collision hulls]], which are also bsp trees but do not have any visible surfaces, and are only used for collision detection.  For each additional [[entity]] that has brushes, it generates a [[submodel]] which also has its own [[collision hulls]].

Any textures needed by the level are copied into the bsp file from the associated wad files. At runtime, the engine will load textures from the bsp, not the wad files.

QBSP also generates a [[prt file]] containing the portal information necessary for Vis to run.  The prt file is not needed or used by the game engine. If a map has a [[leak]], QBSP will generate a [[pointfile]] instead of a prt file.  This file can be used by the game engine to display a visual trail of particles showing you where the leak is.  If a map has multiple leaks, QBSP will only find the first one.

==Using QBSP==
QBSP is a command-line tool, generally named qbsp.exe.  You can invoke it from a command prompt, via a shortcut or batch file, or from the &quot;compile&quot; or &quot;build&quot; menus of some [[level editors]].

===Command-line options===
TODO

===Error Messages and Warnings===
TODO

===Updated Versions===
In addition to [[id Software]]'s official QBSP, there have been various unofficial versions that improve on the original or add additional features.  For a list of QBSP variants, see [[Compiling Tools]].</text>
      <sha1>den7wmk5jaiy42cifei0l0pu0rnpokm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1512</id>
      <parentid>1511</parentid>
      <timestamp>2010-01-11T08:00:59Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="2005">'''QBSP''' is the first stage of [[map compiling]]. It is the process that reads the [[map file]] and generates the [[bsp file]], and in doing so calculates all of the geometry and collision data for the level. It also extracts any needed textures from the associated [[wad files]] and repackages them into the bsp file. After this step, the level can be loaded into the game engine. However, it will not have any lighting or visibility data until you run [[Light]] and [[Vis]].

==What QBSP Does==  
Using the [[brushes]] from the map file's [[worldspawn]] entity, it calculates the [[bsp tree]] that stores all visible surfaces in the game.  It also generates the [[collision hulls]], which are also bsp trees but do not have any visible surfaces, and are only used for collision detection.  For each additional [[entity]] that has brushes, it generates a [[submodel]] which also has its own [[collision hulls]].

Any textures needed by the level are copied into the bsp file from the associated wad files. At runtime, the engine will load textures from the bsp, not the wad files.

QBSP also generates a [[prt file]] containing the portal information necessary for Vis to run.  The prt file is not needed or used by the game engine. If a map has a [[leak]], QBSP will generate a [[pointfile]] instead of a prt file.  This file can be used by the game engine to display a visual trail of particles showing you where the leak is.  If a map has multiple leaks, QBSP will only find the first one.

==Using QBSP==
QBSP is a command-line tool, generally named qbsp.exe.  You can invoke it from a command prompt, via a shortcut or batch file, or from the &quot;compile&quot; or &quot;build&quot; menus of some [[level editors]].

===Command-line options===
TODO

===Error Messages and Warnings===
TODO

===Updated Versions===
In addition to [[id Software]]'s official QBSP, there have been various unofficial versions that improve on the original or add additional features.  For a list of QBSP variants, see [[Compiling Tools]].</text>
      <sha1>si1exdvzr8tmye49lw2u5m9jp0vey71</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1513</id>
      <parentid>1512</parentid>
      <timestamp>2010-01-11T08:05:37Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="2043">'''QBSP''' is the first stage of [[map compiling]]. It is the process that reads the [[map file]] and generates the [[bsp file]], and in doing so calculates all of the geometry and collision data for the level. It also extracts any needed textures from the associated [[wad file]] (or files) and repackages them into the bsp file. After this step, the level can be loaded into the game engine. However, it will not have any lighting or visibility data until you run [[Light]] and [[Vis]].

==What QBSP Does==  
Using the [[brush|brushes]] from the map file's [[worldspawn]] entity, it calculates the [[bsp tree]] that stores all visible surfaces in the game.  It also generates the [[collision hull|collision hulls]], which are also bsp trees but do not have any visible surfaces, and are only used for collision detection.  For each additional [[entity]] that has brushes, it generates a [[submodel]] which also has its own collision hulls.

Any textures needed by the level are copied into the bsp file from the associated wad files. At runtime, the engine will load textures from the bsp, not the wad files.

QBSP also generates a [[prt file]] containing the portal information necessary for Vis to run.  The prt file is not needed or used by the game engine. If a map has a [[leak]], QBSP will generate a [[pointfile]] instead of a prt file.  This file can be used by the game engine to display a visual trail of particles showing you where the leak is.  If a map has multiple leaks, QBSP will only find the first one.

==Using QBSP==
QBSP is a command-line tool, generally named qbsp.exe.  You can invoke it from a command prompt, via a shortcut or batch file, or from the &quot;compile&quot; or &quot;build&quot; menus of some [[level editor|level editors]].

===Command-line options===
TODO

===Error Messages and Warnings===
TODO

===Updated Versions===
In addition to [[id Software]]'s official QBSP, there have been various unofficial versions that improve on the original or add additional features.  For a list of QBSP variants, see [[mapping tools]].</text>
      <sha1>86de4kivlxs5vmpr1k4xdpkzm16yrs4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1514</id>
      <parentid>1513</parentid>
      <timestamp>2010-01-11T08:06:03Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>/* What QBSP Does */</comment>
      <text xml:space="preserve" bytes="2042">'''QBSP''' is the first stage of [[map compiling]]. It is the process that reads the [[map file]] and generates the [[bsp file]], and in doing so calculates all of the geometry and collision data for the level. It also extracts any needed textures from the associated [[wad file]] (or files) and repackages them into the bsp file. After this step, the level can be loaded into the game engine. However, it will not have any lighting or visibility data until you run [[Light]] and [[Vis]].

==What QBSP Does==  
Using the [[brush|brushes]] from the map file's [[worldspawn]] entity, it calculates the [[bsp tree]] that stores all visible surfaces in the game.  It also generates the [[collision hull|collision hulls]], which are also bsp trees but do not have any visible surfaces, and are only used for collision detection.  For each additional [[entity]] that has brushes, it generates a [[submodel]] which also has its own collision hulls. Any textures needed by the level are copied into the bsp file from the associated wad files. At runtime, the engine will load textures from the bsp, not the wad files.

QBSP also generates a [[prt file]] containing the portal information necessary for Vis to run.  The prt file is not needed or used by the game engine. If a map has a [[leak]], QBSP will generate a [[pointfile]] instead of a prt file.  This file can be used by the game engine to display a visual trail of particles showing you where the leak is.  If a map has multiple leaks, QBSP will only find the first one.

==Using QBSP==
QBSP is a command-line tool, generally named qbsp.exe.  You can invoke it from a command prompt, via a shortcut or batch file, or from the &quot;compile&quot; or &quot;build&quot; menus of some [[level editor|level editors]].

===Command-line options===
TODO

===Error Messages and Warnings===
TODO

===Updated Versions===
In addition to [[id Software]]'s official QBSP, there have been various unofficial versions that improve on the original or add additional features.  For a list of QBSP variants, see [[mapping tools]].</text>
      <sha1>bskcylbky5wz5sw9odhmv3dluoaid1w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1526</id>
      <parentid>1514</parentid>
      <timestamp>2010-01-11T08:50:58Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="2064">'''QBSP''' is the first stage of [[map compiling]]. It is the process that reads the [[map file]] and generates the [[bsp file]], and in doing so calculates all of the geometry and collision data for the level. It also extracts any needed textures from the associated [[wad file]] (or files) and repackages them into the bsp file. After this step, the level can be loaded into the game engine. However, it will not have any lighting or visibility data until you run [[Light (map compiling)|Light]] and [[Vis]].

==What QBSP Does==  
Using the [[brush|brushes]] from the map file's [[worldspawn]] entity, it calculates the [[bsp tree]] that stores all visible surfaces in the game.  It also generates the [[collision hull|collision hulls]], which are also bsp trees but do not have any visible surfaces, and are only used for collision detection.  For each additional [[entity]] that has brushes, it generates a [[submodel]] which also has its own collision hulls. Any textures needed by the level are copied into the bsp file from the associated wad files. At runtime, the engine will load textures from the bsp, not the wad files.

QBSP also generates a [[prt file]] containing the portal information necessary for Vis to run.  The prt file is not needed or used by the game engine. If a map has a [[leak]], QBSP will generate a [[pointfile]] instead of a prt file.  This file can be used by the game engine to display a visual trail of particles showing you where the leak is.  If a map has multiple leaks, QBSP will only find the first one.

==Using QBSP==
QBSP is a command-line tool, generally named qbsp.exe.  You can invoke it from a command prompt, via a shortcut or batch file, or from the &quot;compile&quot; or &quot;build&quot; menus of some [[level editor|level editors]].

===Command-line options===
TODO

===Error Messages and Warnings===
TODO

===Updated Versions===
In addition to [[id Software]]'s official QBSP, there have been various unofficial versions that improve on the original or add additional features.  For a list of QBSP variants, see [[mapping tools]].</text>
      <sha1>bkihubjn87patdz2dfzk9750llauv4w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1907</id>
      <parentid>1526</parentid>
      <timestamp>2013-03-25T03:13:16Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>fixing misdirected links</comment>
      <text xml:space="preserve" bytes="2140">'''QBSP''' is the first stage of [[map compiling]]. It is the process that reads the [[Quake file formats|map file]] and generates the [[Quake file formats|bsp file]], and in doing so calculates all of the geometry and collision data for the level. It also extracts any needed textures from the associated [[Quake file formats|wad file]] (or files) and repackages them into the bsp file. After this step, the level can be loaded into the game engine. However, it will not have any lighting or visibility data until you run [[Light (map compiling)|Light]] and [[Vis]].

==What QBSP Does==  
Using the [[brush|brushes]] from the map file's [[worldspawn]] entity, it calculates the [[bsp tree]] that stores all visible surfaces in the game.  It also generates the [[collision hull|collision hulls]], which are also bsp trees but do not have any visible surfaces, and are only used for collision detection.  For each additional [[entity]] that has brushes, it generates a [[submodel]] which also has its own collision hulls. Any textures needed by the level are copied into the bsp file from the associated wad files. At runtime, the engine will load textures from the bsp, not the wad files.

QBSP also generates a [[Quake file formats|prt file]] containing the portal information necessary for Vis to run.  The prt file is not needed or used by the game engine. If a map has a [[leak]], QBSP will generate a [[pointfile]] instead of a prt file.  This file can be used by the game engine to display a visual trail of particles showing you where the leak is.  If a map has multiple leaks, QBSP will only find the first one.

==Using QBSP==
QBSP is a command-line tool, generally named qbsp.exe.  You can invoke it from a command prompt, via a shortcut or batch file, or from the &quot;compile&quot; or &quot;build&quot; menus of some [[level editor|level editors]].

===Command-line options===
TODO

===Error Messages and Warnings===
TODO

===Updated Versions===
In addition to [[id Software]]'s official QBSP, there have been various unofficial versions that improve on the original or add additional features.  For a list of QBSP variants, see [[mapping tools]].</text>
      <sha1>f2bl3ecqfsjrnnj1udpb6uw7wh6crs1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QCC</title>
    <ns>0</ns>
    <id>363</id>
    <revision>
      <id>595</id>
      <timestamp>2008-04-11T02:49:46Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: QCC is a short generic term for any QuakeC compiler program...</comment>
      <text xml:space="preserve" bytes="62">QCC is a short generic term for any QuakeC compiler program...</text>
      <sha1>jb7poh31j87f4stt7lyrehhjlnigyt9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>596</id>
      <parentid>595</parentid>
      <timestamp>2008-04-11T02:51:13Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="70">[[QCC]] is a short generic term for any [[QuakeC]] compiler program...</text>
      <sha1>jcjq1hjj46pnpatle8daf80rpvw5gx2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QPED</title>
    <ns>0</ns>
    <id>525</id>
    <redirect title="QPed" />
    <revision>
      <id>1218</id>
      <timestamp>2009-09-25T05:18:49Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <comment>[[QPED]] moved to [[QPed]]</comment>
      <text xml:space="preserve" bytes="18">#REDIRECT [[QPed]]</text>
      <sha1>6ydn4mi2981s8p0os764j1ui2552l64</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QPed</title>
    <ns>0</ns>
    <id>524</id>
    <revision>
      <id>1216</id>
      <timestamp>2009-09-25T05:18:34Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <comment>New page: [[Image:Qped.png|thumb|The basic QPed interface.]] '''QPed''' is a Win32 [[.pak]] editor written by Pete Callaway and released in 1998. It can open and save .pak files, import and export f...</comment>
      <text xml:space="preserve" bytes="726">[[Image:Qped.png|thumb|The basic QPed interface.]]
'''QPed''' is a Win32 [[.pak]] editor written by Pete Callaway and released in 1998. It can open and save .pak files, import and export files, as well as view [[.mdl]] models and play [[.wav]] sounds from inside .pak files.

== Issues ==
The model viewer has some issues (especially concerning rotating the camera), and the sound player locks the program until the sound finishes playing (so beware playing long sounds); but the program is still effective as a simple .pak file editor.

== Downloads ==
The original QPed site on [[PlanetQuake]] was taken down.

* [http://quakery.quakedev.com/qfiles/qped211.exe qped211.exe] (local download)

== See also ==
* [[Quake tools]]</text>
      <sha1>tq9i75tqowqsu7vpvft11gpwc2i8xme</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1217</id>
      <parentid>1216</parentid>
      <timestamp>2009-09-25T05:18:49Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>[[QPED]] moved to [[QPed]]</comment>
      <text xml:space="preserve" bytes="726">[[Image:Qped.png|thumb|The basic QPed interface.]]
'''QPed''' is a Win32 [[.pak]] editor written by Pete Callaway and released in 1998. It can open and save .pak files, import and export files, as well as view [[.mdl]] models and play [[.wav]] sounds from inside .pak files.

== Issues ==
The model viewer has some issues (especially concerning rotating the camera), and the sound player locks the program until the sound finishes playing (so beware playing long sounds); but the program is still effective as a simple .pak file editor.

== Downloads ==
The original QPed site on [[PlanetQuake]] was taken down.

* [http://quakery.quakedev.com/qfiles/qped211.exe qped211.exe] (local download)

== See also ==
* [[Quake tools]]</text>
      <sha1>tq9i75tqowqsu7vpvft11gpwc2i8xme</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QSB</title>
    <ns>0</ns>
    <id>586</id>
    <revision>
      <id>1551</id>
      <timestamp>2010-01-14T19:29:18Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <comment>New page: Testing</comment>
      <text xml:space="preserve" bytes="7">Testing</text>
      <sha1>0y6fo74wpzggx0rk83ppajkh1nfsjr1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1560</id>
      <parentid>1551</parentid>
      <timestamp>2010-01-25T01:49:50Z</timestamp>
      <contributor>
        <ip>83.226.254.64</ip>
      </contributor>
      <text xml:space="preserve" bytes="77">Quake Standards Base

=== TODO ===
Do stuff

==See Also==
* [[Engine Limits]]</text>
      <sha1>4pbfkg2fti44vc6zfoy9bgpeqyj31lp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1574</id>
      <parentid>1560</parentid>
      <timestamp>2010-02-06T17:46:06Z</timestamp>
      <contributor>
        <ip>83.226.254.64</ip>
      </contributor>
      <comment>First QSB draft</comment>
      <text xml:space="preserve" bytes="3821">Quake Standards Base (under construction)

=== TODO ===
Finalize spec

=== EXTENSIONS ===
QSB will support the [[checkextension]] system, to bring engines which don't already support it up to speed, hence all features will be listed as either existing extensions or new ones will be suggested.

Extensions are listed with descriptions within (sometimes stolen from their respective authors), and a description next to it if the extension differs from the requirement of the standard.

Extensions which make the engine incompatible with the default Quake protocol are noted with a warning, as this is still an ongoing discussion at the time of writing.


[[DP_CL_LOADSKY]] pcx with quake palette minimum for software engines, no limit on texture size and texture sizes do not need to match within the same skybox, loads from $game\env\

[[DP_GFX_SKYBOX]] pcx with quake palette minimum for software engines, no limit on texture size and texture sizes do not need to match within the same skybox, loads from $game\env\

[[DP_GFX_EXTERNALTEXTURES]] required for engines with hardware accelerated rendering, optional for software, attempt to load tga before pcx, pcx before lmp, lmp before wad, loading _diffuse _gloss _norm _bump and _luma are optional

[[DP_LITSUPPORT]] required for engines with hardware accelerated rendering

[[DP_BUTTONUSE]]

[[DP_CON_SET]]

[[DP_CON_SETA]]

[[DP_EF_ADDITIVE]] required for engines with hardware accelerated rendering '''(ALTERS NETWORK PROTOCOL)'''

[[DP_EF_FULLBRIGHT]] this includes support for fullbrights on textures in maps and on model skins '''(ALTERS NETWORK PROTOCOL)'''

[[DP_EF_NODEPTHTEST]]

[[DP_EF_NODRAW]]

[[DP_ENT_ALPHA]] full range required for engines with hardware accelerated rendering, software engines round off to the nearest of 25%, 50% and 75% alpha, based on a lookup table. For hardware accelerated engines this includes support for textures with alpha channels on bmodels and model skins. '''(ALTERS NETWORK PROTOCOL)'''

[[DP_ENT_SCALE]] '''(ALTERS NETWORK PROTOCOL)'''

[[DP_ENT_VIEWMODEL]]

[[DP_ENT_EXTERIORMODELTOCLIENT]]

[[DP_INPUTBUTTONS]]

[[DP_MONSTERWALK]] (this one is a maybe, because it doesn't make a lot of sense without SV_PlayerPhysics)

[[DP_MOVETYPEBOUNCEMISSILE]]

[[DP_MOVETYPEFOLLOW]]

[[DP_QC_CHANGEPITCH]]

[[DP_QC_CVAR_STRING]]

[[DP_QC_FINDFLAGS]]

[[DP_QC_FINDFLOAT]] (note, includes findentity)

[[DP_QC_MINMAXBOUND]]

[[DP_QC_UNLIMITEDTEMPSTRINGS]]

[[DP_QC_RANDOMVEC]]

[[DP_QC_TRACEBOX]]

[[DP_QC_TRACETOSS]] (it seems odd to me that this one needs an existing entity to base on, why?)

[[DP_QC_TRACE_MOVETYPE_WORLDONLY]]

[[DP_QC_VECTOANGLES_WITH_ROLL]]

[[DP_SND_DIRECTIONLESSATTNNONE]]

[[DP_SND_FAKETRACKS]] (is this useful without OGG Vorbis or mp3 support?)

[[DP_SOLIDCORPSE]]

[[DP_SV_DRAWONLYTOCLIENT]]

[[DP_SV_ENTITYCONTENTSTRANSITION]]

[[DP_SV_MOVETYPESTEP_LANDEVENT]]

[[DP_SV_POINTSOUND]]

[[DP_SV_NODRAWTOCLIENT]]

[[DP_SV_PRECACHEANYTIME]]

[[DP_SV_ROTATINGBMODEL]]

[[DP_TE_STANDARDEFFECTBUILTINS]]/[[FTE_TE_STANDARDEFFECTBUILTINS]] (depending on type of engine)

[[DP_VIEWZOOM]] '''(ALTERS NETWORK PROTOCOL)''' (can be implemented as a stat to avoid altering network protocol)

[[FRIK_FILE]] the DarkPlaces type, reading inside $game and $game/configs/ is prohibited, writing is restricted to $game/data/

[[KRIMZON_SV_PARSECLIENTCOMMAND]]

[[FTE_QC_CHECKPVS]]

[[FTE_STRINGS]] (this one's a maybe, is it overkill?)

[[NEH_RESTOREGAME]]

==== New suggested extensions ====
[[QSB_GAMEPLAYFIXES]]

[[QSB_FOG]]

[[QSB_MULTICONTENT]]

[[QSB_MOVINGSOUNDS]]

=== BUGFIXES ===
- render liquid textures of other sizes than 64x64 correctly

- fix rendering of models with large bounding-boxes disappearing at edges of screen

== See Also ==
* [[Engine Limits]]
* [[List of builtin functions]]
* [[QSG extensions]]</text>
      <sha1>bxjrd6mhrpr6qa0ipqimvrablj6vv6l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1575</id>
      <parentid>1574</parentid>
      <timestamp>2010-02-06T18:20:14Z</timestamp>
      <contributor>
        <ip>83.226.254.64</ip>
      </contributor>
      <text xml:space="preserve" bytes="5254">Quake Standards Base is a project which aims to raise the bar of basic Quake modding and mapping. The goal is to push engine devs to support features which are very specific to making mods and maps for Quake (such as increased map and entity limits, external textures and new builtins), rather than user-features (such as a better server browser in the menu, nicer particle effects and an FPS counter).

'''The spec is still a work in progress!'''

=== Todo ===
- Discuss the current suggested extensions listed below

- Should QSB care about network protocols? What about QuakeWorld? Restrict first version of QSB to the singleplayer experience?

=== Discussion ===
[http://forums.inside3d.com/viewtopic.php?t=1903 Suggestions for features on I3D]

[http://forums.inside3d.com/viewtopic.php?t=1953 Discuss existing features on I3D]

=== Increased Engine Limits ===
QSB will require some increased limits to bring engines to a more modern level of capability. This is still an ongoing discussion, as some of the limits are incompatible with the default Quake network protocol.

See [[Engine Limits]] for suggested QSB limits.

=== Supported Extensions ===
QSB will support the [[checkextension]] system, to bring engines which don't already support it up to speed, hence all features will be listed as either existing extensions or new ones will be suggested.

Extensions are listed with descriptions within (sometimes stolen from their respective authors), and a description next to it if the extension differs from the requirement of the standard.

Extensions which make the engine incompatible with the default Quake network protocol are noted with a warning, as this is still an ongoing discussion at the time of writing.

{| class=&quot;wikitable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! [[DP_CL_LOADSKY]]
| pcx with quake palette minimum for software engines, no limit on texture size and texture sizes do not need to match within the same skybox, loads from $game\env\
|-
! [[DP_GFX_SKYBOX]]
| pcx with quake palette minimum for software engines, no limit on texture size and texture sizes do not need to match within the same skybox, loads from $game\env\
|-
! [[DP_GFX_EXTERNALTEXTURES]]
| required for engines with hardware accelerated rendering, optional for software, attempt to load tga before pcx, pcx before lmp, lmp before wad, loading _diffuse _gloss _norm _bump and _luma are optional
|-
! [[DP_LITSUPPORT]]
| required for engines with hardware accelerated rendering
|-
! [[DP_BUTTONUSE]]
|
|-
! [[DP_CON_SET]]
|
|-
! [[DP_CON_SETA]]
|
|-
! [[DP_EF_ADDITIVE]]
| required for engines with hardware accelerated rendering '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_EF_FULLBRIGHT]]
| this includes support for fullbrights on textures in maps and on model skins '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_EF_NODEPTHTEST]]
|
|-
! [[DP_EF_NODRAW]]
|
|-
! [[DP_ENT_ALPHA]]
| full range required for engines with hardware accelerated rendering, software engines round off to the nearest of 25%, 50% and 75% alpha, based on a lookup table. For hardware accelerated engines this includes support for textures with alpha channels on bmodels and model skins. '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_ENT_SCALE]]
| '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_ENT_VIEWMODEL]]
|
|-
! [[DP_ENT_EXTERIORMODELTOCLIENT]]
|
|-
! [[DP_INPUTBUTTONS]]
|
|-
! [[DP_MONSTERWALK]]
| (this one is a maybe, because it doesn't make a lot of sense without SV_PlayerPhysics)
|-
! [[DP_MOVETYPEBOUNCEMISSILE]]
|
|-
! [[DP_MOVETYPEFOLLOW]]
|
|-
! [[DP_QC_CHANGEPITCH]]
|
|-
! [[DP_QC_CVAR_STRING]]
|
|-
! [[DP_QC_FINDFLAGS]]
|
|-
! [[DP_QC_FINDFLOAT]]
| (note, includes findentity)
|-
! [[DP_QC_MINMAXBOUND]]
|
|-
! [[DP_QC_UNLIMITEDTEMPSTRINGS]]
|
|-
! [[DP_QC_RANDOMVEC]]
|
|-
! [[DP_QC_TRACEBOX]]
|
|-
! [[DP_QC_TRACETOSS]]
| (it seems odd to me that this one needs an existing entity to base on, why?)
|-
! [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]
|
|-
! [[DP_QC_VECTOANGLES_WITH_ROLL]]
|
|-
! [[DP_SND_DIRECTIONLESSATTNNONE]]
|
|-
! [[DP_SND_FAKETRACKS]]
| (is this useful without OGG Vorbis or mp3 support?)
|-
! [[DP_SOLIDCORPSE]]
|
|-
! [[DP_SV_DRAWONLYTOCLIENT]]
|
|-
! [[DP_SV_ENTITYCONTENTSTRANSITION]]
|
|-
! [[DP_SV_MOVETYPESTEP_LANDEVENT]]
|
|-
! [[DP_SV_POINTSOUND]]
|
|-
! [[DP_SV_NODRAWTOCLIENT]]
|
|-
! [[DP_SV_PRECACHEANYTIME]]
|
|-
! [[DP_SV_ROTATINGBMODEL]]
|
|-
! [[DP_TE_STANDARDEFFECTBUILTINS]]

[[FTE_TE_STANDARDEFFECTBUILTINS]]
| (depending on type of engine)
|-
! [[DP_VIEWZOOM]]
| '''(ALTERS NETWORK PROTOCOL)''' (can be implemented as a stat to avoid altering network protocol)
|-
! [[FRIK_FILE]]
| the DarkPlaces type, reading inside $game and $game/configs/ is prohibited, writing is restricted to $game/data/
|-
! [[KRIMZON_SV_PARSECLIENTCOMMAND]]
|
|-
! [[FTE_QC_CHECKPVS]]
|
|-
! [[FTE_STRINGS]]
| (this one's a maybe, is it overkill?)
|-
! [[NEH_RESTOREGAME]]
|
|}

==== New Suggested Extensions ====
[[QSB_GAMEPLAYFIXES]]

[[QSB_FOG]]

[[QSB_MULTICONTENT]]

[[QSB_MOVINGSOUNDS]]

=== Bugfixes ===
- render liquid textures of other sizes than 64x64 correctly

- fix rendering of models with large bounding-boxes disappearing at edges of screen

== See Also ==
* [[Engine Limits]]
* [[List of builtin functions]]
* [[QSG extensions]]</text>
      <sha1>9nfu1w1ta4cmpa372u65uzgkl191uvc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1579</id>
      <parentid>1575</parentid>
      <timestamp>2010-02-06T20:10:38Z</timestamp>
      <contributor>
        <ip>83.226.254.64</ip>
      </contributor>
      <comment>Updated</comment>
      <text xml:space="preserve" bytes="7703">Quake Standards Base is a project which aims to raise the bar of basic Quake modding and mapping. The goal is to push engine devs to support features which are very specific to making mods and maps for Quake (such as increased map and entity limits, external textures and new builtins), rather than user-features (such as a better server browser in the menu, nicer particle effects and an FPS counter).

'''The spec is still a work in progress!'''

=== Thanks ===
* '''LordHavoc''' for dpextensions.qc, most features people seem to want were listed and described here
* '''Spike''' for the FTE Wiki
* '''frag.machine''' for the engine limits list
* '''Spirit''' for the [[Engine Limits]] page
* Everyone who's shown support, contributed with ideas and discussion

=== Todo ===
* Discuss the current suggested extensions listed below
* Should QSB care about network protocols?
* What about QuakeWorld and specific QuakeWorld features?

=== Discussion ===
[http://forums.inside3d.com/viewtopic.php?t=1903 Suggestions for features on I3D]

[http://forums.inside3d.com/viewtopic.php?t=1953 Discuss existing features on I3D]

=== Increased Engine Limits ===
QSB will require some increased limits to bring engines to a more modern level of capability. This is still an ongoing discussion, as some of the limits are incompatible with the default Quake network protocol.

{| class=&quot;wikitable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! Limit name !! Old limit !! New limit !! Note/Category
|-
! MAX_HANDLES
| 10 || 100 || File handling
|-
! MINIMUM_WIN_MEMORY
| 0x01000000 (16Mb) || 0x02000000 (32Mb) || Engine
|-
! MAXIMUM_WIN_MEMORY
| 0x04000000 (64Mb) || 0x08000000 (128Mb) || Engine
|-
! CON_TEXTSIZE
| 16384 || 262144 || ?
|-
! MAX_FARCLIP
| 4096 || INFINITE || Rendering
|-
! MAX_EDICTS
| 600 || 8192 (*) || Map limit
|-
! NET_MAXMESSAGE
| 8192 || 65536 (****) || Network
|-
! MAX_STATIC_ENTITIES
| 128 || 1024 || Map limit
|-
! MAX_MAP_LEAFS
| 8192 || 32768 (**) || Map limit
|-
! MAX_LIGHTMAPS
| 64 || 256 || Map limit
|-
! NUMSTACKSURFACES
| 800 || 8192 || Map limit
|-
! NUMSTACKEDGES
| 2400 || 8192 || Map limit
|-
! MAX_VISEDICTS
| 256 || MAX_EDICTS || Map limit
|-
! MAX_DATAGRAM
| 1024 || 32768 || ?
|-
! MAX_MSGLEN
| 8000 || 65536 (****) || Network
|-
! MAX_STACK_DEPTH
| 32 || 256 || ?
|-
! MAX_EFRAGS
| 640 || 2048 || Map limit
|-
! MAX_CHANNELS
| 128 || 512 || Sound
|-
! MAX_DYNAMIC_CHANNELS
| 8 || 128 || Sound
|-
! MAX_MAP_CLIPNODES
| 32767 || 65535 (**) || Map limit
|-
! MAX_GLTEXTURES
| 1024 || 2048 (***) || Rendering
|-
! MAX_TEMP_ENTITIES
| 64 || 1024 || Map limit
|-
! DYNAMIC_SIZE
| 49152 || 262144 || ?
|-
! MAX_BMODEL_VERTS
| 500 || 1000 || Map limit
|-
! MAX_BMODEL_EDGES
| 1000 || 3000 || Map limit
|-
! MAXALIASVERTS
| 1024(GL) 2000(SW) || 65536 || Model
|-
! MAXALIASTRIS
| 2048 || 65536 || Model
|-
! MAX_LBM_HEIGHT
| 480 || INFINITE || Model
|-
! ABSOLUTE_MIN_PARTICLES
| 512 || 1024 || ?
|-
! MAX_PARTICLES
| 2048 || 16384 || Rendering
|-
! MAX_MODELS
| 256 || 4096 (*) || Network
|-
! MAX_SOUNDS
| 256 || 4096 (*) || Network
|-
! MARKSURFACES
| 32767 || 65535 (**) || Map limit
|-
! FACES
| 32767 || 65535 (**) || Map limit
|-
! NODES
| 32767 || 65535 (**) || Map limit
|-
! MAX_BEAMS
| 24 || 256 || Rendering
|-
! MAX_DLIGHTS
| 32 || 128 || Rendering
|}
* (*) = requires new network protocol
* (**) = should be implemented in a non-hacky way (replacing short values with 32-bit ints)
* (***) = Hardware-rendering specific
* (****) = See FitzQuake README.TXT about multiplayer games sticking to 1400 bytes due network limitations

=== Supported Extensions ===
QSB will support the [[checkextension]] system, to bring engines which don't already support it up to speed, hence all features will be listed as either existing extensions or new ones will be suggested.

Extensions are listed with descriptions within (sometimes stolen from their respective authors), and a description next to it if the extension differs from the requirement of the standard.

Extensions which make the engine incompatible with the default Quake network protocol are noted with a warning, as this is still an ongoing discussion at the time of writing.

{| class=&quot;wikitable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! [[DP_CL_LOADSKY]]
| pcx with quake palette minimum for software engines, no limit on texture size and texture sizes do not need to match within the same skybox, loads from $game\env\
|-
! [[DP_GFX_SKYBOX]]
| pcx with quake palette minimum for software engines, no limit on texture size and texture sizes do not need to match within the same skybox, loads from $game\env\
|-
! [[DP_GFX_EXTERNALTEXTURES]]
| required for engines with hardware accelerated rendering, optional for software, attempt to load tga before pcx, pcx before lmp, lmp before wad, loading _diffuse _gloss _norm _bump and _luma are optional
|-
! [[DP_LITSUPPORT]]
| required for engines with hardware accelerated rendering
|-
! [[DP_BUTTONUSE]]
|
|-
! [[DP_CON_SET]]
|
|-
! [[DP_CON_SETA]]
|
|-
! [[DP_EF_ADDITIVE]]
| required for engines with hardware accelerated rendering '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_EF_FULLBRIGHT]]
| this includes support for fullbrights on textures in maps and on model skins '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_EF_NODEPTHTEST]]
|
|-
! [[DP_EF_NODRAW]]
|
|-
! [[DP_ENT_ALPHA]]
| full range required for engines with hardware accelerated rendering, software engines round off to the nearest of 25%, 50% and 75% alpha, based on a lookup table. For hardware accelerated engines this includes support for textures with alpha channels on bmodels and model skins. '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_ENT_SCALE]]
| '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_ENT_VIEWMODEL]]
|
|-
! [[DP_ENT_EXTERIORMODELTOCLIENT]]
|
|-
! [[DP_INPUTBUTTONS]]
|
|-
! [[DP_MONSTERWALK]]
| (this one is a maybe, because it doesn't make a lot of sense without SV_PlayerPhysics)
|-
! [[DP_MOVETYPEBOUNCEMISSILE]]
|
|-
! [[DP_MOVETYPEFOLLOW]]
|
|-
! [[DP_QC_CHANGEPITCH]]
|
|-
! [[DP_QC_CVAR_STRING]]
|
|-
! [[DP_QC_FINDFLAGS]]
|
|-
! [[DP_QC_FINDFLOAT]]
| (note, includes findentity)
|-
! [[DP_QC_MINMAXBOUND]]
|
|-
! [[DP_QC_UNLIMITEDTEMPSTRINGS]]
|
|-
! [[DP_QC_RANDOMVEC]]
|
|-
! [[DP_QC_TRACEBOX]]
|
|-
! [[DP_QC_TRACETOSS]]
| (it seems odd to me that this one needs an existing entity to base on, why?)
|-
! [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]
|
|-
! [[DP_QC_VECTOANGLES_WITH_ROLL]]
|
|-
! [[DP_SND_DIRECTIONLESSATTNNONE]]
|
|-
! [[DP_SND_FAKETRACKS]]
| (is this useful without OGG Vorbis or mp3 support?)
|-
! [[DP_SOLIDCORPSE]]
|
|-
! [[DP_SV_DRAWONLYTOCLIENT]]
|
|-
! [[DP_SV_ENTITYCONTENTSTRANSITION]]
|
|-
! [[DP_SV_MOVETYPESTEP_LANDEVENT]]
|
|-
! [[DP_SV_POINTSOUND]]
|
|-
! [[DP_SV_NODRAWTOCLIENT]]
|
|-
! [[DP_SV_PRECACHEANYTIME]]
|
|-
! [[DP_SV_ROTATINGBMODEL]]
|
|-
! [[DP_TE_STANDARDEFFECTBUILTINS]]

[[FTE_TE_STANDARDEFFECTBUILTINS]]
| (depending on type of engine)
|-
! [[DP_VIEWZOOM]]
| '''(ALTERS NETWORK PROTOCOL)''' (can be implemented as a stat to avoid altering network protocol)
|-
! [[FRIK_FILE]]
| the DarkPlaces type, reading inside $game and $game/configs/ is prohibited, writing is restricted to $game/data/
|-
! [[KRIMZON_SV_PARSECLIENTCOMMAND]]
|
|-
! [[FTE_QC_CHECKPVS]]
|
|-
! [[FTE_STRINGS]]
| (this one's a maybe, is it overkill?)
|-
! [[NEH_RESTOREGAME]]
|
|}

==== New Suggested Extensions ====
[[QSB_GAMEPLAYFIXES]]

[[QSB_FOG]]

[[QSB_MULTICONTENT]]

[[QSB_MOVINGSOUNDS]]

=== Bugfixes ===
* Render liquid textures of other sizes than 64x64 correctly
* Fix rendering of models with large bounding-boxes disappearing at edges of screen

== See Also ==
* [[Engine Limits]]
* [[List of builtin functions]]
* [[QSG extensions]]</text>
      <sha1>sg5h4sbn60bfssnmdsfitn1llbmv678</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1587</id>
      <parentid>1579</parentid>
      <timestamp>2010-02-06T20:28:06Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <text xml:space="preserve" bytes="8346">Quake Standards Base is a project which aims to raise the bar of basic Quake modding and mapping. The goal is to push engine devs to support features which are very specific to making mods and maps for Quake (such as increased map and entity limits, external textures and new builtins), rather than user-features (such as a better server browser in the menu, nicer particle effects and an FPS counter).

'''The spec is still a work in progress!'''

=== Thanks ===
* '''LordHavoc''' for dpextensions.qc, most features people seem to want were listed and described here
* '''Spike''' for the FTE Wiki
* '''frag.machine''' for the engine limits list
* '''Spirit''' for the [[Engine Limits]] page
* Everyone who's shown support, contributed with ideas and discussion

=== Todo ===
* Discuss the current suggested extensions listed below
* Should QSB care about network protocols?
* What about QuakeWorld and specific QuakeWorld features?

=== Discussion ===
[http://forums.inside3d.com/viewtopic.php?t=1903 Suggestions for features on I3D]

[http://forums.inside3d.com/viewtopic.php?t=1953 Discuss existing features on I3D]

=== Increased Engine Limits ===
QSB will require some increased limits to bring engines to a more modern level of capability. This is still an ongoing discussion, as some of the limits are incompatible with the default Quake network protocol.

{| class=&quot;wikitable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! Limit name !! Old limit !! New limit !! Note/Category
|-
! MAX_HANDLES
| 10 || 100 || File handling
|-
! MINIMUM_WIN_MEMORY
| 0x01000000 (16Mb) || 0x02000000 (32Mb) || Engine
|-
! MAXIMUM_WIN_MEMORY
| 0x04000000 (64Mb) || 0x08000000 (128Mb) || Engine
|-
! CON_TEXTSIZE
| 16384 || 262144 || ?
|-
! MAX_FARCLIP
| 4096 || INFINITE || Rendering
|-
! MAX_EDICTS
| 600 || 8192 (*) || Map limit
|-
! NET_MAXMESSAGE
| 8192 || 65536 (****) || Network
|-
! MAX_STATIC_ENTITIES
| 128 || 1024 || Map limit
|-
! MAX_MAP_LEAFS
| 8192 || 32768 (**) || Map limit
|-
! MAX_LIGHTMAPS
| 64 || 256 || Map limit
|-
! NUMSTACKSURFACES
| 800 || 8192 || Map limit
|-
! NUMSTACKEDGES
| 2400 || 8192 || Map limit
|-
! MAX_VISEDICTS
| 256 || MAX_EDICTS || Map limit
|-
! MAX_DATAGRAM
| 1024 || 32768 || ?
|-
! MAX_MSGLEN
| 8000 || 65536 (****) || Network
|-
! MAX_STACK_DEPTH
| 32 || 256 || ?
|-
! MAX_EFRAGS
| 640 || 2048 || Map limit
|-
! MAX_CHANNELS
| 128 || 512 || Sound
|-
! MAX_DYNAMIC_CHANNELS
| 8 || 128 || Sound
|-
! MAX_MAP_CLIPNODES
| 32767 || 65535 (**) || Map limit
|-
! MAX_GLTEXTURES
| 1024 || 2048 (***) || Rendering
|-
! MAX_TEMP_ENTITIES
| 64 || 1024 || Map limit
|-
! DYNAMIC_SIZE
| 49152 || 262144 || ?
|-
! MAX_BMODEL_VERTS
| 500 || 1000 || Map limit
|-
! MAX_BMODEL_EDGES
| 1000 || 3000 || Map limit
|-
! MAXALIASVERTS
| 1024(GL) 2000(SW) || 65536 || Model
|-
! MAXALIASTRIS
| 2048 || 65536 || Model
|-
! MAX_LBM_HEIGHT
| 480 || INFINITE || Model
|-
! ABSOLUTE_MIN_PARTICLES
| 512 || 1024 || ?
|-
! MAX_PARTICLES
| 2048 || 16384 || Rendering
|-
! MAX_MODELS
| 256 || 4096 (*) || Network
|-
! MAX_SOUNDS
| 256 || 4096 (*) || Network
|-
! MARKSURFACES
| 32767 || 65535 (**) || Map limit
|-
! FACES
| 32767 || 65535 (**) || Map limit
|-
! NODES
| 32767 || 65535 (**) || Map limit
|-
! MAX_BEAMS
| 24 || 256 || Rendering
|-
! MAX_DLIGHTS
| 32 || 128 || Rendering
|}
* (*) = requires new network protocol
* (**) = should be implemented in a non-hacky way (replacing short values with 32-bit ints)
* (***) = Hardware-rendering specific
* (****) = See FitzQuake README.TXT about multiplayer games sticking to 1400 bytes due network limitations

=== Supported Extensions ===
QSB will support the [[checkextension]] system, to bring engines which don't already support it up to speed, hence all features will be listed as either existing extensions or new ones will be suggested.

Extensions are listed with descriptions within (sometimes stolen from their respective authors), and a description next to it if the extension differs from the requirement of the standard.

Extensions which make the engine incompatible with the default Quake network protocol are noted with a warning, as this is still an ongoing discussion at the time of writing.

{| class=&quot;wikitable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! [[DP_CL_LOADSKY]]
| pcx with quake palette minimum for software engines, no limit on texture size and texture sizes do not need to match within the same skybox, loads from $game\env\
|-
! [[DP_GFX_SKYBOX]]
| pcx with quake palette minimum for software engines, no limit on texture size and texture sizes do not need to match within the same skybox, loads from $game\env\
|-
! [[DP_GFX_EXTERNALTEXTURES]]
| required for engines with hardware accelerated rendering, optional for software, attempt to load tga before pcx, pcx before lmp, lmp before wad, loading _diffuse _gloss _norm _bump and _luma are optional
|-
! [[DP_LITSUPPORT]]
| required for engines with hardware accelerated rendering
|-
! [[DP_BUTTONUSE]]
|
|-
! [[DP_CON_SET]]
|
|-
! [[DP_CON_SETA]]
|
|-
! [[DP_EF_ADDITIVE]]
| required for engines with hardware accelerated rendering '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_EF_FULLBRIGHT]]
| this includes support for fullbrights on textures in maps and on model skins '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_EF_NODEPTHTEST]]
|
|-
! [[DP_EF_NODRAW]]
|
|-
! [[DP_ENT_ALPHA]]
| full range required for engines with hardware accelerated rendering, software engines round off to the nearest of 25%, 50% and 75% alpha, based on a lookup table. For hardware accelerated engines this includes support for textures with alpha channels on bmodels and model skins. '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_ENT_SCALE]]
| '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_ENT_VIEWMODEL]]
|
|-
! [[DP_ENT_EXTERIORMODELTOCLIENT]]
|
|-
! [[DP_INPUTBUTTONS]]
|
|-
! [[DP_MONSTERWALK]]
| (this one is a maybe, because it doesn't make a lot of sense without SV_PlayerPhysics)
|-
! [[DP_MOVETYPEBOUNCEMISSILE]]
|
|-
! [[DP_MOVETYPEFOLLOW]]
|
|-
! [[DP_QC_CHANGEPITCH]]
|
|-
! [[DP_QC_CVAR_STRING]]
|
|-
! [[DP_QC_FINDFLAGS]]
|
|-
! [[DP_QC_FINDFLOAT]]
| (note, includes findentity)
|-
! [[DP_QC_MINMAXBOUND]]
|
|-
! [[DP_QC_UNLIMITEDTEMPSTRINGS]]
|
|-
! [[DP_QC_RANDOMVEC]]
|
|-
! [[DP_QC_TRACEBOX]]
|
|-
! [[DP_QC_TRACETOSS]]
| (it seems odd to me that this one needs an existing entity to base on, why?)
|-
! [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]
|
|-
! [[DP_QC_VECTOANGLES_WITH_ROLL]]
|
|-
! [[DP_SND_DIRECTIONLESSATTNNONE]]
|
|-
! [[DP_SND_FAKETRACKS]]
| (is this useful without OGG Vorbis or mp3 support?)
|-
! [[DP_SOLIDCORPSE]]
|
|-
! [[DP_SV_DRAWONLYTOCLIENT]]
|
|-
! [[DP_SV_ENTITYCONTENTSTRANSITION]]
|
|-
! [[DP_SV_MOVETYPESTEP_LANDEVENT]]
|
|-
! [[DP_SV_POINTSOUND]]
|
|-
! [[DP_SV_NODRAWTOCLIENT]]
|
|-
! [[DP_SV_PRECACHEANYTIME]]
|
|-
! [[DP_SV_ROTATINGBMODEL]]
|
|-
! [[DP_TE_STANDARDEFFECTBUILTINS]]

[[FTE_TE_STANDARDEFFECTBUILTINS]]
| (depending on type of engine)
|-
! [[DP_VIEWZOOM]]
| '''(ALTERS NETWORK PROTOCOL)''' (can be implemented as a stat to avoid altering network protocol)
|-
! [[FRIK_FILE]]
| the DarkPlaces type, reading inside $game and $game/configs/ is prohibited, writing is restricted to $game/data/
|-
! [[KRIMZON_SV_PARSECLIENTCOMMAND]]
|
|-
! [[FTE_QC_CHECKPVS]]
|
|-
! [[FTE_STRINGS]]
| (this one's a maybe, is it overkill?)
|-
! [[NEH_RESTOREGAME]]
|
|}

==== New Suggested Extensions ====
Some engines already support some of these features, but as they don't exist as extensions, new ones are suggested. Even engines already supporting the features would need to list them as extensions.

* [[QSB_GAMEPLAYFIXES]]
* [[QSB_FOG]]
* [[QSB_MOVINGSOUNDS]]

=== Misc. features ===
Some required features can't be categorized under anything else, they are listed below.

* '''Multicontent'''
Allows the user to specify multiple mod paths to read content from, with the last in line being the one loaded for play.

Example commandline: -game quoth -game mymod

This would make &quot;mymod&quot; be the current mod in play, but extra content is loaded from &quot;quoth&quot;. Extra content is sounds, models, sprites, textures, maps, more?

=== Bugfixes ===
* Render liquid textures of other sizes than 64x64 correctly
* Fix rendering of models with large bounding-boxes disappearing at edges of screen

== See Also ==
* [[Engine Limits]]
* [[List of builtin functions]]
* [[QSG extensions]]</text>
      <sha1>ipflpu0hdd5kh7xkpiimxtw9eg97z2v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1589</id>
      <parentid>1587</parentid>
      <timestamp>2010-02-06T20:31:27Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <comment>/* Bugfixes */</comment>
      <text xml:space="preserve" bytes="8385">Quake Standards Base is a project which aims to raise the bar of basic Quake modding and mapping. The goal is to push engine devs to support features which are very specific to making mods and maps for Quake (such as increased map and entity limits, external textures and new builtins), rather than user-features (such as a better server browser in the menu, nicer particle effects and an FPS counter).

'''The spec is still a work in progress!'''

=== Thanks ===
* '''LordHavoc''' for dpextensions.qc, most features people seem to want were listed and described here
* '''Spike''' for the FTE Wiki
* '''frag.machine''' for the engine limits list
* '''Spirit''' for the [[Engine Limits]] page
* Everyone who's shown support, contributed with ideas and discussion

=== Todo ===
* Discuss the current suggested extensions listed below
* Should QSB care about network protocols?
* What about QuakeWorld and specific QuakeWorld features?

=== Discussion ===
[http://forums.inside3d.com/viewtopic.php?t=1903 Suggestions for features on I3D]

[http://forums.inside3d.com/viewtopic.php?t=1953 Discuss existing features on I3D]

=== Increased Engine Limits ===
QSB will require some increased limits to bring engines to a more modern level of capability. This is still an ongoing discussion, as some of the limits are incompatible with the default Quake network protocol.

{| class=&quot;wikitable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! Limit name !! Old limit !! New limit !! Note/Category
|-
! MAX_HANDLES
| 10 || 100 || File handling
|-
! MINIMUM_WIN_MEMORY
| 0x01000000 (16Mb) || 0x02000000 (32Mb) || Engine
|-
! MAXIMUM_WIN_MEMORY
| 0x04000000 (64Mb) || 0x08000000 (128Mb) || Engine
|-
! CON_TEXTSIZE
| 16384 || 262144 || ?
|-
! MAX_FARCLIP
| 4096 || INFINITE || Rendering
|-
! MAX_EDICTS
| 600 || 8192 (*) || Map limit
|-
! NET_MAXMESSAGE
| 8192 || 65536 (****) || Network
|-
! MAX_STATIC_ENTITIES
| 128 || 1024 || Map limit
|-
! MAX_MAP_LEAFS
| 8192 || 32768 (**) || Map limit
|-
! MAX_LIGHTMAPS
| 64 || 256 || Map limit
|-
! NUMSTACKSURFACES
| 800 || 8192 || Map limit
|-
! NUMSTACKEDGES
| 2400 || 8192 || Map limit
|-
! MAX_VISEDICTS
| 256 || MAX_EDICTS || Map limit
|-
! MAX_DATAGRAM
| 1024 || 32768 || ?
|-
! MAX_MSGLEN
| 8000 || 65536 (****) || Network
|-
! MAX_STACK_DEPTH
| 32 || 256 || ?
|-
! MAX_EFRAGS
| 640 || 2048 || Map limit
|-
! MAX_CHANNELS
| 128 || 512 || Sound
|-
! MAX_DYNAMIC_CHANNELS
| 8 || 128 || Sound
|-
! MAX_MAP_CLIPNODES
| 32767 || 65535 (**) || Map limit
|-
! MAX_GLTEXTURES
| 1024 || 2048 (***) || Rendering
|-
! MAX_TEMP_ENTITIES
| 64 || 1024 || Map limit
|-
! DYNAMIC_SIZE
| 49152 || 262144 || ?
|-
! MAX_BMODEL_VERTS
| 500 || 1000 || Map limit
|-
! MAX_BMODEL_EDGES
| 1000 || 3000 || Map limit
|-
! MAXALIASVERTS
| 1024(GL) 2000(SW) || 65536 || Model
|-
! MAXALIASTRIS
| 2048 || 65536 || Model
|-
! MAX_LBM_HEIGHT
| 480 || INFINITE || Model
|-
! ABSOLUTE_MIN_PARTICLES
| 512 || 1024 || ?
|-
! MAX_PARTICLES
| 2048 || 16384 || Rendering
|-
! MAX_MODELS
| 256 || 4096 (*) || Network
|-
! MAX_SOUNDS
| 256 || 4096 (*) || Network
|-
! MARKSURFACES
| 32767 || 65535 (**) || Map limit
|-
! FACES
| 32767 || 65535 (**) || Map limit
|-
! NODES
| 32767 || 65535 (**) || Map limit
|-
! MAX_BEAMS
| 24 || 256 || Rendering
|-
! MAX_DLIGHTS
| 32 || 128 || Rendering
|}
* (*) = requires new network protocol
* (**) = should be implemented in a non-hacky way (replacing short values with 32-bit ints)
* (***) = Hardware-rendering specific
* (****) = See FitzQuake README.TXT about multiplayer games sticking to 1400 bytes due network limitations

=== Supported Extensions ===
QSB will support the [[checkextension]] system, to bring engines which don't already support it up to speed, hence all features will be listed as either existing extensions or new ones will be suggested.

Extensions are listed with descriptions within (sometimes stolen from their respective authors), and a description next to it if the extension differs from the requirement of the standard.

Extensions which make the engine incompatible with the default Quake network protocol are noted with a warning, as this is still an ongoing discussion at the time of writing.

{| class=&quot;wikitable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! [[DP_CL_LOADSKY]]
| pcx with quake palette minimum for software engines, no limit on texture size and texture sizes do not need to match within the same skybox, loads from $game\env\
|-
! [[DP_GFX_SKYBOX]]
| pcx with quake palette minimum for software engines, no limit on texture size and texture sizes do not need to match within the same skybox, loads from $game\env\
|-
! [[DP_GFX_EXTERNALTEXTURES]]
| required for engines with hardware accelerated rendering, optional for software, attempt to load tga before pcx, pcx before lmp, lmp before wad, loading _diffuse _gloss _norm _bump and _luma are optional
|-
! [[DP_LITSUPPORT]]
| required for engines with hardware accelerated rendering
|-
! [[DP_BUTTONUSE]]
|
|-
! [[DP_CON_SET]]
|
|-
! [[DP_CON_SETA]]
|
|-
! [[DP_EF_ADDITIVE]]
| required for engines with hardware accelerated rendering '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_EF_FULLBRIGHT]]
| this includes support for fullbrights on textures in maps and on model skins '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_EF_NODEPTHTEST]]
|
|-
! [[DP_EF_NODRAW]]
|
|-
! [[DP_ENT_ALPHA]]
| full range required for engines with hardware accelerated rendering, software engines round off to the nearest of 25%, 50% and 75% alpha, based on a lookup table. For hardware accelerated engines this includes support for textures with alpha channels on bmodels and model skins. '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_ENT_SCALE]]
| '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_ENT_VIEWMODEL]]
|
|-
! [[DP_ENT_EXTERIORMODELTOCLIENT]]
|
|-
! [[DP_INPUTBUTTONS]]
|
|-
! [[DP_MONSTERWALK]]
| (this one is a maybe, because it doesn't make a lot of sense without SV_PlayerPhysics)
|-
! [[DP_MOVETYPEBOUNCEMISSILE]]
|
|-
! [[DP_MOVETYPEFOLLOW]]
|
|-
! [[DP_QC_CHANGEPITCH]]
|
|-
! [[DP_QC_CVAR_STRING]]
|
|-
! [[DP_QC_FINDFLAGS]]
|
|-
! [[DP_QC_FINDFLOAT]]
| (note, includes findentity)
|-
! [[DP_QC_MINMAXBOUND]]
|
|-
! [[DP_QC_UNLIMITEDTEMPSTRINGS]]
|
|-
! [[DP_QC_RANDOMVEC]]
|
|-
! [[DP_QC_TRACEBOX]]
|
|-
! [[DP_QC_TRACETOSS]]
| (it seems odd to me that this one needs an existing entity to base on, why?)
|-
! [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]
|
|-
! [[DP_QC_VECTOANGLES_WITH_ROLL]]
|
|-
! [[DP_SND_DIRECTIONLESSATTNNONE]]
|
|-
! [[DP_SND_FAKETRACKS]]
| (is this useful without OGG Vorbis or mp3 support?)
|-
! [[DP_SOLIDCORPSE]]
|
|-
! [[DP_SV_DRAWONLYTOCLIENT]]
|
|-
! [[DP_SV_ENTITYCONTENTSTRANSITION]]
|
|-
! [[DP_SV_MOVETYPESTEP_LANDEVENT]]
|
|-
! [[DP_SV_POINTSOUND]]
|
|-
! [[DP_SV_NODRAWTOCLIENT]]
|
|-
! [[DP_SV_PRECACHEANYTIME]]
|
|-
! [[DP_SV_ROTATINGBMODEL]]
|
|-
! [[DP_TE_STANDARDEFFECTBUILTINS]]

[[FTE_TE_STANDARDEFFECTBUILTINS]]
| (depending on type of engine)
|-
! [[DP_VIEWZOOM]]
| '''(ALTERS NETWORK PROTOCOL)''' (can be implemented as a stat to avoid altering network protocol)
|-
! [[FRIK_FILE]]
| the DarkPlaces type, reading inside $game and $game/configs/ is prohibited, writing is restricted to $game/data/
|-
! [[KRIMZON_SV_PARSECLIENTCOMMAND]]
|
|-
! [[FTE_QC_CHECKPVS]]
|
|-
! [[FTE_STRINGS]]
| (this one's a maybe, is it overkill?)
|-
! [[NEH_RESTOREGAME]]
|
|}

==== New Suggested Extensions ====
Some engines already support some of these features, but as they don't exist as extensions, new ones are suggested. Even engines already supporting the features would need to list them as extensions.

* [[QSB_GAMEPLAYFIXES]]
* [[QSB_FOG]]
* [[QSB_MOVINGSOUNDS]]

=== Misc. features ===
Some required features can't be categorized under anything else, they are listed below.

* '''Multicontent'''
Allows the user to specify multiple mod paths to read content from, with the last in line being the one loaded for play.

Example commandline: -game quoth -game mymod

This would make &quot;mymod&quot; be the current mod in play, but extra content is loaded from &quot;quoth&quot;. Extra content is sounds, models, sprites, textures, maps, more?

=== Bugfixes ===
* Render liquid textures of other sizes than 64x64 correctly
* Allow sky textures of 4x2 and higher
* Fix rendering of models with large bounding-boxes disappearing at edges of screen

== See Also ==
* [[Engine Limits]]
* [[List of builtin functions]]
* [[QSG extensions]]</text>
      <sha1>s6gywa1ukzdhyzbxshzkz9vjs7rjdle</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1590</id>
      <parentid>1589</parentid>
      <timestamp>2010-02-06T20:32:42Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <comment>/* Increased Engine Limits */</comment>
      <text xml:space="preserve" bytes="8385">Quake Standards Base is a project which aims to raise the bar of basic Quake modding and mapping. The goal is to push engine devs to support features which are very specific to making mods and maps for Quake (such as increased map and entity limits, external textures and new builtins), rather than user-features (such as a better server browser in the menu, nicer particle effects and an FPS counter).

'''The spec is still a work in progress!'''

=== Thanks ===
* '''LordHavoc''' for dpextensions.qc, most features people seem to want were listed and described here
* '''Spike''' for the FTE Wiki
* '''frag.machine''' for the engine limits list
* '''Spirit''' for the [[Engine Limits]] page
* Everyone who's shown support, contributed with ideas and discussion

=== Todo ===
* Discuss the current suggested extensions listed below
* Should QSB care about network protocols?
* What about QuakeWorld and specific QuakeWorld features?

=== Discussion ===
[http://forums.inside3d.com/viewtopic.php?t=1903 Suggestions for features on I3D]

[http://forums.inside3d.com/viewtopic.php?t=1953 Discuss existing features on I3D]

=== Increased Engine Limits ===
QSB will require some increased limits to bring engines to a more modern level of capability. This is still an ongoing discussion, as some of the limits are incompatible with the default Quake network protocol.

{| class=&quot;wikitable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! Limit name !! Old limit !! New limit !! Note/Category
|-
! MAX_HANDLES
| 10 || 100 || File handling
|-
! MINIMUM_WIN_MEMORY
| 0x01000000 (16Mb) || 0x02000000 (32Mb) || Engine
|-
! MAXIMUM_WIN_MEMORY
| 0x04000000 (64Mb) || 0x08000000 (128Mb) || Engine
|-
! CON_TEXTSIZE
| 16384 || 262144 || ?
|-
! MAX_FARCLIP
| 4096 || INFINITE || Rendering
|-
! MAX_EDICTS
| 600 || 8192 (*) || Map limit
|-
! NET_MAXMESSAGE
| 8192 || 65536 (****) || Network
|-
! MAX_STATIC_ENTITIES
| 128 || 1024 || Map limit
|-
! MAX_MAP_LEAFS
| 8192 || 32768 (**) || Map limit
|-
! MAX_LIGHTMAPS
| 64 || 256 || Map limit
|-
! NUMSTACKSURFACES
| 800 || 8192 || Map limit
|-
! NUMSTACKEDGES
| 2400 || 8192 || Map limit
|-
! MAX_VISEDICTS
| 256 || MAX_EDICTS || Map limit
|-
! MAX_DATAGRAM
| 1024 || 32768 || ?
|-
! MAX_MSGLEN
| 8000 || 65536 (****) || Network
|-
! MAX_STACK_DEPTH
| 32 || 256 || ?
|-
! MAX_EFRAGS
| 640 || 2048 || Map limit
|-
! MAX_CHANNELS
| 128 || 512 || Sound
|-
! MAX_DYNAMIC_CHANNELS
| 8 || 128 || Sound
|-
! MAX_MAP_CLIPNODES
| 32767 || 65535 (**) || Map limit
|-
! MAX_GLTEXTURES
| 1024 || 2048 (***) || Rendering
|-
! MAX_TEMP_ENTITIES
| 64 || 1024 || Rendering
|-
! DYNAMIC_SIZE
| 49152 || 262144 || ?
|-
! MAX_BMODEL_VERTS
| 500 || 1000 || Map limit
|-
! MAX_BMODEL_EDGES
| 1000 || 3000 || Map limit
|-
! MAXALIASVERTS
| 1024(GL) 2000(SW) || 65536 || Model
|-
! MAXALIASTRIS
| 2048 || 65536 || Model
|-
! MAX_LBM_HEIGHT
| 480 || INFINITE || Model
|-
! ABSOLUTE_MIN_PARTICLES
| 512 || 1024 || ?
|-
! MAX_PARTICLES
| 2048 || 16384 || Rendering
|-
! MAX_MODELS
| 256 || 4096 (*) || Network
|-
! MAX_SOUNDS
| 256 || 4096 (*) || Network
|-
! MARKSURFACES
| 32767 || 65535 (**) || Map limit
|-
! FACES
| 32767 || 65535 (**) || Map limit
|-
! NODES
| 32767 || 65535 (**) || Map limit
|-
! MAX_BEAMS
| 24 || 256 || Rendering
|-
! MAX_DLIGHTS
| 32 || 128 || Rendering
|}
* (*) = requires new network protocol
* (**) = should be implemented in a non-hacky way (replacing short values with 32-bit ints)
* (***) = Hardware-rendering specific
* (****) = See FitzQuake README.TXT about multiplayer games sticking to 1400 bytes due network limitations

=== Supported Extensions ===
QSB will support the [[checkextension]] system, to bring engines which don't already support it up to speed, hence all features will be listed as either existing extensions or new ones will be suggested.

Extensions are listed with descriptions within (sometimes stolen from their respective authors), and a description next to it if the extension differs from the requirement of the standard.

Extensions which make the engine incompatible with the default Quake network protocol are noted with a warning, as this is still an ongoing discussion at the time of writing.

{| class=&quot;wikitable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! [[DP_CL_LOADSKY]]
| pcx with quake palette minimum for software engines, no limit on texture size and texture sizes do not need to match within the same skybox, loads from $game\env\
|-
! [[DP_GFX_SKYBOX]]
| pcx with quake palette minimum for software engines, no limit on texture size and texture sizes do not need to match within the same skybox, loads from $game\env\
|-
! [[DP_GFX_EXTERNALTEXTURES]]
| required for engines with hardware accelerated rendering, optional for software, attempt to load tga before pcx, pcx before lmp, lmp before wad, loading _diffuse _gloss _norm _bump and _luma are optional
|-
! [[DP_LITSUPPORT]]
| required for engines with hardware accelerated rendering
|-
! [[DP_BUTTONUSE]]
|
|-
! [[DP_CON_SET]]
|
|-
! [[DP_CON_SETA]]
|
|-
! [[DP_EF_ADDITIVE]]
| required for engines with hardware accelerated rendering '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_EF_FULLBRIGHT]]
| this includes support for fullbrights on textures in maps and on model skins '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_EF_NODEPTHTEST]]
|
|-
! [[DP_EF_NODRAW]]
|
|-
! [[DP_ENT_ALPHA]]
| full range required for engines with hardware accelerated rendering, software engines round off to the nearest of 25%, 50% and 75% alpha, based on a lookup table. For hardware accelerated engines this includes support for textures with alpha channels on bmodels and model skins. '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_ENT_SCALE]]
| '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_ENT_VIEWMODEL]]
|
|-
! [[DP_ENT_EXTERIORMODELTOCLIENT]]
|
|-
! [[DP_INPUTBUTTONS]]
|
|-
! [[DP_MONSTERWALK]]
| (this one is a maybe, because it doesn't make a lot of sense without SV_PlayerPhysics)
|-
! [[DP_MOVETYPEBOUNCEMISSILE]]
|
|-
! [[DP_MOVETYPEFOLLOW]]
|
|-
! [[DP_QC_CHANGEPITCH]]
|
|-
! [[DP_QC_CVAR_STRING]]
|
|-
! [[DP_QC_FINDFLAGS]]
|
|-
! [[DP_QC_FINDFLOAT]]
| (note, includes findentity)
|-
! [[DP_QC_MINMAXBOUND]]
|
|-
! [[DP_QC_UNLIMITEDTEMPSTRINGS]]
|
|-
! [[DP_QC_RANDOMVEC]]
|
|-
! [[DP_QC_TRACEBOX]]
|
|-
! [[DP_QC_TRACETOSS]]
| (it seems odd to me that this one needs an existing entity to base on, why?)
|-
! [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]
|
|-
! [[DP_QC_VECTOANGLES_WITH_ROLL]]
|
|-
! [[DP_SND_DIRECTIONLESSATTNNONE]]
|
|-
! [[DP_SND_FAKETRACKS]]
| (is this useful without OGG Vorbis or mp3 support?)
|-
! [[DP_SOLIDCORPSE]]
|
|-
! [[DP_SV_DRAWONLYTOCLIENT]]
|
|-
! [[DP_SV_ENTITYCONTENTSTRANSITION]]
|
|-
! [[DP_SV_MOVETYPESTEP_LANDEVENT]]
|
|-
! [[DP_SV_POINTSOUND]]
|
|-
! [[DP_SV_NODRAWTOCLIENT]]
|
|-
! [[DP_SV_PRECACHEANYTIME]]
|
|-
! [[DP_SV_ROTATINGBMODEL]]
|
|-
! [[DP_TE_STANDARDEFFECTBUILTINS]]

[[FTE_TE_STANDARDEFFECTBUILTINS]]
| (depending on type of engine)
|-
! [[DP_VIEWZOOM]]
| '''(ALTERS NETWORK PROTOCOL)''' (can be implemented as a stat to avoid altering network protocol)
|-
! [[FRIK_FILE]]
| the DarkPlaces type, reading inside $game and $game/configs/ is prohibited, writing is restricted to $game/data/
|-
! [[KRIMZON_SV_PARSECLIENTCOMMAND]]
|
|-
! [[FTE_QC_CHECKPVS]]
|
|-
! [[FTE_STRINGS]]
| (this one's a maybe, is it overkill?)
|-
! [[NEH_RESTOREGAME]]
|
|}

==== New Suggested Extensions ====
Some engines already support some of these features, but as they don't exist as extensions, new ones are suggested. Even engines already supporting the features would need to list them as extensions.

* [[QSB_GAMEPLAYFIXES]]
* [[QSB_FOG]]
* [[QSB_MOVINGSOUNDS]]

=== Misc. features ===
Some required features can't be categorized under anything else, they are listed below.

* '''Multicontent'''
Allows the user to specify multiple mod paths to read content from, with the last in line being the one loaded for play.

Example commandline: -game quoth -game mymod

This would make &quot;mymod&quot; be the current mod in play, but extra content is loaded from &quot;quoth&quot;. Extra content is sounds, models, sprites, textures, maps, more?

=== Bugfixes ===
* Render liquid textures of other sizes than 64x64 correctly
* Allow sky textures of 4x2 and higher
* Fix rendering of models with large bounding-boxes disappearing at edges of screen

== See Also ==
* [[Engine Limits]]
* [[List of builtin functions]]
* [[QSG extensions]]</text>
      <sha1>ttbdw2k2uhbj91i0hqq24wjvkrfkd9y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1591</id>
      <parentid>1590</parentid>
      <timestamp>2010-02-06T20:37:24Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <comment>/* Misc. features */</comment>
      <text xml:space="preserve" bytes="8515">Quake Standards Base is a project which aims to raise the bar of basic Quake modding and mapping. The goal is to push engine devs to support features which are very specific to making mods and maps for Quake (such as increased map and entity limits, external textures and new builtins), rather than user-features (such as a better server browser in the menu, nicer particle effects and an FPS counter).

'''The spec is still a work in progress!'''

=== Thanks ===
* '''LordHavoc''' for dpextensions.qc, most features people seem to want were listed and described here
* '''Spike''' for the FTE Wiki
* '''frag.machine''' for the engine limits list
* '''Spirit''' for the [[Engine Limits]] page
* Everyone who's shown support, contributed with ideas and discussion

=== Todo ===
* Discuss the current suggested extensions listed below
* Should QSB care about network protocols?
* What about QuakeWorld and specific QuakeWorld features?

=== Discussion ===
[http://forums.inside3d.com/viewtopic.php?t=1903 Suggestions for features on I3D]

[http://forums.inside3d.com/viewtopic.php?t=1953 Discuss existing features on I3D]

=== Increased Engine Limits ===
QSB will require some increased limits to bring engines to a more modern level of capability. This is still an ongoing discussion, as some of the limits are incompatible with the default Quake network protocol.

{| class=&quot;wikitable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! Limit name !! Old limit !! New limit !! Note/Category
|-
! MAX_HANDLES
| 10 || 100 || File handling
|-
! MINIMUM_WIN_MEMORY
| 0x01000000 (16Mb) || 0x02000000 (32Mb) || Engine
|-
! MAXIMUM_WIN_MEMORY
| 0x04000000 (64Mb) || 0x08000000 (128Mb) || Engine
|-
! CON_TEXTSIZE
| 16384 || 262144 || ?
|-
! MAX_FARCLIP
| 4096 || INFINITE || Rendering
|-
! MAX_EDICTS
| 600 || 8192 (*) || Map limit
|-
! NET_MAXMESSAGE
| 8192 || 65536 (****) || Network
|-
! MAX_STATIC_ENTITIES
| 128 || 1024 || Map limit
|-
! MAX_MAP_LEAFS
| 8192 || 32768 (**) || Map limit
|-
! MAX_LIGHTMAPS
| 64 || 256 || Map limit
|-
! NUMSTACKSURFACES
| 800 || 8192 || Map limit
|-
! NUMSTACKEDGES
| 2400 || 8192 || Map limit
|-
! MAX_VISEDICTS
| 256 || MAX_EDICTS || Map limit
|-
! MAX_DATAGRAM
| 1024 || 32768 || ?
|-
! MAX_MSGLEN
| 8000 || 65536 (****) || Network
|-
! MAX_STACK_DEPTH
| 32 || 256 || ?
|-
! MAX_EFRAGS
| 640 || 2048 || Map limit
|-
! MAX_CHANNELS
| 128 || 512 || Sound
|-
! MAX_DYNAMIC_CHANNELS
| 8 || 128 || Sound
|-
! MAX_MAP_CLIPNODES
| 32767 || 65535 (**) || Map limit
|-
! MAX_GLTEXTURES
| 1024 || 2048 (***) || Rendering
|-
! MAX_TEMP_ENTITIES
| 64 || 1024 || Rendering
|-
! DYNAMIC_SIZE
| 49152 || 262144 || ?
|-
! MAX_BMODEL_VERTS
| 500 || 1000 || Map limit
|-
! MAX_BMODEL_EDGES
| 1000 || 3000 || Map limit
|-
! MAXALIASVERTS
| 1024(GL) 2000(SW) || 65536 || Model
|-
! MAXALIASTRIS
| 2048 || 65536 || Model
|-
! MAX_LBM_HEIGHT
| 480 || INFINITE || Model
|-
! ABSOLUTE_MIN_PARTICLES
| 512 || 1024 || ?
|-
! MAX_PARTICLES
| 2048 || 16384 || Rendering
|-
! MAX_MODELS
| 256 || 4096 (*) || Network
|-
! MAX_SOUNDS
| 256 || 4096 (*) || Network
|-
! MARKSURFACES
| 32767 || 65535 (**) || Map limit
|-
! FACES
| 32767 || 65535 (**) || Map limit
|-
! NODES
| 32767 || 65535 (**) || Map limit
|-
! MAX_BEAMS
| 24 || 256 || Rendering
|-
! MAX_DLIGHTS
| 32 || 128 || Rendering
|}
* (*) = requires new network protocol
* (**) = should be implemented in a non-hacky way (replacing short values with 32-bit ints)
* (***) = Hardware-rendering specific
* (****) = See FitzQuake README.TXT about multiplayer games sticking to 1400 bytes due network limitations

=== Supported Extensions ===
QSB will support the [[checkextension]] system, to bring engines which don't already support it up to speed, hence all features will be listed as either existing extensions or new ones will be suggested.

Extensions are listed with descriptions within (sometimes stolen from their respective authors), and a description next to it if the extension differs from the requirement of the standard.

Extensions which make the engine incompatible with the default Quake network protocol are noted with a warning, as this is still an ongoing discussion at the time of writing.

{| class=&quot;wikitable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! [[DP_CL_LOADSKY]]
| pcx with quake palette minimum for software engines, no limit on texture size and texture sizes do not need to match within the same skybox, loads from $game\env\
|-
! [[DP_GFX_SKYBOX]]
| pcx with quake palette minimum for software engines, no limit on texture size and texture sizes do not need to match within the same skybox, loads from $game\env\
|-
! [[DP_GFX_EXTERNALTEXTURES]]
| required for engines with hardware accelerated rendering, optional for software, attempt to load tga before pcx, pcx before lmp, lmp before wad, loading _diffuse _gloss _norm _bump and _luma are optional
|-
! [[DP_LITSUPPORT]]
| required for engines with hardware accelerated rendering
|-
! [[DP_BUTTONUSE]]
|
|-
! [[DP_CON_SET]]
|
|-
! [[DP_CON_SETA]]
|
|-
! [[DP_EF_ADDITIVE]]
| required for engines with hardware accelerated rendering '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_EF_FULLBRIGHT]]
| this includes support for fullbrights on textures in maps and on model skins '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_EF_NODEPTHTEST]]
|
|-
! [[DP_EF_NODRAW]]
|
|-
! [[DP_ENT_ALPHA]]
| full range required for engines with hardware accelerated rendering, software engines round off to the nearest of 25%, 50% and 75% alpha, based on a lookup table. For hardware accelerated engines this includes support for textures with alpha channels on bmodels and model skins. '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_ENT_SCALE]]
| '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_ENT_VIEWMODEL]]
|
|-
! [[DP_ENT_EXTERIORMODELTOCLIENT]]
|
|-
! [[DP_INPUTBUTTONS]]
|
|-
! [[DP_MONSTERWALK]]
| (this one is a maybe, because it doesn't make a lot of sense without SV_PlayerPhysics)
|-
! [[DP_MOVETYPEBOUNCEMISSILE]]
|
|-
! [[DP_MOVETYPEFOLLOW]]
|
|-
! [[DP_QC_CHANGEPITCH]]
|
|-
! [[DP_QC_CVAR_STRING]]
|
|-
! [[DP_QC_FINDFLAGS]]
|
|-
! [[DP_QC_FINDFLOAT]]
| (note, includes findentity)
|-
! [[DP_QC_MINMAXBOUND]]
|
|-
! [[DP_QC_UNLIMITEDTEMPSTRINGS]]
|
|-
! [[DP_QC_RANDOMVEC]]
|
|-
! [[DP_QC_TRACEBOX]]
|
|-
! [[DP_QC_TRACETOSS]]
| (it seems odd to me that this one needs an existing entity to base on, why?)
|-
! [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]
|
|-
! [[DP_QC_VECTOANGLES_WITH_ROLL]]
|
|-
! [[DP_SND_DIRECTIONLESSATTNNONE]]
|
|-
! [[DP_SND_FAKETRACKS]]
| (is this useful without OGG Vorbis or mp3 support?)
|-
! [[DP_SOLIDCORPSE]]
|
|-
! [[DP_SV_DRAWONLYTOCLIENT]]
|
|-
! [[DP_SV_ENTITYCONTENTSTRANSITION]]
|
|-
! [[DP_SV_MOVETYPESTEP_LANDEVENT]]
|
|-
! [[DP_SV_POINTSOUND]]
|
|-
! [[DP_SV_NODRAWTOCLIENT]]
|
|-
! [[DP_SV_PRECACHEANYTIME]]
|
|-
! [[DP_SV_ROTATINGBMODEL]]
|
|-
! [[DP_TE_STANDARDEFFECTBUILTINS]]

[[FTE_TE_STANDARDEFFECTBUILTINS]]
| (depending on type of engine)
|-
! [[DP_VIEWZOOM]]
| '''(ALTERS NETWORK PROTOCOL)''' (can be implemented as a stat to avoid altering network protocol)
|-
! [[FRIK_FILE]]
| the DarkPlaces type, reading inside $game and $game/configs/ is prohibited, writing is restricted to $game/data/
|-
! [[KRIMZON_SV_PARSECLIENTCOMMAND]]
|
|-
! [[FTE_QC_CHECKPVS]]
|
|-
! [[FTE_STRINGS]]
| (this one's a maybe, is it overkill?)
|-
! [[NEH_RESTOREGAME]]
|
|}

==== New Suggested Extensions ====
Some engines already support some of these features, but as they don't exist as extensions, new ones are suggested. Even engines already supporting the features would need to list them as extensions.

* [[QSB_GAMEPLAYFIXES]]
* [[QSB_FOG]]
* [[QSB_MOVINGSOUNDS]]

=== Misc. features ===
Some required features can't be categorized under anything else, they are listed below.

* '''Multicontent'''
Allows the user to specify multiple mod paths to read content from, with the last in line being the one loaded for play.

Example commandline: -game quoth -game mymod

This would make &quot;mymod&quot; be the current mod in play, but extra content is loaded from &quot;quoth&quot;. Extra content is sounds, models, sprites, textures, maps, more?

* '''Higher precision origins and angles'''
Use floating point for origins and shorts for angles '''(ALTERS NETWORK PROTOCOL)'''

=== Bugfixes ===
* Render liquid textures of other sizes than 64x64 correctly
* Allow sky textures of 4x2 and higher
* Fix rendering of models with large bounding-boxes disappearing at edges of screen

== See Also ==
* [[Engine Limits]]
* [[List of builtin functions]]
* [[QSG extensions]]</text>
      <sha1>itm7re6p78fq5b3hgpmq6ovvxxk0hht</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1592</id>
      <parentid>1591</parentid>
      <timestamp>2010-02-06T21:03:07Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <comment>/* Supported Extensions */</comment>
      <text xml:space="preserve" bytes="8542">Quake Standards Base is a project which aims to raise the bar of basic Quake modding and mapping. The goal is to push engine devs to support features which are very specific to making mods and maps for Quake (such as increased map and entity limits, external textures and new builtins), rather than user-features (such as a better server browser in the menu, nicer particle effects and an FPS counter).

'''The spec is still a work in progress!'''

=== Thanks ===
* '''LordHavoc''' for dpextensions.qc, most features people seem to want were listed and described here
* '''Spike''' for the FTE Wiki
* '''frag.machine''' for the engine limits list
* '''Spirit''' for the [[Engine Limits]] page
* Everyone who's shown support, contributed with ideas and discussion

=== Todo ===
* Discuss the current suggested extensions listed below
* Should QSB care about network protocols?
* What about QuakeWorld and specific QuakeWorld features?

=== Discussion ===
[http://forums.inside3d.com/viewtopic.php?t=1903 Suggestions for features on I3D]

[http://forums.inside3d.com/viewtopic.php?t=1953 Discuss existing features on I3D]

=== Increased Engine Limits ===
QSB will require some increased limits to bring engines to a more modern level of capability. This is still an ongoing discussion, as some of the limits are incompatible with the default Quake network protocol.

{| class=&quot;wikitable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! Limit name !! Old limit !! New limit !! Note/Category
|-
! MAX_HANDLES
| 10 || 100 || File handling
|-
! MINIMUM_WIN_MEMORY
| 0x01000000 (16Mb) || 0x02000000 (32Mb) || Engine
|-
! MAXIMUM_WIN_MEMORY
| 0x04000000 (64Mb) || 0x08000000 (128Mb) || Engine
|-
! CON_TEXTSIZE
| 16384 || 262144 || ?
|-
! MAX_FARCLIP
| 4096 || INFINITE || Rendering
|-
! MAX_EDICTS
| 600 || 8192 (*) || Map limit
|-
! NET_MAXMESSAGE
| 8192 || 65536 (****) || Network
|-
! MAX_STATIC_ENTITIES
| 128 || 1024 || Map limit
|-
! MAX_MAP_LEAFS
| 8192 || 32768 (**) || Map limit
|-
! MAX_LIGHTMAPS
| 64 || 256 || Map limit
|-
! NUMSTACKSURFACES
| 800 || 8192 || Map limit
|-
! NUMSTACKEDGES
| 2400 || 8192 || Map limit
|-
! MAX_VISEDICTS
| 256 || MAX_EDICTS || Map limit
|-
! MAX_DATAGRAM
| 1024 || 32768 || ?
|-
! MAX_MSGLEN
| 8000 || 65536 (****) || Network
|-
! MAX_STACK_DEPTH
| 32 || 256 || ?
|-
! MAX_EFRAGS
| 640 || 2048 || Map limit
|-
! MAX_CHANNELS
| 128 || 512 || Sound
|-
! MAX_DYNAMIC_CHANNELS
| 8 || 128 || Sound
|-
! MAX_MAP_CLIPNODES
| 32767 || 65535 (**) || Map limit
|-
! MAX_GLTEXTURES
| 1024 || 2048 (***) || Rendering
|-
! MAX_TEMP_ENTITIES
| 64 || 1024 || Rendering
|-
! DYNAMIC_SIZE
| 49152 || 262144 || ?
|-
! MAX_BMODEL_VERTS
| 500 || 1000 || Map limit
|-
! MAX_BMODEL_EDGES
| 1000 || 3000 || Map limit
|-
! MAXALIASVERTS
| 1024(GL) 2000(SW) || 65536 || Model
|-
! MAXALIASTRIS
| 2048 || 65536 || Model
|-
! MAX_LBM_HEIGHT
| 480 || INFINITE || Model
|-
! ABSOLUTE_MIN_PARTICLES
| 512 || 1024 || ?
|-
! MAX_PARTICLES
| 2048 || 16384 || Rendering
|-
! MAX_MODELS
| 256 || 4096 (*) || Network
|-
! MAX_SOUNDS
| 256 || 4096 (*) || Network
|-
! MARKSURFACES
| 32767 || 65535 (**) || Map limit
|-
! FACES
| 32767 || 65535 (**) || Map limit
|-
! NODES
| 32767 || 65535 (**) || Map limit
|-
! MAX_BEAMS
| 24 || 256 || Rendering
|-
! MAX_DLIGHTS
| 32 || 128 || Rendering
|}
* (*) = requires new network protocol
* (**) = should be implemented in a non-hacky way (replacing short values with 32-bit ints)
* (***) = Hardware-rendering specific
* (****) = See FitzQuake README.TXT about multiplayer games sticking to 1400 bytes due network limitations

=== Supported Extensions ===
QSB will support the [[checkextension]] system, to bring engines which don't already support it up to speed, hence all features will be listed as either existing extensions or new ones will be suggested.

Extensions are listed with descriptions within (sometimes stolen from their respective authors), and a description next to it if the extension differs from the requirement of the standard.

Extensions which make the engine incompatible with the default Quake network protocol are noted with a warning, as this is still an ongoing discussion at the time of writing.

{| class=&quot;wikitable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! [[DP_CL_LOADSKY]]
| pcx with quake palette minimum for software engines, no limit on texture size and texture sizes do not need to match within the same skybox, loads from $game\env\
|-
! [[DP_GFX_SKYBOX]]
| pcx with quake palette minimum for software engines, no limit on texture size and texture sizes do not need to match within the same skybox, loads from $game\env\
|-
! [[DP_GFX_EXTERNALTEXTURES]]
| required for engines with hardware accelerated rendering, optional for software, attempt to load tga before pcx, pcx before lmp, lmp before wad, loading _diffuse _gloss _norm _bump and _luma are optional
|-
! [[DP_LITSUPPORT]]
| required for engines with hardware accelerated rendering
|-
! [[DP_BUTTONUSE]]
|
|-
! [[DP_CON_SET]]
|
|-
! [[DP_CON_SETA]]
|
|-
! [[DP_EF_ADDITIVE]]
| required for engines with hardware accelerated rendering '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_EF_FULLBRIGHT]]
| this includes support for fullbrights on textures in maps and on model skins '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_EF_NODEPTHTEST]]
|
|-
! [[DP_EF_NODRAW]]
|
|-
! [[DP_ENT_ALPHA]]
| full range required for engines with hardware accelerated rendering, software engines round off to the nearest of 25%, 50% and 75% alpha, based on a lookup table. For hardware accelerated engines this includes support for textures with alpha channels on bmodels and model skins. '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_ENT_SCALE]]
| '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_ENT_VIEWMODEL]]
|
|-
! [[DP_ENT_EXTERIORMODELTOCLIENT]]
|
|-
! [[DP_INPUTBUTTONS]]
|
|-
! [[DP_MONSTERWALK]]
| (this one is a maybe, because it doesn't make a lot of sense without SV_PlayerPhysics)
|-
! [[DP_MOVETYPEBOUNCEMISSILE]]
|
|-
! [[DP_MOVETYPEFOLLOW]]
|
|-
! [[DP_QC_CHANGEPITCH]]
|
|-
! [[DP_QC_CVAR_STRING]]
|
|-
! [[DP_QC_FINDFLAGS]]
|
|-
! [[DP_QC_FINDFLOAT]]
| (note, includes findentity)
|-
! [[DP_QC_MINMAXBOUND]]
|
|-
! [[DP_QC_UNLIMITEDTEMPSTRINGS]]
|
|-
! [[DP_QC_RANDOMVEC]]
|
|-
! [[DP_QC_TRACEBOX]]
|
|-
! [[DP_QC_TRACETOSS]]
| (it seems odd to me that this one needs an existing entity to base on, why?)
|-
! [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]
|
|-
! [[DP_QC_VECTOANGLES_WITH_ROLL]]
|
|-
! [[DP_QUAKE2_MODEL]]
|
|-
! [[DP_SND_DIRECTIONLESSATTNNONE]]
|
|-
! [[DP_SND_FAKETRACKS]]
| (is this useful without OGG Vorbis or mp3 support?)
|-
! [[DP_SOLIDCORPSE]]
|
|-
! [[DP_SV_DRAWONLYTOCLIENT]]
|
|-
! [[DP_SV_ENTITYCONTENTSTRANSITION]]
|
|-
! [[DP_SV_MOVETYPESTEP_LANDEVENT]]
|
|-
! [[DP_SV_POINTSOUND]]
|
|-
! [[DP_SV_NODRAWTOCLIENT]]
|
|-
! [[DP_SV_PRECACHEANYTIME]]
|
|-
! [[DP_SV_ROTATINGBMODEL]]
|
|-
! [[DP_TE_STANDARDEFFECTBUILTINS]]

[[FTE_TE_STANDARDEFFECTBUILTINS]]
| (depending on type of engine)
|-
! [[DP_VIEWZOOM]]
| '''(ALTERS NETWORK PROTOCOL)''' (can be implemented as a stat to avoid altering network protocol)
|-
! [[FRIK_FILE]]
| the DarkPlaces type, reading inside $game and $game/configs/ is prohibited, writing is restricted to $game/data/
|-
! [[KRIMZON_SV_PARSECLIENTCOMMAND]]
|
|-
! [[FTE_QC_CHECKPVS]]
|
|-
! [[FTE_STRINGS]]
| (this one's a maybe, is it overkill?)
|-
! [[NEH_RESTOREGAME]]
|
|}

==== New Suggested Extensions ====
Some engines already support some of these features, but as they don't exist as extensions, new ones are suggested. Even engines already supporting the features would need to list them as extensions.

* [[QSB_GAMEPLAYFIXES]]
* [[QSB_FOG]]
* [[QSB_MOVINGSOUNDS]]

=== Misc. features ===
Some required features can't be categorized under anything else, they are listed below.

* '''Multicontent'''
Allows the user to specify multiple mod paths to read content from, with the last in line being the one loaded for play.

Example commandline: -game quoth -game mymod

This would make &quot;mymod&quot; be the current mod in play, but extra content is loaded from &quot;quoth&quot;. Extra content is sounds, models, sprites, textures, maps, more?

* '''Higher precision origins and angles'''
Use floating point for origins and shorts for angles '''(ALTERS NETWORK PROTOCOL)'''

=== Bugfixes ===
* Render liquid textures of other sizes than 64x64 correctly
* Allow sky textures of 4x2 and higher
* Fix rendering of models with large bounding-boxes disappearing at edges of screen

== See Also ==
* [[Engine Limits]]
* [[List of builtin functions]]
* [[QSG extensions]]</text>
      <sha1>1xlm6z1ve4c13rpjuvy850i74kssvjo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1593</id>
      <parentid>1592</parentid>
      <timestamp>2010-02-07T22:34:15Z</timestamp>
      <contributor>
        <ip>95.209.171.185</ip>
      </contributor>
      <comment>/* Increased Engine Limits */</comment>
      <text xml:space="preserve" bytes="8611">Quake Standards Base is a project which aims to raise the bar of basic Quake modding and mapping. The goal is to push engine devs to support features which are very specific to making mods and maps for Quake (such as increased map and entity limits, external textures and new builtins), rather than user-features (such as a better server browser in the menu, nicer particle effects and an FPS counter).

'''The spec is still a work in progress!'''

=== Thanks ===
* '''LordHavoc''' for dpextensions.qc, most features people seem to want were listed and described here
* '''Spike''' for the FTE Wiki
* '''frag.machine''' for the engine limits list
* '''Spirit''' for the [[Engine Limits]] page
* Everyone who's shown support, contributed with ideas and discussion

=== Todo ===
* Discuss the current suggested extensions listed below
* Should QSB care about network protocols?
* What about QuakeWorld and specific QuakeWorld features?

=== Discussion ===
[http://forums.inside3d.com/viewtopic.php?t=1903 Suggestions for features on I3D]

[http://forums.inside3d.com/viewtopic.php?t=1953 Discuss existing features on I3D]

=== Increased Engine Limits ===
QSB will require some increased limits to bring engines to a more modern level of capability. This is still an ongoing discussion, as some of the limits are incompatible with the default Quake network protocol.

{| class=&quot;wikitable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! Limit name !! Old limit !! New limit !! Note/Category
|-
! MAX_HANDLES
| 10 || 100 || File handling
|-
! MINIMUM_WIN_MEMORY
| 0x01000000 (16Mb) || 0x02000000 (32Mb) || Engine
|-
! MAXIMUM_WIN_MEMORY
| 0x04000000 (64Mb) || 0x08000000 (128Mb) || Engine
|-
! CON_TEXTSIZE
| 16384 || 262144 || Engine (maybe not relevant)
|-
! MAX_FARCLIP
| 4096 || INFINITE || Rendering
|-
! MAX_EDICTS
| 600 || 8192 (*) || Map limit
|-
! NET_MAXMESSAGE
| 8192 || 65536 (****) || Network
|-
! MAX_STATIC_ENTITIES
| 128 || 1024 || Map limit
|-
! MAX_MAP_LEAFS
| 8192 || 32768 (**) || Map limit
|-
! MAX_LIGHTMAPS
| 64 || 256 || Map limit
|-
! NUMSTACKSURFACES
| 800 || 8192 || Map limit
|-
! NUMSTACKEDGES
| 2400 || 8192 || Map limit
|-
! MAX_VISEDICTS
| 256 || MAX_EDICTS || Map limit
|-
! MAX_DATAGRAM
| 1024 || 1400 || Network
|-
! MAX_MSGLEN
| 8000 || 65536 (****) || Network
|-
! MAX_STACK_DEPTH
| 32 || 256 || Engine
|-
! MAX_EFRAGS
| 640 || 2048 || Map limit
|-
! MAX_CHANNELS
| 128 || 512 || Sound
|-
! MAX_DYNAMIC_CHANNELS
| 8 || 128 || Sound
|-
! MAX_MAP_CLIPNODES
| 32767 || 65535 (**) || Map limit
|-
! MAX_GLTEXTURES
| 1024 || 2048 (***) || Rendering
|-
! MAX_TEMP_ENTITIES
| 64 || 1024 || Rendering
|-
! DYNAMIC_SIZE
| 49152 || 262144 || Engine
|-
! MAX_BMODEL_VERTS
| 500 || 1000 || Map limit
|-
! MAX_BMODEL_EDGES
| 1000 || 3000 || Map limit
|-
! MAXALIASVERTS
| 1024(GL) 2000(SW) || 65536 || Model
|-
! MAXALIASTRIS
| 2048 || 65536 || Model
|-
! MAX_LBM_HEIGHT
| 480 || 1024 || Model
|-
! ABSOLUTE_MIN_PARTICLES
| 512 || 1024 || Engine
|-
! MAX_PARTICLES
| 2048 || 16384 || Rendering
|-
! MAX_MODELS
| 256 || 4096 (*) || Network
|-
! MAX_SOUNDS
| 256 || 4096 (*) || Network
|-
! MARKSURFACES
| 32767 || 65535 (**) || Map limit
|-
! FACES
| 32767 || 65535 (**) || Map limit
|-
! NODES
| 32767 || 65535 (**) || Map limit
|-
! MAX_BEAMS
| 24 || 256 || Rendering
|-
! MAX_DLIGHTS
| 32 || 128 || Rendering (might be best left alone)
|}
* (*) = requires new network protocol
* (**) = should be implemented in a non-hacky way (replacing short values with 32-bit ints)
* (***) = Hardware-rendering specific
* (****) = See FitzQuake README.TXT about multiplayer games sticking to 1400 bytes due network limitations

=== Supported Extensions ===
QSB will support the [[checkextension]] system, to bring engines which don't already support it up to speed, hence all features will be listed as either existing extensions or new ones will be suggested.

Extensions are listed with descriptions within (sometimes stolen from their respective authors), and a description next to it if the extension differs from the requirement of the standard.

Extensions which make the engine incompatible with the default Quake network protocol are noted with a warning, as this is still an ongoing discussion at the time of writing.

{| class=&quot;wikitable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! [[DP_CL_LOADSKY]]
| pcx with quake palette minimum for software engines, no limit on texture size and texture sizes do not need to match within the same skybox, loads from $game\env\
|-
! [[DP_GFX_SKYBOX]]
| pcx with quake palette minimum for software engines, no limit on texture size and texture sizes do not need to match within the same skybox, loads from $game\env\
|-
! [[DP_GFX_EXTERNALTEXTURES]]
| required for engines with hardware accelerated rendering, optional for software, attempt to load tga before pcx, pcx before lmp, lmp before wad, loading _diffuse _gloss _norm _bump and _luma are optional
|-
! [[DP_LITSUPPORT]]
| required for engines with hardware accelerated rendering
|-
! [[DP_BUTTONUSE]]
|
|-
! [[DP_CON_SET]]
|
|-
! [[DP_CON_SETA]]
|
|-
! [[DP_EF_ADDITIVE]]
| required for engines with hardware accelerated rendering '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_EF_FULLBRIGHT]]
| this includes support for fullbrights on textures in maps and on model skins '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_EF_NODEPTHTEST]]
|
|-
! [[DP_EF_NODRAW]]
|
|-
! [[DP_ENT_ALPHA]]
| full range required for engines with hardware accelerated rendering, software engines round off to the nearest of 25%, 50% and 75% alpha, based on a lookup table. For hardware accelerated engines this includes support for textures with alpha channels on bmodels and model skins. '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_ENT_SCALE]]
| '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_ENT_VIEWMODEL]]
|
|-
! [[DP_ENT_EXTERIORMODELTOCLIENT]]
|
|-
! [[DP_INPUTBUTTONS]]
|
|-
! [[DP_MONSTERWALK]]
| (this one is a maybe, because it doesn't make a lot of sense without SV_PlayerPhysics)
|-
! [[DP_MOVETYPEBOUNCEMISSILE]]
|
|-
! [[DP_MOVETYPEFOLLOW]]
|
|-
! [[DP_QC_CHANGEPITCH]]
|
|-
! [[DP_QC_CVAR_STRING]]
|
|-
! [[DP_QC_FINDFLAGS]]
|
|-
! [[DP_QC_FINDFLOAT]]
| (note, includes findentity)
|-
! [[DP_QC_MINMAXBOUND]]
|
|-
! [[DP_QC_UNLIMITEDTEMPSTRINGS]]
|
|-
! [[DP_QC_RANDOMVEC]]
|
|-
! [[DP_QC_TRACEBOX]]
|
|-
! [[DP_QC_TRACETOSS]]
| (it seems odd to me that this one needs an existing entity to base on, why?)
|-
! [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]
|
|-
! [[DP_QC_VECTOANGLES_WITH_ROLL]]
|
|-
! [[DP_QUAKE2_MODEL]]
|
|-
! [[DP_SND_DIRECTIONLESSATTNNONE]]
|
|-
! [[DP_SND_FAKETRACKS]]
| (is this useful without OGG Vorbis or mp3 support?)
|-
! [[DP_SOLIDCORPSE]]
|
|-
! [[DP_SV_DRAWONLYTOCLIENT]]
|
|-
! [[DP_SV_ENTITYCONTENTSTRANSITION]]
|
|-
! [[DP_SV_MOVETYPESTEP_LANDEVENT]]
|
|-
! [[DP_SV_POINTSOUND]]
|
|-
! [[DP_SV_NODRAWTOCLIENT]]
|
|-
! [[DP_SV_PRECACHEANYTIME]]
|
|-
! [[DP_SV_ROTATINGBMODEL]]
|
|-
! [[DP_TE_STANDARDEFFECTBUILTINS]]

[[FTE_TE_STANDARDEFFECTBUILTINS]]
| (depending on type of engine)
|-
! [[DP_VIEWZOOM]]
| '''(ALTERS NETWORK PROTOCOL)''' (can be implemented as a stat to avoid altering network protocol)
|-
! [[FRIK_FILE]]
| the DarkPlaces type, reading inside $game and $game/configs/ is prohibited, writing is restricted to $game/data/
|-
! [[KRIMZON_SV_PARSECLIENTCOMMAND]]
|
|-
! [[FTE_QC_CHECKPVS]]
|
|-
! [[FTE_STRINGS]]
| (this one's a maybe, is it overkill?)
|-
! [[NEH_RESTOREGAME]]
|
|}

==== New Suggested Extensions ====
Some engines already support some of these features, but as they don't exist as extensions, new ones are suggested. Even engines already supporting the features would need to list them as extensions.

* [[QSB_GAMEPLAYFIXES]]
* [[QSB_FOG]]
* [[QSB_MOVINGSOUNDS]]

=== Misc. features ===
Some required features can't be categorized under anything else, they are listed below.

* '''Multicontent'''
Allows the user to specify multiple mod paths to read content from, with the last in line being the one loaded for play.

Example commandline: -game quoth -game mymod

This would make &quot;mymod&quot; be the current mod in play, but extra content is loaded from &quot;quoth&quot;. Extra content is sounds, models, sprites, textures, maps, more?

* '''Higher precision origins and angles'''
Use floating point for origins and shorts for angles '''(ALTERS NETWORK PROTOCOL)'''

=== Bugfixes ===
* Render liquid textures of other sizes than 64x64 correctly
* Allow sky textures of 4x2 and higher
* Fix rendering of models with large bounding-boxes disappearing at edges of screen

== See Also ==
* [[Engine Limits]]
* [[List of builtin functions]]
* [[QSG extensions]]</text>
      <sha1>2karp3426yr9beemacnbvir4us73wck</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1594</id>
      <parentid>1593</parentid>
      <timestamp>2010-02-07T22:36:30Z</timestamp>
      <contributor>
        <ip>95.209.171.185</ip>
      </contributor>
      <comment>/* Supported Extensions */</comment>
      <text xml:space="preserve" bytes="8779">Quake Standards Base is a project which aims to raise the bar of basic Quake modding and mapping. The goal is to push engine devs to support features which are very specific to making mods and maps for Quake (such as increased map and entity limits, external textures and new builtins), rather than user-features (such as a better server browser in the menu, nicer particle effects and an FPS counter).

'''The spec is still a work in progress!'''

=== Thanks ===
* '''LordHavoc''' for dpextensions.qc, most features people seem to want were listed and described here
* '''Spike''' for the FTE Wiki
* '''frag.machine''' for the engine limits list
* '''Spirit''' for the [[Engine Limits]] page
* Everyone who's shown support, contributed with ideas and discussion

=== Todo ===
* Discuss the current suggested extensions listed below
* Should QSB care about network protocols?
* What about QuakeWorld and specific QuakeWorld features?

=== Discussion ===
[http://forums.inside3d.com/viewtopic.php?t=1903 Suggestions for features on I3D]

[http://forums.inside3d.com/viewtopic.php?t=1953 Discuss existing features on I3D]

=== Increased Engine Limits ===
QSB will require some increased limits to bring engines to a more modern level of capability. This is still an ongoing discussion, as some of the limits are incompatible with the default Quake network protocol.

{| class=&quot;wikitable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! Limit name !! Old limit !! New limit !! Note/Category
|-
! MAX_HANDLES
| 10 || 100 || File handling
|-
! MINIMUM_WIN_MEMORY
| 0x01000000 (16Mb) || 0x02000000 (32Mb) || Engine
|-
! MAXIMUM_WIN_MEMORY
| 0x04000000 (64Mb) || 0x08000000 (128Mb) || Engine
|-
! CON_TEXTSIZE
| 16384 || 262144 || Engine (maybe not relevant)
|-
! MAX_FARCLIP
| 4096 || INFINITE || Rendering
|-
! MAX_EDICTS
| 600 || 8192 (*) || Map limit
|-
! NET_MAXMESSAGE
| 8192 || 65536 (****) || Network
|-
! MAX_STATIC_ENTITIES
| 128 || 1024 || Map limit
|-
! MAX_MAP_LEAFS
| 8192 || 32768 (**) || Map limit
|-
! MAX_LIGHTMAPS
| 64 || 256 || Map limit
|-
! NUMSTACKSURFACES
| 800 || 8192 || Map limit
|-
! NUMSTACKEDGES
| 2400 || 8192 || Map limit
|-
! MAX_VISEDICTS
| 256 || MAX_EDICTS || Map limit
|-
! MAX_DATAGRAM
| 1024 || 1400 || Network
|-
! MAX_MSGLEN
| 8000 || 65536 (****) || Network
|-
! MAX_STACK_DEPTH
| 32 || 256 || Engine
|-
! MAX_EFRAGS
| 640 || 2048 || Map limit
|-
! MAX_CHANNELS
| 128 || 512 || Sound
|-
! MAX_DYNAMIC_CHANNELS
| 8 || 128 || Sound
|-
! MAX_MAP_CLIPNODES
| 32767 || 65535 (**) || Map limit
|-
! MAX_GLTEXTURES
| 1024 || 2048 (***) || Rendering
|-
! MAX_TEMP_ENTITIES
| 64 || 1024 || Rendering
|-
! DYNAMIC_SIZE
| 49152 || 262144 || Engine
|-
! MAX_BMODEL_VERTS
| 500 || 1000 || Map limit
|-
! MAX_BMODEL_EDGES
| 1000 || 3000 || Map limit
|-
! MAXALIASVERTS
| 1024(GL) 2000(SW) || 65536 || Model
|-
! MAXALIASTRIS
| 2048 || 65536 || Model
|-
! MAX_LBM_HEIGHT
| 480 || 1024 || Model
|-
! ABSOLUTE_MIN_PARTICLES
| 512 || 1024 || Engine
|-
! MAX_PARTICLES
| 2048 || 16384 || Rendering
|-
! MAX_MODELS
| 256 || 4096 (*) || Network
|-
! MAX_SOUNDS
| 256 || 4096 (*) || Network
|-
! MARKSURFACES
| 32767 || 65535 (**) || Map limit
|-
! FACES
| 32767 || 65535 (**) || Map limit
|-
! NODES
| 32767 || 65535 (**) || Map limit
|-
! MAX_BEAMS
| 24 || 256 || Rendering
|-
! MAX_DLIGHTS
| 32 || 128 || Rendering (might be best left alone)
|}
* (*) = requires new network protocol
* (**) = should be implemented in a non-hacky way (replacing short values with 32-bit ints)
* (***) = Hardware-rendering specific
* (****) = See FitzQuake README.TXT about multiplayer games sticking to 1400 bytes due network limitations

=== Supported Extensions ===
QSB will support the [[checkextension]] system, to bring engines which don't already support it up to speed, hence all features will be listed as either existing extensions or new ones will be suggested.

Extensions are listed with descriptions within (sometimes stolen from their respective authors), and a description next to it if the extension differs from the requirement of the standard.

Extensions which make the engine incompatible with the default Quake network protocol are noted with a warning, as this is still an ongoing discussion at the time of writing.

{| class=&quot;wikitable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! [[DP_CL_LOADSKY]]
| pcx with quake palette minimum for software engines, no limit on texture size and texture sizes do not need to match within the same skybox, loads from $game\env\
|-
! [[DP_GFX_SKYBOX]]
| pcx with quake palette minimum for software engines, no limit on texture size and texture sizes do not need to match within the same skybox, loads from $game\env\
|-
! [[DP_GFX_EXTERNALTEXTURES]]
| required for engines with hardware accelerated rendering, optional for software, attempt to load tga before pcx, pcx before lmp, lmp before wad, loading _diffuse _gloss _norm _bump and _luma are optional
|-
! [[DP_LITSUPPORT]]
| required for engines with hardware accelerated rendering
|-
! [[DP_BUTTONUSE]]
|
|-
! [[DP_CON_SET]]
|
|-
! [[DP_CON_SETA]]
|
|-
! [[DP_EF_ADDITIVE]]
| required for engines with hardware accelerated rendering '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_EF_FULLBRIGHT]]
| this includes support for fullbrights on textures in maps and on model skins '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_EF_NODEPTHTEST]]
|
|-
! [[DP_EF_NODRAW]]
|
|-
! [[DP_ENT_ALPHA]]
| full range required for engines with hardware accelerated rendering, software engines round off to the nearest of 25%, 50% and 75% alpha, based on a lookup table. This also includes r_wateralpha support. Bmodels with a water texture and an .alpha value will override r_wateralpha, and use its own value instead, like in FitzQuake. For hardware accelerated engines this includes support for textures with alpha channels on bmodels and model skins. '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_ENT_SCALE]]
| '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_ENT_VIEWMODEL]]
|
|-
! [[DP_ENT_EXTERIORMODELTOCLIENT]]
|
|-
! [[DP_INPUTBUTTONS]]
|
|-
! [[DP_MONSTERWALK]]
| (this one is a maybe, because it doesn't make a lot of sense without SV_PlayerPhysics)
|-
! [[DP_MOVETYPEBOUNCEMISSILE]]
|
|-
! [[DP_MOVETYPEFOLLOW]]
|
|-
! [[DP_QC_CHANGEPITCH]]
|
|-
! [[DP_QC_CVAR_STRING]]
|
|-
! [[DP_QC_FINDFLAGS]]
|
|-
! [[DP_QC_FINDFLOAT]]
| (note, includes findentity)
|-
! [[DP_QC_MINMAXBOUND]]
|
|-
! [[DP_QC_UNLIMITEDTEMPSTRINGS]]
|
|-
! [[DP_QC_RANDOMVEC]]
|
|-
! [[DP_QC_TRACEBOX]]
|
|-
! [[DP_QC_TRACETOSS]]
| (it seems odd to me that this one needs an existing entity to base on, why?)
|-
! [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]
|
|-
! [[DP_QC_VECTOANGLES_WITH_ROLL]]
|
|-
! [[DP_QUAKE2_MODEL]]
|
|-
! [[DP_SND_DIRECTIONLESSATTNNONE]]
|
|-
! [[DP_SND_FAKETRACKS]]
| (is this useful without OGG Vorbis or mp3 support?)
|-
! [[DP_SOLIDCORPSE]]
|
|-
! [[DP_SV_DRAWONLYTOCLIENT]]
|
|-
! [[DP_SV_ENTITYCONTENTSTRANSITION]]
|
|-
! [[DP_SV_MOVETYPESTEP_LANDEVENT]]
|
|-
! [[DP_SV_POINTSOUND]]
|
|-
! [[DP_SV_NODRAWTOCLIENT]]
|
|-
! [[DP_SV_PRECACHEANYTIME]]
|
|-
! [[DP_SV_ROTATINGBMODEL]]
|
|-
! [[DP_TE_STANDARDEFFECTBUILTINS]]

[[FTE_TE_STANDARDEFFECTBUILTINS]]
| (depending on type of engine)
|-
! [[DP_VIEWZOOM]]
| '''(ALTERS NETWORK PROTOCOL)''' (can be implemented as a stat to avoid altering network protocol)
|-
! [[FRIK_FILE]]
| the DarkPlaces type, reading inside $game and $game/configs/ is prohibited, writing is restricted to $game/data/
|-
! [[KRIMZON_SV_PARSECLIENTCOMMAND]]
|
|-
! [[FTE_QC_CHECKPVS]]
|
|-
! [[FTE_STRINGS]]
| (this one's a maybe, is it overkill?)
|-
! [[NEH_RESTOREGAME]]
|
|}

==== New Suggested Extensions ====
Some engines already support some of these features, but as they don't exist as extensions, new ones are suggested. Even engines already supporting the features would need to list them as extensions.

* [[QSB_GAMEPLAYFIXES]]
* [[QSB_FOG]]
* [[QSB_MOVINGSOUNDS]]

=== Misc. features ===
Some required features can't be categorized under anything else, they are listed below.

* '''Multicontent'''
Allows the user to specify multiple mod paths to read content from, with the last in line being the one loaded for play.

Example commandline: -game quoth -game mymod

This would make &quot;mymod&quot; be the current mod in play, but extra content is loaded from &quot;quoth&quot;. Extra content is sounds, models, sprites, textures, maps, more?

* '''Higher precision origins and angles'''
Use floating point for origins and shorts for angles '''(ALTERS NETWORK PROTOCOL)'''

=== Bugfixes ===
* Render liquid textures of other sizes than 64x64 correctly
* Allow sky textures of 4x2 and higher
* Fix rendering of models with large bounding-boxes disappearing at edges of screen

== See Also ==
* [[Engine Limits]]
* [[List of builtin functions]]
* [[QSG extensions]]</text>
      <sha1>7ohzypqre1ln4wyhtu6hrunzifm7a00</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1595</id>
      <parentid>1594</parentid>
      <timestamp>2010-02-07T22:53:08Z</timestamp>
      <contributor>
        <ip>95.209.171.185</ip>
      </contributor>
      <comment>/* Supported Extensions */</comment>
      <text xml:space="preserve" bytes="8806">Quake Standards Base is a project which aims to raise the bar of basic Quake modding and mapping. The goal is to push engine devs to support features which are very specific to making mods and maps for Quake (such as increased map and entity limits, external textures and new builtins), rather than user-features (such as a better server browser in the menu, nicer particle effects and an FPS counter).

'''The spec is still a work in progress!'''

=== Thanks ===
* '''LordHavoc''' for dpextensions.qc, most features people seem to want were listed and described here
* '''Spike''' for the FTE Wiki
* '''frag.machine''' for the engine limits list
* '''Spirit''' for the [[Engine Limits]] page
* Everyone who's shown support, contributed with ideas and discussion

=== Todo ===
* Discuss the current suggested extensions listed below
* Should QSB care about network protocols?
* What about QuakeWorld and specific QuakeWorld features?

=== Discussion ===
[http://forums.inside3d.com/viewtopic.php?t=1903 Suggestions for features on I3D]

[http://forums.inside3d.com/viewtopic.php?t=1953 Discuss existing features on I3D]

=== Increased Engine Limits ===
QSB will require some increased limits to bring engines to a more modern level of capability. This is still an ongoing discussion, as some of the limits are incompatible with the default Quake network protocol.

{| class=&quot;wikitable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! Limit name !! Old limit !! New limit !! Note/Category
|-
! MAX_HANDLES
| 10 || 100 || File handling
|-
! MINIMUM_WIN_MEMORY
| 0x01000000 (16Mb) || 0x02000000 (32Mb) || Engine
|-
! MAXIMUM_WIN_MEMORY
| 0x04000000 (64Mb) || 0x08000000 (128Mb) || Engine
|-
! CON_TEXTSIZE
| 16384 || 262144 || Engine (maybe not relevant)
|-
! MAX_FARCLIP
| 4096 || INFINITE || Rendering
|-
! MAX_EDICTS
| 600 || 8192 (*) || Map limit
|-
! NET_MAXMESSAGE
| 8192 || 65536 (****) || Network
|-
! MAX_STATIC_ENTITIES
| 128 || 1024 || Map limit
|-
! MAX_MAP_LEAFS
| 8192 || 32768 (**) || Map limit
|-
! MAX_LIGHTMAPS
| 64 || 256 || Map limit
|-
! NUMSTACKSURFACES
| 800 || 8192 || Map limit
|-
! NUMSTACKEDGES
| 2400 || 8192 || Map limit
|-
! MAX_VISEDICTS
| 256 || MAX_EDICTS || Map limit
|-
! MAX_DATAGRAM
| 1024 || 1400 || Network
|-
! MAX_MSGLEN
| 8000 || 65536 (****) || Network
|-
! MAX_STACK_DEPTH
| 32 || 256 || Engine
|-
! MAX_EFRAGS
| 640 || 2048 || Map limit
|-
! MAX_CHANNELS
| 128 || 512 || Sound
|-
! MAX_DYNAMIC_CHANNELS
| 8 || 128 || Sound
|-
! MAX_MAP_CLIPNODES
| 32767 || 65535 (**) || Map limit
|-
! MAX_GLTEXTURES
| 1024 || 2048 (***) || Rendering
|-
! MAX_TEMP_ENTITIES
| 64 || 1024 || Rendering
|-
! DYNAMIC_SIZE
| 49152 || 262144 || Engine
|-
! MAX_BMODEL_VERTS
| 500 || 1000 || Map limit
|-
! MAX_BMODEL_EDGES
| 1000 || 3000 || Map limit
|-
! MAXALIASVERTS
| 1024(GL) 2000(SW) || 65536 || Model
|-
! MAXALIASTRIS
| 2048 || 65536 || Model
|-
! MAX_LBM_HEIGHT
| 480 || 1024 || Model
|-
! ABSOLUTE_MIN_PARTICLES
| 512 || 1024 || Engine
|-
! MAX_PARTICLES
| 2048 || 16384 || Rendering
|-
! MAX_MODELS
| 256 || 4096 (*) || Network
|-
! MAX_SOUNDS
| 256 || 4096 (*) || Network
|-
! MARKSURFACES
| 32767 || 65535 (**) || Map limit
|-
! FACES
| 32767 || 65535 (**) || Map limit
|-
! NODES
| 32767 || 65535 (**) || Map limit
|-
! MAX_BEAMS
| 24 || 256 || Rendering
|-
! MAX_DLIGHTS
| 32 || 128 || Rendering (might be best left alone)
|}
* (*) = requires new network protocol
* (**) = should be implemented in a non-hacky way (replacing short values with 32-bit ints)
* (***) = Hardware-rendering specific
* (****) = See FitzQuake README.TXT about multiplayer games sticking to 1400 bytes due network limitations

=== Supported Extensions ===
QSB will support the [[checkextension]] system, to bring engines which don't already support it up to speed, hence all features will be listed as either existing extensions or new ones will be suggested.

Extensions are listed with descriptions within (sometimes stolen from their respective authors), and a description next to it if the extension differs from the requirement of the standard.

Extensions which make the engine incompatible with the default Quake network protocol are noted with a warning, as this is still an ongoing discussion at the time of writing.

{| class=&quot;wikitable&quot; border=&quot;1&quot; style=&quot;text-align: center; width: auto;&quot;
|-
! [[DP_CL_LOADSKY]]
| pcx with quake palette minimum for software engines, no limit on texture size and texture sizes do not need to match within the same skybox, loads from $game\env\
|-
! [[DP_GFX_SKYBOX]]
| pcx with quake palette minimum for software engines, no limit on texture size and texture sizes do not need to match within the same skybox, loads from $game\env\
|-
! [[DP_GFX_EXTERNALTEXTURES]]
| required for engines with hardware accelerated rendering, optional for software, attempt to load tga before pcx, pcx before lmp, lmp before wad, loading _diffuse _gloss _norm _bump and _luma are optional
|-
! [[DP_LITSUPPORT]]
| required for engines with hardware accelerated rendering
|-
! [[DP_BUTTONUSE]]
|
|-
! [[DP_CON_SET]]
|
|-
! [[DP_CON_SETA]]
|
|-
! [[DP_EF_ADDITIVE]]
| required for engines with hardware accelerated rendering '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_EF_FULLBRIGHT]]
| this includes support for fullbrights on textures in maps and on model skins '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_EF_NODEPTHTEST]]
|
|-
! [[DP_EF_NODRAW]]
|
|-
! [[DP_ENT_ALPHA]]
| full range required for engines with hardware accelerated rendering, software engines round off to the nearest of 25%, 50% and 75% alpha, based on a lookup table. This also includes r_wateralpha support. Bmodels with a water texture and an .alpha value will override r_wateralpha, and use its own value instead, like in FitzQuake. For hardware accelerated engines this includes support for textures with alpha channels on bmodels and model skins. '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_ENT_SCALE]]
| '''(ALTERS NETWORK PROTOCOL)'''
|-
! [[DP_ENT_VIEWMODEL]]
|
|-
! [[DP_ENT_EXTERIORMODELTOCLIENT]]
|
|-
! [[DP_INPUTBUTTONS]]
|
|-
! [[DP_MONSTERWALK]]
| (this one is a maybe, because it doesn't make a lot of sense without SV_PlayerPhysics)
|-
! [[DP_MOVETYPEBOUNCEMISSILE]]
|
|-
! [[DP_MOVETYPEFOLLOW]]
|
|-
! [[DP_QC_CHANGEPITCH]]
|
|-
! [[DP_QC_CVAR_STRING]]
|
|-
! [[DP_QC_FINDFLAGS]]
|
|-
! [[DP_QC_FINDFLOAT]]
| (note, includes findentity)
|-
! [[DP_QC_FS_SEARCH]]
|
|-
! [[DP_QC_MINMAXBOUND]]
|
|-
! [[DP_QC_UNLIMITEDTEMPSTRINGS]]
|
|-
! [[DP_QC_RANDOMVEC]]
|
|-
! [[DP_QC_TRACEBOX]]
|
|-
! [[DP_QC_TRACETOSS]]
| (it seems odd to me that this one needs an existing entity to base on, why?)
|-
! [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]
|
|-
! [[DP_QC_VECTOANGLES_WITH_ROLL]]
|
|-
! [[DP_QUAKE2_MODEL]]
|
|-
! [[DP_SND_DIRECTIONLESSATTNNONE]]
|
|-
! [[DP_SND_FAKETRACKS]]
| (is this useful without OGG Vorbis or mp3 support?)
|-
! [[DP_SOLIDCORPSE]]
|
|-
! [[DP_SV_DRAWONLYTOCLIENT]]
|
|-
! [[DP_SV_ENTITYCONTENTSTRANSITION]]
|
|-
! [[DP_SV_MOVETYPESTEP_LANDEVENT]]
|
|-
! [[DP_SV_POINTSOUND]]
|
|-
! [[DP_SV_NODRAWTOCLIENT]]
|
|-
! [[DP_SV_PRECACHEANYTIME]]
|
|-
! [[DP_SV_ROTATINGBMODEL]]
|
|-
! [[DP_TE_STANDARDEFFECTBUILTINS]]

[[FTE_TE_STANDARDEFFECTBUILTINS]]
| (depending on type of engine)
|-
! [[DP_VIEWZOOM]]
| '''(ALTERS NETWORK PROTOCOL)''' (can be implemented as a stat to avoid altering network protocol)
|-
! [[FRIK_FILE]]
| the DarkPlaces type, reading inside $game and $game/configs/ is prohibited, writing is restricted to $game/data/
|-
! [[KRIMZON_SV_PARSECLIENTCOMMAND]]
|
|-
! [[FTE_QC_CHECKPVS]]
|
|-
! [[FTE_STRINGS]]
| (this one's a maybe, is it overkill?)
|-
! [[NEH_RESTOREGAME]]
|
|}

==== New Suggested Extensions ====
Some engines already support some of these features, but as they don't exist as extensions, new ones are suggested. Even engines already supporting the features would need to list them as extensions.

* [[QSB_GAMEPLAYFIXES]]
* [[QSB_FOG]]
* [[QSB_MOVINGSOUNDS]]

=== Misc. features ===
Some required features can't be categorized under anything else, they are listed below.

* '''Multicontent'''
Allows the user to specify multiple mod paths to read content from, with the last in line being the one loaded for play.

Example commandline: -game quoth -game mymod

This would make &quot;mymod&quot; be the current mod in play, but extra content is loaded from &quot;quoth&quot;. Extra content is sounds, models, sprites, textures, maps, more?

* '''Higher precision origins and angles'''
Use floating point for origins and shorts for angles '''(ALTERS NETWORK PROTOCOL)'''

=== Bugfixes ===
* Render liquid textures of other sizes than 64x64 correctly
* Allow sky textures of 4x2 and higher
* Fix rendering of models with large bounding-boxes disappearing at edges of screen

== See Also ==
* [[Engine Limits]]
* [[List of builtin functions]]
* [[QSG extensions]]</text>
      <sha1>8invxicqg2c5qwzfbl5z31cozbwcp54</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QSB FOG</title>
    <ns>0</ns>
    <id>588</id>
    <revision>
      <id>1566</id>
      <timestamp>2010-02-06T17:32:00Z</timestamp>
      <contributor>
        <ip>83.226.254.64</ip>
      </contributor>
      <comment>New page: QSB Fog is meant to exist alongside existing fog capabilities of engines, acting as a common ground for mods to use to ensure a common look across engines. fog will start at &lt;nearclip&gt;, fa...</comment>
      <text xml:space="preserve" bytes="910">QSB Fog is meant to exist alongside existing fog capabilities of engines, acting as a common ground for mods to use to ensure a common look across engines. fog will start at &lt;nearclip&gt;, fade up to &lt;farclip&gt; after which point nothing is seen of the level. Colors &lt;red&gt; &lt;green&gt; &lt;blue&gt;, ranging from 0 0 0 (black) to 1 1 1 (white).


New console command: qsb_fog &lt;nearclip&gt; &lt;farclip&gt; &lt;red&gt; &lt;green&gt; &lt;blue&gt;. If all values specified are 0, fog is turned off.


worldspawn can specify &quot;qsb_fog_dist&quot; &quot;0 1024&quot; (first value is nearclip, second is farclip) to set fog values.

worldspawn can specify &quot;qsb_fog_color&quot; &quot;0.5 0.5 0.5&quot; (colors for the fog in red, green and blue) to set fog values.


If QuakeC specifies vector fields .qsb_fog_dist and .qsb_fog_color, the values from worldspawn are stored in these fields, which are useful when using [[NEH_RESTOREGAME]], to restore fog to the level after loading a savegame.</text>
      <sha1>o5pvnz9f38fq5f341pb4mp8veew98zp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1567</id>
      <parentid>1566</parentid>
      <timestamp>2010-02-06T17:32:27Z</timestamp>
      <contributor>
        <ip>83.226.254.64</ip>
      </contributor>
      <text xml:space="preserve" bytes="940">QSB Fog is meant to exist alongside existing fog capabilities of engines, acting as a common ground for mods to use to ensure a common look across engines. fog will start at &lt;nearclip&gt;, fade up to &lt;farclip&gt; after which point nothing is seen of the level. Colors &lt;red&gt; &lt;green&gt; &lt;blue&gt;, ranging from 0 0 0 (black) to 1 1 1 (white).


New console command: '''qsb_fog''' &lt;nearclip&gt; &lt;farclip&gt; &lt;red&gt; &lt;green&gt; &lt;blue&gt;. If all values specified are 0, fog is turned off.


worldspawn can specify &quot;'''qsb_fog_dist'''&quot; &quot;0 1024&quot; (first value is nearclip, second is farclip) to set fog values.

worldspawn can specify &quot;'''qsb_fog_color'''&quot; &quot;0.5 0.5 0.5&quot; (colors for the fog in red, green and blue) to set fog values.


If QuakeC specifies vector fields '''.qsb_fog_dist''' and '''.qsb_fog_color''', the values from worldspawn are stored in these fields, which are useful when using [[NEH_RESTOREGAME]], to restore fog to the level after loading a savegame.</text>
      <sha1>srh51xkjmr2r0qsiwhhsvyi9eq8a10w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1568</id>
      <parentid>1567</parentid>
      <timestamp>2010-02-06T17:32:56Z</timestamp>
      <contributor>
        <ip>83.226.254.64</ip>
      </contributor>
      <text xml:space="preserve" bytes="940">QSB Fog is meant to exist alongside existing fog capabilities of engines, acting as a common ground for mods to use to ensure a common look across engines. Fog will start at &lt;nearclip&gt;, fade up to &lt;farclip&gt; after which point nothing is seen of the level. Colors &lt;red&gt; &lt;green&gt; &lt;blue&gt;, ranging from 0 0 0 (black) to 1 1 1 (white).


New console command: '''qsb_fog''' &lt;nearclip&gt; &lt;farclip&gt; &lt;red&gt; &lt;green&gt; &lt;blue&gt;. If all values specified are 0, fog is turned off.


worldspawn can specify &quot;'''qsb_fog_dist'''&quot; &quot;0 1024&quot; (first value is nearclip, second is farclip) to set fog values.

worldspawn can specify &quot;'''qsb_fog_color'''&quot; &quot;0.5 0.5 0.5&quot; (colors for the fog in red, green and blue) to set fog values.


If QuakeC specifies vector fields '''.qsb_fog_dist''' and '''.qsb_fog_color''', the values from worldspawn are stored in these fields, which are useful when using [[NEH_RESTOREGAME]], to restore fog to the level after loading a savegame.</text>
      <sha1>dkh2eym92tmwzliiduvmbaj6dqiblwp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1596</id>
      <parentid>1568</parentid>
      <timestamp>2010-02-07T22:57:21Z</timestamp>
      <contributor>
        <ip>95.209.171.185</ip>
      </contributor>
      <text xml:space="preserve" bytes="999">QSB Fog is meant to exist alongside existing fog capabilities of engines, acting as a common ground for mods to use to ensure a common look across engines. Fog will start at &lt;nearclip&gt;, fade up to &lt;farclip&gt; after which point nothing is seen of the level. Colors &lt;red&gt; &lt;green&gt; &lt;blue&gt;, ranging from 0 0 0 (black) to 1 1 1 (white). QSB Fog is not a requirement in software-rendered engines.


New console command: '''qsb_fog''' &lt;nearclip&gt; &lt;farclip&gt; &lt;red&gt; &lt;green&gt; &lt;blue&gt;. If all values specified are 0, fog is turned off.


worldspawn can specify &quot;'''qsb_fog_dist'''&quot; &quot;0 1024&quot; (first value is nearclip, second is farclip) to set fog values.

worldspawn can specify &quot;'''qsb_fog_color'''&quot; &quot;0.5 0.5 0.5&quot; (colors for the fog in red, green and blue) to set fog values.


If QuakeC specifies vector fields '''.qsb_fog_dist''' and '''.qsb_fog_color''', the values from worldspawn are stored in these fields, which are useful when using [[NEH_RESTOREGAME]], to restore fog to the level after loading a savegame.</text>
      <sha1>pfhvpkxfnywvfv8yqbwecq0dph8jvsk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QSB GAMEPLAYFIXES</title>
    <ns>0</ns>
    <id>587</id>
    <revision>
      <id>1565</id>
      <timestamp>2010-02-06T17:24:59Z</timestamp>
      <contributor>
        <ip>83.226.254.64</ip>
      </contributor>
      <comment>New page: Some useful DarkPlaces gameplayfix cvars collected under a new extension.  Default value is unspecified, recommended 0   '''sv_gameplayfix_blowupfallenzombies''' (findradius also lists SOL...</comment>
      <text xml:space="preserve" bytes="702">Some useful DarkPlaces gameplayfix cvars collected under a new extension.

Default value is unspecified, recommended 0


'''sv_gameplayfix_blowupfallenzombies''' (findradius also lists SOLID_NOT)

'''sv_gameplayfix_findradiusdistancetobox''' (findradius finds the volume of bounding-boxes rather than the entity origin)

'''sv_gameplayfix_grenadebouncedownslopes''' (MOVETYPE_BOUNCE does not get stuck on downward slopes)

'''sv_gameplayfix_swiminbmodels''' (allows swimming in bmodels with a water texture)

'''sv_gameplayfix_walkonbboxes''' (allows walking on bounding-boxes rather than sliding on them)

'''sv_gameplayfix_walkoutofsolids''' (allows traces which start in solids to trace out of them)</text>
      <sha1>luqas94un2mol9y9ykvsuap9l6ezu4o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1848</id>
      <parentid>1565</parentid>
      <timestamp>2013-03-25T00:30:13Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="726">Some useful DarkPlaces gameplayfix cvars collected under a new extension.

Default value is unspecified, recommended 0


'''sv_gameplayfix_blowupfallenzombies''' (findradius also lists SOLID_NOT)

'''sv_gameplayfix_findradiusdistancetobox''' (findradius finds the volume of bounding-boxes rather than the entity origin)

'''sv_gameplayfix_grenadebouncedownslopes''' (MOVETYPE_BOUNCE does not get stuck on downward slopes)

'''sv_gameplayfix_swiminbmodels''' (allows swimming in bmodels with a water texture)

'''sv_gameplayfix_walkonbboxes''' (allows walking on bounding-boxes rather than sliding on them)

'''sv_gameplayfix_walkoutofsolids''' (allows traces which start in solids to trace out of them)
[[Category:DarkPlaces]]</text>
      <sha1>qsf0slbwzi419djvia739aqiv11qi4o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QSB MOVINGSOUNDS</title>
    <ns>0</ns>
    <id>590</id>
    <revision>
      <id>1570</id>
      <timestamp>2010-02-06T17:37:23Z</timestamp>
      <contributor>
        <ip>83.226.254.64</ip>
      </contributor>
      <comment>New page: QSB Movingsounds specifies the fact that sounds move along with the entity they were cast from. If a rocket plays a looping rocket-engine sound, you would hear this sound fade in and out a...</comment>
      <text xml:space="preserve" bytes="216">QSB Movingsounds specifies the fact that sounds move along with the entity they were cast from. If a rocket plays a looping rocket-engine sound, you would hear this sound fade in and out as the rocket flies past you.</text>
      <sha1>iiokpxfvmu55b64izbft8hnprhhjw9f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QSB MULTICONTENT</title>
    <ns>0</ns>
    <id>589</id>
    <revision>
      <id>1569</id>
      <timestamp>2010-02-06T17:34:09Z</timestamp>
      <contributor>
        <ip>83.226.254.64</ip>
      </contributor>
      <comment>New page: QSB Multicontent allows the user to specify multiple mod paths to read content from, with the last in line being the one loaded for play.   '''Example:'''  -game quoth -game mymod  would m...</comment>
      <text xml:space="preserve" bytes="293">QSB Multicontent allows the user to specify multiple mod paths to read content from, with the last in line being the one loaded for play.


'''Example:'''

-game quoth -game mymod

would make &quot;mymod&quot; be the current mod in play, but extra content such as models and maps are loaded from &quot;quoth&quot;</text>
      <sha1>0xyb7axm2dwv6crk99teib2reul2vzg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1588</id>
      <parentid>1569</parentid>
      <timestamp>2010-02-06T20:29:34Z</timestamp>
      <contributor>
        <username>Urre</username>
        <id>7</id>
      </contributor>
      <text xml:space="preserve" bytes="39">Deprecated, how does one remove a page?</text>
      <sha1>iwhi9gkjs36kzfm305jhmvmgsw7nqh4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QSG extensions</title>
    <ns>0</ns>
    <id>42</id>
    <revision>
      <id>50</id>
      <timestamp>2007-10-30T18:05:44Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: Thanks to a cooperative effort between [[QuakeSrc]], LordHavoc and Tomaz a variety of new engines support a Extension-Detection system called, for the purposes of this wiki, &quot;QSG Extension...</comment>
      <text xml:space="preserve" bytes="20767">Thanks to a cooperative effort between [[QuakeSrc]], LordHavoc and Tomaz a variety of new engines support a Extension-Detection system called, for the purposes of this wiki, &quot;QSG Extensions&quot;. These are meant to be used by [[QuakeC]] modders to expand and make use of the new engine features without breaking compatability with other engines ([[Prydon Gate]] is a good example of how this can be done).

For more information on how to use these, read about the [[checkextension]] builtin.

QSG Extensions are a powerful method. Mods addapt to higher and lower profiles, and engine coders dont need to stop to add new features, and QuakeC modders dont need to stop using it. But doing in the right way, everybody can run mods.

Notes:

* [[DarkPlaces]] and [[TomazQuake]] support most of the old QSG keys. Actually this keys have the widen support betwen engines.
* [[Telejano]] adds a lot of new QSG keys, but most are undocumented.
* The new [[DarkPlaces]] builds add some new and very interesting keys.
* [[FTE QuakeWorld]] adds a whole new spon on things. Visit [How FTE is broken] for more information.
* You can deactivate normal features with QSG keys. Example: If you create a engine that not support centerprints. You can use QSG_NO_CENTERPRINT. If you mod its coded checking that centerprint, will run on your engine with no-centerprint and on engines with centerprint. Negative QSG keys are usefull to use Quake1 mods with other engines that can load progs.dat files, like [[FungusQC]].
* [[Builtin ranges]]

{|style=&quot;border:1px solid #000000&quot;
|-
|align=&quot;center&quot;| '''Name'''
|align=&quot;center&quot;| '''Supported by'''
|-
| [[BX_COLOREDTEXT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_CON_DEL]]                    || [[Betwix]]
|-
| [[BX_CON_EXT]]                    || [[Betwix]]
|-
| [[BX_CON_TEXREPLACE]]             || [[Betwix]]
|-
| [[BX_CON_VAR]]                    || [[Betwix]]
|-
| [[BX_CON_WRITECONFIG]]            || [[Betwix]]
|-
| [[BX_ENGINE]]                     || [[Betwix]]
|-
| [[BX_ENT_BOUNCESCALE]]            || [[Betwix]]
|-
| [[BX_ENT_FRICTION]]               || [[Betwix]]
|-
| [[BX_ENT_MODELFLAGS]]             || [[Betwix]]
|-
| [[BX_GFX_SKYBOX]]                 || [[Betwix]]
|-
| [[BX_GFX_SUN]]                    || [[Betwix]]
|-
| [[BX_INPUTBUTTONS]]               || [[Betwix]]
|-
| [[BX_MDLOVERRIDE]]                || [[Betwix]]
|-
| [[BX_MULTIPLEFONTS]]              || [[Betwix]]
|-
| [[BX_P_M_SUPPORT]]                || [[Betwix]]
|-
| [[BX_QC_CAMERA]]                  || [[Betwix]]
|-
| [[BX_QC_CHECKFOV]]                || [[Betwix]]
|-
| [[BX_QC_FINDFIELDCHAIN]]          || [[Betwix]]
|-
| [[BX_QC_GETDATETIME]]             || [[Betwix]]
|-
| [[BX_QC_INIFILE]]                 || [[Betwix]]
|-
| [[BX_QC_MSGREAD]]                 || [[Betwix]]
|-
| [[BX_QC_PROGPARMS]]               || [[Betwix]]
|-
| [[BX_QC_PROTOCOL_FLAGS]]          || [[Betwix]]
|-
| [[BX_QC_SOUNDTEAM]]               || [[Betwix]]
|-
| [[BX_QC_SPRINTF]]                 || [[Betwix]]
|-
| [[BX_QC_STR]]                     || [[Betwix]]
|-
| [[BX_QC_VECMATH]]                 || [[Betwix]]
|-
| [[BX_QC_VISIBLE]]                 || [[Betwix]]
|-
| [[BX_SERVERPROGS]]                || [[Betwix]]
|-
| [[BX_SND_MUSIC]]                  || [[Betwix]]
|-
| [[BX_SV_LOCKCVARCMD]]             || [[Betwix]]
|-
| [[BX_SV_PARSESAY]]                || [[Betwix]]
|-
| [[BX_SV_UPDATE_CLIENTCVARS]]      || [[Betwix]]
|-
| [[BX_WAL_SUPPORT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_WEAPONBOB]]                  || [[Betwix]]
|-
| [[DP_BUTTONCHAT]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_BUTTONUSE]]                  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_CGAME]]                      || [[DarkPlaces]]
|-
| [[DP_CL_LOADSKY]]                 || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[ToChriS]] [[Vengeance r2]]
|-
| [[DP_CON_ALIASPARAMETERS]]        || [[DarkPlaces]]
|-
| [[DP_CON_EXPANDCVAR]]             || [[DarkPlaces]]
|-
| [[DP_CON_SET]]                    || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]] [[ezQuake]] [[ZQuake]]
|-
| [[DP_CON_SETA]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_CON_STARTMAP]]               || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_ADDITIVE]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_BLUE]]                    || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_FLAME]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_FULLBRIGHT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NODEPTHTEST]]             || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_NODRAW]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NOSHADOW]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_EF_RED]]                     || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_STARDUST]]                || [[DarkPlaces]]
|-
| [[DP_ENT_ALPHA]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_ENT_COLORMOD]]               || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_ENT_CUSTOMCOLORMAP]]         || [[DarkPlaces]]
|-
| [[DP_ENT_DELTACOMPRESS]]          || N/A
|-
| [[DP_ENT_EXTERIORMODELTOCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_ENT_GLOW]]                   || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_ENT_LOWPRECISION]]           || [[DarkPlaces]]
|-
| [[DP_ENT_SCALE]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]]
|-
| [[DP_ENT_VIEWMODEL]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_EXTERNALTEXTURES]]       || [[DarkPlaces]]
|-
| [[DP_GFX_FOG]]                    || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_GFX_QUAKE3MODELTAGS]]        || [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_SKINFILES]]              || [[DarkPlaces]]
|-
| [[DP_GFX_SKYBOX]]                 || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_HALFLIFE_MAP]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_MAP_CVAR]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FTE]] [[ZQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_SPRITE]]            || [[DarkPlaces]]
|-
| [[DP_INPUTBUTTONS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_LITSPRITES]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_LITSUPPORT]]                 || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_MD3_TAGSINFO]]               || N/A
|-
| [[DP_MONSTERWALK]]                || [[DarkPlaces]] [[FTE]] [[Telejano]] [[ZQuake]]
|-
| [[DP_MOVETYPEBOUNCEMISSILE]]      || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_MOVETYPEFOLLOW]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_QC_CHANGEPITCH]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_COPYENTITY]]              || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[Vengeance r2]]
|-
| [[DP_QC_CVAR_STRING]]             || [[Betwix]] [[DarkPlaces]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[DP_QC_ETOS]]                    || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_FINDCHAIN]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDCHAINFLAGS]]          || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDCHAINFLOAT]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDFLAGS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDFLOAT]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]] [[QMB]] [[FuhQuake]]
|-
| [[DP_QC_FS_SEARCH]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_GETLIGHT]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_QC_GETSURFACE]]              || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_QC_GETTAGINFO]]              || [[DarkPlaces]]
|-
| [[DP_QC_MINMAXBOUND]]             || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_MULTIPLETEMPSTRINGS]]     || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_RANDOMVEC]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[MVDSV]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_SINCOSSQRTPOW]]           || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_TRACE_MOVETYPE_HITMODEL]] || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]|| [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPES]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACEBOX]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[MVDSV]] [[QMB]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_QC_TRACETOSS]]               || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_UNLIMITEDTEMPSTRINGS]]    || [[DarkPlaces]]
|-
| [[DP_QC_VECTORVECTORS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QUAKE2_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_QUAKE2_SPRITE]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MAP]]                 || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_REGISTERCVAR]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_SENSITIVITYSCALE]]           || [[Betwix]]
|-
| [[DP_SND_DIRECTIONLESSATTNNONE]]  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SND_FAKETRACKS]]             || [[DarkPlaces]]
|-
| [[DP_SND_OGGVORBIS]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SND_STEREOWAV]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SOLIDCORPSE]]                || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SPRITE32]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_SV_BOTCLIENT]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTCOLORS]]            || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTNAME]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_DRAWONLYTOCLIENT]]        || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_DRAWONLYTOTEAM]]          || [[Betwix]]
|-
| [[DP_SV_DROPCLIENT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_SV_EFFECT]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_EXTERIORMODELFORCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_NODRAWTOCLIENT]]          || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_PING]]                    || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_PLAYERPHYSICS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PRINT]]                   || [[DarkPlaces]]
|-
| [[DP_SV_PRECACHEANYTIME]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PUNCHVECTOR]]             || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_ROTATINGBMODEL]]          || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_SV_SETCOLOR]]                || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]]
|-
| [[DP_SV_SLOWMO]]                  || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SV_WRITEUNTERMINATEDSTRING]] || [[DarkPlaces]] [[ezQuake]] [[FTE]]
|-
| [[DP_TE_BLOOD]]                   || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_BLOODSHOWER]]             || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_CUSTOMFLASH]]             || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_EXPLOSIONRGB]]            || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_FLAMEJET]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLECUBE]]            || [[DarkPlaces]] [[QMB]]
|-
| [[DP_TE_PARTICLERAIN]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLESNOW]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PLASMABURN]]              || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_QUADEFFECTS1]]            || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_SMALLFLASH]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_SPARK]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_TE_STANDARDEFFECTBUILTINS]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_VIEWZOOM]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_WEAPONSKIN]]                 || [[Betwix]]
|-
| [[EXT_BITSHIFT]]                  || [[DarkPlaces]] [[Betwix]] [[FTE]]
|-
| [[EXT_CSQC]]                      || [[DarkPlaces]] [[FTE]]
|-
| [[EXT_DIMENSION_GHOST]]           || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_PHYSICS]]         || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_VISIBILITY]]      || [[Betwix]] [[FTE]]
|-
| [[FTE_CALLTIMEOFDAY]]             || [[Betwix]] [[MVDSV]] [[FTE]]
|-
| [[FTE_EXTENDEDTEXTCODES]]         || [[FTE]]
|-
| [[FTE_FORCEINFOKEY]]              || [[FTE]]
|-
| [[FTE_GFX_QUAKE3SHADERS]]         || [[FTE]]
|-
| [[FTE_HEXEN2]]                    || [[FTE]]
|-
| [[FTE_MEDIA_AVI]]                 || [[FTE]]
|-
| [[FTE_MEDIA_CIN]]                 || [[FTE]]
|-
| [[FTE_MEDIA_ROQ]]                 || [[FTE]]
|-
| [[FTE_MULTIPROGS]]                || [[FTE]]
|-
| [[FTE_MULTITHREADED]]             || [[FTE]]
|-
| [[FTE_MVD_PLAYBACK]]              || [[FTE]]
|-
| [[FTE_NPCCHAT]]                   || [[FTE]]
|-
| [[FTE_PEXT_BULLETENS]]            || [[FTE]]
|-
| [[FTE_PEXT_CUSTOMTENTS]]          || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL2]]           || [[FTE]]
|-
| [[FTE_PEXT_FATNESS]]              || [[FTE]]
|-
| [[FTE_PEXT_HULLSIZE]]             || [[FTE]]
|-
| [[FTE_PEXT_LIGHTSTYLECOL]]        || [[FTE]]
|-
| [[FTE_PEXT_LIGHTUPDATES]]         || [[FTE]]
|-
| [[FTE_PEXT_MODELDBL]]             || [[FTE]]
|-
| [[FTE_PEXT_ORIGINDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_Q2BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_Q3BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_SETVIEW]]              || [[FTE]]
|-
| [[FTE_PEXT_SPAWNSTATIC]]          || [[FTE]]
|-
| [[FTE_PEXT_TE_BULLET]]            || [[FTE]]
|-
| [[FTE_PEXT_VIEW2]]                || [[FTE]]
|-
| [[FTE_PEXT_VWEAP]]                || [[FTE]]
|-
| [[FTE_PEXT_ZLIBDL]]               || [[FTE]]
|-
| [[FTE_QC_CHECKPVS]]               || [[FTE]] [[ZQuake]]
|-
| [[FTE_QC_MATCHCLIENTNAME]]        || [[FTE]]
|-
| [[FTE_QC_PAUSED]]                 || [[FTE]]
|-
| [[FTE_QC_SENDPACKET]]             || [[FTE]]
|-
| [[FTE_QC_TRACETRIGGER]]           || [[FTE]]
|-
| [[FTE_SOLID_LADDER]]              || [[FTE]]
|-
| [[FTE_STRINGS]]                   || [[FTE]]
|-
| [[FTE_SV_REENTER]]                || [[FTE]]
|-
| [[FTE_TE_STANDARDEFFECTBUILTINS]] || [[FTE]]
|-
| [[FTE_VALID_VEC_HULL3]]           || [[FTE]]
|-
| [[FRIK_FILE]]                     || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[GQ]] [[Telejano]] [[Vengeance r2]]
|-
| [[KRIMZON_SV_PARSECLIENTCOMMAND]] || [[Betwix]] [[DarkPlaces]] [[FTE]] [[FuhQuake]]
|-
| [[NEH_CMD_PLAY2]]                 || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]]
|-
| [[NEH_RESTOREGAME]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[NEXUIZ_PLAYERMODEL]]            || [[DarkPlaces]]
|-
| [[NXQ_GFX_LETTERBOX]]             || [[DarkPlaces]]
|-
| [[PRYDON_CLIENTCURSOR]]           || [[DarkPlaces]]
|-
| [[QSG_FILE]]                      || [[FrikQuake]] [[Telejano]] [[ToChriS]]
|-
| [[QSG_DIMENSIONAL]]               ||
|-
| [[QSG_NO_CENTERPRINT]]            || [[FungusQC]]
|-
| [[QSG_NO_MDL]]                    || [[FungusQC]]
|-
| [[QSG_NO_NETCODE_Q1]]             || [[FungusQC]]
|-
| [[QW_ENGINE]]                     || [[FTE]]
|-
| [[QWE_MVD_RECORD]]                || [[FTE]]
|-
| [[TEI_AUTOANIMATION]]             || [[Telejano]]
|-
| [[TEI_AUTOFLUOR]]                 || [[Telejano]]
|-
| [[TEI_AUTOFOGWATER]]              || [[Telejano]]
|-
| [[TEI_AUTOFOOT]]                  || [[Telejano]]
|-
| [[TEI_AUTOLAVA]]                  || [[Telejano]]
|-
| [[TEI_AUTOLIGHTDAY]]              || [[Telejano]]
|-
| [[TEI_AUTORAIN]]                  || [[Telejano]]
|-
| [[TEI_AUTOSNOW]]                  || [[Telejano]]
|-
| [[TEI_AUTOVANISH]]                || [[Telejano]]
|-
| [[TEI_AUTOZING]]                  || [[Telejano]]
|-
| [[TEI_BOB2]]                      || [[Telejano]]
|-
| [[TEI_EF_EXTRA]]                  || [[Telejano]]
|-
| [[TEI_EF2_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_EF3_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_HUDMANAGER]]                || [[Telejano]]
|-
| [[TEI_LOCALMENUS1]]               || [[Telejano]]
|-
| [[TEI_LOCALMENUS2]]               || [[Telejano]]
|-
| [[TEI_MAPMODELS]]                 || [[Telejano]]
|-
| [[TEI_MD3_MODEL]]                 || [[FTE]] [[Telejano]]
|-
| [[TEI_MENU_MISC2]]                || [[Telejano]]
|-
| [[TEI_MOD_PROGS]]                 || [[Telejano]]
|-
| [[TEI_MODPREDATOR]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETIC]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETICFOLLOW]]         || [[Telejano]]
|-
| [[TEI_MOVRELATIVESTATIC]]         || [[Betwix]] [[Telejano]]
|-
| [[TEI_SHOWLMP2]]                  || [[FTE]] [[Telejano]]
|-
| [[TEI_SHOWLMP3]]                  || [[Telejano]]
|-
| [[TEI_STATCOUNT]]                 || [[Telejano]]
|-
| [[TEI_STATICFX]]                  || [[Telejano]]
|-
| [[TEI_STEPSIZE]]                  || [[Telejano]]
|-
| [[TEI_SUN]]                       || [[Telejano]]
|-
| [[TEI_SVSKY]]                     || [[Telejano]]
|-
| [[TEI_TE_ALIENEXPLOSION]]         || [[Telejano]]
|-
| [[TEI_TE_CUSTOMFX]]               || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL]]         || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL2]]        || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL3]]        || [[Telejano]]
|-
| [[TEI_TE_IMPLOSIONFX]]            || [[Telejano]]
|-
| [[TEI_TE_LIGHTNING4]]             || [[Telejano]]
|-
| [[TEI_TE_LIGHTNINGX]]             || [[Telejano]]
|-
| [[TEI_TE_PARTICLEBLAST]]          || [Telejano]]
|-
| [[TEI_TE_STATICFOG]]              || [Telejano]]
|-
| [[TEI_TE_TRAILS]]                 || [Telejano]]
|-
| [[TEI_THEMEFOLDER]]               || [Telejano]]
|-
| [[TEI_TPAKLOAD]]                  || [Telejano]]
|-
| [[TEI_ZONEFOGS]]                  || [Telejano]]
|-
| [[TENEBRAE_GFX_DLIGHTS]]          || [DarkPlaces]]
|-
| [[TIMESCALE]]                     || N/A
|-
| [[TQ_DLIGHTS]]                    || [Betwix]] [Telejano]] [TomazQuake]]
|-
| [[TQ_PLASMA]]                     || [Betwix]] [Telejano]] [TomazQuake]]
|-
| [[TQ_RAILTRAIL]]                  || [Betwix]] [Telejano]] [TomazQuake]]
|-
| [[TQ_RAIN]]                       || [Telejano]] [TomazQuake]]
|-
| [[TQ_SLOWMO]]                     || [Betwix]] [Telejano]] [TomazQuake]]
|-
| [[TQ_SNOW]]                       || [FrikQuake]] [Telejano]] [TomazQuake]]
|-
| [[TW_SV_STEPCONTROLS]]            || [Betwix]] [DarkPlaces]] [Telejano]] [Twilight]]
|-
| [[UDC_EXTEFFECT]]                 || N/A
|-
| [[VEN_SCRIPT_PARTICLES]]          || [Vengeance r2]]
|-
| [[ZQ_CLIENTCOMMAND]]              || [ezQuake]] [MVDSV]] [ZQuake]]
|-
| [[ZQ_INPUTBUTTONS]]               || [ZQuake]]
|-
| [[ZQ_ITEMS2]]                     || [ezQuake]] [MVDSV]] [ZQuake]]
|-
| [[ZQ_MOVETYPE_NOCLIP]] (QW)       || [ezQuake]] [FTE]] [MVDSV]] [ZQuake]]
|-
| [[ZQ_MOVETYPE_FLY]] (QW)          || [ezQuake]] [FTE]] [MVDSV]] [ZQuake]]
|-
| [[ZQ_MOVETYPE_NONE]] (QW)         || [ezQuake]] [FTE]] [MVDSV]] [ZQuake]]
|-
| [[ZQ_PAUSE]]                      || [MVDSV]] [ZQuake]]
|-
| [[ZQ_QC_PARTICLE]] (QW)           || [FTE]] [ZQuake]]
|-
| [[ZQ_QC_STRINGS]]                 || [ezQuake]] [MVDSV]] [FTE]] [ZQuake]]
|-
| [[ZQ_QC_TOKENIZE]]                || [ezQuake]] [MVDSV]] [ZQuake]]
|-
| [[ZQ_SETINFO]]                    || [ZQuake]]
|-
| [[ZQ_SOUNDTOCLIENT]]              || [ZQuake]]
|-
| [[ZQ_VWEP]]                       || [ezQuake]] [MVDSV]] [ZQuake]]
|-
|}

===See Also===
* http://web.archive.org/web/*/http://www.quakesrc.org/registry.php</text>
      <sha1>f9pu9ya1y7w10y319mhsegaxtmvuqqt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>51</id>
      <parentid>50</parentid>
      <timestamp>2007-10-30T18:07:11Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="20815">Thanks to a cooperative effort between [[QuakeSrc]], LordHavoc and Tomaz a variety of new engines support a Extension-Detection system called, for the purposes of this wiki, &quot;QSG Extensions&quot;. These are meant to be used by [[QuakeC]] modders to expand and make use of the new engine features without breaking compatability with other engines ([[Prydon Gate]] is a good example of how this can be done).

For more information on how to use these, read about the [[checkextension]] builtin.

QSG Extensions are a powerful method. Mods addapt to higher and lower profiles, and engine coders dont need to stop to add new features, and QuakeC modders dont need to stop using it. But doing in the right way, everybody can run mods.

Notes:

* [[DarkPlaces]] and [[TomazQuake]] support most of the old QSG keys. Actually this keys have the widen support betwen engines.
* [[Telejano]] adds a lot of new QSG keys, but most are undocumented.
* The new [[DarkPlaces]] builds add some new and very interesting keys.
* [[FTE QuakeWorld]] adds a whole new spon on things. Visit [How FTE is broken] for more information.
* You can deactivate normal features with QSG keys. Example: If you create a engine that not support centerprints. You can use QSG_NO_CENTERPRINT. If you mod its coded checking that centerprint, will run on your engine with no-centerprint and on engines with centerprint. Negative QSG keys are usefull to use Quake1 mods with other engines that can load progs.dat files, like [[FungusQC]].
* [[Builtin ranges]]

{|style=&quot;border:1px solid #000000&quot;
|-
|align=&quot;center&quot;| '''Name'''
|align=&quot;center&quot;| '''Supported by'''
|-
| [[BX_COLOREDTEXT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_CON_DEL]]                    || [[Betwix]]
|-
| [[BX_CON_EXT]]                    || [[Betwix]]
|-
| [[BX_CON_TEXREPLACE]]             || [[Betwix]]
|-
| [[BX_CON_VAR]]                    || [[Betwix]]
|-
| [[BX_CON_WRITECONFIG]]            || [[Betwix]]
|-
| [[BX_ENGINE]]                     || [[Betwix]]
|-
| [[BX_ENT_BOUNCESCALE]]            || [[Betwix]]
|-
| [[BX_ENT_FRICTION]]               || [[Betwix]]
|-
| [[BX_ENT_MODELFLAGS]]             || [[Betwix]]
|-
| [[BX_GFX_SKYBOX]]                 || [[Betwix]]
|-
| [[BX_GFX_SUN]]                    || [[Betwix]]
|-
| [[BX_INPUTBUTTONS]]               || [[Betwix]]
|-
| [[BX_MDLOVERRIDE]]                || [[Betwix]]
|-
| [[BX_MULTIPLEFONTS]]              || [[Betwix]]
|-
| [[BX_P_M_SUPPORT]]                || [[Betwix]]
|-
| [[BX_QC_CAMERA]]                  || [[Betwix]]
|-
| [[BX_QC_CHECKFOV]]                || [[Betwix]]
|-
| [[BX_QC_FINDFIELDCHAIN]]          || [[Betwix]]
|-
| [[BX_QC_GETDATETIME]]             || [[Betwix]]
|-
| [[BX_QC_INIFILE]]                 || [[Betwix]]
|-
| [[BX_QC_MSGREAD]]                 || [[Betwix]]
|-
| [[BX_QC_PROGPARMS]]               || [[Betwix]]
|-
| [[BX_QC_PROTOCOL_FLAGS]]          || [[Betwix]]
|-
| [[BX_QC_SOUNDTEAM]]               || [[Betwix]]
|-
| [[BX_QC_SPRINTF]]                 || [[Betwix]]
|-
| [[BX_QC_STR]]                     || [[Betwix]]
|-
| [[BX_QC_VECMATH]]                 || [[Betwix]]
|-
| [[BX_QC_VISIBLE]]                 || [[Betwix]]
|-
| [[BX_SERVERPROGS]]                || [[Betwix]]
|-
| [[BX_SND_MUSIC]]                  || [[Betwix]]
|-
| [[BX_SV_LOCKCVARCMD]]             || [[Betwix]]
|-
| [[BX_SV_PARSESAY]]                || [[Betwix]]
|-
| [[BX_SV_UPDATE_CLIENTCVARS]]      || [[Betwix]]
|-
| [[BX_WAL_SUPPORT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_WEAPONBOB]]                  || [[Betwix]]
|-
| [[DP_BUTTONCHAT]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_BUTTONUSE]]                  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_CGAME]]                      || [[DarkPlaces]]
|-
| [[DP_CL_LOADSKY]]                 || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[ToChriS]] [[Vengeance r2]]
|-
| [[DP_CON_ALIASPARAMETERS]]        || [[DarkPlaces]]
|-
| [[DP_CON_EXPANDCVAR]]             || [[DarkPlaces]]
|-
| [[DP_CON_SET]]                    || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]] [[ezQuake]] [[ZQuake]]
|-
| [[DP_CON_SETA]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_CON_STARTMAP]]               || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_ADDITIVE]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_BLUE]]                    || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_FLAME]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_FULLBRIGHT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NODEPTHTEST]]             || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_NODRAW]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NOSHADOW]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_EF_RED]]                     || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_STARDUST]]                || [[DarkPlaces]]
|-
| [[DP_ENT_ALPHA]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_ENT_COLORMOD]]               || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_ENT_CUSTOMCOLORMAP]]         || [[DarkPlaces]]
|-
| [[DP_ENT_DELTACOMPRESS]]          ||
|-
| [[DP_ENT_EXTERIORMODELTOCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_ENT_GLOW]]                   || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_ENT_LOWPRECISION]]           || [[DarkPlaces]]
|-
| [[DP_ENT_SCALE]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]]
|-
| [[DP_ENT_VIEWMODEL]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_EXTERNALTEXTURES]]       || [[DarkPlaces]]
|-
| [[DP_GFX_FOG]]                    || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_GFX_QUAKE3MODELTAGS]]        || [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_SKINFILES]]              || [[DarkPlaces]]
|-
| [[DP_GFX_SKYBOX]]                 || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_HALFLIFE_MAP]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_MAP_CVAR]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FTE]] [[ZQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_SPRITE]]            || [[DarkPlaces]]
|-
| [[DP_INPUTBUTTONS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_LITSPRITES]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_LITSUPPORT]]                 || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_MD3_TAGSINFO]]               ||
|-
| [[DP_MONSTERWALK]]                || [[DarkPlaces]] [[FTE]] [[Telejano]] [[ZQuake]]
|-
| [[DP_MOVETYPEBOUNCEMISSILE]]      || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_MOVETYPEFOLLOW]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_QC_CHANGEPITCH]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_COPYENTITY]]              || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[Vengeance r2]]
|-
| [[DP_QC_CVAR_STRING]]             || [[Betwix]] [[DarkPlaces]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[DP_QC_ETOS]]                    || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_FINDCHAIN]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDCHAINFLAGS]]          || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDCHAINFLOAT]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDFLAGS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDFLOAT]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]] [[QMB]] [[FuhQuake]]
|-
| [[DP_QC_FS_SEARCH]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_GETLIGHT]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_QC_GETSURFACE]]              || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_QC_GETTAGINFO]]              || [[DarkPlaces]]
|-
| [[DP_QC_MINMAXBOUND]]             || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_MULTIPLETEMPSTRINGS]]     || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_RANDOMVEC]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[MVDSV]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_SINCOSSQRTPOW]]           || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_TRACE_MOVETYPE_HITMODEL]] || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]|| [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPES]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACEBOX]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[MVDSV]] [[QMB]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_QC_TRACETOSS]]               || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_UNLIMITEDTEMPSTRINGS]]    || [[DarkPlaces]]
|-
| [[DP_QC_VECTORVECTORS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QUAKE2_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_QUAKE2_SPRITE]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MAP]]                 || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_REGISTERCVAR]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_SENSITIVITYSCALE]]           || [[Betwix]]
|-
| [[DP_SND_DIRECTIONLESSATTNNONE]]  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SND_FAKETRACKS]]             || [[DarkPlaces]]
|-
| [[DP_SND_OGGVORBIS]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SND_STEREOWAV]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SOLIDCORPSE]]                || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SPRITE32]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_SV_BOTCLIENT]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTCOLORS]]            || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTNAME]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_DRAWONLYTOCLIENT]]        || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_DRAWONLYTOTEAM]]          || [[Betwix]]
|-
| [[DP_SV_DROPCLIENT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_SV_EFFECT]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_EXTERIORMODELFORCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_NODRAWTOCLIENT]]          || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_PING]]                    || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_PLAYERPHYSICS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PRINT]]                   || [[DarkPlaces]]
|-
| [[DP_SV_PRECACHEANYTIME]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PUNCHVECTOR]]             || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_ROTATINGBMODEL]]          || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_SV_SETCOLOR]]                || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]]
|-
| [[DP_SV_SLOWMO]]                  || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SV_WRITEUNTERMINATEDSTRING]] || [[DarkPlaces]] [[ezQuake]] [[FTE]]
|-
| [[DP_TE_BLOOD]]                   || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_BLOODSHOWER]]             || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_CUSTOMFLASH]]             || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_EXPLOSIONRGB]]            || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_FLAMEJET]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLECUBE]]            || [[DarkPlaces]] [[QMB]]
|-
| [[DP_TE_PARTICLERAIN]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLESNOW]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PLASMABURN]]              || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_QUADEFFECTS1]]            || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_SMALLFLASH]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_SPARK]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_TE_STANDARDEFFECTBUILTINS]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_VIEWZOOM]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_WEAPONSKIN]]                 || [[Betwix]]
|-
| [[EXT_BITSHIFT]]                  || [[DarkPlaces]] [[Betwix]] [[FTE]]
|-
| [[EXT_CSQC]]                      || [[DarkPlaces]] [[FTE]]
|-
| [[EXT_DIMENSION_GHOST]]           || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_PHYSICS]]         || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_VISIBILITY]]      || [[Betwix]] [[FTE]]
|-
| [[FTE_CALLTIMEOFDAY]]             || [[Betwix]] [[MVDSV]] [[FTE]]
|-
| [[FTE_EXTENDEDTEXTCODES]]         || [[FTE]]
|-
| [[FTE_FORCEINFOKEY]]              || [[FTE]]
|-
| [[FTE_GFX_QUAKE3SHADERS]]         || [[FTE]]
|-
| [[FTE_HEXEN2]]                    || [[FTE]]
|-
| [[FTE_MEDIA_AVI]]                 || [[FTE]]
|-
| [[FTE_MEDIA_CIN]]                 || [[FTE]]
|-
| [[FTE_MEDIA_ROQ]]                 || [[FTE]]
|-
| [[FTE_MULTIPROGS]]                || [[FTE]]
|-
| [[FTE_MULTITHREADED]]             || [[FTE]]
|-
| [[FTE_MVD_PLAYBACK]]              || [[FTE]]
|-
| [[FTE_NPCCHAT]]                   || [[FTE]]
|-
| [[FTE_PEXT_BULLETENS]]            || [[FTE]]
|-
| [[FTE_PEXT_CUSTOMTENTS]]          || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL2]]           || [[FTE]]
|-
| [[FTE_PEXT_FATNESS]]              || [[FTE]]
|-
| [[FTE_PEXT_HULLSIZE]]             || [[FTE]]
|-
| [[FTE_PEXT_LIGHTSTYLECOL]]        || [[FTE]]
|-
| [[FTE_PEXT_LIGHTUPDATES]]         || [[FTE]]
|-
| [[FTE_PEXT_MODELDBL]]             || [[FTE]]
|-
| [[FTE_PEXT_ORIGINDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_Q2BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_Q3BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_SETVIEW]]              || [[FTE]]
|-
| [[FTE_PEXT_SPAWNSTATIC]]          || [[FTE]]
|-
| [[FTE_PEXT_TE_BULLET]]            || [[FTE]]
|-
| [[FTE_PEXT_VIEW2]]                || [[FTE]]
|-
| [[FTE_PEXT_VWEAP]]                || [[FTE]]
|-
| [[FTE_PEXT_ZLIBDL]]               || [[FTE]]
|-
| [[FTE_QC_CHECKPVS]]               || [[FTE]] [[ZQuake]]
|-
| [[FTE_QC_MATCHCLIENTNAME]]        || [[FTE]]
|-
| [[FTE_QC_PAUSED]]                 || [[FTE]]
|-
| [[FTE_QC_SENDPACKET]]             || [[FTE]]
|-
| [[FTE_QC_TRACETRIGGER]]           || [[FTE]]
|-
| [[FTE_SOLID_LADDER]]              || [[FTE]]
|-
| [[FTE_STRINGS]]                   || [[FTE]]
|-
| [[FTE_SV_REENTER]]                || [[FTE]]
|-
| [[FTE_TE_STANDARDEFFECTBUILTINS]] || [[FTE]]
|-
| [[FTE_VALID_VEC_HULL3]]           || [[FTE]]
|-
| [[FRIK_FILE]]                     || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[GQ]] [[Telejano]] [[Vengeance r2]]
|-
| [[KRIMZON_SV_PARSECLIENTCOMMAND]] || [[Betwix]] [[DarkPlaces]] [[FTE]] [[FuhQuake]]
|-
| [[NEH_CMD_PLAY2]]                 || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]]
|-
| [[NEH_RESTOREGAME]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[NEXUIZ_PLAYERMODEL]]            || [[DarkPlaces]]
|-
| [[NXQ_GFX_LETTERBOX]]             || [[DarkPlaces]]
|-
| [[PRYDON_CLIENTCURSOR]]           || [[DarkPlaces]]
|-
| [[QSG_FILE]]                      || [[FrikQuake]] [[Telejano]] [[ToChriS]]
|-
| [[QSG_DIMENSIONAL]]               ||
|-
| [[QSG_NO_CENTERPRINT]]            || [[FungusQC]]
|-
| [[QSG_NO_MDL]]                    || [[FungusQC]]
|-
| [[QSG_NO_NETCODE_Q1]]             || [[FungusQC]]
|-
| [[QW_ENGINE]]                     || [[FTE]]
|-
| [[QWE_MVD_RECORD]]                || [[FTE]]
|-
| [[TEI_AUTOANIMATION]]             || [[Telejano]]
|-
| [[TEI_AUTOFLUOR]]                 || [[Telejano]]
|-
| [[TEI_AUTOFOGWATER]]              || [[Telejano]]
|-
| [[TEI_AUTOFOOT]]                  || [[Telejano]]
|-
| [[TEI_AUTOLAVA]]                  || [[Telejano]]
|-
| [[TEI_AUTOLIGHTDAY]]              || [[Telejano]]
|-
| [[TEI_AUTORAIN]]                  || [[Telejano]]
|-
| [[TEI_AUTOSNOW]]                  || [[Telejano]]
|-
| [[TEI_AUTOVANISH]]                || [[Telejano]]
|-
| [[TEI_AUTOZING]]                  || [[Telejano]]
|-
| [[TEI_BOB2]]                      || [[Telejano]]
|-
| [[TEI_EF_EXTRA]]                  || [[Telejano]]
|-
| [[TEI_EF2_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_EF3_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_HUDMANAGER]]                || [[Telejano]]
|-
| [[TEI_LOCALMENUS1]]               || [[Telejano]]
|-
| [[TEI_LOCALMENUS2]]               || [[Telejano]]
|-
| [[TEI_MAPMODELS]]                 || [[Telejano]]
|-
| [[TEI_MD3_MODEL]]                 || [[FTE]] [[Telejano]]
|-
| [[TEI_MENU_MISC2]]                || [[Telejano]]
|-
| [[TEI_MOD_PROGS]]                 || [[Telejano]]
|-
| [[TEI_MODPREDATOR]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETIC]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETICFOLLOW]]         || [[Telejano]]
|-
| [[TEI_MOVRELATIVESTATIC]]         || [[Betwix]] [[Telejano]]
|-
| [[TEI_SHOWLMP2]]                  || [[FTE]] [[Telejano]]
|-
| [[TEI_SHOWLMP3]]                  || [[Telejano]]
|-
| [[TEI_STATCOUNT]]                 || [[Telejano]]
|-
| [[TEI_STATICFX]]                  || [[Telejano]]
|-
| [[TEI_STEPSIZE]]                  || [[Telejano]]
|-
| [[TEI_SUN]]                       || [[Telejano]]
|-
| [[TEI_SVSKY]]                     || [[Telejano]]
|-
| [[TEI_TE_ALIENEXPLOSION]]         || [[Telejano]]
|-
| [[TEI_TE_CUSTOMFX]]               || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL]]         || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL2]]        || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL3]]        || [[Telejano]]
|-
| [[TEI_TE_IMPLOSIONFX]]            || [[Telejano]]
|-
| [[TEI_TE_LIGHTNING4]]             || [[Telejano]]
|-
| [[TEI_TE_LIGHTNINGX]]             || [[Telejano]]
|-
| [[TEI_TE_PARTICLEBLAST]]          || [[Telejano]]
|-
| [[TEI_TE_STATICFOG]]              || [[Telejano]]
|-
| [[TEI_TE_TRAILS]]                 || [[Telejano]]
|-
| [[TEI_THEMEFOLDER]]               || [[Telejano]]
|-
| [[TEI_TPAKLOAD]]                  || [[Telejano]]
|-
| [[TEI_ZONEFOGS]]                  || [[Telejano]]
|-
| [[TENEBRAE_GFX_DLIGHTS]]          || [[DarkPlaces]]
|-
| [[TIMESCALE]]                     ||
|-
| [[TQ_DLIGHTS]]                    || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_PLASMA]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAILTRAIL]]                  || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAIN]]                       || [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SLOWMO]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SNOW]]                       || [[FrikQuake]] [[Telejano]] [[TomazQuake]]
|-
| [[TW_SV_STEPCONTROLS]]            || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Twilight]]
|-
| [[UDC_EXTEFFECT]]                 ||
|-
| [[VEN_SCRIPT_PARTICLES]]          || [[Vengeance r2]]
|-
| [[ZQ_CLIENTCOMMAND]]              || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_INPUTBUTTONS]]               || [[ZQuake]]
|-
| [[ZQ_ITEMS2]]                     || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NOCLIP]] (QW)       || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_FLY]] (QW)          || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NONE]] (QW)         || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_PAUSE]]                      || [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_QC_PARTICLE]] (QW)           || [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_STRINGS]]                 || [[ezQuake]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_TOKENIZE]]                || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_SETINFO]]                    || [[ZQuake]]
|-
| [[ZQ_SOUNDTOCLIENT]]              || [[ZQuake]]
|-
| [[ZQ_VWEP]]                       || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
|}

===See Also===
* http://web.archive.org/web/*/http://www.quakesrc.org/registry.php</text>
      <sha1>5ogxfdm9ciih95c45lfhz9e9z0fse41</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>412</id>
      <parentid>51</parentid>
      <timestamp>2008-02-28T13:13:20Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="20872">Thanks to a cooperative effort between [[QuakeSrc]], LordHavoc and Tomaz a variety of new engines support a Extension-Detection system called, for the purposes of this wiki, &quot;QSG Extensions&quot;. These are meant to be used by [[QuakeC]] modders to expand and make use of the new engine features without breaking compatability with other engines ([[Prydon Gate]] is a good example of how this can be done).

For more information on how to use these, read about the [[checkextension]] builtin.

QSG Extensions are a powerful method. Mods addapt to higher and lower profiles, and engine coders dont need to stop to add new features, and QuakeC modders dont need to stop using it. But doing in the right way, everybody can run mods.

Notes:

* [[DarkPlaces]] and [[TomazQuake]] support most of the old QSG keys. Actually this keys have the widen support betwen engines.
* [[Telejano]] adds a lot of new QSG keys, but most are undocumented.
* The new [[DarkPlaces]] builds add some new and very interesting keys.
* [[FTE QuakeWorld]] adds a whole new spon on things. Visit [How FTE is broken] for more information.
* You can deactivate normal features with QSG keys. Example: If you create a engine that not support centerprints. You can use QSG_NO_CENTERPRINT. If you mod its coded checking that centerprint, will run on your engine with no-centerprint and on engines with centerprint. Negative QSG keys are usefull to use Quake1 mods with other engines that can load progs.dat files, like [[FungusQC]].
* [[Builtin ranges]]

{|style=&quot;border:1px solid #000000&quot;
|-
|align=&quot;center&quot;| '''Name'''
|align=&quot;center&quot;| '''Supported by'''
|-
| [[BX_COLOREDTEXT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_CON_DEL]]                    || [[Betwix]]
|-
| [[BX_CON_EXT]]                    || [[Betwix]]
|-
| [[BX_CON_TEXREPLACE]]             || [[Betwix]]
|-
| [[BX_CON_VAR]]                    || [[Betwix]]
|-
| [[BX_CON_WRITECONFIG]]            || [[Betwix]]
|-
| [[BX_ENGINE]]                     || [[Betwix]]
|-
| [[BX_ENT_BOUNCESCALE]]            || [[Betwix]]
|-
| [[BX_ENT_FRICTION]]               || [[Betwix]]
|-
| [[BX_ENT_MODELFLAGS]]             || [[Betwix]]
|-
| [[BX_GFX_SKYBOX]]                 || [[Betwix]]
|-
| [[BX_GFX_SUN]]                    || [[Betwix]]
|-
| [[BX_INPUTBUTTONS]]               || [[Betwix]]
|-
| [[BX_MDLOVERRIDE]]                || [[Betwix]]
|-
| [[BX_MULTIPLEFONTS]]              || [[Betwix]]
|-
| [[BX_P_M_SUPPORT]]                || [[Betwix]]
|-
| [[BX_QC_CAMERA]]                  || [[Betwix]]
|-
| [[BX_QC_CHECKFOV]]                || [[Betwix]]
|-
| [[BX_QC_FINDFIELDCHAIN]]          || [[Betwix]]
|-
| [[BX_QC_GETDATETIME]]             || [[Betwix]]
|-
| [[BX_QC_INIFILE]]                 || [[Betwix]]
|-
| [[BX_QC_MSGREAD]]                 || [[Betwix]]
|-
| [[BX_QC_PROGPARMS]]               || [[Betwix]]
|-
| [[BX_QC_PROTOCOL_FLAGS]]          || [[Betwix]]
|-
| [[BX_QC_SOUNDTEAM]]               || [[Betwix]]
|-
| [[BX_QC_SPRINTF]]                 || [[Betwix]]
|-
| [[BX_QC_STR]]                     || [[Betwix]]
|-
| [[BX_QC_VECMATH]]                 || [[Betwix]]
|-
| [[BX_QC_VISIBLE]]                 || [[Betwix]]
|-
| [[BX_SERVERPROGS]]                || [[Betwix]]
|-
| [[BX_SND_MUSIC]]                  || [[Betwix]]
|-
| [[BX_SV_LOCKCVARCMD]]             || [[Betwix]]
|-
| [[BX_SV_PARSESAY]]                || [[Betwix]]
|-
| [[BX_SV_UPDATE_CLIENTCVARS]]      || [[Betwix]]
|-
| [[BX_WAL_SUPPORT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_WEAPONBOB]]                  || [[Betwix]]
|-
| [[DP_BUTTONCHAT]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_BUTTONUSE]]                  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_CGAME]]                      || [[DarkPlaces]]
|-
| [[DP_CL_LOADSKY]]                 || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[ToChriS]] [[Vengeance r2]]
|-
| [[DP_CON_ALIASPARAMETERS]]        || [[DarkPlaces]]
|-
| [[DP_CON_EXPANDCVAR]]             || [[DarkPlaces]]
|-
| [[DP_CON_SET]]                    || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]] [[ezQuake]] [[ZQuake]]
|-
| [[DP_CON_SETA]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_CON_STARTMAP]]               || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_DOUBLESIDED]]             || [[DarkPlaces]]
|-
| [[DP_EF_ADDITIVE]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_BLUE]]                    || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_FLAME]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_FULLBRIGHT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NODEPTHTEST]]             || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_NODRAW]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NOSHADOW]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_EF_RED]]                     || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_STARDUST]]                || [[DarkPlaces]]
|-
| [[DP_ENT_ALPHA]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_ENT_COLORMOD]]               || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_ENT_CUSTOMCOLORMAP]]         || [[DarkPlaces]]
|-
| [[DP_ENT_DELTACOMPRESS]]          ||
|-
| [[DP_ENT_EXTERIORMODELTOCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_ENT_GLOW]]                   || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_ENT_LOWPRECISION]]           || [[DarkPlaces]]
|-
| [[DP_ENT_SCALE]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]]
|-
| [[DP_ENT_VIEWMODEL]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_EXTERNALTEXTURES]]       || [[DarkPlaces]]
|-
| [[DP_GFX_FOG]]                    || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_GFX_QUAKE3MODELTAGS]]        || [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_SKINFILES]]              || [[DarkPlaces]]
|-
| [[DP_GFX_SKYBOX]]                 || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_HALFLIFE_MAP]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_MAP_CVAR]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FTE]] [[ZQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_SPRITE]]            || [[DarkPlaces]]
|-
| [[DP_INPUTBUTTONS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_LITSPRITES]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_LITSUPPORT]]                 || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_MD3_TAGSINFO]]               ||
|-
| [[DP_MONSTERWALK]]                || [[DarkPlaces]] [[FTE]] [[Telejano]] [[ZQuake]]
|-
| [[DP_MOVETYPEBOUNCEMISSILE]]      || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_MOVETYPEFOLLOW]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_QC_CHANGEPITCH]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_COPYENTITY]]              || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[Vengeance r2]]
|-
| [[DP_QC_CVAR_STRING]]             || [[Betwix]] [[DarkPlaces]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[DP_QC_ETOS]]                    || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_FINDCHAIN]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDCHAINFLAGS]]          || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDCHAINFLOAT]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDFLAGS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDFLOAT]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]] [[QMB]] [[FuhQuake]]
|-
| [[DP_QC_FS_SEARCH]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_GETLIGHT]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_QC_GETSURFACE]]              || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_QC_GETTAGINFO]]              || [[DarkPlaces]]
|-
| [[DP_QC_MINMAXBOUND]]             || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_MULTIPLETEMPSTRINGS]]     || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_RANDOMVEC]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[MVDSV]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_SINCOSSQRTPOW]]           || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_TRACE_MOVETYPE_HITMODEL]] || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]|| [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPES]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACEBOX]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[MVDSV]] [[QMB]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_QC_TRACETOSS]]               || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_UNLIMITEDTEMPSTRINGS]]    || [[DarkPlaces]]
|-
| [[DP_QC_VECTORVECTORS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QUAKE2_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_QUAKE2_SPRITE]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MAP]]                 || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_REGISTERCVAR]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_SENSITIVITYSCALE]]           || [[Betwix]]
|-
| [[DP_SND_DIRECTIONLESSATTNNONE]]  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SND_FAKETRACKS]]             || [[DarkPlaces]]
|-
| [[DP_SND_OGGVORBIS]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SND_STEREOWAV]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SOLIDCORPSE]]                || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SPRITE32]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_SV_BOTCLIENT]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTCOLORS]]            || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTNAME]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_DRAWONLYTOCLIENT]]        || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_DRAWONLYTOTEAM]]          || [[Betwix]]
|-
| [[DP_SV_DROPCLIENT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_SV_EFFECT]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_EXTERIORMODELFORCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_NODRAWTOCLIENT]]          || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_PING]]                    || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_PLAYERPHYSICS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PRINT]]                   || [[DarkPlaces]]
|-
| [[DP_SV_PRECACHEANYTIME]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PUNCHVECTOR]]             || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_ROTATINGBMODEL]]          || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_SV_SETCOLOR]]                || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]]
|-
| [[DP_SV_SLOWMO]]                  || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SV_WRITEUNTERMINATEDSTRING]] || [[DarkPlaces]] [[ezQuake]] [[FTE]]
|-
| [[DP_TE_BLOOD]]                   || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_BLOODSHOWER]]             || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_CUSTOMFLASH]]             || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_EXPLOSIONRGB]]            || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_FLAMEJET]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLECUBE]]            || [[DarkPlaces]] [[QMB]]
|-
| [[DP_TE_PARTICLERAIN]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLESNOW]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PLASMABURN]]              || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_QUADEFFECTS1]]            || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_SMALLFLASH]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_SPARK]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_TE_STANDARDEFFECTBUILTINS]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_VIEWZOOM]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_WEAPONSKIN]]                 || [[Betwix]]
|-
| [[EXT_BITSHIFT]]                  || [[DarkPlaces]] [[Betwix]] [[FTE]]
|-
| [[EXT_CSQC]]                      || [[DarkPlaces]] [[FTE]]
|-
| [[EXT_DIMENSION_GHOST]]           || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_PHYSICS]]         || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_VISIBILITY]]      || [[Betwix]] [[FTE]]
|-
| [[FTE_CALLTIMEOFDAY]]             || [[Betwix]] [[MVDSV]] [[FTE]]
|-
| [[FTE_EXTENDEDTEXTCODES]]         || [[FTE]]
|-
| [[FTE_FORCEINFOKEY]]              || [[FTE]]
|-
| [[FTE_GFX_QUAKE3SHADERS]]         || [[FTE]]
|-
| [[FTE_HEXEN2]]                    || [[FTE]]
|-
| [[FTE_MEDIA_AVI]]                 || [[FTE]]
|-
| [[FTE_MEDIA_CIN]]                 || [[FTE]]
|-
| [[FTE_MEDIA_ROQ]]                 || [[FTE]]
|-
| [[FTE_MULTIPROGS]]                || [[FTE]]
|-
| [[FTE_MULTITHREADED]]             || [[FTE]]
|-
| [[FTE_MVD_PLAYBACK]]              || [[FTE]]
|-
| [[FTE_NPCCHAT]]                   || [[FTE]]
|-
| [[FTE_PEXT_BULLETENS]]            || [[FTE]]
|-
| [[FTE_PEXT_CUSTOMTENTS]]          || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL2]]           || [[FTE]]
|-
| [[FTE_PEXT_FATNESS]]              || [[FTE]]
|-
| [[FTE_PEXT_HULLSIZE]]             || [[FTE]]
|-
| [[FTE_PEXT_LIGHTSTYLECOL]]        || [[FTE]]
|-
| [[FTE_PEXT_LIGHTUPDATES]]         || [[FTE]]
|-
| [[FTE_PEXT_MODELDBL]]             || [[FTE]]
|-
| [[FTE_PEXT_ORIGINDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_Q2BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_Q3BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_SETVIEW]]              || [[FTE]]
|-
| [[FTE_PEXT_SPAWNSTATIC]]          || [[FTE]]
|-
| [[FTE_PEXT_TE_BULLET]]            || [[FTE]]
|-
| [[FTE_PEXT_VIEW2]]                || [[FTE]]
|-
| [[FTE_PEXT_VWEAP]]                || [[FTE]]
|-
| [[FTE_PEXT_ZLIBDL]]               || [[FTE]]
|-
| [[FTE_QC_CHECKPVS]]               || [[FTE]] [[ZQuake]]
|-
| [[FTE_QC_MATCHCLIENTNAME]]        || [[FTE]]
|-
| [[FTE_QC_PAUSED]]                 || [[FTE]]
|-
| [[FTE_QC_SENDPACKET]]             || [[FTE]]
|-
| [[FTE_QC_TRACETRIGGER]]           || [[FTE]]
|-
| [[FTE_SOLID_LADDER]]              || [[FTE]]
|-
| [[FTE_STRINGS]]                   || [[FTE]]
|-
| [[FTE_SV_REENTER]]                || [[FTE]]
|-
| [[FTE_TE_STANDARDEFFECTBUILTINS]] || [[FTE]]
|-
| [[FTE_VALID_VEC_HULL3]]           || [[FTE]]
|-
| [[FRIK_FILE]]                     || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[GQ]] [[Telejano]] [[Vengeance r2]]
|-
| [[KRIMZON_SV_PARSECLIENTCOMMAND]] || [[Betwix]] [[DarkPlaces]] [[FTE]] [[FuhQuake]]
|-
| [[NEH_CMD_PLAY2]]                 || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]]
|-
| [[NEH_RESTOREGAME]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[NEXUIZ_PLAYERMODEL]]            || [[DarkPlaces]]
|-
| [[NXQ_GFX_LETTERBOX]]             || [[DarkPlaces]]
|-
| [[PRYDON_CLIENTCURSOR]]           || [[DarkPlaces]]
|-
| [[QSG_FILE]]                      || [[FrikQuake]] [[Telejano]] [[ToChriS]]
|-
| [[QSG_DIMENSIONAL]]               ||
|-
| [[QSG_NO_CENTERPRINT]]            || [[FungusQC]]
|-
| [[QSG_NO_MDL]]                    || [[FungusQC]]
|-
| [[QSG_NO_NETCODE_Q1]]             || [[FungusQC]]
|-
| [[QW_ENGINE]]                     || [[FTE]]
|-
| [[QWE_MVD_RECORD]]                || [[FTE]]
|-
| [[TEI_AUTOANIMATION]]             || [[Telejano]]
|-
| [[TEI_AUTOFLUOR]]                 || [[Telejano]]
|-
| [[TEI_AUTOFOGWATER]]              || [[Telejano]]
|-
| [[TEI_AUTOFOOT]]                  || [[Telejano]]
|-
| [[TEI_AUTOLAVA]]                  || [[Telejano]]
|-
| [[TEI_AUTOLIGHTDAY]]              || [[Telejano]]
|-
| [[TEI_AUTORAIN]]                  || [[Telejano]]
|-
| [[TEI_AUTOSNOW]]                  || [[Telejano]]
|-
| [[TEI_AUTOVANISH]]                || [[Telejano]]
|-
| [[TEI_AUTOZING]]                  || [[Telejano]]
|-
| [[TEI_BOB2]]                      || [[Telejano]]
|-
| [[TEI_EF_EXTRA]]                  || [[Telejano]]
|-
| [[TEI_EF2_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_EF3_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_HUDMANAGER]]                || [[Telejano]]
|-
| [[TEI_LOCALMENUS1]]               || [[Telejano]]
|-
| [[TEI_LOCALMENUS2]]               || [[Telejano]]
|-
| [[TEI_MAPMODELS]]                 || [[Telejano]]
|-
| [[TEI_MD3_MODEL]]                 || [[FTE]] [[Telejano]]
|-
| [[TEI_MENU_MISC2]]                || [[Telejano]]
|-
| [[TEI_MOD_PROGS]]                 || [[Telejano]]
|-
| [[TEI_MODPREDATOR]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETIC]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETICFOLLOW]]         || [[Telejano]]
|-
| [[TEI_MOVRELATIVESTATIC]]         || [[Betwix]] [[Telejano]]
|-
| [[TEI_SHOWLMP2]]                  || [[FTE]] [[Telejano]]
|-
| [[TEI_SHOWLMP3]]                  || [[Telejano]]
|-
| [[TEI_STATCOUNT]]                 || [[Telejano]]
|-
| [[TEI_STATICFX]]                  || [[Telejano]]
|-
| [[TEI_STEPSIZE]]                  || [[Telejano]]
|-
| [[TEI_SUN]]                       || [[Telejano]]
|-
| [[TEI_SVSKY]]                     || [[Telejano]]
|-
| [[TEI_TE_ALIENEXPLOSION]]         || [[Telejano]]
|-
| [[TEI_TE_CUSTOMFX]]               || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL]]         || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL2]]        || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL3]]        || [[Telejano]]
|-
| [[TEI_TE_IMPLOSIONFX]]            || [[Telejano]]
|-
| [[TEI_TE_LIGHTNING4]]             || [[Telejano]]
|-
| [[TEI_TE_LIGHTNINGX]]             || [[Telejano]]
|-
| [[TEI_TE_PARTICLEBLAST]]          || [[Telejano]]
|-
| [[TEI_TE_STATICFOG]]              || [[Telejano]]
|-
| [[TEI_TE_TRAILS]]                 || [[Telejano]]
|-
| [[TEI_THEMEFOLDER]]               || [[Telejano]]
|-
| [[TEI_TPAKLOAD]]                  || [[Telejano]]
|-
| [[TEI_ZONEFOGS]]                  || [[Telejano]]
|-
| [[TENEBRAE_GFX_DLIGHTS]]          || [[DarkPlaces]]
|-
| [[TIMESCALE]]                     ||
|-
| [[TQ_DLIGHTS]]                    || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_PLASMA]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAILTRAIL]]                  || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAIN]]                       || [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SLOWMO]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SNOW]]                       || [[FrikQuake]] [[Telejano]] [[TomazQuake]]
|-
| [[TW_SV_STEPCONTROLS]]            || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Twilight]]
|-
| [[UDC_EXTEFFECT]]                 ||
|-
| [[VEN_SCRIPT_PARTICLES]]          || [[Vengeance r2]]
|-
| [[ZQ_CLIENTCOMMAND]]              || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_INPUTBUTTONS]]               || [[ZQuake]]
|-
| [[ZQ_ITEMS2]]                     || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NOCLIP]] (QW)       || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_FLY]] (QW)          || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NONE]] (QW)         || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_PAUSE]]                      || [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_QC_PARTICLE]] (QW)           || [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_STRINGS]]                 || [[ezQuake]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_TOKENIZE]]                || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_SETINFO]]                    || [[ZQuake]]
|-
| [[ZQ_SOUNDTOCLIENT]]              || [[ZQuake]]
|-
| [[ZQ_VWEP]]                       || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
|}

===See Also===
* http://web.archive.org/web/*/http://www.quakesrc.org/registry.php</text>
      <sha1>9wjpbei9or9s1r8befqqveza9x7g038</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>413</id>
      <parentid>412</parentid>
      <timestamp>2008-02-28T13:14:00Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="20872">Thanks to a cooperative effort between [[QuakeSrc]], LordHavoc and Tomaz a variety of new engines support a Extension-Detection system called, for the purposes of this wiki, &quot;QSG Extensions&quot;. These are meant to be used by [[QuakeC]] modders to expand and make use of the new engine features without breaking compatability with other engines ([[Prydon Gate]] is a good example of how this can be done).

For more information on how to use these, read about the [[checkextension]] builtin.

QSG Extensions are a powerful method. Mods addapt to higher and lower profiles, and engine coders dont need to stop to add new features, and QuakeC modders dont need to stop using it. But doing in the right way, everybody can run mods.

Notes:

* [[DarkPlaces]] and [[TomazQuake]] support most of the old QSG keys. Actually this keys have the widen support betwen engines.
* [[Telejano]] adds a lot of new QSG keys, but most are undocumented.
* The new [[DarkPlaces]] builds add some new and very interesting keys.
* [[FTE QuakeWorld]] adds a whole new spon on things. Visit [How FTE is broken] for more information.
* You can deactivate normal features with QSG keys. Example: If you create a engine that not support centerprints. You can use QSG_NO_CENTERPRINT. If you mod its coded checking that centerprint, will run on your engine with no-centerprint and on engines with centerprint. Negative QSG keys are usefull to use Quake1 mods with other engines that can load progs.dat files, like [[FungusQC]].
* [[Builtin ranges]]

{|style=&quot;border:1px solid #000000&quot;
|-
|align=&quot;center&quot;| '''Name'''
|align=&quot;center&quot;| '''Supported by'''
|-
| [[BX_COLOREDTEXT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_CON_DEL]]                    || [[Betwix]]
|-
| [[BX_CON_EXT]]                    || [[Betwix]]
|-
| [[BX_CON_TEXREPLACE]]             || [[Betwix]]
|-
| [[BX_CON_VAR]]                    || [[Betwix]]
|-
| [[BX_CON_WRITECONFIG]]            || [[Betwix]]
|-
| [[BX_ENGINE]]                     || [[Betwix]]
|-
| [[BX_ENT_BOUNCESCALE]]            || [[Betwix]]
|-
| [[BX_ENT_FRICTION]]               || [[Betwix]]
|-
| [[BX_ENT_MODELFLAGS]]             || [[Betwix]]
|-
| [[BX_GFX_SKYBOX]]                 || [[Betwix]]
|-
| [[BX_GFX_SUN]]                    || [[Betwix]]
|-
| [[BX_INPUTBUTTONS]]               || [[Betwix]]
|-
| [[BX_MDLOVERRIDE]]                || [[Betwix]]
|-
| [[BX_MULTIPLEFONTS]]              || [[Betwix]]
|-
| [[BX_P_M_SUPPORT]]                || [[Betwix]]
|-
| [[BX_QC_CAMERA]]                  || [[Betwix]]
|-
| [[BX_QC_CHECKFOV]]                || [[Betwix]]
|-
| [[BX_QC_FINDFIELDCHAIN]]          || [[Betwix]]
|-
| [[BX_QC_GETDATETIME]]             || [[Betwix]]
|-
| [[BX_QC_INIFILE]]                 || [[Betwix]]
|-
| [[BX_QC_MSGREAD]]                 || [[Betwix]]
|-
| [[BX_QC_PROGPARMS]]               || [[Betwix]]
|-
| [[BX_QC_PROTOCOL_FLAGS]]          || [[Betwix]]
|-
| [[BX_QC_SOUNDTEAM]]               || [[Betwix]]
|-
| [[BX_QC_SPRINTF]]                 || [[Betwix]]
|-
| [[BX_QC_STR]]                     || [[Betwix]]
|-
| [[BX_QC_VECMATH]]                 || [[Betwix]]
|-
| [[BX_QC_VISIBLE]]                 || [[Betwix]]
|-
| [[BX_SERVERPROGS]]                || [[Betwix]]
|-
| [[BX_SND_MUSIC]]                  || [[Betwix]]
|-
| [[BX_SV_LOCKCVARCMD]]             || [[Betwix]]
|-
| [[BX_SV_PARSESAY]]                || [[Betwix]]
|-
| [[BX_SV_UPDATE_CLIENTCVARS]]      || [[Betwix]]
|-
| [[BX_WAL_SUPPORT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_WEAPONBOB]]                  || [[Betwix]]
|-
| [[DP_BUTTONCHAT]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_BUTTONUSE]]                  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_CGAME]]                      || [[DarkPlaces]]
|-
| [[DP_CL_LOADSKY]]                 || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[ToChriS]] [[Vengeance r2]]
|-
| [[DP_CON_ALIASPARAMETERS]]        || [[DarkPlaces]]
|-
| [[DP_CON_EXPANDCVAR]]             || [[DarkPlaces]]
|-
| [[DP_CON_SET]]                    || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]] [[ezQuake]] [[ZQuake]]
|-
| [[DP_CON_SETA]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_CON_STARTMAP]]               || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_ADDITIVE]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_BLUE]]                    || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_DOUBLESIDED]]             || [[DarkPlaces]]
|-
| [[DP_EF_FLAME]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_FULLBRIGHT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NODEPTHTEST]]             || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_NODRAW]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NOSHADOW]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_EF_RED]]                     || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_STARDUST]]                || [[DarkPlaces]]
|-
| [[DP_ENT_ALPHA]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_ENT_COLORMOD]]               || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_ENT_CUSTOMCOLORMAP]]         || [[DarkPlaces]]
|-
| [[DP_ENT_DELTACOMPRESS]]          ||
|-
| [[DP_ENT_EXTERIORMODELTOCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_ENT_GLOW]]                   || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_ENT_LOWPRECISION]]           || [[DarkPlaces]]
|-
| [[DP_ENT_SCALE]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]]
|-
| [[DP_ENT_VIEWMODEL]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_EXTERNALTEXTURES]]       || [[DarkPlaces]]
|-
| [[DP_GFX_FOG]]                    || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_GFX_QUAKE3MODELTAGS]]        || [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_SKINFILES]]              || [[DarkPlaces]]
|-
| [[DP_GFX_SKYBOX]]                 || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_HALFLIFE_MAP]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_MAP_CVAR]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FTE]] [[ZQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_SPRITE]]            || [[DarkPlaces]]
|-
| [[DP_INPUTBUTTONS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_LITSPRITES]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_LITSUPPORT]]                 || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_MD3_TAGSINFO]]               ||
|-
| [[DP_MONSTERWALK]]                || [[DarkPlaces]] [[FTE]] [[Telejano]] [[ZQuake]]
|-
| [[DP_MOVETYPEBOUNCEMISSILE]]      || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_MOVETYPEFOLLOW]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_QC_CHANGEPITCH]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_COPYENTITY]]              || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[Vengeance r2]]
|-
| [[DP_QC_CVAR_STRING]]             || [[Betwix]] [[DarkPlaces]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[DP_QC_ETOS]]                    || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_FINDCHAIN]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDCHAINFLAGS]]          || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDCHAINFLOAT]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDFLAGS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDFLOAT]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]] [[QMB]] [[FuhQuake]]
|-
| [[DP_QC_FS_SEARCH]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_GETLIGHT]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_QC_GETSURFACE]]              || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_QC_GETTAGINFO]]              || [[DarkPlaces]]
|-
| [[DP_QC_MINMAXBOUND]]             || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_MULTIPLETEMPSTRINGS]]     || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_RANDOMVEC]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[MVDSV]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_SINCOSSQRTPOW]]           || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_TRACE_MOVETYPE_HITMODEL]] || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]|| [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPES]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACEBOX]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[MVDSV]] [[QMB]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_QC_TRACETOSS]]               || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_UNLIMITEDTEMPSTRINGS]]    || [[DarkPlaces]]
|-
| [[DP_QC_VECTORVECTORS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QUAKE2_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_QUAKE2_SPRITE]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MAP]]                 || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_REGISTERCVAR]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_SENSITIVITYSCALE]]           || [[Betwix]]
|-
| [[DP_SND_DIRECTIONLESSATTNNONE]]  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SND_FAKETRACKS]]             || [[DarkPlaces]]
|-
| [[DP_SND_OGGVORBIS]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SND_STEREOWAV]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SOLIDCORPSE]]                || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SPRITE32]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_SV_BOTCLIENT]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTCOLORS]]            || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTNAME]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_DRAWONLYTOCLIENT]]        || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_DRAWONLYTOTEAM]]          || [[Betwix]]
|-
| [[DP_SV_DROPCLIENT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_SV_EFFECT]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_EXTERIORMODELFORCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_NODRAWTOCLIENT]]          || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_PING]]                    || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_PLAYERPHYSICS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PRINT]]                   || [[DarkPlaces]]
|-
| [[DP_SV_PRECACHEANYTIME]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PUNCHVECTOR]]             || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_ROTATINGBMODEL]]          || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_SV_SETCOLOR]]                || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]]
|-
| [[DP_SV_SLOWMO]]                  || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SV_WRITEUNTERMINATEDSTRING]] || [[DarkPlaces]] [[ezQuake]] [[FTE]]
|-
| [[DP_TE_BLOOD]]                   || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_BLOODSHOWER]]             || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_CUSTOMFLASH]]             || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_EXPLOSIONRGB]]            || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_FLAMEJET]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLECUBE]]            || [[DarkPlaces]] [[QMB]]
|-
| [[DP_TE_PARTICLERAIN]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLESNOW]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PLASMABURN]]              || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_QUADEFFECTS1]]            || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_SMALLFLASH]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_SPARK]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_TE_STANDARDEFFECTBUILTINS]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_VIEWZOOM]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_WEAPONSKIN]]                 || [[Betwix]]
|-
| [[EXT_BITSHIFT]]                  || [[DarkPlaces]] [[Betwix]] [[FTE]]
|-
| [[EXT_CSQC]]                      || [[DarkPlaces]] [[FTE]]
|-
| [[EXT_DIMENSION_GHOST]]           || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_PHYSICS]]         || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_VISIBILITY]]      || [[Betwix]] [[FTE]]
|-
| [[FTE_CALLTIMEOFDAY]]             || [[Betwix]] [[MVDSV]] [[FTE]]
|-
| [[FTE_EXTENDEDTEXTCODES]]         || [[FTE]]
|-
| [[FTE_FORCEINFOKEY]]              || [[FTE]]
|-
| [[FTE_GFX_QUAKE3SHADERS]]         || [[FTE]]
|-
| [[FTE_HEXEN2]]                    || [[FTE]]
|-
| [[FTE_MEDIA_AVI]]                 || [[FTE]]
|-
| [[FTE_MEDIA_CIN]]                 || [[FTE]]
|-
| [[FTE_MEDIA_ROQ]]                 || [[FTE]]
|-
| [[FTE_MULTIPROGS]]                || [[FTE]]
|-
| [[FTE_MULTITHREADED]]             || [[FTE]]
|-
| [[FTE_MVD_PLAYBACK]]              || [[FTE]]
|-
| [[FTE_NPCCHAT]]                   || [[FTE]]
|-
| [[FTE_PEXT_BULLETENS]]            || [[FTE]]
|-
| [[FTE_PEXT_CUSTOMTENTS]]          || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL2]]           || [[FTE]]
|-
| [[FTE_PEXT_FATNESS]]              || [[FTE]]
|-
| [[FTE_PEXT_HULLSIZE]]             || [[FTE]]
|-
| [[FTE_PEXT_LIGHTSTYLECOL]]        || [[FTE]]
|-
| [[FTE_PEXT_LIGHTUPDATES]]         || [[FTE]]
|-
| [[FTE_PEXT_MODELDBL]]             || [[FTE]]
|-
| [[FTE_PEXT_ORIGINDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_Q2BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_Q3BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_SETVIEW]]              || [[FTE]]
|-
| [[FTE_PEXT_SPAWNSTATIC]]          || [[FTE]]
|-
| [[FTE_PEXT_TE_BULLET]]            || [[FTE]]
|-
| [[FTE_PEXT_VIEW2]]                || [[FTE]]
|-
| [[FTE_PEXT_VWEAP]]                || [[FTE]]
|-
| [[FTE_PEXT_ZLIBDL]]               || [[FTE]]
|-
| [[FTE_QC_CHECKPVS]]               || [[FTE]] [[ZQuake]]
|-
| [[FTE_QC_MATCHCLIENTNAME]]        || [[FTE]]
|-
| [[FTE_QC_PAUSED]]                 || [[FTE]]
|-
| [[FTE_QC_SENDPACKET]]             || [[FTE]]
|-
| [[FTE_QC_TRACETRIGGER]]           || [[FTE]]
|-
| [[FTE_SOLID_LADDER]]              || [[FTE]]
|-
| [[FTE_STRINGS]]                   || [[FTE]]
|-
| [[FTE_SV_REENTER]]                || [[FTE]]
|-
| [[FTE_TE_STANDARDEFFECTBUILTINS]] || [[FTE]]
|-
| [[FTE_VALID_VEC_HULL3]]           || [[FTE]]
|-
| [[FRIK_FILE]]                     || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[GQ]] [[Telejano]] [[Vengeance r2]]
|-
| [[KRIMZON_SV_PARSECLIENTCOMMAND]] || [[Betwix]] [[DarkPlaces]] [[FTE]] [[FuhQuake]]
|-
| [[NEH_CMD_PLAY2]]                 || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]]
|-
| [[NEH_RESTOREGAME]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[NEXUIZ_PLAYERMODEL]]            || [[DarkPlaces]]
|-
| [[NXQ_GFX_LETTERBOX]]             || [[DarkPlaces]]
|-
| [[PRYDON_CLIENTCURSOR]]           || [[DarkPlaces]]
|-
| [[QSG_FILE]]                      || [[FrikQuake]] [[Telejano]] [[ToChriS]]
|-
| [[QSG_DIMENSIONAL]]               ||
|-
| [[QSG_NO_CENTERPRINT]]            || [[FungusQC]]
|-
| [[QSG_NO_MDL]]                    || [[FungusQC]]
|-
| [[QSG_NO_NETCODE_Q1]]             || [[FungusQC]]
|-
| [[QW_ENGINE]]                     || [[FTE]]
|-
| [[QWE_MVD_RECORD]]                || [[FTE]]
|-
| [[TEI_AUTOANIMATION]]             || [[Telejano]]
|-
| [[TEI_AUTOFLUOR]]                 || [[Telejano]]
|-
| [[TEI_AUTOFOGWATER]]              || [[Telejano]]
|-
| [[TEI_AUTOFOOT]]                  || [[Telejano]]
|-
| [[TEI_AUTOLAVA]]                  || [[Telejano]]
|-
| [[TEI_AUTOLIGHTDAY]]              || [[Telejano]]
|-
| [[TEI_AUTORAIN]]                  || [[Telejano]]
|-
| [[TEI_AUTOSNOW]]                  || [[Telejano]]
|-
| [[TEI_AUTOVANISH]]                || [[Telejano]]
|-
| [[TEI_AUTOZING]]                  || [[Telejano]]
|-
| [[TEI_BOB2]]                      || [[Telejano]]
|-
| [[TEI_EF_EXTRA]]                  || [[Telejano]]
|-
| [[TEI_EF2_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_EF3_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_HUDMANAGER]]                || [[Telejano]]
|-
| [[TEI_LOCALMENUS1]]               || [[Telejano]]
|-
| [[TEI_LOCALMENUS2]]               || [[Telejano]]
|-
| [[TEI_MAPMODELS]]                 || [[Telejano]]
|-
| [[TEI_MD3_MODEL]]                 || [[FTE]] [[Telejano]]
|-
| [[TEI_MENU_MISC2]]                || [[Telejano]]
|-
| [[TEI_MOD_PROGS]]                 || [[Telejano]]
|-
| [[TEI_MODPREDATOR]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETIC]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETICFOLLOW]]         || [[Telejano]]
|-
| [[TEI_MOVRELATIVESTATIC]]         || [[Betwix]] [[Telejano]]
|-
| [[TEI_SHOWLMP2]]                  || [[FTE]] [[Telejano]]
|-
| [[TEI_SHOWLMP3]]                  || [[Telejano]]
|-
| [[TEI_STATCOUNT]]                 || [[Telejano]]
|-
| [[TEI_STATICFX]]                  || [[Telejano]]
|-
| [[TEI_STEPSIZE]]                  || [[Telejano]]
|-
| [[TEI_SUN]]                       || [[Telejano]]
|-
| [[TEI_SVSKY]]                     || [[Telejano]]
|-
| [[TEI_TE_ALIENEXPLOSION]]         || [[Telejano]]
|-
| [[TEI_TE_CUSTOMFX]]               || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL]]         || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL2]]        || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL3]]        || [[Telejano]]
|-
| [[TEI_TE_IMPLOSIONFX]]            || [[Telejano]]
|-
| [[TEI_TE_LIGHTNING4]]             || [[Telejano]]
|-
| [[TEI_TE_LIGHTNINGX]]             || [[Telejano]]
|-
| [[TEI_TE_PARTICLEBLAST]]          || [[Telejano]]
|-
| [[TEI_TE_STATICFOG]]              || [[Telejano]]
|-
| [[TEI_TE_TRAILS]]                 || [[Telejano]]
|-
| [[TEI_THEMEFOLDER]]               || [[Telejano]]
|-
| [[TEI_TPAKLOAD]]                  || [[Telejano]]
|-
| [[TEI_ZONEFOGS]]                  || [[Telejano]]
|-
| [[TENEBRAE_GFX_DLIGHTS]]          || [[DarkPlaces]]
|-
| [[TIMESCALE]]                     ||
|-
| [[TQ_DLIGHTS]]                    || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_PLASMA]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAILTRAIL]]                  || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAIN]]                       || [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SLOWMO]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SNOW]]                       || [[FrikQuake]] [[Telejano]] [[TomazQuake]]
|-
| [[TW_SV_STEPCONTROLS]]            || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Twilight]]
|-
| [[UDC_EXTEFFECT]]                 ||
|-
| [[VEN_SCRIPT_PARTICLES]]          || [[Vengeance r2]]
|-
| [[ZQ_CLIENTCOMMAND]]              || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_INPUTBUTTONS]]               || [[ZQuake]]
|-
| [[ZQ_ITEMS2]]                     || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NOCLIP]] (QW)       || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_FLY]] (QW)          || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NONE]] (QW)         || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_PAUSE]]                      || [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_QC_PARTICLE]] (QW)           || [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_STRINGS]]                 || [[ezQuake]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_TOKENIZE]]                || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_SETINFO]]                    || [[ZQuake]]
|-
| [[ZQ_SOUNDTOCLIENT]]              || [[ZQuake]]
|-
| [[ZQ_VWEP]]                       || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
|}

===See Also===
* http://web.archive.org/web/*/http://www.quakesrc.org/registry.php</text>
      <sha1>fd7cis7tkzhc83j4fun8oo0tooozzzp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>418</id>
      <parentid>413</parentid>
      <timestamp>2008-02-28T13:17:24Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="20929">Thanks to a cooperative effort between [[QuakeSrc]], LordHavoc and Tomaz a variety of new engines support a Extension-Detection system called, for the purposes of this wiki, &quot;QSG Extensions&quot;. These are meant to be used by [[QuakeC]] modders to expand and make use of the new engine features without breaking compatability with other engines ([[Prydon Gate]] is a good example of how this can be done).

For more information on how to use these, read about the [[checkextension]] builtin.

QSG Extensions are a powerful method. Mods addapt to higher and lower profiles, and engine coders dont need to stop to add new features, and QuakeC modders dont need to stop using it. But doing in the right way, everybody can run mods.

Notes:

* [[DarkPlaces]] and [[TomazQuake]] support most of the old QSG keys. Actually this keys have the widen support betwen engines.
* [[Telejano]] adds a lot of new QSG keys, but most are undocumented.
* The new [[DarkPlaces]] builds add some new and very interesting keys.
* [[FTE QuakeWorld]] adds a whole new spon on things. Visit [How FTE is broken] for more information.
* You can deactivate normal features with QSG keys. Example: If you create a engine that not support centerprints. You can use QSG_NO_CENTERPRINT. If you mod its coded checking that centerprint, will run on your engine with no-centerprint and on engines with centerprint. Negative QSG keys are usefull to use Quake1 mods with other engines that can load progs.dat files, like [[FungusQC]].
* [[Builtin ranges]]

{|style=&quot;border:1px solid #000000&quot;
|-
|align=&quot;center&quot;| '''Name'''
|align=&quot;center&quot;| '''Supported by'''
|-
| [[BX_COLOREDTEXT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_CON_DEL]]                    || [[Betwix]]
|-
| [[BX_CON_EXT]]                    || [[Betwix]]
|-
| [[BX_CON_TEXREPLACE]]             || [[Betwix]]
|-
| [[BX_CON_VAR]]                    || [[Betwix]]
|-
| [[BX_CON_WRITECONFIG]]            || [[Betwix]]
|-
| [[BX_ENGINE]]                     || [[Betwix]]
|-
| [[BX_ENT_BOUNCESCALE]]            || [[Betwix]]
|-
| [[BX_ENT_FRICTION]]               || [[Betwix]]
|-
| [[BX_ENT_MODELFLAGS]]             || [[Betwix]]
|-
| [[BX_GFX_SKYBOX]]                 || [[Betwix]]
|-
| [[BX_GFX_SUN]]                    || [[Betwix]]
|-
| [[BX_INPUTBUTTONS]]               || [[Betwix]]
|-
| [[BX_MDLOVERRIDE]]                || [[Betwix]]
|-
| [[BX_MULTIPLEFONTS]]              || [[Betwix]]
|-
| [[BX_P_M_SUPPORT]]                || [[Betwix]]
|-
| [[BX_QC_CAMERA]]                  || [[Betwix]]
|-
| [[BX_QC_CHECKFOV]]                || [[Betwix]]
|-
| [[BX_QC_FINDFIELDCHAIN]]          || [[Betwix]]
|-
| [[BX_QC_GETDATETIME]]             || [[Betwix]]
|-
| [[BX_QC_INIFILE]]                 || [[Betwix]]
|-
| [[BX_QC_MSGREAD]]                 || [[Betwix]]
|-
| [[BX_QC_PROGPARMS]]               || [[Betwix]]
|-
| [[BX_QC_PROTOCOL_FLAGS]]          || [[Betwix]]
|-
| [[BX_QC_SOUNDTEAM]]               || [[Betwix]]
|-
| [[BX_QC_SPRINTF]]                 || [[Betwix]]
|-
| [[BX_QC_STR]]                     || [[Betwix]]
|-
| [[BX_QC_VECMATH]]                 || [[Betwix]]
|-
| [[BX_QC_VISIBLE]]                 || [[Betwix]]
|-
| [[BX_SERVERPROGS]]                || [[Betwix]]
|-
| [[BX_SND_MUSIC]]                  || [[Betwix]]
|-
| [[BX_SV_LOCKCVARCMD]]             || [[Betwix]]
|-
| [[BX_SV_PARSESAY]]                || [[Betwix]]
|-
| [[BX_SV_UPDATE_CLIENTCVARS]]      || [[Betwix]]
|-
| [[BX_WAL_SUPPORT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_WEAPONBOB]]                  || [[Betwix]]
|-
| [[DP_BUTTONCHAT]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_BUTTONUSE]]                  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_CGAME]]                      || [[DarkPlaces]]
|-
| [[DP_CL_LOADSKY]]                 || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[ToChriS]] [[Vengeance r2]]
|-
| [[DP_CON_ALIASPARAMETERS]]        || [[DarkPlaces]]
|-
| [[DP_CON_EXPANDCVAR]]             || [[DarkPlaces]]
|-
| [[DP_CON_SET]]                    || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]] [[ezQuake]] [[ZQuake]]
|-
| [[DP_CON_SETA]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_CON_STARTMAP]]               || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_ADDITIVE]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_BLUE]]                    || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_DOUBLESIDED]]             || [[DarkPlaces]]
|-
| [[DP_EF_FLAME]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_FULLBRIGHT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NODEPTHTEST]]             || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_NODRAW]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NOGUNBOB]]                || [[DarkPlaces]]
|-
| [[DP_EF_NOSHADOW]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_EF_RED]]                     || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_STARDUST]]                || [[DarkPlaces]]
|-
| [[DP_ENT_ALPHA]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_ENT_COLORMOD]]               || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_ENT_CUSTOMCOLORMAP]]         || [[DarkPlaces]]
|-
| [[DP_ENT_DELTACOMPRESS]]          ||
|-
| [[DP_ENT_EXTERIORMODELTOCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_ENT_GLOW]]                   || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_ENT_LOWPRECISION]]           || [[DarkPlaces]]
|-
| [[DP_ENT_SCALE]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]]
|-
| [[DP_ENT_VIEWMODEL]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_EXTERNALTEXTURES]]       || [[DarkPlaces]]
|-
| [[DP_GFX_FOG]]                    || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_GFX_QUAKE3MODELTAGS]]        || [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_SKINFILES]]              || [[DarkPlaces]]
|-
| [[DP_GFX_SKYBOX]]                 || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_HALFLIFE_MAP]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_MAP_CVAR]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FTE]] [[ZQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_SPRITE]]            || [[DarkPlaces]]
|-
| [[DP_INPUTBUTTONS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_LITSPRITES]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_LITSUPPORT]]                 || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_MD3_TAGSINFO]]               ||
|-
| [[DP_MONSTERWALK]]                || [[DarkPlaces]] [[FTE]] [[Telejano]] [[ZQuake]]
|-
| [[DP_MOVETYPEBOUNCEMISSILE]]      || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_MOVETYPEFOLLOW]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_QC_CHANGEPITCH]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_COPYENTITY]]              || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[Vengeance r2]]
|-
| [[DP_QC_CVAR_STRING]]             || [[Betwix]] [[DarkPlaces]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[DP_QC_ETOS]]                    || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_FINDCHAIN]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDCHAINFLAGS]]          || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDCHAINFLOAT]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDFLAGS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDFLOAT]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]] [[QMB]] [[FuhQuake]]
|-
| [[DP_QC_FS_SEARCH]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_GETLIGHT]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_QC_GETSURFACE]]              || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_QC_GETTAGINFO]]              || [[DarkPlaces]]
|-
| [[DP_QC_MINMAXBOUND]]             || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_MULTIPLETEMPSTRINGS]]     || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_RANDOMVEC]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[MVDSV]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_SINCOSSQRTPOW]]           || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_TRACE_MOVETYPE_HITMODEL]] || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]|| [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPES]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACEBOX]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[MVDSV]] [[QMB]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_QC_TRACETOSS]]               || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_UNLIMITEDTEMPSTRINGS]]    || [[DarkPlaces]]
|-
| [[DP_QC_VECTORVECTORS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QUAKE2_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_QUAKE2_SPRITE]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MAP]]                 || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_REGISTERCVAR]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_SENSITIVITYSCALE]]           || [[Betwix]]
|-
| [[DP_SND_DIRECTIONLESSATTNNONE]]  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SND_FAKETRACKS]]             || [[DarkPlaces]]
|-
| [[DP_SND_OGGVORBIS]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SND_STEREOWAV]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SOLIDCORPSE]]                || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SPRITE32]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_SV_BOTCLIENT]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTCOLORS]]            || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTNAME]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_DRAWONLYTOCLIENT]]        || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_DRAWONLYTOTEAM]]          || [[Betwix]]
|-
| [[DP_SV_DROPCLIENT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_SV_EFFECT]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_EXTERIORMODELFORCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_NODRAWTOCLIENT]]          || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_PING]]                    || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_PLAYERPHYSICS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PRINT]]                   || [[DarkPlaces]]
|-
| [[DP_SV_PRECACHEANYTIME]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PUNCHVECTOR]]             || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_ROTATINGBMODEL]]          || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_SV_SETCOLOR]]                || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]]
|-
| [[DP_SV_SLOWMO]]                  || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SV_WRITEUNTERMINATEDSTRING]] || [[DarkPlaces]] [[ezQuake]] [[FTE]]
|-
| [[DP_TE_BLOOD]]                   || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_BLOODSHOWER]]             || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_CUSTOMFLASH]]             || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_EXPLOSIONRGB]]            || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_FLAMEJET]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLECUBE]]            || [[DarkPlaces]] [[QMB]]
|-
| [[DP_TE_PARTICLERAIN]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLESNOW]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PLASMABURN]]              || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_QUADEFFECTS1]]            || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_SMALLFLASH]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_SPARK]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_TE_STANDARDEFFECTBUILTINS]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_VIEWZOOM]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_WEAPONSKIN]]                 || [[Betwix]]
|-
| [[EXT_BITSHIFT]]                  || [[DarkPlaces]] [[Betwix]] [[FTE]]
|-
| [[EXT_CSQC]]                      || [[DarkPlaces]] [[FTE]]
|-
| [[EXT_DIMENSION_GHOST]]           || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_PHYSICS]]         || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_VISIBILITY]]      || [[Betwix]] [[FTE]]
|-
| [[FTE_CALLTIMEOFDAY]]             || [[Betwix]] [[MVDSV]] [[FTE]]
|-
| [[FTE_EXTENDEDTEXTCODES]]         || [[FTE]]
|-
| [[FTE_FORCEINFOKEY]]              || [[FTE]]
|-
| [[FTE_GFX_QUAKE3SHADERS]]         || [[FTE]]
|-
| [[FTE_HEXEN2]]                    || [[FTE]]
|-
| [[FTE_MEDIA_AVI]]                 || [[FTE]]
|-
| [[FTE_MEDIA_CIN]]                 || [[FTE]]
|-
| [[FTE_MEDIA_ROQ]]                 || [[FTE]]
|-
| [[FTE_MULTIPROGS]]                || [[FTE]]
|-
| [[FTE_MULTITHREADED]]             || [[FTE]]
|-
| [[FTE_MVD_PLAYBACK]]              || [[FTE]]
|-
| [[FTE_NPCCHAT]]                   || [[FTE]]
|-
| [[FTE_PEXT_BULLETENS]]            || [[FTE]]
|-
| [[FTE_PEXT_CUSTOMTENTS]]          || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL2]]           || [[FTE]]
|-
| [[FTE_PEXT_FATNESS]]              || [[FTE]]
|-
| [[FTE_PEXT_HULLSIZE]]             || [[FTE]]
|-
| [[FTE_PEXT_LIGHTSTYLECOL]]        || [[FTE]]
|-
| [[FTE_PEXT_LIGHTUPDATES]]         || [[FTE]]
|-
| [[FTE_PEXT_MODELDBL]]             || [[FTE]]
|-
| [[FTE_PEXT_ORIGINDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_Q2BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_Q3BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_SETVIEW]]              || [[FTE]]
|-
| [[FTE_PEXT_SPAWNSTATIC]]          || [[FTE]]
|-
| [[FTE_PEXT_TE_BULLET]]            || [[FTE]]
|-
| [[FTE_PEXT_VIEW2]]                || [[FTE]]
|-
| [[FTE_PEXT_VWEAP]]                || [[FTE]]
|-
| [[FTE_PEXT_ZLIBDL]]               || [[FTE]]
|-
| [[FTE_QC_CHECKPVS]]               || [[FTE]] [[ZQuake]]
|-
| [[FTE_QC_MATCHCLIENTNAME]]        || [[FTE]]
|-
| [[FTE_QC_PAUSED]]                 || [[FTE]]
|-
| [[FTE_QC_SENDPACKET]]             || [[FTE]]
|-
| [[FTE_QC_TRACETRIGGER]]           || [[FTE]]
|-
| [[FTE_SOLID_LADDER]]              || [[FTE]]
|-
| [[FTE_STRINGS]]                   || [[FTE]]
|-
| [[FTE_SV_REENTER]]                || [[FTE]]
|-
| [[FTE_TE_STANDARDEFFECTBUILTINS]] || [[FTE]]
|-
| [[FTE_VALID_VEC_HULL3]]           || [[FTE]]
|-
| [[FRIK_FILE]]                     || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[GQ]] [[Telejano]] [[Vengeance r2]]
|-
| [[KRIMZON_SV_PARSECLIENTCOMMAND]] || [[Betwix]] [[DarkPlaces]] [[FTE]] [[FuhQuake]]
|-
| [[NEH_CMD_PLAY2]]                 || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]]
|-
| [[NEH_RESTOREGAME]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[NEXUIZ_PLAYERMODEL]]            || [[DarkPlaces]]
|-
| [[NXQ_GFX_LETTERBOX]]             || [[DarkPlaces]]
|-
| [[PRYDON_CLIENTCURSOR]]           || [[DarkPlaces]]
|-
| [[QSG_FILE]]                      || [[FrikQuake]] [[Telejano]] [[ToChriS]]
|-
| [[QSG_DIMENSIONAL]]               ||
|-
| [[QSG_NO_CENTERPRINT]]            || [[FungusQC]]
|-
| [[QSG_NO_MDL]]                    || [[FungusQC]]
|-
| [[QSG_NO_NETCODE_Q1]]             || [[FungusQC]]
|-
| [[QW_ENGINE]]                     || [[FTE]]
|-
| [[QWE_MVD_RECORD]]                || [[FTE]]
|-
| [[TEI_AUTOANIMATION]]             || [[Telejano]]
|-
| [[TEI_AUTOFLUOR]]                 || [[Telejano]]
|-
| [[TEI_AUTOFOGWATER]]              || [[Telejano]]
|-
| [[TEI_AUTOFOOT]]                  || [[Telejano]]
|-
| [[TEI_AUTOLAVA]]                  || [[Telejano]]
|-
| [[TEI_AUTOLIGHTDAY]]              || [[Telejano]]
|-
| [[TEI_AUTORAIN]]                  || [[Telejano]]
|-
| [[TEI_AUTOSNOW]]                  || [[Telejano]]
|-
| [[TEI_AUTOVANISH]]                || [[Telejano]]
|-
| [[TEI_AUTOZING]]                  || [[Telejano]]
|-
| [[TEI_BOB2]]                      || [[Telejano]]
|-
| [[TEI_EF_EXTRA]]                  || [[Telejano]]
|-
| [[TEI_EF2_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_EF3_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_HUDMANAGER]]                || [[Telejano]]
|-
| [[TEI_LOCALMENUS1]]               || [[Telejano]]
|-
| [[TEI_LOCALMENUS2]]               || [[Telejano]]
|-
| [[TEI_MAPMODELS]]                 || [[Telejano]]
|-
| [[TEI_MD3_MODEL]]                 || [[FTE]] [[Telejano]]
|-
| [[TEI_MENU_MISC2]]                || [[Telejano]]
|-
| [[TEI_MOD_PROGS]]                 || [[Telejano]]
|-
| [[TEI_MODPREDATOR]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETIC]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETICFOLLOW]]         || [[Telejano]]
|-
| [[TEI_MOVRELATIVESTATIC]]         || [[Betwix]] [[Telejano]]
|-
| [[TEI_SHOWLMP2]]                  || [[FTE]] [[Telejano]]
|-
| [[TEI_SHOWLMP3]]                  || [[Telejano]]
|-
| [[TEI_STATCOUNT]]                 || [[Telejano]]
|-
| [[TEI_STATICFX]]                  || [[Telejano]]
|-
| [[TEI_STEPSIZE]]                  || [[Telejano]]
|-
| [[TEI_SUN]]                       || [[Telejano]]
|-
| [[TEI_SVSKY]]                     || [[Telejano]]
|-
| [[TEI_TE_ALIENEXPLOSION]]         || [[Telejano]]
|-
| [[TEI_TE_CUSTOMFX]]               || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL]]         || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL2]]        || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL3]]        || [[Telejano]]
|-
| [[TEI_TE_IMPLOSIONFX]]            || [[Telejano]]
|-
| [[TEI_TE_LIGHTNING4]]             || [[Telejano]]
|-
| [[TEI_TE_LIGHTNINGX]]             || [[Telejano]]
|-
| [[TEI_TE_PARTICLEBLAST]]          || [[Telejano]]
|-
| [[TEI_TE_STATICFOG]]              || [[Telejano]]
|-
| [[TEI_TE_TRAILS]]                 || [[Telejano]]
|-
| [[TEI_THEMEFOLDER]]               || [[Telejano]]
|-
| [[TEI_TPAKLOAD]]                  || [[Telejano]]
|-
| [[TEI_ZONEFOGS]]                  || [[Telejano]]
|-
| [[TENEBRAE_GFX_DLIGHTS]]          || [[DarkPlaces]]
|-
| [[TIMESCALE]]                     ||
|-
| [[TQ_DLIGHTS]]                    || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_PLASMA]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAILTRAIL]]                  || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAIN]]                       || [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SLOWMO]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SNOW]]                       || [[FrikQuake]] [[Telejano]] [[TomazQuake]]
|-
| [[TW_SV_STEPCONTROLS]]            || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Twilight]]
|-
| [[UDC_EXTEFFECT]]                 ||
|-
| [[VEN_SCRIPT_PARTICLES]]          || [[Vengeance r2]]
|-
| [[ZQ_CLIENTCOMMAND]]              || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_INPUTBUTTONS]]               || [[ZQuake]]
|-
| [[ZQ_ITEMS2]]                     || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NOCLIP]] (QW)       || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_FLY]] (QW)          || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NONE]] (QW)         || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_PAUSE]]                      || [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_QC_PARTICLE]] (QW)           || [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_STRINGS]]                 || [[ezQuake]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_TOKENIZE]]                || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_SETINFO]]                    || [[ZQuake]]
|-
| [[ZQ_SOUNDTOCLIENT]]              || [[ZQuake]]
|-
| [[ZQ_VWEP]]                       || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
|}

===See Also===
* http://web.archive.org/web/*/http://www.quakesrc.org/registry.php</text>
      <sha1>igyb7dpzelr0py2cydqv5glvgyv4rct</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>434</id>
      <parentid>418</parentid>
      <timestamp>2008-02-28T13:38:23Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="20995">Thanks to a cooperative effort between [[QuakeSrc]], LordHavoc and Tomaz a variety of new engines support a Extension-Detection system called, for the purposes of this wiki, &quot;QSG Extensions&quot;. These are meant to be used by [[QuakeC]] modders to expand and make use of the new engine features without breaking compatability with other engines ([[Prydon Gate]] is a good example of how this can be done).

For more information on how to use these, read about the [[checkextension]] builtin.

QSG Extensions are a powerful method. Mods addapt to higher and lower profiles, and engine coders dont need to stop to add new features, and QuakeC modders dont need to stop using it. But doing in the right way, everybody can run mods.

Notes:

* [[DarkPlaces]] and [[TomazQuake]] support most of the old QSG keys. Actually this keys have the widen support betwen engines.
* [[Telejano]] adds a lot of new QSG keys, but most are undocumented.
* The new [[DarkPlaces]] builds add some new and very interesting keys.
* [[FTE QuakeWorld]] adds a whole new spon on things. Visit [How FTE is broken] for more information.
* You can deactivate normal features with QSG keys. Example: If you create a engine that not support centerprints. You can use QSG_NO_CENTERPRINT. If you mod its coded checking that centerprint, will run on your engine with no-centerprint and on engines with centerprint. Negative QSG keys are usefull to use Quake1 mods with other engines that can load progs.dat files, like [[FungusQC]].
* [[Builtin ranges]]

{|style=&quot;border:1px solid #000000&quot;
|-
|align=&quot;center&quot;| '''Name'''
|align=&quot;center&quot;| '''Supported by'''
|-
| [[BX_COLOREDTEXT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_CON_DEL]]                    || [[Betwix]]
|-
| [[BX_CON_EXT]]                    || [[Betwix]]
|-
| [[BX_CON_TEXREPLACE]]             || [[Betwix]]
|-
| [[BX_CON_VAR]]                    || [[Betwix]]
|-
| [[BX_CON_WRITECONFIG]]            || [[Betwix]]
|-
| [[BX_ENGINE]]                     || [[Betwix]]
|-
| [[BX_ENT_BOUNCESCALE]]            || [[Betwix]]
|-
| [[BX_ENT_FRICTION]]               || [[Betwix]]
|-
| [[BX_ENT_MODELFLAGS]]             || [[Betwix]]
|-
| [[BX_GFX_SKYBOX]]                 || [[Betwix]]
|-
| [[BX_GFX_SUN]]                    || [[Betwix]]
|-
| [[BX_INPUTBUTTONS]]               || [[Betwix]]
|-
| [[BX_MDLOVERRIDE]]                || [[Betwix]]
|-
| [[BX_MULTIPLEFONTS]]              || [[Betwix]]
|-
| [[BX_P_M_SUPPORT]]                || [[Betwix]]
|-
| [[BX_QC_CAMERA]]                  || [[Betwix]]
|-
| [[BX_QC_CHECKFOV]]                || [[Betwix]]
|-
| [[BX_QC_FINDFIELDCHAIN]]          || [[Betwix]]
|-
| [[BX_QC_GETDATETIME]]             || [[Betwix]]
|-
| [[BX_QC_INIFILE]]                 || [[Betwix]]
|-
| [[BX_QC_MSGREAD]]                 || [[Betwix]]
|-
| [[BX_QC_PROGPARMS]]               || [[Betwix]]
|-
| [[BX_QC_PROTOCOL_FLAGS]]          || [[Betwix]]
|-
| [[BX_QC_SOUNDTEAM]]               || [[Betwix]]
|-
| [[BX_QC_SPRINTF]]                 || [[Betwix]]
|-
| [[BX_QC_STR]]                     || [[Betwix]]
|-
| [[BX_QC_VECMATH]]                 || [[Betwix]]
|-
| [[BX_QC_VISIBLE]]                 || [[Betwix]]
|-
| [[BX_SERVERPROGS]]                || [[Betwix]]
|-
| [[BX_SND_MUSIC]]                  || [[Betwix]]
|-
| [[BX_SV_LOCKCVARCMD]]             || [[Betwix]]
|-
| [[BX_SV_PARSESAY]]                || [[Betwix]]
|-
| [[BX_SV_UPDATE_CLIENTCVARS]]      || [[Betwix]]
|-
| [[BX_WAL_SUPPORT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_WEAPONBOB]]                  || [[Betwix]]
|-
| [[DP_BUTTONCHAT]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_BUTTONUSE]]                  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_CGAME]]                      || [[DarkPlaces]]
|-
| [[DP_CL_LOADSKY]]                 || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[ToChriS]] [[Vengeance r2]]
|-
| [[DP_CON_ALIASPARAMETERS]]        || [[DarkPlaces]]
|-
| [[DP_CON_EXPANDCVAR]]             || [[DarkPlaces]]
|-
| [[DP_CON_SET]]                    || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]] [[ezQuake]] [[ZQuake]]
|-
| [[DP_CON_SETA]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_CON_STARTMAP]]               || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_ADDITIVE]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_BLUE]]                    || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_DOUBLESIDED]]             || [[DarkPlaces]]
|-
| [[DP_EF_FLAME]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_FULLBRIGHT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NODEPTHTEST]]             || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_NODRAW]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NOGUNBOB]]                || [[DarkPlaces]]
|-
| [[DP_EF_NOSHADOW]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_EF_RED]]                     || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_STARDUST]]                || [[DarkPlaces]]
|-
| [[DP_ENT_ALPHA]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_ENT_COLORMOD]]               || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_ENT_CUSTOMCOLORMAP]]         || [[DarkPlaces]]
|-
| [[DP_ENT_DELTACOMPRESS]]          ||
|-
| [[DP_ENT_EXTERIORMODELTOCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_ENT_GLOW]]                   || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_ENT_LOWPRECISION]]           || [[DarkPlaces]]
|-
| [[DP_ENT_SCALE]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]]
|-
| [[DP_ENT_VIEWMODEL]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_EXTERNALTEXTURES]]       || [[DarkPlaces]]
|-
| [[DP_GFX_EXTERNALTEXTURES_PERMAPTEXTURES]] || [[DarkPlaces]]
|-
| [[DP_GFX_FOG]]                    || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_GFX_QUAKE3MODELTAGS]]        || [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_SKINFILES]]              || [[DarkPlaces]]
|-
| [[DP_GFX_SKYBOX]]                 || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_HALFLIFE_MAP]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_MAP_CVAR]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FTE]] [[ZQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_SPRITE]]            || [[DarkPlaces]]
|-
| [[DP_INPUTBUTTONS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_LITSPRITES]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_LITSUPPORT]]                 || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_MD3_TAGSINFO]]               ||
|-
| [[DP_MONSTERWALK]]                || [[DarkPlaces]] [[FTE]] [[Telejano]] [[ZQuake]]
|-
| [[DP_MOVETYPEBOUNCEMISSILE]]      || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_MOVETYPEFOLLOW]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_QC_CHANGEPITCH]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_COPYENTITY]]              || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[Vengeance r2]]
|-
| [[DP_QC_CVAR_STRING]]             || [[Betwix]] [[DarkPlaces]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[DP_QC_ETOS]]                    || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_FINDCHAIN]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDCHAINFLAGS]]          || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDCHAINFLOAT]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDFLAGS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDFLOAT]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]] [[QMB]] [[FuhQuake]]
|-
| [[DP_QC_FS_SEARCH]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_GETLIGHT]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_QC_GETSURFACE]]              || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_QC_GETTAGINFO]]              || [[DarkPlaces]]
|-
| [[DP_QC_MINMAXBOUND]]             || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_MULTIPLETEMPSTRINGS]]     || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_RANDOMVEC]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[MVDSV]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_SINCOSSQRTPOW]]           || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_TRACE_MOVETYPE_HITMODEL]] || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]|| [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPES]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACEBOX]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[MVDSV]] [[QMB]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_QC_TRACETOSS]]               || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_UNLIMITEDTEMPSTRINGS]]    || [[DarkPlaces]]
|-
| [[DP_QC_VECTORVECTORS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QUAKE2_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_QUAKE2_SPRITE]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MAP]]                 || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_REGISTERCVAR]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_SENSITIVITYSCALE]]           || [[Betwix]]
|-
| [[DP_SND_DIRECTIONLESSATTNNONE]]  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SND_FAKETRACKS]]             || [[DarkPlaces]]
|-
| [[DP_SND_OGGVORBIS]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SND_STEREOWAV]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SOLIDCORPSE]]                || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SPRITE32]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_SV_BOTCLIENT]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTCOLORS]]            || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTNAME]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_DRAWONLYTOCLIENT]]        || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_DRAWONLYTOTEAM]]          || [[Betwix]]
|-
| [[DP_SV_DROPCLIENT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_SV_EFFECT]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_EXTERIORMODELFORCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_NODRAWTOCLIENT]]          || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_PING]]                    || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_PLAYERPHYSICS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PRINT]]                   || [[DarkPlaces]]
|-
| [[DP_SV_PRECACHEANYTIME]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PUNCHVECTOR]]             || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_ROTATINGBMODEL]]          || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_SV_SETCOLOR]]                || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]]
|-
| [[DP_SV_SLOWMO]]                  || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SV_WRITEUNTERMINATEDSTRING]] || [[DarkPlaces]] [[ezQuake]] [[FTE]]
|-
| [[DP_TE_BLOOD]]                   || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_BLOODSHOWER]]             || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_CUSTOMFLASH]]             || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_EXPLOSIONRGB]]            || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_FLAMEJET]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLECUBE]]            || [[DarkPlaces]] [[QMB]]
|-
| [[DP_TE_PARTICLERAIN]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLESNOW]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PLASMABURN]]              || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_QUADEFFECTS1]]            || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_SMALLFLASH]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_SPARK]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_TE_STANDARDEFFECTBUILTINS]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_VIEWZOOM]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_WEAPONSKIN]]                 || [[Betwix]]
|-
| [[EXT_BITSHIFT]]                  || [[DarkPlaces]] [[Betwix]] [[FTE]]
|-
| [[EXT_CSQC]]                      || [[DarkPlaces]] [[FTE]]
|-
| [[EXT_DIMENSION_GHOST]]           || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_PHYSICS]]         || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_VISIBILITY]]      || [[Betwix]] [[FTE]]
|-
| [[FTE_CALLTIMEOFDAY]]             || [[Betwix]] [[MVDSV]] [[FTE]]
|-
| [[FTE_EXTENDEDTEXTCODES]]         || [[FTE]]
|-
| [[FTE_FORCEINFOKEY]]              || [[FTE]]
|-
| [[FTE_GFX_QUAKE3SHADERS]]         || [[FTE]]
|-
| [[FTE_HEXEN2]]                    || [[FTE]]
|-
| [[FTE_MEDIA_AVI]]                 || [[FTE]]
|-
| [[FTE_MEDIA_CIN]]                 || [[FTE]]
|-
| [[FTE_MEDIA_ROQ]]                 || [[FTE]]
|-
| [[FTE_MULTIPROGS]]                || [[FTE]]
|-
| [[FTE_MULTITHREADED]]             || [[FTE]]
|-
| [[FTE_MVD_PLAYBACK]]              || [[FTE]]
|-
| [[FTE_NPCCHAT]]                   || [[FTE]]
|-
| [[FTE_PEXT_BULLETENS]]            || [[FTE]]
|-
| [[FTE_PEXT_CUSTOMTENTS]]          || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL2]]           || [[FTE]]
|-
| [[FTE_PEXT_FATNESS]]              || [[FTE]]
|-
| [[FTE_PEXT_HULLSIZE]]             || [[FTE]]
|-
| [[FTE_PEXT_LIGHTSTYLECOL]]        || [[FTE]]
|-
| [[FTE_PEXT_LIGHTUPDATES]]         || [[FTE]]
|-
| [[FTE_PEXT_MODELDBL]]             || [[FTE]]
|-
| [[FTE_PEXT_ORIGINDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_Q2BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_Q3BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_SETVIEW]]              || [[FTE]]
|-
| [[FTE_PEXT_SPAWNSTATIC]]          || [[FTE]]
|-
| [[FTE_PEXT_TE_BULLET]]            || [[FTE]]
|-
| [[FTE_PEXT_VIEW2]]                || [[FTE]]
|-
| [[FTE_PEXT_VWEAP]]                || [[FTE]]
|-
| [[FTE_PEXT_ZLIBDL]]               || [[FTE]]
|-
| [[FTE_QC_CHECKPVS]]               || [[FTE]] [[ZQuake]]
|-
| [[FTE_QC_MATCHCLIENTNAME]]        || [[FTE]]
|-
| [[FTE_QC_PAUSED]]                 || [[FTE]]
|-
| [[FTE_QC_SENDPACKET]]             || [[FTE]]
|-
| [[FTE_QC_TRACETRIGGER]]           || [[FTE]]
|-
| [[FTE_SOLID_LADDER]]              || [[FTE]]
|-
| [[FTE_STRINGS]]                   || [[FTE]]
|-
| [[FTE_SV_REENTER]]                || [[FTE]]
|-
| [[FTE_TE_STANDARDEFFECTBUILTINS]] || [[FTE]]
|-
| [[FTE_VALID_VEC_HULL3]]           || [[FTE]]
|-
| [[FRIK_FILE]]                     || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[GQ]] [[Telejano]] [[Vengeance r2]]
|-
| [[KRIMZON_SV_PARSECLIENTCOMMAND]] || [[Betwix]] [[DarkPlaces]] [[FTE]] [[FuhQuake]]
|-
| [[NEH_CMD_PLAY2]]                 || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]]
|-
| [[NEH_RESTOREGAME]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[NEXUIZ_PLAYERMODEL]]            || [[DarkPlaces]]
|-
| [[NXQ_GFX_LETTERBOX]]             || [[DarkPlaces]]
|-
| [[PRYDON_CLIENTCURSOR]]           || [[DarkPlaces]]
|-
| [[QSG_FILE]]                      || [[FrikQuake]] [[Telejano]] [[ToChriS]]
|-
| [[QSG_DIMENSIONAL]]               ||
|-
| [[QSG_NO_CENTERPRINT]]            || [[FungusQC]]
|-
| [[QSG_NO_MDL]]                    || [[FungusQC]]
|-
| [[QSG_NO_NETCODE_Q1]]             || [[FungusQC]]
|-
| [[QW_ENGINE]]                     || [[FTE]]
|-
| [[QWE_MVD_RECORD]]                || [[FTE]]
|-
| [[TEI_AUTOANIMATION]]             || [[Telejano]]
|-
| [[TEI_AUTOFLUOR]]                 || [[Telejano]]
|-
| [[TEI_AUTOFOGWATER]]              || [[Telejano]]
|-
| [[TEI_AUTOFOOT]]                  || [[Telejano]]
|-
| [[TEI_AUTOLAVA]]                  || [[Telejano]]
|-
| [[TEI_AUTOLIGHTDAY]]              || [[Telejano]]
|-
| [[TEI_AUTORAIN]]                  || [[Telejano]]
|-
| [[TEI_AUTOSNOW]]                  || [[Telejano]]
|-
| [[TEI_AUTOVANISH]]                || [[Telejano]]
|-
| [[TEI_AUTOZING]]                  || [[Telejano]]
|-
| [[TEI_BOB2]]                      || [[Telejano]]
|-
| [[TEI_EF_EXTRA]]                  || [[Telejano]]
|-
| [[TEI_EF2_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_EF3_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_HUDMANAGER]]                || [[Telejano]]
|-
| [[TEI_LOCALMENUS1]]               || [[Telejano]]
|-
| [[TEI_LOCALMENUS2]]               || [[Telejano]]
|-
| [[TEI_MAPMODELS]]                 || [[Telejano]]
|-
| [[TEI_MD3_MODEL]]                 || [[FTE]] [[Telejano]]
|-
| [[TEI_MENU_MISC2]]                || [[Telejano]]
|-
| [[TEI_MOD_PROGS]]                 || [[Telejano]]
|-
| [[TEI_MODPREDATOR]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETIC]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETICFOLLOW]]         || [[Telejano]]
|-
| [[TEI_MOVRELATIVESTATIC]]         || [[Betwix]] [[Telejano]]
|-
| [[TEI_SHOWLMP2]]                  || [[FTE]] [[Telejano]]
|-
| [[TEI_SHOWLMP3]]                  || [[Telejano]]
|-
| [[TEI_STATCOUNT]]                 || [[Telejano]]
|-
| [[TEI_STATICFX]]                  || [[Telejano]]
|-
| [[TEI_STEPSIZE]]                  || [[Telejano]]
|-
| [[TEI_SUN]]                       || [[Telejano]]
|-
| [[TEI_SVSKY]]                     || [[Telejano]]
|-
| [[TEI_TE_ALIENEXPLOSION]]         || [[Telejano]]
|-
| [[TEI_TE_CUSTOMFX]]               || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL]]         || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL2]]        || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL3]]        || [[Telejano]]
|-
| [[TEI_TE_IMPLOSIONFX]]            || [[Telejano]]
|-
| [[TEI_TE_LIGHTNING4]]             || [[Telejano]]
|-
| [[TEI_TE_LIGHTNINGX]]             || [[Telejano]]
|-
| [[TEI_TE_PARTICLEBLAST]]          || [[Telejano]]
|-
| [[TEI_TE_STATICFOG]]              || [[Telejano]]
|-
| [[TEI_TE_TRAILS]]                 || [[Telejano]]
|-
| [[TEI_THEMEFOLDER]]               || [[Telejano]]
|-
| [[TEI_TPAKLOAD]]                  || [[Telejano]]
|-
| [[TEI_ZONEFOGS]]                  || [[Telejano]]
|-
| [[TENEBRAE_GFX_DLIGHTS]]          || [[DarkPlaces]]
|-
| [[TIMESCALE]]                     ||
|-
| [[TQ_DLIGHTS]]                    || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_PLASMA]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAILTRAIL]]                  || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAIN]]                       || [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SLOWMO]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SNOW]]                       || [[FrikQuake]] [[Telejano]] [[TomazQuake]]
|-
| [[TW_SV_STEPCONTROLS]]            || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Twilight]]
|-
| [[UDC_EXTEFFECT]]                 ||
|-
| [[VEN_SCRIPT_PARTICLES]]          || [[Vengeance r2]]
|-
| [[ZQ_CLIENTCOMMAND]]              || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_INPUTBUTTONS]]               || [[ZQuake]]
|-
| [[ZQ_ITEMS2]]                     || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NOCLIP]] (QW)       || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_FLY]] (QW)          || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NONE]] (QW)         || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_PAUSE]]                      || [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_QC_PARTICLE]] (QW)           || [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_STRINGS]]                 || [[ezQuake]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_TOKENIZE]]                || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_SETINFO]]                    || [[ZQuake]]
|-
| [[ZQ_SOUNDTOCLIENT]]              || [[ZQuake]]
|-
| [[ZQ_VWEP]]                       || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
|}

===See Also===
* http://web.archive.org/web/*/http://www.quakesrc.org/registry.php</text>
      <sha1>25bs8ovbyyw88syi5coz01vnhqjhbq8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>450</id>
      <parentid>434</parentid>
      <timestamp>2008-02-28T14:17:23Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="21055">Thanks to a cooperative effort between [[QuakeSrc]], LordHavoc and Tomaz a variety of new engines support a Extension-Detection system called, for the purposes of this wiki, &quot;QSG Extensions&quot;. These are meant to be used by [[QuakeC]] modders to expand and make use of the new engine features without breaking compatability with other engines ([[Prydon Gate]] is a good example of how this can be done).

For more information on how to use these, read about the [[checkextension]] builtin.

QSG Extensions are a powerful method. Mods addapt to higher and lower profiles, and engine coders dont need to stop to add new features, and QuakeC modders dont need to stop using it. But doing in the right way, everybody can run mods.

Notes:

* [[DarkPlaces]] and [[TomazQuake]] support most of the old QSG keys. Actually this keys have the widen support betwen engines.
* [[Telejano]] adds a lot of new QSG keys, but most are undocumented.
* The new [[DarkPlaces]] builds add some new and very interesting keys.
* [[FTE QuakeWorld]] adds a whole new spon on things. Visit [How FTE is broken] for more information.
* You can deactivate normal features with QSG keys. Example: If you create a engine that not support centerprints. You can use QSG_NO_CENTERPRINT. If you mod its coded checking that centerprint, will run on your engine with no-centerprint and on engines with centerprint. Negative QSG keys are usefull to use Quake1 mods with other engines that can load progs.dat files, like [[FungusQC]].
* [[Builtin ranges]]

{|style=&quot;border:1px solid #000000&quot;
|-
|align=&quot;center&quot;| '''Name'''
|align=&quot;center&quot;| '''Supported by'''
|-
| [[BX_COLOREDTEXT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_CON_DEL]]                    || [[Betwix]]
|-
| [[BX_CON_EXT]]                    || [[Betwix]]
|-
| [[BX_CON_TEXREPLACE]]             || [[Betwix]]
|-
| [[BX_CON_VAR]]                    || [[Betwix]]
|-
| [[BX_CON_WRITECONFIG]]            || [[Betwix]]
|-
| [[BX_ENGINE]]                     || [[Betwix]]
|-
| [[BX_ENT_BOUNCESCALE]]            || [[Betwix]]
|-
| [[BX_ENT_FRICTION]]               || [[Betwix]]
|-
| [[BX_ENT_MODELFLAGS]]             || [[Betwix]]
|-
| [[BX_GFX_SKYBOX]]                 || [[Betwix]]
|-
| [[BX_GFX_SUN]]                    || [[Betwix]]
|-
| [[BX_INPUTBUTTONS]]               || [[Betwix]]
|-
| [[BX_MDLOVERRIDE]]                || [[Betwix]]
|-
| [[BX_MULTIPLEFONTS]]              || [[Betwix]]
|-
| [[BX_P_M_SUPPORT]]                || [[Betwix]]
|-
| [[BX_QC_CAMERA]]                  || [[Betwix]]
|-
| [[BX_QC_CHECKFOV]]                || [[Betwix]]
|-
| [[BX_QC_FINDFIELDCHAIN]]          || [[Betwix]]
|-
| [[BX_QC_GETDATETIME]]             || [[Betwix]]
|-
| [[BX_QC_INIFILE]]                 || [[Betwix]]
|-
| [[BX_QC_MSGREAD]]                 || [[Betwix]]
|-
| [[BX_QC_PROGPARMS]]               || [[Betwix]]
|-
| [[BX_QC_PROTOCOL_FLAGS]]          || [[Betwix]]
|-
| [[BX_QC_SOUNDTEAM]]               || [[Betwix]]
|-
| [[BX_QC_SPRINTF]]                 || [[Betwix]]
|-
| [[BX_QC_STR]]                     || [[Betwix]]
|-
| [[BX_QC_VECMATH]]                 || [[Betwix]]
|-
| [[BX_QC_VISIBLE]]                 || [[Betwix]]
|-
| [[BX_SERVERPROGS]]                || [[Betwix]]
|-
| [[BX_SND_MUSIC]]                  || [[Betwix]]
|-
| [[BX_SV_LOCKCVARCMD]]             || [[Betwix]]
|-
| [[BX_SV_PARSESAY]]                || [[Betwix]]
|-
| [[BX_SV_UPDATE_CLIENTCVARS]]      || [[Betwix]]
|-
| [[BX_WAL_SUPPORT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_WEAPONBOB]]                  || [[Betwix]]
|-
| [[DP_BUTTONCHAT]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_BUTTONUSE]]                  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_CGAME]]                      || [[DarkPlaces]]
|-
| [[DP_CL_LOADSKY]]                 || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[ToChriS]] [[Vengeance r2]]
|-
| [[DP_CON_ALIASPARAMETERS]]        || [[DarkPlaces]]
|-
| [[DP_CON_EXPANDCVAR]]             || [[DarkPlaces]]
|-
| [[DP_CON_SET]]                    || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]] [[ezQuake]] [[ZQuake]]
|-
| [[DP_CON_SETA]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_CON_STARTMAP]]               || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_ADDITIVE]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_BLUE]]                    || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_DOUBLESIDED]]             || [[DarkPlaces]]
|-
| [[DP_EF_FLAME]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_FULLBRIGHT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NODEPTHTEST]]             || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_NODRAW]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NOGUNBOB]]                || [[DarkPlaces]]
|-
| [[DP_EF_NOSHADOW]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_EF_RED]]                     || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_STARDUST]]                || [[DarkPlaces]]
|-
| [[DP_ENT_ALPHA]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_ENT_COLORMOD]]               || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_ENT_CUSTOMCOLORMAP]]         || [[DarkPlaces]]
|-
| [[DP_ENT_DELTACOMPRESS]]          ||
|-
| [[DP_ENT_EXTERIORMODELTOCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_ENT_GLOW]]                   || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_ENT_LOWPRECISION]]           || [[DarkPlaces]]
|-
| [[DP_ENT_SCALE]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]]
|-
| [[DP_ENT_VIEWMODEL]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_EXTERNALTEXTURES]]       || [[DarkPlaces]]
|-
| [[DP_GFX_EXTERNALTEXTURES_PERMAPTEXTURES]] || [[DarkPlaces]]
|-
| [[DP_GFX_FOG]]                    || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_GFX_QUAKE3MODELTAGS]]        || [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_SKINFILES]]              || [[DarkPlaces]]
|-
| [[DP_GFX_SKYBOX]]                 || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_HALFLIFE_MAP]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_MAP_CVAR]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FTE]] [[ZQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_SPRITE]]            || [[DarkPlaces]]
|-
| [[DP_INPUTBUTTONS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_LITSPRITES]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_LITSUPPORT]]                 || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_MD3_TAGSINFO]]               ||
|-
| [[DP_MONSTERWALK]]                || [[DarkPlaces]] [[FTE]] [[Telejano]] [[ZQuake]]
|-
| [[DP_MOVETYPEBOUNCEMISSILE]]      || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_MOVETYPEFOLLOW]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_QC_DP_QC_ASINACOSATANATAN2TAN]] || [[DarkPlaces]]
|-
| [[DP_QC_CHANGEPITCH]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_COPYENTITY]]              || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[Vengeance r2]]
|-
| [[DP_QC_CVAR_STRING]]             || [[Betwix]] [[DarkPlaces]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[DP_QC_ETOS]]                    || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_FINDCHAIN]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDCHAINFLAGS]]          || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDCHAINFLOAT]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDFLAGS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDFLOAT]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]] [[QMB]] [[FuhQuake]]
|-
| [[DP_QC_FS_SEARCH]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_GETLIGHT]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_QC_GETSURFACE]]              || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_QC_GETTAGINFO]]              || [[DarkPlaces]]
|-
| [[DP_QC_MINMAXBOUND]]             || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_MULTIPLETEMPSTRINGS]]     || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_RANDOMVEC]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[MVDSV]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_SINCOSSQRTPOW]]           || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_TRACE_MOVETYPE_HITMODEL]] || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]|| [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPES]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACEBOX]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[MVDSV]] [[QMB]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_QC_TRACETOSS]]               || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_UNLIMITEDTEMPSTRINGS]]    || [[DarkPlaces]]
|-
| [[DP_QC_VECTORVECTORS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QUAKE2_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_QUAKE2_SPRITE]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MAP]]                 || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_REGISTERCVAR]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_SENSITIVITYSCALE]]           || [[Betwix]]
|-
| [[DP_SND_DIRECTIONLESSATTNNONE]]  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SND_FAKETRACKS]]             || [[DarkPlaces]]
|-
| [[DP_SND_OGGVORBIS]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SND_STEREOWAV]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SOLIDCORPSE]]                || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SPRITE32]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_SV_BOTCLIENT]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTCOLORS]]            || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTNAME]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_DRAWONLYTOCLIENT]]        || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_DRAWONLYTOTEAM]]          || [[Betwix]]
|-
| [[DP_SV_DROPCLIENT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_SV_EFFECT]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_EXTERIORMODELFORCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_NODRAWTOCLIENT]]          || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_PING]]                    || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_PLAYERPHYSICS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PRINT]]                   || [[DarkPlaces]]
|-
| [[DP_SV_PRECACHEANYTIME]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PUNCHVECTOR]]             || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_ROTATINGBMODEL]]          || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_SV_SETCOLOR]]                || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]]
|-
| [[DP_SV_SLOWMO]]                  || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SV_WRITEUNTERMINATEDSTRING]] || [[DarkPlaces]] [[ezQuake]] [[FTE]]
|-
| [[DP_TE_BLOOD]]                   || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_BLOODSHOWER]]             || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_CUSTOMFLASH]]             || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_EXPLOSIONRGB]]            || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_FLAMEJET]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLECUBE]]            || [[DarkPlaces]] [[QMB]]
|-
| [[DP_TE_PARTICLERAIN]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLESNOW]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PLASMABURN]]              || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_QUADEFFECTS1]]            || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_SMALLFLASH]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_SPARK]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_TE_STANDARDEFFECTBUILTINS]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_VIEWZOOM]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_WEAPONSKIN]]                 || [[Betwix]]
|-
| [[EXT_BITSHIFT]]                  || [[DarkPlaces]] [[Betwix]] [[FTE]]
|-
| [[EXT_CSQC]]                      || [[DarkPlaces]] [[FTE]]
|-
| [[EXT_DIMENSION_GHOST]]           || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_PHYSICS]]         || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_VISIBILITY]]      || [[Betwix]] [[FTE]]
|-
| [[FTE_CALLTIMEOFDAY]]             || [[Betwix]] [[MVDSV]] [[FTE]]
|-
| [[FTE_EXTENDEDTEXTCODES]]         || [[FTE]]
|-
| [[FTE_FORCEINFOKEY]]              || [[FTE]]
|-
| [[FTE_GFX_QUAKE3SHADERS]]         || [[FTE]]
|-
| [[FTE_HEXEN2]]                    || [[FTE]]
|-
| [[FTE_MEDIA_AVI]]                 || [[FTE]]
|-
| [[FTE_MEDIA_CIN]]                 || [[FTE]]
|-
| [[FTE_MEDIA_ROQ]]                 || [[FTE]]
|-
| [[FTE_MULTIPROGS]]                || [[FTE]]
|-
| [[FTE_MULTITHREADED]]             || [[FTE]]
|-
| [[FTE_MVD_PLAYBACK]]              || [[FTE]]
|-
| [[FTE_NPCCHAT]]                   || [[FTE]]
|-
| [[FTE_PEXT_BULLETENS]]            || [[FTE]]
|-
| [[FTE_PEXT_CUSTOMTENTS]]          || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL2]]           || [[FTE]]
|-
| [[FTE_PEXT_FATNESS]]              || [[FTE]]
|-
| [[FTE_PEXT_HULLSIZE]]             || [[FTE]]
|-
| [[FTE_PEXT_LIGHTSTYLECOL]]        || [[FTE]]
|-
| [[FTE_PEXT_LIGHTUPDATES]]         || [[FTE]]
|-
| [[FTE_PEXT_MODELDBL]]             || [[FTE]]
|-
| [[FTE_PEXT_ORIGINDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_Q2BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_Q3BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_SETVIEW]]              || [[FTE]]
|-
| [[FTE_PEXT_SPAWNSTATIC]]          || [[FTE]]
|-
| [[FTE_PEXT_TE_BULLET]]            || [[FTE]]
|-
| [[FTE_PEXT_VIEW2]]                || [[FTE]]
|-
| [[FTE_PEXT_VWEAP]]                || [[FTE]]
|-
| [[FTE_PEXT_ZLIBDL]]               || [[FTE]]
|-
| [[FTE_QC_CHECKPVS]]               || [[FTE]] [[ZQuake]]
|-
| [[FTE_QC_MATCHCLIENTNAME]]        || [[FTE]]
|-
| [[FTE_QC_PAUSED]]                 || [[FTE]]
|-
| [[FTE_QC_SENDPACKET]]             || [[FTE]]
|-
| [[FTE_QC_TRACETRIGGER]]           || [[FTE]]
|-
| [[FTE_SOLID_LADDER]]              || [[FTE]]
|-
| [[FTE_STRINGS]]                   || [[FTE]]
|-
| [[FTE_SV_REENTER]]                || [[FTE]]
|-
| [[FTE_TE_STANDARDEFFECTBUILTINS]] || [[FTE]]
|-
| [[FTE_VALID_VEC_HULL3]]           || [[FTE]]
|-
| [[FRIK_FILE]]                     || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[GQ]] [[Telejano]] [[Vengeance r2]]
|-
| [[KRIMZON_SV_PARSECLIENTCOMMAND]] || [[Betwix]] [[DarkPlaces]] [[FTE]] [[FuhQuake]]
|-
| [[NEH_CMD_PLAY2]]                 || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]]
|-
| [[NEH_RESTOREGAME]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[NEXUIZ_PLAYERMODEL]]            || [[DarkPlaces]]
|-
| [[NXQ_GFX_LETTERBOX]]             || [[DarkPlaces]]
|-
| [[PRYDON_CLIENTCURSOR]]           || [[DarkPlaces]]
|-
| [[QSG_FILE]]                      || [[FrikQuake]] [[Telejano]] [[ToChriS]]
|-
| [[QSG_DIMENSIONAL]]               ||
|-
| [[QSG_NO_CENTERPRINT]]            || [[FungusQC]]
|-
| [[QSG_NO_MDL]]                    || [[FungusQC]]
|-
| [[QSG_NO_NETCODE_Q1]]             || [[FungusQC]]
|-
| [[QW_ENGINE]]                     || [[FTE]]
|-
| [[QWE_MVD_RECORD]]                || [[FTE]]
|-
| [[TEI_AUTOANIMATION]]             || [[Telejano]]
|-
| [[TEI_AUTOFLUOR]]                 || [[Telejano]]
|-
| [[TEI_AUTOFOGWATER]]              || [[Telejano]]
|-
| [[TEI_AUTOFOOT]]                  || [[Telejano]]
|-
| [[TEI_AUTOLAVA]]                  || [[Telejano]]
|-
| [[TEI_AUTOLIGHTDAY]]              || [[Telejano]]
|-
| [[TEI_AUTORAIN]]                  || [[Telejano]]
|-
| [[TEI_AUTOSNOW]]                  || [[Telejano]]
|-
| [[TEI_AUTOVANISH]]                || [[Telejano]]
|-
| [[TEI_AUTOZING]]                  || [[Telejano]]
|-
| [[TEI_BOB2]]                      || [[Telejano]]
|-
| [[TEI_EF_EXTRA]]                  || [[Telejano]]
|-
| [[TEI_EF2_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_EF3_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_HUDMANAGER]]                || [[Telejano]]
|-
| [[TEI_LOCALMENUS1]]               || [[Telejano]]
|-
| [[TEI_LOCALMENUS2]]               || [[Telejano]]
|-
| [[TEI_MAPMODELS]]                 || [[Telejano]]
|-
| [[TEI_MD3_MODEL]]                 || [[FTE]] [[Telejano]]
|-
| [[TEI_MENU_MISC2]]                || [[Telejano]]
|-
| [[TEI_MOD_PROGS]]                 || [[Telejano]]
|-
| [[TEI_MODPREDATOR]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETIC]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETICFOLLOW]]         || [[Telejano]]
|-
| [[TEI_MOVRELATIVESTATIC]]         || [[Betwix]] [[Telejano]]
|-
| [[TEI_SHOWLMP2]]                  || [[FTE]] [[Telejano]]
|-
| [[TEI_SHOWLMP3]]                  || [[Telejano]]
|-
| [[TEI_STATCOUNT]]                 || [[Telejano]]
|-
| [[TEI_STATICFX]]                  || [[Telejano]]
|-
| [[TEI_STEPSIZE]]                  || [[Telejano]]
|-
| [[TEI_SUN]]                       || [[Telejano]]
|-
| [[TEI_SVSKY]]                     || [[Telejano]]
|-
| [[TEI_TE_ALIENEXPLOSION]]         || [[Telejano]]
|-
| [[TEI_TE_CUSTOMFX]]               || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL]]         || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL2]]        || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL3]]        || [[Telejano]]
|-
| [[TEI_TE_IMPLOSIONFX]]            || [[Telejano]]
|-
| [[TEI_TE_LIGHTNING4]]             || [[Telejano]]
|-
| [[TEI_TE_LIGHTNINGX]]             || [[Telejano]]
|-
| [[TEI_TE_PARTICLEBLAST]]          || [[Telejano]]
|-
| [[TEI_TE_STATICFOG]]              || [[Telejano]]
|-
| [[TEI_TE_TRAILS]]                 || [[Telejano]]
|-
| [[TEI_THEMEFOLDER]]               || [[Telejano]]
|-
| [[TEI_TPAKLOAD]]                  || [[Telejano]]
|-
| [[TEI_ZONEFOGS]]                  || [[Telejano]]
|-
| [[TENEBRAE_GFX_DLIGHTS]]          || [[DarkPlaces]]
|-
| [[TIMESCALE]]                     ||
|-
| [[TQ_DLIGHTS]]                    || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_PLASMA]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAILTRAIL]]                  || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAIN]]                       || [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SLOWMO]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SNOW]]                       || [[FrikQuake]] [[Telejano]] [[TomazQuake]]
|-
| [[TW_SV_STEPCONTROLS]]            || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Twilight]]
|-
| [[UDC_EXTEFFECT]]                 ||
|-
| [[VEN_SCRIPT_PARTICLES]]          || [[Vengeance r2]]
|-
| [[ZQ_CLIENTCOMMAND]]              || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_INPUTBUTTONS]]               || [[ZQuake]]
|-
| [[ZQ_ITEMS2]]                     || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NOCLIP]] (QW)       || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_FLY]] (QW)          || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NONE]] (QW)         || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_PAUSE]]                      || [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_QC_PARTICLE]] (QW)           || [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_STRINGS]]                 || [[ezQuake]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_TOKENIZE]]                || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_SETINFO]]                    || [[ZQuake]]
|-
| [[ZQ_SOUNDTOCLIENT]]              || [[ZQuake]]
|-
| [[ZQ_VWEP]]                       || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
|}

===See Also===
* http://web.archive.org/web/*/http://www.quakesrc.org/registry.php</text>
      <sha1>k9n882ddon608sdf1z92le5ysgxuejx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>457</id>
      <parentid>450</parentid>
      <timestamp>2008-02-28T14:23:36Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="21112">Thanks to a cooperative effort between [[QuakeSrc]], LordHavoc and Tomaz a variety of new engines support a Extension-Detection system called, for the purposes of this wiki, &quot;QSG Extensions&quot;. These are meant to be used by [[QuakeC]] modders to expand and make use of the new engine features without breaking compatability with other engines ([[Prydon Gate]] is a good example of how this can be done).

For more information on how to use these, read about the [[checkextension]] builtin.

QSG Extensions are a powerful method. Mods addapt to higher and lower profiles, and engine coders dont need to stop to add new features, and QuakeC modders dont need to stop using it. But doing in the right way, everybody can run mods.

Notes:

* [[DarkPlaces]] and [[TomazQuake]] support most of the old QSG keys. Actually this keys have the widen support betwen engines.
* [[Telejano]] adds a lot of new QSG keys, but most are undocumented.
* The new [[DarkPlaces]] builds add some new and very interesting keys.
* [[FTE QuakeWorld]] adds a whole new spon on things. Visit [How FTE is broken] for more information.
* You can deactivate normal features with QSG keys. Example: If you create a engine that not support centerprints. You can use QSG_NO_CENTERPRINT. If you mod its coded checking that centerprint, will run on your engine with no-centerprint and on engines with centerprint. Negative QSG keys are usefull to use Quake1 mods with other engines that can load progs.dat files, like [[FungusQC]].
* [[Builtin ranges]]

{|style=&quot;border:1px solid #000000&quot;
|-
|align=&quot;center&quot;| '''Name'''
|align=&quot;center&quot;| '''Supported by'''
|-
| [[BX_COLOREDTEXT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_CON_DEL]]                    || [[Betwix]]
|-
| [[BX_CON_EXT]]                    || [[Betwix]]
|-
| [[BX_CON_TEXREPLACE]]             || [[Betwix]]
|-
| [[BX_CON_VAR]]                    || [[Betwix]]
|-
| [[BX_CON_WRITECONFIG]]            || [[Betwix]]
|-
| [[BX_ENGINE]]                     || [[Betwix]]
|-
| [[BX_ENT_BOUNCESCALE]]            || [[Betwix]]
|-
| [[BX_ENT_FRICTION]]               || [[Betwix]]
|-
| [[BX_ENT_MODELFLAGS]]             || [[Betwix]]
|-
| [[BX_GFX_SKYBOX]]                 || [[Betwix]]
|-
| [[BX_GFX_SUN]]                    || [[Betwix]]
|-
| [[BX_INPUTBUTTONS]]               || [[Betwix]]
|-
| [[BX_MDLOVERRIDE]]                || [[Betwix]]
|-
| [[BX_MULTIPLEFONTS]]              || [[Betwix]]
|-
| [[BX_P_M_SUPPORT]]                || [[Betwix]]
|-
| [[BX_QC_CAMERA]]                  || [[Betwix]]
|-
| [[BX_QC_CHECKFOV]]                || [[Betwix]]
|-
| [[BX_QC_FINDFIELDCHAIN]]          || [[Betwix]]
|-
| [[BX_QC_GETDATETIME]]             || [[Betwix]]
|-
| [[BX_QC_INIFILE]]                 || [[Betwix]]
|-
| [[BX_QC_MSGREAD]]                 || [[Betwix]]
|-
| [[BX_QC_PROGPARMS]]               || [[Betwix]]
|-
| [[BX_QC_PROTOCOL_FLAGS]]          || [[Betwix]]
|-
| [[BX_QC_SOUNDTEAM]]               || [[Betwix]]
|-
| [[BX_QC_SPRINTF]]                 || [[Betwix]]
|-
| [[BX_QC_STR]]                     || [[Betwix]]
|-
| [[BX_QC_VECMATH]]                 || [[Betwix]]
|-
| [[BX_QC_VISIBLE]]                 || [[Betwix]]
|-
| [[BX_SERVERPROGS]]                || [[Betwix]]
|-
| [[BX_SND_MUSIC]]                  || [[Betwix]]
|-
| [[BX_SV_LOCKCVARCMD]]             || [[Betwix]]
|-
| [[BX_SV_PARSESAY]]                || [[Betwix]]
|-
| [[BX_SV_UPDATE_CLIENTCVARS]]      || [[Betwix]]
|-
| [[BX_WAL_SUPPORT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_WEAPONBOB]]                  || [[Betwix]]
|-
| [[DP_BUTTONCHAT]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_BUTTONUSE]]                  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_CGAME]]                      || [[DarkPlaces]]
|-
| [[DP_CL_LOADSKY]]                 || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[ToChriS]] [[Vengeance r2]]
|-
| [[DP_CON_ALIASPARAMETERS]]        || [[DarkPlaces]]
|-
| [[DP_CON_EXPANDCVAR]]             || [[DarkPlaces]]
|-
| [[DP_CON_SET]]                    || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]] [[ezQuake]] [[ZQuake]]
|-
| [[DP_CON_SETA]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_CON_STARTMAP]]               || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_ADDITIVE]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_BLUE]]                    || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_DOUBLESIDED]]             || [[DarkPlaces]]
|-
| [[DP_EF_FLAME]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_FULLBRIGHT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NODEPTHTEST]]             || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_NODRAW]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NOGUNBOB]]                || [[DarkPlaces]]
|-
| [[DP_EF_NOSHADOW]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_EF_RED]]                     || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_STARDUST]]                || [[DarkPlaces]]
|-
| [[DP_ENT_ALPHA]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_ENT_COLORMOD]]               || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_ENT_CUSTOMCOLORMAP]]         || [[DarkPlaces]]
|-
| [[DP_ENT_DELTACOMPRESS]]          ||
|-
| [[DP_ENT_EXTERIORMODELTOCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_ENT_GLOW]]                   || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_ENT_LOWPRECISION]]           || [[DarkPlaces]]
|-
| [[DP_ENT_SCALE]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]]
|-
| [[DP_ENT_VIEWMODEL]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_EXTERNALTEXTURES]]       || [[DarkPlaces]]
|-
| [[DP_GFX_EXTERNALTEXTURES_PERMAPTEXTURES]] || [[DarkPlaces]]
|-
| [[DP_GFX_FOG]]                    || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_GFX_QUAKE3MODELTAGS]]        || [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_SKINFILES]]              || [[DarkPlaces]]
|-
| [[DP_GFX_SKYBOX]]                 || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_HALFLIFE_MAP]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_MAP_CVAR]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FTE]] [[ZQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_SPRITE]]            || [[DarkPlaces]]
|-
| [[DP_INPUTBUTTONS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_LITSPRITES]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_LITSUPPORT]]                 || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_MD3_TAGSINFO]]               ||
|-
| [[DP_MONSTERWALK]]                || [[DarkPlaces]] [[FTE]] [[Telejano]] [[ZQuake]]
|-
| [[DP_MOVETYPEBOUNCEMISSILE]]      || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_MOVETYPEFOLLOW]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_QC_DP_QC_ASINACOSATANATAN2TAN]] || [[DarkPlaces]]
|-
| [[DP_QC_CHANGEPITCH]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_COPYENTITY]]              || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[Vengeance r2]]
|-
| [[DP_QC_CVAR_DEFSTRING]]          || [[DarkPlaces]]
|-
| [[DP_QC_CVAR_STRING]]             || [[Betwix]] [[DarkPlaces]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[DP_QC_ETOS]]                    || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_FINDCHAIN]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDCHAINFLAGS]]          || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDCHAINFLOAT]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDFLAGS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDFLOAT]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]] [[QMB]] [[FuhQuake]]
|-
| [[DP_QC_FS_SEARCH]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_GETLIGHT]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_QC_GETSURFACE]]              || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_QC_GETTAGINFO]]              || [[DarkPlaces]]
|-
| [[DP_QC_MINMAXBOUND]]             || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_MULTIPLETEMPSTRINGS]]     || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_RANDOMVEC]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[MVDSV]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_SINCOSSQRTPOW]]           || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_TRACE_MOVETYPE_HITMODEL]] || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]|| [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPES]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACEBOX]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[MVDSV]] [[QMB]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_QC_TRACETOSS]]               || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_UNLIMITEDTEMPSTRINGS]]    || [[DarkPlaces]]
|-
| [[DP_QC_VECTORVECTORS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QUAKE2_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_QUAKE2_SPRITE]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MAP]]                 || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_REGISTERCVAR]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_SENSITIVITYSCALE]]           || [[Betwix]]
|-
| [[DP_SND_DIRECTIONLESSATTNNONE]]  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SND_FAKETRACKS]]             || [[DarkPlaces]]
|-
| [[DP_SND_OGGVORBIS]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SND_STEREOWAV]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SOLIDCORPSE]]                || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SPRITE32]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_SV_BOTCLIENT]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTCOLORS]]            || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTNAME]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_DRAWONLYTOCLIENT]]        || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_DRAWONLYTOTEAM]]          || [[Betwix]]
|-
| [[DP_SV_DROPCLIENT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_SV_EFFECT]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_EXTERIORMODELFORCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_NODRAWTOCLIENT]]          || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_PING]]                    || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_PLAYERPHYSICS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PRINT]]                   || [[DarkPlaces]]
|-
| [[DP_SV_PRECACHEANYTIME]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PUNCHVECTOR]]             || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_ROTATINGBMODEL]]          || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_SV_SETCOLOR]]                || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]]
|-
| [[DP_SV_SLOWMO]]                  || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SV_WRITEUNTERMINATEDSTRING]] || [[DarkPlaces]] [[ezQuake]] [[FTE]]
|-
| [[DP_TE_BLOOD]]                   || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_BLOODSHOWER]]             || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_CUSTOMFLASH]]             || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_EXPLOSIONRGB]]            || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_FLAMEJET]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLECUBE]]            || [[DarkPlaces]] [[QMB]]
|-
| [[DP_TE_PARTICLERAIN]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLESNOW]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PLASMABURN]]              || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_QUADEFFECTS1]]            || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_SMALLFLASH]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_SPARK]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_TE_STANDARDEFFECTBUILTINS]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_VIEWZOOM]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_WEAPONSKIN]]                 || [[Betwix]]
|-
| [[EXT_BITSHIFT]]                  || [[DarkPlaces]] [[Betwix]] [[FTE]]
|-
| [[EXT_CSQC]]                      || [[DarkPlaces]] [[FTE]]
|-
| [[EXT_DIMENSION_GHOST]]           || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_PHYSICS]]         || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_VISIBILITY]]      || [[Betwix]] [[FTE]]
|-
| [[FTE_CALLTIMEOFDAY]]             || [[Betwix]] [[MVDSV]] [[FTE]]
|-
| [[FTE_EXTENDEDTEXTCODES]]         || [[FTE]]
|-
| [[FTE_FORCEINFOKEY]]              || [[FTE]]
|-
| [[FTE_GFX_QUAKE3SHADERS]]         || [[FTE]]
|-
| [[FTE_HEXEN2]]                    || [[FTE]]
|-
| [[FTE_MEDIA_AVI]]                 || [[FTE]]
|-
| [[FTE_MEDIA_CIN]]                 || [[FTE]]
|-
| [[FTE_MEDIA_ROQ]]                 || [[FTE]]
|-
| [[FTE_MULTIPROGS]]                || [[FTE]]
|-
| [[FTE_MULTITHREADED]]             || [[FTE]]
|-
| [[FTE_MVD_PLAYBACK]]              || [[FTE]]
|-
| [[FTE_NPCCHAT]]                   || [[FTE]]
|-
| [[FTE_PEXT_BULLETENS]]            || [[FTE]]
|-
| [[FTE_PEXT_CUSTOMTENTS]]          || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL2]]           || [[FTE]]
|-
| [[FTE_PEXT_FATNESS]]              || [[FTE]]
|-
| [[FTE_PEXT_HULLSIZE]]             || [[FTE]]
|-
| [[FTE_PEXT_LIGHTSTYLECOL]]        || [[FTE]]
|-
| [[FTE_PEXT_LIGHTUPDATES]]         || [[FTE]]
|-
| [[FTE_PEXT_MODELDBL]]             || [[FTE]]
|-
| [[FTE_PEXT_ORIGINDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_Q2BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_Q3BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_SETVIEW]]              || [[FTE]]
|-
| [[FTE_PEXT_SPAWNSTATIC]]          || [[FTE]]
|-
| [[FTE_PEXT_TE_BULLET]]            || [[FTE]]
|-
| [[FTE_PEXT_VIEW2]]                || [[FTE]]
|-
| [[FTE_PEXT_VWEAP]]                || [[FTE]]
|-
| [[FTE_PEXT_ZLIBDL]]               || [[FTE]]
|-
| [[FTE_QC_CHECKPVS]]               || [[FTE]] [[ZQuake]]
|-
| [[FTE_QC_MATCHCLIENTNAME]]        || [[FTE]]
|-
| [[FTE_QC_PAUSED]]                 || [[FTE]]
|-
| [[FTE_QC_SENDPACKET]]             || [[FTE]]
|-
| [[FTE_QC_TRACETRIGGER]]           || [[FTE]]
|-
| [[FTE_SOLID_LADDER]]              || [[FTE]]
|-
| [[FTE_STRINGS]]                   || [[FTE]]
|-
| [[FTE_SV_REENTER]]                || [[FTE]]
|-
| [[FTE_TE_STANDARDEFFECTBUILTINS]] || [[FTE]]
|-
| [[FTE_VALID_VEC_HULL3]]           || [[FTE]]
|-
| [[FRIK_FILE]]                     || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[GQ]] [[Telejano]] [[Vengeance r2]]
|-
| [[KRIMZON_SV_PARSECLIENTCOMMAND]] || [[Betwix]] [[DarkPlaces]] [[FTE]] [[FuhQuake]]
|-
| [[NEH_CMD_PLAY2]]                 || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]]
|-
| [[NEH_RESTOREGAME]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[NEXUIZ_PLAYERMODEL]]            || [[DarkPlaces]]
|-
| [[NXQ_GFX_LETTERBOX]]             || [[DarkPlaces]]
|-
| [[PRYDON_CLIENTCURSOR]]           || [[DarkPlaces]]
|-
| [[QSG_FILE]]                      || [[FrikQuake]] [[Telejano]] [[ToChriS]]
|-
| [[QSG_DIMENSIONAL]]               ||
|-
| [[QSG_NO_CENTERPRINT]]            || [[FungusQC]]
|-
| [[QSG_NO_MDL]]                    || [[FungusQC]]
|-
| [[QSG_NO_NETCODE_Q1]]             || [[FungusQC]]
|-
| [[QW_ENGINE]]                     || [[FTE]]
|-
| [[QWE_MVD_RECORD]]                || [[FTE]]
|-
| [[TEI_AUTOANIMATION]]             || [[Telejano]]
|-
| [[TEI_AUTOFLUOR]]                 || [[Telejano]]
|-
| [[TEI_AUTOFOGWATER]]              || [[Telejano]]
|-
| [[TEI_AUTOFOOT]]                  || [[Telejano]]
|-
| [[TEI_AUTOLAVA]]                  || [[Telejano]]
|-
| [[TEI_AUTOLIGHTDAY]]              || [[Telejano]]
|-
| [[TEI_AUTORAIN]]                  || [[Telejano]]
|-
| [[TEI_AUTOSNOW]]                  || [[Telejano]]
|-
| [[TEI_AUTOVANISH]]                || [[Telejano]]
|-
| [[TEI_AUTOZING]]                  || [[Telejano]]
|-
| [[TEI_BOB2]]                      || [[Telejano]]
|-
| [[TEI_EF_EXTRA]]                  || [[Telejano]]
|-
| [[TEI_EF2_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_EF3_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_HUDMANAGER]]                || [[Telejano]]
|-
| [[TEI_LOCALMENUS1]]               || [[Telejano]]
|-
| [[TEI_LOCALMENUS2]]               || [[Telejano]]
|-
| [[TEI_MAPMODELS]]                 || [[Telejano]]
|-
| [[TEI_MD3_MODEL]]                 || [[FTE]] [[Telejano]]
|-
| [[TEI_MENU_MISC2]]                || [[Telejano]]
|-
| [[TEI_MOD_PROGS]]                 || [[Telejano]]
|-
| [[TEI_MODPREDATOR]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETIC]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETICFOLLOW]]         || [[Telejano]]
|-
| [[TEI_MOVRELATIVESTATIC]]         || [[Betwix]] [[Telejano]]
|-
| [[TEI_SHOWLMP2]]                  || [[FTE]] [[Telejano]]
|-
| [[TEI_SHOWLMP3]]                  || [[Telejano]]
|-
| [[TEI_STATCOUNT]]                 || [[Telejano]]
|-
| [[TEI_STATICFX]]                  || [[Telejano]]
|-
| [[TEI_STEPSIZE]]                  || [[Telejano]]
|-
| [[TEI_SUN]]                       || [[Telejano]]
|-
| [[TEI_SVSKY]]                     || [[Telejano]]
|-
| [[TEI_TE_ALIENEXPLOSION]]         || [[Telejano]]
|-
| [[TEI_TE_CUSTOMFX]]               || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL]]         || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL2]]        || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL3]]        || [[Telejano]]
|-
| [[TEI_TE_IMPLOSIONFX]]            || [[Telejano]]
|-
| [[TEI_TE_LIGHTNING4]]             || [[Telejano]]
|-
| [[TEI_TE_LIGHTNINGX]]             || [[Telejano]]
|-
| [[TEI_TE_PARTICLEBLAST]]          || [[Telejano]]
|-
| [[TEI_TE_STATICFOG]]              || [[Telejano]]
|-
| [[TEI_TE_TRAILS]]                 || [[Telejano]]
|-
| [[TEI_THEMEFOLDER]]               || [[Telejano]]
|-
| [[TEI_TPAKLOAD]]                  || [[Telejano]]
|-
| [[TEI_ZONEFOGS]]                  || [[Telejano]]
|-
| [[TENEBRAE_GFX_DLIGHTS]]          || [[DarkPlaces]]
|-
| [[TIMESCALE]]                     ||
|-
| [[TQ_DLIGHTS]]                    || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_PLASMA]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAILTRAIL]]                  || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAIN]]                       || [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SLOWMO]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SNOW]]                       || [[FrikQuake]] [[Telejano]] [[TomazQuake]]
|-
| [[TW_SV_STEPCONTROLS]]            || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Twilight]]
|-
| [[UDC_EXTEFFECT]]                 ||
|-
| [[VEN_SCRIPT_PARTICLES]]          || [[Vengeance r2]]
|-
| [[ZQ_CLIENTCOMMAND]]              || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_INPUTBUTTONS]]               || [[ZQuake]]
|-
| [[ZQ_ITEMS2]]                     || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NOCLIP]] (QW)       || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_FLY]] (QW)          || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NONE]] (QW)         || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_PAUSE]]                      || [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_QC_PARTICLE]] (QW)           || [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_STRINGS]]                 || [[ezQuake]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_TOKENIZE]]                || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_SETINFO]]                    || [[ZQuake]]
|-
| [[ZQ_SOUNDTOCLIENT]]              || [[ZQuake]]
|-
| [[ZQ_VWEP]]                       || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
|}

===See Also===
* http://web.archive.org/web/*/http://www.quakesrc.org/registry.php</text>
      <sha1>rpwosytbkggq2tqe8v1ggh1f6rm407s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>473</id>
      <parentid>457</parentid>
      <timestamp>2008-02-28T14:35:58Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="21340">Thanks to a cooperative effort between [[QuakeSrc]], LordHavoc and Tomaz a variety of new engines support a Extension-Detection system called, for the purposes of this wiki, &quot;QSG Extensions&quot;. These are meant to be used by [[QuakeC]] modders to expand and make use of the new engine features without breaking compatability with other engines ([[Prydon Gate]] is a good example of how this can be done).

For more information on how to use these, read about the [[checkextension]] builtin.

QSG Extensions are a powerful method. Mods addapt to higher and lower profiles, and engine coders dont need to stop to add new features, and QuakeC modders dont need to stop using it. But doing in the right way, everybody can run mods.

Notes:

* [[DarkPlaces]] and [[TomazQuake]] support most of the old QSG keys. Actually this keys have the widen support betwen engines.
* [[Telejano]] adds a lot of new QSG keys, but most are undocumented.
* The new [[DarkPlaces]] builds add some new and very interesting keys.
* [[FTE QuakeWorld]] adds a whole new spon on things. Visit [How FTE is broken] for more information.
* You can deactivate normal features with QSG keys. Example: If you create a engine that not support centerprints. You can use QSG_NO_CENTERPRINT. If you mod its coded checking that centerprint, will run on your engine with no-centerprint and on engines with centerprint. Negative QSG keys are usefull to use Quake1 mods with other engines that can load progs.dat files, like [[FungusQC]].
* [[Builtin ranges]]

{|style=&quot;border:1px solid #000000&quot;
|-
|align=&quot;center&quot;| '''Name'''
|align=&quot;center&quot;| '''Supported by'''
|-
| [[BX_COLOREDTEXT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_CON_DEL]]                    || [[Betwix]]
|-
| [[BX_CON_EXT]]                    || [[Betwix]]
|-
| [[BX_CON_TEXREPLACE]]             || [[Betwix]]
|-
| [[BX_CON_VAR]]                    || [[Betwix]]
|-
| [[BX_CON_WRITECONFIG]]            || [[Betwix]]
|-
| [[BX_ENGINE]]                     || [[Betwix]]
|-
| [[BX_ENT_BOUNCESCALE]]            || [[Betwix]]
|-
| [[BX_ENT_FRICTION]]               || [[Betwix]]
|-
| [[BX_ENT_MODELFLAGS]]             || [[Betwix]]
|-
| [[BX_GFX_SKYBOX]]                 || [[Betwix]]
|-
| [[BX_GFX_SUN]]                    || [[Betwix]]
|-
| [[BX_INPUTBUTTONS]]               || [[Betwix]]
|-
| [[BX_MDLOVERRIDE]]                || [[Betwix]]
|-
| [[BX_MULTIPLEFONTS]]              || [[Betwix]]
|-
| [[BX_P_M_SUPPORT]]                || [[Betwix]]
|-
| [[BX_QC_CAMERA]]                  || [[Betwix]]
|-
| [[BX_QC_CHECKFOV]]                || [[Betwix]]
|-
| [[BX_QC_FINDFIELDCHAIN]]          || [[Betwix]]
|-
| [[BX_QC_GETDATETIME]]             || [[Betwix]]
|-
| [[BX_QC_INIFILE]]                 || [[Betwix]]
|-
| [[BX_QC_MSGREAD]]                 || [[Betwix]]
|-
| [[BX_QC_PROGPARMS]]               || [[Betwix]]
|-
| [[BX_QC_PROTOCOL_FLAGS]]          || [[Betwix]]
|-
| [[BX_QC_SOUNDTEAM]]               || [[Betwix]]
|-
| [[BX_QC_SPRINTF]]                 || [[Betwix]]
|-
| [[BX_QC_STR]]                     || [[Betwix]]
|-
| [[BX_QC_VECMATH]]                 || [[Betwix]]
|-
| [[BX_QC_VISIBLE]]                 || [[Betwix]]
|-
| [[BX_SERVERPROGS]]                || [[Betwix]]
|-
| [[BX_SND_MUSIC]]                  || [[Betwix]]
|-
| [[BX_SV_LOCKCVARCMD]]             || [[Betwix]]
|-
| [[BX_SV_PARSESAY]]                || [[Betwix]]
|-
| [[BX_SV_UPDATE_CLIENTCVARS]]      || [[Betwix]]
|-
| [[BX_WAL_SUPPORT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_WEAPONBOB]]                  || [[Betwix]]
|-
| [[DP_BUTTONCHAT]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_BUTTONUSE]]                  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_CGAME]]                      || [[DarkPlaces]]
|-
| [[DP_CL_LOADSKY]]                 || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[ToChriS]] [[Vengeance r2]]
|-
| [[DP_CON_ALIASPARAMETERS]]        || [[DarkPlaces]]
|-
| [[DP_CON_EXPANDCVAR]]             || [[DarkPlaces]]
|-
| [[DP_CON_SET]]                    || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]] [[ezQuake]] [[ZQuake]]
|-
| [[DP_CON_SETA]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_CON_STARTMAP]]               || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_ADDITIVE]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_BLUE]]                    || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_DOUBLESIDED]]             || [[DarkPlaces]]
|-
| [[DP_EF_FLAME]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_FULLBRIGHT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NODEPTHTEST]]             || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_NODRAW]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NOGUNBOB]]                || [[DarkPlaces]]
|-
| [[DP_EF_NOSHADOW]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_EF_RED]]                     || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_STARDUST]]                || [[DarkPlaces]]
|-
| [[DP_ENT_ALPHA]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_ENT_COLORMOD]]               || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_ENT_CUSTOMCOLORMAP]]         || [[DarkPlaces]]
|-
| [[DP_ENT_DELTACOMPRESS]]          ||
|-
| [[DP_ENT_EXTERIORMODELTOCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_ENT_GLOW]]                   || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_ENT_LOWPRECISION]]           || [[DarkPlaces]]
|-
| [[DP_ENT_SCALE]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]]
|-
| [[DP_ENT_VIEWMODEL]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_EXTERNALTEXTURES]]       || [[DarkPlaces]]
|-
| [[DP_GFX_EXTERNALTEXTURES_PERMAPTEXTURES]] || [[DarkPlaces]]
|-
| [[DP_GFX_FOG]]                    || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_GFX_QUAKE3MODELTAGS]]        || [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_SKINFILES]]              || [[DarkPlaces]]
|-
| [[DP_GFX_SKYBOX]]                 || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_HALFLIFE_MAP]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_MAP_CVAR]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FTE]] [[ZQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_SPRITE]]            || [[DarkPlaces]]
|-
| [[DP_INPUTBUTTONS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_LITSPRITES]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_LITSUPPORT]]                 || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_MD3_TAGSINFO]]               ||
|-
| [[DP_MONSTERWALK]]                || [[DarkPlaces]] [[FTE]] [[Telejano]] [[ZQuake]]
|-
| [[DP_MOVETYPEBOUNCEMISSILE]]      || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_MOVETYPEFOLLOW]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_QC_DP_QC_ASINACOSATANATAN2TAN]] || [[DarkPlaces]]
|-
| [[DP_QC_CHANGEPITCH]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_COPYENTITY]]              || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[Vengeance r2]]
|-
| [[DP_QC_CVAR_DEFSTRING]]          || [[DarkPlaces]]
|-
| [[DP_QC_CVAR_STRING]]             || [[Betwix]] [[DarkPlaces]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[DP_QC_ETOS]]                    || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_FINDCHAIN]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDCHAINFLAGS]]          || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDCHAINFLOAT]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDFLAGS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDFLOAT]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]] [[QMB]] [[FuhQuake]]
|-
| [[DP_QC_FS_SEARCH]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_GETLIGHT]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_QC_GETSURFACE]]              || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_QC_GETTAGINFO]]              || [[DarkPlaces]]
|-
| [[DP_QC_MINMAXBOUND]]             || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_MULTIPLETEMPSTRINGS]]     || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_RANDOMVEC]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[MVDSV]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_SINCOSSQRTPOW]]           || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_STRFTIME]]                || [[DarkPlaces]]
|-
| [[DP_QC_STRINGCOLORFUNCTIONS]]    || [[DarkPlaces]]
|-
| [[DP_QC_STRING_CASE_FUNCTIONS]]   || [[DarkPlaces]]
|-
| [[DP_QC_TOKENIZEBYSEPARATOR]]     || [[DarkPlaces]]
|-
| [[DP_QC_TRACE_MOVETYPE_HITMODEL]] || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]|| [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPES]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACEBOX]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[MVDSV]] [[QMB]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_QC_TRACETOSS]]               || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_UNLIMITEDTEMPSTRINGS]]    || [[DarkPlaces]]
|-
| [[DP_QC_VECTORVECTORS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QUAKE2_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_QUAKE2_SPRITE]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MAP]]                 || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_REGISTERCVAR]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_SENSITIVITYSCALE]]           || [[Betwix]]
|-
| [[DP_SND_DIRECTIONLESSATTNNONE]]  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SND_FAKETRACKS]]             || [[DarkPlaces]]
|-
| [[DP_SND_OGGVORBIS]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SND_STEREOWAV]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SOLIDCORPSE]]                || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SPRITE32]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_SV_BOTCLIENT]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTCOLORS]]            || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTNAME]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_DRAWONLYTOCLIENT]]        || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_DRAWONLYTOTEAM]]          || [[Betwix]]
|-
| [[DP_SV_DROPCLIENT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_SV_EFFECT]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_EXTERIORMODELFORCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_NODRAWTOCLIENT]]          || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_PING]]                    || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_PLAYERPHYSICS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PRINT]]                   || [[DarkPlaces]]
|-
| [[DP_SV_PRECACHEANYTIME]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PUNCHVECTOR]]             || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_ROTATINGBMODEL]]          || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_SV_SETCOLOR]]                || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]]
|-
| [[DP_SV_SLOWMO]]                  || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SV_WRITEUNTERMINATEDSTRING]] || [[DarkPlaces]] [[ezQuake]] [[FTE]]
|-
| [[DP_TE_BLOOD]]                   || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_BLOODSHOWER]]             || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_CUSTOMFLASH]]             || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_EXPLOSIONRGB]]            || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_FLAMEJET]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLECUBE]]            || [[DarkPlaces]] [[QMB]]
|-
| [[DP_TE_PARTICLERAIN]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLESNOW]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PLASMABURN]]              || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_QUADEFFECTS1]]            || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_SMALLFLASH]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_SPARK]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_TE_STANDARDEFFECTBUILTINS]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_VIEWZOOM]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_WEAPONSKIN]]                 || [[Betwix]]
|-
| [[EXT_BITSHIFT]]                  || [[DarkPlaces]] [[Betwix]] [[FTE]]
|-
| [[EXT_CSQC]]                      || [[DarkPlaces]] [[FTE]]
|-
| [[EXT_DIMENSION_GHOST]]           || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_PHYSICS]]         || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_VISIBILITY]]      || [[Betwix]] [[FTE]]
|-
| [[FTE_CALLTIMEOFDAY]]             || [[Betwix]] [[MVDSV]] [[FTE]]
|-
| [[FTE_EXTENDEDTEXTCODES]]         || [[FTE]]
|-
| [[FTE_FORCEINFOKEY]]              || [[FTE]]
|-
| [[FTE_GFX_QUAKE3SHADERS]]         || [[FTE]]
|-
| [[FTE_HEXEN2]]                    || [[FTE]]
|-
| [[FTE_MEDIA_AVI]]                 || [[FTE]]
|-
| [[FTE_MEDIA_CIN]]                 || [[FTE]]
|-
| [[FTE_MEDIA_ROQ]]                 || [[FTE]]
|-
| [[FTE_MULTIPROGS]]                || [[FTE]]
|-
| [[FTE_MULTITHREADED]]             || [[FTE]]
|-
| [[FTE_MVD_PLAYBACK]]              || [[FTE]]
|-
| [[FTE_NPCCHAT]]                   || [[FTE]]
|-
| [[FTE_PEXT_BULLETENS]]            || [[FTE]]
|-
| [[FTE_PEXT_CUSTOMTENTS]]          || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL2]]           || [[FTE]]
|-
| [[FTE_PEXT_FATNESS]]              || [[FTE]]
|-
| [[FTE_PEXT_HULLSIZE]]             || [[FTE]]
|-
| [[FTE_PEXT_LIGHTSTYLECOL]]        || [[FTE]]
|-
| [[FTE_PEXT_LIGHTUPDATES]]         || [[FTE]]
|-
| [[FTE_PEXT_MODELDBL]]             || [[FTE]]
|-
| [[FTE_PEXT_ORIGINDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_Q2BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_Q3BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_SETVIEW]]              || [[FTE]]
|-
| [[FTE_PEXT_SPAWNSTATIC]]          || [[FTE]]
|-
| [[FTE_PEXT_TE_BULLET]]            || [[FTE]]
|-
| [[FTE_PEXT_VIEW2]]                || [[FTE]]
|-
| [[FTE_PEXT_VWEAP]]                || [[FTE]]
|-
| [[FTE_PEXT_ZLIBDL]]               || [[FTE]]
|-
| [[FTE_QC_CHECKPVS]]               || [[FTE]] [[ZQuake]]
|-
| [[FTE_QC_MATCHCLIENTNAME]]        || [[FTE]]
|-
| [[FTE_QC_PAUSED]]                 || [[FTE]]
|-
| [[FTE_QC_SENDPACKET]]             || [[FTE]]
|-
| [[FTE_QC_TRACETRIGGER]]           || [[FTE]]
|-
| [[FTE_SOLID_LADDER]]              || [[FTE]]
|-
| [[FTE_STRINGS]]                   || [[FTE]]
|-
| [[FTE_SV_REENTER]]                || [[FTE]]
|-
| [[FTE_TE_STANDARDEFFECTBUILTINS]] || [[FTE]]
|-
| [[FTE_VALID_VEC_HULL3]]           || [[FTE]]
|-
| [[FRIK_FILE]]                     || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[GQ]] [[Telejano]] [[Vengeance r2]]
|-
| [[KRIMZON_SV_PARSECLIENTCOMMAND]] || [[Betwix]] [[DarkPlaces]] [[FTE]] [[FuhQuake]]
|-
| [[NEH_CMD_PLAY2]]                 || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]]
|-
| [[NEH_RESTOREGAME]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[NEXUIZ_PLAYERMODEL]]            || [[DarkPlaces]]
|-
| [[NXQ_GFX_LETTERBOX]]             || [[DarkPlaces]]
|-
| [[PRYDON_CLIENTCURSOR]]           || [[DarkPlaces]]
|-
| [[QSG_FILE]]                      || [[FrikQuake]] [[Telejano]] [[ToChriS]]
|-
| [[QSG_DIMENSIONAL]]               ||
|-
| [[QSG_NO_CENTERPRINT]]            || [[FungusQC]]
|-
| [[QSG_NO_MDL]]                    || [[FungusQC]]
|-
| [[QSG_NO_NETCODE_Q1]]             || [[FungusQC]]
|-
| [[QW_ENGINE]]                     || [[FTE]]
|-
| [[QWE_MVD_RECORD]]                || [[FTE]]
|-
| [[TEI_AUTOANIMATION]]             || [[Telejano]]
|-
| [[TEI_AUTOFLUOR]]                 || [[Telejano]]
|-
| [[TEI_AUTOFOGWATER]]              || [[Telejano]]
|-
| [[TEI_AUTOFOOT]]                  || [[Telejano]]
|-
| [[TEI_AUTOLAVA]]                  || [[Telejano]]
|-
| [[TEI_AUTOLIGHTDAY]]              || [[Telejano]]
|-
| [[TEI_AUTORAIN]]                  || [[Telejano]]
|-
| [[TEI_AUTOSNOW]]                  || [[Telejano]]
|-
| [[TEI_AUTOVANISH]]                || [[Telejano]]
|-
| [[TEI_AUTOZING]]                  || [[Telejano]]
|-
| [[TEI_BOB2]]                      || [[Telejano]]
|-
| [[TEI_EF_EXTRA]]                  || [[Telejano]]
|-
| [[TEI_EF2_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_EF3_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_HUDMANAGER]]                || [[Telejano]]
|-
| [[TEI_LOCALMENUS1]]               || [[Telejano]]
|-
| [[TEI_LOCALMENUS2]]               || [[Telejano]]
|-
| [[TEI_MAPMODELS]]                 || [[Telejano]]
|-
| [[TEI_MD3_MODEL]]                 || [[FTE]] [[Telejano]]
|-
| [[TEI_MENU_MISC2]]                || [[Telejano]]
|-
| [[TEI_MOD_PROGS]]                 || [[Telejano]]
|-
| [[TEI_MODPREDATOR]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETIC]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETICFOLLOW]]         || [[Telejano]]
|-
| [[TEI_MOVRELATIVESTATIC]]         || [[Betwix]] [[Telejano]]
|-
| [[TEI_SHOWLMP2]]                  || [[FTE]] [[Telejano]]
|-
| [[TEI_SHOWLMP3]]                  || [[Telejano]]
|-
| [[TEI_STATCOUNT]]                 || [[Telejano]]
|-
| [[TEI_STATICFX]]                  || [[Telejano]]
|-
| [[TEI_STEPSIZE]]                  || [[Telejano]]
|-
| [[TEI_SUN]]                       || [[Telejano]]
|-
| [[TEI_SVSKY]]                     || [[Telejano]]
|-
| [[TEI_TE_ALIENEXPLOSION]]         || [[Telejano]]
|-
| [[TEI_TE_CUSTOMFX]]               || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL]]         || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL2]]        || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL3]]        || [[Telejano]]
|-
| [[TEI_TE_IMPLOSIONFX]]            || [[Telejano]]
|-
| [[TEI_TE_LIGHTNING4]]             || [[Telejano]]
|-
| [[TEI_TE_LIGHTNINGX]]             || [[Telejano]]
|-
| [[TEI_TE_PARTICLEBLAST]]          || [[Telejano]]
|-
| [[TEI_TE_STATICFOG]]              || [[Telejano]]
|-
| [[TEI_TE_TRAILS]]                 || [[Telejano]]
|-
| [[TEI_THEMEFOLDER]]               || [[Telejano]]
|-
| [[TEI_TPAKLOAD]]                  || [[Telejano]]
|-
| [[TEI_ZONEFOGS]]                  || [[Telejano]]
|-
| [[TENEBRAE_GFX_DLIGHTS]]          || [[DarkPlaces]]
|-
| [[TIMESCALE]]                     ||
|-
| [[TQ_DLIGHTS]]                    || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_PLASMA]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAILTRAIL]]                  || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAIN]]                       || [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SLOWMO]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SNOW]]                       || [[FrikQuake]] [[Telejano]] [[TomazQuake]]
|-
| [[TW_SV_STEPCONTROLS]]            || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Twilight]]
|-
| [[UDC_EXTEFFECT]]                 ||
|-
| [[VEN_SCRIPT_PARTICLES]]          || [[Vengeance r2]]
|-
| [[ZQ_CLIENTCOMMAND]]              || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_INPUTBUTTONS]]               || [[ZQuake]]
|-
| [[ZQ_ITEMS2]]                     || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NOCLIP]] (QW)       || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_FLY]] (QW)          || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NONE]] (QW)         || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_PAUSE]]                      || [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_QC_PARTICLE]] (QW)           || [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_STRINGS]]                 || [[ezQuake]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_TOKENIZE]]                || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_SETINFO]]                    || [[ZQuake]]
|-
| [[ZQ_SOUNDTOCLIENT]]              || [[ZQuake]]
|-
| [[ZQ_VWEP]]                       || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
|}

===See Also===
* http://web.archive.org/web/*/http://www.quakesrc.org/registry.php</text>
      <sha1>kiw4fjym8xod7r9lqwt2nzi3iv3j5lm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>485</id>
      <parentid>473</parentid>
      <timestamp>2008-02-28T14:50:26Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="21397">Thanks to a cooperative effort between [[QuakeSrc]], LordHavoc and Tomaz a variety of new engines support a Extension-Detection system called, for the purposes of this wiki, &quot;QSG Extensions&quot;. These are meant to be used by [[QuakeC]] modders to expand and make use of the new engine features without breaking compatability with other engines ([[Prydon Gate]] is a good example of how this can be done).

For more information on how to use these, read about the [[checkextension]] builtin.

QSG Extensions are a powerful method. Mods addapt to higher and lower profiles, and engine coders dont need to stop to add new features, and QuakeC modders dont need to stop using it. But doing in the right way, everybody can run mods.

Notes:

* [[DarkPlaces]] and [[TomazQuake]] support most of the old QSG keys. Actually this keys have the widen support betwen engines.
* [[Telejano]] adds a lot of new QSG keys, but most are undocumented.
* The new [[DarkPlaces]] builds add some new and very interesting keys.
* [[FTE QuakeWorld]] adds a whole new spon on things. Visit [How FTE is broken] for more information.
* You can deactivate normal features with QSG keys. Example: If you create a engine that not support centerprints. You can use QSG_NO_CENTERPRINT. If you mod its coded checking that centerprint, will run on your engine with no-centerprint and on engines with centerprint. Negative QSG keys are usefull to use Quake1 mods with other engines that can load progs.dat files, like [[FungusQC]].
* [[Builtin ranges]]

{|style=&quot;border:1px solid #000000&quot;
|-
|align=&quot;center&quot;| '''Name'''
|align=&quot;center&quot;| '''Supported by'''
|-
| [[BX_COLOREDTEXT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_CON_DEL]]                    || [[Betwix]]
|-
| [[BX_CON_EXT]]                    || [[Betwix]]
|-
| [[BX_CON_TEXREPLACE]]             || [[Betwix]]
|-
| [[BX_CON_VAR]]                    || [[Betwix]]
|-
| [[BX_CON_WRITECONFIG]]            || [[Betwix]]
|-
| [[BX_ENGINE]]                     || [[Betwix]]
|-
| [[BX_ENT_BOUNCESCALE]]            || [[Betwix]]
|-
| [[BX_ENT_FRICTION]]               || [[Betwix]]
|-
| [[BX_ENT_MODELFLAGS]]             || [[Betwix]]
|-
| [[BX_GFX_SKYBOX]]                 || [[Betwix]]
|-
| [[BX_GFX_SUN]]                    || [[Betwix]]
|-
| [[BX_INPUTBUTTONS]]               || [[Betwix]]
|-
| [[BX_MDLOVERRIDE]]                || [[Betwix]]
|-
| [[BX_MULTIPLEFONTS]]              || [[Betwix]]
|-
| [[BX_P_M_SUPPORT]]                || [[Betwix]]
|-
| [[BX_QC_CAMERA]]                  || [[Betwix]]
|-
| [[BX_QC_CHECKFOV]]                || [[Betwix]]
|-
| [[BX_QC_FINDFIELDCHAIN]]          || [[Betwix]]
|-
| [[BX_QC_GETDATETIME]]             || [[Betwix]]
|-
| [[BX_QC_INIFILE]]                 || [[Betwix]]
|-
| [[BX_QC_MSGREAD]]                 || [[Betwix]]
|-
| [[BX_QC_PROGPARMS]]               || [[Betwix]]
|-
| [[BX_QC_PROTOCOL_FLAGS]]          || [[Betwix]]
|-
| [[BX_QC_SOUNDTEAM]]               || [[Betwix]]
|-
| [[BX_QC_SPRINTF]]                 || [[Betwix]]
|-
| [[BX_QC_STR]]                     || [[Betwix]]
|-
| [[BX_QC_VECMATH]]                 || [[Betwix]]
|-
| [[BX_QC_VISIBLE]]                 || [[Betwix]]
|-
| [[BX_SERVERPROGS]]                || [[Betwix]]
|-
| [[BX_SND_MUSIC]]                  || [[Betwix]]
|-
| [[BX_SV_LOCKCVARCMD]]             || [[Betwix]]
|-
| [[BX_SV_PARSESAY]]                || [[Betwix]]
|-
| [[BX_SV_UPDATE_CLIENTCVARS]]      || [[Betwix]]
|-
| [[BX_WAL_SUPPORT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_WEAPONBOB]]                  || [[Betwix]]
|-
| [[DP_BUTTONCHAT]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_BUTTONUSE]]                  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_CGAME]]                      || [[DarkPlaces]]
|-
| [[DP_CL_LOADSKY]]                 || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[ToChriS]] [[Vengeance r2]]
|-
| [[DP_CON_ALIASPARAMETERS]]        || [[DarkPlaces]]
|-
| [[DP_CON_EXPANDCVAR]]             || [[DarkPlaces]]
|-
| [[DP_CON_SET]]                    || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]] [[ezQuake]] [[ZQuake]]
|-
| [[DP_CON_SETA]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_CON_STARTMAP]]               || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_ADDITIVE]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_BLUE]]                    || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_DOUBLESIDED]]             || [[DarkPlaces]]
|-
| [[DP_EF_FLAME]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_FULLBRIGHT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NODEPTHTEST]]             || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_NODRAW]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NOGUNBOB]]                || [[DarkPlaces]]
|-
| [[DP_EF_NOSHADOW]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_EF_RED]]                     || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_STARDUST]]                || [[DarkPlaces]]
|-
| [[DP_ENT_ALPHA]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_ENT_COLORMOD]]               || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_ENT_CUSTOMCOLORMAP]]         || [[DarkPlaces]]
|-
| [[DP_ENT_DELTACOMPRESS]]          ||
|-
| [[DP_ENT_EXTERIORMODELTOCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_ENT_GLOW]]                   || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_ENT_LOWPRECISION]]           || [[DarkPlaces]]
|-
| [[DP_ENT_SCALE]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]]
|-
| [[DP_ENT_VIEWMODEL]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_EXTERNALTEXTURES]]       || [[DarkPlaces]]
|-
| [[DP_GFX_EXTERNALTEXTURES_PERMAPTEXTURES]] || [[DarkPlaces]]
|-
| [[DP_GFX_FOG]]                    || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_GFX_QUAKE3MODELTAGS]]        || [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_SKINFILES]]              || [[DarkPlaces]]
|-
| [[DP_GFX_SKYBOX]]                 || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_HALFLIFE_MAP]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_MAP_CVAR]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FTE]] [[ZQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_SPRITE]]            || [[DarkPlaces]]
|-
| [[DP_INPUTBUTTONS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_LITSPRITES]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_LITSUPPORT]]                 || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_MD3_TAGSINFO]]               ||
|-
| [[DP_MONSTERWALK]]                || [[DarkPlaces]] [[FTE]] [[Telejano]] [[ZQuake]]
|-
| [[DP_MOVETYPEBOUNCEMISSILE]]      || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_MOVETYPEFOLLOW]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_QC_DP_QC_ASINACOSATANATAN2TAN]] || [[DarkPlaces]]
|-
| [[DP_QC_CHANGEPITCH]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_COPYENTITY]]              || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[Vengeance r2]]
|-
| [[DP_QC_CVAR_DEFSTRING]]          || [[DarkPlaces]]
|-
| [[DP_QC_CVAR_STRING]]             || [[Betwix]] [[DarkPlaces]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[DP_QC_ETOS]]                    || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_FINDCHAIN]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDCHAINFLAGS]]          || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDCHAINFLOAT]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDFLAGS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDFLOAT]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]] [[QMB]] [[FuhQuake]]
|-
| [[DP_QC_FS_SEARCH]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_GETLIGHT]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_QC_GETSURFACE]]              || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_QC_GETTAGINFO]]              || [[DarkPlaces]]
|-
| [[DP_QC_MINMAXBOUND]]             || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_MULTIPLETEMPSTRINGS]]     || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_RANDOMVEC]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[MVDSV]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_SINCOSSQRTPOW]]           || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_STRFTIME]]                || [[DarkPlaces]]
|-
| [[DP_QC_STRINGCOLORFUNCTIONS]]    || [[DarkPlaces]]
|-
| [[DP_QC_STRING_CASE_FUNCTIONS]]   || [[DarkPlaces]]
|-
| [[DP_QC_TOKENIZEBYSEPARATOR]]     || [[DarkPlaces]]
|-
| [[DP_QC_TRACE_MOVETYPE_HITMODEL]] || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]|| [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPES]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACEBOX]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[MVDSV]] [[QMB]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_QC_TRACETOSS]]               || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_UNLIMITEDTEMPSTRINGS]]    || [[DarkPlaces]]
|-
| [[DP_QC_VECTORVECTORS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_VECTOANGLES_WITH_ROLL]]   || [[DarkPlaces]]
|-
| [[DP_QUAKE2_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_QUAKE2_SPRITE]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MAP]]                 || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_REGISTERCVAR]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_SENSITIVITYSCALE]]           || [[Betwix]]
|-
| [[DP_SND_DIRECTIONLESSATTNNONE]]  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SND_FAKETRACKS]]             || [[DarkPlaces]]
|-
| [[DP_SND_OGGVORBIS]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SND_STEREOWAV]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SOLIDCORPSE]]                || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SPRITE32]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_SV_BOTCLIENT]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTCOLORS]]            || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTNAME]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_DRAWONLYTOCLIENT]]        || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_DRAWONLYTOTEAM]]          || [[Betwix]]
|-
| [[DP_SV_DROPCLIENT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_SV_EFFECT]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_EXTERIORMODELFORCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_NODRAWTOCLIENT]]          || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_PING]]                    || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_PLAYERPHYSICS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PRINT]]                   || [[DarkPlaces]]
|-
| [[DP_SV_PRECACHEANYTIME]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PUNCHVECTOR]]             || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_ROTATINGBMODEL]]          || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_SV_SETCOLOR]]                || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]]
|-
| [[DP_SV_SLOWMO]]                  || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SV_WRITEUNTERMINATEDSTRING]] || [[DarkPlaces]] [[ezQuake]] [[FTE]]
|-
| [[DP_TE_BLOOD]]                   || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_BLOODSHOWER]]             || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_CUSTOMFLASH]]             || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_EXPLOSIONRGB]]            || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_FLAMEJET]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLECUBE]]            || [[DarkPlaces]] [[QMB]]
|-
| [[DP_TE_PARTICLERAIN]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLESNOW]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PLASMABURN]]              || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_QUADEFFECTS1]]            || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_SMALLFLASH]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_SPARK]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_TE_STANDARDEFFECTBUILTINS]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_VIEWZOOM]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_WEAPONSKIN]]                 || [[Betwix]]
|-
| [[EXT_BITSHIFT]]                  || [[DarkPlaces]] [[Betwix]] [[FTE]]
|-
| [[EXT_CSQC]]                      || [[DarkPlaces]] [[FTE]]
|-
| [[EXT_DIMENSION_GHOST]]           || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_PHYSICS]]         || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_VISIBILITY]]      || [[Betwix]] [[FTE]]
|-
| [[FTE_CALLTIMEOFDAY]]             || [[Betwix]] [[MVDSV]] [[FTE]]
|-
| [[FTE_EXTENDEDTEXTCODES]]         || [[FTE]]
|-
| [[FTE_FORCEINFOKEY]]              || [[FTE]]
|-
| [[FTE_GFX_QUAKE3SHADERS]]         || [[FTE]]
|-
| [[FTE_HEXEN2]]                    || [[FTE]]
|-
| [[FTE_MEDIA_AVI]]                 || [[FTE]]
|-
| [[FTE_MEDIA_CIN]]                 || [[FTE]]
|-
| [[FTE_MEDIA_ROQ]]                 || [[FTE]]
|-
| [[FTE_MULTIPROGS]]                || [[FTE]]
|-
| [[FTE_MULTITHREADED]]             || [[FTE]]
|-
| [[FTE_MVD_PLAYBACK]]              || [[FTE]]
|-
| [[FTE_NPCCHAT]]                   || [[FTE]]
|-
| [[FTE_PEXT_BULLETENS]]            || [[FTE]]
|-
| [[FTE_PEXT_CUSTOMTENTS]]          || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL2]]           || [[FTE]]
|-
| [[FTE_PEXT_FATNESS]]              || [[FTE]]
|-
| [[FTE_PEXT_HULLSIZE]]             || [[FTE]]
|-
| [[FTE_PEXT_LIGHTSTYLECOL]]        || [[FTE]]
|-
| [[FTE_PEXT_LIGHTUPDATES]]         || [[FTE]]
|-
| [[FTE_PEXT_MODELDBL]]             || [[FTE]]
|-
| [[FTE_PEXT_ORIGINDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_Q2BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_Q3BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_SETVIEW]]              || [[FTE]]
|-
| [[FTE_PEXT_SPAWNSTATIC]]          || [[FTE]]
|-
| [[FTE_PEXT_TE_BULLET]]            || [[FTE]]
|-
| [[FTE_PEXT_VIEW2]]                || [[FTE]]
|-
| [[FTE_PEXT_VWEAP]]                || [[FTE]]
|-
| [[FTE_PEXT_ZLIBDL]]               || [[FTE]]
|-
| [[FTE_QC_CHECKPVS]]               || [[FTE]] [[ZQuake]]
|-
| [[FTE_QC_MATCHCLIENTNAME]]        || [[FTE]]
|-
| [[FTE_QC_PAUSED]]                 || [[FTE]]
|-
| [[FTE_QC_SENDPACKET]]             || [[FTE]]
|-
| [[FTE_QC_TRACETRIGGER]]           || [[FTE]]
|-
| [[FTE_SOLID_LADDER]]              || [[FTE]]
|-
| [[FTE_STRINGS]]                   || [[FTE]]
|-
| [[FTE_SV_REENTER]]                || [[FTE]]
|-
| [[FTE_TE_STANDARDEFFECTBUILTINS]] || [[FTE]]
|-
| [[FTE_VALID_VEC_HULL3]]           || [[FTE]]
|-
| [[FRIK_FILE]]                     || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[GQ]] [[Telejano]] [[Vengeance r2]]
|-
| [[KRIMZON_SV_PARSECLIENTCOMMAND]] || [[Betwix]] [[DarkPlaces]] [[FTE]] [[FuhQuake]]
|-
| [[NEH_CMD_PLAY2]]                 || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]]
|-
| [[NEH_RESTOREGAME]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[NEXUIZ_PLAYERMODEL]]            || [[DarkPlaces]]
|-
| [[NXQ_GFX_LETTERBOX]]             || [[DarkPlaces]]
|-
| [[PRYDON_CLIENTCURSOR]]           || [[DarkPlaces]]
|-
| [[QSG_FILE]]                      || [[FrikQuake]] [[Telejano]] [[ToChriS]]
|-
| [[QSG_DIMENSIONAL]]               ||
|-
| [[QSG_NO_CENTERPRINT]]            || [[FungusQC]]
|-
| [[QSG_NO_MDL]]                    || [[FungusQC]]
|-
| [[QSG_NO_NETCODE_Q1]]             || [[FungusQC]]
|-
| [[QW_ENGINE]]                     || [[FTE]]
|-
| [[QWE_MVD_RECORD]]                || [[FTE]]
|-
| [[TEI_AUTOANIMATION]]             || [[Telejano]]
|-
| [[TEI_AUTOFLUOR]]                 || [[Telejano]]
|-
| [[TEI_AUTOFOGWATER]]              || [[Telejano]]
|-
| [[TEI_AUTOFOOT]]                  || [[Telejano]]
|-
| [[TEI_AUTOLAVA]]                  || [[Telejano]]
|-
| [[TEI_AUTOLIGHTDAY]]              || [[Telejano]]
|-
| [[TEI_AUTORAIN]]                  || [[Telejano]]
|-
| [[TEI_AUTOSNOW]]                  || [[Telejano]]
|-
| [[TEI_AUTOVANISH]]                || [[Telejano]]
|-
| [[TEI_AUTOZING]]                  || [[Telejano]]
|-
| [[TEI_BOB2]]                      || [[Telejano]]
|-
| [[TEI_EF_EXTRA]]                  || [[Telejano]]
|-
| [[TEI_EF2_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_EF3_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_HUDMANAGER]]                || [[Telejano]]
|-
| [[TEI_LOCALMENUS1]]               || [[Telejano]]
|-
| [[TEI_LOCALMENUS2]]               || [[Telejano]]
|-
| [[TEI_MAPMODELS]]                 || [[Telejano]]
|-
| [[TEI_MD3_MODEL]]                 || [[FTE]] [[Telejano]]
|-
| [[TEI_MENU_MISC2]]                || [[Telejano]]
|-
| [[TEI_MOD_PROGS]]                 || [[Telejano]]
|-
| [[TEI_MODPREDATOR]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETIC]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETICFOLLOW]]         || [[Telejano]]
|-
| [[TEI_MOVRELATIVESTATIC]]         || [[Betwix]] [[Telejano]]
|-
| [[TEI_SHOWLMP2]]                  || [[FTE]] [[Telejano]]
|-
| [[TEI_SHOWLMP3]]                  || [[Telejano]]
|-
| [[TEI_STATCOUNT]]                 || [[Telejano]]
|-
| [[TEI_STATICFX]]                  || [[Telejano]]
|-
| [[TEI_STEPSIZE]]                  || [[Telejano]]
|-
| [[TEI_SUN]]                       || [[Telejano]]
|-
| [[TEI_SVSKY]]                     || [[Telejano]]
|-
| [[TEI_TE_ALIENEXPLOSION]]         || [[Telejano]]
|-
| [[TEI_TE_CUSTOMFX]]               || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL]]         || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL2]]        || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL3]]        || [[Telejano]]
|-
| [[TEI_TE_IMPLOSIONFX]]            || [[Telejano]]
|-
| [[TEI_TE_LIGHTNING4]]             || [[Telejano]]
|-
| [[TEI_TE_LIGHTNINGX]]             || [[Telejano]]
|-
| [[TEI_TE_PARTICLEBLAST]]          || [[Telejano]]
|-
| [[TEI_TE_STATICFOG]]              || [[Telejano]]
|-
| [[TEI_TE_TRAILS]]                 || [[Telejano]]
|-
| [[TEI_THEMEFOLDER]]               || [[Telejano]]
|-
| [[TEI_TPAKLOAD]]                  || [[Telejano]]
|-
| [[TEI_ZONEFOGS]]                  || [[Telejano]]
|-
| [[TENEBRAE_GFX_DLIGHTS]]          || [[DarkPlaces]]
|-
| [[TIMESCALE]]                     ||
|-
| [[TQ_DLIGHTS]]                    || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_PLASMA]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAILTRAIL]]                  || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAIN]]                       || [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SLOWMO]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SNOW]]                       || [[FrikQuake]] [[Telejano]] [[TomazQuake]]
|-
| [[TW_SV_STEPCONTROLS]]            || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Twilight]]
|-
| [[UDC_EXTEFFECT]]                 ||
|-
| [[VEN_SCRIPT_PARTICLES]]          || [[Vengeance r2]]
|-
| [[ZQ_CLIENTCOMMAND]]              || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_INPUTBUTTONS]]               || [[ZQuake]]
|-
| [[ZQ_ITEMS2]]                     || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NOCLIP]] (QW)       || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_FLY]] (QW)          || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NONE]] (QW)         || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_PAUSE]]                      || [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_QC_PARTICLE]] (QW)           || [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_STRINGS]]                 || [[ezQuake]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_TOKENIZE]]                || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_SETINFO]]                    || [[ZQuake]]
|-
| [[ZQ_SOUNDTOCLIENT]]              || [[ZQuake]]
|-
| [[ZQ_VWEP]]                       || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
|}

===See Also===
* http://web.archive.org/web/*/http://www.quakesrc.org/registry.php</text>
      <sha1>32wvvudzgmw5cav3t8k4fibxidngxnu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>501</id>
      <parentid>485</parentid>
      <timestamp>2008-02-29T11:22:42Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="21455">Thanks to a cooperative effort between [[QuakeSrc]], LordHavoc and Tomaz a variety of new engines support a Extension-Detection system called, for the purposes of this wiki, &quot;QSG Extensions&quot;. These are meant to be used by [[QuakeC]] modders to expand and make use of the new engine features without breaking compatability with other engines ([[Prydon Gate]] is a good example of how this can be done).

For more information on how to use these, read about the [[checkextension]] builtin.

QSG Extensions are a powerful method. Mods addapt to higher and lower profiles, and engine coders dont need to stop to add new features, and QuakeC modders dont need to stop using it. But doing in the right way, everybody can run mods.

Notes:

* [[DarkPlaces]] and [[TomazQuake]] support most of the old QSG keys. Actually this keys have the widen support betwen engines.
* [[Telejano]] adds a lot of new QSG keys, but most are undocumented.
* The new [[DarkPlaces]] builds add some new and very interesting keys.
* [[FTE QuakeWorld]] adds a whole new spon on things. Visit [How FTE is broken] for more information.
* You can deactivate normal features with QSG keys. Example: If you create a engine that not support centerprints. You can use QSG_NO_CENTERPRINT. If you mod its coded checking that centerprint, will run on your engine with no-centerprint and on engines with centerprint. Negative QSG keys are usefull to use Quake1 mods with other engines that can load progs.dat files, like [[FungusQC]].
* [[Builtin ranges]]

{|style=&quot;border:1px solid #000000&quot;
|-
|align=&quot;center&quot;| '''Name'''
|align=&quot;center&quot;| '''Supported by'''
|-
| [[BX_COLOREDTEXT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_CON_DEL]]                    || [[Betwix]]
|-
| [[BX_CON_EXT]]                    || [[Betwix]]
|-
| [[BX_CON_TEXREPLACE]]             || [[Betwix]]
|-
| [[BX_CON_VAR]]                    || [[Betwix]]
|-
| [[BX_CON_WRITECONFIG]]            || [[Betwix]]
|-
| [[BX_ENGINE]]                     || [[Betwix]]
|-
| [[BX_ENT_BOUNCESCALE]]            || [[Betwix]]
|-
| [[BX_ENT_FRICTION]]               || [[Betwix]]
|-
| [[BX_ENT_MODELFLAGS]]             || [[Betwix]]
|-
| [[BX_GFX_SKYBOX]]                 || [[Betwix]]
|-
| [[BX_GFX_SUN]]                    || [[Betwix]]
|-
| [[BX_INPUTBUTTONS]]               || [[Betwix]]
|-
| [[BX_MDLOVERRIDE]]                || [[Betwix]]
|-
| [[BX_MULTIPLEFONTS]]              || [[Betwix]]
|-
| [[BX_P_M_SUPPORT]]                || [[Betwix]]
|-
| [[BX_QC_CAMERA]]                  || [[Betwix]]
|-
| [[BX_QC_CHECKFOV]]                || [[Betwix]]
|-
| [[BX_QC_FINDFIELDCHAIN]]          || [[Betwix]]
|-
| [[BX_QC_GETDATETIME]]             || [[Betwix]]
|-
| [[BX_QC_INIFILE]]                 || [[Betwix]]
|-
| [[BX_QC_MSGREAD]]                 || [[Betwix]]
|-
| [[BX_QC_PROGPARMS]]               || [[Betwix]]
|-
| [[BX_QC_PROTOCOL_FLAGS]]          || [[Betwix]]
|-
| [[BX_QC_SOUNDTEAM]]               || [[Betwix]]
|-
| [[BX_QC_SPRINTF]]                 || [[Betwix]]
|-
| [[BX_QC_STR]]                     || [[Betwix]]
|-
| [[BX_QC_VECMATH]]                 || [[Betwix]]
|-
| [[BX_QC_VISIBLE]]                 || [[Betwix]]
|-
| [[BX_SERVERPROGS]]                || [[Betwix]]
|-
| [[BX_SND_MUSIC]]                  || [[Betwix]]
|-
| [[BX_SV_LOCKCVARCMD]]             || [[Betwix]]
|-
| [[BX_SV_PARSESAY]]                || [[Betwix]]
|-
| [[BX_SV_UPDATE_CLIENTCVARS]]      || [[Betwix]]
|-
| [[BX_WAL_SUPPORT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_WEAPONBOB]]                  || [[Betwix]]
|-
| [[DP_BUTTONCHAT]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_BUTTONUSE]]                  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_CGAME]]                      || [[DarkPlaces]]
|-
| [[DP_CL_LOADSKY]]                 || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[ToChriS]] [[Vengeance r2]]
|-
| [[DP_CON_ALIASPARAMETERS]]        || [[DarkPlaces]]
|-
| [[DP_CON_EXPANDCVAR]]             || [[DarkPlaces]]
|-
| [[DP_CON_SET]]                    || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]] [[ezQuake]] [[ZQuake]]
|-
| [[DP_CON_SETA]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_CON_STARTMAP]]               || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_ADDITIVE]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_BLUE]]                    || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_DOUBLESIDED]]             || [[DarkPlaces]]
|-
| [[DP_EF_FLAME]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_FULLBRIGHT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NODEPTHTEST]]             || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_NODRAW]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NOGUNBOB]]                || [[DarkPlaces]]
|-
| [[DP_EF_NOSHADOW]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_EF_RED]]                     || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_STARDUST]]                || [[DarkPlaces]]
|-
| [[DP_ENT_ALPHA]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_ENT_COLORMOD]]               || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_ENT_CUSTOMCOLORMAP]]         || [[DarkPlaces]]
|-
| [[DP_ENT_DELTACOMPRESS]]          ||
|-
| [[DP_ENT_EXTERIORMODELTOCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_ENT_GLOW]]                   || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_ENT_LOWPRECISION]]           || [[DarkPlaces]]
|-
| [[DP_ENT_SCALE]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]]
|-
| [[DP_ENT_VIEWMODEL]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_EXTERNALTEXTURES]]       || [[DarkPlaces]]
|-
| [[DP_GFX_EXTERNALTEXTURES_PERMAPTEXTURES]] || [[DarkPlaces]]
|-
| [[DP_GFX_FOG]]                    || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_GFX_QUAKE3MODELTAGS]]        || [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_SKINFILES]]              || [[DarkPlaces]]
|-
| [[DP_GFX_SKYBOX]]                 || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_HALFLIFE_MAP]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_MAP_CVAR]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FTE]] [[ZQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_SPRITE]]            || [[DarkPlaces]]
|-
| [[DP_INPUTBUTTONS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_LITSPRITES]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_LITSUPPORT]]                 || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_MD3_TAGSINFO]]               ||
|-
| [[DP_MONSTERWALK]]                || [[DarkPlaces]] [[FTE]] [[Telejano]] [[ZQuake]]
|-
| [[DP_MOVETYPEBOUNCEMISSILE]]      || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_MOVETYPEFOLLOW]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_QC_DP_QC_ASINACOSATANATAN2TAN]] || [[DarkPlaces]]
|-
| [[DP_QC_CHANGEPITCH]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_COPYENTITY]]              || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[Vengeance r2]]
|-
| [[DP_QC_CVAR_DEFSTRING]]          || [[DarkPlaces]]
|-
| [[DP_QC_CVAR_STRING]]             || [[Betwix]] [[DarkPlaces]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[DP_QC_ETOS]]                    || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_FINDCHAIN]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDCHAINFLAGS]]          || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDCHAINFLOAT]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDFLAGS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDFLOAT]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]] [[QMB]] [[FuhQuake]]
|-
| [[DP_QC_FS_SEARCH]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_GETLIGHT]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_QC_GETSURFACE]]              || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_QC_GETTAGINFO]]              || [[DarkPlaces]]
|-
| [[DP_QC_MINMAXBOUND]]             || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_MULTIPLETEMPSTRINGS]]     || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_RANDOMVEC]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[MVDSV]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_SINCOSSQRTPOW]]           || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_STRFTIME]]                || [[DarkPlaces]]
|-
| [[DP_QC_STRINGCOLORFUNCTIONS]]    || [[DarkPlaces]]
|-
| [[DP_QC_STRING_CASE_FUNCTIONS]]   || [[DarkPlaces]]
|-
| [[DP_QC_TOKENIZEBYSEPARATOR]]     || [[DarkPlaces]]
|-
| [[DP_QC_TRACE_MOVETYPE_HITMODEL]] || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]|| [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPES]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACEBOX]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[MVDSV]] [[QMB]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_QC_TRACETOSS]]               || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_UNLIMITEDTEMPSTRINGS]]    || [[DarkPlaces]]
|-
| [[DP_QC_VECTORVECTORS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_VECTOANGLES_WITH_ROLL]]   || [[DarkPlaces]]
|-
| [[DP_QUAKE2_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_QUAKE2_SPRITE]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MAP]]                 || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_REGISTERCVAR]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_SENSITIVITYSCALE]]           || [[Betwix]]
|-
| [[DP_SND_DIRECTIONLESSATTNNONE]]  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SND_FAKETRACKS]]             || [[DarkPlaces]]
|-
| [[DP_SND_OGGVORBIS]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SND_STEREOWAV]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SOLIDCORPSE]]                || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SPRITE32]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_SV_BOTCLIENT]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTCOLORS]]            || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTNAME]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CUSTOMIZEENTITYFORCLIENT]] || [[DarkPlaces]]
|-
| [[DP_SV_DRAWONLYTOCLIENT]]        || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_DRAWONLYTOTEAM]]          || [[Betwix]]
|-
| [[DP_SV_DROPCLIENT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_SV_EFFECT]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_EXTERIORMODELFORCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_NODRAWTOCLIENT]]          || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_PING]]                    || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_PLAYERPHYSICS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PRINT]]                   || [[DarkPlaces]]
|-
| [[DP_SV_PRECACHEANYTIME]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PUNCHVECTOR]]             || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_ROTATINGBMODEL]]          || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_SV_SETCOLOR]]                || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]]
|-
| [[DP_SV_SLOWMO]]                  || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SV_WRITEUNTERMINATEDSTRING]] || [[DarkPlaces]] [[ezQuake]] [[FTE]]
|-
| [[DP_TE_BLOOD]]                   || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_BLOODSHOWER]]             || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_CUSTOMFLASH]]             || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_EXPLOSIONRGB]]            || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_FLAMEJET]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLECUBE]]            || [[DarkPlaces]] [[QMB]]
|-
| [[DP_TE_PARTICLERAIN]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLESNOW]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PLASMABURN]]              || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_QUADEFFECTS1]]            || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_SMALLFLASH]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_SPARK]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_TE_STANDARDEFFECTBUILTINS]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_VIEWZOOM]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_WEAPONSKIN]]                 || [[Betwix]]
|-
| [[EXT_BITSHIFT]]                  || [[DarkPlaces]] [[Betwix]] [[FTE]]
|-
| [[EXT_CSQC]]                      || [[DarkPlaces]] [[FTE]]
|-
| [[EXT_DIMENSION_GHOST]]           || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_PHYSICS]]         || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_VISIBILITY]]      || [[Betwix]] [[FTE]]
|-
| [[FTE_CALLTIMEOFDAY]]             || [[Betwix]] [[MVDSV]] [[FTE]]
|-
| [[FTE_EXTENDEDTEXTCODES]]         || [[FTE]]
|-
| [[FTE_FORCEINFOKEY]]              || [[FTE]]
|-
| [[FTE_GFX_QUAKE3SHADERS]]         || [[FTE]]
|-
| [[FTE_HEXEN2]]                    || [[FTE]]
|-
| [[FTE_MEDIA_AVI]]                 || [[FTE]]
|-
| [[FTE_MEDIA_CIN]]                 || [[FTE]]
|-
| [[FTE_MEDIA_ROQ]]                 || [[FTE]]
|-
| [[FTE_MULTIPROGS]]                || [[FTE]]
|-
| [[FTE_MULTITHREADED]]             || [[FTE]]
|-
| [[FTE_MVD_PLAYBACK]]              || [[FTE]]
|-
| [[FTE_NPCCHAT]]                   || [[FTE]]
|-
| [[FTE_PEXT_BULLETENS]]            || [[FTE]]
|-
| [[FTE_PEXT_CUSTOMTENTS]]          || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL2]]           || [[FTE]]
|-
| [[FTE_PEXT_FATNESS]]              || [[FTE]]
|-
| [[FTE_PEXT_HULLSIZE]]             || [[FTE]]
|-
| [[FTE_PEXT_LIGHTSTYLECOL]]        || [[FTE]]
|-
| [[FTE_PEXT_LIGHTUPDATES]]         || [[FTE]]
|-
| [[FTE_PEXT_MODELDBL]]             || [[FTE]]
|-
| [[FTE_PEXT_ORIGINDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_Q2BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_Q3BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_SETVIEW]]              || [[FTE]]
|-
| [[FTE_PEXT_SPAWNSTATIC]]          || [[FTE]]
|-
| [[FTE_PEXT_TE_BULLET]]            || [[FTE]]
|-
| [[FTE_PEXT_VIEW2]]                || [[FTE]]
|-
| [[FTE_PEXT_VWEAP]]                || [[FTE]]
|-
| [[FTE_PEXT_ZLIBDL]]               || [[FTE]]
|-
| [[FTE_QC_CHECKPVS]]               || [[FTE]] [[ZQuake]]
|-
| [[FTE_QC_MATCHCLIENTNAME]]        || [[FTE]]
|-
| [[FTE_QC_PAUSED]]                 || [[FTE]]
|-
| [[FTE_QC_SENDPACKET]]             || [[FTE]]
|-
| [[FTE_QC_TRACETRIGGER]]           || [[FTE]]
|-
| [[FTE_SOLID_LADDER]]              || [[FTE]]
|-
| [[FTE_STRINGS]]                   || [[FTE]]
|-
| [[FTE_SV_REENTER]]                || [[FTE]]
|-
| [[FTE_TE_STANDARDEFFECTBUILTINS]] || [[FTE]]
|-
| [[FTE_VALID_VEC_HULL3]]           || [[FTE]]
|-
| [[FRIK_FILE]]                     || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[GQ]] [[Telejano]] [[Vengeance r2]]
|-
| [[KRIMZON_SV_PARSECLIENTCOMMAND]] || [[Betwix]] [[DarkPlaces]] [[FTE]] [[FuhQuake]]
|-
| [[NEH_CMD_PLAY2]]                 || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]]
|-
| [[NEH_RESTOREGAME]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[NEXUIZ_PLAYERMODEL]]            || [[DarkPlaces]]
|-
| [[NXQ_GFX_LETTERBOX]]             || [[DarkPlaces]]
|-
| [[PRYDON_CLIENTCURSOR]]           || [[DarkPlaces]]
|-
| [[QSG_FILE]]                      || [[FrikQuake]] [[Telejano]] [[ToChriS]]
|-
| [[QSG_DIMENSIONAL]]               ||
|-
| [[QSG_NO_CENTERPRINT]]            || [[FungusQC]]
|-
| [[QSG_NO_MDL]]                    || [[FungusQC]]
|-
| [[QSG_NO_NETCODE_Q1]]             || [[FungusQC]]
|-
| [[QW_ENGINE]]                     || [[FTE]]
|-
| [[QWE_MVD_RECORD]]                || [[FTE]]
|-
| [[TEI_AUTOANIMATION]]             || [[Telejano]]
|-
| [[TEI_AUTOFLUOR]]                 || [[Telejano]]
|-
| [[TEI_AUTOFOGWATER]]              || [[Telejano]]
|-
| [[TEI_AUTOFOOT]]                  || [[Telejano]]
|-
| [[TEI_AUTOLAVA]]                  || [[Telejano]]
|-
| [[TEI_AUTOLIGHTDAY]]              || [[Telejano]]
|-
| [[TEI_AUTORAIN]]                  || [[Telejano]]
|-
| [[TEI_AUTOSNOW]]                  || [[Telejano]]
|-
| [[TEI_AUTOVANISH]]                || [[Telejano]]
|-
| [[TEI_AUTOZING]]                  || [[Telejano]]
|-
| [[TEI_BOB2]]                      || [[Telejano]]
|-
| [[TEI_EF_EXTRA]]                  || [[Telejano]]
|-
| [[TEI_EF2_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_EF3_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_HUDMANAGER]]                || [[Telejano]]
|-
| [[TEI_LOCALMENUS1]]               || [[Telejano]]
|-
| [[TEI_LOCALMENUS2]]               || [[Telejano]]
|-
| [[TEI_MAPMODELS]]                 || [[Telejano]]
|-
| [[TEI_MD3_MODEL]]                 || [[FTE]] [[Telejano]]
|-
| [[TEI_MENU_MISC2]]                || [[Telejano]]
|-
| [[TEI_MOD_PROGS]]                 || [[Telejano]]
|-
| [[TEI_MODPREDATOR]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETIC]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETICFOLLOW]]         || [[Telejano]]
|-
| [[TEI_MOVRELATIVESTATIC]]         || [[Betwix]] [[Telejano]]
|-
| [[TEI_SHOWLMP2]]                  || [[FTE]] [[Telejano]]
|-
| [[TEI_SHOWLMP3]]                  || [[Telejano]]
|-
| [[TEI_STATCOUNT]]                 || [[Telejano]]
|-
| [[TEI_STATICFX]]                  || [[Telejano]]
|-
| [[TEI_STEPSIZE]]                  || [[Telejano]]
|-
| [[TEI_SUN]]                       || [[Telejano]]
|-
| [[TEI_SVSKY]]                     || [[Telejano]]
|-
| [[TEI_TE_ALIENEXPLOSION]]         || [[Telejano]]
|-
| [[TEI_TE_CUSTOMFX]]               || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL]]         || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL2]]        || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL3]]        || [[Telejano]]
|-
| [[TEI_TE_IMPLOSIONFX]]            || [[Telejano]]
|-
| [[TEI_TE_LIGHTNING4]]             || [[Telejano]]
|-
| [[TEI_TE_LIGHTNINGX]]             || [[Telejano]]
|-
| [[TEI_TE_PARTICLEBLAST]]          || [[Telejano]]
|-
| [[TEI_TE_STATICFOG]]              || [[Telejano]]
|-
| [[TEI_TE_TRAILS]]                 || [[Telejano]]
|-
| [[TEI_THEMEFOLDER]]               || [[Telejano]]
|-
| [[TEI_TPAKLOAD]]                  || [[Telejano]]
|-
| [[TEI_ZONEFOGS]]                  || [[Telejano]]
|-
| [[TENEBRAE_GFX_DLIGHTS]]          || [[DarkPlaces]]
|-
| [[TIMESCALE]]                     ||
|-
| [[TQ_DLIGHTS]]                    || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_PLASMA]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAILTRAIL]]                  || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAIN]]                       || [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SLOWMO]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SNOW]]                       || [[FrikQuake]] [[Telejano]] [[TomazQuake]]
|-
| [[TW_SV_STEPCONTROLS]]            || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Twilight]]
|-
| [[UDC_EXTEFFECT]]                 ||
|-
| [[VEN_SCRIPT_PARTICLES]]          || [[Vengeance r2]]
|-
| [[ZQ_CLIENTCOMMAND]]              || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_INPUTBUTTONS]]               || [[ZQuake]]
|-
| [[ZQ_ITEMS2]]                     || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NOCLIP]] (QW)       || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_FLY]] (QW)          || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NONE]] (QW)         || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_PAUSE]]                      || [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_QC_PARTICLE]] (QW)           || [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_STRINGS]]                 || [[ezQuake]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_TOKENIZE]]                || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_SETINFO]]                    || [[ZQuake]]
|-
| [[ZQ_SOUNDTOCLIENT]]              || [[ZQuake]]
|-
| [[ZQ_VWEP]]                       || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
|}

===See Also===
* http://web.archive.org/web/*/http://www.quakesrc.org/registry.php</text>
      <sha1>kro8n12gs5q1hhroldl44gjle434daq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>508</id>
      <parentid>501</parentid>
      <timestamp>2008-02-29T11:30:25Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="21513">Thanks to a cooperative effort between [[QuakeSrc]], LordHavoc and Tomaz a variety of new engines support a Extension-Detection system called, for the purposes of this wiki, &quot;QSG Extensions&quot;. These are meant to be used by [[QuakeC]] modders to expand and make use of the new engine features without breaking compatability with other engines ([[Prydon Gate]] is a good example of how this can be done).

For more information on how to use these, read about the [[checkextension]] builtin.

QSG Extensions are a powerful method. Mods addapt to higher and lower profiles, and engine coders dont need to stop to add new features, and QuakeC modders dont need to stop using it. But doing in the right way, everybody can run mods.

Notes:

* [[DarkPlaces]] and [[TomazQuake]] support most of the old QSG keys. Actually this keys have the widen support betwen engines.
* [[Telejano]] adds a lot of new QSG keys, but most are undocumented.
* The new [[DarkPlaces]] builds add some new and very interesting keys.
* [[FTE QuakeWorld]] adds a whole new spon on things. Visit [How FTE is broken] for more information.
* You can deactivate normal features with QSG keys. Example: If you create a engine that not support centerprints. You can use QSG_NO_CENTERPRINT. If you mod its coded checking that centerprint, will run on your engine with no-centerprint and on engines with centerprint. Negative QSG keys are usefull to use Quake1 mods with other engines that can load progs.dat files, like [[FungusQC]].
* [[Builtin ranges]]

{|style=&quot;border:1px solid #000000&quot;
|-
|align=&quot;center&quot;| '''Name'''
|align=&quot;center&quot;| '''Supported by'''
|-
| [[BX_COLOREDTEXT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_CON_DEL]]                    || [[Betwix]]
|-
| [[BX_CON_EXT]]                    || [[Betwix]]
|-
| [[BX_CON_TEXREPLACE]]             || [[Betwix]]
|-
| [[BX_CON_VAR]]                    || [[Betwix]]
|-
| [[BX_CON_WRITECONFIG]]            || [[Betwix]]
|-
| [[BX_ENGINE]]                     || [[Betwix]]
|-
| [[BX_ENT_BOUNCESCALE]]            || [[Betwix]]
|-
| [[BX_ENT_FRICTION]]               || [[Betwix]]
|-
| [[BX_ENT_MODELFLAGS]]             || [[Betwix]]
|-
| [[BX_GFX_SKYBOX]]                 || [[Betwix]]
|-
| [[BX_GFX_SUN]]                    || [[Betwix]]
|-
| [[BX_INPUTBUTTONS]]               || [[Betwix]]
|-
| [[BX_MDLOVERRIDE]]                || [[Betwix]]
|-
| [[BX_MULTIPLEFONTS]]              || [[Betwix]]
|-
| [[BX_P_M_SUPPORT]]                || [[Betwix]]
|-
| [[BX_QC_CAMERA]]                  || [[Betwix]]
|-
| [[BX_QC_CHECKFOV]]                || [[Betwix]]
|-
| [[BX_QC_FINDFIELDCHAIN]]          || [[Betwix]]
|-
| [[BX_QC_GETDATETIME]]             || [[Betwix]]
|-
| [[BX_QC_INIFILE]]                 || [[Betwix]]
|-
| [[BX_QC_MSGREAD]]                 || [[Betwix]]
|-
| [[BX_QC_PROGPARMS]]               || [[Betwix]]
|-
| [[BX_QC_PROTOCOL_FLAGS]]          || [[Betwix]]
|-
| [[BX_QC_SOUNDTEAM]]               || [[Betwix]]
|-
| [[BX_QC_SPRINTF]]                 || [[Betwix]]
|-
| [[BX_QC_STR]]                     || [[Betwix]]
|-
| [[BX_QC_VECMATH]]                 || [[Betwix]]
|-
| [[BX_QC_VISIBLE]]                 || [[Betwix]]
|-
| [[BX_SERVERPROGS]]                || [[Betwix]]
|-
| [[BX_SND_MUSIC]]                  || [[Betwix]]
|-
| [[BX_SV_LOCKCVARCMD]]             || [[Betwix]]
|-
| [[BX_SV_PARSESAY]]                || [[Betwix]]
|-
| [[BX_SV_UPDATE_CLIENTCVARS]]      || [[Betwix]]
|-
| [[BX_WAL_SUPPORT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_WEAPONBOB]]                  || [[Betwix]]
|-
| [[DP_BUTTONCHAT]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_BUTTONUSE]]                  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_CGAME]]                      || [[DarkPlaces]]
|-
| [[DP_CL_LOADSKY]]                 || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[ToChriS]] [[Vengeance r2]]
|-
| [[DP_CON_ALIASPARAMETERS]]        || [[DarkPlaces]]
|-
| [[DP_CON_EXPANDCVAR]]             || [[DarkPlaces]]
|-
| [[DP_CON_SET]]                    || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]] [[ezQuake]] [[ZQuake]]
|-
| [[DP_CON_SETA]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_CON_STARTMAP]]               || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_ADDITIVE]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_BLUE]]                    || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_DOUBLESIDED]]             || [[DarkPlaces]]
|-
| [[DP_EF_FLAME]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_FULLBRIGHT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NODEPTHTEST]]             || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_NODRAW]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NOGUNBOB]]                || [[DarkPlaces]]
|-
| [[DP_EF_NOSHADOW]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_EF_RED]]                     || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_STARDUST]]                || [[DarkPlaces]]
|-
| [[DP_ENT_ALPHA]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_ENT_COLORMOD]]               || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_ENT_CUSTOMCOLORMAP]]         || [[DarkPlaces]]
|-
| [[DP_ENT_DELTACOMPRESS]]          ||
|-
| [[DP_ENT_EXTERIORMODELTOCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_ENT_GLOW]]                   || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_ENT_LOWPRECISION]]           || [[DarkPlaces]]
|-
| [[DP_ENT_SCALE]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]]
|-
| [[DP_ENT_VIEWMODEL]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_EXTERNALTEXTURES]]       || [[DarkPlaces]]
|-
| [[DP_GFX_EXTERNALTEXTURES_PERMAPTEXTURES]] || [[DarkPlaces]]
|-
| [[DP_GFX_FOG]]                    || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_GFX_QUAKE3MODELTAGS]]        || [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_SKINFILES]]              || [[DarkPlaces]]
|-
| [[DP_GFX_SKYBOX]]                 || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_HALFLIFE_MAP]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_MAP_CVAR]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FTE]] [[ZQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_SPRITE]]            || [[DarkPlaces]]
|-
| [[DP_INPUTBUTTONS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_LITSPRITES]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_LITSUPPORT]]                 || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_MD3_TAGSINFO]]               ||
|-
| [[DP_MONSTERWALK]]                || [[DarkPlaces]] [[FTE]] [[Telejano]] [[ZQuake]]
|-
| [[DP_MOVETYPEBOUNCEMISSILE]]      || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_MOVETYPEFOLLOW]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_QC_DP_QC_ASINACOSATANATAN2TAN]] || [[DarkPlaces]]
|-
| [[DP_QC_CHANGEPITCH]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_COPYENTITY]]              || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[Vengeance r2]]
|-
| [[DP_QC_CVAR_DEFSTRING]]          || [[DarkPlaces]]
|-
| [[DP_QC_CVAR_STRING]]             || [[Betwix]] [[DarkPlaces]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[DP_QC_ETOS]]                    || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_FINDCHAIN]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDCHAINFLAGS]]          || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDCHAINFLOAT]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDFLAGS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDFLOAT]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]] [[QMB]] [[FuhQuake]]
|-
| [[DP_QC_FS_SEARCH]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_GETLIGHT]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_QC_GETSURFACE]]              || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_QC_GETTAGINFO]]              || [[DarkPlaces]]
|-
| [[DP_QC_MINMAXBOUND]]             || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_MULTIPLETEMPSTRINGS]]     || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_RANDOMVEC]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[MVDSV]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_SINCOSSQRTPOW]]           || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_STRFTIME]]                || [[DarkPlaces]]
|-
| [[DP_QC_STRINGCOLORFUNCTIONS]]    || [[DarkPlaces]]
|-
| [[DP_QC_STRING_CASE_FUNCTIONS]]   || [[DarkPlaces]]
|-
| [[DP_QC_TOKENIZEBYSEPARATOR]]     || [[DarkPlaces]]
|-
| [[DP_QC_TRACE_MOVETYPE_HITMODEL]] || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]|| [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPES]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACEBOX]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[MVDSV]] [[QMB]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_QC_TRACETOSS]]               || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_UNLIMITEDTEMPSTRINGS]]    || [[DarkPlaces]]
|-
| [[DP_QC_VECTORVECTORS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_VECTOANGLES_WITH_ROLL]]   || [[DarkPlaces]]
|-
| [[DP_QUAKE2_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_QUAKE2_SPRITE]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MAP]]                 || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_REGISTERCVAR]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_SENSITIVITYSCALE]]           || [[Betwix]]
|-
| [[DP_SND_DIRECTIONLESSATTNNONE]]  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SND_FAKETRACKS]]             || [[DarkPlaces]]
|-
| [[DP_SND_OGGVORBIS]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SND_STEREOWAV]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SOLIDCORPSE]]                || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SPRITE32]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_SV_BOTCLIENT]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTCOLORS]]            || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTNAME]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CUSTOMIZEENTITYFORCLIENT]] || [[DarkPlaces]]
|-
| [[DP_SV_DRAWONLYTOCLIENT]]        || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_DRAWONLYTOTEAM]]          || [[Betwix]]
|-
| [[DP_SV_DROPCLIENT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_SV_EFFECT]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_ENTITYCONTENTSTRANSITION]] || [[DarkPlaces]]
|-
| [[DP_SV_EXTERIORMODELFORCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_NODRAWTOCLIENT]]          || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_PING]]                    || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_PLAYERPHYSICS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PRINT]]                   || [[DarkPlaces]]
|-
| [[DP_SV_PRECACHEANYTIME]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PUNCHVECTOR]]             || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_ROTATINGBMODEL]]          || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_SV_SETCOLOR]]                || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]]
|-
| [[DP_SV_SLOWMO]]                  || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SV_WRITEUNTERMINATEDSTRING]] || [[DarkPlaces]] [[ezQuake]] [[FTE]]
|-
| [[DP_TE_BLOOD]]                   || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_BLOODSHOWER]]             || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_CUSTOMFLASH]]             || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_EXPLOSIONRGB]]            || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_FLAMEJET]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLECUBE]]            || [[DarkPlaces]] [[QMB]]
|-
| [[DP_TE_PARTICLERAIN]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLESNOW]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PLASMABURN]]              || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_QUADEFFECTS1]]            || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_SMALLFLASH]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_SPARK]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_TE_STANDARDEFFECTBUILTINS]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_VIEWZOOM]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_WEAPONSKIN]]                 || [[Betwix]]
|-
| [[EXT_BITSHIFT]]                  || [[DarkPlaces]] [[Betwix]] [[FTE]]
|-
| [[EXT_CSQC]]                      || [[DarkPlaces]] [[FTE]]
|-
| [[EXT_DIMENSION_GHOST]]           || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_PHYSICS]]         || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_VISIBILITY]]      || [[Betwix]] [[FTE]]
|-
| [[FTE_CALLTIMEOFDAY]]             || [[Betwix]] [[MVDSV]] [[FTE]]
|-
| [[FTE_EXTENDEDTEXTCODES]]         || [[FTE]]
|-
| [[FTE_FORCEINFOKEY]]              || [[FTE]]
|-
| [[FTE_GFX_QUAKE3SHADERS]]         || [[FTE]]
|-
| [[FTE_HEXEN2]]                    || [[FTE]]
|-
| [[FTE_MEDIA_AVI]]                 || [[FTE]]
|-
| [[FTE_MEDIA_CIN]]                 || [[FTE]]
|-
| [[FTE_MEDIA_ROQ]]                 || [[FTE]]
|-
| [[FTE_MULTIPROGS]]                || [[FTE]]
|-
| [[FTE_MULTITHREADED]]             || [[FTE]]
|-
| [[FTE_MVD_PLAYBACK]]              || [[FTE]]
|-
| [[FTE_NPCCHAT]]                   || [[FTE]]
|-
| [[FTE_PEXT_BULLETENS]]            || [[FTE]]
|-
| [[FTE_PEXT_CUSTOMTENTS]]          || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL2]]           || [[FTE]]
|-
| [[FTE_PEXT_FATNESS]]              || [[FTE]]
|-
| [[FTE_PEXT_HULLSIZE]]             || [[FTE]]
|-
| [[FTE_PEXT_LIGHTSTYLECOL]]        || [[FTE]]
|-
| [[FTE_PEXT_LIGHTUPDATES]]         || [[FTE]]
|-
| [[FTE_PEXT_MODELDBL]]             || [[FTE]]
|-
| [[FTE_PEXT_ORIGINDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_Q2BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_Q3BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_SETVIEW]]              || [[FTE]]
|-
| [[FTE_PEXT_SPAWNSTATIC]]          || [[FTE]]
|-
| [[FTE_PEXT_TE_BULLET]]            || [[FTE]]
|-
| [[FTE_PEXT_VIEW2]]                || [[FTE]]
|-
| [[FTE_PEXT_VWEAP]]                || [[FTE]]
|-
| [[FTE_PEXT_ZLIBDL]]               || [[FTE]]
|-
| [[FTE_QC_CHECKPVS]]               || [[FTE]] [[ZQuake]]
|-
| [[FTE_QC_MATCHCLIENTNAME]]        || [[FTE]]
|-
| [[FTE_QC_PAUSED]]                 || [[FTE]]
|-
| [[FTE_QC_SENDPACKET]]             || [[FTE]]
|-
| [[FTE_QC_TRACETRIGGER]]           || [[FTE]]
|-
| [[FTE_SOLID_LADDER]]              || [[FTE]]
|-
| [[FTE_STRINGS]]                   || [[FTE]]
|-
| [[FTE_SV_REENTER]]                || [[FTE]]
|-
| [[FTE_TE_STANDARDEFFECTBUILTINS]] || [[FTE]]
|-
| [[FTE_VALID_VEC_HULL3]]           || [[FTE]]
|-
| [[FRIK_FILE]]                     || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[GQ]] [[Telejano]] [[Vengeance r2]]
|-
| [[KRIMZON_SV_PARSECLIENTCOMMAND]] || [[Betwix]] [[DarkPlaces]] [[FTE]] [[FuhQuake]]
|-
| [[NEH_CMD_PLAY2]]                 || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]]
|-
| [[NEH_RESTOREGAME]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[NEXUIZ_PLAYERMODEL]]            || [[DarkPlaces]]
|-
| [[NXQ_GFX_LETTERBOX]]             || [[DarkPlaces]]
|-
| [[PRYDON_CLIENTCURSOR]]           || [[DarkPlaces]]
|-
| [[QSG_FILE]]                      || [[FrikQuake]] [[Telejano]] [[ToChriS]]
|-
| [[QSG_DIMENSIONAL]]               ||
|-
| [[QSG_NO_CENTERPRINT]]            || [[FungusQC]]
|-
| [[QSG_NO_MDL]]                    || [[FungusQC]]
|-
| [[QSG_NO_NETCODE_Q1]]             || [[FungusQC]]
|-
| [[QW_ENGINE]]                     || [[FTE]]
|-
| [[QWE_MVD_RECORD]]                || [[FTE]]
|-
| [[TEI_AUTOANIMATION]]             || [[Telejano]]
|-
| [[TEI_AUTOFLUOR]]                 || [[Telejano]]
|-
| [[TEI_AUTOFOGWATER]]              || [[Telejano]]
|-
| [[TEI_AUTOFOOT]]                  || [[Telejano]]
|-
| [[TEI_AUTOLAVA]]                  || [[Telejano]]
|-
| [[TEI_AUTOLIGHTDAY]]              || [[Telejano]]
|-
| [[TEI_AUTORAIN]]                  || [[Telejano]]
|-
| [[TEI_AUTOSNOW]]                  || [[Telejano]]
|-
| [[TEI_AUTOVANISH]]                || [[Telejano]]
|-
| [[TEI_AUTOZING]]                  || [[Telejano]]
|-
| [[TEI_BOB2]]                      || [[Telejano]]
|-
| [[TEI_EF_EXTRA]]                  || [[Telejano]]
|-
| [[TEI_EF2_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_EF3_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_HUDMANAGER]]                || [[Telejano]]
|-
| [[TEI_LOCALMENUS1]]               || [[Telejano]]
|-
| [[TEI_LOCALMENUS2]]               || [[Telejano]]
|-
| [[TEI_MAPMODELS]]                 || [[Telejano]]
|-
| [[TEI_MD3_MODEL]]                 || [[FTE]] [[Telejano]]
|-
| [[TEI_MENU_MISC2]]                || [[Telejano]]
|-
| [[TEI_MOD_PROGS]]                 || [[Telejano]]
|-
| [[TEI_MODPREDATOR]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETIC]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETICFOLLOW]]         || [[Telejano]]
|-
| [[TEI_MOVRELATIVESTATIC]]         || [[Betwix]] [[Telejano]]
|-
| [[TEI_SHOWLMP2]]                  || [[FTE]] [[Telejano]]
|-
| [[TEI_SHOWLMP3]]                  || [[Telejano]]
|-
| [[TEI_STATCOUNT]]                 || [[Telejano]]
|-
| [[TEI_STATICFX]]                  || [[Telejano]]
|-
| [[TEI_STEPSIZE]]                  || [[Telejano]]
|-
| [[TEI_SUN]]                       || [[Telejano]]
|-
| [[TEI_SVSKY]]                     || [[Telejano]]
|-
| [[TEI_TE_ALIENEXPLOSION]]         || [[Telejano]]
|-
| [[TEI_TE_CUSTOMFX]]               || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL]]         || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL2]]        || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL3]]        || [[Telejano]]
|-
| [[TEI_TE_IMPLOSIONFX]]            || [[Telejano]]
|-
| [[TEI_TE_LIGHTNING4]]             || [[Telejano]]
|-
| [[TEI_TE_LIGHTNINGX]]             || [[Telejano]]
|-
| [[TEI_TE_PARTICLEBLAST]]          || [[Telejano]]
|-
| [[TEI_TE_STATICFOG]]              || [[Telejano]]
|-
| [[TEI_TE_TRAILS]]                 || [[Telejano]]
|-
| [[TEI_THEMEFOLDER]]               || [[Telejano]]
|-
| [[TEI_TPAKLOAD]]                  || [[Telejano]]
|-
| [[TEI_ZONEFOGS]]                  || [[Telejano]]
|-
| [[TENEBRAE_GFX_DLIGHTS]]          || [[DarkPlaces]]
|-
| [[TIMESCALE]]                     ||
|-
| [[TQ_DLIGHTS]]                    || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_PLASMA]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAILTRAIL]]                  || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAIN]]                       || [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SLOWMO]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SNOW]]                       || [[FrikQuake]] [[Telejano]] [[TomazQuake]]
|-
| [[TW_SV_STEPCONTROLS]]            || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Twilight]]
|-
| [[UDC_EXTEFFECT]]                 ||
|-
| [[VEN_SCRIPT_PARTICLES]]          || [[Vengeance r2]]
|-
| [[ZQ_CLIENTCOMMAND]]              || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_INPUTBUTTONS]]               || [[ZQuake]]
|-
| [[ZQ_ITEMS2]]                     || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NOCLIP]] (QW)       || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_FLY]] (QW)          || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NONE]] (QW)         || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_PAUSE]]                      || [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_QC_PARTICLE]] (QW)           || [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_STRINGS]]                 || [[ezQuake]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_TOKENIZE]]                || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_SETINFO]]                    || [[ZQuake]]
|-
| [[ZQ_SOUNDTOCLIENT]]              || [[ZQuake]]
|-
| [[ZQ_VWEP]]                       || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
|}

===See Also===
* http://web.archive.org/web/*/http://www.quakesrc.org/registry.php</text>
      <sha1>lpuswptw7qufxe21kcd33s0wn492eks</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>510</id>
      <parentid>508</parentid>
      <timestamp>2008-02-29T11:32:11Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="21570">Thanks to a cooperative effort between [[QuakeSrc]], LordHavoc and Tomaz a variety of new engines support a Extension-Detection system called, for the purposes of this wiki, &quot;QSG Extensions&quot;. These are meant to be used by [[QuakeC]] modders to expand and make use of the new engine features without breaking compatability with other engines ([[Prydon Gate]] is a good example of how this can be done).

For more information on how to use these, read about the [[checkextension]] builtin.

QSG Extensions are a powerful method. Mods addapt to higher and lower profiles, and engine coders dont need to stop to add new features, and QuakeC modders dont need to stop using it. But doing in the right way, everybody can run mods.

Notes:

* [[DarkPlaces]] and [[TomazQuake]] support most of the old QSG keys. Actually this keys have the widen support betwen engines.
* [[Telejano]] adds a lot of new QSG keys, but most are undocumented.
* The new [[DarkPlaces]] builds add some new and very interesting keys.
* [[FTE QuakeWorld]] adds a whole new spon on things. Visit [How FTE is broken] for more information.
* You can deactivate normal features with QSG keys. Example: If you create a engine that not support centerprints. You can use QSG_NO_CENTERPRINT. If you mod its coded checking that centerprint, will run on your engine with no-centerprint and on engines with centerprint. Negative QSG keys are usefull to use Quake1 mods with other engines that can load progs.dat files, like [[FungusQC]].
* [[Builtin ranges]]

{|style=&quot;border:1px solid #000000&quot;
|-
|align=&quot;center&quot;| '''Name'''
|align=&quot;center&quot;| '''Supported by'''
|-
| [[BX_COLOREDTEXT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_CON_DEL]]                    || [[Betwix]]
|-
| [[BX_CON_EXT]]                    || [[Betwix]]
|-
| [[BX_CON_TEXREPLACE]]             || [[Betwix]]
|-
| [[BX_CON_VAR]]                    || [[Betwix]]
|-
| [[BX_CON_WRITECONFIG]]            || [[Betwix]]
|-
| [[BX_ENGINE]]                     || [[Betwix]]
|-
| [[BX_ENT_BOUNCESCALE]]            || [[Betwix]]
|-
| [[BX_ENT_FRICTION]]               || [[Betwix]]
|-
| [[BX_ENT_MODELFLAGS]]             || [[Betwix]]
|-
| [[BX_GFX_SKYBOX]]                 || [[Betwix]]
|-
| [[BX_GFX_SUN]]                    || [[Betwix]]
|-
| [[BX_INPUTBUTTONS]]               || [[Betwix]]
|-
| [[BX_MDLOVERRIDE]]                || [[Betwix]]
|-
| [[BX_MULTIPLEFONTS]]              || [[Betwix]]
|-
| [[BX_P_M_SUPPORT]]                || [[Betwix]]
|-
| [[BX_QC_CAMERA]]                  || [[Betwix]]
|-
| [[BX_QC_CHECKFOV]]                || [[Betwix]]
|-
| [[BX_QC_FINDFIELDCHAIN]]          || [[Betwix]]
|-
| [[BX_QC_GETDATETIME]]             || [[Betwix]]
|-
| [[BX_QC_INIFILE]]                 || [[Betwix]]
|-
| [[BX_QC_MSGREAD]]                 || [[Betwix]]
|-
| [[BX_QC_PROGPARMS]]               || [[Betwix]]
|-
| [[BX_QC_PROTOCOL_FLAGS]]          || [[Betwix]]
|-
| [[BX_QC_SOUNDTEAM]]               || [[Betwix]]
|-
| [[BX_QC_SPRINTF]]                 || [[Betwix]]
|-
| [[BX_QC_STR]]                     || [[Betwix]]
|-
| [[BX_QC_VECMATH]]                 || [[Betwix]]
|-
| [[BX_QC_VISIBLE]]                 || [[Betwix]]
|-
| [[BX_SERVERPROGS]]                || [[Betwix]]
|-
| [[BX_SND_MUSIC]]                  || [[Betwix]]
|-
| [[BX_SV_LOCKCVARCMD]]             || [[Betwix]]
|-
| [[BX_SV_PARSESAY]]                || [[Betwix]]
|-
| [[BX_SV_UPDATE_CLIENTCVARS]]      || [[Betwix]]
|-
| [[BX_WAL_SUPPORT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_WEAPONBOB]]                  || [[Betwix]]
|-
| [[DP_BUTTONCHAT]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_BUTTONUSE]]                  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_CGAME]]                      || [[DarkPlaces]]
|-
| [[DP_CL_LOADSKY]]                 || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[ToChriS]] [[Vengeance r2]]
|-
| [[DP_CON_ALIASPARAMETERS]]        || [[DarkPlaces]]
|-
| [[DP_CON_EXPANDCVAR]]             || [[DarkPlaces]]
|-
| [[DP_CON_SET]]                    || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]] [[ezQuake]] [[ZQuake]]
|-
| [[DP_CON_SETA]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_CON_STARTMAP]]               || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_ADDITIVE]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_BLUE]]                    || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_DOUBLESIDED]]             || [[DarkPlaces]]
|-
| [[DP_EF_FLAME]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_FULLBRIGHT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NODEPTHTEST]]             || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_NODRAW]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NOGUNBOB]]                || [[DarkPlaces]]
|-
| [[DP_EF_NOSHADOW]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_EF_RED]]                     || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_STARDUST]]                || [[DarkPlaces]]
|-
| [[DP_ENT_ALPHA]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_ENT_COLORMOD]]               || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_ENT_CUSTOMCOLORMAP]]         || [[DarkPlaces]]
|-
| [[DP_ENT_DELTACOMPRESS]]          ||
|-
| [[DP_ENT_EXTERIORMODELTOCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_ENT_GLOW]]                   || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_ENT_LOWPRECISION]]           || [[DarkPlaces]]
|-
| [[DP_ENT_SCALE]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]]
|-
| [[DP_ENT_VIEWMODEL]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_EXTERNALTEXTURES]]       || [[DarkPlaces]]
|-
| [[DP_GFX_EXTERNALTEXTURES_PERMAPTEXTURES]] || [[DarkPlaces]]
|-
| [[DP_GFX_FOG]]                    || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_GFX_QUAKE3MODELTAGS]]        || [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_SKINFILES]]              || [[DarkPlaces]]
|-
| [[DP_GFX_SKYBOX]]                 || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_HALFLIFE_MAP]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_MAP_CVAR]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FTE]] [[ZQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_SPRITE]]            || [[DarkPlaces]]
|-
| [[DP_INPUTBUTTONS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_LITSPRITES]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_LITSUPPORT]]                 || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_MD3_TAGSINFO]]               ||
|-
| [[DP_MONSTERWALK]]                || [[DarkPlaces]] [[FTE]] [[Telejano]] [[ZQuake]]
|-
| [[DP_MOVETYPEBOUNCEMISSILE]]      || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_MOVETYPEFOLLOW]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_QC_DP_QC_ASINACOSATANATAN2TAN]] || [[DarkPlaces]]
|-
| [[DP_QC_CHANGEPITCH]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_COPYENTITY]]              || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[Vengeance r2]]
|-
| [[DP_QC_CVAR_DEFSTRING]]          || [[DarkPlaces]]
|-
| [[DP_QC_CVAR_STRING]]             || [[Betwix]] [[DarkPlaces]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[DP_QC_ETOS]]                    || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_FINDCHAIN]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDCHAINFLAGS]]          || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDCHAINFLOAT]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDFLAGS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDFLOAT]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]] [[QMB]] [[FuhQuake]]
|-
| [[DP_QC_FS_SEARCH]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_GETLIGHT]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_QC_GETSURFACE]]              || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_QC_GETTAGINFO]]              || [[DarkPlaces]]
|-
| [[DP_QC_MINMAXBOUND]]             || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_MULTIPLETEMPSTRINGS]]     || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_RANDOMVEC]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[MVDSV]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_SINCOSSQRTPOW]]           || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_STRFTIME]]                || [[DarkPlaces]]
|-
| [[DP_QC_STRINGCOLORFUNCTIONS]]    || [[DarkPlaces]]
|-
| [[DP_QC_STRING_CASE_FUNCTIONS]]   || [[DarkPlaces]]
|-
| [[DP_QC_TOKENIZEBYSEPARATOR]]     || [[DarkPlaces]]
|-
| [[DP_QC_TRACE_MOVETYPE_HITMODEL]] || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]|| [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPES]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACEBOX]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[MVDSV]] [[QMB]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_QC_TRACETOSS]]               || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_UNLIMITEDTEMPSTRINGS]]    || [[DarkPlaces]]
|-
| [[DP_QC_VECTORVECTORS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_VECTOANGLES_WITH_ROLL]]   || [[DarkPlaces]]
|-
| [[DP_QUAKE2_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_QUAKE2_SPRITE]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MAP]]                 || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_REGISTERCVAR]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_SENSITIVITYSCALE]]           || [[Betwix]]
|-
| [[DP_SND_DIRECTIONLESSATTNNONE]]  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SND_FAKETRACKS]]             || [[DarkPlaces]]
|-
| [[DP_SND_OGGVORBIS]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SND_STEREOWAV]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SOLIDCORPSE]]                || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SPRITE32]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_SV_BOTCLIENT]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTCOLORS]]            || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTNAME]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CUSTOMIZEENTITYFORCLIENT]] || [[DarkPlaces]]
|-
| [[DP_SV_DRAWONLYTOCLIENT]]        || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_DRAWONLYTOTEAM]]          || [[Betwix]]
|-
| [[DP_SV_DROPCLIENT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_SV_EFFECT]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_ENTITYCONTENTSTRANSITION]] || [[DarkPlaces]]
|-
| [[DP_SV_EXTERIORMODELFORCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_NODRAWTOCLIENT]]          || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_PING]]                    || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_PLAYERPHYSICS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_POINTSOUND]]              || [[DarkPlaces]]
|-
| [[DP_SV_PRINT]]                   || [[DarkPlaces]]
|-
| [[DP_SV_PRECACHEANYTIME]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PUNCHVECTOR]]             || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_ROTATINGBMODEL]]          || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_SV_SETCOLOR]]                || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]]
|-
| [[DP_SV_SLOWMO]]                  || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SV_WRITEUNTERMINATEDSTRING]] || [[DarkPlaces]] [[ezQuake]] [[FTE]]
|-
| [[DP_TE_BLOOD]]                   || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_BLOODSHOWER]]             || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_CUSTOMFLASH]]             || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_EXPLOSIONRGB]]            || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_FLAMEJET]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLECUBE]]            || [[DarkPlaces]] [[QMB]]
|-
| [[DP_TE_PARTICLERAIN]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLESNOW]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PLASMABURN]]              || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_QUADEFFECTS1]]            || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_SMALLFLASH]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_SPARK]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_TE_STANDARDEFFECTBUILTINS]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_VIEWZOOM]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_WEAPONSKIN]]                 || [[Betwix]]
|-
| [[EXT_BITSHIFT]]                  || [[DarkPlaces]] [[Betwix]] [[FTE]]
|-
| [[EXT_CSQC]]                      || [[DarkPlaces]] [[FTE]]
|-
| [[EXT_DIMENSION_GHOST]]           || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_PHYSICS]]         || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_VISIBILITY]]      || [[Betwix]] [[FTE]]
|-
| [[FTE_CALLTIMEOFDAY]]             || [[Betwix]] [[MVDSV]] [[FTE]]
|-
| [[FTE_EXTENDEDTEXTCODES]]         || [[FTE]]
|-
| [[FTE_FORCEINFOKEY]]              || [[FTE]]
|-
| [[FTE_GFX_QUAKE3SHADERS]]         || [[FTE]]
|-
| [[FTE_HEXEN2]]                    || [[FTE]]
|-
| [[FTE_MEDIA_AVI]]                 || [[FTE]]
|-
| [[FTE_MEDIA_CIN]]                 || [[FTE]]
|-
| [[FTE_MEDIA_ROQ]]                 || [[FTE]]
|-
| [[FTE_MULTIPROGS]]                || [[FTE]]
|-
| [[FTE_MULTITHREADED]]             || [[FTE]]
|-
| [[FTE_MVD_PLAYBACK]]              || [[FTE]]
|-
| [[FTE_NPCCHAT]]                   || [[FTE]]
|-
| [[FTE_PEXT_BULLETENS]]            || [[FTE]]
|-
| [[FTE_PEXT_CUSTOMTENTS]]          || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL2]]           || [[FTE]]
|-
| [[FTE_PEXT_FATNESS]]              || [[FTE]]
|-
| [[FTE_PEXT_HULLSIZE]]             || [[FTE]]
|-
| [[FTE_PEXT_LIGHTSTYLECOL]]        || [[FTE]]
|-
| [[FTE_PEXT_LIGHTUPDATES]]         || [[FTE]]
|-
| [[FTE_PEXT_MODELDBL]]             || [[FTE]]
|-
| [[FTE_PEXT_ORIGINDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_Q2BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_Q3BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_SETVIEW]]              || [[FTE]]
|-
| [[FTE_PEXT_SPAWNSTATIC]]          || [[FTE]]
|-
| [[FTE_PEXT_TE_BULLET]]            || [[FTE]]
|-
| [[FTE_PEXT_VIEW2]]                || [[FTE]]
|-
| [[FTE_PEXT_VWEAP]]                || [[FTE]]
|-
| [[FTE_PEXT_ZLIBDL]]               || [[FTE]]
|-
| [[FTE_QC_CHECKPVS]]               || [[FTE]] [[ZQuake]]
|-
| [[FTE_QC_MATCHCLIENTNAME]]        || [[FTE]]
|-
| [[FTE_QC_PAUSED]]                 || [[FTE]]
|-
| [[FTE_QC_SENDPACKET]]             || [[FTE]]
|-
| [[FTE_QC_TRACETRIGGER]]           || [[FTE]]
|-
| [[FTE_SOLID_LADDER]]              || [[FTE]]
|-
| [[FTE_STRINGS]]                   || [[FTE]]
|-
| [[FTE_SV_REENTER]]                || [[FTE]]
|-
| [[FTE_TE_STANDARDEFFECTBUILTINS]] || [[FTE]]
|-
| [[FTE_VALID_VEC_HULL3]]           || [[FTE]]
|-
| [[FRIK_FILE]]                     || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[GQ]] [[Telejano]] [[Vengeance r2]]
|-
| [[KRIMZON_SV_PARSECLIENTCOMMAND]] || [[Betwix]] [[DarkPlaces]] [[FTE]] [[FuhQuake]]
|-
| [[NEH_CMD_PLAY2]]                 || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]]
|-
| [[NEH_RESTOREGAME]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[NEXUIZ_PLAYERMODEL]]            || [[DarkPlaces]]
|-
| [[NXQ_GFX_LETTERBOX]]             || [[DarkPlaces]]
|-
| [[PRYDON_CLIENTCURSOR]]           || [[DarkPlaces]]
|-
| [[QSG_FILE]]                      || [[FrikQuake]] [[Telejano]] [[ToChriS]]
|-
| [[QSG_DIMENSIONAL]]               ||
|-
| [[QSG_NO_CENTERPRINT]]            || [[FungusQC]]
|-
| [[QSG_NO_MDL]]                    || [[FungusQC]]
|-
| [[QSG_NO_NETCODE_Q1]]             || [[FungusQC]]
|-
| [[QW_ENGINE]]                     || [[FTE]]
|-
| [[QWE_MVD_RECORD]]                || [[FTE]]
|-
| [[TEI_AUTOANIMATION]]             || [[Telejano]]
|-
| [[TEI_AUTOFLUOR]]                 || [[Telejano]]
|-
| [[TEI_AUTOFOGWATER]]              || [[Telejano]]
|-
| [[TEI_AUTOFOOT]]                  || [[Telejano]]
|-
| [[TEI_AUTOLAVA]]                  || [[Telejano]]
|-
| [[TEI_AUTOLIGHTDAY]]              || [[Telejano]]
|-
| [[TEI_AUTORAIN]]                  || [[Telejano]]
|-
| [[TEI_AUTOSNOW]]                  || [[Telejano]]
|-
| [[TEI_AUTOVANISH]]                || [[Telejano]]
|-
| [[TEI_AUTOZING]]                  || [[Telejano]]
|-
| [[TEI_BOB2]]                      || [[Telejano]]
|-
| [[TEI_EF_EXTRA]]                  || [[Telejano]]
|-
| [[TEI_EF2_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_EF3_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_HUDMANAGER]]                || [[Telejano]]
|-
| [[TEI_LOCALMENUS1]]               || [[Telejano]]
|-
| [[TEI_LOCALMENUS2]]               || [[Telejano]]
|-
| [[TEI_MAPMODELS]]                 || [[Telejano]]
|-
| [[TEI_MD3_MODEL]]                 || [[FTE]] [[Telejano]]
|-
| [[TEI_MENU_MISC2]]                || [[Telejano]]
|-
| [[TEI_MOD_PROGS]]                 || [[Telejano]]
|-
| [[TEI_MODPREDATOR]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETIC]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETICFOLLOW]]         || [[Telejano]]
|-
| [[TEI_MOVRELATIVESTATIC]]         || [[Betwix]] [[Telejano]]
|-
| [[TEI_SHOWLMP2]]                  || [[FTE]] [[Telejano]]
|-
| [[TEI_SHOWLMP3]]                  || [[Telejano]]
|-
| [[TEI_STATCOUNT]]                 || [[Telejano]]
|-
| [[TEI_STATICFX]]                  || [[Telejano]]
|-
| [[TEI_STEPSIZE]]                  || [[Telejano]]
|-
| [[TEI_SUN]]                       || [[Telejano]]
|-
| [[TEI_SVSKY]]                     || [[Telejano]]
|-
| [[TEI_TE_ALIENEXPLOSION]]         || [[Telejano]]
|-
| [[TEI_TE_CUSTOMFX]]               || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL]]         || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL2]]        || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL3]]        || [[Telejano]]
|-
| [[TEI_TE_IMPLOSIONFX]]            || [[Telejano]]
|-
| [[TEI_TE_LIGHTNING4]]             || [[Telejano]]
|-
| [[TEI_TE_LIGHTNINGX]]             || [[Telejano]]
|-
| [[TEI_TE_PARTICLEBLAST]]          || [[Telejano]]
|-
| [[TEI_TE_STATICFOG]]              || [[Telejano]]
|-
| [[TEI_TE_TRAILS]]                 || [[Telejano]]
|-
| [[TEI_THEMEFOLDER]]               || [[Telejano]]
|-
| [[TEI_TPAKLOAD]]                  || [[Telejano]]
|-
| [[TEI_ZONEFOGS]]                  || [[Telejano]]
|-
| [[TENEBRAE_GFX_DLIGHTS]]          || [[DarkPlaces]]
|-
| [[TIMESCALE]]                     ||
|-
| [[TQ_DLIGHTS]]                    || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_PLASMA]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAILTRAIL]]                  || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAIN]]                       || [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SLOWMO]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SNOW]]                       || [[FrikQuake]] [[Telejano]] [[TomazQuake]]
|-
| [[TW_SV_STEPCONTROLS]]            || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Twilight]]
|-
| [[UDC_EXTEFFECT]]                 ||
|-
| [[VEN_SCRIPT_PARTICLES]]          || [[Vengeance r2]]
|-
| [[ZQ_CLIENTCOMMAND]]              || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_INPUTBUTTONS]]               || [[ZQuake]]
|-
| [[ZQ_ITEMS2]]                     || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NOCLIP]] (QW)       || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_FLY]] (QW)          || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NONE]] (QW)         || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_PAUSE]]                      || [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_QC_PARTICLE]] (QW)           || [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_STRINGS]]                 || [[ezQuake]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_TOKENIZE]]                || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_SETINFO]]                    || [[ZQuake]]
|-
| [[ZQ_SOUNDTOCLIENT]]              || [[ZQuake]]
|-
| [[ZQ_VWEP]]                       || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
|}

===See Also===
* http://web.archive.org/web/*/http://www.quakesrc.org/registry.php</text>
      <sha1>oalia7qc9nq7ol0svjfano1ea4rfn2l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>511</id>
      <parentid>510</parentid>
      <timestamp>2008-02-29T11:33:06Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="21627">Thanks to a cooperative effort between [[QuakeSrc]], LordHavoc and Tomaz a variety of new engines support a Extension-Detection system called, for the purposes of this wiki, &quot;QSG Extensions&quot;. These are meant to be used by [[QuakeC]] modders to expand and make use of the new engine features without breaking compatability with other engines ([[Prydon Gate]] is a good example of how this can be done).

For more information on how to use these, read about the [[checkextension]] builtin.

QSG Extensions are a powerful method. Mods addapt to higher and lower profiles, and engine coders dont need to stop to add new features, and QuakeC modders dont need to stop using it. But doing in the right way, everybody can run mods.

Notes:

* [[DarkPlaces]] and [[TomazQuake]] support most of the old QSG keys. Actually this keys have the widen support betwen engines.
* [[Telejano]] adds a lot of new QSG keys, but most are undocumented.
* The new [[DarkPlaces]] builds add some new and very interesting keys.
* [[FTE QuakeWorld]] adds a whole new spon on things. Visit [How FTE is broken] for more information.
* You can deactivate normal features with QSG keys. Example: If you create a engine that not support centerprints. You can use QSG_NO_CENTERPRINT. If you mod its coded checking that centerprint, will run on your engine with no-centerprint and on engines with centerprint. Negative QSG keys are usefull to use Quake1 mods with other engines that can load progs.dat files, like [[FungusQC]].
* [[Builtin ranges]]

{|style=&quot;border:1px solid #000000&quot;
|-
|align=&quot;center&quot;| '''Name'''
|align=&quot;center&quot;| '''Supported by'''
|-
| [[BX_COLOREDTEXT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_CON_DEL]]                    || [[Betwix]]
|-
| [[BX_CON_EXT]]                    || [[Betwix]]
|-
| [[BX_CON_TEXREPLACE]]             || [[Betwix]]
|-
| [[BX_CON_VAR]]                    || [[Betwix]]
|-
| [[BX_CON_WRITECONFIG]]            || [[Betwix]]
|-
| [[BX_ENGINE]]                     || [[Betwix]]
|-
| [[BX_ENT_BOUNCESCALE]]            || [[Betwix]]
|-
| [[BX_ENT_FRICTION]]               || [[Betwix]]
|-
| [[BX_ENT_MODELFLAGS]]             || [[Betwix]]
|-
| [[BX_GFX_SKYBOX]]                 || [[Betwix]]
|-
| [[BX_GFX_SUN]]                    || [[Betwix]]
|-
| [[BX_INPUTBUTTONS]]               || [[Betwix]]
|-
| [[BX_MDLOVERRIDE]]                || [[Betwix]]
|-
| [[BX_MULTIPLEFONTS]]              || [[Betwix]]
|-
| [[BX_P_M_SUPPORT]]                || [[Betwix]]
|-
| [[BX_QC_CAMERA]]                  || [[Betwix]]
|-
| [[BX_QC_CHECKFOV]]                || [[Betwix]]
|-
| [[BX_QC_FINDFIELDCHAIN]]          || [[Betwix]]
|-
| [[BX_QC_GETDATETIME]]             || [[Betwix]]
|-
| [[BX_QC_INIFILE]]                 || [[Betwix]]
|-
| [[BX_QC_MSGREAD]]                 || [[Betwix]]
|-
| [[BX_QC_PROGPARMS]]               || [[Betwix]]
|-
| [[BX_QC_PROTOCOL_FLAGS]]          || [[Betwix]]
|-
| [[BX_QC_SOUNDTEAM]]               || [[Betwix]]
|-
| [[BX_QC_SPRINTF]]                 || [[Betwix]]
|-
| [[BX_QC_STR]]                     || [[Betwix]]
|-
| [[BX_QC_VECMATH]]                 || [[Betwix]]
|-
| [[BX_QC_VISIBLE]]                 || [[Betwix]]
|-
| [[BX_SERVERPROGS]]                || [[Betwix]]
|-
| [[BX_SND_MUSIC]]                  || [[Betwix]]
|-
| [[BX_SV_LOCKCVARCMD]]             || [[Betwix]]
|-
| [[BX_SV_PARSESAY]]                || [[Betwix]]
|-
| [[BX_SV_UPDATE_CLIENTCVARS]]      || [[Betwix]]
|-
| [[BX_WAL_SUPPORT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_WEAPONBOB]]                  || [[Betwix]]
|-
| [[DP_BUTTONCHAT]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_BUTTONUSE]]                  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_CGAME]]                      || [[DarkPlaces]]
|-
| [[DP_CL_LOADSKY]]                 || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[ToChriS]] [[Vengeance r2]]
|-
| [[DP_CON_ALIASPARAMETERS]]        || [[DarkPlaces]]
|-
| [[DP_CON_EXPANDCVAR]]             || [[DarkPlaces]]
|-
| [[DP_CON_SET]]                    || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]] [[ezQuake]] [[ZQuake]]
|-
| [[DP_CON_SETA]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_CON_STARTMAP]]               || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_ADDITIVE]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_BLUE]]                    || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_DOUBLESIDED]]             || [[DarkPlaces]]
|-
| [[DP_EF_FLAME]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_FULLBRIGHT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NODEPTHTEST]]             || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_NODRAW]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NOGUNBOB]]                || [[DarkPlaces]]
|-
| [[DP_EF_NOSHADOW]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_EF_RED]]                     || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_STARDUST]]                || [[DarkPlaces]]
|-
| [[DP_ENT_ALPHA]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_ENT_COLORMOD]]               || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_ENT_CUSTOMCOLORMAP]]         || [[DarkPlaces]]
|-
| [[DP_ENT_DELTACOMPRESS]]          ||
|-
| [[DP_ENT_EXTERIORMODELTOCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_ENT_GLOW]]                   || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_ENT_LOWPRECISION]]           || [[DarkPlaces]]
|-
| [[DP_ENT_SCALE]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]]
|-
| [[DP_ENT_VIEWMODEL]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_EXTERNALTEXTURES]]       || [[DarkPlaces]]
|-
| [[DP_GFX_EXTERNALTEXTURES_PERMAPTEXTURES]] || [[DarkPlaces]]
|-
| [[DP_GFX_FOG]]                    || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_GFX_QUAKE3MODELTAGS]]        || [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_SKINFILES]]              || [[DarkPlaces]]
|-
| [[DP_GFX_SKYBOX]]                 || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_HALFLIFE_MAP]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_MAP_CVAR]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FTE]] [[ZQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_SPRITE]]            || [[DarkPlaces]]
|-
| [[DP_INPUTBUTTONS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_LITSPRITES]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_LITSUPPORT]]                 || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_MD3_TAGSINFO]]               ||
|-
| [[DP_MONSTERWALK]]                || [[DarkPlaces]] [[FTE]] [[Telejano]] [[ZQuake]]
|-
| [[DP_MOVETYPEBOUNCEMISSILE]]      || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_MOVETYPEFOLLOW]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_QC_DP_QC_ASINACOSATANATAN2TAN]] || [[DarkPlaces]]
|-
| [[DP_QC_CHANGEPITCH]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_COPYENTITY]]              || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[Vengeance r2]]
|-
| [[DP_QC_CVAR_DEFSTRING]]          || [[DarkPlaces]]
|-
| [[DP_QC_CVAR_STRING]]             || [[Betwix]] [[DarkPlaces]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[DP_QC_ETOS]]                    || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_FINDCHAIN]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDCHAINFLAGS]]          || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDCHAINFLOAT]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDFLAGS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDFLOAT]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]] [[QMB]] [[FuhQuake]]
|-
| [[DP_QC_FS_SEARCH]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_GETLIGHT]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_QC_GETSURFACE]]              || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_QC_GETTAGINFO]]              || [[DarkPlaces]]
|-
| [[DP_QC_MINMAXBOUND]]             || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_MULTIPLETEMPSTRINGS]]     || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_RANDOMVEC]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[MVDSV]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_SINCOSSQRTPOW]]           || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_STRFTIME]]                || [[DarkPlaces]]
|-
| [[DP_QC_STRINGCOLORFUNCTIONS]]    || [[DarkPlaces]]
|-
| [[DP_QC_STRING_CASE_FUNCTIONS]]   || [[DarkPlaces]]
|-
| [[DP_QC_TOKENIZEBYSEPARATOR]]     || [[DarkPlaces]]
|-
| [[DP_QC_TRACE_MOVETYPE_HITMODEL]] || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]|| [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPES]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACEBOX]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[MVDSV]] [[QMB]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_QC_TRACETOSS]]               || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_UNLIMITEDTEMPSTRINGS]]    || [[DarkPlaces]]
|-
| [[DP_QC_VECTORVECTORS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_VECTOANGLES_WITH_ROLL]]   || [[DarkPlaces]]
|-
| [[DP_QUAKE2_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_QUAKE2_SPRITE]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MAP]]                 || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_REGISTERCVAR]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_SENSITIVITYSCALE]]           || [[Betwix]]
|-
| [[DP_SND_DIRECTIONLESSATTNNONE]]  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SND_FAKETRACKS]]             || [[DarkPlaces]]
|-
| [[DP_SND_OGGVORBIS]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SND_STEREOWAV]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SOLIDCORPSE]]                || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SPRITE32]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_SV_BOTCLIENT]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTCOLORS]]            || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTNAME]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CUSTOMIZEENTITYFORCLIENT]] || [[DarkPlaces]]
|-
| [[DP_SV_DRAWONLYTOCLIENT]]        || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_DRAWONLYTOTEAM]]          || [[Betwix]]
|-
| [[DP_SV_DROPCLIENT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_SV_EFFECT]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_ENTITYCONTENTSTRANSITION]] || [[DarkPlaces]]
|-
| [[DP_SV_EXTERIORMODELFORCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_NODRAWTOCLIENT]]          || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_ONENTITYSPAWNFUNCTION]]   || [[DarkPlaces]]
|-
| [[DP_SV_PING]]                    || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_PLAYERPHYSICS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_POINTSOUND]]              || [[DarkPlaces]]
|-
| [[DP_SV_PRINT]]                   || [[DarkPlaces]]
|-
| [[DP_SV_PRECACHEANYTIME]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PUNCHVECTOR]]             || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_ROTATINGBMODEL]]          || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_SV_SETCOLOR]]                || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]]
|-
| [[DP_SV_SLOWMO]]                  || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SV_WRITEUNTERMINATEDSTRING]] || [[DarkPlaces]] [[ezQuake]] [[FTE]]
|-
| [[DP_TE_BLOOD]]                   || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_BLOODSHOWER]]             || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_CUSTOMFLASH]]             || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_EXPLOSIONRGB]]            || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_FLAMEJET]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLECUBE]]            || [[DarkPlaces]] [[QMB]]
|-
| [[DP_TE_PARTICLERAIN]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLESNOW]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PLASMABURN]]              || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_QUADEFFECTS1]]            || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_SMALLFLASH]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_SPARK]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_TE_STANDARDEFFECTBUILTINS]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_VIEWZOOM]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_WEAPONSKIN]]                 || [[Betwix]]
|-
| [[EXT_BITSHIFT]]                  || [[DarkPlaces]] [[Betwix]] [[FTE]]
|-
| [[EXT_CSQC]]                      || [[DarkPlaces]] [[FTE]]
|-
| [[EXT_DIMENSION_GHOST]]           || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_PHYSICS]]         || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_VISIBILITY]]      || [[Betwix]] [[FTE]]
|-
| [[FTE_CALLTIMEOFDAY]]             || [[Betwix]] [[MVDSV]] [[FTE]]
|-
| [[FTE_EXTENDEDTEXTCODES]]         || [[FTE]]
|-
| [[FTE_FORCEINFOKEY]]              || [[FTE]]
|-
| [[FTE_GFX_QUAKE3SHADERS]]         || [[FTE]]
|-
| [[FTE_HEXEN2]]                    || [[FTE]]
|-
| [[FTE_MEDIA_AVI]]                 || [[FTE]]
|-
| [[FTE_MEDIA_CIN]]                 || [[FTE]]
|-
| [[FTE_MEDIA_ROQ]]                 || [[FTE]]
|-
| [[FTE_MULTIPROGS]]                || [[FTE]]
|-
| [[FTE_MULTITHREADED]]             || [[FTE]]
|-
| [[FTE_MVD_PLAYBACK]]              || [[FTE]]
|-
| [[FTE_NPCCHAT]]                   || [[FTE]]
|-
| [[FTE_PEXT_BULLETENS]]            || [[FTE]]
|-
| [[FTE_PEXT_CUSTOMTENTS]]          || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL2]]           || [[FTE]]
|-
| [[FTE_PEXT_FATNESS]]              || [[FTE]]
|-
| [[FTE_PEXT_HULLSIZE]]             || [[FTE]]
|-
| [[FTE_PEXT_LIGHTSTYLECOL]]        || [[FTE]]
|-
| [[FTE_PEXT_LIGHTUPDATES]]         || [[FTE]]
|-
| [[FTE_PEXT_MODELDBL]]             || [[FTE]]
|-
| [[FTE_PEXT_ORIGINDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_Q2BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_Q3BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_SETVIEW]]              || [[FTE]]
|-
| [[FTE_PEXT_SPAWNSTATIC]]          || [[FTE]]
|-
| [[FTE_PEXT_TE_BULLET]]            || [[FTE]]
|-
| [[FTE_PEXT_VIEW2]]                || [[FTE]]
|-
| [[FTE_PEXT_VWEAP]]                || [[FTE]]
|-
| [[FTE_PEXT_ZLIBDL]]               || [[FTE]]
|-
| [[FTE_QC_CHECKPVS]]               || [[FTE]] [[ZQuake]]
|-
| [[FTE_QC_MATCHCLIENTNAME]]        || [[FTE]]
|-
| [[FTE_QC_PAUSED]]                 || [[FTE]]
|-
| [[FTE_QC_SENDPACKET]]             || [[FTE]]
|-
| [[FTE_QC_TRACETRIGGER]]           || [[FTE]]
|-
| [[FTE_SOLID_LADDER]]              || [[FTE]]
|-
| [[FTE_STRINGS]]                   || [[FTE]]
|-
| [[FTE_SV_REENTER]]                || [[FTE]]
|-
| [[FTE_TE_STANDARDEFFECTBUILTINS]] || [[FTE]]
|-
| [[FTE_VALID_VEC_HULL3]]           || [[FTE]]
|-
| [[FRIK_FILE]]                     || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[GQ]] [[Telejano]] [[Vengeance r2]]
|-
| [[KRIMZON_SV_PARSECLIENTCOMMAND]] || [[Betwix]] [[DarkPlaces]] [[FTE]] [[FuhQuake]]
|-
| [[NEH_CMD_PLAY2]]                 || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]]
|-
| [[NEH_RESTOREGAME]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[NEXUIZ_PLAYERMODEL]]            || [[DarkPlaces]]
|-
| [[NXQ_GFX_LETTERBOX]]             || [[DarkPlaces]]
|-
| [[PRYDON_CLIENTCURSOR]]           || [[DarkPlaces]]
|-
| [[QSG_FILE]]                      || [[FrikQuake]] [[Telejano]] [[ToChriS]]
|-
| [[QSG_DIMENSIONAL]]               ||
|-
| [[QSG_NO_CENTERPRINT]]            || [[FungusQC]]
|-
| [[QSG_NO_MDL]]                    || [[FungusQC]]
|-
| [[QSG_NO_NETCODE_Q1]]             || [[FungusQC]]
|-
| [[QW_ENGINE]]                     || [[FTE]]
|-
| [[QWE_MVD_RECORD]]                || [[FTE]]
|-
| [[TEI_AUTOANIMATION]]             || [[Telejano]]
|-
| [[TEI_AUTOFLUOR]]                 || [[Telejano]]
|-
| [[TEI_AUTOFOGWATER]]              || [[Telejano]]
|-
| [[TEI_AUTOFOOT]]                  || [[Telejano]]
|-
| [[TEI_AUTOLAVA]]                  || [[Telejano]]
|-
| [[TEI_AUTOLIGHTDAY]]              || [[Telejano]]
|-
| [[TEI_AUTORAIN]]                  || [[Telejano]]
|-
| [[TEI_AUTOSNOW]]                  || [[Telejano]]
|-
| [[TEI_AUTOVANISH]]                || [[Telejano]]
|-
| [[TEI_AUTOZING]]                  || [[Telejano]]
|-
| [[TEI_BOB2]]                      || [[Telejano]]
|-
| [[TEI_EF_EXTRA]]                  || [[Telejano]]
|-
| [[TEI_EF2_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_EF3_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_HUDMANAGER]]                || [[Telejano]]
|-
| [[TEI_LOCALMENUS1]]               || [[Telejano]]
|-
| [[TEI_LOCALMENUS2]]               || [[Telejano]]
|-
| [[TEI_MAPMODELS]]                 || [[Telejano]]
|-
| [[TEI_MD3_MODEL]]                 || [[FTE]] [[Telejano]]
|-
| [[TEI_MENU_MISC2]]                || [[Telejano]]
|-
| [[TEI_MOD_PROGS]]                 || [[Telejano]]
|-
| [[TEI_MODPREDATOR]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETIC]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETICFOLLOW]]         || [[Telejano]]
|-
| [[TEI_MOVRELATIVESTATIC]]         || [[Betwix]] [[Telejano]]
|-
| [[TEI_SHOWLMP2]]                  || [[FTE]] [[Telejano]]
|-
| [[TEI_SHOWLMP3]]                  || [[Telejano]]
|-
| [[TEI_STATCOUNT]]                 || [[Telejano]]
|-
| [[TEI_STATICFX]]                  || [[Telejano]]
|-
| [[TEI_STEPSIZE]]                  || [[Telejano]]
|-
| [[TEI_SUN]]                       || [[Telejano]]
|-
| [[TEI_SVSKY]]                     || [[Telejano]]
|-
| [[TEI_TE_ALIENEXPLOSION]]         || [[Telejano]]
|-
| [[TEI_TE_CUSTOMFX]]               || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL]]         || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL2]]        || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL3]]        || [[Telejano]]
|-
| [[TEI_TE_IMPLOSIONFX]]            || [[Telejano]]
|-
| [[TEI_TE_LIGHTNING4]]             || [[Telejano]]
|-
| [[TEI_TE_LIGHTNINGX]]             || [[Telejano]]
|-
| [[TEI_TE_PARTICLEBLAST]]          || [[Telejano]]
|-
| [[TEI_TE_STATICFOG]]              || [[Telejano]]
|-
| [[TEI_TE_TRAILS]]                 || [[Telejano]]
|-
| [[TEI_THEMEFOLDER]]               || [[Telejano]]
|-
| [[TEI_TPAKLOAD]]                  || [[Telejano]]
|-
| [[TEI_ZONEFOGS]]                  || [[Telejano]]
|-
| [[TENEBRAE_GFX_DLIGHTS]]          || [[DarkPlaces]]
|-
| [[TIMESCALE]]                     ||
|-
| [[TQ_DLIGHTS]]                    || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_PLASMA]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAILTRAIL]]                  || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAIN]]                       || [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SLOWMO]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SNOW]]                       || [[FrikQuake]] [[Telejano]] [[TomazQuake]]
|-
| [[TW_SV_STEPCONTROLS]]            || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Twilight]]
|-
| [[UDC_EXTEFFECT]]                 ||
|-
| [[VEN_SCRIPT_PARTICLES]]          || [[Vengeance r2]]
|-
| [[ZQ_CLIENTCOMMAND]]              || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_INPUTBUTTONS]]               || [[ZQuake]]
|-
| [[ZQ_ITEMS2]]                     || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NOCLIP]] (QW)       || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_FLY]] (QW)          || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NONE]] (QW)         || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_PAUSE]]                      || [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_QC_PARTICLE]] (QW)           || [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_STRINGS]]                 || [[ezQuake]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_TOKENIZE]]                || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_SETINFO]]                    || [[ZQuake]]
|-
| [[ZQ_SOUNDTOCLIENT]]              || [[ZQuake]]
|-
| [[ZQ_VWEP]]                       || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
|}

===See Also===
* http://web.archive.org/web/*/http://www.quakesrc.org/registry.php</text>
      <sha1>mend92l8qh21bfvumde1ggmz6hs7k15</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>512</id>
      <parentid>511</parentid>
      <timestamp>2008-02-29T11:33:28Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="21627">Thanks to a cooperative effort between [[QuakeSrc]], LordHavoc and Tomaz a variety of new engines support a Extension-Detection system called, for the purposes of this wiki, &quot;QSG Extensions&quot;. These are meant to be used by [[QuakeC]] modders to expand and make use of the new engine features without breaking compatability with other engines ([[Prydon Gate]] is a good example of how this can be done).

For more information on how to use these, read about the [[checkextension]] builtin.

QSG Extensions are a powerful method. Mods addapt to higher and lower profiles, and engine coders dont need to stop to add new features, and QuakeC modders dont need to stop using it. But doing in the right way, everybody can run mods.

Notes:

* [[DarkPlaces]] and [[TomazQuake]] support most of the old QSG keys. Actually this keys have the widen support betwen engines.
* [[Telejano]] adds a lot of new QSG keys, but most are undocumented.
* The new [[DarkPlaces]] builds add some new and very interesting keys.
* [[FTE QuakeWorld]] adds a whole new spon on things. Visit [How FTE is broken] for more information.
* You can deactivate normal features with QSG keys. Example: If you create a engine that not support centerprints. You can use QSG_NO_CENTERPRINT. If you mod its coded checking that centerprint, will run on your engine with no-centerprint and on engines with centerprint. Negative QSG keys are usefull to use Quake1 mods with other engines that can load progs.dat files, like [[FungusQC]].
* [[Builtin ranges]]

{|style=&quot;border:1px solid #000000&quot;
|-
|align=&quot;center&quot;| '''Name'''
|align=&quot;center&quot;| '''Supported by'''
|-
| [[BX_COLOREDTEXT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_CON_DEL]]                    || [[Betwix]]
|-
| [[BX_CON_EXT]]                    || [[Betwix]]
|-
| [[BX_CON_TEXREPLACE]]             || [[Betwix]]
|-
| [[BX_CON_VAR]]                    || [[Betwix]]
|-
| [[BX_CON_WRITECONFIG]]            || [[Betwix]]
|-
| [[BX_ENGINE]]                     || [[Betwix]]
|-
| [[BX_ENT_BOUNCESCALE]]            || [[Betwix]]
|-
| [[BX_ENT_FRICTION]]               || [[Betwix]]
|-
| [[BX_ENT_MODELFLAGS]]             || [[Betwix]]
|-
| [[BX_GFX_SKYBOX]]                 || [[Betwix]]
|-
| [[BX_GFX_SUN]]                    || [[Betwix]]
|-
| [[BX_INPUTBUTTONS]]               || [[Betwix]]
|-
| [[BX_MDLOVERRIDE]]                || [[Betwix]]
|-
| [[BX_MULTIPLEFONTS]]              || [[Betwix]]
|-
| [[BX_P_M_SUPPORT]]                || [[Betwix]]
|-
| [[BX_QC_CAMERA]]                  || [[Betwix]]
|-
| [[BX_QC_CHECKFOV]]                || [[Betwix]]
|-
| [[BX_QC_FINDFIELDCHAIN]]          || [[Betwix]]
|-
| [[BX_QC_GETDATETIME]]             || [[Betwix]]
|-
| [[BX_QC_INIFILE]]                 || [[Betwix]]
|-
| [[BX_QC_MSGREAD]]                 || [[Betwix]]
|-
| [[BX_QC_PROGPARMS]]               || [[Betwix]]
|-
| [[BX_QC_PROTOCOL_FLAGS]]          || [[Betwix]]
|-
| [[BX_QC_SOUNDTEAM]]               || [[Betwix]]
|-
| [[BX_QC_SPRINTF]]                 || [[Betwix]]
|-
| [[BX_QC_STR]]                     || [[Betwix]]
|-
| [[BX_QC_VECMATH]]                 || [[Betwix]]
|-
| [[BX_QC_VISIBLE]]                 || [[Betwix]]
|-
| [[BX_SERVERPROGS]]                || [[Betwix]]
|-
| [[BX_SND_MUSIC]]                  || [[Betwix]]
|-
| [[BX_SV_LOCKCVARCMD]]             || [[Betwix]]
|-
| [[BX_SV_PARSESAY]]                || [[Betwix]]
|-
| [[BX_SV_UPDATE_CLIENTCVARS]]      || [[Betwix]]
|-
| [[BX_WAL_SUPPORT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_WEAPONBOB]]                  || [[Betwix]]
|-
| [[DP_BUTTONCHAT]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_BUTTONUSE]]                  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_CGAME]]                      || [[DarkPlaces]]
|-
| [[DP_CL_LOADSKY]]                 || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[ToChriS]] [[Vengeance r2]]
|-
| [[DP_CON_ALIASPARAMETERS]]        || [[DarkPlaces]]
|-
| [[DP_CON_EXPANDCVAR]]             || [[DarkPlaces]]
|-
| [[DP_CON_SET]]                    || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]] [[ezQuake]] [[ZQuake]]
|-
| [[DP_CON_SETA]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_CON_STARTMAP]]               || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_ADDITIVE]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_BLUE]]                    || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_DOUBLESIDED]]             || [[DarkPlaces]]
|-
| [[DP_EF_FLAME]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_FULLBRIGHT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NODEPTHTEST]]             || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_NODRAW]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NOGUNBOB]]                || [[DarkPlaces]]
|-
| [[DP_EF_NOSHADOW]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_EF_RED]]                     || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_STARDUST]]                || [[DarkPlaces]]
|-
| [[DP_ENT_ALPHA]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_ENT_COLORMOD]]               || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_ENT_CUSTOMCOLORMAP]]         || [[DarkPlaces]]
|-
| [[DP_ENT_DELTACOMPRESS]]          ||
|-
| [[DP_ENT_EXTERIORMODELTOCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_ENT_GLOW]]                   || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_ENT_LOWPRECISION]]           || [[DarkPlaces]]
|-
| [[DP_ENT_SCALE]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]]
|-
| [[DP_ENT_VIEWMODEL]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_EXTERNALTEXTURES]]       || [[DarkPlaces]]
|-
| [[DP_GFX_EXTERNALTEXTURES_PERMAPTEXTURES]] || [[DarkPlaces]]
|-
| [[DP_GFX_FOG]]                    || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_GFX_QUAKE3MODELTAGS]]        || [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_SKINFILES]]              || [[DarkPlaces]]
|-
| [[DP_GFX_SKYBOX]]                 || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_HALFLIFE_MAP]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_MAP_CVAR]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FTE]] [[ZQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_SPRITE]]            || [[DarkPlaces]]
|-
| [[DP_INPUTBUTTONS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_LITSPRITES]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_LITSUPPORT]]                 || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_MD3_TAGSINFO]]               ||
|-
| [[DP_MONSTERWALK]]                || [[DarkPlaces]] [[FTE]] [[Telejano]] [[ZQuake]]
|-
| [[DP_MOVETYPEBOUNCEMISSILE]]      || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_MOVETYPEFOLLOW]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_QC_DP_QC_ASINACOSATANATAN2TAN]] || [[DarkPlaces]]
|-
| [[DP_QC_CHANGEPITCH]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_COPYENTITY]]              || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[Vengeance r2]]
|-
| [[DP_QC_CVAR_DEFSTRING]]          || [[DarkPlaces]]
|-
| [[DP_QC_CVAR_STRING]]             || [[Betwix]] [[DarkPlaces]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[DP_QC_ETOS]]                    || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_FINDCHAIN]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDCHAINFLAGS]]          || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDCHAINFLOAT]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDFLAGS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDFLOAT]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]] [[QMB]] [[FuhQuake]]
|-
| [[DP_QC_FS_SEARCH]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_GETLIGHT]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_QC_GETSURFACE]]              || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_QC_GETTAGINFO]]              || [[DarkPlaces]]
|-
| [[DP_QC_MINMAXBOUND]]             || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_MULTIPLETEMPSTRINGS]]     || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_RANDOMVEC]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[MVDSV]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_SINCOSSQRTPOW]]           || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_STRFTIME]]                || [[DarkPlaces]]
|-
| [[DP_QC_STRINGCOLORFUNCTIONS]]    || [[DarkPlaces]]
|-
| [[DP_QC_STRING_CASE_FUNCTIONS]]   || [[DarkPlaces]]
|-
| [[DP_QC_TOKENIZEBYSEPARATOR]]     || [[DarkPlaces]]
|-
| [[DP_QC_TRACE_MOVETYPE_HITMODEL]] || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]|| [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPES]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACEBOX]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[MVDSV]] [[QMB]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_QC_TRACETOSS]]               || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_UNLIMITEDTEMPSTRINGS]]    || [[DarkPlaces]]
|-
| [[DP_QC_VECTORVECTORS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_VECTOANGLES_WITH_ROLL]]   || [[DarkPlaces]]
|-
| [[DP_QUAKE2_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_QUAKE2_SPRITE]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MAP]]                 || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_REGISTERCVAR]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_SENSITIVITYSCALE]]           || [[Betwix]]
|-
| [[DP_SND_DIRECTIONLESSATTNNONE]]  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SND_FAKETRACKS]]             || [[DarkPlaces]]
|-
| [[DP_SND_OGGVORBIS]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SND_STEREOWAV]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SOLIDCORPSE]]                || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SPRITE32]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_SV_BOTCLIENT]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTCOLORS]]            || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTNAME]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CUSTOMIZEENTITYFORCLIENT]] || [[DarkPlaces]]
|-
| [[DP_SV_DRAWONLYTOCLIENT]]        || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_DRAWONLYTOTEAM]]          || [[Betwix]]
|-
| [[DP_SV_DROPCLIENT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_SV_EFFECT]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_ENTITYCONTENTSTRANSITION]] || [[DarkPlaces]]
|-
| [[DP_SV_EXTERIORMODELFORCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_NODRAWTOCLIENT]]          || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_ONENTITYNOSPAWNFUNCTION]] || [[DarkPlaces]]
|-
| [[DP_SV_PING]]                    || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_PLAYERPHYSICS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_POINTSOUND]]              || [[DarkPlaces]]
|-
| [[DP_SV_PRINT]]                   || [[DarkPlaces]]
|-
| [[DP_SV_PRECACHEANYTIME]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PUNCHVECTOR]]             || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_ROTATINGBMODEL]]          || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_SV_SETCOLOR]]                || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]]
|-
| [[DP_SV_SLOWMO]]                  || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SV_WRITEUNTERMINATEDSTRING]] || [[DarkPlaces]] [[ezQuake]] [[FTE]]
|-
| [[DP_TE_BLOOD]]                   || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_BLOODSHOWER]]             || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_CUSTOMFLASH]]             || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_EXPLOSIONRGB]]            || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_FLAMEJET]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLECUBE]]            || [[DarkPlaces]] [[QMB]]
|-
| [[DP_TE_PARTICLERAIN]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLESNOW]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PLASMABURN]]              || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_QUADEFFECTS1]]            || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_SMALLFLASH]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_SPARK]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_TE_STANDARDEFFECTBUILTINS]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_VIEWZOOM]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_WEAPONSKIN]]                 || [[Betwix]]
|-
| [[EXT_BITSHIFT]]                  || [[DarkPlaces]] [[Betwix]] [[FTE]]
|-
| [[EXT_CSQC]]                      || [[DarkPlaces]] [[FTE]]
|-
| [[EXT_DIMENSION_GHOST]]           || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_PHYSICS]]         || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_VISIBILITY]]      || [[Betwix]] [[FTE]]
|-
| [[FTE_CALLTIMEOFDAY]]             || [[Betwix]] [[MVDSV]] [[FTE]]
|-
| [[FTE_EXTENDEDTEXTCODES]]         || [[FTE]]
|-
| [[FTE_FORCEINFOKEY]]              || [[FTE]]
|-
| [[FTE_GFX_QUAKE3SHADERS]]         || [[FTE]]
|-
| [[FTE_HEXEN2]]                    || [[FTE]]
|-
| [[FTE_MEDIA_AVI]]                 || [[FTE]]
|-
| [[FTE_MEDIA_CIN]]                 || [[FTE]]
|-
| [[FTE_MEDIA_ROQ]]                 || [[FTE]]
|-
| [[FTE_MULTIPROGS]]                || [[FTE]]
|-
| [[FTE_MULTITHREADED]]             || [[FTE]]
|-
| [[FTE_MVD_PLAYBACK]]              || [[FTE]]
|-
| [[FTE_NPCCHAT]]                   || [[FTE]]
|-
| [[FTE_PEXT_BULLETENS]]            || [[FTE]]
|-
| [[FTE_PEXT_CUSTOMTENTS]]          || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL2]]           || [[FTE]]
|-
| [[FTE_PEXT_FATNESS]]              || [[FTE]]
|-
| [[FTE_PEXT_HULLSIZE]]             || [[FTE]]
|-
| [[FTE_PEXT_LIGHTSTYLECOL]]        || [[FTE]]
|-
| [[FTE_PEXT_LIGHTUPDATES]]         || [[FTE]]
|-
| [[FTE_PEXT_MODELDBL]]             || [[FTE]]
|-
| [[FTE_PEXT_ORIGINDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_Q2BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_Q3BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_SETVIEW]]              || [[FTE]]
|-
| [[FTE_PEXT_SPAWNSTATIC]]          || [[FTE]]
|-
| [[FTE_PEXT_TE_BULLET]]            || [[FTE]]
|-
| [[FTE_PEXT_VIEW2]]                || [[FTE]]
|-
| [[FTE_PEXT_VWEAP]]                || [[FTE]]
|-
| [[FTE_PEXT_ZLIBDL]]               || [[FTE]]
|-
| [[FTE_QC_CHECKPVS]]               || [[FTE]] [[ZQuake]]
|-
| [[FTE_QC_MATCHCLIENTNAME]]        || [[FTE]]
|-
| [[FTE_QC_PAUSED]]                 || [[FTE]]
|-
| [[FTE_QC_SENDPACKET]]             || [[FTE]]
|-
| [[FTE_QC_TRACETRIGGER]]           || [[FTE]]
|-
| [[FTE_SOLID_LADDER]]              || [[FTE]]
|-
| [[FTE_STRINGS]]                   || [[FTE]]
|-
| [[FTE_SV_REENTER]]                || [[FTE]]
|-
| [[FTE_TE_STANDARDEFFECTBUILTINS]] || [[FTE]]
|-
| [[FTE_VALID_VEC_HULL3]]           || [[FTE]]
|-
| [[FRIK_FILE]]                     || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[GQ]] [[Telejano]] [[Vengeance r2]]
|-
| [[KRIMZON_SV_PARSECLIENTCOMMAND]] || [[Betwix]] [[DarkPlaces]] [[FTE]] [[FuhQuake]]
|-
| [[NEH_CMD_PLAY2]]                 || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]]
|-
| [[NEH_RESTOREGAME]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[NEXUIZ_PLAYERMODEL]]            || [[DarkPlaces]]
|-
| [[NXQ_GFX_LETTERBOX]]             || [[DarkPlaces]]
|-
| [[PRYDON_CLIENTCURSOR]]           || [[DarkPlaces]]
|-
| [[QSG_FILE]]                      || [[FrikQuake]] [[Telejano]] [[ToChriS]]
|-
| [[QSG_DIMENSIONAL]]               ||
|-
| [[QSG_NO_CENTERPRINT]]            || [[FungusQC]]
|-
| [[QSG_NO_MDL]]                    || [[FungusQC]]
|-
| [[QSG_NO_NETCODE_Q1]]             || [[FungusQC]]
|-
| [[QW_ENGINE]]                     || [[FTE]]
|-
| [[QWE_MVD_RECORD]]                || [[FTE]]
|-
| [[TEI_AUTOANIMATION]]             || [[Telejano]]
|-
| [[TEI_AUTOFLUOR]]                 || [[Telejano]]
|-
| [[TEI_AUTOFOGWATER]]              || [[Telejano]]
|-
| [[TEI_AUTOFOOT]]                  || [[Telejano]]
|-
| [[TEI_AUTOLAVA]]                  || [[Telejano]]
|-
| [[TEI_AUTOLIGHTDAY]]              || [[Telejano]]
|-
| [[TEI_AUTORAIN]]                  || [[Telejano]]
|-
| [[TEI_AUTOSNOW]]                  || [[Telejano]]
|-
| [[TEI_AUTOVANISH]]                || [[Telejano]]
|-
| [[TEI_AUTOZING]]                  || [[Telejano]]
|-
| [[TEI_BOB2]]                      || [[Telejano]]
|-
| [[TEI_EF_EXTRA]]                  || [[Telejano]]
|-
| [[TEI_EF2_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_EF3_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_HUDMANAGER]]                || [[Telejano]]
|-
| [[TEI_LOCALMENUS1]]               || [[Telejano]]
|-
| [[TEI_LOCALMENUS2]]               || [[Telejano]]
|-
| [[TEI_MAPMODELS]]                 || [[Telejano]]
|-
| [[TEI_MD3_MODEL]]                 || [[FTE]] [[Telejano]]
|-
| [[TEI_MENU_MISC2]]                || [[Telejano]]
|-
| [[TEI_MOD_PROGS]]                 || [[Telejano]]
|-
| [[TEI_MODPREDATOR]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETIC]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETICFOLLOW]]         || [[Telejano]]
|-
| [[TEI_MOVRELATIVESTATIC]]         || [[Betwix]] [[Telejano]]
|-
| [[TEI_SHOWLMP2]]                  || [[FTE]] [[Telejano]]
|-
| [[TEI_SHOWLMP3]]                  || [[Telejano]]
|-
| [[TEI_STATCOUNT]]                 || [[Telejano]]
|-
| [[TEI_STATICFX]]                  || [[Telejano]]
|-
| [[TEI_STEPSIZE]]                  || [[Telejano]]
|-
| [[TEI_SUN]]                       || [[Telejano]]
|-
| [[TEI_SVSKY]]                     || [[Telejano]]
|-
| [[TEI_TE_ALIENEXPLOSION]]         || [[Telejano]]
|-
| [[TEI_TE_CUSTOMFX]]               || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL]]         || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL2]]        || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL3]]        || [[Telejano]]
|-
| [[TEI_TE_IMPLOSIONFX]]            || [[Telejano]]
|-
| [[TEI_TE_LIGHTNING4]]             || [[Telejano]]
|-
| [[TEI_TE_LIGHTNINGX]]             || [[Telejano]]
|-
| [[TEI_TE_PARTICLEBLAST]]          || [[Telejano]]
|-
| [[TEI_TE_STATICFOG]]              || [[Telejano]]
|-
| [[TEI_TE_TRAILS]]                 || [[Telejano]]
|-
| [[TEI_THEMEFOLDER]]               || [[Telejano]]
|-
| [[TEI_TPAKLOAD]]                  || [[Telejano]]
|-
| [[TEI_ZONEFOGS]]                  || [[Telejano]]
|-
| [[TENEBRAE_GFX_DLIGHTS]]          || [[DarkPlaces]]
|-
| [[TIMESCALE]]                     ||
|-
| [[TQ_DLIGHTS]]                    || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_PLASMA]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAILTRAIL]]                  || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAIN]]                       || [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SLOWMO]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SNOW]]                       || [[FrikQuake]] [[Telejano]] [[TomazQuake]]
|-
| [[TW_SV_STEPCONTROLS]]            || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Twilight]]
|-
| [[UDC_EXTEFFECT]]                 ||
|-
| [[VEN_SCRIPT_PARTICLES]]          || [[Vengeance r2]]
|-
| [[ZQ_CLIENTCOMMAND]]              || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_INPUTBUTTONS]]               || [[ZQuake]]
|-
| [[ZQ_ITEMS2]]                     || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NOCLIP]] (QW)       || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_FLY]] (QW)          || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NONE]] (QW)         || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_PAUSE]]                      || [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_QC_PARTICLE]] (QW)           || [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_STRINGS]]                 || [[ezQuake]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_TOKENIZE]]                || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_SETINFO]]                    || [[ZQuake]]
|-
| [[ZQ_SOUNDTOCLIENT]]              || [[ZQuake]]
|-
| [[ZQ_VWEP]]                       || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
|}

===See Also===
* http://web.archive.org/web/*/http://www.quakesrc.org/registry.php</text>
      <sha1>520fjh9ekzd5ha4rqtymq5a5yjsi6d4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>513</id>
      <parentid>512</parentid>
      <timestamp>2008-02-29T11:34:11Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="21684">Thanks to a cooperative effort between [[QuakeSrc]], LordHavoc and Tomaz a variety of new engines support a Extension-Detection system called, for the purposes of this wiki, &quot;QSG Extensions&quot;. These are meant to be used by [[QuakeC]] modders to expand and make use of the new engine features without breaking compatability with other engines ([[Prydon Gate]] is a good example of how this can be done).

For more information on how to use these, read about the [[checkextension]] builtin.

QSG Extensions are a powerful method. Mods addapt to higher and lower profiles, and engine coders dont need to stop to add new features, and QuakeC modders dont need to stop using it. But doing in the right way, everybody can run mods.

Notes:

* [[DarkPlaces]] and [[TomazQuake]] support most of the old QSG keys. Actually this keys have the widen support betwen engines.
* [[Telejano]] adds a lot of new QSG keys, but most are undocumented.
* The new [[DarkPlaces]] builds add some new and very interesting keys.
* [[FTE QuakeWorld]] adds a whole new spon on things. Visit [How FTE is broken] for more information.
* You can deactivate normal features with QSG keys. Example: If you create a engine that not support centerprints. You can use QSG_NO_CENTERPRINT. If you mod its coded checking that centerprint, will run on your engine with no-centerprint and on engines with centerprint. Negative QSG keys are usefull to use Quake1 mods with other engines that can load progs.dat files, like [[FungusQC]].
* [[Builtin ranges]]

{|style=&quot;border:1px solid #000000&quot;
|-
|align=&quot;center&quot;| '''Name'''
|align=&quot;center&quot;| '''Supported by'''
|-
| [[BX_COLOREDTEXT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_CON_DEL]]                    || [[Betwix]]
|-
| [[BX_CON_EXT]]                    || [[Betwix]]
|-
| [[BX_CON_TEXREPLACE]]             || [[Betwix]]
|-
| [[BX_CON_VAR]]                    || [[Betwix]]
|-
| [[BX_CON_WRITECONFIG]]            || [[Betwix]]
|-
| [[BX_ENGINE]]                     || [[Betwix]]
|-
| [[BX_ENT_BOUNCESCALE]]            || [[Betwix]]
|-
| [[BX_ENT_FRICTION]]               || [[Betwix]]
|-
| [[BX_ENT_MODELFLAGS]]             || [[Betwix]]
|-
| [[BX_GFX_SKYBOX]]                 || [[Betwix]]
|-
| [[BX_GFX_SUN]]                    || [[Betwix]]
|-
| [[BX_INPUTBUTTONS]]               || [[Betwix]]
|-
| [[BX_MDLOVERRIDE]]                || [[Betwix]]
|-
| [[BX_MULTIPLEFONTS]]              || [[Betwix]]
|-
| [[BX_P_M_SUPPORT]]                || [[Betwix]]
|-
| [[BX_QC_CAMERA]]                  || [[Betwix]]
|-
| [[BX_QC_CHECKFOV]]                || [[Betwix]]
|-
| [[BX_QC_FINDFIELDCHAIN]]          || [[Betwix]]
|-
| [[BX_QC_GETDATETIME]]             || [[Betwix]]
|-
| [[BX_QC_INIFILE]]                 || [[Betwix]]
|-
| [[BX_QC_MSGREAD]]                 || [[Betwix]]
|-
| [[BX_QC_PROGPARMS]]               || [[Betwix]]
|-
| [[BX_QC_PROTOCOL_FLAGS]]          || [[Betwix]]
|-
| [[BX_QC_SOUNDTEAM]]               || [[Betwix]]
|-
| [[BX_QC_SPRINTF]]                 || [[Betwix]]
|-
| [[BX_QC_STR]]                     || [[Betwix]]
|-
| [[BX_QC_VECMATH]]                 || [[Betwix]]
|-
| [[BX_QC_VISIBLE]]                 || [[Betwix]]
|-
| [[BX_SERVERPROGS]]                || [[Betwix]]
|-
| [[BX_SND_MUSIC]]                  || [[Betwix]]
|-
| [[BX_SV_LOCKCVARCMD]]             || [[Betwix]]
|-
| [[BX_SV_PARSESAY]]                || [[Betwix]]
|-
| [[BX_SV_UPDATE_CLIENTCVARS]]      || [[Betwix]]
|-
| [[BX_WAL_SUPPORT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_WEAPONBOB]]                  || [[Betwix]]
|-
| [[DP_BUTTONCHAT]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_BUTTONUSE]]                  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_CGAME]]                      || [[DarkPlaces]]
|-
| [[DP_CL_LOADSKY]]                 || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[ToChriS]] [[Vengeance r2]]
|-
| [[DP_CON_ALIASPARAMETERS]]        || [[DarkPlaces]]
|-
| [[DP_CON_EXPANDCVAR]]             || [[DarkPlaces]]
|-
| [[DP_CON_SET]]                    || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]] [[ezQuake]] [[ZQuake]]
|-
| [[DP_CON_SETA]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_CON_STARTMAP]]               || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_ADDITIVE]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_BLUE]]                    || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_DOUBLESIDED]]             || [[DarkPlaces]]
|-
| [[DP_EF_FLAME]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_FULLBRIGHT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NODEPTHTEST]]             || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_NODRAW]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NOGUNBOB]]                || [[DarkPlaces]]
|-
| [[DP_EF_NOSHADOW]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_EF_RED]]                     || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_STARDUST]]                || [[DarkPlaces]]
|-
| [[DP_ENT_ALPHA]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_ENT_COLORMOD]]               || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_ENT_CUSTOMCOLORMAP]]         || [[DarkPlaces]]
|-
| [[DP_ENT_DELTACOMPRESS]]          ||
|-
| [[DP_ENT_EXTERIORMODELTOCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_ENT_GLOW]]                   || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_ENT_LOWPRECISION]]           || [[DarkPlaces]]
|-
| [[DP_ENT_SCALE]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]]
|-
| [[DP_ENT_VIEWMODEL]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_EXTERNALTEXTURES]]       || [[DarkPlaces]]
|-
| [[DP_GFX_EXTERNALTEXTURES_PERMAPTEXTURES]] || [[DarkPlaces]]
|-
| [[DP_GFX_FOG]]                    || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_GFX_QUAKE3MODELTAGS]]        || [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_SKINFILES]]              || [[DarkPlaces]]
|-
| [[DP_GFX_SKYBOX]]                 || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_HALFLIFE_MAP]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_MAP_CVAR]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FTE]] [[ZQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_SPRITE]]            || [[DarkPlaces]]
|-
| [[DP_INPUTBUTTONS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_LITSPRITES]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_LITSUPPORT]]                 || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_MD3_TAGSINFO]]               ||
|-
| [[DP_MONSTERWALK]]                || [[DarkPlaces]] [[FTE]] [[Telejano]] [[ZQuake]]
|-
| [[DP_MOVETYPEBOUNCEMISSILE]]      || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_MOVETYPEFOLLOW]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_QC_DP_QC_ASINACOSATANATAN2TAN]] || [[DarkPlaces]]
|-
| [[DP_QC_CHANGEPITCH]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_COPYENTITY]]              || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[Vengeance r2]]
|-
| [[DP_QC_CVAR_DEFSTRING]]          || [[DarkPlaces]]
|-
| [[DP_QC_CVAR_STRING]]             || [[Betwix]] [[DarkPlaces]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[DP_QC_ETOS]]                    || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_FINDCHAIN]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDCHAINFLAGS]]          || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDCHAINFLOAT]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDFLAGS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDFLOAT]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]] [[QMB]] [[FuhQuake]]
|-
| [[DP_QC_FS_SEARCH]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_GETLIGHT]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_QC_GETSURFACE]]              || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_QC_GETTAGINFO]]              || [[DarkPlaces]]
|-
| [[DP_QC_MINMAXBOUND]]             || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_MULTIPLETEMPSTRINGS]]     || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_RANDOMVEC]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[MVDSV]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_SINCOSSQRTPOW]]           || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_STRFTIME]]                || [[DarkPlaces]]
|-
| [[DP_QC_STRINGCOLORFUNCTIONS]]    || [[DarkPlaces]]
|-
| [[DP_QC_STRING_CASE_FUNCTIONS]]   || [[DarkPlaces]]
|-
| [[DP_QC_TOKENIZEBYSEPARATOR]]     || [[DarkPlaces]]
|-
| [[DP_QC_TRACE_MOVETYPE_HITMODEL]] || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]|| [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPES]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACEBOX]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[MVDSV]] [[QMB]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_QC_TRACETOSS]]               || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_UNLIMITEDTEMPSTRINGS]]    || [[DarkPlaces]]
|-
| [[DP_QC_VECTORVECTORS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_VECTOANGLES_WITH_ROLL]]   || [[DarkPlaces]]
|-
| [[DP_QUAKE2_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_QUAKE2_SPRITE]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MAP]]                 || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_REGISTERCVAR]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_SENSITIVITYSCALE]]           || [[Betwix]]
|-
| [[DP_SND_DIRECTIONLESSATTNNONE]]  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SND_FAKETRACKS]]             || [[DarkPlaces]]
|-
| [[DP_SND_OGGVORBIS]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SND_STEREOWAV]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SOLIDCORPSE]]                || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SPRITE32]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_SV_BOTCLIENT]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTCOLORS]]            || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTNAME]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CUSTOMIZEENTITYFORCLIENT]] || [[DarkPlaces]]
|-
| [[DP_SV_DRAWONLYTOCLIENT]]        || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_DRAWONLYTOTEAM]]          || [[Betwix]]
|-
| [[DP_SV_DROPCLIENT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_SV_EFFECT]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_ENTITYCONTENTSTRANSITION]] || [[DarkPlaces]]
|-
| [[DP_SV_EXTERIORMODELFORCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_MODELFLAGS_AS_EFFECTS]]   || [[DarkPlaces]]
|-
| [[DP_SV_NODRAWTOCLIENT]]          || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_ONENTITYNOSPAWNFUNCTION]] || [[DarkPlaces]]
|-
| [[DP_SV_PING]]                    || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_PLAYERPHYSICS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_POINTSOUND]]              || [[DarkPlaces]]
|-
| [[DP_SV_PRINT]]                   || [[DarkPlaces]]
|-
| [[DP_SV_PRECACHEANYTIME]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PUNCHVECTOR]]             || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_ROTATINGBMODEL]]          || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_SV_SETCOLOR]]                || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]]
|-
| [[DP_SV_SLOWMO]]                  || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SV_WRITEUNTERMINATEDSTRING]] || [[DarkPlaces]] [[ezQuake]] [[FTE]]
|-
| [[DP_TE_BLOOD]]                   || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_BLOODSHOWER]]             || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_CUSTOMFLASH]]             || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_EXPLOSIONRGB]]            || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_FLAMEJET]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLECUBE]]            || [[DarkPlaces]] [[QMB]]
|-
| [[DP_TE_PARTICLERAIN]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLESNOW]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PLASMABURN]]              || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_QUADEFFECTS1]]            || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_SMALLFLASH]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_SPARK]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_TE_STANDARDEFFECTBUILTINS]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_VIEWZOOM]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_WEAPONSKIN]]                 || [[Betwix]]
|-
| [[EXT_BITSHIFT]]                  || [[DarkPlaces]] [[Betwix]] [[FTE]]
|-
| [[EXT_CSQC]]                      || [[DarkPlaces]] [[FTE]]
|-
| [[EXT_DIMENSION_GHOST]]           || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_PHYSICS]]         || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_VISIBILITY]]      || [[Betwix]] [[FTE]]
|-
| [[FTE_CALLTIMEOFDAY]]             || [[Betwix]] [[MVDSV]] [[FTE]]
|-
| [[FTE_EXTENDEDTEXTCODES]]         || [[FTE]]
|-
| [[FTE_FORCEINFOKEY]]              || [[FTE]]
|-
| [[FTE_GFX_QUAKE3SHADERS]]         || [[FTE]]
|-
| [[FTE_HEXEN2]]                    || [[FTE]]
|-
| [[FTE_MEDIA_AVI]]                 || [[FTE]]
|-
| [[FTE_MEDIA_CIN]]                 || [[FTE]]
|-
| [[FTE_MEDIA_ROQ]]                 || [[FTE]]
|-
| [[FTE_MULTIPROGS]]                || [[FTE]]
|-
| [[FTE_MULTITHREADED]]             || [[FTE]]
|-
| [[FTE_MVD_PLAYBACK]]              || [[FTE]]
|-
| [[FTE_NPCCHAT]]                   || [[FTE]]
|-
| [[FTE_PEXT_BULLETENS]]            || [[FTE]]
|-
| [[FTE_PEXT_CUSTOMTENTS]]          || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL2]]           || [[FTE]]
|-
| [[FTE_PEXT_FATNESS]]              || [[FTE]]
|-
| [[FTE_PEXT_HULLSIZE]]             || [[FTE]]
|-
| [[FTE_PEXT_LIGHTSTYLECOL]]        || [[FTE]]
|-
| [[FTE_PEXT_LIGHTUPDATES]]         || [[FTE]]
|-
| [[FTE_PEXT_MODELDBL]]             || [[FTE]]
|-
| [[FTE_PEXT_ORIGINDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_Q2BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_Q3BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_SETVIEW]]              || [[FTE]]
|-
| [[FTE_PEXT_SPAWNSTATIC]]          || [[FTE]]
|-
| [[FTE_PEXT_TE_BULLET]]            || [[FTE]]
|-
| [[FTE_PEXT_VIEW2]]                || [[FTE]]
|-
| [[FTE_PEXT_VWEAP]]                || [[FTE]]
|-
| [[FTE_PEXT_ZLIBDL]]               || [[FTE]]
|-
| [[FTE_QC_CHECKPVS]]               || [[FTE]] [[ZQuake]]
|-
| [[FTE_QC_MATCHCLIENTNAME]]        || [[FTE]]
|-
| [[FTE_QC_PAUSED]]                 || [[FTE]]
|-
| [[FTE_QC_SENDPACKET]]             || [[FTE]]
|-
| [[FTE_QC_TRACETRIGGER]]           || [[FTE]]
|-
| [[FTE_SOLID_LADDER]]              || [[FTE]]
|-
| [[FTE_STRINGS]]                   || [[FTE]]
|-
| [[FTE_SV_REENTER]]                || [[FTE]]
|-
| [[FTE_TE_STANDARDEFFECTBUILTINS]] || [[FTE]]
|-
| [[FTE_VALID_VEC_HULL3]]           || [[FTE]]
|-
| [[FRIK_FILE]]                     || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[GQ]] [[Telejano]] [[Vengeance r2]]
|-
| [[KRIMZON_SV_PARSECLIENTCOMMAND]] || [[Betwix]] [[DarkPlaces]] [[FTE]] [[FuhQuake]]
|-
| [[NEH_CMD_PLAY2]]                 || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]]
|-
| [[NEH_RESTOREGAME]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[NEXUIZ_PLAYERMODEL]]            || [[DarkPlaces]]
|-
| [[NXQ_GFX_LETTERBOX]]             || [[DarkPlaces]]
|-
| [[PRYDON_CLIENTCURSOR]]           || [[DarkPlaces]]
|-
| [[QSG_FILE]]                      || [[FrikQuake]] [[Telejano]] [[ToChriS]]
|-
| [[QSG_DIMENSIONAL]]               ||
|-
| [[QSG_NO_CENTERPRINT]]            || [[FungusQC]]
|-
| [[QSG_NO_MDL]]                    || [[FungusQC]]
|-
| [[QSG_NO_NETCODE_Q1]]             || [[FungusQC]]
|-
| [[QW_ENGINE]]                     || [[FTE]]
|-
| [[QWE_MVD_RECORD]]                || [[FTE]]
|-
| [[TEI_AUTOANIMATION]]             || [[Telejano]]
|-
| [[TEI_AUTOFLUOR]]                 || [[Telejano]]
|-
| [[TEI_AUTOFOGWATER]]              || [[Telejano]]
|-
| [[TEI_AUTOFOOT]]                  || [[Telejano]]
|-
| [[TEI_AUTOLAVA]]                  || [[Telejano]]
|-
| [[TEI_AUTOLIGHTDAY]]              || [[Telejano]]
|-
| [[TEI_AUTORAIN]]                  || [[Telejano]]
|-
| [[TEI_AUTOSNOW]]                  || [[Telejano]]
|-
| [[TEI_AUTOVANISH]]                || [[Telejano]]
|-
| [[TEI_AUTOZING]]                  || [[Telejano]]
|-
| [[TEI_BOB2]]                      || [[Telejano]]
|-
| [[TEI_EF_EXTRA]]                  || [[Telejano]]
|-
| [[TEI_EF2_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_EF3_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_HUDMANAGER]]                || [[Telejano]]
|-
| [[TEI_LOCALMENUS1]]               || [[Telejano]]
|-
| [[TEI_LOCALMENUS2]]               || [[Telejano]]
|-
| [[TEI_MAPMODELS]]                 || [[Telejano]]
|-
| [[TEI_MD3_MODEL]]                 || [[FTE]] [[Telejano]]
|-
| [[TEI_MENU_MISC2]]                || [[Telejano]]
|-
| [[TEI_MOD_PROGS]]                 || [[Telejano]]
|-
| [[TEI_MODPREDATOR]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETIC]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETICFOLLOW]]         || [[Telejano]]
|-
| [[TEI_MOVRELATIVESTATIC]]         || [[Betwix]] [[Telejano]]
|-
| [[TEI_SHOWLMP2]]                  || [[FTE]] [[Telejano]]
|-
| [[TEI_SHOWLMP3]]                  || [[Telejano]]
|-
| [[TEI_STATCOUNT]]                 || [[Telejano]]
|-
| [[TEI_STATICFX]]                  || [[Telejano]]
|-
| [[TEI_STEPSIZE]]                  || [[Telejano]]
|-
| [[TEI_SUN]]                       || [[Telejano]]
|-
| [[TEI_SVSKY]]                     || [[Telejano]]
|-
| [[TEI_TE_ALIENEXPLOSION]]         || [[Telejano]]
|-
| [[TEI_TE_CUSTOMFX]]               || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL]]         || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL2]]        || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL3]]        || [[Telejano]]
|-
| [[TEI_TE_IMPLOSIONFX]]            || [[Telejano]]
|-
| [[TEI_TE_LIGHTNING4]]             || [[Telejano]]
|-
| [[TEI_TE_LIGHTNINGX]]             || [[Telejano]]
|-
| [[TEI_TE_PARTICLEBLAST]]          || [[Telejano]]
|-
| [[TEI_TE_STATICFOG]]              || [[Telejano]]
|-
| [[TEI_TE_TRAILS]]                 || [[Telejano]]
|-
| [[TEI_THEMEFOLDER]]               || [[Telejano]]
|-
| [[TEI_TPAKLOAD]]                  || [[Telejano]]
|-
| [[TEI_ZONEFOGS]]                  || [[Telejano]]
|-
| [[TENEBRAE_GFX_DLIGHTS]]          || [[DarkPlaces]]
|-
| [[TIMESCALE]]                     ||
|-
| [[TQ_DLIGHTS]]                    || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_PLASMA]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAILTRAIL]]                  || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAIN]]                       || [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SLOWMO]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SNOW]]                       || [[FrikQuake]] [[Telejano]] [[TomazQuake]]
|-
| [[TW_SV_STEPCONTROLS]]            || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Twilight]]
|-
| [[UDC_EXTEFFECT]]                 ||
|-
| [[VEN_SCRIPT_PARTICLES]]          || [[Vengeance r2]]
|-
| [[ZQ_CLIENTCOMMAND]]              || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_INPUTBUTTONS]]               || [[ZQuake]]
|-
| [[ZQ_ITEMS2]]                     || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NOCLIP]] (QW)       || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_FLY]] (QW)          || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NONE]] (QW)         || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_PAUSE]]                      || [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_QC_PARTICLE]] (QW)           || [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_STRINGS]]                 || [[ezQuake]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_TOKENIZE]]                || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_SETINFO]]                    || [[ZQuake]]
|-
| [[ZQ_SOUNDTOCLIENT]]              || [[ZQuake]]
|-
| [[ZQ_VWEP]]                       || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
|}

===See Also===
* http://web.archive.org/web/*/http://www.quakesrc.org/registry.php</text>
      <sha1>cdch8j45330l7inhcxguliny0xp68du</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>514</id>
      <parentid>513</parentid>
      <timestamp>2008-02-29T11:34:54Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="21741">Thanks to a cooperative effort between [[QuakeSrc]], LordHavoc and Tomaz a variety of new engines support a Extension-Detection system called, for the purposes of this wiki, &quot;QSG Extensions&quot;. These are meant to be used by [[QuakeC]] modders to expand and make use of the new engine features without breaking compatability with other engines ([[Prydon Gate]] is a good example of how this can be done).

For more information on how to use these, read about the [[checkextension]] builtin.

QSG Extensions are a powerful method. Mods addapt to higher and lower profiles, and engine coders dont need to stop to add new features, and QuakeC modders dont need to stop using it. But doing in the right way, everybody can run mods.

Notes:

* [[DarkPlaces]] and [[TomazQuake]] support most of the old QSG keys. Actually this keys have the widen support betwen engines.
* [[Telejano]] adds a lot of new QSG keys, but most are undocumented.
* The new [[DarkPlaces]] builds add some new and very interesting keys.
* [[FTE QuakeWorld]] adds a whole new spon on things. Visit [How FTE is broken] for more information.
* You can deactivate normal features with QSG keys. Example: If you create a engine that not support centerprints. You can use QSG_NO_CENTERPRINT. If you mod its coded checking that centerprint, will run on your engine with no-centerprint and on engines with centerprint. Negative QSG keys are usefull to use Quake1 mods with other engines that can load progs.dat files, like [[FungusQC]].
* [[Builtin ranges]]

{|style=&quot;border:1px solid #000000&quot;
|-
|align=&quot;center&quot;| '''Name'''
|align=&quot;center&quot;| '''Supported by'''
|-
| [[BX_COLOREDTEXT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_CON_DEL]]                    || [[Betwix]]
|-
| [[BX_CON_EXT]]                    || [[Betwix]]
|-
| [[BX_CON_TEXREPLACE]]             || [[Betwix]]
|-
| [[BX_CON_VAR]]                    || [[Betwix]]
|-
| [[BX_CON_WRITECONFIG]]            || [[Betwix]]
|-
| [[BX_ENGINE]]                     || [[Betwix]]
|-
| [[BX_ENT_BOUNCESCALE]]            || [[Betwix]]
|-
| [[BX_ENT_FRICTION]]               || [[Betwix]]
|-
| [[BX_ENT_MODELFLAGS]]             || [[Betwix]]
|-
| [[BX_GFX_SKYBOX]]                 || [[Betwix]]
|-
| [[BX_GFX_SUN]]                    || [[Betwix]]
|-
| [[BX_INPUTBUTTONS]]               || [[Betwix]]
|-
| [[BX_MDLOVERRIDE]]                || [[Betwix]]
|-
| [[BX_MULTIPLEFONTS]]              || [[Betwix]]
|-
| [[BX_P_M_SUPPORT]]                || [[Betwix]]
|-
| [[BX_QC_CAMERA]]                  || [[Betwix]]
|-
| [[BX_QC_CHECKFOV]]                || [[Betwix]]
|-
| [[BX_QC_FINDFIELDCHAIN]]          || [[Betwix]]
|-
| [[BX_QC_GETDATETIME]]             || [[Betwix]]
|-
| [[BX_QC_INIFILE]]                 || [[Betwix]]
|-
| [[BX_QC_MSGREAD]]                 || [[Betwix]]
|-
| [[BX_QC_PROGPARMS]]               || [[Betwix]]
|-
| [[BX_QC_PROTOCOL_FLAGS]]          || [[Betwix]]
|-
| [[BX_QC_SOUNDTEAM]]               || [[Betwix]]
|-
| [[BX_QC_SPRINTF]]                 || [[Betwix]]
|-
| [[BX_QC_STR]]                     || [[Betwix]]
|-
| [[BX_QC_VECMATH]]                 || [[Betwix]]
|-
| [[BX_QC_VISIBLE]]                 || [[Betwix]]
|-
| [[BX_SERVERPROGS]]                || [[Betwix]]
|-
| [[BX_SND_MUSIC]]                  || [[Betwix]]
|-
| [[BX_SV_LOCKCVARCMD]]             || [[Betwix]]
|-
| [[BX_SV_PARSESAY]]                || [[Betwix]]
|-
| [[BX_SV_UPDATE_CLIENTCVARS]]      || [[Betwix]]
|-
| [[BX_WAL_SUPPORT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_WEAPONBOB]]                  || [[Betwix]]
|-
| [[DP_BUTTONCHAT]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_BUTTONUSE]]                  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_CGAME]]                      || [[DarkPlaces]]
|-
| [[DP_CL_LOADSKY]]                 || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[ToChriS]] [[Vengeance r2]]
|-
| [[DP_CON_ALIASPARAMETERS]]        || [[DarkPlaces]]
|-
| [[DP_CON_EXPANDCVAR]]             || [[DarkPlaces]]
|-
| [[DP_CON_SET]]                    || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]] [[ezQuake]] [[ZQuake]]
|-
| [[DP_CON_SETA]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_CON_STARTMAP]]               || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_ADDITIVE]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_BLUE]]                    || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_DOUBLESIDED]]             || [[DarkPlaces]]
|-
| [[DP_EF_FLAME]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_FULLBRIGHT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NODEPTHTEST]]             || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_NODRAW]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NOGUNBOB]]                || [[DarkPlaces]]
|-
| [[DP_EF_NOSHADOW]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_EF_RED]]                     || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_STARDUST]]                || [[DarkPlaces]]
|-
| [[DP_ENT_ALPHA]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_ENT_COLORMOD]]               || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_ENT_CUSTOMCOLORMAP]]         || [[DarkPlaces]]
|-
| [[DP_ENT_DELTACOMPRESS]]          ||
|-
| [[DP_ENT_EXTERIORMODELTOCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_ENT_GLOW]]                   || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_ENT_LOWPRECISION]]           || [[DarkPlaces]]
|-
| [[DP_ENT_SCALE]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]]
|-
| [[DP_ENT_VIEWMODEL]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_EXTERNALTEXTURES]]       || [[DarkPlaces]]
|-
| [[DP_GFX_EXTERNALTEXTURES_PERMAPTEXTURES]] || [[DarkPlaces]]
|-
| [[DP_GFX_FOG]]                    || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_GFX_QUAKE3MODELTAGS]]        || [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_SKINFILES]]              || [[DarkPlaces]]
|-
| [[DP_GFX_SKYBOX]]                 || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_HALFLIFE_MAP]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_MAP_CVAR]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FTE]] [[ZQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_SPRITE]]            || [[DarkPlaces]]
|-
| [[DP_INPUTBUTTONS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_LITSPRITES]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_LITSUPPORT]]                 || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_MD3_TAGSINFO]]               ||
|-
| [[DP_MONSTERWALK]]                || [[DarkPlaces]] [[FTE]] [[Telejano]] [[ZQuake]]
|-
| [[DP_MOVETYPEBOUNCEMISSILE]]      || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_MOVETYPEFOLLOW]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_QC_DP_QC_ASINACOSATANATAN2TAN]] || [[DarkPlaces]]
|-
| [[DP_QC_CHANGEPITCH]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_COPYENTITY]]              || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[Vengeance r2]]
|-
| [[DP_QC_CVAR_DEFSTRING]]          || [[DarkPlaces]]
|-
| [[DP_QC_CVAR_STRING]]             || [[Betwix]] [[DarkPlaces]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[DP_QC_ETOS]]                    || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_FINDCHAIN]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDCHAINFLAGS]]          || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDCHAINFLOAT]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDFLAGS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDFLOAT]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]] [[QMB]] [[FuhQuake]]
|-
| [[DP_QC_FS_SEARCH]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_GETLIGHT]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_QC_GETSURFACE]]              || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_QC_GETTAGINFO]]              || [[DarkPlaces]]
|-
| [[DP_QC_MINMAXBOUND]]             || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_MULTIPLETEMPSTRINGS]]     || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_RANDOMVEC]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[MVDSV]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_SINCOSSQRTPOW]]           || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_STRFTIME]]                || [[DarkPlaces]]
|-
| [[DP_QC_STRINGCOLORFUNCTIONS]]    || [[DarkPlaces]]
|-
| [[DP_QC_STRING_CASE_FUNCTIONS]]   || [[DarkPlaces]]
|-
| [[DP_QC_TOKENIZEBYSEPARATOR]]     || [[DarkPlaces]]
|-
| [[DP_QC_TRACE_MOVETYPE_HITMODEL]] || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]|| [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPES]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACEBOX]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[MVDSV]] [[QMB]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_QC_TRACETOSS]]               || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_UNLIMITEDTEMPSTRINGS]]    || [[DarkPlaces]]
|-
| [[DP_QC_VECTORVECTORS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_VECTOANGLES_WITH_ROLL]]   || [[DarkPlaces]]
|-
| [[DP_QUAKE2_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_QUAKE2_SPRITE]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MAP]]                 || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_REGISTERCVAR]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_SENSITIVITYSCALE]]           || [[Betwix]]
|-
| [[DP_SND_DIRECTIONLESSATTNNONE]]  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SND_FAKETRACKS]]             || [[DarkPlaces]]
|-
| [[DP_SND_OGGVORBIS]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SND_STEREOWAV]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SOLIDCORPSE]]                || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SPRITE32]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_SV_BOTCLIENT]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTCOLORS]]            || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTNAME]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CUSTOMIZEENTITYFORCLIENT]] || [[DarkPlaces]]
|-
| [[DP_SV_DRAWONLYTOCLIENT]]        || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_DRAWONLYTOTEAM]]          || [[Betwix]]
|-
| [[DP_SV_DROPCLIENT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_SV_EFFECT]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_ENTITYCONTENTSTRANSITION]] || [[DarkPlaces]]
|-
| [[DP_SV_EXTERIORMODELFORCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_MODELFLAGS_AS_EFFECTS]]   || [[DarkPlaces]]
|-
| [[DP_SV_NETADDRESS]]              || [[DarkPlaces]]
|-
| [[DP_SV_NODRAWTOCLIENT]]          || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_ONENTITYNOSPAWNFUNCTION]] || [[DarkPlaces]]
|-
| [[DP_SV_PING]]                    || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_PLAYERPHYSICS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_POINTSOUND]]              || [[DarkPlaces]]
|-
| [[DP_SV_PRINT]]                   || [[DarkPlaces]]
|-
| [[DP_SV_PRECACHEANYTIME]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PUNCHVECTOR]]             || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_ROTATINGBMODEL]]          || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_SV_SETCOLOR]]                || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]]
|-
| [[DP_SV_SLOWMO]]                  || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SV_WRITEUNTERMINATEDSTRING]] || [[DarkPlaces]] [[ezQuake]] [[FTE]]
|-
| [[DP_TE_BLOOD]]                   || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_BLOODSHOWER]]             || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_CUSTOMFLASH]]             || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_EXPLOSIONRGB]]            || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_FLAMEJET]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLECUBE]]            || [[DarkPlaces]] [[QMB]]
|-
| [[DP_TE_PARTICLERAIN]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLESNOW]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PLASMABURN]]              || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_QUADEFFECTS1]]            || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_SMALLFLASH]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_SPARK]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_TE_STANDARDEFFECTBUILTINS]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_VIEWZOOM]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_WEAPONSKIN]]                 || [[Betwix]]
|-
| [[EXT_BITSHIFT]]                  || [[DarkPlaces]] [[Betwix]] [[FTE]]
|-
| [[EXT_CSQC]]                      || [[DarkPlaces]] [[FTE]]
|-
| [[EXT_DIMENSION_GHOST]]           || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_PHYSICS]]         || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_VISIBILITY]]      || [[Betwix]] [[FTE]]
|-
| [[FTE_CALLTIMEOFDAY]]             || [[Betwix]] [[MVDSV]] [[FTE]]
|-
| [[FTE_EXTENDEDTEXTCODES]]         || [[FTE]]
|-
| [[FTE_FORCEINFOKEY]]              || [[FTE]]
|-
| [[FTE_GFX_QUAKE3SHADERS]]         || [[FTE]]
|-
| [[FTE_HEXEN2]]                    || [[FTE]]
|-
| [[FTE_MEDIA_AVI]]                 || [[FTE]]
|-
| [[FTE_MEDIA_CIN]]                 || [[FTE]]
|-
| [[FTE_MEDIA_ROQ]]                 || [[FTE]]
|-
| [[FTE_MULTIPROGS]]                || [[FTE]]
|-
| [[FTE_MULTITHREADED]]             || [[FTE]]
|-
| [[FTE_MVD_PLAYBACK]]              || [[FTE]]
|-
| [[FTE_NPCCHAT]]                   || [[FTE]]
|-
| [[FTE_PEXT_BULLETENS]]            || [[FTE]]
|-
| [[FTE_PEXT_CUSTOMTENTS]]          || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL2]]           || [[FTE]]
|-
| [[FTE_PEXT_FATNESS]]              || [[FTE]]
|-
| [[FTE_PEXT_HULLSIZE]]             || [[FTE]]
|-
| [[FTE_PEXT_LIGHTSTYLECOL]]        || [[FTE]]
|-
| [[FTE_PEXT_LIGHTUPDATES]]         || [[FTE]]
|-
| [[FTE_PEXT_MODELDBL]]             || [[FTE]]
|-
| [[FTE_PEXT_ORIGINDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_Q2BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_Q3BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_SETVIEW]]              || [[FTE]]
|-
| [[FTE_PEXT_SPAWNSTATIC]]          || [[FTE]]
|-
| [[FTE_PEXT_TE_BULLET]]            || [[FTE]]
|-
| [[FTE_PEXT_VIEW2]]                || [[FTE]]
|-
| [[FTE_PEXT_VWEAP]]                || [[FTE]]
|-
| [[FTE_PEXT_ZLIBDL]]               || [[FTE]]
|-
| [[FTE_QC_CHECKPVS]]               || [[FTE]] [[ZQuake]]
|-
| [[FTE_QC_MATCHCLIENTNAME]]        || [[FTE]]
|-
| [[FTE_QC_PAUSED]]                 || [[FTE]]
|-
| [[FTE_QC_SENDPACKET]]             || [[FTE]]
|-
| [[FTE_QC_TRACETRIGGER]]           || [[FTE]]
|-
| [[FTE_SOLID_LADDER]]              || [[FTE]]
|-
| [[FTE_STRINGS]]                   || [[FTE]]
|-
| [[FTE_SV_REENTER]]                || [[FTE]]
|-
| [[FTE_TE_STANDARDEFFECTBUILTINS]] || [[FTE]]
|-
| [[FTE_VALID_VEC_HULL3]]           || [[FTE]]
|-
| [[FRIK_FILE]]                     || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[GQ]] [[Telejano]] [[Vengeance r2]]
|-
| [[KRIMZON_SV_PARSECLIENTCOMMAND]] || [[Betwix]] [[DarkPlaces]] [[FTE]] [[FuhQuake]]
|-
| [[NEH_CMD_PLAY2]]                 || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]]
|-
| [[NEH_RESTOREGAME]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[NEXUIZ_PLAYERMODEL]]            || [[DarkPlaces]]
|-
| [[NXQ_GFX_LETTERBOX]]             || [[DarkPlaces]]
|-
| [[PRYDON_CLIENTCURSOR]]           || [[DarkPlaces]]
|-
| [[QSG_FILE]]                      || [[FrikQuake]] [[Telejano]] [[ToChriS]]
|-
| [[QSG_DIMENSIONAL]]               ||
|-
| [[QSG_NO_CENTERPRINT]]            || [[FungusQC]]
|-
| [[QSG_NO_MDL]]                    || [[FungusQC]]
|-
| [[QSG_NO_NETCODE_Q1]]             || [[FungusQC]]
|-
| [[QW_ENGINE]]                     || [[FTE]]
|-
| [[QWE_MVD_RECORD]]                || [[FTE]]
|-
| [[TEI_AUTOANIMATION]]             || [[Telejano]]
|-
| [[TEI_AUTOFLUOR]]                 || [[Telejano]]
|-
| [[TEI_AUTOFOGWATER]]              || [[Telejano]]
|-
| [[TEI_AUTOFOOT]]                  || [[Telejano]]
|-
| [[TEI_AUTOLAVA]]                  || [[Telejano]]
|-
| [[TEI_AUTOLIGHTDAY]]              || [[Telejano]]
|-
| [[TEI_AUTORAIN]]                  || [[Telejano]]
|-
| [[TEI_AUTOSNOW]]                  || [[Telejano]]
|-
| [[TEI_AUTOVANISH]]                || [[Telejano]]
|-
| [[TEI_AUTOZING]]                  || [[Telejano]]
|-
| [[TEI_BOB2]]                      || [[Telejano]]
|-
| [[TEI_EF_EXTRA]]                  || [[Telejano]]
|-
| [[TEI_EF2_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_EF3_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_HUDMANAGER]]                || [[Telejano]]
|-
| [[TEI_LOCALMENUS1]]               || [[Telejano]]
|-
| [[TEI_LOCALMENUS2]]               || [[Telejano]]
|-
| [[TEI_MAPMODELS]]                 || [[Telejano]]
|-
| [[TEI_MD3_MODEL]]                 || [[FTE]] [[Telejano]]
|-
| [[TEI_MENU_MISC2]]                || [[Telejano]]
|-
| [[TEI_MOD_PROGS]]                 || [[Telejano]]
|-
| [[TEI_MODPREDATOR]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETIC]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETICFOLLOW]]         || [[Telejano]]
|-
| [[TEI_MOVRELATIVESTATIC]]         || [[Betwix]] [[Telejano]]
|-
| [[TEI_SHOWLMP2]]                  || [[FTE]] [[Telejano]]
|-
| [[TEI_SHOWLMP3]]                  || [[Telejano]]
|-
| [[TEI_STATCOUNT]]                 || [[Telejano]]
|-
| [[TEI_STATICFX]]                  || [[Telejano]]
|-
| [[TEI_STEPSIZE]]                  || [[Telejano]]
|-
| [[TEI_SUN]]                       || [[Telejano]]
|-
| [[TEI_SVSKY]]                     || [[Telejano]]
|-
| [[TEI_TE_ALIENEXPLOSION]]         || [[Telejano]]
|-
| [[TEI_TE_CUSTOMFX]]               || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL]]         || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL2]]        || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL3]]        || [[Telejano]]
|-
| [[TEI_TE_IMPLOSIONFX]]            || [[Telejano]]
|-
| [[TEI_TE_LIGHTNING4]]             || [[Telejano]]
|-
| [[TEI_TE_LIGHTNINGX]]             || [[Telejano]]
|-
| [[TEI_TE_PARTICLEBLAST]]          || [[Telejano]]
|-
| [[TEI_TE_STATICFOG]]              || [[Telejano]]
|-
| [[TEI_TE_TRAILS]]                 || [[Telejano]]
|-
| [[TEI_THEMEFOLDER]]               || [[Telejano]]
|-
| [[TEI_TPAKLOAD]]                  || [[Telejano]]
|-
| [[TEI_ZONEFOGS]]                  || [[Telejano]]
|-
| [[TENEBRAE_GFX_DLIGHTS]]          || [[DarkPlaces]]
|-
| [[TIMESCALE]]                     ||
|-
| [[TQ_DLIGHTS]]                    || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_PLASMA]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAILTRAIL]]                  || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAIN]]                       || [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SLOWMO]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SNOW]]                       || [[FrikQuake]] [[Telejano]] [[TomazQuake]]
|-
| [[TW_SV_STEPCONTROLS]]            || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Twilight]]
|-
| [[UDC_EXTEFFECT]]                 ||
|-
| [[VEN_SCRIPT_PARTICLES]]          || [[Vengeance r2]]
|-
| [[ZQ_CLIENTCOMMAND]]              || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_INPUTBUTTONS]]               || [[ZQuake]]
|-
| [[ZQ_ITEMS2]]                     || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NOCLIP]] (QW)       || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_FLY]] (QW)          || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NONE]] (QW)         || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_PAUSE]]                      || [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_QC_PARTICLE]] (QW)           || [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_STRINGS]]                 || [[ezQuake]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_TOKENIZE]]                || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_SETINFO]]                    || [[ZQuake]]
|-
| [[ZQ_SOUNDTOCLIENT]]              || [[ZQuake]]
|-
| [[ZQ_VWEP]]                       || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
|}

===See Also===
* http://web.archive.org/web/*/http://www.quakesrc.org/registry.php</text>
      <sha1>h6hinyooeolisoi6qofg78uw6iiud7k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>521</id>
      <parentid>514</parentid>
      <timestamp>2008-02-29T11:41:49Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="21798">Thanks to a cooperative effort between [[QuakeSrc]], LordHavoc and Tomaz a variety of new engines support a Extension-Detection system called, for the purposes of this wiki, &quot;QSG Extensions&quot;. These are meant to be used by [[QuakeC]] modders to expand and make use of the new engine features without breaking compatability with other engines ([[Prydon Gate]] is a good example of how this can be done).

For more information on how to use these, read about the [[checkextension]] builtin.

QSG Extensions are a powerful method. Mods addapt to higher and lower profiles, and engine coders dont need to stop to add new features, and QuakeC modders dont need to stop using it. But doing in the right way, everybody can run mods.

Notes:

* [[DarkPlaces]] and [[TomazQuake]] support most of the old QSG keys. Actually this keys have the widen support betwen engines.
* [[Telejano]] adds a lot of new QSG keys, but most are undocumented.
* The new [[DarkPlaces]] builds add some new and very interesting keys.
* [[FTE QuakeWorld]] adds a whole new spon on things. Visit [How FTE is broken] for more information.
* You can deactivate normal features with QSG keys. Example: If you create a engine that not support centerprints. You can use QSG_NO_CENTERPRINT. If you mod its coded checking that centerprint, will run on your engine with no-centerprint and on engines with centerprint. Negative QSG keys are usefull to use Quake1 mods with other engines that can load progs.dat files, like [[FungusQC]].
* [[Builtin ranges]]

{|style=&quot;border:1px solid #000000&quot;
|-
|align=&quot;center&quot;| '''Name'''
|align=&quot;center&quot;| '''Supported by'''
|-
| [[BX_COLOREDTEXT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_CON_DEL]]                    || [[Betwix]]
|-
| [[BX_CON_EXT]]                    || [[Betwix]]
|-
| [[BX_CON_TEXREPLACE]]             || [[Betwix]]
|-
| [[BX_CON_VAR]]                    || [[Betwix]]
|-
| [[BX_CON_WRITECONFIG]]            || [[Betwix]]
|-
| [[BX_ENGINE]]                     || [[Betwix]]
|-
| [[BX_ENT_BOUNCESCALE]]            || [[Betwix]]
|-
| [[BX_ENT_FRICTION]]               || [[Betwix]]
|-
| [[BX_ENT_MODELFLAGS]]             || [[Betwix]]
|-
| [[BX_GFX_SKYBOX]]                 || [[Betwix]]
|-
| [[BX_GFX_SUN]]                    || [[Betwix]]
|-
| [[BX_INPUTBUTTONS]]               || [[Betwix]]
|-
| [[BX_MDLOVERRIDE]]                || [[Betwix]]
|-
| [[BX_MULTIPLEFONTS]]              || [[Betwix]]
|-
| [[BX_P_M_SUPPORT]]                || [[Betwix]]
|-
| [[BX_QC_CAMERA]]                  || [[Betwix]]
|-
| [[BX_QC_CHECKFOV]]                || [[Betwix]]
|-
| [[BX_QC_FINDFIELDCHAIN]]          || [[Betwix]]
|-
| [[BX_QC_GETDATETIME]]             || [[Betwix]]
|-
| [[BX_QC_INIFILE]]                 || [[Betwix]]
|-
| [[BX_QC_MSGREAD]]                 || [[Betwix]]
|-
| [[BX_QC_PROGPARMS]]               || [[Betwix]]
|-
| [[BX_QC_PROTOCOL_FLAGS]]          || [[Betwix]]
|-
| [[BX_QC_SOUNDTEAM]]               || [[Betwix]]
|-
| [[BX_QC_SPRINTF]]                 || [[Betwix]]
|-
| [[BX_QC_STR]]                     || [[Betwix]]
|-
| [[BX_QC_VECMATH]]                 || [[Betwix]]
|-
| [[BX_QC_VISIBLE]]                 || [[Betwix]]
|-
| [[BX_SERVERPROGS]]                || [[Betwix]]
|-
| [[BX_SND_MUSIC]]                  || [[Betwix]]
|-
| [[BX_SV_LOCKCVARCMD]]             || [[Betwix]]
|-
| [[BX_SV_PARSESAY]]                || [[Betwix]]
|-
| [[BX_SV_UPDATE_CLIENTCVARS]]      || [[Betwix]]
|-
| [[BX_WAL_SUPPORT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_WEAPONBOB]]                  || [[Betwix]]
|-
| [[DP_BUTTONCHAT]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_BUTTONUSE]]                  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_CGAME]]                      || [[DarkPlaces]]
|-
| [[DP_CL_LOADSKY]]                 || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[ToChriS]] [[Vengeance r2]]
|-
| [[DP_CON_ALIASPARAMETERS]]        || [[DarkPlaces]]
|-
| [[DP_CON_EXPANDCVAR]]             || [[DarkPlaces]]
|-
| [[DP_CON_SET]]                    || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]] [[ezQuake]] [[ZQuake]]
|-
| [[DP_CON_SETA]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_CON_STARTMAP]]               || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_ADDITIVE]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_BLUE]]                    || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_DOUBLESIDED]]             || [[DarkPlaces]]
|-
| [[DP_EF_FLAME]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_FULLBRIGHT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NODEPTHTEST]]             || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_NODRAW]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NOGUNBOB]]                || [[DarkPlaces]]
|-
| [[DP_EF_NOSHADOW]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_EF_RED]]                     || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_STARDUST]]                || [[DarkPlaces]]
|-
| [[DP_ENT_ALPHA]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_ENT_COLORMOD]]               || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_ENT_CUSTOMCOLORMAP]]         || [[DarkPlaces]]
|-
| [[DP_ENT_DELTACOMPRESS]]          ||
|-
| [[DP_ENT_EXTERIORMODELTOCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_ENT_GLOW]]                   || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_ENT_LOWPRECISION]]           || [[DarkPlaces]]
|-
| [[DP_ENT_SCALE]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]]
|-
| [[DP_ENT_VIEWMODEL]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_EXTERNALTEXTURES]]       || [[DarkPlaces]]
|-
| [[DP_GFX_EXTERNALTEXTURES_PERMAPTEXTURES]] || [[DarkPlaces]]
|-
| [[DP_GFX_FOG]]                    || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_GFX_QUAKE3MODELTAGS]]        || [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_SKINFILES]]              || [[DarkPlaces]]
|-
| [[DP_GFX_SKYBOX]]                 || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_HALFLIFE_MAP]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_MAP_CVAR]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FTE]] [[ZQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_SPRITE]]            || [[DarkPlaces]]
|-
| [[DP_INPUTBUTTONS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_LITSPRITES]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_LITSUPPORT]]                 || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_MD3_TAGSINFO]]               ||
|-
| [[DP_MONSTERWALK]]                || [[DarkPlaces]] [[FTE]] [[Telejano]] [[ZQuake]]
|-
| [[DP_MOVETYPEBOUNCEMISSILE]]      || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_MOVETYPEFOLLOW]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_QC_DP_QC_ASINACOSATANATAN2TAN]] || [[DarkPlaces]]
|-
| [[DP_QC_CHANGEPITCH]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_COPYENTITY]]              || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[Vengeance r2]]
|-
| [[DP_QC_CVAR_DEFSTRING]]          || [[DarkPlaces]]
|-
| [[DP_QC_CVAR_STRING]]             || [[Betwix]] [[DarkPlaces]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[DP_QC_ETOS]]                    || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_FINDCHAIN]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDCHAINFLAGS]]          || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDCHAINFLOAT]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDFLAGS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDFLOAT]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]] [[QMB]] [[FuhQuake]]
|-
| [[DP_QC_FS_SEARCH]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_GETLIGHT]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_QC_GETSURFACE]]              || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_QC_GETTAGINFO]]              || [[DarkPlaces]]
|-
| [[DP_QC_MINMAXBOUND]]             || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_MULTIPLETEMPSTRINGS]]     || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_RANDOMVEC]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[MVDSV]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_SINCOSSQRTPOW]]           || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_STRFTIME]]                || [[DarkPlaces]]
|-
| [[DP_QC_STRINGCOLORFUNCTIONS]]    || [[DarkPlaces]]
|-
| [[DP_QC_STRING_CASE_FUNCTIONS]]   || [[DarkPlaces]]
|-
| [[DP_QC_TOKENIZEBYSEPARATOR]]     || [[DarkPlaces]]
|-
| [[DP_QC_TRACE_MOVETYPE_HITMODEL]] || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]|| [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPES]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACEBOX]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[MVDSV]] [[QMB]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_QC_TRACETOSS]]               || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_UNLIMITEDTEMPSTRINGS]]    || [[DarkPlaces]]
|-
| [[DP_QC_VECTORVECTORS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_VECTOANGLES_WITH_ROLL]]   || [[DarkPlaces]]
|-
| [[DP_QUAKE2_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_QUAKE2_SPRITE]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MAP]]                 || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_REGISTERCVAR]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_SENSITIVITYSCALE]]           || [[Betwix]]
|-
| [[DP_SND_DIRECTIONLESSATTNNONE]]  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SND_FAKETRACKS]]             || [[DarkPlaces]]
|-
| [[DP_SND_OGGVORBIS]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SND_STEREOWAV]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SOLIDCORPSE]]                || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SPRITE32]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_SV_BOTCLIENT]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTCOLORS]]            || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTNAME]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CUSTOMIZEENTITYFORCLIENT]] || [[DarkPlaces]]
|-
| [[DP_SV_DRAWONLYTOCLIENT]]        || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_DRAWONLYTOTEAM]]          || [[Betwix]]
|-
| [[DP_SV_DROPCLIENT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_SV_EFFECT]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_ENTITYCONTENTSTRANSITION]] || [[DarkPlaces]]
|-
| [[DP_SV_EXTERIORMODELFORCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_MODELFLAGS_AS_EFFECTS]]   || [[DarkPlaces]]
|-
| [[DP_SV_NETADDRESS]]              || [[DarkPlaces]]
|-
| [[DP_SV_NODRAWTOCLIENT]]          || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_ONENTITYNOSPAWNFUNCTION]] || [[DarkPlaces]]
|-
| [[DP_SV_PING]]                    || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_PLAYERPHYSICS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_POINTPARTICLES]]          || [[DarkPlaces]]
|-
| [[DP_SV_POINTSOUND]]              || [[DarkPlaces]]
|-
| [[DP_SV_PRINT]]                   || [[DarkPlaces]]
|-
| [[DP_SV_PRECACHEANYTIME]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PUNCHVECTOR]]             || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_ROTATINGBMODEL]]          || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_SV_SETCOLOR]]                || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]]
|-
| [[DP_SV_SLOWMO]]                  || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SV_WRITEUNTERMINATEDSTRING]] || [[DarkPlaces]] [[ezQuake]] [[FTE]]
|-
| [[DP_TE_BLOOD]]                   || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_BLOODSHOWER]]             || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_CUSTOMFLASH]]             || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_EXPLOSIONRGB]]            || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_FLAMEJET]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLECUBE]]            || [[DarkPlaces]] [[QMB]]
|-
| [[DP_TE_PARTICLERAIN]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLESNOW]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PLASMABURN]]              || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_QUADEFFECTS1]]            || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_SMALLFLASH]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_SPARK]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_TE_STANDARDEFFECTBUILTINS]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_VIEWZOOM]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_WEAPONSKIN]]                 || [[Betwix]]
|-
| [[EXT_BITSHIFT]]                  || [[DarkPlaces]] [[Betwix]] [[FTE]]
|-
| [[EXT_CSQC]]                      || [[DarkPlaces]] [[FTE]]
|-
| [[EXT_DIMENSION_GHOST]]           || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_PHYSICS]]         || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_VISIBILITY]]      || [[Betwix]] [[FTE]]
|-
| [[FTE_CALLTIMEOFDAY]]             || [[Betwix]] [[MVDSV]] [[FTE]]
|-
| [[FTE_EXTENDEDTEXTCODES]]         || [[FTE]]
|-
| [[FTE_FORCEINFOKEY]]              || [[FTE]]
|-
| [[FTE_GFX_QUAKE3SHADERS]]         || [[FTE]]
|-
| [[FTE_HEXEN2]]                    || [[FTE]]
|-
| [[FTE_MEDIA_AVI]]                 || [[FTE]]
|-
| [[FTE_MEDIA_CIN]]                 || [[FTE]]
|-
| [[FTE_MEDIA_ROQ]]                 || [[FTE]]
|-
| [[FTE_MULTIPROGS]]                || [[FTE]]
|-
| [[FTE_MULTITHREADED]]             || [[FTE]]
|-
| [[FTE_MVD_PLAYBACK]]              || [[FTE]]
|-
| [[FTE_NPCCHAT]]                   || [[FTE]]
|-
| [[FTE_PEXT_BULLETENS]]            || [[FTE]]
|-
| [[FTE_PEXT_CUSTOMTENTS]]          || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL2]]           || [[FTE]]
|-
| [[FTE_PEXT_FATNESS]]              || [[FTE]]
|-
| [[FTE_PEXT_HULLSIZE]]             || [[FTE]]
|-
| [[FTE_PEXT_LIGHTSTYLECOL]]        || [[FTE]]
|-
| [[FTE_PEXT_LIGHTUPDATES]]         || [[FTE]]
|-
| [[FTE_PEXT_MODELDBL]]             || [[FTE]]
|-
| [[FTE_PEXT_ORIGINDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_Q2BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_Q3BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_SETVIEW]]              || [[FTE]]
|-
| [[FTE_PEXT_SPAWNSTATIC]]          || [[FTE]]
|-
| [[FTE_PEXT_TE_BULLET]]            || [[FTE]]
|-
| [[FTE_PEXT_VIEW2]]                || [[FTE]]
|-
| [[FTE_PEXT_VWEAP]]                || [[FTE]]
|-
| [[FTE_PEXT_ZLIBDL]]               || [[FTE]]
|-
| [[FTE_QC_CHECKPVS]]               || [[FTE]] [[ZQuake]]
|-
| [[FTE_QC_MATCHCLIENTNAME]]        || [[FTE]]
|-
| [[FTE_QC_PAUSED]]                 || [[FTE]]
|-
| [[FTE_QC_SENDPACKET]]             || [[FTE]]
|-
| [[FTE_QC_TRACETRIGGER]]           || [[FTE]]
|-
| [[FTE_SOLID_LADDER]]              || [[FTE]]
|-
| [[FTE_STRINGS]]                   || [[FTE]]
|-
| [[FTE_SV_REENTER]]                || [[FTE]]
|-
| [[FTE_TE_STANDARDEFFECTBUILTINS]] || [[FTE]]
|-
| [[FTE_VALID_VEC_HULL3]]           || [[FTE]]
|-
| [[FRIK_FILE]]                     || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[GQ]] [[Telejano]] [[Vengeance r2]]
|-
| [[KRIMZON_SV_PARSECLIENTCOMMAND]] || [[Betwix]] [[DarkPlaces]] [[FTE]] [[FuhQuake]]
|-
| [[NEH_CMD_PLAY2]]                 || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]]
|-
| [[NEH_RESTOREGAME]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[NEXUIZ_PLAYERMODEL]]            || [[DarkPlaces]]
|-
| [[NXQ_GFX_LETTERBOX]]             || [[DarkPlaces]]
|-
| [[PRYDON_CLIENTCURSOR]]           || [[DarkPlaces]]
|-
| [[QSG_FILE]]                      || [[FrikQuake]] [[Telejano]] [[ToChriS]]
|-
| [[QSG_DIMENSIONAL]]               ||
|-
| [[QSG_NO_CENTERPRINT]]            || [[FungusQC]]
|-
| [[QSG_NO_MDL]]                    || [[FungusQC]]
|-
| [[QSG_NO_NETCODE_Q1]]             || [[FungusQC]]
|-
| [[QW_ENGINE]]                     || [[FTE]]
|-
| [[QWE_MVD_RECORD]]                || [[FTE]]
|-
| [[TEI_AUTOANIMATION]]             || [[Telejano]]
|-
| [[TEI_AUTOFLUOR]]                 || [[Telejano]]
|-
| [[TEI_AUTOFOGWATER]]              || [[Telejano]]
|-
| [[TEI_AUTOFOOT]]                  || [[Telejano]]
|-
| [[TEI_AUTOLAVA]]                  || [[Telejano]]
|-
| [[TEI_AUTOLIGHTDAY]]              || [[Telejano]]
|-
| [[TEI_AUTORAIN]]                  || [[Telejano]]
|-
| [[TEI_AUTOSNOW]]                  || [[Telejano]]
|-
| [[TEI_AUTOVANISH]]                || [[Telejano]]
|-
| [[TEI_AUTOZING]]                  || [[Telejano]]
|-
| [[TEI_BOB2]]                      || [[Telejano]]
|-
| [[TEI_EF_EXTRA]]                  || [[Telejano]]
|-
| [[TEI_EF2_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_EF3_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_HUDMANAGER]]                || [[Telejano]]
|-
| [[TEI_LOCALMENUS1]]               || [[Telejano]]
|-
| [[TEI_LOCALMENUS2]]               || [[Telejano]]
|-
| [[TEI_MAPMODELS]]                 || [[Telejano]]
|-
| [[TEI_MD3_MODEL]]                 || [[FTE]] [[Telejano]]
|-
| [[TEI_MENU_MISC2]]                || [[Telejano]]
|-
| [[TEI_MOD_PROGS]]                 || [[Telejano]]
|-
| [[TEI_MODPREDATOR]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETIC]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETICFOLLOW]]         || [[Telejano]]
|-
| [[TEI_MOVRELATIVESTATIC]]         || [[Betwix]] [[Telejano]]
|-
| [[TEI_SHOWLMP2]]                  || [[FTE]] [[Telejano]]
|-
| [[TEI_SHOWLMP3]]                  || [[Telejano]]
|-
| [[TEI_STATCOUNT]]                 || [[Telejano]]
|-
| [[TEI_STATICFX]]                  || [[Telejano]]
|-
| [[TEI_STEPSIZE]]                  || [[Telejano]]
|-
| [[TEI_SUN]]                       || [[Telejano]]
|-
| [[TEI_SVSKY]]                     || [[Telejano]]
|-
| [[TEI_TE_ALIENEXPLOSION]]         || [[Telejano]]
|-
| [[TEI_TE_CUSTOMFX]]               || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL]]         || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL2]]        || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL3]]        || [[Telejano]]
|-
| [[TEI_TE_IMPLOSIONFX]]            || [[Telejano]]
|-
| [[TEI_TE_LIGHTNING4]]             || [[Telejano]]
|-
| [[TEI_TE_LIGHTNINGX]]             || [[Telejano]]
|-
| [[TEI_TE_PARTICLEBLAST]]          || [[Telejano]]
|-
| [[TEI_TE_STATICFOG]]              || [[Telejano]]
|-
| [[TEI_TE_TRAILS]]                 || [[Telejano]]
|-
| [[TEI_THEMEFOLDER]]               || [[Telejano]]
|-
| [[TEI_TPAKLOAD]]                  || [[Telejano]]
|-
| [[TEI_ZONEFOGS]]                  || [[Telejano]]
|-
| [[TENEBRAE_GFX_DLIGHTS]]          || [[DarkPlaces]]
|-
| [[TIMESCALE]]                     ||
|-
| [[TQ_DLIGHTS]]                    || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_PLASMA]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAILTRAIL]]                  || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAIN]]                       || [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SLOWMO]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SNOW]]                       || [[FrikQuake]] [[Telejano]] [[TomazQuake]]
|-
| [[TW_SV_STEPCONTROLS]]            || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Twilight]]
|-
| [[UDC_EXTEFFECT]]                 ||
|-
| [[VEN_SCRIPT_PARTICLES]]          || [[Vengeance r2]]
|-
| [[ZQ_CLIENTCOMMAND]]              || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_INPUTBUTTONS]]               || [[ZQuake]]
|-
| [[ZQ_ITEMS2]]                     || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NOCLIP]] (QW)       || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_FLY]] (QW)          || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NONE]] (QW)         || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_PAUSE]]                      || [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_QC_PARTICLE]] (QW)           || [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_STRINGS]]                 || [[ezQuake]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_TOKENIZE]]                || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_SETINFO]]                    || [[ZQuake]]
|-
| [[ZQ_SOUNDTOCLIENT]]              || [[ZQuake]]
|-
| [[ZQ_VWEP]]                       || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
|}

===See Also===
* http://web.archive.org/web/*/http://www.quakesrc.org/registry.php</text>
      <sha1>2se4rpdthoof0ulfmf3vhadks5l6soy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>543</id>
      <parentid>521</parentid>
      <timestamp>2008-02-29T12:00:27Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="21862">Thanks to a cooperative effort between [[QuakeSrc]], LordHavoc and Tomaz a variety of new engines support a Extension-Detection system called, for the purposes of this wiki, &quot;QSG Extensions&quot;. These are meant to be used by [[QuakeC]] modders to expand and make use of the new engine features without breaking compatability with other engines ([[Prydon Gate]] is a good example of how this can be done).

For more information on how to use these, read about the [[checkextension]] builtin.

QSG Extensions are a powerful method. Mods addapt to higher and lower profiles, and engine coders dont need to stop to add new features, and QuakeC modders dont need to stop using it. But doing in the right way, everybody can run mods.

Notes:

* [[DarkPlaces]] and [[TomazQuake]] support most of the old QSG keys. Actually this keys have the widen support betwen engines.
* [[Telejano]] adds a lot of new QSG keys, but most are undocumented.
* The new [[DarkPlaces]] builds add some new and very interesting keys.
* [[FTE QuakeWorld]] adds a whole new spon on things. Visit [How FTE is broken] for more information.
* You can deactivate normal features with QSG keys. Example: If you create a engine that not support centerprints. You can use QSG_NO_CENTERPRINT. If you mod its coded checking that centerprint, will run on your engine with no-centerprint and on engines with centerprint. Negative QSG keys are usefull to use Quake1 mods with other engines that can load progs.dat files, like [[FungusQC]].
* [[Builtin ranges]]

{|style=&quot;border:1px solid #000000&quot;
|-
|align=&quot;center&quot;| '''Name'''
|align=&quot;center&quot;| '''Supported by'''
|-
| [[BX_COLOREDTEXT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_CON_DEL]]                    || [[Betwix]]
|-
| [[BX_CON_EXT]]                    || [[Betwix]]
|-
| [[BX_CON_TEXREPLACE]]             || [[Betwix]]
|-
| [[BX_CON_VAR]]                    || [[Betwix]]
|-
| [[BX_CON_WRITECONFIG]]            || [[Betwix]]
|-
| [[BX_ENGINE]]                     || [[Betwix]]
|-
| [[BX_ENT_BOUNCESCALE]]            || [[Betwix]]
|-
| [[BX_ENT_FRICTION]]               || [[Betwix]]
|-
| [[BX_ENT_MODELFLAGS]]             || [[Betwix]]
|-
| [[BX_GFX_SKYBOX]]                 || [[Betwix]]
|-
| [[BX_GFX_SUN]]                    || [[Betwix]]
|-
| [[BX_INPUTBUTTONS]]               || [[Betwix]]
|-
| [[BX_MDLOVERRIDE]]                || [[Betwix]]
|-
| [[BX_MULTIPLEFONTS]]              || [[Betwix]]
|-
| [[BX_P_M_SUPPORT]]                || [[Betwix]]
|-
| [[BX_QC_CAMERA]]                  || [[Betwix]]
|-
| [[BX_QC_CHECKFOV]]                || [[Betwix]]
|-
| [[BX_QC_FINDFIELDCHAIN]]          || [[Betwix]]
|-
| [[BX_QC_GETDATETIME]]             || [[Betwix]]
|-
| [[BX_QC_INIFILE]]                 || [[Betwix]]
|-
| [[BX_QC_MSGREAD]]                 || [[Betwix]]
|-
| [[BX_QC_PROGPARMS]]               || [[Betwix]]
|-
| [[BX_QC_PROTOCOL_FLAGS]]          || [[Betwix]]
|-
| [[BX_QC_SOUNDTEAM]]               || [[Betwix]]
|-
| [[BX_QC_SPRINTF]]                 || [[Betwix]]
|-
| [[BX_QC_STR]]                     || [[Betwix]]
|-
| [[BX_QC_VECMATH]]                 || [[Betwix]]
|-
| [[BX_QC_VISIBLE]]                 || [[Betwix]]
|-
| [[BX_SERVERPROGS]]                || [[Betwix]]
|-
| [[BX_SND_MUSIC]]                  || [[Betwix]]
|-
| [[BX_SV_LOCKCVARCMD]]             || [[Betwix]]
|-
| [[BX_SV_PARSESAY]]                || [[Betwix]]
|-
| [[BX_SV_UPDATE_CLIENTCVARS]]      || [[Betwix]]
|-
| [[BX_WAL_SUPPORT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_WEAPONBOB]]                  || [[Betwix]]
|-
| [[DP_BUTTONCHAT]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_BUTTONUSE]]                  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_CGAME]]                      || [[DarkPlaces]]
|-
| [[DP_CL_LOADSKY]]                 || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[ToChriS]] [[Vengeance r2]]
|-
| [[DP_CON_ALIASPARAMETERS]]        || [[DarkPlaces]]
|-
| [[DP_CON_EXPANDCVAR]]             || [[DarkPlaces]]
|-
| [[DP_CON_SET]]                    || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]] [[ezQuake]] [[ZQuake]]
|-
| [[DP_CON_SETA]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_CON_STARTMAP]]               || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_ADDITIVE]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_BLUE]]                    || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_DOUBLESIDED]]             || [[DarkPlaces]]
|-
| [[DP_EF_FLAME]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_FULLBRIGHT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NODEPTHTEST]]             || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_NODRAW]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NOGUNBOB]]                || [[DarkPlaces]]
|-
| [[DP_EF_NOSHADOW]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_EF_RED]]                     || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_STARDUST]]                || [[DarkPlaces]]
|-
| [[DP_ENT_ALPHA]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_ENT_COLORMOD]]               || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_ENT_CUSTOMCOLORMAP]]         || [[DarkPlaces]]
|-
| [[DP_ENT_DELTACOMPRESS]]          ||
|-
| [[DP_ENT_EXTERIORMODELTOCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_ENT_GLOW]]                   || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_ENT_LOWPRECISION]]           || [[DarkPlaces]]
|-
| [[DP_ENT_SCALE]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]]
|-
| [[DP_ENT_VIEWMODEL]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_EXTERNALTEXTURES]]       || [[DarkPlaces]]
|-
| [[DP_GFX_EXTERNALTEXTURES_PERMAPTEXTURES]] || [[DarkPlaces]]
|-
| [[DP_GFX_FOG]]                    || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_GFX_QUAKE3MODELTAGS]]        || [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_SKINFILES]]              || [[DarkPlaces]]
|-
| [[DP_GFX_SKYBOX]]                 || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_HALFLIFE_MAP]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_MAP_CVAR]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FTE]] [[ZQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_SPRITE]]            || [[DarkPlaces]]
|-
| [[DP_INPUTBUTTONS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_LITSPRITES]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_LITSUPPORT]]                 || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_MD3_TAGSINFO]]               ||
|-
| [[DP_MONSTERWALK]]                || [[DarkPlaces]] [[FTE]] [[Telejano]] [[ZQuake]]
|-
| [[DP_MOVETYPEBOUNCEMISSILE]]      || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_MOVETYPEFOLLOW]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_QC_DP_QC_ASINACOSATANATAN2TAN]] || [[DarkPlaces]]
|-
| [[DP_QC_CHANGEPITCH]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_COPYENTITY]]              || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[Vengeance r2]]
|-
| [[DP_QC_CVAR_DEFSTRING]]          || [[DarkPlaces]]
|-
| [[DP_QC_CVAR_STRING]]             || [[Betwix]] [[DarkPlaces]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[DP_QC_ETOS]]                    || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_FINDCHAIN]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDCHAINFLAGS]]          || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDCHAINFLOAT]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDFLAGS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDFLOAT]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]] [[QMB]] [[FuhQuake]]
|-
| [[DP_QC_FS_SEARCH]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_GETLIGHT]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_QC_GETSURFACE]]              || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_QC_GETTAGINFO]]              || [[DarkPlaces]]
|-
| [[DP_QC_MINMAXBOUND]]             || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_MULTIPLETEMPSTRINGS]]     || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_RANDOMVEC]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[MVDSV]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_SINCOSSQRTPOW]]           || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_STRFTIME]]                || [[DarkPlaces]]
|-
| [[DP_QC_STRINGCOLORFUNCTIONS]]    || [[DarkPlaces]]
|-
| [[DP_QC_STRING_CASE_FUNCTIONS]]   || [[DarkPlaces]]
|-
| [[DP_QC_TOKENIZEBYSEPARATOR]]     || [[DarkPlaces]]
|-
| [[DP_QC_TRACE_MOVETYPE_HITMODEL]] || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]|| [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPES]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACEBOX]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[MVDSV]] [[QMB]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_QC_TRACETOSS]]               || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_UNLIMITEDTEMPSTRINGS]]    || [[DarkPlaces]]
|-
| [[DP_QC_VECTORVECTORS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_VECTOANGLES_WITH_ROLL]]   || [[DarkPlaces]]
|-
| [[DP_QUAKE2_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_QUAKE2_SPRITE]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MAP]]                 || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_REGISTERCVAR]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_SENSITIVITYSCALE]]           || [[Betwix]]
|-
| [[DP_SND_DIRECTIONLESSATTNNONE]]  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SND_FAKETRACKS]]             || [[DarkPlaces]]
|-
| [[DP_SND_OGGVORBIS]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SND_STEREOWAV]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SOLIDCORPSE]]                || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SPRITE32]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_SV_BOTCLIENT]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTCOLORS]]            || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTNAME]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CUSTOMIZEENTITYFORCLIENT]] || [[DarkPlaces]]
|-
| [[DP_SV_DRAWONLYTOCLIENT]]        || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_DRAWONLYTOTEAM]]          || [[Betwix]]
|-
| [[DP_SV_DROPCLIENT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_SV_EFFECT]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_ENTITYCONTENTSTRANSITION]] || [[DarkPlaces]]
|-
| [[DP_SV_EXTERIORMODELFORCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_MODELFLAGS_AS_EFFECTS]]   || [[DarkPlaces]]
|-
| [[DP_SV_NETADDRESS]]              || [[DarkPlaces]]
|-
| [[DP_SV_NODRAWTOCLIENT]]          || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_ONENTITYNOSPAWNFUNCTION]] || [[DarkPlaces]]
|-
| [[DP_SV_PING]]                    || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_PLAYERPHYSICS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_POINTPARTICLES]]          || [[DarkPlaces]]
|-
| [[DP_SV_POINTSOUND]]              || [[DarkPlaces]]
|-
| [[DP_SV_PRINT]]                   || [[DarkPlaces]]
|-
| [[DP_SV_PRECACHEANYTIME]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PUNCHVECTOR]]             || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_ROTATINGBMODEL]]          || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_SV_SETCOLOR]]                || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]]
|-
| [[DP_SV_SLOWMO]]                  || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SV_WRITEUNTERMINATEDSTRING]] || [[DarkPlaces]] [[ezQuake]] [[FTE]]
|-
| [[DP_TE_BLOOD]]                   || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_BLOODSHOWER]]             || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_CUSTOMFLASH]]             || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_EXPLOSIONRGB]]            || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_FLAMEJET]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLECUBE]]            || [[DarkPlaces]] [[QMB]]
|-
| [[DP_TE_PARTICLERAIN]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLESNOW]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PLASMABURN]]              || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_QUADEFFECTS1]]            || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_SMALLFLASH]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_SPARK]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_TE_STANDARDEFFECTBUILTINS]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_TRACE_HITCONTENTSMASK_SURFACEINFO]] || [[DarkPlaces]]
|-
| [[DP_VIEWZOOM]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_WEAPONSKIN]]                 || [[Betwix]]
|-
| [[EXT_BITSHIFT]]                  || [[DarkPlaces]] [[Betwix]] [[FTE]]
|-
| [[EXT_CSQC]]                      || [[DarkPlaces]] [[FTE]]
|-
| [[EXT_DIMENSION_GHOST]]           || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_PHYSICS]]         || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_VISIBILITY]]      || [[Betwix]] [[FTE]]
|-
| [[FTE_CALLTIMEOFDAY]]             || [[Betwix]] [[MVDSV]] [[FTE]]
|-
| [[FTE_EXTENDEDTEXTCODES]]         || [[FTE]]
|-
| [[FTE_FORCEINFOKEY]]              || [[FTE]]
|-
| [[FTE_GFX_QUAKE3SHADERS]]         || [[FTE]]
|-
| [[FTE_HEXEN2]]                    || [[FTE]]
|-
| [[FTE_MEDIA_AVI]]                 || [[FTE]]
|-
| [[FTE_MEDIA_CIN]]                 || [[FTE]]
|-
| [[FTE_MEDIA_ROQ]]                 || [[FTE]]
|-
| [[FTE_MULTIPROGS]]                || [[FTE]]
|-
| [[FTE_MULTITHREADED]]             || [[FTE]]
|-
| [[FTE_MVD_PLAYBACK]]              || [[FTE]]
|-
| [[FTE_NPCCHAT]]                   || [[FTE]]
|-
| [[FTE_PEXT_BULLETENS]]            || [[FTE]]
|-
| [[FTE_PEXT_CUSTOMTENTS]]          || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL2]]           || [[FTE]]
|-
| [[FTE_PEXT_FATNESS]]              || [[FTE]]
|-
| [[FTE_PEXT_HULLSIZE]]             || [[FTE]]
|-
| [[FTE_PEXT_LIGHTSTYLECOL]]        || [[FTE]]
|-
| [[FTE_PEXT_LIGHTUPDATES]]         || [[FTE]]
|-
| [[FTE_PEXT_MODELDBL]]             || [[FTE]]
|-
| [[FTE_PEXT_ORIGINDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_Q2BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_Q3BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_SETVIEW]]              || [[FTE]]
|-
| [[FTE_PEXT_SPAWNSTATIC]]          || [[FTE]]
|-
| [[FTE_PEXT_TE_BULLET]]            || [[FTE]]
|-
| [[FTE_PEXT_VIEW2]]                || [[FTE]]
|-
| [[FTE_PEXT_VWEAP]]                || [[FTE]]
|-
| [[FTE_PEXT_ZLIBDL]]               || [[FTE]]
|-
| [[FTE_QC_CHECKPVS]]               || [[FTE]] [[ZQuake]]
|-
| [[FTE_QC_MATCHCLIENTNAME]]        || [[FTE]]
|-
| [[FTE_QC_PAUSED]]                 || [[FTE]]
|-
| [[FTE_QC_SENDPACKET]]             || [[FTE]]
|-
| [[FTE_QC_TRACETRIGGER]]           || [[FTE]]
|-
| [[FTE_SOLID_LADDER]]              || [[FTE]]
|-
| [[FTE_STRINGS]]                   || [[FTE]]
|-
| [[FTE_SV_REENTER]]                || [[FTE]]
|-
| [[FTE_TE_STANDARDEFFECTBUILTINS]] || [[FTE]]
|-
| [[FTE_VALID_VEC_HULL3]]           || [[FTE]]
|-
| [[FRIK_FILE]]                     || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[GQ]] [[Telejano]] [[Vengeance r2]]
|-
| [[KRIMZON_SV_PARSECLIENTCOMMAND]] || [[Betwix]] [[DarkPlaces]] [[FTE]] [[FuhQuake]]
|-
| [[NEH_CMD_PLAY2]]                 || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]]
|-
| [[NEH_RESTOREGAME]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[NEXUIZ_PLAYERMODEL]]            || [[DarkPlaces]]
|-
| [[NXQ_GFX_LETTERBOX]]             || [[DarkPlaces]]
|-
| [[PRYDON_CLIENTCURSOR]]           || [[DarkPlaces]]
|-
| [[QSG_FILE]]                      || [[FrikQuake]] [[Telejano]] [[ToChriS]]
|-
| [[QSG_DIMENSIONAL]]               ||
|-
| [[QSG_NO_CENTERPRINT]]            || [[FungusQC]]
|-
| [[QSG_NO_MDL]]                    || [[FungusQC]]
|-
| [[QSG_NO_NETCODE_Q1]]             || [[FungusQC]]
|-
| [[QW_ENGINE]]                     || [[FTE]]
|-
| [[QWE_MVD_RECORD]]                || [[FTE]]
|-
| [[TEI_AUTOANIMATION]]             || [[Telejano]]
|-
| [[TEI_AUTOFLUOR]]                 || [[Telejano]]
|-
| [[TEI_AUTOFOGWATER]]              || [[Telejano]]
|-
| [[TEI_AUTOFOOT]]                  || [[Telejano]]
|-
| [[TEI_AUTOLAVA]]                  || [[Telejano]]
|-
| [[TEI_AUTOLIGHTDAY]]              || [[Telejano]]
|-
| [[TEI_AUTORAIN]]                  || [[Telejano]]
|-
| [[TEI_AUTOSNOW]]                  || [[Telejano]]
|-
| [[TEI_AUTOVANISH]]                || [[Telejano]]
|-
| [[TEI_AUTOZING]]                  || [[Telejano]]
|-
| [[TEI_BOB2]]                      || [[Telejano]]
|-
| [[TEI_EF_EXTRA]]                  || [[Telejano]]
|-
| [[TEI_EF2_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_EF3_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_HUDMANAGER]]                || [[Telejano]]
|-
| [[TEI_LOCALMENUS1]]               || [[Telejano]]
|-
| [[TEI_LOCALMENUS2]]               || [[Telejano]]
|-
| [[TEI_MAPMODELS]]                 || [[Telejano]]
|-
| [[TEI_MD3_MODEL]]                 || [[FTE]] [[Telejano]]
|-
| [[TEI_MENU_MISC2]]                || [[Telejano]]
|-
| [[TEI_MOD_PROGS]]                 || [[Telejano]]
|-
| [[TEI_MODPREDATOR]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETIC]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETICFOLLOW]]         || [[Telejano]]
|-
| [[TEI_MOVRELATIVESTATIC]]         || [[Betwix]] [[Telejano]]
|-
| [[TEI_SHOWLMP2]]                  || [[FTE]] [[Telejano]]
|-
| [[TEI_SHOWLMP3]]                  || [[Telejano]]
|-
| [[TEI_STATCOUNT]]                 || [[Telejano]]
|-
| [[TEI_STATICFX]]                  || [[Telejano]]
|-
| [[TEI_STEPSIZE]]                  || [[Telejano]]
|-
| [[TEI_SUN]]                       || [[Telejano]]
|-
| [[TEI_SVSKY]]                     || [[Telejano]]
|-
| [[TEI_TE_ALIENEXPLOSION]]         || [[Telejano]]
|-
| [[TEI_TE_CUSTOMFX]]               || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL]]         || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL2]]        || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL3]]        || [[Telejano]]
|-
| [[TEI_TE_IMPLOSIONFX]]            || [[Telejano]]
|-
| [[TEI_TE_LIGHTNING4]]             || [[Telejano]]
|-
| [[TEI_TE_LIGHTNINGX]]             || [[Telejano]]
|-
| [[TEI_TE_PARTICLEBLAST]]          || [[Telejano]]
|-
| [[TEI_TE_STATICFOG]]              || [[Telejano]]
|-
| [[TEI_TE_TRAILS]]                 || [[Telejano]]
|-
| [[TEI_THEMEFOLDER]]               || [[Telejano]]
|-
| [[TEI_TPAKLOAD]]                  || [[Telejano]]
|-
| [[TEI_ZONEFOGS]]                  || [[Telejano]]
|-
| [[TENEBRAE_GFX_DLIGHTS]]          || [[DarkPlaces]]
|-
| [[TIMESCALE]]                     ||
|-
| [[TQ_DLIGHTS]]                    || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_PLASMA]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAILTRAIL]]                  || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAIN]]                       || [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SLOWMO]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SNOW]]                       || [[FrikQuake]] [[Telejano]] [[TomazQuake]]
|-
| [[TW_SV_STEPCONTROLS]]            || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Twilight]]
|-
| [[UDC_EXTEFFECT]]                 ||
|-
| [[VEN_SCRIPT_PARTICLES]]          || [[Vengeance r2]]
|-
| [[ZQ_CLIENTCOMMAND]]              || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_INPUTBUTTONS]]               || [[ZQuake]]
|-
| [[ZQ_ITEMS2]]                     || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NOCLIP]] (QW)       || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_FLY]] (QW)          || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NONE]] (QW)         || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_PAUSE]]                      || [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_QC_PARTICLE]] (QW)           || [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_STRINGS]]                 || [[ezQuake]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_TOKENIZE]]                || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_SETINFO]]                    || [[ZQuake]]
|-
| [[ZQ_SOUNDTOCLIENT]]              || [[ZQuake]]
|-
| [[ZQ_VWEP]]                       || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
|}

===See Also===
* http://web.archive.org/web/*/http://www.quakesrc.org/registry.php</text>
      <sha1>3ar874e29qiiljlhucs8nrvvii16wb1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>558</id>
      <parentid>543</parentid>
      <timestamp>2008-02-29T12:18:16Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="21919">Thanks to a cooperative effort between [[QuakeSrc]], LordHavoc and Tomaz a variety of new engines support a Extension-Detection system called, for the purposes of this wiki, &quot;QSG Extensions&quot;. These are meant to be used by [[QuakeC]] modders to expand and make use of the new engine features without breaking compatability with other engines ([[Prydon Gate]] is a good example of how this can be done).

For more information on how to use these, read about the [[checkextension]] builtin.

QSG Extensions are a powerful method. Mods addapt to higher and lower profiles, and engine coders dont need to stop to add new features, and QuakeC modders dont need to stop using it. But doing in the right way, everybody can run mods.

Notes:

* [[DarkPlaces]] and [[TomazQuake]] support most of the old QSG keys. Actually this keys have the widen support betwen engines.
* [[Telejano]] adds a lot of new QSG keys, but most are undocumented.
* The new [[DarkPlaces]] builds add some new and very interesting keys.
* [[FTE QuakeWorld]] adds a whole new spon on things. Visit [How FTE is broken] for more information.
* You can deactivate normal features with QSG keys. Example: If you create a engine that not support centerprints. You can use QSG_NO_CENTERPRINT. If you mod its coded checking that centerprint, will run on your engine with no-centerprint and on engines with centerprint. Negative QSG keys are usefull to use Quake1 mods with other engines that can load progs.dat files, like [[FungusQC]].
* [[Builtin ranges]]

{|style=&quot;border:1px solid #000000&quot;
|-
|align=&quot;center&quot;| '''Name'''
|align=&quot;center&quot;| '''Supported by'''
|-
| [[BX_COLOREDTEXT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_CON_DEL]]                    || [[Betwix]]
|-
| [[BX_CON_EXT]]                    || [[Betwix]]
|-
| [[BX_CON_TEXREPLACE]]             || [[Betwix]]
|-
| [[BX_CON_VAR]]                    || [[Betwix]]
|-
| [[BX_CON_WRITECONFIG]]            || [[Betwix]]
|-
| [[BX_ENGINE]]                     || [[Betwix]]
|-
| [[BX_ENT_BOUNCESCALE]]            || [[Betwix]]
|-
| [[BX_ENT_FRICTION]]               || [[Betwix]]
|-
| [[BX_ENT_MODELFLAGS]]             || [[Betwix]]
|-
| [[BX_GFX_SKYBOX]]                 || [[Betwix]]
|-
| [[BX_GFX_SUN]]                    || [[Betwix]]
|-
| [[BX_INPUTBUTTONS]]               || [[Betwix]]
|-
| [[BX_MDLOVERRIDE]]                || [[Betwix]]
|-
| [[BX_MULTIPLEFONTS]]              || [[Betwix]]
|-
| [[BX_P_M_SUPPORT]]                || [[Betwix]]
|-
| [[BX_QC_CAMERA]]                  || [[Betwix]]
|-
| [[BX_QC_CHECKFOV]]                || [[Betwix]]
|-
| [[BX_QC_FINDFIELDCHAIN]]          || [[Betwix]]
|-
| [[BX_QC_GETDATETIME]]             || [[Betwix]]
|-
| [[BX_QC_INIFILE]]                 || [[Betwix]]
|-
| [[BX_QC_MSGREAD]]                 || [[Betwix]]
|-
| [[BX_QC_PROGPARMS]]               || [[Betwix]]
|-
| [[BX_QC_PROTOCOL_FLAGS]]          || [[Betwix]]
|-
| [[BX_QC_SOUNDTEAM]]               || [[Betwix]]
|-
| [[BX_QC_SPRINTF]]                 || [[Betwix]]
|-
| [[BX_QC_STR]]                     || [[Betwix]]
|-
| [[BX_QC_VECMATH]]                 || [[Betwix]]
|-
| [[BX_QC_VISIBLE]]                 || [[Betwix]]
|-
| [[BX_SERVERPROGS]]                || [[Betwix]]
|-
| [[BX_SND_MUSIC]]                  || [[Betwix]]
|-
| [[BX_SV_LOCKCVARCMD]]             || [[Betwix]]
|-
| [[BX_SV_PARSESAY]]                || [[Betwix]]
|-
| [[BX_SV_UPDATE_CLIENTCVARS]]      || [[Betwix]]
|-
| [[BX_WAL_SUPPORT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_WEAPONBOB]]                  || [[Betwix]]
|-
| [[DP_BUTTONCHAT]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_BUTTONUSE]]                  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_CGAME]]                      || [[DarkPlaces]]
|-
| [[DP_CL_LOADSKY]]                 || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[ToChriS]] [[Vengeance r2]]
|-
| [[DP_CON_ALIASPARAMETERS]]        || [[DarkPlaces]]
|-
| [[DP_CON_EXPANDCVAR]]             || [[DarkPlaces]]
|-
| [[DP_CON_SET]]                    || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]] [[ezQuake]] [[ZQuake]]
|-
| [[DP_CON_SETA]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_CON_STARTMAP]]               || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_ADDITIVE]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_BLUE]]                    || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_DOUBLESIDED]]             || [[DarkPlaces]]
|-
| [[DP_EF_FLAME]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_FULLBRIGHT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NODEPTHTEST]]             || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_NODRAW]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NOGUNBOB]]                || [[DarkPlaces]]
|-
| [[DP_EF_NOSHADOW]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_EF_RED]]                     || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_STARDUST]]                || [[DarkPlaces]]
|-
| [[DP_ENT_ALPHA]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_ENT_COLORMOD]]               || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_ENT_CUSTOMCOLORMAP]]         || [[DarkPlaces]]
|-
| [[DP_ENT_DELTACOMPRESS]]          ||
|-
| [[DP_ENT_EXTERIORMODELTOCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_ENT_GLOW]]                   || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_ENT_LOWPRECISION]]           || [[DarkPlaces]]
|-
| [[DP_ENT_SCALE]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]]
|-
| [[DP_ENT_VIEWMODEL]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_EXTERNALTEXTURES]]       || [[DarkPlaces]]
|-
| [[DP_GFX_EXTERNALTEXTURES_PERMAPTEXTURES]] || [[DarkPlaces]]
|-
| [[DP_GFX_FOG]]                    || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_GFX_QUAKE3MODELTAGS]]        || [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_SKINFILES]]              || [[DarkPlaces]]
|-
| [[DP_GFX_SKYBOX]]                 || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_HALFLIFE_MAP]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_MAP_CVAR]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FTE]] [[ZQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_SPRITE]]            || [[DarkPlaces]]
|-
| [[DP_INPUTBUTTONS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_LITSPRITES]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_LITSUPPORT]]                 || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_MD3_TAGSINFO]]               ||
|-
| [[DP_MONSTERWALK]]                || [[DarkPlaces]] [[FTE]] [[Telejano]] [[ZQuake]]
|-
| [[DP_MOVETYPEBOUNCEMISSILE]]      || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_MOVETYPEFOLLOW]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_QC_DP_QC_ASINACOSATANATAN2TAN]] || [[DarkPlaces]]
|-
| [[DP_QC_CHANGEPITCH]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_COPYENTITY]]              || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[Vengeance r2]]
|-
| [[DP_QC_CVAR_DEFSTRING]]          || [[DarkPlaces]]
|-
| [[DP_QC_CVAR_STRING]]             || [[Betwix]] [[DarkPlaces]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[DP_QC_ETOS]]                    || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_FINDCHAIN]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDCHAINFLAGS]]          || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDCHAINFLOAT]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDFLAGS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDFLOAT]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]] [[QMB]] [[FuhQuake]]
|-
| [[DP_QC_FS_SEARCH]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_GETLIGHT]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_QC_GETSURFACE]]              || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_QC_GETTAGINFO]]              || [[DarkPlaces]]
|-
| [[DP_QC_MINMAXBOUND]]             || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_MULTIPLETEMPSTRINGS]]     || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_RANDOMVEC]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[MVDSV]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_SINCOSSQRTPOW]]           || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_STRFTIME]]                || [[DarkPlaces]]
|-
| [[DP_QC_STRINGCOLORFUNCTIONS]]    || [[DarkPlaces]]
|-
| [[DP_QC_STRING_CASE_FUNCTIONS]]   || [[DarkPlaces]]
|-
| [[DP_QC_STRREPLACE]]              || [[DarkPlaces]]
|-
| [[DP_QC_TOKENIZEBYSEPARATOR]]     || [[DarkPlaces]]
|-
| [[DP_QC_TRACE_MOVETYPE_HITMODEL]] || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]|| [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPES]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACEBOX]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[MVDSV]] [[QMB]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_QC_TRACETOSS]]               || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_UNLIMITEDTEMPSTRINGS]]    || [[DarkPlaces]]
|-
| [[DP_QC_VECTORVECTORS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_VECTOANGLES_WITH_ROLL]]   || [[DarkPlaces]]
|-
| [[DP_QUAKE2_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_QUAKE2_SPRITE]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MAP]]                 || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_REGISTERCVAR]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_SENSITIVITYSCALE]]           || [[Betwix]]
|-
| [[DP_SND_DIRECTIONLESSATTNNONE]]  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SND_FAKETRACKS]]             || [[DarkPlaces]]
|-
| [[DP_SND_OGGVORBIS]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SND_STEREOWAV]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SOLIDCORPSE]]                || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SPRITE32]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_SV_BOTCLIENT]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTCOLORS]]            || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTNAME]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CUSTOMIZEENTITYFORCLIENT]] || [[DarkPlaces]]
|-
| [[DP_SV_DRAWONLYTOCLIENT]]        || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_DRAWONLYTOTEAM]]          || [[Betwix]]
|-
| [[DP_SV_DROPCLIENT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_SV_EFFECT]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_ENTITYCONTENTSTRANSITION]] || [[DarkPlaces]]
|-
| [[DP_SV_EXTERIORMODELFORCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_MODELFLAGS_AS_EFFECTS]]   || [[DarkPlaces]]
|-
| [[DP_SV_NETADDRESS]]              || [[DarkPlaces]]
|-
| [[DP_SV_NODRAWTOCLIENT]]          || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_ONENTITYNOSPAWNFUNCTION]] || [[DarkPlaces]]
|-
| [[DP_SV_PING]]                    || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_PLAYERPHYSICS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_POINTPARTICLES]]          || [[DarkPlaces]]
|-
| [[DP_SV_POINTSOUND]]              || [[DarkPlaces]]
|-
| [[DP_SV_PRINT]]                   || [[DarkPlaces]]
|-
| [[DP_SV_PRECACHEANYTIME]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PUNCHVECTOR]]             || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_ROTATINGBMODEL]]          || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_SV_SETCOLOR]]                || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]]
|-
| [[DP_SV_SLOWMO]]                  || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SV_WRITEUNTERMINATEDSTRING]] || [[DarkPlaces]] [[ezQuake]] [[FTE]]
|-
| [[DP_TE_BLOOD]]                   || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_BLOODSHOWER]]             || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_CUSTOMFLASH]]             || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_EXPLOSIONRGB]]            || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_FLAMEJET]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLECUBE]]            || [[DarkPlaces]] [[QMB]]
|-
| [[DP_TE_PARTICLERAIN]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLESNOW]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PLASMABURN]]              || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_QUADEFFECTS1]]            || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_SMALLFLASH]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_SPARK]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_TE_STANDARDEFFECTBUILTINS]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_TRACE_HITCONTENTSMASK_SURFACEINFO]] || [[DarkPlaces]]
|-
| [[DP_VIEWZOOM]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_WEAPONSKIN]]                 || [[Betwix]]
|-
| [[EXT_BITSHIFT]]                  || [[DarkPlaces]] [[Betwix]] [[FTE]]
|-
| [[EXT_CSQC]]                      || [[DarkPlaces]] [[FTE]]
|-
| [[EXT_DIMENSION_GHOST]]           || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_PHYSICS]]         || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_VISIBILITY]]      || [[Betwix]] [[FTE]]
|-
| [[FTE_CALLTIMEOFDAY]]             || [[Betwix]] [[MVDSV]] [[FTE]]
|-
| [[FTE_EXTENDEDTEXTCODES]]         || [[FTE]]
|-
| [[FTE_FORCEINFOKEY]]              || [[FTE]]
|-
| [[FTE_GFX_QUAKE3SHADERS]]         || [[FTE]]
|-
| [[FTE_HEXEN2]]                    || [[FTE]]
|-
| [[FTE_MEDIA_AVI]]                 || [[FTE]]
|-
| [[FTE_MEDIA_CIN]]                 || [[FTE]]
|-
| [[FTE_MEDIA_ROQ]]                 || [[FTE]]
|-
| [[FTE_MULTIPROGS]]                || [[FTE]]
|-
| [[FTE_MULTITHREADED]]             || [[FTE]]
|-
| [[FTE_MVD_PLAYBACK]]              || [[FTE]]
|-
| [[FTE_NPCCHAT]]                   || [[FTE]]
|-
| [[FTE_PEXT_BULLETENS]]            || [[FTE]]
|-
| [[FTE_PEXT_CUSTOMTENTS]]          || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL2]]           || [[FTE]]
|-
| [[FTE_PEXT_FATNESS]]              || [[FTE]]
|-
| [[FTE_PEXT_HULLSIZE]]             || [[FTE]]
|-
| [[FTE_PEXT_LIGHTSTYLECOL]]        || [[FTE]]
|-
| [[FTE_PEXT_LIGHTUPDATES]]         || [[FTE]]
|-
| [[FTE_PEXT_MODELDBL]]             || [[FTE]]
|-
| [[FTE_PEXT_ORIGINDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_Q2BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_Q3BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_SETVIEW]]              || [[FTE]]
|-
| [[FTE_PEXT_SPAWNSTATIC]]          || [[FTE]]
|-
| [[FTE_PEXT_TE_BULLET]]            || [[FTE]]
|-
| [[FTE_PEXT_VIEW2]]                || [[FTE]]
|-
| [[FTE_PEXT_VWEAP]]                || [[FTE]]
|-
| [[FTE_PEXT_ZLIBDL]]               || [[FTE]]
|-
| [[FTE_QC_CHECKPVS]]               || [[FTE]] [[ZQuake]]
|-
| [[FTE_QC_MATCHCLIENTNAME]]        || [[FTE]]
|-
| [[FTE_QC_PAUSED]]                 || [[FTE]]
|-
| [[FTE_QC_SENDPACKET]]             || [[FTE]]
|-
| [[FTE_QC_TRACETRIGGER]]           || [[FTE]]
|-
| [[FTE_SOLID_LADDER]]              || [[FTE]]
|-
| [[FTE_STRINGS]]                   || [[FTE]]
|-
| [[FTE_SV_REENTER]]                || [[FTE]]
|-
| [[FTE_TE_STANDARDEFFECTBUILTINS]] || [[FTE]]
|-
| [[FTE_VALID_VEC_HULL3]]           || [[FTE]]
|-
| [[FRIK_FILE]]                     || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[GQ]] [[Telejano]] [[Vengeance r2]]
|-
| [[KRIMZON_SV_PARSECLIENTCOMMAND]] || [[Betwix]] [[DarkPlaces]] [[FTE]] [[FuhQuake]]
|-
| [[NEH_CMD_PLAY2]]                 || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]]
|-
| [[NEH_RESTOREGAME]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[NEXUIZ_PLAYERMODEL]]            || [[DarkPlaces]]
|-
| [[NXQ_GFX_LETTERBOX]]             || [[DarkPlaces]]
|-
| [[PRYDON_CLIENTCURSOR]]           || [[DarkPlaces]]
|-
| [[QSG_FILE]]                      || [[FrikQuake]] [[Telejano]] [[ToChriS]]
|-
| [[QSG_DIMENSIONAL]]               ||
|-
| [[QSG_NO_CENTERPRINT]]            || [[FungusQC]]
|-
| [[QSG_NO_MDL]]                    || [[FungusQC]]
|-
| [[QSG_NO_NETCODE_Q1]]             || [[FungusQC]]
|-
| [[QW_ENGINE]]                     || [[FTE]]
|-
| [[QWE_MVD_RECORD]]                || [[FTE]]
|-
| [[TEI_AUTOANIMATION]]             || [[Telejano]]
|-
| [[TEI_AUTOFLUOR]]                 || [[Telejano]]
|-
| [[TEI_AUTOFOGWATER]]              || [[Telejano]]
|-
| [[TEI_AUTOFOOT]]                  || [[Telejano]]
|-
| [[TEI_AUTOLAVA]]                  || [[Telejano]]
|-
| [[TEI_AUTOLIGHTDAY]]              || [[Telejano]]
|-
| [[TEI_AUTORAIN]]                  || [[Telejano]]
|-
| [[TEI_AUTOSNOW]]                  || [[Telejano]]
|-
| [[TEI_AUTOVANISH]]                || [[Telejano]]
|-
| [[TEI_AUTOZING]]                  || [[Telejano]]
|-
| [[TEI_BOB2]]                      || [[Telejano]]
|-
| [[TEI_EF_EXTRA]]                  || [[Telejano]]
|-
| [[TEI_EF2_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_EF3_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_HUDMANAGER]]                || [[Telejano]]
|-
| [[TEI_LOCALMENUS1]]               || [[Telejano]]
|-
| [[TEI_LOCALMENUS2]]               || [[Telejano]]
|-
| [[TEI_MAPMODELS]]                 || [[Telejano]]
|-
| [[TEI_MD3_MODEL]]                 || [[FTE]] [[Telejano]]
|-
| [[TEI_MENU_MISC2]]                || [[Telejano]]
|-
| [[TEI_MOD_PROGS]]                 || [[Telejano]]
|-
| [[TEI_MODPREDATOR]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETIC]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETICFOLLOW]]         || [[Telejano]]
|-
| [[TEI_MOVRELATIVESTATIC]]         || [[Betwix]] [[Telejano]]
|-
| [[TEI_SHOWLMP2]]                  || [[FTE]] [[Telejano]]
|-
| [[TEI_SHOWLMP3]]                  || [[Telejano]]
|-
| [[TEI_STATCOUNT]]                 || [[Telejano]]
|-
| [[TEI_STATICFX]]                  || [[Telejano]]
|-
| [[TEI_STEPSIZE]]                  || [[Telejano]]
|-
| [[TEI_SUN]]                       || [[Telejano]]
|-
| [[TEI_SVSKY]]                     || [[Telejano]]
|-
| [[TEI_TE_ALIENEXPLOSION]]         || [[Telejano]]
|-
| [[TEI_TE_CUSTOMFX]]               || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL]]         || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL2]]        || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL3]]        || [[Telejano]]
|-
| [[TEI_TE_IMPLOSIONFX]]            || [[Telejano]]
|-
| [[TEI_TE_LIGHTNING4]]             || [[Telejano]]
|-
| [[TEI_TE_LIGHTNINGX]]             || [[Telejano]]
|-
| [[TEI_TE_PARTICLEBLAST]]          || [[Telejano]]
|-
| [[TEI_TE_STATICFOG]]              || [[Telejano]]
|-
| [[TEI_TE_TRAILS]]                 || [[Telejano]]
|-
| [[TEI_THEMEFOLDER]]               || [[Telejano]]
|-
| [[TEI_TPAKLOAD]]                  || [[Telejano]]
|-
| [[TEI_ZONEFOGS]]                  || [[Telejano]]
|-
| [[TENEBRAE_GFX_DLIGHTS]]          || [[DarkPlaces]]
|-
| [[TIMESCALE]]                     ||
|-
| [[TQ_DLIGHTS]]                    || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_PLASMA]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAILTRAIL]]                  || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAIN]]                       || [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SLOWMO]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SNOW]]                       || [[FrikQuake]] [[Telejano]] [[TomazQuake]]
|-
| [[TW_SV_STEPCONTROLS]]            || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Twilight]]
|-
| [[UDC_EXTEFFECT]]                 ||
|-
| [[VEN_SCRIPT_PARTICLES]]          || [[Vengeance r2]]
|-
| [[ZQ_CLIENTCOMMAND]]              || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_INPUTBUTTONS]]               || [[ZQuake]]
|-
| [[ZQ_ITEMS2]]                     || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NOCLIP]] (QW)       || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_FLY]] (QW)          || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NONE]] (QW)         || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_PAUSE]]                      || [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_QC_PARTICLE]] (QW)           || [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_STRINGS]]                 || [[ezQuake]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_TOKENIZE]]                || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_SETINFO]]                    || [[ZQuake]]
|-
| [[ZQ_SOUNDTOCLIENT]]              || [[ZQuake]]
|-
| [[ZQ_VWEP]]                       || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
|}

===See Also===
* http://web.archive.org/web/*/http://www.quakesrc.org/registry.php</text>
      <sha1>k5l7ibrg3f8kum3qg0cduqzrdvoyd91</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>900</id>
      <parentid>558</parentid>
      <timestamp>2008-07-07T09:58:20Z</timestamp>
      <contributor>
        <ip>79.69.20.187</ip>
      </contributor>
      <text xml:space="preserve" bytes="21976">Thanks to a cooperative effort between [[QuakeSrc]], LordHavoc and Tomaz a variety of new engines support a Extension-Detection system called, for the purposes of this wiki, &quot;QSG Extensions&quot;. These are meant to be used by [[QuakeC]] modders to expand and make use of the new engine features without breaking compatability with other engines ([[Prydon Gate]] is a good example of how this can be done).

For more information on how to use these, read about the [[checkextension]] builtin.

QSG Extensions are a powerful method. Mods addapt to higher and lower profiles, and engine coders dont need to stop to add new features, and QuakeC modders dont need to stop using it. But doing in the right way, everybody can run mods.

Notes:

* [[DarkPlaces]] and [[TomazQuake]] support most of the old QSG keys. Actually this keys have the widen support betwen engines.
* [[Telejano]] adds a lot of new QSG keys, but most are undocumented.
* The new [[DarkPlaces]] builds add some new and very interesting keys.
* [[FTE QuakeWorld]] adds a whole new spon on things. Visit [How FTE is broken] for more information.
* You can deactivate normal features with QSG keys. Example: If you create a engine that not support centerprints. You can use QSG_NO_CENTERPRINT. If you mod its coded checking that centerprint, will run on your engine with no-centerprint and on engines with centerprint. Negative QSG keys are usefull to use Quake1 mods with other engines that can load progs.dat files, like [[FungusQC]].
* [[Builtin ranges]]

{|style=&quot;border:1px solid #000000&quot;
|-
|align=&quot;center&quot;| '''Name'''
|align=&quot;center&quot;| '''Supported by'''
|-
| [[BX_COLOREDTEXT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_CON_DEL]]                    || [[Betwix]]
|-
| [[BX_CON_EXT]]                    || [[Betwix]]
|-
| [[BX_CON_TEXREPLACE]]             || [[Betwix]]
|-
| [[BX_CON_VAR]]                    || [[Betwix]]
|-
| [[BX_CON_WRITECONFIG]]            || [[Betwix]]
|-
| [[BX_ENGINE]]                     || [[Betwix]]
|-
| [[BX_ENT_BOUNCESCALE]]            || [[Betwix]]
|-
| [[BX_ENT_FRICTION]]               || [[Betwix]]
|-
| [[BX_ENT_MODELFLAGS]]             || [[Betwix]]
|-
| [[BX_GFX_SKYBOX]]                 || [[Betwix]]
|-
| [[BX_GFX_SUN]]                    || [[Betwix]]
|-
| [[BX_INPUTBUTTONS]]               || [[Betwix]]
|-
| [[BX_MDLOVERRIDE]]                || [[Betwix]]
|-
| [[BX_MULTIPLEFONTS]]              || [[Betwix]]
|-
| [[BX_P_M_SUPPORT]]                || [[Betwix]]
|-
| [[BX_QC_CAMERA]]                  || [[Betwix]]
|-
| [[BX_QC_CHECKFOV]]                || [[Betwix]]
|-
| [[BX_QC_FINDFIELDCHAIN]]          || [[Betwix]]
|-
| [[BX_QC_GETDATETIME]]             || [[Betwix]]
|-
| [[BX_QC_INIFILE]]                 || [[Betwix]]
|-
| [[BX_QC_MSGREAD]]                 || [[Betwix]]
|-
| [[BX_QC_PROGPARMS]]               || [[Betwix]]
|-
| [[BX_QC_PROTOCOL_FLAGS]]          || [[Betwix]]
|-
| [[BX_QC_SOUNDTEAM]]               || [[Betwix]]
|-
| [[BX_QC_SPRINTF]]                 || [[Betwix]]
|-
| [[BX_QC_STR]]                     || [[Betwix]]
|-
| [[BX_QC_VECMATH]]                 || [[Betwix]]
|-
| [[BX_QC_VISIBLE]]                 || [[Betwix]]
|-
| [[BX_SERVERPROGS]]                || [[Betwix]]
|-
| [[BX_SND_MUSIC]]                  || [[Betwix]]
|-
| [[BX_SV_LOCKCVARCMD]]             || [[Betwix]]
|-
| [[BX_SV_PARSESAY]]                || [[Betwix]]
|-
| [[BX_SV_UPDATE_CLIENTCVARS]]      || [[Betwix]]
|-
| [[BX_WAL_SUPPORT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_WEAPONBOB]]                  || [[Betwix]]
|-
| [[DP_BUTTONCHAT]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_BUTTONUSE]]                  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_CGAME]]                      || [[DarkPlaces]]
|-
| [[DP_CL_LOADSKY]]                 || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[ToChriS]] [[Vengeance r2]]
|-
| [[DP_CON_ALIASPARAMETERS]]        || [[DarkPlaces]]
|-
| [[DP_CON_EXPANDCVAR]]             || [[DarkPlaces]]
|-
| [[DP_CON_SET]]                    || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]] [[ezQuake]] [[ZQuake]]
|-
| [[DP_CON_SETA]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_CON_STARTMAP]]               || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_ADDITIVE]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_BLUE]]                    || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_DOUBLESIDED]]             || [[DarkPlaces]]
|-
| [[DP_EF_FLAME]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_FULLBRIGHT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NODEPTHTEST]]             || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_NODRAW]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NOGUNBOB]]                || [[DarkPlaces]]
|-
| [[DP_EF_NOSHADOW]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_EF_RED]]                     || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_STARDUST]]                || [[DarkPlaces]]
|-
| [[DP_ENT_ALPHA]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_ENT_COLORMOD]]               || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_ENT_CUSTOMCOLORMAP]]         || [[DarkPlaces]]
|-
| [[DP_ENT_DELTACOMPRESS]]          ||
|-
| [[DP_ENT_EXTERIORMODELTOCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_ENT_GLOW]]                   || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_ENT_LOWPRECISION]]           || [[DarkPlaces]]
|-
| [[DP_ENT_SCALE]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]]
|-
| [[DP_ENT_VIEWMODEL]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_EXTERNALTEXTURES]]       || [[DarkPlaces]]
|-
| [[DP_GFX_EXTERNALTEXTURES_PERMAPTEXTURES]] || [[DarkPlaces]]
|-
| [[DP_GFX_FOG]]                    || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_GFX_QUAKE3MODELTAGS]]        || [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_SKINFILES]]              || [[DarkPlaces]]
|-
| [[DP_GFX_SKYBOX]]                 || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_HALFLIFE_MAP]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_MAP_CVAR]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FTE]] [[ZQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_SPRITE]]            || [[DarkPlaces]]
|-
| [[DP_INPUTBUTTONS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_LITSPRITES]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_LITSUPPORT]]                 || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_MD3_TAGSINFO]]               ||
|-
| [[DP_MONSTERWALK]]                || [[DarkPlaces]] [[FTE]] [[Telejano]] [[ZQuake]]
|-
| [[DP_MOVETYPEBOUNCEMISSILE]]      || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_MOVETYPEFOLLOW]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_QC_DP_QC_ASINACOSATANATAN2TAN]] || [[DarkPlaces]]
|-
| [[DP_QC_CHANGEPITCH]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_COPYENTITY]]              || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[Vengeance r2]]
|-
| [[DP_QC_CVAR_DEFSTRING]]          || [[DarkPlaces]]
|-
| [[DP_QC_CVAR_STRING]]             || [[Betwix]] [[DarkPlaces]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[DP_QC_ETOS]]                    || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_ENTITYDATA]]              || [[DarkPlaces]]
|-
| [[DP_QC_FINDCHAIN]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDCHAINFLAGS]]          || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDCHAINFLOAT]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDFLAGS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDFLOAT]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]] [[QMB]] [[FuhQuake]]
|-
| [[DP_QC_FS_SEARCH]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_GETLIGHT]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_QC_GETSURFACE]]              || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_QC_GETTAGINFO]]              || [[DarkPlaces]]
|-
| [[DP_QC_MINMAXBOUND]]             || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_MULTIPLETEMPSTRINGS]]     || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_RANDOMVEC]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[MVDSV]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_SINCOSSQRTPOW]]           || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_STRFTIME]]                || [[DarkPlaces]]
|-
| [[DP_QC_STRINGCOLORFUNCTIONS]]    || [[DarkPlaces]]
|-
| [[DP_QC_STRING_CASE_FUNCTIONS]]   || [[DarkPlaces]]
|-
| [[DP_QC_STRREPLACE]]              || [[DarkPlaces]]
|-
| [[DP_QC_TOKENIZEBYSEPARATOR]]     || [[DarkPlaces]]
|-
| [[DP_QC_TRACE_MOVETYPE_HITMODEL]] || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]|| [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPES]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACEBOX]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[MVDSV]] [[QMB]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_QC_TRACETOSS]]               || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_UNLIMITEDTEMPSTRINGS]]    || [[DarkPlaces]]
|-
| [[DP_QC_VECTORVECTORS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_VECTOANGLES_WITH_ROLL]]   || [[DarkPlaces]]
|-
| [[DP_QUAKE2_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_QUAKE2_SPRITE]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MAP]]                 || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_REGISTERCVAR]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_SENSITIVITYSCALE]]           || [[Betwix]]
|-
| [[DP_SND_DIRECTIONLESSATTNNONE]]  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SND_FAKETRACKS]]             || [[DarkPlaces]]
|-
| [[DP_SND_OGGVORBIS]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SND_STEREOWAV]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SOLIDCORPSE]]                || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SPRITE32]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_SV_BOTCLIENT]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTCOLORS]]            || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTNAME]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CUSTOMIZEENTITYFORCLIENT]] || [[DarkPlaces]]
|-
| [[DP_SV_DRAWONLYTOCLIENT]]        || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_DRAWONLYTOTEAM]]          || [[Betwix]]
|-
| [[DP_SV_DROPCLIENT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_SV_EFFECT]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_ENTITYCONTENTSTRANSITION]] || [[DarkPlaces]]
|-
| [[DP_SV_EXTERIORMODELFORCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_MODELFLAGS_AS_EFFECTS]]   || [[DarkPlaces]]
|-
| [[DP_SV_NETADDRESS]]              || [[DarkPlaces]]
|-
| [[DP_SV_NODRAWTOCLIENT]]          || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_ONENTITYNOSPAWNFUNCTION]] || [[DarkPlaces]]
|-
| [[DP_SV_PING]]                    || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_PLAYERPHYSICS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_POINTPARTICLES]]          || [[DarkPlaces]]
|-
| [[DP_SV_POINTSOUND]]              || [[DarkPlaces]]
|-
| [[DP_SV_PRINT]]                   || [[DarkPlaces]]
|-
| [[DP_SV_PRECACHEANYTIME]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PUNCHVECTOR]]             || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_ROTATINGBMODEL]]          || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_SV_SETCOLOR]]                || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]]
|-
| [[DP_SV_SLOWMO]]                  || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SV_WRITEUNTERMINATEDSTRING]] || [[DarkPlaces]] [[ezQuake]] [[FTE]]
|-
| [[DP_TE_BLOOD]]                   || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_BLOODSHOWER]]             || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_CUSTOMFLASH]]             || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_EXPLOSIONRGB]]            || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_FLAMEJET]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLECUBE]]            || [[DarkPlaces]] [[QMB]]
|-
| [[DP_TE_PARTICLERAIN]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLESNOW]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PLASMABURN]]              || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_QUADEFFECTS1]]            || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_SMALLFLASH]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_SPARK]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_TE_STANDARDEFFECTBUILTINS]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_TRACE_HITCONTENTSMASK_SURFACEINFO]] || [[DarkPlaces]]
|-
| [[DP_VIEWZOOM]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_WEAPONSKIN]]                 || [[Betwix]]
|-
| [[EXT_BITSHIFT]]                  || [[DarkPlaces]] [[Betwix]] [[FTE]]
|-
| [[EXT_CSQC]]                      || [[DarkPlaces]] [[FTE]]
|-
| [[EXT_DIMENSION_GHOST]]           || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_PHYSICS]]         || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_VISIBILITY]]      || [[Betwix]] [[FTE]]
|-
| [[FTE_CALLTIMEOFDAY]]             || [[Betwix]] [[MVDSV]] [[FTE]]
|-
| [[FTE_EXTENDEDTEXTCODES]]         || [[FTE]]
|-
| [[FTE_FORCEINFOKEY]]              || [[FTE]]
|-
| [[FTE_GFX_QUAKE3SHADERS]]         || [[FTE]]
|-
| [[FTE_HEXEN2]]                    || [[FTE]]
|-
| [[FTE_MEDIA_AVI]]                 || [[FTE]]
|-
| [[FTE_MEDIA_CIN]]                 || [[FTE]]
|-
| [[FTE_MEDIA_ROQ]]                 || [[FTE]]
|-
| [[FTE_MULTIPROGS]]                || [[FTE]]
|-
| [[FTE_MULTITHREADED]]             || [[FTE]]
|-
| [[FTE_MVD_PLAYBACK]]              || [[FTE]]
|-
| [[FTE_NPCCHAT]]                   || [[FTE]]
|-
| [[FTE_PEXT_BULLETENS]]            || [[FTE]]
|-
| [[FTE_PEXT_CUSTOMTENTS]]          || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL2]]           || [[FTE]]
|-
| [[FTE_PEXT_FATNESS]]              || [[FTE]]
|-
| [[FTE_PEXT_HULLSIZE]]             || [[FTE]]
|-
| [[FTE_PEXT_LIGHTSTYLECOL]]        || [[FTE]]
|-
| [[FTE_PEXT_LIGHTUPDATES]]         || [[FTE]]
|-
| [[FTE_PEXT_MODELDBL]]             || [[FTE]]
|-
| [[FTE_PEXT_ORIGINDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_Q2BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_Q3BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_SETVIEW]]              || [[FTE]]
|-
| [[FTE_PEXT_SPAWNSTATIC]]          || [[FTE]]
|-
| [[FTE_PEXT_TE_BULLET]]            || [[FTE]]
|-
| [[FTE_PEXT_VIEW2]]                || [[FTE]]
|-
| [[FTE_PEXT_VWEAP]]                || [[FTE]]
|-
| [[FTE_PEXT_ZLIBDL]]               || [[FTE]]
|-
| [[FTE_QC_CHECKPVS]]               || [[FTE]] [[ZQuake]]
|-
| [[FTE_QC_MATCHCLIENTNAME]]        || [[FTE]]
|-
| [[FTE_QC_PAUSED]]                 || [[FTE]]
|-
| [[FTE_QC_SENDPACKET]]             || [[FTE]]
|-
| [[FTE_QC_TRACETRIGGER]]           || [[FTE]]
|-
| [[FTE_SOLID_LADDER]]              || [[FTE]]
|-
| [[FTE_STRINGS]]                   || [[FTE]]
|-
| [[FTE_SV_REENTER]]                || [[FTE]]
|-
| [[FTE_TE_STANDARDEFFECTBUILTINS]] || [[FTE]]
|-
| [[FTE_VALID_VEC_HULL3]]           || [[FTE]]
|-
| [[FRIK_FILE]]                     || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[GQ]] [[Telejano]] [[Vengeance r2]]
|-
| [[KRIMZON_SV_PARSECLIENTCOMMAND]] || [[Betwix]] [[DarkPlaces]] [[FTE]] [[FuhQuake]]
|-
| [[NEH_CMD_PLAY2]]                 || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]]
|-
| [[NEH_RESTOREGAME]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[NEXUIZ_PLAYERMODEL]]            || [[DarkPlaces]]
|-
| [[NXQ_GFX_LETTERBOX]]             || [[DarkPlaces]]
|-
| [[PRYDON_CLIENTCURSOR]]           || [[DarkPlaces]]
|-
| [[QSG_FILE]]                      || [[FrikQuake]] [[Telejano]] [[ToChriS]]
|-
| [[QSG_DIMENSIONAL]]               ||
|-
| [[QSG_NO_CENTERPRINT]]            || [[FungusQC]]
|-
| [[QSG_NO_MDL]]                    || [[FungusQC]]
|-
| [[QSG_NO_NETCODE_Q1]]             || [[FungusQC]]
|-
| [[QW_ENGINE]]                     || [[FTE]]
|-
| [[QWE_MVD_RECORD]]                || [[FTE]]
|-
| [[TEI_AUTOANIMATION]]             || [[Telejano]]
|-
| [[TEI_AUTOFLUOR]]                 || [[Telejano]]
|-
| [[TEI_AUTOFOGWATER]]              || [[Telejano]]
|-
| [[TEI_AUTOFOOT]]                  || [[Telejano]]
|-
| [[TEI_AUTOLAVA]]                  || [[Telejano]]
|-
| [[TEI_AUTOLIGHTDAY]]              || [[Telejano]]
|-
| [[TEI_AUTORAIN]]                  || [[Telejano]]
|-
| [[TEI_AUTOSNOW]]                  || [[Telejano]]
|-
| [[TEI_AUTOVANISH]]                || [[Telejano]]
|-
| [[TEI_AUTOZING]]                  || [[Telejano]]
|-
| [[TEI_BOB2]]                      || [[Telejano]]
|-
| [[TEI_EF_EXTRA]]                  || [[Telejano]]
|-
| [[TEI_EF2_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_EF3_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_HUDMANAGER]]                || [[Telejano]]
|-
| [[TEI_LOCALMENUS1]]               || [[Telejano]]
|-
| [[TEI_LOCALMENUS2]]               || [[Telejano]]
|-
| [[TEI_MAPMODELS]]                 || [[Telejano]]
|-
| [[TEI_MD3_MODEL]]                 || [[FTE]] [[Telejano]]
|-
| [[TEI_MENU_MISC2]]                || [[Telejano]]
|-
| [[TEI_MOD_PROGS]]                 || [[Telejano]]
|-
| [[TEI_MODPREDATOR]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETIC]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETICFOLLOW]]         || [[Telejano]]
|-
| [[TEI_MOVRELATIVESTATIC]]         || [[Betwix]] [[Telejano]]
|-
| [[TEI_SHOWLMP2]]                  || [[FTE]] [[Telejano]]
|-
| [[TEI_SHOWLMP3]]                  || [[Telejano]]
|-
| [[TEI_STATCOUNT]]                 || [[Telejano]]
|-
| [[TEI_STATICFX]]                  || [[Telejano]]
|-
| [[TEI_STEPSIZE]]                  || [[Telejano]]
|-
| [[TEI_SUN]]                       || [[Telejano]]
|-
| [[TEI_SVSKY]]                     || [[Telejano]]
|-
| [[TEI_TE_ALIENEXPLOSION]]         || [[Telejano]]
|-
| [[TEI_TE_CUSTOMFX]]               || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL]]         || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL2]]        || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL3]]        || [[Telejano]]
|-
| [[TEI_TE_IMPLOSIONFX]]            || [[Telejano]]
|-
| [[TEI_TE_LIGHTNING4]]             || [[Telejano]]
|-
| [[TEI_TE_LIGHTNINGX]]             || [[Telejano]]
|-
| [[TEI_TE_PARTICLEBLAST]]          || [[Telejano]]
|-
| [[TEI_TE_STATICFOG]]              || [[Telejano]]
|-
| [[TEI_TE_TRAILS]]                 || [[Telejano]]
|-
| [[TEI_THEMEFOLDER]]               || [[Telejano]]
|-
| [[TEI_TPAKLOAD]]                  || [[Telejano]]
|-
| [[TEI_ZONEFOGS]]                  || [[Telejano]]
|-
| [[TENEBRAE_GFX_DLIGHTS]]          || [[DarkPlaces]]
|-
| [[TIMESCALE]]                     ||
|-
| [[TQ_DLIGHTS]]                    || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_PLASMA]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAILTRAIL]]                  || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAIN]]                       || [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SLOWMO]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SNOW]]                       || [[FrikQuake]] [[Telejano]] [[TomazQuake]]
|-
| [[TW_SV_STEPCONTROLS]]            || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Twilight]]
|-
| [[UDC_EXTEFFECT]]                 ||
|-
| [[VEN_SCRIPT_PARTICLES]]          || [[Vengeance r2]]
|-
| [[ZQ_CLIENTCOMMAND]]              || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_INPUTBUTTONS]]               || [[ZQuake]]
|-
| [[ZQ_ITEMS2]]                     || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NOCLIP]] (QW)       || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_FLY]] (QW)          || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NONE]] (QW)         || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_PAUSE]]                      || [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_QC_PARTICLE]] (QW)           || [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_STRINGS]]                 || [[ezQuake]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_TOKENIZE]]                || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_SETINFO]]                    || [[ZQuake]]
|-
| [[ZQ_SOUNDTOCLIENT]]              || [[ZQuake]]
|-
| [[ZQ_VWEP]]                       || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
|}

===See Also===
* http://web.archive.org/web/*/http://www.quakesrc.org/registry.php</text>
      <sha1>a46vqikaw1fwas78gss6jtdtukgvrmd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1849</id>
      <parentid>900</parentid>
      <timestamp>2013-03-25T00:30:42Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="22000">Thanks to a cooperative effort between [[QuakeSrc]], LordHavoc and Tomaz a variety of new engines support a Extension-Detection system called, for the purposes of this wiki, &quot;QSG Extensions&quot;. These are meant to be used by [[QuakeC]] modders to expand and make use of the new engine features without breaking compatability with other engines ([[Prydon Gate]] is a good example of how this can be done).

For more information on how to use these, read about the [[checkextension]] builtin.

QSG Extensions are a powerful method. Mods addapt to higher and lower profiles, and engine coders dont need to stop to add new features, and QuakeC modders dont need to stop using it. But doing in the right way, everybody can run mods.

Notes:

* [[DarkPlaces]] and [[TomazQuake]] support most of the old QSG keys. Actually this keys have the widen support betwen engines.
* [[Telejano]] adds a lot of new QSG keys, but most are undocumented.
* The new [[DarkPlaces]] builds add some new and very interesting keys.
* [[FTE QuakeWorld]] adds a whole new spon on things. Visit [How FTE is broken] for more information.
* You can deactivate normal features with QSG keys. Example: If you create a engine that not support centerprints. You can use QSG_NO_CENTERPRINT. If you mod its coded checking that centerprint, will run on your engine with no-centerprint and on engines with centerprint. Negative QSG keys are usefull to use Quake1 mods with other engines that can load progs.dat files, like [[FungusQC]].
* [[Builtin ranges]]

{|style=&quot;border:1px solid #000000&quot;
|-
|align=&quot;center&quot;| '''Name'''
|align=&quot;center&quot;| '''Supported by'''
|-
| [[BX_COLOREDTEXT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_CON_DEL]]                    || [[Betwix]]
|-
| [[BX_CON_EXT]]                    || [[Betwix]]
|-
| [[BX_CON_TEXREPLACE]]             || [[Betwix]]
|-
| [[BX_CON_VAR]]                    || [[Betwix]]
|-
| [[BX_CON_WRITECONFIG]]            || [[Betwix]]
|-
| [[BX_ENGINE]]                     || [[Betwix]]
|-
| [[BX_ENT_BOUNCESCALE]]            || [[Betwix]]
|-
| [[BX_ENT_FRICTION]]               || [[Betwix]]
|-
| [[BX_ENT_MODELFLAGS]]             || [[Betwix]]
|-
| [[BX_GFX_SKYBOX]]                 || [[Betwix]]
|-
| [[BX_GFX_SUN]]                    || [[Betwix]]
|-
| [[BX_INPUTBUTTONS]]               || [[Betwix]]
|-
| [[BX_MDLOVERRIDE]]                || [[Betwix]]
|-
| [[BX_MULTIPLEFONTS]]              || [[Betwix]]
|-
| [[BX_P_M_SUPPORT]]                || [[Betwix]]
|-
| [[BX_QC_CAMERA]]                  || [[Betwix]]
|-
| [[BX_QC_CHECKFOV]]                || [[Betwix]]
|-
| [[BX_QC_FINDFIELDCHAIN]]          || [[Betwix]]
|-
| [[BX_QC_GETDATETIME]]             || [[Betwix]]
|-
| [[BX_QC_INIFILE]]                 || [[Betwix]]
|-
| [[BX_QC_MSGREAD]]                 || [[Betwix]]
|-
| [[BX_QC_PROGPARMS]]               || [[Betwix]]
|-
| [[BX_QC_PROTOCOL_FLAGS]]          || [[Betwix]]
|-
| [[BX_QC_SOUNDTEAM]]               || [[Betwix]]
|-
| [[BX_QC_SPRINTF]]                 || [[Betwix]]
|-
| [[BX_QC_STR]]                     || [[Betwix]]
|-
| [[BX_QC_VECMATH]]                 || [[Betwix]]
|-
| [[BX_QC_VISIBLE]]                 || [[Betwix]]
|-
| [[BX_SERVERPROGS]]                || [[Betwix]]
|-
| [[BX_SND_MUSIC]]                  || [[Betwix]]
|-
| [[BX_SV_LOCKCVARCMD]]             || [[Betwix]]
|-
| [[BX_SV_PARSESAY]]                || [[Betwix]]
|-
| [[BX_SV_UPDATE_CLIENTCVARS]]      || [[Betwix]]
|-
| [[BX_WAL_SUPPORT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_WEAPONBOB]]                  || [[Betwix]]
|-
| [[DP_BUTTONCHAT]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_BUTTONUSE]]                  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_CGAME]]                      || [[DarkPlaces]]
|-
| [[DP_CL_LOADSKY]]                 || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[ToChriS]] [[Vengeance r2]]
|-
| [[DP_CON_ALIASPARAMETERS]]        || [[DarkPlaces]]
|-
| [[DP_CON_EXPANDCVAR]]             || [[DarkPlaces]]
|-
| [[DP_CON_SET]]                    || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]] [[ezQuake]] [[ZQuake]]
|-
| [[DP_CON_SETA]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_CON_STARTMAP]]               || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_ADDITIVE]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_BLUE]]                    || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_DOUBLESIDED]]             || [[DarkPlaces]]
|-
| [[DP_EF_FLAME]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_FULLBRIGHT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NODEPTHTEST]]             || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_NODRAW]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NOGUNBOB]]                || [[DarkPlaces]]
|-
| [[DP_EF_NOSHADOW]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_EF_RED]]                     || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_STARDUST]]                || [[DarkPlaces]]
|-
| [[DP_ENT_ALPHA]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_ENT_COLORMOD]]               || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_ENT_CUSTOMCOLORMAP]]         || [[DarkPlaces]]
|-
| [[DP_ENT_DELTACOMPRESS]]          ||
|-
| [[DP_ENT_EXTERIORMODELTOCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_ENT_GLOW]]                   || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_ENT_LOWPRECISION]]           || [[DarkPlaces]]
|-
| [[DP_ENT_SCALE]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]]
|-
| [[DP_ENT_VIEWMODEL]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_EXTERNALTEXTURES]]       || [[DarkPlaces]]
|-
| [[DP_GFX_EXTERNALTEXTURES_PERMAPTEXTURES]] || [[DarkPlaces]]
|-
| [[DP_GFX_FOG]]                    || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_GFX_QUAKE3MODELTAGS]]        || [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_SKINFILES]]              || [[DarkPlaces]]
|-
| [[DP_GFX_SKYBOX]]                 || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_HALFLIFE_MAP]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_MAP_CVAR]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FTE]] [[ZQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_SPRITE]]            || [[DarkPlaces]]
|-
| [[DP_INPUTBUTTONS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_LITSPRITES]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_LITSUPPORT]]                 || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_MD3_TAGSINFO]]               ||
|-
| [[DP_MONSTERWALK]]                || [[DarkPlaces]] [[FTE]] [[Telejano]] [[ZQuake]]
|-
| [[DP_MOVETYPEBOUNCEMISSILE]]      || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_MOVETYPEFOLLOW]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_QC_DP_QC_ASINACOSATANATAN2TAN]] || [[DarkPlaces]]
|-
| [[DP_QC_CHANGEPITCH]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_COPYENTITY]]              || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[Vengeance r2]]
|-
| [[DP_QC_CVAR_DEFSTRING]]          || [[DarkPlaces]]
|-
| [[DP_QC_CVAR_STRING]]             || [[Betwix]] [[DarkPlaces]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[DP_QC_ETOS]]                    || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_ENTITYDATA]]              || [[DarkPlaces]]
|-
| [[DP_QC_FINDCHAIN]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDCHAINFLAGS]]          || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDCHAINFLOAT]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDFLAGS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDFLOAT]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]] [[QMB]] [[FuhQuake]]
|-
| [[DP_QC_FS_SEARCH]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_GETLIGHT]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_QC_GETSURFACE]]              || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_QC_GETTAGINFO]]              || [[DarkPlaces]]
|-
| [[DP_QC_MINMAXBOUND]]             || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_MULTIPLETEMPSTRINGS]]     || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_RANDOMVEC]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[MVDSV]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_SINCOSSQRTPOW]]           || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_STRFTIME]]                || [[DarkPlaces]]
|-
| [[DP_QC_STRINGCOLORFUNCTIONS]]    || [[DarkPlaces]]
|-
| [[DP_QC_STRING_CASE_FUNCTIONS]]   || [[DarkPlaces]]
|-
| [[DP_QC_STRREPLACE]]              || [[DarkPlaces]]
|-
| [[DP_QC_TOKENIZEBYSEPARATOR]]     || [[DarkPlaces]]
|-
| [[DP_QC_TRACE_MOVETYPE_HITMODEL]] || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]|| [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPES]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACEBOX]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[MVDSV]] [[QMB]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_QC_TRACETOSS]]               || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_UNLIMITEDTEMPSTRINGS]]    || [[DarkPlaces]]
|-
| [[DP_QC_VECTORVECTORS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_VECTOANGLES_WITH_ROLL]]   || [[DarkPlaces]]
|-
| [[DP_QUAKE2_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_QUAKE2_SPRITE]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MAP]]                 || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_REGISTERCVAR]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_SENSITIVITYSCALE]]           || [[Betwix]]
|-
| [[DP_SND_DIRECTIONLESSATTNNONE]]  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SND_FAKETRACKS]]             || [[DarkPlaces]]
|-
| [[DP_SND_OGGVORBIS]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SND_STEREOWAV]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SOLIDCORPSE]]                || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SPRITE32]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_SV_BOTCLIENT]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTCOLORS]]            || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTNAME]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CUSTOMIZEENTITYFORCLIENT]] || [[DarkPlaces]]
|-
| [[DP_SV_DRAWONLYTOCLIENT]]        || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_DRAWONLYTOTEAM]]          || [[Betwix]]
|-
| [[DP_SV_DROPCLIENT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_SV_EFFECT]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_ENTITYCONTENTSTRANSITION]] || [[DarkPlaces]]
|-
| [[DP_SV_EXTERIORMODELFORCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_MODELFLAGS_AS_EFFECTS]]   || [[DarkPlaces]]
|-
| [[DP_SV_NETADDRESS]]              || [[DarkPlaces]]
|-
| [[DP_SV_NODRAWTOCLIENT]]          || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_ONENTITYNOSPAWNFUNCTION]] || [[DarkPlaces]]
|-
| [[DP_SV_PING]]                    || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_PLAYERPHYSICS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_POINTPARTICLES]]          || [[DarkPlaces]]
|-
| [[DP_SV_POINTSOUND]]              || [[DarkPlaces]]
|-
| [[DP_SV_PRINT]]                   || [[DarkPlaces]]
|-
| [[DP_SV_PRECACHEANYTIME]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PUNCHVECTOR]]             || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_ROTATINGBMODEL]]          || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_SV_SETCOLOR]]                || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]]
|-
| [[DP_SV_SLOWMO]]                  || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SV_WRITEUNTERMINATEDSTRING]] || [[DarkPlaces]] [[ezQuake]] [[FTE]]
|-
| [[DP_TE_BLOOD]]                   || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_BLOODSHOWER]]             || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_CUSTOMFLASH]]             || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_EXPLOSIONRGB]]            || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_FLAMEJET]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLECUBE]]            || [[DarkPlaces]] [[QMB]]
|-
| [[DP_TE_PARTICLERAIN]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLESNOW]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PLASMABURN]]              || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_QUADEFFECTS1]]            || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_SMALLFLASH]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_SPARK]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_TE_STANDARDEFFECTBUILTINS]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_TRACE_HITCONTENTSMASK_SURFACEINFO]] || [[DarkPlaces]]
|-
| [[DP_VIEWZOOM]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_WEAPONSKIN]]                 || [[Betwix]]
|-
| [[EXT_BITSHIFT]]                  || [[DarkPlaces]] [[Betwix]] [[FTE]]
|-
| [[EXT_CSQC]]                      || [[DarkPlaces]] [[FTE]]
|-
| [[EXT_DIMENSION_GHOST]]           || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_PHYSICS]]         || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_VISIBILITY]]      || [[Betwix]] [[FTE]]
|-
| [[FTE_CALLTIMEOFDAY]]             || [[Betwix]] [[MVDSV]] [[FTE]]
|-
| [[FTE_EXTENDEDTEXTCODES]]         || [[FTE]]
|-
| [[FTE_FORCEINFOKEY]]              || [[FTE]]
|-
| [[FTE_GFX_QUAKE3SHADERS]]         || [[FTE]]
|-
| [[FTE_HEXEN2]]                    || [[FTE]]
|-
| [[FTE_MEDIA_AVI]]                 || [[FTE]]
|-
| [[FTE_MEDIA_CIN]]                 || [[FTE]]
|-
| [[FTE_MEDIA_ROQ]]                 || [[FTE]]
|-
| [[FTE_MULTIPROGS]]                || [[FTE]]
|-
| [[FTE_MULTITHREADED]]             || [[FTE]]
|-
| [[FTE_MVD_PLAYBACK]]              || [[FTE]]
|-
| [[FTE_NPCCHAT]]                   || [[FTE]]
|-
| [[FTE_PEXT_BULLETENS]]            || [[FTE]]
|-
| [[FTE_PEXT_CUSTOMTENTS]]          || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL2]]           || [[FTE]]
|-
| [[FTE_PEXT_FATNESS]]              || [[FTE]]
|-
| [[FTE_PEXT_HULLSIZE]]             || [[FTE]]
|-
| [[FTE_PEXT_LIGHTSTYLECOL]]        || [[FTE]]
|-
| [[FTE_PEXT_LIGHTUPDATES]]         || [[FTE]]
|-
| [[FTE_PEXT_MODELDBL]]             || [[FTE]]
|-
| [[FTE_PEXT_ORIGINDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_Q2BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_Q3BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_SETVIEW]]              || [[FTE]]
|-
| [[FTE_PEXT_SPAWNSTATIC]]          || [[FTE]]
|-
| [[FTE_PEXT_TE_BULLET]]            || [[FTE]]
|-
| [[FTE_PEXT_VIEW2]]                || [[FTE]]
|-
| [[FTE_PEXT_VWEAP]]                || [[FTE]]
|-
| [[FTE_PEXT_ZLIBDL]]               || [[FTE]]
|-
| [[FTE_QC_CHECKPVS]]               || [[FTE]] [[ZQuake]]
|-
| [[FTE_QC_MATCHCLIENTNAME]]        || [[FTE]]
|-
| [[FTE_QC_PAUSED]]                 || [[FTE]]
|-
| [[FTE_QC_SENDPACKET]]             || [[FTE]]
|-
| [[FTE_QC_TRACETRIGGER]]           || [[FTE]]
|-
| [[FTE_SOLID_LADDER]]              || [[FTE]]
|-
| [[FTE_STRINGS]]                   || [[FTE]]
|-
| [[FTE_SV_REENTER]]                || [[FTE]]
|-
| [[FTE_TE_STANDARDEFFECTBUILTINS]] || [[FTE]]
|-
| [[FTE_VALID_VEC_HULL3]]           || [[FTE]]
|-
| [[FRIK_FILE]]                     || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[GQ]] [[Telejano]] [[Vengeance r2]]
|-
| [[KRIMZON_SV_PARSECLIENTCOMMAND]] || [[Betwix]] [[DarkPlaces]] [[FTE]] [[FuhQuake]]
|-
| [[NEH_CMD_PLAY2]]                 || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]]
|-
| [[NEH_RESTOREGAME]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[NEXUIZ_PLAYERMODEL]]            || [[DarkPlaces]]
|-
| [[NXQ_GFX_LETTERBOX]]             || [[DarkPlaces]]
|-
| [[PRYDON_CLIENTCURSOR]]           || [[DarkPlaces]]
|-
| [[QSG_FILE]]                      || [[FrikQuake]] [[Telejano]] [[ToChriS]]
|-
| [[QSG_DIMENSIONAL]]               ||
|-
| [[QSG_NO_CENTERPRINT]]            || [[FungusQC]]
|-
| [[QSG_NO_MDL]]                    || [[FungusQC]]
|-
| [[QSG_NO_NETCODE_Q1]]             || [[FungusQC]]
|-
| [[QW_ENGINE]]                     || [[FTE]]
|-
| [[QWE_MVD_RECORD]]                || [[FTE]]
|-
| [[TEI_AUTOANIMATION]]             || [[Telejano]]
|-
| [[TEI_AUTOFLUOR]]                 || [[Telejano]]
|-
| [[TEI_AUTOFOGWATER]]              || [[Telejano]]
|-
| [[TEI_AUTOFOOT]]                  || [[Telejano]]
|-
| [[TEI_AUTOLAVA]]                  || [[Telejano]]
|-
| [[TEI_AUTOLIGHTDAY]]              || [[Telejano]]
|-
| [[TEI_AUTORAIN]]                  || [[Telejano]]
|-
| [[TEI_AUTOSNOW]]                  || [[Telejano]]
|-
| [[TEI_AUTOVANISH]]                || [[Telejano]]
|-
| [[TEI_AUTOZING]]                  || [[Telejano]]
|-
| [[TEI_BOB2]]                      || [[Telejano]]
|-
| [[TEI_EF_EXTRA]]                  || [[Telejano]]
|-
| [[TEI_EF2_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_EF3_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_HUDMANAGER]]                || [[Telejano]]
|-
| [[TEI_LOCALMENUS1]]               || [[Telejano]]
|-
| [[TEI_LOCALMENUS2]]               || [[Telejano]]
|-
| [[TEI_MAPMODELS]]                 || [[Telejano]]
|-
| [[TEI_MD3_MODEL]]                 || [[FTE]] [[Telejano]]
|-
| [[TEI_MENU_MISC2]]                || [[Telejano]]
|-
| [[TEI_MOD_PROGS]]                 || [[Telejano]]
|-
| [[TEI_MODPREDATOR]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETIC]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETICFOLLOW]]         || [[Telejano]]
|-
| [[TEI_MOVRELATIVESTATIC]]         || [[Betwix]] [[Telejano]]
|-
| [[TEI_SHOWLMP2]]                  || [[FTE]] [[Telejano]]
|-
| [[TEI_SHOWLMP3]]                  || [[Telejano]]
|-
| [[TEI_STATCOUNT]]                 || [[Telejano]]
|-
| [[TEI_STATICFX]]                  || [[Telejano]]
|-
| [[TEI_STEPSIZE]]                  || [[Telejano]]
|-
| [[TEI_SUN]]                       || [[Telejano]]
|-
| [[TEI_SVSKY]]                     || [[Telejano]]
|-
| [[TEI_TE_ALIENEXPLOSION]]         || [[Telejano]]
|-
| [[TEI_TE_CUSTOMFX]]               || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL]]         || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL2]]        || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL3]]        || [[Telejano]]
|-
| [[TEI_TE_IMPLOSIONFX]]            || [[Telejano]]
|-
| [[TEI_TE_LIGHTNING4]]             || [[Telejano]]
|-
| [[TEI_TE_LIGHTNINGX]]             || [[Telejano]]
|-
| [[TEI_TE_PARTICLEBLAST]]          || [[Telejano]]
|-
| [[TEI_TE_STATICFOG]]              || [[Telejano]]
|-
| [[TEI_TE_TRAILS]]                 || [[Telejano]]
|-
| [[TEI_THEMEFOLDER]]               || [[Telejano]]
|-
| [[TEI_TPAKLOAD]]                  || [[Telejano]]
|-
| [[TEI_ZONEFOGS]]                  || [[Telejano]]
|-
| [[TENEBRAE_GFX_DLIGHTS]]          || [[DarkPlaces]]
|-
| [[TIMESCALE]]                     ||
|-
| [[TQ_DLIGHTS]]                    || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_PLASMA]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAILTRAIL]]                  || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAIN]]                       || [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SLOWMO]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SNOW]]                       || [[FrikQuake]] [[Telejano]] [[TomazQuake]]
|-
| [[TW_SV_STEPCONTROLS]]            || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Twilight]]
|-
| [[UDC_EXTEFFECT]]                 ||
|-
| [[VEN_SCRIPT_PARTICLES]]          || [[Vengeance r2]]
|-
| [[ZQ_CLIENTCOMMAND]]              || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_INPUTBUTTONS]]               || [[ZQuake]]
|-
| [[ZQ_ITEMS2]]                     || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NOCLIP]] (QW)       || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_FLY]] (QW)          || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NONE]] (QW)         || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_PAUSE]]                      || [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_QC_PARTICLE]] (QW)           || [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_STRINGS]]                 || [[ezQuake]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_TOKENIZE]]                || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_SETINFO]]                    || [[ZQuake]]
|-
| [[ZQ_SOUNDTOCLIENT]]              || [[ZQuake]]
|-
| [[ZQ_VWEP]]                       || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
|}

===See Also===
* http://web.archive.org/web/*/http://www.quakesrc.org/registry.php
[[Category:DarkPlaces]]</text>
      <sha1>pl0wuz19gnj6l1aon0n1dsm80nc9zzv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2232</id>
      <parentid>1849</parentid>
      <timestamp>2013-03-26T13:25:52Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="22389">{{todo|user=[[Hectate]]|todo=It would be nice to have a version of the below table for each engine separately (together it would be too large) so a user could reference all the features available in their engine. An ideal place for this might be on the engine information page itself, but as a (default) hidden table instead so the pages aren't huge. I might pick this up sometime soon.}}
Thanks to a cooperative effort between [[QuakeSrc]], LordHavoc and Tomaz a variety of new engines support a Extension-Detection system called, for the purposes of this wiki, &quot;QSG Extensions&quot;. These are meant to be used by [[QuakeC]] modders to expand and make use of the new engine features without breaking compatability with other engines ([[Prydon Gate]] is a good example of how this can be done).

For more information on how to use these, read about the [[checkextension]] builtin.

QSG Extensions are a powerful method. Mods addapt to higher and lower profiles, and engine coders dont need to stop to add new features, and QuakeC modders dont need to stop using it. But doing in the right way, everybody can run mods.

Notes:

* [[DarkPlaces]] and [[TomazQuake]] support most of the old QSG keys. Actually this keys have the widen support betwen engines.
* [[Telejano]] adds a lot of new QSG keys, but most are undocumented.
* The new [[DarkPlaces]] builds add some new and very interesting keys.
* [[FTE QuakeWorld]] adds a whole new spon on things. Visit [How FTE is broken] for more information.
* You can deactivate normal features with QSG keys. Example: If you create a engine that not support centerprints. You can use QSG_NO_CENTERPRINT. If you mod its coded checking that centerprint, will run on your engine with no-centerprint and on engines with centerprint. Negative QSG keys are usefull to use Quake1 mods with other engines that can load progs.dat files, like [[FungusQC]].
* [[Builtin ranges]]

{|style=&quot;border:1px solid #000000&quot;
|-
|align=&quot;center&quot;| '''Name'''
|align=&quot;center&quot;| '''Supported by'''
|-
| [[BX_COLOREDTEXT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_CON_DEL]]                    || [[Betwix]]
|-
| [[BX_CON_EXT]]                    || [[Betwix]]
|-
| [[BX_CON_TEXREPLACE]]             || [[Betwix]]
|-
| [[BX_CON_VAR]]                    || [[Betwix]]
|-
| [[BX_CON_WRITECONFIG]]            || [[Betwix]]
|-
| [[BX_ENGINE]]                     || [[Betwix]]
|-
| [[BX_ENT_BOUNCESCALE]]            || [[Betwix]]
|-
| [[BX_ENT_FRICTION]]               || [[Betwix]]
|-
| [[BX_ENT_MODELFLAGS]]             || [[Betwix]]
|-
| [[BX_GFX_SKYBOX]]                 || [[Betwix]]
|-
| [[BX_GFX_SUN]]                    || [[Betwix]]
|-
| [[BX_INPUTBUTTONS]]               || [[Betwix]]
|-
| [[BX_MDLOVERRIDE]]                || [[Betwix]]
|-
| [[BX_MULTIPLEFONTS]]              || [[Betwix]]
|-
| [[BX_P_M_SUPPORT]]                || [[Betwix]]
|-
| [[BX_QC_CAMERA]]                  || [[Betwix]]
|-
| [[BX_QC_CHECKFOV]]                || [[Betwix]]
|-
| [[BX_QC_FINDFIELDCHAIN]]          || [[Betwix]]
|-
| [[BX_QC_GETDATETIME]]             || [[Betwix]]
|-
| [[BX_QC_INIFILE]]                 || [[Betwix]]
|-
| [[BX_QC_MSGREAD]]                 || [[Betwix]]
|-
| [[BX_QC_PROGPARMS]]               || [[Betwix]]
|-
| [[BX_QC_PROTOCOL_FLAGS]]          || [[Betwix]]
|-
| [[BX_QC_SOUNDTEAM]]               || [[Betwix]]
|-
| [[BX_QC_SPRINTF]]                 || [[Betwix]]
|-
| [[BX_QC_STR]]                     || [[Betwix]]
|-
| [[BX_QC_VECMATH]]                 || [[Betwix]]
|-
| [[BX_QC_VISIBLE]]                 || [[Betwix]]
|-
| [[BX_SERVERPROGS]]                || [[Betwix]]
|-
| [[BX_SND_MUSIC]]                  || [[Betwix]]
|-
| [[BX_SV_LOCKCVARCMD]]             || [[Betwix]]
|-
| [[BX_SV_PARSESAY]]                || [[Betwix]]
|-
| [[BX_SV_UPDATE_CLIENTCVARS]]      || [[Betwix]]
|-
| [[BX_WAL_SUPPORT]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[BX_WEAPONBOB]]                  || [[Betwix]]
|-
| [[DP_BUTTONCHAT]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_BUTTONUSE]]                  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_CGAME]]                      || [[DarkPlaces]]
|-
| [[DP_CL_LOADSKY]]                 || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[ToChriS]] [[Vengeance r2]]
|-
| [[DP_CON_ALIASPARAMETERS]]        || [[DarkPlaces]]
|-
| [[DP_CON_EXPANDCVAR]]             || [[DarkPlaces]]
|-
| [[DP_CON_SET]]                    || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]] [[ezQuake]] [[ZQuake]]
|-
| [[DP_CON_SETA]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_CON_STARTMAP]]               || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_ADDITIVE]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_BLUE]]                    || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_DOUBLESIDED]]             || [[DarkPlaces]]
|-
| [[DP_EF_FLAME]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_FULLBRIGHT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NODEPTHTEST]]             || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_EF_NODRAW]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_NOGUNBOB]]                || [[DarkPlaces]]
|-
| [[DP_EF_NOSHADOW]]                || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_EF_RED]]                     || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_EF_STARDUST]]                || [[DarkPlaces]]
|-
| [[DP_ENT_ALPHA]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_ENT_COLORMOD]]               || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_ENT_CUSTOMCOLORMAP]]         || [[DarkPlaces]]
|-
| [[DP_ENT_DELTACOMPRESS]]          ||
|-
| [[DP_ENT_EXTERIORMODELTOCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_ENT_GLOW]]                   || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_ENT_LOWPRECISION]]           || [[DarkPlaces]]
|-
| [[DP_ENT_SCALE]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]]
|-
| [[DP_ENT_VIEWMODEL]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_EXTERNALTEXTURES]]       || [[DarkPlaces]]
|-
| [[DP_GFX_EXTERNALTEXTURES_PERMAPTEXTURES]] || [[DarkPlaces]]
|-
| [[DP_GFX_FOG]]                    || [[Betwix]] [[DarkPlaces]] [[Telejano]]
|-
| [[DP_GFX_QUAKE3MODELTAGS]]        || [[DarkPlaces]] [[FTE]]
|-
| [[DP_GFX_SKINFILES]]              || [[DarkPlaces]]
|-
| [[DP_GFX_SKYBOX]]                 || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_HALFLIFE_MAP]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_MAP_CVAR]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FTE]] [[ZQuake]] [[Vengeance r2]]
|-
| [[DP_HALFLIFE_SPRITE]]            || [[DarkPlaces]]
|-
| [[DP_INPUTBUTTONS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[DP_LITSPRITES]]                 || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_LITSUPPORT]]                 || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_MD3_TAGSINFO]]               ||
|-
| [[DP_MONSTERWALK]]                || [[DarkPlaces]] [[FTE]] [[Telejano]] [[ZQuake]]
|-
| [[DP_MOVETYPEBOUNCEMISSILE]]      || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_MOVETYPEFOLLOW]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_QC_DP_QC_ASINACOSATANATAN2TAN]] || [[DarkPlaces]]
|-
| [[DP_QC_CHANGEPITCH]]             || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_COPYENTITY]]              || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[Vengeance r2]]
|-
| [[DP_QC_CVAR_DEFSTRING]]          || [[DarkPlaces]]
|-
| [[DP_QC_CVAR_STRING]]             || [[Betwix]] [[DarkPlaces]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[DP_QC_ETOS]]                    || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_ENTITYDATA]]              || [[DarkPlaces]]
|-
| [[DP_QC_FINDCHAIN]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDCHAINFLAGS]]          || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDCHAINFLOAT]]          || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_FINDFLAGS]]               || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_FINDFLOAT]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]] [[QMB]] [[FuhQuake]]
|-
| [[DP_QC_FS_SEARCH]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_GETLIGHT]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_QC_GETSURFACE]]              || [[Betwix]] [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_QC_GETTAGINFO]]              || [[DarkPlaces]]
|-
| [[DP_QC_MINMAXBOUND]]             || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_MULTIPLETEMPSTRINGS]]     || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_RANDOMVEC]]               || [[Betwix]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[MVDSV]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_SINCOSSQRTPOW]]           || [[Betwix]] [[MVDSV]] [[DarkPlaces]] [[ezQuake]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[Twilight]] [[ZQuake]]
|-
| [[DP_QC_STRFTIME]]                || [[DarkPlaces]]
|-
| [[DP_QC_STRINGCOLORFUNCTIONS]]    || [[DarkPlaces]]
|-
| [[DP_QC_STRING_CASE_FUNCTIONS]]   || [[DarkPlaces]]
|-
| [[DP_QC_STRREPLACE]]              || [[DarkPlaces]]
|-
| [[DP_QC_TOKENIZEBYSEPARATOR]]     || [[DarkPlaces]]
|-
| [[DP_QC_TRACE_MOVETYPE_HITMODEL]] || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPE_WORLDONLY]]|| [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACE_MOVETYPES]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QC_TRACEBOX]]                || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[MVDSV]] [[QMB]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_QC_TRACETOSS]]               || [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[QMB]] [[Twilight]]
|-
| [[DP_QC_UNLIMITEDTEMPSTRINGS]]    || [[DarkPlaces]]
|-
| [[DP_QC_VECTORVECTORS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Twilight]]
|-
| [[DP_QC_VECTOANGLES_WITH_ROLL]]   || [[DarkPlaces]]
|-
| [[DP_QUAKE2_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_QUAKE2_SPRITE]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MAP]]                 || [[DarkPlaces]] [[FTE]]
|-
| [[DP_QUAKE3_MODEL]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_REGISTERCVAR]]               || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[Twilight]] [[Vengeance r2]] [[ZQuake]]
|-
| [[DP_SENSITIVITYSCALE]]           || [[Betwix]]
|-
| [[DP_SND_DIRECTIONLESSATTNNONE]]  || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SND_FAKETRACKS]]             || [[DarkPlaces]]
|-
| [[DP_SND_OGGVORBIS]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SND_STEREOWAV]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SOLIDCORPSE]]                || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SPRITE32]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_SV_BOTCLIENT]]               || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTCOLORS]]            || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CLIENTNAME]]              || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_CUSTOMIZEENTITYFORCLIENT]] || [[DarkPlaces]]
|-
| [[DP_SV_DRAWONLYTOCLIENT]]        || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_DRAWONLYTOTEAM]]          || [[Betwix]]
|-
| [[DP_SV_DROPCLIENT]]              || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_SV_EFFECT]]                  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_ENTITYCONTENTSTRANSITION]] || [[DarkPlaces]]
|-
| [[DP_SV_EXTERIORMODELFORCLIENT]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_MODELFLAGS_AS_EFFECTS]]   || [[DarkPlaces]]
|-
| [[DP_SV_NETADDRESS]]              || [[DarkPlaces]]
|-
| [[DP_SV_NODRAWTOCLIENT]]          || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Telejano]] [[ToChriS]] [[TomazQuake]] [[Vengeance r2]]
|-
| [[DP_SV_ONENTITYNOSPAWNFUNCTION]] || [[DarkPlaces]]
|-
| [[DP_SV_PING]]                    || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_PLAYERPHYSICS]]           || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_POINTPARTICLES]]          || [[DarkPlaces]]
|-
| [[DP_SV_POINTSOUND]]              || [[DarkPlaces]]
|-
| [[DP_SV_PRINT]]                   || [[DarkPlaces]]
|-
| [[DP_SV_PRECACHEANYTIME]]         || [[DarkPlaces]] [[FTE]]
|-
| [[DP_SV_PUNCHVECTOR]]             || [[Betwix]] [[DarkPlaces]]
|-
| [[DP_SV_ROTATINGBMODEL]]          || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_SV_SETCOLOR]]                || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[Twilight]]
|-
| [[DP_SV_SLOWMO]]                  || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Vengeance r2]]
|-
| [[DP_SV_WRITEUNTERMINATEDSTRING]] || [[DarkPlaces]] [[ezQuake]] [[FTE]]
|-
| [[DP_TE_BLOOD]]                   || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_BLOODSHOWER]]             || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_CUSTOMFLASH]]             || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_EXPLOSIONRGB]]            || [[DarkPlaces]] [[FTE]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_FLAMEJET]]                || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLECUBE]]            || [[DarkPlaces]] [[QMB]]
|-
| [[DP_TE_PARTICLERAIN]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PARTICLESNOW]]            || [[DarkPlaces]] [[QMB]] [[Vengeance r2]]
|-
| [[DP_TE_PLASMABURN]]              || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_QUADEFFECTS1]]            || [[DarkPlaces]] [[FTE]] [[Vengeance r2]]
|-
| [[DP_TE_SMALLFLASH]]              || [[DarkPlaces]] [[FTE]]
|-
| [[DP_TE_SPARK]]                   || [[DarkPlaces]] [[Vengeance r2]]
|-
| [[DP_TE_STANDARDEFFECTBUILTINS]]  || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_TRACE_HITCONTENTSMASK_SURFACEINFO]] || [[DarkPlaces]]
|-
| [[DP_VIEWZOOM]]                   || [[Betwix]] [[DarkPlaces]] [[FTE]]
|-
| [[DP_WEAPONSKIN]]                 || [[Betwix]]
|-
| [[EXT_BITSHIFT]]                  || [[DarkPlaces]] [[Betwix]] [[FTE]]
|-
| [[EXT_CSQC]]                      || [[DarkPlaces]] [[FTE]]
|-
| [[EXT_DIMENSION_GHOST]]           || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_PHYSICS]]         || [[Betwix]] [[FTE]]
|-
| [[EXT_DIMENSION_VISIBILITY]]      || [[Betwix]] [[FTE]]
|-
| [[FTE_CALLTIMEOFDAY]]             || [[Betwix]] [[MVDSV]] [[FTE]]
|-
| [[FTE_EXTENDEDTEXTCODES]]         || [[FTE]]
|-
| [[FTE_FORCEINFOKEY]]              || [[FTE]]
|-
| [[FTE_GFX_QUAKE3SHADERS]]         || [[FTE]]
|-
| [[FTE_HEXEN2]]                    || [[FTE]]
|-
| [[FTE_MEDIA_AVI]]                 || [[FTE]]
|-
| [[FTE_MEDIA_CIN]]                 || [[FTE]]
|-
| [[FTE_MEDIA_ROQ]]                 || [[FTE]]
|-
| [[FTE_MULTIPROGS]]                || [[FTE]]
|-
| [[FTE_MULTITHREADED]]             || [[FTE]]
|-
| [[FTE_MVD_PLAYBACK]]              || [[FTE]]
|-
| [[FTE_NPCCHAT]]                   || [[FTE]]
|-
| [[FTE_PEXT_BULLETENS]]            || [[FTE]]
|-
| [[FTE_PEXT_CUSTOMTENTS]]          || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_ENTITYDBL2]]           || [[FTE]]
|-
| [[FTE_PEXT_FATNESS]]              || [[FTE]]
|-
| [[FTE_PEXT_HULLSIZE]]             || [[FTE]]
|-
| [[FTE_PEXT_LIGHTSTYLECOL]]        || [[FTE]]
|-
| [[FTE_PEXT_LIGHTUPDATES]]         || [[FTE]]
|-
| [[FTE_PEXT_MODELDBL]]             || [[FTE]]
|-
| [[FTE_PEXT_ORIGINDBL]]            || [[FTE]]
|-
| [[FTE_PEXT_Q2BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_Q3BSP]]                || [[FTE]]
|-
| [[FTE_PEXT_SETVIEW]]              || [[FTE]]
|-
| [[FTE_PEXT_SPAWNSTATIC]]          || [[FTE]]
|-
| [[FTE_PEXT_TE_BULLET]]            || [[FTE]]
|-
| [[FTE_PEXT_VIEW2]]                || [[FTE]]
|-
| [[FTE_PEXT_VWEAP]]                || [[FTE]]
|-
| [[FTE_PEXT_ZLIBDL]]               || [[FTE]]
|-
| [[FTE_QC_CHECKPVS]]               || [[FTE]] [[ZQuake]]
|-
| [[FTE_QC_MATCHCLIENTNAME]]        || [[FTE]]
|-
| [[FTE_QC_PAUSED]]                 || [[FTE]]
|-
| [[FTE_QC_SENDPACKET]]             || [[FTE]]
|-
| [[FTE_QC_TRACETRIGGER]]           || [[FTE]]
|-
| [[FTE_SOLID_LADDER]]              || [[FTE]]
|-
| [[FTE_STRINGS]]                   || [[FTE]]
|-
| [[FTE_SV_REENTER]]                || [[FTE]]
|-
| [[FTE_TE_STANDARDEFFECTBUILTINS]] || [[FTE]]
|-
| [[FTE_VALID_VEC_HULL3]]           || [[FTE]]
|-
| [[FRIK_FILE]]                     || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]] [[FuhQuake]] [[QMB]] [[GQ]] [[Telejano]] [[Vengeance r2]]
|-
| [[KRIMZON_SV_PARSECLIENTCOMMAND]] || [[Betwix]] [[DarkPlaces]] [[FTE]] [[FuhQuake]]
|-
| [[NEH_CMD_PLAY2]]                 || [[Betwix]] [[DarkPlaces]] [[FrikQuake]] [[FTE]]
|-
| [[NEH_RESTOREGAME]]               || [[Betwix]] [[DarkPlaces]] [[FTE]] [[Telejano]]
|-
| [[NEXUIZ_PLAYERMODEL]]            || [[DarkPlaces]]
|-
| [[NXQ_GFX_LETTERBOX]]             || [[DarkPlaces]]
|-
| [[PRYDON_CLIENTCURSOR]]           || [[DarkPlaces]]
|-
| [[QSG_FILE]]                      || [[FrikQuake]] [[Telejano]] [[ToChriS]]
|-
| [[QSG_DIMENSIONAL]]               ||
|-
| [[QSG_NO_CENTERPRINT]]            || [[FungusQC]]
|-
| [[QSG_NO_MDL]]                    || [[FungusQC]]
|-
| [[QSG_NO_NETCODE_Q1]]             || [[FungusQC]]
|-
| [[QW_ENGINE]]                     || [[FTE]]
|-
| [[QWE_MVD_RECORD]]                || [[FTE]]
|-
| [[TEI_AUTOANIMATION]]             || [[Telejano]]
|-
| [[TEI_AUTOFLUOR]]                 || [[Telejano]]
|-
| [[TEI_AUTOFOGWATER]]              || [[Telejano]]
|-
| [[TEI_AUTOFOOT]]                  || [[Telejano]]
|-
| [[TEI_AUTOLAVA]]                  || [[Telejano]]
|-
| [[TEI_AUTOLIGHTDAY]]              || [[Telejano]]
|-
| [[TEI_AUTORAIN]]                  || [[Telejano]]
|-
| [[TEI_AUTOSNOW]]                  || [[Telejano]]
|-
| [[TEI_AUTOVANISH]]                || [[Telejano]]
|-
| [[TEI_AUTOZING]]                  || [[Telejano]]
|-
| [[TEI_BOB2]]                      || [[Telejano]]
|-
| [[TEI_EF_EXTRA]]                  || [[Telejano]]
|-
| [[TEI_EF2_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_EF3_EXTRA]]                 || [[Telejano]]
|-
| [[TEI_HUDMANAGER]]                || [[Telejano]]
|-
| [[TEI_LOCALMENUS1]]               || [[Telejano]]
|-
| [[TEI_LOCALMENUS2]]               || [[Telejano]]
|-
| [[TEI_MAPMODELS]]                 || [[Telejano]]
|-
| [[TEI_MD3_MODEL]]                 || [[FTE]] [[Telejano]]
|-
| [[TEI_MENU_MISC2]]                || [[Telejano]]
|-
| [[TEI_MOD_PROGS]]                 || [[Telejano]]
|-
| [[TEI_MODPREDATOR]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETIC]]               || [[Telejano]]
|-
| [[TEI_MOVMAGNETICFOLLOW]]         || [[Telejano]]
|-
| [[TEI_MOVRELATIVESTATIC]]         || [[Betwix]] [[Telejano]]
|-
| [[TEI_SHOWLMP2]]                  || [[FTE]] [[Telejano]]
|-
| [[TEI_SHOWLMP3]]                  || [[Telejano]]
|-
| [[TEI_STATCOUNT]]                 || [[Telejano]]
|-
| [[TEI_STATICFX]]                  || [[Telejano]]
|-
| [[TEI_STEPSIZE]]                  || [[Telejano]]
|-
| [[TEI_SUN]]                       || [[Telejano]]
|-
| [[TEI_SVSKY]]                     || [[Telejano]]
|-
| [[TEI_TE_ALIENEXPLOSION]]         || [[Telejano]]
|-
| [[TEI_TE_CUSTOMFX]]               || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL]]         || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL2]]        || [[Telejano]]
|-
| [[TEI_TE_EXPLOSIONSMALL3]]        || [[Telejano]]
|-
| [[TEI_TE_IMPLOSIONFX]]            || [[Telejano]]
|-
| [[TEI_TE_LIGHTNING4]]             || [[Telejano]]
|-
| [[TEI_TE_LIGHTNINGX]]             || [[Telejano]]
|-
| [[TEI_TE_PARTICLEBLAST]]          || [[Telejano]]
|-
| [[TEI_TE_STATICFOG]]              || [[Telejano]]
|-
| [[TEI_TE_TRAILS]]                 || [[Telejano]]
|-
| [[TEI_THEMEFOLDER]]               || [[Telejano]]
|-
| [[TEI_TPAKLOAD]]                  || [[Telejano]]
|-
| [[TEI_ZONEFOGS]]                  || [[Telejano]]
|-
| [[TENEBRAE_GFX_DLIGHTS]]          || [[DarkPlaces]]
|-
| [[TIMESCALE]]                     ||
|-
| [[TQ_DLIGHTS]]                    || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_PLASMA]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAILTRAIL]]                  || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_RAIN]]                       || [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SLOWMO]]                     || [[Betwix]] [[Telejano]] [[TomazQuake]]
|-
| [[TQ_SNOW]]                       || [[FrikQuake]] [[Telejano]] [[TomazQuake]]
|-
| [[TW_SV_STEPCONTROLS]]            || [[Betwix]] [[DarkPlaces]] [[Telejano]] [[Twilight]]
|-
| [[UDC_EXTEFFECT]]                 ||
|-
| [[VEN_SCRIPT_PARTICLES]]          || [[Vengeance r2]]
|-
| [[ZQ_CLIENTCOMMAND]]              || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_INPUTBUTTONS]]               || [[ZQuake]]
|-
| [[ZQ_ITEMS2]]                     || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NOCLIP]] (QW)       || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_FLY]] (QW)          || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_MOVETYPE_NONE]] (QW)         || [[ezQuake]] [[FTE]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_PAUSE]]                      || [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_QC_PARTICLE]] (QW)           || [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_STRINGS]]                 || [[ezQuake]] [[MVDSV]] [[FTE]] [[ZQuake]]
|-
| [[ZQ_QC_TOKENIZE]]                || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
| [[ZQ_SETINFO]]                    || [[ZQuake]]
|-
| [[ZQ_SOUNDTOCLIENT]]              || [[ZQuake]]
|-
| [[ZQ_VWEP]]                       || [[ezQuake]] [[MVDSV]] [[ZQuake]]
|-
|}

===See Also===
* http://web.archive.org/web/*/http://www.quakesrc.org/registry.php
[[Category:DarkPlaces]]</text>
      <sha1>jgfeojxfs3iext0yg9kx52hbk14042z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QUAKE.EXE</title>
    <ns>0</ns>
    <id>505</id>
    <revision>
      <id>1075</id>
      <timestamp>2009-07-12T00:19:37Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>Moved from [[Engines]]</comment>
      <text xml:space="preserve" bytes="2449">The first official engine is '''''QUAKE.EXE''''', sometimes informally referred to as DOS Quake. It is found on the official Quake CD-ROM (for the PC) and in the official shareware distribution. If your computer was built after 1997, you probably have no need for ''QUAKE.EXE''.

This engine is designed to only run from MS-DOS, because it expects to have direct access to your computer's hardware, which is something modern operating systems like Windows and Linux don't allow. So, to run the official engine, your computer must boot from the Quake CD, or you must boot into DOS or one of the DOS-based versions of Windows (Windows 95/98/Me) and then run ''QUAKE.EXE'' from the command line. The DOS-like command console in Windows NT/2000/XP/2003/Vista won't work for this, even in Win95 compatibility mode. ''QUAKE.EXE'' is able to run within [http://www.dosbox.com/ DOSBox], the free DOS-like emulator which runs on pretty much any OS, but its performance there is much worse than running in actual DOS — so much worse that it may be unplayable at all but the lowest resolutions, even on relatively fast, modern systems. Reportedly the engine does somewhat better under [http://en.wikipedia.org/wiki/Microsoft_Virtual_PC Microsoft Virtual PC].

''QUAKE.EXE'' provides software-based graphics rendering only; the graphics hardware will not provide accelerated rendering (using its own CPU), or any texture or lighting features. It's all done in the software. It's still fast, but slows down noticeably at higher resolutions and when there's a lot of action.

This engine's multiplayer networking capabilities are limited to serial cable (direct), modem-to-modem (direct), or on a LAN via TCP/IP or IPX (Novell NetWare protocol). LAN play is highly affected by ping &amp; latency between the clients and server. This was greatly improved in the QuakeWorld engine.

Official distributions:
* v1.06 of ''QUAKE.EXE'' (Oct. 1996) is contained in a [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip ''quake106.zip''], which contains an installer that unpacks all the files from an lh5 LZH-encoded archive. This is the full shareware distribution of Quake, including documentation and all the Episode 1 files (''ID1\pak0.pak''), not just the engine.
* v1.08 of ''QUAKE.EXE'' (Oct. 1997) fixes some minor bugs in 1.06, and is in [ftp://ftp.idsoftware.com/idstuff/quake/quake108.zip ''quake108.zip'']. This zip contains the updated QUAKE.EXE engine only.</text>
      <sha1>gui2raxiy1hvcl20druay0x5pro9fj1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1076</id>
      <parentid>1075</parentid>
      <timestamp>2009-07-12T00:19:59Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>link back to [[engine]]</comment>
      <text xml:space="preserve" bytes="2459">The first official Quake [[engine]] is '''''QUAKE.EXE''''', sometimes informally referred to as DOS Quake. It is found on the official Quake CD-ROM (for the PC) and in the official shareware distribution. If your computer was built after 1997, you probably have no need for ''QUAKE.EXE''.

This engine is designed to only run from MS-DOS, because it expects to have direct access to your computer's hardware, which is something modern operating systems like Windows and Linux don't allow. So, to run the official engine, your computer must boot from the Quake CD, or you must boot into DOS or one of the DOS-based versions of Windows (Windows 95/98/Me) and then run ''QUAKE.EXE'' from the command line. The DOS-like command console in Windows NT/2000/XP/2003/Vista won't work for this, even in Win95 compatibility mode. ''QUAKE.EXE'' is able to run within [http://www.dosbox.com/ DOSBox], the free DOS-like emulator which runs on pretty much any OS, but its performance there is much worse than running in actual DOS — so much worse that it may be unplayable at all but the lowest resolutions, even on relatively fast, modern systems. Reportedly the engine does somewhat better under [http://en.wikipedia.org/wiki/Microsoft_Virtual_PC Microsoft Virtual PC].

''QUAKE.EXE'' provides software-based graphics rendering only; the graphics hardware will not provide accelerated rendering (using its own CPU), or any texture or lighting features. It's all done in the software. It's still fast, but slows down noticeably at higher resolutions and when there's a lot of action.

This engine's multiplayer networking capabilities are limited to serial cable (direct), modem-to-modem (direct), or on a LAN via TCP/IP or IPX (Novell NetWare protocol). LAN play is highly affected by ping &amp; latency between the clients and server. This was greatly improved in the QuakeWorld engine.

Official distributions:
* v1.06 of ''QUAKE.EXE'' (Oct. 1996) is contained in a [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip ''quake106.zip''], which contains an installer that unpacks all the files from an lh5 LZH-encoded archive. This is the full shareware distribution of Quake, including documentation and all the Episode 1 files (''ID1\pak0.pak''), not just the engine.
* v1.08 of ''QUAKE.EXE'' (Oct. 1997) fixes some minor bugs in 1.06, and is in [ftp://ftp.idsoftware.com/idstuff/quake/quake108.zip ''quake108.zip'']. This zip contains the updated QUAKE.EXE engine only.</text>
      <sha1>gv5yd9u6oofqserb1ewss3o6zqxd733</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1080</id>
      <parentid>1076</parentid>
      <timestamp>2009-07-12T00:35:08Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>+category</comment>
      <text xml:space="preserve" bytes="2472">The first official Quake [[engine]] is '''''QUAKE.EXE''''', sometimes informally referred to as DOS Quake. It is found on the official Quake CD-ROM (for the PC) and in the official shareware distribution. If your computer was built after 1997, you probably have no need for ''QUAKE.EXE''.

This engine is designed to only run from MS-DOS, because it expects to have direct access to your computer's hardware, which is something modern operating systems like Windows and Linux don't allow. So, to run the official engine, your computer must boot from the Quake CD, or you must boot into DOS or one of the DOS-based versions of Windows (Windows 95/98/Me) and then run ''QUAKE.EXE'' from the command line. The DOS-like command console in Windows NT/2000/XP/2003/Vista won't work for this, even in Win95 compatibility mode. ''QUAKE.EXE'' is able to run within [http://www.dosbox.com/ DOSBox], the free DOS-like emulator which runs on pretty much any OS, but its performance there is much worse than running in actual DOS — so much worse that it may be unplayable at all but the lowest resolutions, even on relatively fast, modern systems. Reportedly the engine does somewhat better under [http://en.wikipedia.org/wiki/Microsoft_Virtual_PC Microsoft Virtual PC].

''QUAKE.EXE'' provides software-based graphics rendering only; the graphics hardware will not provide accelerated rendering (using its own CPU), or any texture or lighting features. It's all done in the software. It's still fast, but slows down noticeably at higher resolutions and when there's a lot of action.

This engine's multiplayer networking capabilities are limited to serial cable (direct), modem-to-modem (direct), or on a LAN via TCP/IP or IPX (Novell NetWare protocol). LAN play is highly affected by ping &amp; latency between the clients and server. This was greatly improved in the QuakeWorld engine.

Official distributions:
* v1.06 of ''QUAKE.EXE'' (Oct. 1996) is contained in a [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip ''quake106.zip''], which contains an installer that unpacks all the files from an lh5 LZH-encoded archive. This is the full shareware distribution of Quake, including documentation and all the Episode 1 files (''ID1\pak0.pak''), not just the engine.
* v1.08 of ''QUAKE.EXE'' (Oct. 1997) fixes some minor bugs in 1.06, and is in [ftp://ftp.idsoftware.com/idstuff/quake/quake108.zip ''quake108.zip'']. This zip contains the updated QUAKE.EXE engine only.

{{Engines}}</text>
      <sha1>gy0tj4kz1vwjset8gsvjtaqs1ye5qwn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1095</id>
      <parentid>1080</parentid>
      <timestamp>2009-07-20T02:07:17Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <minor/>
      <comment>boldface DOS Quake; we'll make it redirect here</comment>
      <text xml:space="preserve" bytes="2478">The first official Quake [[engine]] is '''''QUAKE.EXE''''', sometimes informally referred to as '''DOS Quake'''. It is found on the official Quake CD-ROM (for the PC) and in the official shareware distribution. If your computer was built after 1997, you probably have no need for ''QUAKE.EXE''.

This engine is designed to only run from MS-DOS, because it expects to have direct access to your computer's hardware, which is something modern operating systems like Windows and Linux don't allow. So, to run the official engine, your computer must boot from the Quake CD, or you must boot into DOS or one of the DOS-based versions of Windows (Windows 95/98/Me) and then run ''QUAKE.EXE'' from the command line. The DOS-like command console in Windows NT/2000/XP/2003/Vista won't work for this, even in Win95 compatibility mode. ''QUAKE.EXE'' is able to run within [http://www.dosbox.com/ DOSBox], the free DOS-like emulator which runs on pretty much any OS, but its performance there is much worse than running in actual DOS — so much worse that it may be unplayable at all but the lowest resolutions, even on relatively fast, modern systems. Reportedly the engine does somewhat better under [http://en.wikipedia.org/wiki/Microsoft_Virtual_PC Microsoft Virtual PC].

''QUAKE.EXE'' provides software-based graphics rendering only; the graphics hardware will not provide accelerated rendering (using its own CPU), or any texture or lighting features. It's all done in the software. It's still fast, but slows down noticeably at higher resolutions and when there's a lot of action.

This engine's multiplayer networking capabilities are limited to serial cable (direct), modem-to-modem (direct), or on a LAN via TCP/IP or IPX (Novell NetWare protocol). LAN play is highly affected by ping &amp; latency between the clients and server. This was greatly improved in the QuakeWorld engine.

Official distributions:
* v1.06 of ''QUAKE.EXE'' (Oct. 1996) is contained in a [ftp://ftp.idsoftware.com/idstuff/quake/quake106.zip ''quake106.zip''], which contains an installer that unpacks all the files from an lh5 LZH-encoded archive. This is the full shareware distribution of Quake, including documentation and all the Episode 1 files (''ID1\pak0.pak''), not just the engine.
* v1.08 of ''QUAKE.EXE'' (Oct. 1997) fixes some minor bugs in 1.06, and is in [ftp://ftp.idsoftware.com/idstuff/quake/quake108.zip ''quake108.zip'']. This zip contains the updated QUAKE.EXE engine only.

{{Engines}}</text>
      <sha1>g8r3o1y4vwgyvtjn4tutu4qitkh0619</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QuArK</title>
    <ns>0</ns>
    <id>520</id>
    <revision>
      <id>1177</id>
      <timestamp>2009-09-24T10:30:09Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>New page: QuArK (&quot;Quake Army Knife&quot;) is a GPL-licensed multi-game multi-purpose editor that runs on Windows. It supports a wide range of Quake engine games and a couple more. While QuArK is mainly a...</comment>
      <text xml:space="preserve" bytes="1491">QuArK (&quot;Quake Army Knife&quot;) is a GPL-licensed multi-game multi-purpose editor that runs on Windows. It supports a wide range of Quake engine games and a couple more. While QuArK is mainly a map editor, you can also use it to edit models and PAK files.

The interface is very newbie friendly but you might run into problems if you just start mapping like crazy. See the setup suggestions below.

== Pros ==
* If you are used to Windows, you will find the usage much more intuitive than other editors.
* Nice texture tools.
* Grouping, organising
* New versions seem to focus on featuritis instead of bug/performance fixing. Try older versions if you get a headache.

== Cons ==
* Loves to throw leaking maps at you if you are not careful.
* Is slow on bigger maps. Use groups and hide them or use less views.
* When the mouse moves outside a 3D view's boundaries, the view will reset once you release it.


== Suggested setup for Quake mapping ==
Thanks to aguirRe for these suggestions.
* Use aguirRe's tools.
* In Configuration -&gt; Games -&gt; Quake 1: Set &quot;Output Map Format&quot; to &quot;Valve 220&quot;
* Add the &quot;-etp&quot; command-line switch to Light.exe
* In Configuration -&gt; Map -&gt; Options: Check &quot;Use Integral Vertices as Threepoints&quot;
* In Configuration -&gt; Map -&gt; Options: Uncheck &quot;Don't write floating-point coords&quot;


== External Links ==
*[http://quark.sourceforge.net/ QuArK Website]
*[http://sourceforge.net/projects/quark QuArK at SourceForge]
*[http://en.wikipedia.org/wiki/QuArK QuArK at Wikipedia]</text>
      <sha1>23pulxayn1bp5k8q0f65o1x6sk3fknw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quad Damage</title>
    <ns>0</ns>
    <id>408</id>
    <revision>
      <id>694</id>
      <timestamp>2008-05-07T19:55:22Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: A quad damage will cause your weapons to dish out four times their normal power. Be careful with explosive weapons, because it's not exactly hard to kill yourself. Every time you hit a wal...</comment>
      <text xml:space="preserve" bytes="591">A quad damage will cause your weapons to dish out four times their normal power. Be careful with explosive weapons, because it's not exactly hard to kill yourself. Every time you hit a wall, it's like shooting yourself dead-on with two rockets. Yeah, ouch. Then again, there's not much that can save a player from even one quaded rocket, so if you're in an open area use them as much as possible. The best alternatives to the explosive weapons are the super nailgun and the thunderbolt - they both do plenty of damage. Just remember that you glow when you have this, so players will know it.</text>
      <sha1>a0ju6xsjsu5gkmrvmp0suv73mk1kaad</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>885</id>
      <parentid>694</parentid>
      <timestamp>2008-06-18T21:52:21Z</timestamp>
      <contributor>
        <ip>65.66.150.198</ip>
      </contributor>
      <text xml:space="preserve" bytes="608">A quad damage will cause your weapons to dish out four times their normal power. Be careful with explosive weapons, because it's not exactly hard to kill yourself. Every time you hit a wall, it's like shooting yourself dead-on with two rockets. Yeah, ouch. Then again, there's not much that can save a player from even one quaded rocket, so if you're in an open area use them as much as possible. The best alternatives to the explosive weapons are the super nailgun and the thunderbolt - they both do plenty of damage. Just remember that you glow when you have this, so players will know it.

{{Quake items}}</text>
      <sha1>nj68ihw7dz3g89krp1yy6bvlbwjhv5b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quake</title>
    <ns>0</ns>
    <id>5</id>
    <revision>
      <id>8</id>
      <timestamp>2007-10-30T16:30:00Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: '''Quake''' is the first game in the Quake series. This game pits you as a [[slipgate]] explorer, ridding the world of demons and monsters and genetically-modified humans, to save humanity...</comment>
      <text xml:space="preserve" bytes="318">'''Quake''' is the first game in the Quake series. This game pits you as a [[slipgate]] explorer, ridding the world of demons and monsters and genetically-modified humans, to save humanity from the wretched grasps of [[Shub-Niggurath]], a terrifying tentacled slop of lard.

By [http://www.idsoftware.com id Software].</text>
      <sha1>jepg915bn4e9b6ubnz0ulu9qatblvmc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>975</id>
      <parentid>8</parentid>
      <timestamp>2009-03-22T03:03:02Z</timestamp>
      <contributor>
        <ip>64.123.239.223</ip>
      </contributor>
      <text xml:space="preserve" bytes="340">'''Quake''' is the first game in the Quake series. This game pits you as a [[slipgate]] explorer, ridding the world of demons and monsters and genetically-modified humans, to save humanity from the wretched grasps of [[Shub-Niggurath]], a terrifying tentacled slop of lard.

By [http://www.idsoftware.com id Software].

[[Categories:Games]]</text>
      <sha1>tn23v1xxlmf484w3ini1wyk1sy3qpmu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1314</id>
      <parentid>975</parentid>
      <timestamp>2009-09-27T18:39:31Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="338">'''Quake''' is the first game in the Quake series. This game pits you as a [[slipgate]] explorer, ridding the world of demons and monsters and genetically-modified humans, to save humanity from the wretched grasps of [[Shub-Niggurath]], a terrifying tentacled slop of lard.

By [http://www.idsoftware.com id Software].

[[Category:Games]]</text>
      <sha1>aezvrf9gk0gxgy0nxm8p8r0lgyrxb00</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1419</id>
      <parentid>1314</parentid>
      <timestamp>2009-10-14T18:20:03Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="488">'''Quake''' is the first game in the Quake series. This game pits you as a [[slipgate]] explorer, ridding the world of demons and monsters and genetically-modified humans, to save humanity from the wretched grasps of [[Shub-Niggurath]], a terrifying tentacled slop of lard.

By [http://www.idsoftware.com id Software].

----

''This article is currently pending a significant rewrite due to its importance for the wiki, expect the current page to change drastically.''

[[Category:Games]]</text>
      <sha1>a1y39scsktl33zqdl6lw4ew8vfvr4yo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2249</id>
      <parentid>1419</parentid>
      <timestamp>2013-03-26T14:31:10Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>Added intro text (last paragraph copied from wikipedia)</comment>
      <text xml:space="preserve" bytes="2515">'''Quake''' is the first game in the Quake series. In the game, the player is cast as a [[slipgate]] explorer, travelling between different dimensions, battling hordes of zombies, demons and various [http://en.wikipedia.org/wiki/H_P_Lovecraft Lovecraftian] monsters in order to save mankind from [[Shub-Niggurath]], the final boss of the game.

Quake is notable as one of the first fully 3D games with lighting and texturing, made possible by the technical mastery of the [[id Software]] programmers. The Quake game engine was later updated to take advantage of OpenGL accelerator cards when id released [[GLQuake]], which allowed players with supported cards to run the game with more visual effects and at smoother frame-rates than when using the software renderer.

As with id Software's previous series, [http://en.wikipedia.org/wiki/Doom_(video_game) Doom], Quake featured a networked multiplayer [[Deathmatch|deathmatch]] mode, which was subsequently improved to run more smoothly over the internet with [[QuakeWorld]]. Online play became immensely popular, and many [[Mod|mods]] were released that changed the gameplay significantly, often focussing on [[Teamplay|teamplay]], such as the popular [[Team Fortress]] and [[Capture the Flag]] mods.

The game received much acclaim on release and its commercial success led to several sequels, starting with [[Quake II]], which abandoned the Gothic styling of the original for a science fiction theme. Quake has since been recognized as one of the greatest achievements of the video game industry, influencing games that came after it, as well as helping to popularise user made content such as custom levels, mods and [[Machinima|machinima]].

==History and Development==

==Plot==

==Gameplay==

==Community==

===Modifications===

===Custom levels===

===Speedrunning===

==Release and sales==

==Critical Reception==

==Legacy==




&lt;!--
This is copied from doomwiki.org's Doom page. This is an example of what kind of things we should add to this page.

http://doomwiki.org/wiki/Doom
http://en.wikipedia.org/wiki/Quake_(video_game)#Reception

Contents [hide]
1 History and development
2 Story
3 Gameplay
4 Release and sales
5 Extensibility
6 Negative reaction
7 Legal issues in Germany
8 Legacy
9 Episodes
10 Weapons
11 Monsters
12 See also
13 Sources
14 References
15 External links
--&gt;


----

''This article is currently pending a significant rewrite due to its importance for the wiki, expect the current page to change drastically.''

[[Category:Games]]</text>
      <sha1>g8l1johibv39s7l7hzwxlst0v5qtukl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2255</id>
      <parentid>2249</parentid>
      <timestamp>2013-03-26T15:00:59Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>/* Custom levels */</comment>
      <text xml:space="preserve" bytes="3613">'''Quake''' is the first game in the Quake series. In the game, the player is cast as a [[slipgate]] explorer, travelling between different dimensions, battling hordes of zombies, demons and various [http://en.wikipedia.org/wiki/H_P_Lovecraft Lovecraftian] monsters in order to save mankind from [[Shub-Niggurath]], the final boss of the game.

Quake is notable as one of the first fully 3D games with lighting and texturing, made possible by the technical mastery of the [[id Software]] programmers. The Quake game engine was later updated to take advantage of OpenGL accelerator cards when id released [[GLQuake]], which allowed players with supported cards to run the game with more visual effects and at smoother frame-rates than when using the software renderer.

As with id Software's previous series, [http://en.wikipedia.org/wiki/Doom_(video_game) Doom], Quake featured a networked multiplayer [[Deathmatch|deathmatch]] mode, which was subsequently improved to run more smoothly over the internet with [[QuakeWorld]]. Online play became immensely popular, and many [[Mod|mods]] were released that changed the gameplay significantly, often focussing on [[Teamplay|teamplay]], such as the popular [[Team Fortress]] and [[Capture the Flag]] mods.

The game received much acclaim on release and its commercial success led to several sequels, starting with [[Quake II]], which abandoned the Gothic styling of the original for a science fiction theme. Quake has since been recognized as one of the greatest achievements of the video game industry, influencing games that came after it, as well as helping to popularise user made content such as custom levels, mods and [[Machinima|machinima]].

==History and Development==

==Plot==

==Gameplay==

==Community==

===Modifications===

===Custom levels===
:''Main article: [[Custom levels]]''

Shortly after the release of Quake, id Software released [[QuakeEd]], the tool that they used to make Quake's levels with. Although QuakeEd was not useful to most people as it was released, since it was made for the powerful NeXT workstations that id used to develop the game on, it wasn't long before other editors that ran on Windows were released. This allowed gamers to start making their own levels and releasing them on the internet for other owners of the game to play.

Although the early levels released by amateur level designers were generally below the standard of the maps included with the game, as the tools improved and designers got more experienced and began to understand how everything worked, maps that equalled and in some cases exceeded the standards set by id.

Quake levels released today are often far more complex than anything id could have ever made, due to more powerful computers for compiling and playing the levels, much improved tools, better engines and the hindsight and experience having the game for over 15 years brings.

===Speedrunning===

==Release and sales==

==Critical Reception==

==Legacy==




&lt;!--
This is copied from doomwiki.org's Doom page. This is an example of what kind of things we should add to this page.

http://doomwiki.org/wiki/Doom
http://en.wikipedia.org/wiki/Quake_(video_game)#Reception

Contents [hide]
1 History and development
2 Story
3 Gameplay
4 Release and sales
5 Extensibility
6 Negative reaction
7 Legal issues in Germany
8 Legacy
9 Episodes
10 Weapons
11 Monsters
12 See also
13 Sources
14 References
15 External links
--&gt;


----

''This article is currently pending a significant rewrite due to its importance for the wiki, expect the current page to change drastically.''

[[Category:Games]]</text>
      <sha1>5m7bh6z3khzw1amez97crpx0mvne02j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2258</id>
      <parentid>2255</parentid>
      <timestamp>2013-03-26T15:06:07Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>added links to other articles (that don't yet exist)</comment>
      <text xml:space="preserve" bytes="3721">'''Quake''' is the first game in the Quake series. In the game, the player is cast as a [[slipgate]] explorer, travelling between different dimensions, battling hordes of zombies, demons and various [http://en.wikipedia.org/wiki/H_P_Lovecraft Lovecraftian] monsters in order to save mankind from [[Shub-Niggurath]], the final boss of the game.

Quake is notable as one of the first fully 3D games with lighting and texturing, made possible by the technical mastery of the [[id Software]] programmers. The Quake game engine was later updated to take advantage of OpenGL accelerator cards when id released [[GLQuake]], which allowed players with supported cards to run the game with more visual effects and at smoother frame-rates than when using the software renderer.

As with id Software's previous series, [http://en.wikipedia.org/wiki/Doom_(video_game) Doom], Quake featured a networked multiplayer [[Deathmatch|deathmatch]] mode, which was subsequently improved to run more smoothly over the internet with [[QuakeWorld]]. Online play became immensely popular, and many [[Mod|mods]] were released that changed the gameplay significantly, often focussing on [[Teamplay|teamplay]], such as the popular [[Team Fortress]] and [[Capture the Flag]] mods.

The game received much acclaim on release and its commercial success led to several sequels, starting with [[Quake II]], which abandoned the Gothic styling of the original for a science fiction theme. Quake has since been recognized as one of the greatest achievements of the video game industry, influencing games that came after it, as well as helping to popularise user made content such as custom levels, mods and [[Machinima|machinima]].

==History and Development==

==Plot==
:''Main article: [[Quake story]]''

==Gameplay==

==Community==

===Modifications===
:''Main article: [[Modifications]]''

===Custom levels===
:''Main article: [[Custom levels]]''

Shortly after the release of Quake, id Software released [[QuakeEd]], the tool that they used to make Quake's levels with. Although QuakeEd was not useful to most people as it was released, since it was made for the powerful NeXT workstations that id used to develop the game on, it wasn't long before other editors that ran on Windows were released. This allowed gamers to start making their own levels and releasing them on the internet for other owners of the game to play.

Although the early levels released by amateur level designers were generally below the standard of the maps included with the game, as the tools improved and designers got more experienced and began to understand how everything worked, maps that equalled and in some cases exceeded the standards set by id.

Quake levels released today are often far more complex than anything id could have ever made, due to more powerful computers for compiling and playing the levels, much improved tools, better engines and the hindsight and experience having the game for over 15 years brings.

===Speedrunning===
:''Main article: [[Speedrunning]]''

==Release and sales==

==Critical Reception==

==Legacy==




&lt;!--
This is copied from doomwiki.org's Doom page. This is an example of what kind of things we should add to this page.

http://doomwiki.org/wiki/Doom
http://en.wikipedia.org/wiki/Quake_(video_game)#Reception

Contents [hide]
1 History and development
2 Story
3 Gameplay
4 Release and sales
5 Extensibility
6 Negative reaction
7 Legal issues in Germany
8 Legacy
9 Episodes
10 Weapons
11 Monsters
12 See also
13 Sources
14 References
15 External links
--&gt;


----

''This article is currently pending a significant rewrite due to its importance for the wiki, expect the current page to change drastically.''

[[Category:Games]]</text>
      <sha1>skanp5tf5rju2z6cm1leyhoix2fuxod</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2271</id>
      <parentid>2258</parentid>
      <timestamp>2013-03-26T15:49:19Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>/* Custom levels */</comment>
      <text xml:space="preserve" bytes="3757">'''Quake''' is the first game in the Quake series. In the game, the player is cast as a [[slipgate]] explorer, travelling between different dimensions, battling hordes of zombies, demons and various [http://en.wikipedia.org/wiki/H_P_Lovecraft Lovecraftian] monsters in order to save mankind from [[Shub-Niggurath]], the final boss of the game.

Quake is notable as one of the first fully 3D games with lighting and texturing, made possible by the technical mastery of the [[id Software]] programmers. The Quake game engine was later updated to take advantage of OpenGL accelerator cards when id released [[GLQuake]], which allowed players with supported cards to run the game with more visual effects and at smoother frame-rates than when using the software renderer.

As with id Software's previous series, [http://en.wikipedia.org/wiki/Doom_(video_game) Doom], Quake featured a networked multiplayer [[Deathmatch|deathmatch]] mode, which was subsequently improved to run more smoothly over the internet with [[QuakeWorld]]. Online play became immensely popular, and many [[Mod|mods]] were released that changed the gameplay significantly, often focussing on [[Teamplay|teamplay]], such as the popular [[Team Fortress]] and [[Capture the Flag]] mods.

The game received much acclaim on release and its commercial success led to several sequels, starting with [[Quake II]], which abandoned the Gothic styling of the original for a science fiction theme. Quake has since been recognized as one of the greatest achievements of the video game industry, influencing games that came after it, as well as helping to popularise user made content such as custom levels, mods and [[Machinima|machinima]].

==History and Development==

==Plot==
:''Main article: [[Quake story]]''

==Gameplay==

==Community==

===Modifications===
:''Main article: [[Modifications]]''

===Custom levels===
:''Main article: [[Custom levels]]''

Shortly after the release of Quake, id Software released [[QuakeEd]], the tool that they used to make Quake's levels with. Although QuakeEd was not useful to most people as it was released, since it was made for the powerful [http://en.wikipedia.org/wiki/NeXT NeXT] workstations that id used to develop the game on, it wasn't long before other editors that ran on Windows were released. This allowed gamers to start making their own levels and releasing them on the internet for other owners of the game to play.

Although the early levels released by amateur level designers were generally below the standard of the maps included with the game, as the tools improved and designers got more experienced and began to understand how everything worked, maps that equalled and in some cases exceeded the standards set by id.

Quake levels released today are often far more complex than anything id could have ever made, due to more powerful computers for compiling and playing the levels, much improved tools, better engines and the hindsight and experience having the game for over 15 years brings.

===Speedrunning===
:''Main article: [[Speedrunning]]''

==Release and sales==

==Critical Reception==

==Legacy==




&lt;!--
This is copied from doomwiki.org's Doom page. This is an example of what kind of things we should add to this page.

http://doomwiki.org/wiki/Doom
http://en.wikipedia.org/wiki/Quake_(video_game)#Reception

Contents [hide]
1 History and development
2 Story
3 Gameplay
4 Release and sales
5 Extensibility
6 Negative reaction
7 Legal issues in Germany
8 Legacy
9 Episodes
10 Weapons
11 Monsters
12 See also
13 Sources
14 References
15 External links
--&gt;


----

''This article is currently pending a significant rewrite due to its importance for the wiki, expect the current page to change drastically.''

[[Category:Games]]</text>
      <sha1>r5kfwff8k7n3drhc63cbt6i1em4m155</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2677</id>
      <parentid>2271</parentid>
      <timestamp>2013-03-29T17:35:03Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>/* Custom levels */  fixed weird sentence</comment>
      <text xml:space="preserve" bytes="3770">'''Quake''' is the first game in the Quake series. In the game, the player is cast as a [[slipgate]] explorer, travelling between different dimensions, battling hordes of zombies, demons and various [http://en.wikipedia.org/wiki/H_P_Lovecraft Lovecraftian] monsters in order to save mankind from [[Shub-Niggurath]], the final boss of the game.

Quake is notable as one of the first fully 3D games with lighting and texturing, made possible by the technical mastery of the [[id Software]] programmers. The Quake game engine was later updated to take advantage of OpenGL accelerator cards when id released [[GLQuake]], which allowed players with supported cards to run the game with more visual effects and at smoother frame-rates than when using the software renderer.

As with id Software's previous series, [http://en.wikipedia.org/wiki/Doom_(video_game) Doom], Quake featured a networked multiplayer [[Deathmatch|deathmatch]] mode, which was subsequently improved to run more smoothly over the internet with [[QuakeWorld]]. Online play became immensely popular, and many [[Mod|mods]] were released that changed the gameplay significantly, often focussing on [[Teamplay|teamplay]], such as the popular [[Team Fortress]] and [[Capture the Flag]] mods.

The game received much acclaim on release and its commercial success led to several sequels, starting with [[Quake II]], which abandoned the Gothic styling of the original for a science fiction theme. Quake has since been recognized as one of the greatest achievements of the video game industry, influencing games that came after it, as well as helping to popularise user made content such as custom levels, mods and [[Machinima|machinima]].

==History and Development==

==Plot==
:''Main article: [[Quake story]]''

==Gameplay==

==Community==

===Modifications===
:''Main article: [[Modifications]]''

===Custom levels===
:''Main article: [[Custom levels]]''

Shortly after the release of Quake, id Software released [[QuakeEd]], the tool that they used to make Quake's levels with. Although QuakeEd was not useful to most people as it was released, since it was made for the powerful [http://en.wikipedia.org/wiki/NeXT NeXT] workstations that id used to develop the game on, it wasn't long before other editors that ran on Windows were released. This allowed gamers to start making their own levels and releasing them on the internet for other owners of the game to play.

Although the early levels released by amateur level designers were generally below the standard of the maps included with the game, as the tools improved and designers got more experienced and began to understand how everything worked, maps that equaled and in some cases exceeded the standards set by id became common.

Quake levels released today are often far more complex than anything id could have ever made, due to more powerful computers for compiling and playing the levels, much improved tools, better engines and the hindsight and experience having the game for over 15 years brings.

===Speedrunning===
:''Main article: [[Speedrunning]]''

==Release and sales==

==Critical Reception==

==Legacy==




&lt;!--
This is copied from doomwiki.org's Doom page. This is an example of what kind of things we should add to this page.

http://doomwiki.org/wiki/Doom
http://en.wikipedia.org/wiki/Quake_(video_game)#Reception

Contents [hide]
1 History and development
2 Story
3 Gameplay
4 Release and sales
5 Extensibility
6 Negative reaction
7 Legal issues in Germany
8 Legacy
9 Episodes
10 Weapons
11 Monsters
12 See also
13 Sources
14 References
15 External links
--&gt;


----

''This article is currently pending a significant rewrite due to its importance for the wiki, expect the current page to change drastically.''

[[Category:Games]]</text>
      <sha1>7mqlkulbedl9gmzofoz4ut5vumk1qqq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quake (DOS engine)</title>
    <ns>0</ns>
    <id>155</id>
    <redirect title="QUAKE.EXE" />
    <revision>
      <id>242</id>
      <timestamp>2007-11-02T20:22:03Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{Infobox Engine |name=Quake |author=[[id Software]] |based-on=n/a |first-release=n/a |newest-release=? |website=? }}  This is quake.exe  ==Version history== TODO  {{Engines}}</comment>
      <text xml:space="preserve" bytes="175">{{Infobox Engine
|name=Quake
|author=[[id Software]]
|based-on=n/a
|first-release=n/a
|newest-release=?
|website=?
}}

This is quake.exe

==Version history==
TODO

{{Engines}}</text>
      <sha1>3n91hhotljrxy38zvcddnyw6rjrqz1d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1079</id>
      <parentid>242</parentid>
      <timestamp>2009-07-12T00:34:19Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>redirect to [[QUAKE.EXE]]</comment>
      <text xml:space="preserve" bytes="23">#REDIRECT [[QUAKE.EXE]]</text>
      <sha1>4im0qctm0upz69gbkuk7gwong44h05j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quake 3 Arena</title>
    <ns>0</ns>
    <id>483</id>
    <revision>
      <id>985</id>
      <timestamp>2009-05-19T21:38:39Z</timestamp>
      <contributor>
        <ip>68.155.27.245</ip>
      </contributor>
      <comment>New page: Quake 3 Arena is the 3rd game in the Quake series, which should be here in the 1st place, considering it IS a QUAKE wiki!</comment>
      <text xml:space="preserve" bytes="121">Quake 3 Arena is the 3rd game in the Quake series, which should be here in the 1st place, considering it IS a QUAKE wiki!</text>
      <sha1>mqwougdehensfsf22e7gj0k5fbbn6cz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quake BSP Format</title>
    <ns>0</ns>
    <id>781</id>
    <revision>
      <id>2286</id>
      <timestamp>2013-03-26T17:50:33Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Created page with &quot;Go read this http://www.gamers.org/dEngine/quake/spec/quake-spec34/qkspec_4.htm&quot;</comment>
      <text xml:space="preserve" bytes="79">Go read this http://www.gamers.org/dEngine/quake/spec/quake-spec34/qkspec_4.htm</text>
      <sha1>47w6i0mc7pebsmx9yhcobenjft4esve</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2296</id>
      <parentid>2286</parentid>
      <timestamp>2013-03-26T18:12:57Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="287">.bsp files are compiled Quake levels. The name refers to the process [http://en.wikipedia.org/wiki/Binary_space_partitioning Binary Space Partitioning].

Go read this for full information on how the format is structured: http://www.gamers.org/dEngine/quake/spec/quake-spec34/qkspec_4.htm</text>
      <sha1>1k02wdfyr87u0mqm4129da09iiny6ra</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quake Expo</title>
    <ns>0</ns>
    <id>461</id>
    <revision>
      <id>872</id>
      <timestamp>2008-05-27T03:13:15Z</timestamp>
      <contributor>
        <username>Jehar</username>
        <id>12</id>
      </contributor>
      <comment>Made page, and is real rough. Cleanups will come (some not from me)</comment>
      <text xml:space="preserve" bytes="887">==Introduction==
This is all mostly placeholder, and hopefully this page will develop into a robust infastructure to assist the QExpo planners in making this year at once expansive and managable. Feel free to change the format of this page to make it easier to add information in a standardized way. This isn't going to be totally structured, but simply a good place to drop a note where you know it will be seen and digested by us.

==Previous QExpos==

==Quake Expo 2008==

===Booths===
(Here, provide a brief description of your booth plans, along with any relevant links.)
*Jeharisms [http://www.jehar.tastyspleen.net Link]
Will be showcasing my personal site, some musings during the event, and hopefully a map release or two.

===Interviews===
(Describe who will be conducting the interview, the name of the interviewee, and the subject.)

===Events and Contests===

===Articles===</text>
      <sha1>73rdzf689pavfu79v5g0egdrvaw9o39</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>875</id>
      <parentid>872</parentid>
      <timestamp>2008-05-27T03:18:12Z</timestamp>
      <contributor>
        <username>Jehar</username>
        <id>12</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="883">==Introduction==
This is all mostly placeholder, and hopefully this page will develop into a robust infastructure to assist the QExpo planners in making this year at once expansive and managable. Feel free to change the format of this page to make it easier to add information in a standardized way. This isn't going to be totally structured, but simply a good place to drop a note where you know it will be seen and digested by us.

==Previous QExpos==

==Quake Expo 2008==

===Booths===
(Here, provide a brief description of your booth plans, along with any relevant links.)
*Jeharisms [http://jehar.tastyspleen.net Link]
Will be showcasing my personal site, some musings during the event, and hopefully a map release or two.

===Interviews===
(Describe who will be conducting the interview, the name of the interviewee, and the subject.)

===Events and Contests===

===Articles===</text>
      <sha1>n9wwqly5x2t36cvubrzgafirhdz2cay</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>876</id>
      <parentid>875</parentid>
      <timestamp>2008-05-27T04:49:07Z</timestamp>
      <contributor>
        <username>Jehar</username>
        <id>12</id>
      </contributor>
      <text xml:space="preserve" bytes="869">==Introduction==
This is all mostly placeholder, and hopefully this page will develop into a robust infastructure to assist the QExpo planners in making this year at once expansive and managable. Feel free to change the format of this page to make it easier to add information in a standardized way. This isn't going to be totally structured, but simply a good place to drop a note where you know it will be seen and digested by us.

==Previous QExpos==

==Quake Expo 2008==

===Booths===
(Here, simply provide your name and link to your site to let us know who plans on making a booth. It'd be good to keep any details under wraps so that the expo itself is a suprise.)
*Jehar [http://jehar.tastyspleen.net Link]

===Interviews===
(Describe who will be conducting the interview, the name of the interviewee, and the subject.)

===Events and Contests===

===Articles===</text>
      <sha1>czrln4cdpvxk57zrnjoiea1jph0ndwf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>877</id>
      <parentid>876</parentid>
      <timestamp>2008-05-27T04:49:53Z</timestamp>
      <contributor>
        <username>Jehar</username>
        <id>12</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="893">==Introduction==
This is all mostly placeholder, and hopefully this page will develop into a robust infastructure to assist the QExpo planners in making this year at once expansive and managable. Feel free to change the format of this page to make it easier to add information in a standardized way. This isn't going to be totally structured, but simply a good place to drop a note where you know it will be seen and digested by us.

==Previous QExpos==

==Quake Expo 2008==

===Booths===
(Here, simply provide your name and link to your site to let us know who plans on making a booth. It'd be good to keep any details under wraps so that whatever you release at the expo itself is a suprise.)
*Jehar [http://jehar.tastyspleen.net Link]

===Interviews===
(Describe who will be conducting the interview, the name of the interviewee, and the subject.)

===Events and Contests===

===Articles===</text>
      <sha1>src44p799prpvzo31msa8ksikpq5c1i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>878</id>
      <parentid>877</parentid>
      <timestamp>2008-05-27T23:22:25Z</timestamp>
      <contributor>
        <username>Jehar</username>
        <id>12</id>
      </contributor>
      <text xml:space="preserve" bytes="1158">==Introduction==
This is all mostly placeholder, and hopefully this page will develop into a robust infastructure to assist the QExpo planners in making this year at once expansive and managable. Feel free to change the format of this page to make it easier to add information in a standardized way. This isn't going to be totally structured, but simply a good place to drop a note where you know it will be seen and digested by us. 

==Previous QExpos==

==Quake Expo 2008==

===Contact and Organization===
I (Jehar) can be reached consistently at jehar42@gmail.com, or on any number of irc channels (especially #qexpo on irc.anynet.org). If you can't easily find me, just contact me and let me know :P

The kinds of things I want to hear from people:
*Booths - just gimme a link to your site and drop your name by so we can expect to see you at qexpo. It'd be wise to keep any details or promises under wraps until the event for the sake of pleasant surprise.
*Interviews - any kind of community or industry-based interview. 
*Events - if you have a special event in mind, hit me up, and I'll facillitate getting you some assistence in plotting things out.</text>
      <sha1>2f0fxyrc1680bkwohicw68w4ykuglhb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>879</id>
      <parentid>878</parentid>
      <timestamp>2008-05-28T01:15:54Z</timestamp>
      <contributor>
        <ip>24.159.39.233</ip>
      </contributor>
      <text xml:space="preserve" bytes="2379">==Introduction==
Quake Expo is an online exposition of the content created within the Quake community. Formulated by CocoT and others on the [[Inside3d]] forums as a way to increase awareness through the Quake diaspora, the first Quake Expo was held in 2001. The expo itself is a website that is updated frequently for a set duration as agreed upon by that expo's administrators. The front page is administered by the host via news updates and announcements, while the real meat of the expo is driven by users who create their own web pages on the domain, referred to as booths. These booths can contain any relevant content they wish, though some tags may be restricted by the site, as it is all done via a Content Management System.

Think of it like the E3 of old, where a central location is settled upon, and all sorts from all across join together, and represent their works in that space for the convenient browsing of all. Quake Expo is much like that, with the focus being on Quake, and relevant content to it (mods, maps, engines, artwork, fiction, articles, etc).

==Quake Expo 2008==

===Contact and Organization===
I (Jehar) can be reached consistently at jehar42@gmail.com, or on any number of irc channels (especially #qexpo on irc.anynet.org). If you can't easily find me, just contact me and let me know :P

The kinds of things I want to hear from people:
*Booths - just gimme a link to your site and drop your name by so we can expect to see you at qexpo. It'd be wise to keep any details or promises under wraps until the event for the sake of pleasant surprise.
*Interviews - any kind of community or industry-based interview. 
*Events - if you have a special event in mind, hit me up, and I'll facilitate getting you some assistance in plotting things out.

==Previous QExpos==

===2001===
'''Hosts:''' CocoT, Horn, NaNe

'''Site design:'''

http://qexpo2001.quakedev.com/

===2003===
'''Hosts:'''

'''Site design:'''

===2005===
'''Hosts:''' MauveBib

'''Site design:''' PHP by SantaClaws

'''Features:''' Allowed Quake2 to be part of the expo.

http://qexpo2005.quakedev.com/

===2006===
'''Hosts:''' scar3crow, Sajt

'''Site design:''' PHP by Sajt, site by Randy

'''Features:''' Allowed Quake3Arena to be part of the expo. John Romero interview. Metal Quake rune awards for various contests. Hint to the later GPLing of id maps.

http://www.quakeexpo.com</text>
      <sha1>j902tawr7tc6fgphn4suoiicko5ue64</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quake II</title>
    <ns>0</ns>
    <id>481</id>
    <revision>
      <id>977</id>
      <timestamp>2009-03-22T03:10:45Z</timestamp>
      <contributor>
        <ip>64.123.239.223</ip>
      </contributor>
      <comment>New page: Quake II is the sequel to Quake. Unlike Quake, Quake II has you face against the Strogg, a type of aliens, instead of normal monsters.  [[Categories:Games]]</comment>
      <text xml:space="preserve" bytes="156">Quake II is the sequel to Quake. Unlike Quake, Quake II has you face against the Strogg, a type of aliens, instead of normal monsters.

[[Categories:Games]]</text>
      <sha1>emd9afwgknsflhyi3121ei1fj2wwgfc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1315</id>
      <parentid>977</parentid>
      <timestamp>2009-09-27T18:40:01Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="164">'''Quake II''' is the sequel to [[Quake]]. Unlike Quake, Quake II has you face against the Strogg, a type of aliens, instead of normal monsters.

[[Category:Games]]</text>
      <sha1>3kku0ytykitrtz7qhd4qr0cgkh81eca</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quake Map Format</title>
    <ns>0</ns>
    <id>780</id>
    <revision>
      <id>2272</id>
      <timestamp>2013-03-26T15:54:54Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Created page with &quot;The Quake .map Format is a plain text file which contains definitions of [[Brush|brushes]] and [[Entity|entities]] to be used by [[QBSP]] and it's related compiling tools to c...&quot;</comment>
      <text xml:space="preserve" bytes="549">The Quake .map Format is a plain text file which contains definitions of [[Brush|brushes]] and [[Entity|entities]] to be used by [[QBSP]] and it's related compiling tools to create a [[BSP|.bsp file]] used by Quake as levels. They are generally created by [[Mapping_tools#General_Purpose_Editors|level editing software]].

=Structure=
 {
  entity
  {
   brush (optional)
  }
 }

==Brush definition==
 ( 128 0 0 ) ( 128 1 0 ) ( 128 0 1 ) GROUND1_6 0 0 0 1.0 1.0

==Entity definition==
 {
  &quot;classname&quot; &quot;light&quot;
  &quot;origin&quot; &quot;0 128 64&quot;
  &quot;light&quot; &quot;255&quot;
 }</text>
      <sha1>0ot7u7ztwiur985ef0rlc6k4f8osk7w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2273</id>
      <parentid>2272</parentid>
      <timestamp>2013-03-26T15:59:09Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="1104">The Quake .map Format is a plain text file which contains definitions of [[Brush|brushes]] and [[Entity|entities]] to be used by [[QBSP]] and it's related compiling tools to create a [[BSP|.bsp file]] used by Quake as levels. They are generally created by [[Mapping_tools#General_Purpose_Editors|level editing software]].

=Structure=
 {
  entity
  {
   brush (optional)
  }
 }

==Brush definition==
 ( 128 0 0 ) ( 128 1 0 ) ( 128 0 1 ) GROUND1_6 0 0 0 1.0 1.0

==Entity definition==
 {
  &quot;classname&quot; &quot;light&quot;
  &quot;origin&quot; &quot;0 128 64&quot;
  &quot;light&quot; &quot;255&quot;
 }
==A simple map==
 {
  &quot;sounds&quot; &quot;1&quot;
  &quot;classname&quot; &quot;worldspawn&quot;
  &quot;wad&quot; &quot;/gfx/base.wad&quot;
  &quot;worldtype&quot; &quot;0&quot;
  {
   ( 128 0 0 ) ( 128 1 0 ) ( 128 0 1 ) GROUND1_6 0 0 0 1.0 1.0
   ( 256 0 0 ) ( 256 0 1 ) ( 256 1 0 ) GROUND1_6 0 0 0 1.0 1.0
   ( 0 128 0 ) ( 0 128 1 ) ( 1 128 0 ) GROUND1_6 0 0 0 1.0 1.0
   ( 0 384 0 ) ( 1 384 0 ) ( 0 384 1 ) GROUND1_6 0 0 0 1.0 1.0
   ( 0 0 64 ) ( 1 0 64 ) ( 0 1 64 ) GROUND1_6 0 0 0 1.0 1.0
   ( 0 0 128 ) ( 0 1 128 ) ( 1 0 128 ) GROUND1_6 0 0 0 1.0 1.0
  }
 }
 {
  &quot;classname&quot; &quot;info_player_start&quot;
  &quot;origin&quot; &quot;256 384 160&quot;
 }</text>
      <sha1>q1htjyutinn7wh7inex1u520nvljwu1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2274</id>
      <parentid>2273</parentid>
      <timestamp>2013-03-26T16:01:17Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="1095">The Quake .map Format is a plain text file which contains definitions of [[Brush|brushes]] and [[Entity|entities]] to be used by [[QBSP]] and it's related compiling tools to create a [[BSP|.bsp file]] used by Quake as levels. They are generally created by [[Mapping_tools#General_Purpose_Editors|level editing software]].

=A simple map=
 {
  &quot;classname&quot; &quot;worldspawn&quot;
  &quot;wad&quot; &quot;/gfx/base.wad&quot;
  &quot;worldtype&quot; &quot;0&quot;
  {
   ( 128 0 0 ) ( 128 1 0 ) ( 128 0 1 ) GROUND1_6 0 0 0 1.0 1.0
   ( 256 0 0 ) ( 256 0 1 ) ( 256 1 0 ) GROUND1_6 0 0 0 1.0 1.0
   ( 0 128 0 ) ( 0 128 1 ) ( 1 128 0 ) GROUND1_6 0 0 0 1.0 1.0
   ( 0 384 0 ) ( 1 384 0 ) ( 0 384 1 ) GROUND1_6 0 0 0 1.0 1.0
   ( 0 0 64 ) ( 1 0 64 ) ( 0 1 64 ) GROUND1_6 0 0 0 1.0 1.0
   ( 0 0 128 ) ( 0 1 128 ) ( 1 0 128 ) GROUND1_6 0 0 0 1.0 1.0
  }
 }
 {
  &quot;classname&quot; &quot;info_player_start&quot;
  &quot;origin&quot; &quot;256 384 160&quot;
 }


==Structure==
 {
  entity
  {
   brush (optional)
  }
 }



==Brush definition==
 ( 128 0 0 ) ( 128 1 0 ) ( 128 0 1 ) GROUND1_6 0 0 0 1.0 1.0



==Entity definition==
 {
  &quot;classname&quot; &quot;light&quot;
  &quot;origin&quot; &quot;0 128 64&quot;
  &quot;light&quot; &quot;255&quot;
 }</text>
      <sha1>1cqdevll67vspolv084f75e7ujpbn0a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2276</id>
      <parentid>2274</parentid>
      <timestamp>2013-03-26T17:11:10Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* A simple map */</comment>
      <text xml:space="preserve" bytes="2390">The Quake .map Format is a plain text file which contains definitions of [[Brush|brushes]] and [[Entity|entities]] to be used by [[QBSP]] and it's related compiling tools to create a [[BSP|.bsp file]] used by Quake as levels. They are generally created by [[Mapping_tools#General_Purpose_Editors|level editing software]].

=A simple map=
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;worldspawn&quot;
 &quot;wad&quot; &quot;E:\q1maps\Q.wad&quot;
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }
 }
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

This is an example of a simple map. There is a [[Worldspawn]] entity, with a single [[brush]] defined, and an [[info_player_start]] entity.

==Structure==
 {
 entity
 {
  brush (optional)
 }
 }

The general structure of a .map file is to contain entity objects between { }, and to nest brush objects between them.


==Entity definition==
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

An entity is simply defined by it's [[classname]], it's origin, and it's various [[Entity_guide|keys]]. An entity may also contain a brush, if it's of a type which uses a brush.


==Brush definition==
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }

A brush is defined by several planes, at minimum 4, which must form a convex polyhedron. It is NOT defined by vertices, the actual vertices are determined by QBSP be determining the intersections of these planes. In the example shown here, this brush is a 6 sided cuboid. It's first plane is defined by 3 points, ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ).

The other information supplied is the texture used by this plane. &quot;mmetal1_2&quot; is the name of the texture. &quot;0 0 0 1 1&quot; are how the texture is display, and are respectively &quot;X offset&quot; &quot;Y offset&quot; &quot;Rotation&quot; &quot;X scale&quot; and &quot;Y scale&quot;.</text>
      <sha1>c1shnxewg3xkvuar157n9e681b3bj6t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2277</id>
      <parentid>2276</parentid>
      <timestamp>2013-03-26T17:12:38Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="2484">The Quake .map Format is a plain text file which contains definitions of [[Brush|brushes]] and [[Entity|entities]] to be used by [[QBSP]] and it's related compiling tools to create a [[BSP|.bsp file]] used by Quake as levels. They are generally created by [[Mapping_tools#General_Purpose_Editors|level editing software]].

=A simple map=
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;worldspawn&quot;
 &quot;wad&quot; &quot;E:\q1maps\Q.wad&quot;
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }
 }
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

This is an example of a simple map. There is a [[Worldspawn]] entity, a special entity which contains all of a map's solid geometry as well as some map properties, with a single [[brush]] defined, and an [[info_player_start]] entity.

==Structure==
 {
 entity
 {
  brush (optional)
 }
 }

The general structure of a .map file is to contain entity objects between { }, and to nest brush objects between them.


==Entity definition==
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

An entity is simply defined by it's [[classname]], it's origin, and it's various [[Entity_guide|keys]]. An entity may also contain a brush, if it's of a type which uses a brush.


==Brush definition==
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }

A brush is defined by several planes, at minimum 4, which must form a convex polyhedron. It is NOT defined by vertices, the actual vertices are determined by QBSP be determining the intersections of these planes. In the example shown here, this brush is a 6 sided cuboid. It's first plane is defined by 3 points, ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ).

The other information supplied is the texture used by this plane. &quot;mmetal1_2&quot; is the name of the texture. &quot;0 0 0 1 1&quot; are how the texture is display, and are respectively &quot;X offset&quot; &quot;Y offset&quot; &quot;Rotation&quot; &quot;X scale&quot; and &quot;Y scale&quot;.</text>
      <sha1>k5c3sv8il8tgxholk0fv9pd5njei3va</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2278</id>
      <parentid>2277</parentid>
      <timestamp>2013-03-26T17:13:26Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Brush definition */</comment>
      <text xml:space="preserve" bytes="2497">The Quake .map Format is a plain text file which contains definitions of [[Brush|brushes]] and [[Entity|entities]] to be used by [[QBSP]] and it's related compiling tools to create a [[BSP|.bsp file]] used by Quake as levels. They are generally created by [[Mapping_tools#General_Purpose_Editors|level editing software]].

=A simple map=
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;worldspawn&quot;
 &quot;wad&quot; &quot;E:\q1maps\Q.wad&quot;
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }
 }
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

This is an example of a simple map. There is a [[Worldspawn]] entity, a special entity which contains all of a map's solid geometry as well as some map properties, with a single [[brush]] defined, and an [[info_player_start]] entity.

==Structure==
 {
 entity
 {
  brush (optional)
 }
 }

The general structure of a .map file is to contain entity objects between { }, and to nest brush objects between them.


==Entity definition==
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

An entity is simply defined by it's [[classname]], it's origin, and it's various [[Entity_guide|keys]]. An entity may also contain a brush, if it's of a type which uses a brush.


==Brush definition==
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }

A brush is defined by several planes, at minimum 4, which must intersect to form a convex polyhedron. It is NOT defined by vertices, the actual vertices are determined by QBSP be determining the intersections of these planes. In the example shown here, this brush is a 6 sided cuboid. It's first plane is defined by 3 points, ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ).

The other information supplied is the texture used by this plane. &quot;mmetal1_2&quot; is the name of the texture. &quot;0 0 0 1 1&quot; are how the texture is display, and are respectively &quot;X offset&quot; &quot;Y offset&quot; &quot;Rotation&quot; &quot;X scale&quot; and &quot;Y scale&quot;.</text>
      <sha1>6c9ytbiwb6g71cdsq53510y2gyaacxd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2279</id>
      <parentid>2278</parentid>
      <timestamp>2013-03-26T17:18:34Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Brush definition */</comment>
      <text xml:space="preserve" bytes="2748">The Quake .map Format is a plain text file which contains definitions of [[Brush|brushes]] and [[Entity|entities]] to be used by [[QBSP]] and it's related compiling tools to create a [[BSP|.bsp file]] used by Quake as levels. They are generally created by [[Mapping_tools#General_Purpose_Editors|level editing software]].

=A simple map=
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;worldspawn&quot;
 &quot;wad&quot; &quot;E:\q1maps\Q.wad&quot;
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }
 }
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

This is an example of a simple map. There is a [[Worldspawn]] entity, a special entity which contains all of a map's solid geometry as well as some map properties, with a single [[brush]] defined, and an [[info_player_start]] entity.

==Structure==
 {
 entity
 {
  brush (optional)
 }
 }

The general structure of a .map file is to contain entity objects between { }, and to nest brush objects between them.


==Entity definition==
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

An entity is simply defined by it's [[classname]], it's origin, and it's various [[Entity_guide|keys]]. An entity may also contain a brush, if it's of a type which uses a brush.


==Brush definition==
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }

A brush is defined by several [http://en.wikipedia.org/wiki/Plane_%28geometry%29 planes], at minimum 4, which must intersect to form a [http://en.wikipedia.org/wiki/Convex_set convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedron]. It is '''NOT''' defined by [http://en.wikipedia.org/wiki/Vertex_%28computer_graphics%29 vertices], the actual vertices are determined by QBSP be determining the intersections of these planes. In the example shown here, this brush is a 6 sided cuboid. It's first plane is defined by 3 points, ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ).

The other information supplied is the texture used by this plane. &quot;mmetal1_2&quot; is the name of the texture, a single plane may only have a single texture. &quot;0 0 0 1 1&quot; are how the texture is display, and are respectively &quot;X offset&quot; &quot;Y offset&quot; &quot;Rotation&quot; &quot;X scale&quot; and &quot;Y scale&quot;.</text>
      <sha1>19opvhuk9ae10jpzy6k4tkc3qtsf5s3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2280</id>
      <parentid>2279</parentid>
      <timestamp>2013-03-26T17:19:45Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Entity definition */</comment>
      <text xml:space="preserve" bytes="2839">The Quake .map Format is a plain text file which contains definitions of [[Brush|brushes]] and [[Entity|entities]] to be used by [[QBSP]] and it's related compiling tools to create a [[BSP|.bsp file]] used by Quake as levels. They are generally created by [[Mapping_tools#General_Purpose_Editors|level editing software]].

=A simple map=
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;worldspawn&quot;
 &quot;wad&quot; &quot;E:\q1maps\Q.wad&quot;
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }
 }
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

This is an example of a simple map. There is a [[Worldspawn]] entity, a special entity which contains all of a map's solid geometry as well as some map properties, with a single [[brush]] defined, and an [[info_player_start]] entity.

==Structure==
 {
 entity
 {
  brush (optional)
 }
 }

The general structure of a .map file is to contain entity objects between { }, and to nest brush objects between them.


==Entity definition==
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

An entity is simply defined by it's [[classname]], it's origin, and it's various [[Entity_guide|keys]]. An entity may also contain a brush, if it's of a type which uses a brush. An example of this is the worldspawn entity seen in our simple map, which contains a brush.

==Brush definition==
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }

A brush is defined by several [http://en.wikipedia.org/wiki/Plane_%28geometry%29 planes], at minimum 4, which must intersect to form a [http://en.wikipedia.org/wiki/Convex_set convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedron]. It is '''NOT''' defined by [http://en.wikipedia.org/wiki/Vertex_%28computer_graphics%29 vertices], the actual vertices are determined by QBSP be determining the intersections of these planes. In the example shown here, this brush is a 6 sided cuboid. It's first plane is defined by 3 points, ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ).

The other information supplied is the texture used by this plane. &quot;mmetal1_2&quot; is the name of the texture, a single plane may only have a single texture. &quot;0 0 0 1 1&quot; are how the texture is display, and are respectively &quot;X offset&quot; &quot;Y offset&quot; &quot;Rotation&quot; &quot;X scale&quot; and &quot;Y scale&quot;.</text>
      <sha1>qcfpvsdwzqcqxiwlm08r6utgjgczo1j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2281</id>
      <parentid>2280</parentid>
      <timestamp>2013-03-26T17:21:05Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Brush definition */</comment>
      <text xml:space="preserve" bytes="2840">The Quake .map Format is a plain text file which contains definitions of [[Brush|brushes]] and [[Entity|entities]] to be used by [[QBSP]] and it's related compiling tools to create a [[BSP|.bsp file]] used by Quake as levels. They are generally created by [[Mapping_tools#General_Purpose_Editors|level editing software]].

=A simple map=
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;worldspawn&quot;
 &quot;wad&quot; &quot;E:\q1maps\Q.wad&quot;
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }
 }
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

This is an example of a simple map. There is a [[Worldspawn]] entity, a special entity which contains all of a map's solid geometry as well as some map properties, with a single [[brush]] defined, and an [[info_player_start]] entity.

==Structure==
 {
 entity
 {
  brush (optional)
 }
 }

The general structure of a .map file is to contain entity objects between { }, and to nest brush objects between them.


==Entity definition==
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

An entity is simply defined by it's [[classname]], it's origin, and it's various [[Entity_guide|keys]]. An entity may also contain a brush, if it's of a type which uses a brush. An example of this is the worldspawn entity seen in our simple map, which contains a brush.

==Brush definition==
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }

A brush is defined by several [http://en.wikipedia.org/wiki/Plane_%28geometry%29 planes], at minimum 4, which must intersect to form a [http://en.wikipedia.org/wiki/Convex_set convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedron]. It is '''NOT''' defined by [http://en.wikipedia.org/wiki/Vertex_%28computer_graphics%29 vertices], the actual vertices are determined by QBSP by calculating the intersections of these planes. 

In the example shown here, this brush is a 6 sided cuboid. It's first plane is defined by 3 points, ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ). The other information supplied is the texture used by this plane. &quot;mmetal1_2&quot; is the name of the texture, a single plane may only have a single texture. &quot;0 0 0 1 1&quot; are how the texture is display, and are respectively &quot;X offset&quot; &quot;Y offset&quot; &quot;Rotation&quot; &quot;X scale&quot; and &quot;Y scale&quot;.</text>
      <sha1>btwhpqyhc19d13sjpp23m70tk76apx7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2282</id>
      <parentid>2281</parentid>
      <timestamp>2013-03-26T17:25:11Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Structure */</comment>
      <text xml:space="preserve" bytes="2851">The Quake .map Format is a plain text file which contains definitions of [[Brush|brushes]] and [[Entity|entities]] to be used by [[QBSP]] and it's related compiling tools to create a [[BSP|.bsp file]] used by Quake as levels. They are generally created by [[Mapping_tools#General_Purpose_Editors|level editing software]].

=A simple map=
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;worldspawn&quot;
 &quot;wad&quot; &quot;E:\q1maps\Q.wad&quot;
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }
 }
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

This is an example of a simple map. There is a [[Worldspawn]] entity, a special entity which contains all of a map's solid geometry as well as some map properties, with a single [[brush]] defined, and an [[info_player_start]] entity.

==Structure==
 {
 entity
 {
  brush (optional)
 }
 }

The general structure of a .map file is to contain entity objects between { } brackets, and to nest brush objects within entities.

==Entity definition==
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

An entity is simply defined by it's [[classname]], it's origin, and it's various [[Entity_guide|keys]]. An entity may also contain a brush, if it's of a type which uses a brush. An example of this is the worldspawn entity seen in our simple map, which contains a brush.

==Brush definition==
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }

A brush is defined by several [http://en.wikipedia.org/wiki/Plane_%28geometry%29 planes], at minimum 4, which must intersect to form a [http://en.wikipedia.org/wiki/Convex_set convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedron]. It is '''NOT''' defined by [http://en.wikipedia.org/wiki/Vertex_%28computer_graphics%29 vertices], the actual vertices are determined by QBSP by calculating the intersections of these planes. 

In the example shown here, this brush is a 6 sided cuboid. It's first plane is defined by 3 points, ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ). The other information supplied is the texture used by this plane. &quot;mmetal1_2&quot; is the name of the texture, a single plane may only have a single texture. &quot;0 0 0 1 1&quot; are how the texture is display, and are respectively &quot;X offset&quot; &quot;Y offset&quot; &quot;Rotation&quot; &quot;X scale&quot; and &quot;Y scale&quot;.</text>
      <sha1>49h62srw24maq4f9a3i2xw062ke1t9b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2283</id>
      <parentid>2282</parentid>
      <timestamp>2013-03-26T17:25:51Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Structure */</comment>
      <text xml:space="preserve" bytes="2850">The Quake .map Format is a plain text file which contains definitions of [[Brush|brushes]] and [[Entity|entities]] to be used by [[QBSP]] and it's related compiling tools to create a [[BSP|.bsp file]] used by Quake as levels. They are generally created by [[Mapping_tools#General_Purpose_Editors|level editing software]].

=A simple map=
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;worldspawn&quot;
 &quot;wad&quot; &quot;E:\q1maps\Q.wad&quot;
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }
 }
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

This is an example of a simple map. There is a [[Worldspawn]] entity, a special entity which contains all of a map's solid geometry as well as some map properties, with a single [[brush]] defined, and an [[info_player_start]] entity.

==Structure==
 {
 entity
 {
  brush (optional)
 }
 }

The general structure of a .map file is to contain entity objects between { } brackets, and to nest brushes within these objects.

==Entity definition==
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

An entity is simply defined by it's [[classname]], it's origin, and it's various [[Entity_guide|keys]]. An entity may also contain a brush, if it's of a type which uses a brush. An example of this is the worldspawn entity seen in our simple map, which contains a brush.

==Brush definition==
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }

A brush is defined by several [http://en.wikipedia.org/wiki/Plane_%28geometry%29 planes], at minimum 4, which must intersect to form a [http://en.wikipedia.org/wiki/Convex_set convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedron]. It is '''NOT''' defined by [http://en.wikipedia.org/wiki/Vertex_%28computer_graphics%29 vertices], the actual vertices are determined by QBSP by calculating the intersections of these planes. 

In the example shown here, this brush is a 6 sided cuboid. It's first plane is defined by 3 points, ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ). The other information supplied is the texture used by this plane. &quot;mmetal1_2&quot; is the name of the texture, a single plane may only have a single texture. &quot;0 0 0 1 1&quot; are how the texture is display, and are respectively &quot;X offset&quot; &quot;Y offset&quot; &quot;Rotation&quot; &quot;X scale&quot; and &quot;Y scale&quot;.</text>
      <sha1>at26l1lj19dvuqslexuvo0pkq0tl566</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2284</id>
      <parentid>2283</parentid>
      <timestamp>2013-03-26T17:27:14Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* A simple map */</comment>
      <text xml:space="preserve" bytes="2855">The Quake .map Format is a plain text file which contains definitions of [[Brush|brushes]] and [[Entity|entities]] to be used by [[QBSP]] and it's related compiling tools to create a [[BSP|.bsp file]] used by Quake as levels. They are generally created by [[Mapping_tools#General_Purpose_Editors|level editing software]].

=A simple map=
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;worldspawn&quot;
 &quot;wad&quot; &quot;E:\q1maps\Q.wad&quot;
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }
 }
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

This is an example of a simple map. There is a [[Worldspawn]] entity, a special entity which contains all of a map's solid geometry as well as some map properties, which has a single [[brush]] defined, and an [[info_player_start]] entity.

==Structure==
 {
 entity
 {
  brush (optional)
 }
 }

The general structure of a .map file is to contain entity objects between { } brackets, and to nest brushes within these objects.

==Entity definition==
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

An entity is simply defined by it's [[classname]], it's origin, and it's various [[Entity_guide|keys]]. An entity may also contain a brush, if it's of a type which uses a brush. An example of this is the worldspawn entity seen in our simple map, which contains a brush.

==Brush definition==
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }

A brush is defined by several [http://en.wikipedia.org/wiki/Plane_%28geometry%29 planes], at minimum 4, which must intersect to form a [http://en.wikipedia.org/wiki/Convex_set convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedron]. It is '''NOT''' defined by [http://en.wikipedia.org/wiki/Vertex_%28computer_graphics%29 vertices], the actual vertices are determined by QBSP by calculating the intersections of these planes. 

In the example shown here, this brush is a 6 sided cuboid. It's first plane is defined by 3 points, ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ). The other information supplied is the texture used by this plane. &quot;mmetal1_2&quot; is the name of the texture, a single plane may only have a single texture. &quot;0 0 0 1 1&quot; are how the texture is display, and are respectively &quot;X offset&quot; &quot;Y offset&quot; &quot;Rotation&quot; &quot;X scale&quot; and &quot;Y scale&quot;.</text>
      <sha1>f8c9h2hh31u724drpvdsa2tj980aqqp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2288</id>
      <parentid>2284</parentid>
      <timestamp>2013-03-26T17:51:31Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="2868">The Quake .map Format is a plain text file which contains definitions of [[Brush|brushes]] and [[Entity|entities]] to be used by [[QBSP]] and it's related compiling tools to create a [[Quake_BSP_Format|.bsp file]] used by Quake as levels. They are generally created by [[Mapping_tools#General_Purpose_Editors|level editing software]].

=A simple map=
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;worldspawn&quot;
 &quot;wad&quot; &quot;E:\q1maps\Q.wad&quot;
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }
 }
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

This is an example of a simple map. There is a [[Worldspawn]] entity, a special entity which contains all of a map's solid geometry as well as some map properties, which has a single [[brush]] defined, and an [[info_player_start]] entity.

==Structure==
 {
 entity
 {
  brush (optional)
 }
 }

The general structure of a .map file is to contain entity objects between { } brackets, and to nest brushes within these objects.

==Entity definition==
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

An entity is simply defined by it's [[classname]], it's origin, and it's various [[Entity_guide|keys]]. An entity may also contain a brush, if it's of a type which uses a brush. An example of this is the worldspawn entity seen in our simple map, which contains a brush.

==Brush definition==
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }

A brush is defined by several [http://en.wikipedia.org/wiki/Plane_%28geometry%29 planes], at minimum 4, which must intersect to form a [http://en.wikipedia.org/wiki/Convex_set convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedron]. It is '''NOT''' defined by [http://en.wikipedia.org/wiki/Vertex_%28computer_graphics%29 vertices], the actual vertices are determined by QBSP by calculating the intersections of these planes. 

In the example shown here, this brush is a 6 sided cuboid. It's first plane is defined by 3 points, ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ). The other information supplied is the texture used by this plane. &quot;mmetal1_2&quot; is the name of the texture, a single plane may only have a single texture. &quot;0 0 0 1 1&quot; are how the texture is display, and are respectively &quot;X offset&quot; &quot;Y offset&quot; &quot;Rotation&quot; &quot;X scale&quot; and &quot;Y scale&quot;.</text>
      <sha1>hqslirj3wfd815lz9to3mp38eka0m7g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2331</id>
      <parentid>2288</parentid>
      <timestamp>2013-03-26T22:52:55Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Entity definition */</comment>
      <text xml:space="preserve" bytes="2875">The Quake .map Format is a plain text file which contains definitions of [[Brush|brushes]] and [[Entity|entities]] to be used by [[QBSP]] and it's related compiling tools to create a [[Quake_BSP_Format|.bsp file]] used by Quake as levels. They are generally created by [[Mapping_tools#General_Purpose_Editors|level editing software]].

=A simple map=
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;worldspawn&quot;
 &quot;wad&quot; &quot;E:\q1maps\Q.wad&quot;
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }
 }
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

This is an example of a simple map. There is a [[Worldspawn]] entity, a special entity which contains all of a map's solid geometry as well as some map properties, which has a single [[brush]] defined, and an [[info_player_start]] entity.

==Structure==
 {
 entity
 {
  brush (optional)
 }
 }

The general structure of a .map file is to contain entity objects between { } brackets, and to nest brushes within these objects.

==Entity definition==
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

An [[Entity|entity]] is simply defined by it's classname, it's origin, and it's various [[Entity_guide|keys]]. An entity may also contain a brush, if it's of a type which uses a brush. An example of this is the worldspawn entity seen in our simple map, which contains a brush.

==Brush definition==
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }

A brush is defined by several [http://en.wikipedia.org/wiki/Plane_%28geometry%29 planes], at minimum 4, which must intersect to form a [http://en.wikipedia.org/wiki/Convex_set convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedron]. It is '''NOT''' defined by [http://en.wikipedia.org/wiki/Vertex_%28computer_graphics%29 vertices], the actual vertices are determined by QBSP by calculating the intersections of these planes. 

In the example shown here, this brush is a 6 sided cuboid. It's first plane is defined by 3 points, ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ). The other information supplied is the texture used by this plane. &quot;mmetal1_2&quot; is the name of the texture, a single plane may only have a single texture. &quot;0 0 0 1 1&quot; are how the texture is display, and are respectively &quot;X offset&quot; &quot;Y offset&quot; &quot;Rotation&quot; &quot;X scale&quot; and &quot;Y scale&quot;.</text>
      <sha1>fqvfghvr2a2a28rp51mfkzc3e79awdp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2332</id>
      <parentid>2331</parentid>
      <timestamp>2013-03-26T22:53:10Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Brush definition */</comment>
      <text xml:space="preserve" bytes="2879">The Quake .map Format is a plain text file which contains definitions of [[Brush|brushes]] and [[Entity|entities]] to be used by [[QBSP]] and it's related compiling tools to create a [[Quake_BSP_Format|.bsp file]] used by Quake as levels. They are generally created by [[Mapping_tools#General_Purpose_Editors|level editing software]].

=A simple map=
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;worldspawn&quot;
 &quot;wad&quot; &quot;E:\q1maps\Q.wad&quot;
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }
 }
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

This is an example of a simple map. There is a [[Worldspawn]] entity, a special entity which contains all of a map's solid geometry as well as some map properties, which has a single [[brush]] defined, and an [[info_player_start]] entity.

==Structure==
 {
 entity
 {
  brush (optional)
 }
 }

The general structure of a .map file is to contain entity objects between { } brackets, and to nest brushes within these objects.

==Entity definition==
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

An [[Entity|entity]] is simply defined by it's classname, it's origin, and it's various [[Entity_guide|keys]]. An entity may also contain a brush, if it's of a type which uses a brush. An example of this is the worldspawn entity seen in our simple map, which contains a brush.

==Brush definition==
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }

A [[brush]] is defined by several [http://en.wikipedia.org/wiki/Plane_%28geometry%29 planes], at minimum 4, which must intersect to form a [http://en.wikipedia.org/wiki/Convex_set convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedron]. It is '''NOT''' defined by [http://en.wikipedia.org/wiki/Vertex_%28computer_graphics%29 vertices], the actual vertices are determined by QBSP by calculating the intersections of these planes. 

In the example shown here, this brush is a 6 sided cuboid. It's first plane is defined by 3 points, ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ). The other information supplied is the texture used by this plane. &quot;mmetal1_2&quot; is the name of the texture, a single plane may only have a single texture. &quot;0 0 0 1 1&quot; are how the texture is display, and are respectively &quot;X offset&quot; &quot;Y offset&quot; &quot;Rotation&quot; &quot;X scale&quot; and &quot;Y scale&quot;.</text>
      <sha1>opc2oce3o4cp6adrjgv9waj1yis7e6c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2359</id>
      <parentid>2332</parentid>
      <timestamp>2013-03-27T15:37:07Z</timestamp>
      <contributor>
        <ip>85.178.56.99</ip>
      </contributor>
      <comment>/* Brush definition */</comment>
      <text xml:space="preserve" bytes="5342">The Quake .map Format is a plain text file which contains definitions of [[Brush|brushes]] and [[Entity|entities]] to be used by [[QBSP]] and it's related compiling tools to create a [[Quake_BSP_Format|.bsp file]] used by Quake as levels. They are generally created by [[Mapping_tools#General_Purpose_Editors|level editing software]].

=A simple map=
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;worldspawn&quot;
 &quot;wad&quot; &quot;E:\q1maps\Q.wad&quot;
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }
 }
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

This is an example of a simple map. There is a [[Worldspawn]] entity, a special entity which contains all of a map's solid geometry as well as some map properties, which has a single [[brush]] defined, and an [[info_player_start]] entity.

==Structure==
 {
 entity
 {
  brush (optional)
 }
 }

The general structure of a .map file is to contain entity objects between { } brackets, and to nest brushes within these objects.

==Entity definition==
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

An [[Entity|entity]] is simply defined by it's classname, it's origin, and it's various [[Entity_guide|keys]]. An entity may also contain a brush, if it's of a type which uses a brush. An example of this is the worldspawn entity seen in our simple map, which contains a brush.

==Brush definition==
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }

A [[brush]] consists of several faces, each of which is defined by a [http://en.wikipedia.org/wiki/Plane_%28geometry%29 plane] and additional texture information. The actual geometry of the brush is only defined by the planes, of which there must be at least four. Each plane defines a [http://en.wikipedia.org/wiki/Half-space_(geometry) half space], that is, an infinite set of points that is bounded by a plane. The intersection of these half spaces forms a convex [http://en.wikipedia.org/wiki/Convex_set convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedron]. Note that the actual [http://en.wikipedia.org/wiki/Vertex_%28computer_graphics%29 vertices] of the brush are '''NOT''' stored in the map file. The vertices are determined by BSP (or a level editing program) by computing the intersections of the planes.

In the example shown here, this brush is a 6 sided cuboid. The plane of its first face is defined by 3 points, ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ). The other information supplied is the texture used by the face. &quot;mmetal1_2&quot; is the name of the texture, a single plane may only have a single texture. &quot;0 0 0 1 1&quot; are how the texture is display, and are respectively &quot;X offset&quot; &quot;Y offset&quot; &quot;Rotation&quot; &quot;X scale&quot; and &quot;Y scale&quot;.

The plane points ( p1 ) ( p2 ) ( p3 ) are interpreted as follows. The plane points must be arranged such that the [http://en.wikipedia.org/wiki/Cross_product cross product] of the vectors (p3 - p1) and (p2 - p1) is not null, that is, the three points must be linearly independent. Then, the normalized cross product represents the [http://en.wikipedia.org/wiki/Plane_(geometry) normal vector] of the plane. Every point p for which (p - p1) * normal &lt;= 0, where * is the [http://en.wikipedia.org/wiki/Dot_product dot product], holds is considered to be in the half space defined by the plane. Every other point is considered not to be in the half space.

The '''intersection of half spaces''' interpretation of brushes does not yield the vertices, however. While there are [http://www.sciencedirect.com/science/article/pii/0304397579900550 efficient methods] to compute them directly, the QBSP compiler uses a different approach. Starting with the edges and vertices of a huge cube (usually ranging from -4096 to 4096 in each dimension), the edges of the cube are intersected with the planes of the faces. Upon each intersection, new edges and vertices are generated that replace some of the old ones until all planes have been used. Note that due to floating point inaccuracies, there may be slight errors in the position of each vertex. This may lead to QBSP warnings when it '''heals''' degenerate vertices and edges.

In the example used here, all plane points have integer coordinates. In the original Quake map format, only integer coordinates are allowed. This has some advantages and drawbacks. The major advantage is that integer numbers can be written to text files without loss of precision, which is not always true for floating point numbers. The major drawback is that not every plane can be accurately represented using integer coordinates for its points. This becomes problematic when brushes are rotated arbitrarily or when the vertices are edited directly. That is why most modern Quake compilers allow floating point coordinates for plane points.</text>
      <sha1>c695kvft1fh9fi1c4pmpiej8twli45k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2679</id>
      <parentid>2359</parentid>
      <timestamp>2013-03-29T23:18:33Z</timestamp>
      <contributor>
        <username>SleepwalkR</username>
        <id>37</id>
      </contributor>
      <comment>/* Brush definition */</comment>
      <text xml:space="preserve" bytes="5335">The Quake .map Format is a plain text file which contains definitions of [[Brush|brushes]] and [[Entity|entities]] to be used by [[QBSP]] and it's related compiling tools to create a [[Quake_BSP_Format|.bsp file]] used by Quake as levels. They are generally created by [[Mapping_tools#General_Purpose_Editors|level editing software]].

=A simple map=
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;worldspawn&quot;
 &quot;wad&quot; &quot;E:\q1maps\Q.wad&quot;
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }
 }
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

This is an example of a simple map. There is a [[Worldspawn]] entity, a special entity which contains all of a map's solid geometry as well as some map properties, which has a single [[brush]] defined, and an [[info_player_start]] entity.

==Structure==
 {
 entity
 {
  brush (optional)
 }
 }

The general structure of a .map file is to contain entity objects between { } brackets, and to nest brushes within these objects.

==Entity definition==
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

An [[Entity|entity]] is simply defined by it's classname, it's origin, and it's various [[Entity_guide|keys]]. An entity may also contain a brush, if it's of a type which uses a brush. An example of this is the worldspawn entity seen in our simple map, which contains a brush.

==Brush definition==
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }

A [[brush]] consists of several faces, each of which is defined by a [http://en.wikipedia.org/wiki/Plane_%28geometry%29 plane] and additional texture information. The actual geometry of the brush is only defined by the planes, of which there must be at least four. Each plane defines a [http://en.wikipedia.org/wiki/Half-space_(geometry) half space], that is, an infinite set of points that is bounded by a plane. The intersection of these half spaces forms a [http://en.wikipedia.org/wiki/Convex_set convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedron]. Note that the actual [http://en.wikipedia.org/wiki/Vertex_%28computer_graphics%29 vertices] of the brush are '''NOT''' stored in the map file. The vertices are determined by BSP (or a level editing program) by computing the intersections of the planes.

In the example shown here, this brush is a 6 sided cuboid. The plane of its first face is defined by 3 points, ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ). The other information supplied is the texture used by the face. &quot;mmetal1_2&quot; is the name of the texture, a single plane may only have a single texture. &quot;0 0 0 1 1&quot; are how the texture is display, and are respectively &quot;X offset&quot; &quot;Y offset&quot; &quot;Rotation&quot; &quot;X scale&quot; and &quot;Y scale&quot;.

The plane points ( p1 ) ( p2 ) ( p3 ) are interpreted as follows. The plane points must be arranged such that the [http://en.wikipedia.org/wiki/Cross_product cross product] of the vectors (p3 - p1) and (p2 - p1) is not null, that is, the three points must be linearly independent. Then, the normalized cross product represents the [http://en.wikipedia.org/wiki/Plane_(geometry) normal vector] of the plane. Every point p for which (p - p1) * normal &lt;= 0, where * is the [http://en.wikipedia.org/wiki/Dot_product dot product], holds is considered to be in the half space defined by the plane. Every other point is considered not to be in the half space.

The '''intersection of half spaces''' interpretation of brushes does not yield the vertices, however. While there are [http://www.sciencedirect.com/science/article/pii/0304397579900550 efficient methods] to compute them directly, the QBSP compiler uses a different approach. Starting with the edges and vertices of a huge cube (usually ranging from -4096 to 4096 in each dimension), the edges of the cube are intersected with the planes of the faces. Upon each intersection, new edges and vertices are generated that replace some of the old ones until all planes have been used. Note that due to floating point inaccuracies, there may be slight errors in the position of each vertex. This may lead to QBSP warnings when it '''heals''' degenerate vertices and edges.

In the example used here, all plane points have integer coordinates. In the original Quake map format, only integer coordinates are allowed. This has some advantages and drawbacks. The major advantage is that integer numbers can be written to text files without loss of precision, which is not always true for floating point numbers. The major drawback is that not every plane can be accurately represented using integer coordinates for its points. This becomes problematic when brushes are rotated arbitrarily or when the vertices are edited directly. That is why most modern Quake compilers allow floating point coordinates for plane points.</text>
      <sha1>r37zji97ebzmmc1mfv3hzuftb8x2t2l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2680</id>
      <parentid>2679</parentid>
      <timestamp>2013-03-29T23:20:07Z</timestamp>
      <contributor>
        <username>SleepwalkR</username>
        <id>37</id>
      </contributor>
      <minor/>
      <comment>/* Brush definition */</comment>
      <text xml:space="preserve" bytes="5335">The Quake .map Format is a plain text file which contains definitions of [[Brush|brushes]] and [[Entity|entities]] to be used by [[QBSP]] and it's related compiling tools to create a [[Quake_BSP_Format|.bsp file]] used by Quake as levels. They are generally created by [[Mapping_tools#General_Purpose_Editors|level editing software]].

=A simple map=
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;worldspawn&quot;
 &quot;wad&quot; &quot;E:\q1maps\Q.wad&quot;
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }
 }
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

This is an example of a simple map. There is a [[Worldspawn]] entity, a special entity which contains all of a map's solid geometry as well as some map properties, which has a single [[brush]] defined, and an [[info_player_start]] entity.

==Structure==
 {
 entity
 {
  brush (optional)
 }
 }

The general structure of a .map file is to contain entity objects between { } brackets, and to nest brushes within these objects.

==Entity definition==
 {
 &quot;spawnflags&quot; &quot;0&quot;
 &quot;classname&quot; &quot;info_player_start&quot;
 &quot;origin&quot; &quot;32 32 24&quot;
 }

An [[Entity|entity]] is simply defined by it's classname, it's origin, and it's various [[Entity_guide|keys]]. An entity may also contain a brush, if it's of a type which uses a brush. An example of this is the worldspawn entity seen in our simple map, which contains a brush.

==Brush definition==
 {
 ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 64 0 ) ( 0 0 16 ) mmetal1_2 0 0 0 1 1
 ( 64 256 16 ) ( 0 256 16 ) ( 64 256 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 0 ) ( 0 0 16 ) ( 64 0 0 ) mmetal1_2 0 0 0 1 1
 ( 64 64 0 ) ( 64 0 0 ) ( 0 64 0 ) mmetal1_2 0 0 0 1 1
 ( 0 0 -64 ) ( 64 0 -64 ) ( 0 64 -64 ) mmetal1_2 0 0 0 1 1
 }

A [[brush]] consists of several faces, each of which is defined by a [http://en.wikipedia.org/wiki/Plane_%28geometry%29 plane] and additional texture information. The actual geometry of the brush is only defined by the planes, of which there must be at least four. Each plane defines a [http://en.wikipedia.org/wiki/Half-space_(geometry) half space], that is, an infinite set of points that is bounded by a plane. The intersection of these half spaces forms a [http://en.wikipedia.org/wiki/Convex_set convex] [http://en.wikipedia.org/wiki/Polyhedron polyhedron]. Note that the actual [http://en.wikipedia.org/wiki/Vertex_%28computer_graphics%29 vertices] of the brush are '''NOT''' stored in the map file. The vertices are determined by BSP (or a level editing program) by computing the intersections of the planes.

In the example shown here, this brush is a 6 sided cuboid. The plane of its first face is defined by 3 points, ( 256 64 16 ) ( 256 64 0 ) ( 256 0 16 ). The other information supplied is the texture used by the face. &quot;mmetal1_2&quot; is the name of the texture, a single plane may only have a single texture. &quot;0 0 0 1 1&quot; are how the texture is display, and are respectively &quot;X offset&quot; &quot;Y offset&quot; &quot;Rotation&quot; &quot;X scale&quot; and &quot;Y scale&quot;.

The plane points ( p1 ) ( p2 ) ( p3 ) are interpreted as follows. The plane points must be arranged such that the [http://en.wikipedia.org/wiki/Cross_product cross product] of the vectors (p3 - p1) and (p2 - p1) is not null, that is, the three points must be linearly independent. Then, the normalized cross product represents the [http://en.wikipedia.org/wiki/Plane_(geometry) normal vector] of the plane. Every point p for which (p - p1) * normal &lt;= 0 (where * is the [http://en.wikipedia.org/wiki/Dot_product dot product]) holds is considered to be in the half space defined by the plane. Every other point is considered not to be in the half space.

The '''intersection of half spaces''' interpretation of brushes does not yield the vertices, however. While there are [http://www.sciencedirect.com/science/article/pii/0304397579900550 efficient methods] to compute them directly, the QBSP compiler uses a different approach. Starting with the edges and vertices of a huge cube (usually ranging from -4096 to 4096 in each dimension), the edges of the cube are intersected with the planes of the faces. Upon each intersection, new edges and vertices are generated that replace some of the old ones until all planes have been used. Note that due to floating point inaccuracies, there may be slight errors in the position of each vertex. This may lead to QBSP warnings when it '''heals''' degenerate vertices and edges.

In the example used here, all plane points have integer coordinates. In the original Quake map format, only integer coordinates are allowed. This has some advantages and drawbacks. The major advantage is that integer numbers can be written to text files without loss of precision, which is not always true for floating point numbers. The major drawback is that not every plane can be accurately represented using integer coordinates for its points. This becomes problematic when brushes are rotated arbitrarily or when the vertices are edited directly. That is why most modern Quake compilers allow floating point coordinates for plane points.</text>
      <sha1>t33rfb1wgwvnza3anfm82ov0f0ppx5n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quake QuakeC source</title>
    <ns>0</ns>
    <id>1024</id>
    <revision>
      <id>2905</id>
      <timestamp>2013-04-09T14:39:45Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>Created page with &quot;This is a list of all the QuakeC modules included in the QuakeC 1.01 source code released by John Carmack in 1996. This does not include any engine code, which was released se...&quot;</comment>
      <text xml:space="preserve" bytes="703">This is a list of all the QuakeC modules included in the QuakeC 1.01 source code released by John Carmack in 1996. This does not include any engine code, which was released separately in 1999 and was written in C.

* [[defs.qc]]
* [[subs.qc]]
* [[fight.qc]]
* [[ai.qc]]
* [[combat.qc]]
* [[items.qc]]
* [[weapons.qc]]
* [[world.qc]]
* [[client.qc]]
* [[player.qc]]
* [[monsters.qc]]
* [[doors.qc]]
* [[buttons.qc]]
* [[triggers.qc]]
* [[plats.qc]]
* [[misc.qc]]
* [[ogre.qc]]
* [[demon.qc]]
* [[shambler.qc]]
* [[knight.qc]]
* [[soldier.qc]]
* [[wizard.qc]] 
* [[dog.qc]]
* [[zombie.qc]] 
* [[boss.qc]]
* [[tarbaby.qc]]
* [[hknight.qc]]
* [[fish.qc]]
* [[shalrath.qc]]
* [[enforcer.qc]] 
* [[oldone.qc]]</text>
      <sha1>ja4d0awff5v78ko6cvfmwtmxam52vb2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quake Sourcecode Mailing List</title>
    <ns>0</ns>
    <id>1076</id>
    <revision>
      <id>3245</id>
      <timestamp>2014-07-05T19:37:39Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Created page with &quot;The Quake Sourcecode Mailing List (QSML) is an abandoned mailing list dedicated to the open source code releases of Quake and Quake tools. It was created and maintained by M...&quot;</comment>
      <text xml:space="preserve" bytes="636">The Quake Sourcecode Mailing List (QSML) is an abandoned mailing list dedicated to the open source code releases of Quake and Quake tools. It was created and maintained by [[Maddes]]&lt;ref&gt;http://www.inside3d.com/qip/q1/mailinglist.htm&lt;/ref&gt;. It is hosted at Yahoo! Groups&lt;ref&gt;http://groups.yahoo.com/group/quakesource/join&lt;/ref&gt;. An FAQ is available at http://www.inside3d.com/qip/text/qsmlfaq.txt or received by mail if you subscribe.

There is no known complete archive of the posts. The Wayback Machine only managed to save a few at http://web.archive.org/web/*/http://www.escribe.com/software/quakesource/* .

==Notes==
&lt;references/&gt;</text>
      <sha1>3p2r2gphkm9xjbr5t254lh74llvabux</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quake Wiki talk:Community Portal</title>
    <ns>5</ns>
    <id>600</id>
    <revision>
      <id>1641</id>
      <timestamp>2010-11-28T01:04:13Z</timestamp>
      <contributor>
        <ip>64.214.191.210</ip>
      </contributor>
      <comment>Auto Detailing at it's Finest! What's Automobile Detailing?Auto Detailing Program! Auto Detailing: Secrets On the Specialists! Best with the Line Automobile Detailing Supplies!</comment>
      <text xml:space="preserve" bytes="1858">Vehicle describing is separate from washing and waxing, although some auto centers offer these services with each other. In standard, a wash and wax career is just that – the exterior of the vehicle is cleaned and waxed. Automobile describing goes further, and though concentrated within the interior of the auto, vehicle describing also consists of some exterior function.
&lt;a href=&quot;http://www.njdetailing.com&quot;&gt;Auto Detailing&lt;/a&gt;
Vehicle detailing is separate from washing and waxing, though some auto centers offer these providers with each other. In standard, a wash and wax career is just that – the exterior from the car is cleaned and waxed.&lt;a href=&quot;http://www.njdetailing.com&quot;&gt;Auto Detailing&lt;/a&gt; Vehicle detailing goes further, and although concentrated about the interior in the automobile, automobile&lt;a href=&quot;http://www.njdetailing.com&quot;&gt;Auto Detailing&lt;/a&gt; describing also &lt;a href=&quot;http://www.njdetailing.com&quot;&gt;Auto Detailing&lt;/a&gt;consists of some exterior perform.
&lt;a href=&quot;http://www.njdetailing.com&quot;&gt;Auto Detailing&lt;/a&gt;
Finally, nicks or scratches from the paint could be taken care of by automobile describing as well. Each and every blemish is cleaned of wax and very carefully sanded with wet/dry grit or perhaps a fine sanding block.&lt;a href=&quot;http://www.njdetailing.com&quot;&gt;Auto Detailing&lt;/a&gt; The right car touch-up paint is applied in layers, permitting each and every coat to dry &lt;a href=&quot;http://www.njdetailing.com&quot;&gt;Auto Detailing&lt;/a&gt;before applying the following. The location is again sanded, then polished and waxed. When completed correctly, vehicle detailing leaves 1 hard pressed to come across the original blemish.
&lt;a href=&quot;http://www.njdetailing.com&quot;&gt;Auto Detailing&lt;/a&gt;

&lt;a href=http://www.njdetailing.com&gt;Auto Detailing&lt;/a&gt;
&lt;a href=&quot;http://www.njdetailing.com&quot;&gt;Auto Detailing&lt;/a&gt;
&lt;a href='http://www.njdetailing.com'&gt;Auto Detailing&lt;/a&gt;</text>
      <sha1>6e576pnwmthhir3xletknep4a8em96x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1642</id>
      <parentid>1641</parentid>
      <timestamp>2010-12-01T05:58:02Z</timestamp>
      <contributor>
        <ip>67.176.79.127</ip>
      </contributor>
      <comment>removed spam</comment>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1643</id>
      <parentid>1642</parentid>
      <timestamp>2010-12-19T19:38:45Z</timestamp>
      <contributor>
        <ip>64.214.191.210</ip>
      </contributor>
      <comment>The Rule Of the jungle</comment>
      <text xml:space="preserve" bytes="1335">seworadaw
http://movies.slowstandard.com/?p=451
http://www.mikekelli.com/blog/blog/post/2009/01/27/lukes-first-program.aspx
http://teruc.dnsalias.net/blog/post/Windows-7-x64e381aeUSBe382a4e383b3e382b9e38388e383bce383ab.aspx
http://www.silverbackgeek.com/post/Backup-Your-Vista!.aspx
http://www.givin.net/1051
http://www.hiyaoo.com/archives/209
http://www.barkerross.co.uk/blog/post/2010/10/06/Demand-for-jobs-hits-a-12-month-low.aspx
http://www.holosfera.com/wordpress/un-nuevo-experimento-se-incorpora-al-lhc.html
http://www.foxwolf.net/wordpress/archives/115
http://www.4byte.net/blog/2009/06/post_000077.html
http://wikiosra.com/post/2010/02/13/%D8%A7%D8%B9%D8%AA%D8%B1%D8%A7%D9%81%D8%A7%D8%AA-%D8%B9%D8%A7%D8%B4%D9%82%D8%A9.aspx
http://www.my301.com/?p=665
http://petite-etoile.eu/?p=119
http://www.cnmobile.com.cn/html/y2010/149.html
http://laesquinacaliente.net/blog/?p=1511
http://www.tvsuperman.com/difriochtai-idir-an-margadh-bannai-tsins-343.html
http://madanya.net/?p=4229
http://himasta.fmipa.unpad.ac.id/?p=257
http://www.ptzzz.com/?p=1016
http://blog.inppy.com/?p=646
http://hobbynet.yukapiyon.com/blog/dogtre/?p=3419
http://frases.blogmagia.com.br/20101030-youre-one-in-a-million.html
http://www.friena.com/wp2/167.html
http://topfacebookgames.com/?p=134
http://shigototokurashi.com/unionrenaissance/85?cat=4
 
Ditaftdax</text>
      <sha1>0iiv0ljfb7pma2q8oa39b6uftzxwpxt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quake Wiki:Community Portal</title>
    <ns>4</ns>
    <id>595</id>
    <revision>
      <id>1600</id>
      <timestamp>2010-02-23T15:08:44Z</timestamp>
      <contributor>
        <ip>94.220.179.57</ip>
      </contributor>
      <comment>New page: [[http://inside3d.com/]]</comment>
      <text xml:space="preserve" bytes="24">[[http://inside3d.com/]]</text>
      <sha1>6nbnasmmg10vgo38lcddobml68idvyi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quake Wiki:Community portal</title>
    <ns>4</ns>
    <id>809</id>
    <revision>
      <id>2377</id>
      <timestamp>2013-03-28T14:48:40Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>Created page with &quot;[[file:portal.png|center]]  == Welcome to the Quake Wiki Community Portal! ==  If you're using the wiki for research, please feel free to look around. If you want to contribut...&quot;</comment>
      <text xml:space="preserve" bytes="803">[[file:portal.png|center]]

== Welcome to the Quake Wiki Community Portal! ==

If you're using the wiki for research, please feel free to look around. If you want to contribute however, please sign up as a new user so you can do so.

===Projects===
Here are a list of known projects across the wiki, perhaps you are able to contribute to one of these?
* [[Quake Wiki:Entity documentation project]]

===Templates===
There are a number of templates created specifically for the Quake Wiki. Below are a few that you may find useful as you edit the wiki. Each template should have instructions for it's use on it's own page. This list may move to a separate page at some point.
* [[Template:Underscore-lowercase-underscores]]
* [[Template:Lowercase-underscores]]
* [[Template:lowercase]]
* [[Template:todo]]</text>
      <sha1>q9ee2bq9okknjif77ywrxttguhrohie</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2378</id>
      <parentid>2377</parentid>
      <timestamp>2013-03-28T14:52:53Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>/* Welcome to the Quake Wiki Community Portal! */</comment>
      <text xml:space="preserve" bytes="905">[[file:portal.png|center]]

== Welcome to the Quake Wiki Community Portal! ==

If you're using the wiki for research, please feel free to look around. If you want to contribute however, please sign up as a new user so you can do so. Be sure to check out the [[Quake Wiki:Policies and guidelines|Policies and Guidelines]] page as well.

===Projects===
Here are a list of known projects across the wiki, perhaps you are able to contribute to one of these?
* [[Quake Wiki:Entity documentation project]]

===Templates===
There are a number of templates created specifically for the Quake Wiki. Below are a few that you may find useful as you edit the wiki. Each template should have instructions for it's use on it's own page. This list may move to a separate page at some point.
* [[Template:Underscore-lowercase-underscores]]
* [[Template:Lowercase-underscores]]
* [[Template:lowercase]]
* [[Template:todo]]</text>
      <sha1>4mlejntctx89j492mlyu9essjsbdl7o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2395</id>
      <parentid>2378</parentid>
      <timestamp>2013-03-28T14:59:05Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="1325">[[file:portal.png|center]]

== Welcome to the Quake Wiki Community Portal! ==

If you're using the wiki for research, please feel free to look around. If you want to contribute however, please sign up as a new user so you can do so. Be sure to check out the [[Quake Wiki:Policies and guidelines|Policies and Guidelines]] page as well.

===Projects===
Here are a list of known projects across the wiki, perhaps you are able to contribute to one of these?
* [[Quake Wiki:Entity documentation project]]

===Templates===
There are a number of templates created specifically for the Quake Wiki. Below are a few that you may find useful as you edit the wiki. Each template should have instructions for it's use on it's own page. This list may move to a separate page at some point.
* [[Template:Underscore-lowercase-underscores]]
* [[Template:Lowercase-underscores]]
* [[Template:lowercase]]
* [[Template:todo]]

===About timestamps on this wiki===
Note that the contents of this wiki were ported from a previous wiki (itself ported from another). The porting happened in March of 2013. Thus, any timestamps from before that period reflect edits made at the previous wikis. As a result, information in those edits may be out of date (broken links, inactive users, etc). Please keep this in mind when reviewing comments on the wiki.</text>
      <sha1>bbn7gukrzmw9mso093ks78amydbnh07</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2414</id>
      <parentid>2395</parentid>
      <timestamp>2013-03-28T15:09:11Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="1564">[[file:portal.png|center]]

== Welcome to the Quake Wiki Community Portal! ==

If you're using the wiki for research, please feel free to look around. If you want to contribute however, please sign up as a new user so you can do so. Be sure to check out the [[Quake Wiki:Policies and guidelines|Policies and Guidelines]] page as well.

===Case Sensitivity===
Note that (unlike Wikipedia) the Quake Wiki is case sensitive for article names and links. Please use the appropriate case when creating new articles and linking them to avoid excessive redirects and article moves.

===Projects===
Here are a list of known projects across the wiki, perhaps you are able to contribute to one of these?
* [[Quake Wiki:Entity documentation project]]

===Templates===
There are a number of templates created specifically for the Quake Wiki. Below are a few that you may find useful as you edit the wiki. Each template should have instructions for it's use on it's own page. This list may move to a separate page at some point.
* [[Template:Underscore-lowercase-underscores]]
* [[Template:Lowercase-underscores]]
* [[Template:lowercase]]
* [[Template:todo]]

===About timestamps on this wiki===
Note that the contents of this wiki were ported from a previous wiki (itself ported from another). The porting happened in March of 2013. Thus, any timestamps from before that period reflect edits made at the previous wikis. As a result, information in those edits may be out of date (broken links, inactive users, etc). Please keep this in mind when reviewing comments on the wiki.</text>
      <sha1>ow4jl4h0wf8jgkfc8x8282k54wnjwgy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2418</id>
      <parentid>2414</parentid>
      <timestamp>2013-03-28T15:14:01Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>/* Welcome to the Quake Wiki Community Portal! */</comment>
      <text xml:space="preserve" bytes="1868">[[file:portal.png|center]]

== Welcome to the Quake Wiki Community Portal! ==

If you're using the wiki for research, please feel free to look around. If you want to contribute however, please sign up as a new user so you can do so. Be sure to check out the [[Quake Wiki:Policies and guidelines|Policies and Guidelines]] page as well.

This is currently 99% an import of the [http://web.archive.org/web/20081120082126/http://quakery.quakedev.com/qwiki/ Quakery Qwiki]. That itself was a mixture of imported content from the [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ Quakesrc Wiki] and quite a lot of new content.
===Case Sensitivity===
Note that (unlike Wikipedia) the Quake Wiki is case sensitive for article names and links. Please use the appropriate case when creating new articles and linking them to avoid excessive redirects and article moves.

===Projects===
Here are a list of known projects across the wiki, perhaps you are able to contribute to one of these?
* [[Quake Wiki:Entity documentation project]]

===Templates===
There are a number of templates created specifically for the Quake Wiki. Below are a few that you may find useful as you edit the wiki. Each template should have instructions for it's use on it's own page. This list may move to a separate page at some point.
* [[Template:Underscore-lowercase-underscores]]
* [[Template:Lowercase-underscores]]
* [[Template:lowercase]]
* [[Template:todo]]

===About timestamps on this wiki===
Note that the contents of this wiki were ported from a previous wiki (itself ported from another). The porting happened in March of 2013. Thus, any timestamps from before that period reflect edits made at the previous wikis. As a result, information in those edits may be out of date (broken links, inactive users, etc). Please keep this in mind when reviewing comments on the wiki.</text>
      <sha1>edpnsxha7qtwq5bud3tslpfd3lhvjt4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2420</id>
      <parentid>2418</parentid>
      <timestamp>2013-03-28T15:22:32Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>/* Case Sensitivity */</comment>
      <text xml:space="preserve" bytes="1962">[[file:portal.png|center]]

== Welcome to the Quake Wiki Community Portal! ==

If you're using the wiki for research, please feel free to look around. If you want to contribute however, please sign up as a new user so you can do so. Be sure to check out the [[Quake Wiki:Policies and guidelines|Policies and Guidelines]] page as well.

This is currently 99% an import of the [http://web.archive.org/web/20081120082126/http://quakery.quakedev.com/qwiki/ Quakery Qwiki]. That itself was a mixture of imported content from the [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ Quakesrc Wiki] and quite a lot of new content.
===Case Sensitivity===
Note that (unlike Wikipedia) the Quake Wiki is case sensitive for article names and links. Please use the appropriate case when creating new articles and linking them to avoid excessive redirects and article moves. This is particularly important for things like [[Entity guide|entities]] or console commands.

===Projects===
Here are a list of known projects across the wiki, perhaps you are able to contribute to one of these?
* [[Quake Wiki:Entity documentation project]]

===Templates===
There are a number of templates created specifically for the Quake Wiki. Below are a few that you may find useful as you edit the wiki. Each template should have instructions for it's use on it's own page. This list may move to a separate page at some point.
* [[Template:Underscore-lowercase-underscores]]
* [[Template:Lowercase-underscores]]
* [[Template:lowercase]]
* [[Template:todo]]

===About timestamps on this wiki===
Note that the contents of this wiki were ported from a previous wiki (itself ported from another). The porting happened in March of 2013. Thus, any timestamps from before that period reflect edits made at the previous wikis. As a result, information in those edits may be out of date (broken links, inactive users, etc). Please keep this in mind when reviewing comments on the wiki.</text>
      <sha1>qezvvhv9xaxjrs45odab9p1we89j5ij</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2439</id>
      <parentid>2420</parentid>
      <timestamp>2013-03-28T20:50:46Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>/* Templates */ adding a deletion request template</comment>
      <text xml:space="preserve" bytes="1986">[[file:portal.png|center]]

== Welcome to the Quake Wiki Community Portal! ==

If you're using the wiki for research, please feel free to look around. If you want to contribute however, please sign up as a new user so you can do so. Be sure to check out the [[Quake Wiki:Policies and guidelines|Policies and Guidelines]] page as well.

This is currently 99% an import of the [http://web.archive.org/web/20081120082126/http://quakery.quakedev.com/qwiki/ Quakery Qwiki]. That itself was a mixture of imported content from the [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ Quakesrc Wiki] and quite a lot of new content.
===Case Sensitivity===
Note that (unlike Wikipedia) the Quake Wiki is case sensitive for article names and links. Please use the appropriate case when creating new articles and linking them to avoid excessive redirects and article moves. This is particularly important for things like [[Entity guide|entities]] or console commands.

===Projects===
Here are a list of known projects across the wiki, perhaps you are able to contribute to one of these?
* [[Quake Wiki:Entity documentation project]]

===Templates===
There are a number of templates created specifically for the Quake Wiki. Below are a few that you may find useful as you edit the wiki. Each template should have instructions for it's use on it's own page. This list may move to a separate page at some point.
* [[Template:Underscore-lowercase-underscores]]
* [[Template:Lowercase-underscores]]
* [[Template:lowercase]]
* [[Template:todo]]
* [[Template:deletion]]

===About timestamps on this wiki===
Note that the contents of this wiki were ported from a previous wiki (itself ported from another). The porting happened in March of 2013. Thus, any timestamps from before that period reflect edits made at the previous wikis. As a result, information in those edits may be out of date (broken links, inactive users, etc). Please keep this in mind when reviewing comments on the wiki.</text>
      <sha1>bojz1319q8hv79ihxaqlcs5b634xy15</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2958</id>
      <parentid>2439</parentid>
      <timestamp>2013-05-04T17:31:49Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <comment>that's all for today folks!</comment>
      <text xml:space="preserve" bytes="2488">[[file:portal.png|center]]

== Welcome to the Quake Wiki Community Portal! ==

If you're using the wiki for research, please feel free to look around. If you want to contribute however, please sign up as a new user so you can do so. Be sure to check out the [[Quake Wiki:Policies and guidelines|Policies and Guidelines]] page as well.

This is currently 99% an import of the [http://web.archive.org/web/20081120082126/http://quakery.quakedev.com/qwiki/ Quakery Qwiki]. That itself was a mixture of imported content from the [http://web.archive.org/web/20070712142236/http://wiki.quakesrc.org/ Quakesrc Wiki] and quite a lot of new content.
===Case Sensitivity===
Note that (unlike Wikipedia) the Quake Wiki is case sensitive for article names and links. Please use the appropriate case when creating new articles and linking them to avoid excessive redirects and article moves. This is particularly important for things like [[Entity guide|entities]] or console commands.

===Projects===
Here are a list of known projects across the wiki, perhaps you are able to contribute to one of these?
* [[Quake Wiki:Entity documentation project]]

===Templates===
There are a number of templates created specifically for the Quake Wiki. Below are a few that you may find useful as you edit the wiki. Each template should have instructions for it's use on it's own page. This list may move to a separate page at some point.
* [[Template:Underscore-lowercase-underscores]]
* [[Template:Lowercase-underscores]]
* [[Template:lowercase]]
* [[Template:todo]]
* [[Template:deletion]]

===About timestamps on this wiki===
Note that the contents of this wiki were ported from a previous wiki (itself ported from another). The porting happened in March of 2013. Thus, any timestamps from before that period reflect edits made at the previous wikis. As a result, information in those edits may be out of date (broken links, inactive users, etc). Please keep this in mind when reviewing comments on the wiki.

===We ought to make this wiki a bitch===
Hi there guys. I've never thought that the true Quake community (as fragmented and uncentralised and unpopulated a I see it now) could spawn something like this. I'm not sure if I ever been to the old quakedev wiki when it was still alive. I will try to contribute my best here (e.g. explaining ai routines and whatnot, qc code snippets maybe). What we all do here is a good thing. [[User:Unmaker|Unmaker]] ([[User talk:Unmaker|talk]]) 17:31, 4 May 2013 (UTC)</text>
      <sha1>g0z2ah26so93mbcm7333qa23ztnbtix</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quake Wiki:Entity documentation project</title>
    <ns>4</ns>
    <id>808</id>
    <revision>
      <id>2376</id>
      <timestamp>2013-03-28T14:48:02Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>Created page with &quot;The Entity Doc Project is a joint project to complete all the documentation linked through the [[Entity guide]] in a cohesive fashion.  If you go to fill in the information in...&quot;</comment>
      <text xml:space="preserve" bytes="389">The Entity Doc Project is a joint project to complete all the documentation linked through the [[Entity guide]] in a cohesive fashion.

If you go to fill in the information in an entity, please follow the style and structure of the [[func_button]] article. Remember to include the &lt;nowiki&gt;{{DISPLAYTITLE}}&lt;/nowiki&gt; template so that the article is capitalized properly. Thanks for the help!</text>
      <sha1>4znydlfl9kdijpfp2bszlnmpn965rmj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2437</id>
      <parentid>2376</parentid>
      <timestamp>2013-03-28T20:30:14Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>updated to include project template</comment>
      <text xml:space="preserve" bytes="3107">The Entity Documentation Project is a joint project to complete all the documentation linked through the '''[[Entity guide]]''' in a cohesive fashion.

== Known Participants ==
Currently the following users are participating in this project:
* [[User:Than]]
* [[User:Hectate]]

== Article Layout ==
If you're comfortable with wiki editing just follow the style of the articles that exist, the [[func_button]] and [[func_door]] articles are excellent examples. If you're not, you could copy the below article template and insert the necessary information where it is needed. Alternatively, simply adding the relevant data for someone else to format later is still helpful.

 &lt;nowiki&gt;
The '''entity_name''' is a blah blah blah; basic entity information goes here.

== Usage ==
The [[Entity name tutorial]] article has some examples of the creation and use of this entity.

== Attributes ==
Some basic information about the entity's use of attributes goes here, such as how it uses an angle given to it.

=== Keys ===
{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''targetname'' || The name of the entity. 
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity that will be triggered by this entity.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''keyvaluename'' || Additional keyvalues and descriptions can be appended in this format.
|}

===Spawnflags===
The button supports [[Entity#Spawnflags|standard spawnflags]] for difficulty and deathmatch presence.
{| class=&quot;wikitable collapsible collapsed&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
It also has the following additional flags enabled:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name !! Description
|-
| flag # || Some Name ||| Description of spawnflag
|}
[[Category:Quake entities]]
&lt;/nowiki&gt;
If copied to a new page, the above markup should look like the below for you to begin editing.

----
=entity_name=
The '''entity_name''' is a blah blah blah; basic entity information goes here.

== Usage ==
The '''Entity name tutorial''' article has some examples of the creation and use of this entity.

== Attributes ==
Some basic information about the entity's use of attributes goes here, such as how it uses an angle given to it.

=== Keys ===
{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''targetname'' || The name of the entity. 
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity that will be triggered by this entity.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''keyvaluename'' || Additional keyvalues and descriptions can be appended in this format.
|}

===Spawnflags===
The button supports [[Entity#Spawnflags|standard spawnflags]] for difficulty and deathmatch presence.
{| class=&quot;wikitable collapsible collapsed&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
It also has the following additional flags enabled:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name !! Description
|-
| flag # || Some Name ||| Description of spawnflag
|}

----</text>
      <sha1>jf06awvkhumtudet2zja9yzwgjznxrw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2669</id>
      <parentid>2437</parentid>
      <timestamp>2013-03-29T15:25:11Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>modified the previous template to line stuff up a bit more and add infobox.</comment>
      <text xml:space="preserve" bytes="5656">The Entity Documentation Project is a joint project to complete all the documentation linked through the '''[[Entity guide]]''' in a cohesive fashion.

== Known Participants ==
Currently the following users are participating in this project:
* [[User:Than]]
* [[User:Hectate]]

== Article Layout ==
If you're comfortable with wiki editing just follow the style of the articles that exist, the [[monster_shalrath]], [[func_button]] and [[func_door]] articles are excellent examples. If you're not, you could copy the below article template and insert the necessary information where it is needed. Alternatively, simply adding the relevant data for someone else to format later is still helpful. Also, even if you don't have ALL the data, some data is better than no data, so feel free to fill in bits of a page, or make modifications to the existing data if you know that it is incorrect.

A bit about the Infobox_entity code near the start:

Delete the commonname field if the entity does not have a common name. An example of a common name is Vore, which is the common name of monster_shalrath. Vore also has a [[Vore|wiki page]], so in this case, it would be linked. An entity with no common name would be info_null, or ambient_drone.

Also delete the precache field if the entity does not precache any models or sounds. You can find out if anything is precached by looking in the entity's qc file (usually near the bottom).

 &lt;nowiki&gt;
{{DISPLAYTITLE:entity_name}}

{{Infobox_entity
| classname = entity_name
| commonname = Entity
| type = point
| class = [[Entity (entity class)|entity]]
| dimensions = X x Y x Z
| quakec = [[entity.qc]]
| precaches =
* list precached
* models and sounds
* here. Otherwise
* leave empty
}}

The '''entity_name''' is a blah blah blah; basic entity information goes here.

== Usage ==
The [[Entity name tutorial]] article has some examples of the creation and use of this entity.

You might want to add a link to a more detailed article or tutorial, but for some entities the information can be added right here.

== Attributes ==
Some basic information about the entity's use of attributes goes here, such as how it uses an angle given to it.

=== Keys ===
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' |
| The targetname of the Entity.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target''
| The entity to be triggered when the entity is activated / killed / insert whatever is appropriate.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''example_key'' 
| You can keep adding more keeps like this
|}

===Spawnflags===
The entity_name entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| flag #
| flag name in editor (TrenchBroom is ideal)
| Description of flag effects
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Entity
}}

==Definitions==

===FGD Definition===
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the base class definition, which may also be required.
&lt;pre&gt;
[ code from entity entry in an .fgd file goes in here ]
&lt;/pre&gt;
===DEF Definition===
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
[ code from entity entry in a .def file goes in here ]
&lt;/pre&gt;

[[Category:Quake entities]]
&lt;/nowiki&gt;
If copied to a new page, the above markup should look like the below for you to begin editing.

----
=entity_name=

{{Infobox_entity
| classname = entity_name
| commonname = Entity
| type = point
| class = [[Entity (entity class)|entity]]
| dimensions = X x Y x Z
| quakec = [[entity.qc]]
| precaches =
* list precached
* models and sounds
* here. Otherwise
* leave empty
}}

The '''entity_name''' is a blah blah blah; basic entity information goes here.

== Usage ==
The [[Entity name tutorial]] article has some examples of the creation and use of this entity. 

You might want to add a link to a more detailed article or tutorial, but for some entities the information can be added right here.

== Attributes ==
Some basic information about the entity's use of attributes goes here, such as how it uses an angle given to it.

=== Keys ===
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' |
| The targetname of the Entity.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target''
| The entity to be triggered when the entity is activated / killed / insert whatever is appropriate.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''example_key'' 
| You can keep adding more keeps like this
|}

===Spawnflags===
The entity_name entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| flag #
| flag name in editor (TrenchBroom is ideal)
| Description of flag effects
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Entity
}}

==Definitions==

===FGD Definition===
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the base class definition, which may also be required.
&lt;pre&gt;
[ code from entity entry in an .fgd file goes in here ]
&lt;/pre&gt;
===DEF Definition===
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
[ code from entity entry in a .def file goes in here ]
&lt;/pre&gt;

[[Category:Quake entities]]

----</text>
      <sha1>4arthuym9vtcw44mh2gc6yxx5tsk2bs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2768</id>
      <parentid>2669</parentid>
      <timestamp>2013-04-06T10:48:25Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>small modification to get rid of precache lists</comment>
      <text xml:space="preserve" bytes="5672">The Entity Documentation Project is a joint project to complete all the documentation linked through the '''[[Entity guide]]''' in a cohesive fashion.

== Known Participants ==
Currently the following users are participating in this project:
* [[User:Than]]
* [[User:Hectate]]

== Article Layout ==
If you're comfortable with wiki editing just follow the style of the articles that exist, the [[monster_shalrath]], [[func_button]] and [[func_door]] articles are excellent examples. If you're not, you could copy the below article template and insert the necessary information where it is needed. Alternatively, simply adding the relevant data for someone else to format later is still helpful. Also, even if you don't have ALL the data, some data is better than no data, so feel free to fill in bits of a page, or make modifications to the existing data if you know that it is incorrect.

A bit about the Infobox_entity code near the start:

Delete the commonname field if the entity does not have a common name. An example of a common name is Vore, which is the common name of monster_shalrath. Vore also has a [[Vore|wiki page]], so in this case, it would be linked. An entity with no common name would be info_null, or ambient_drone.

Also delete the precache field if the entity does not precache any models or sounds. You can find out if anything is precached by looking in the entity's qc file (usually near the bottom).

 &lt;nowiki&gt;
{{DISPLAYTITLE:entity_name}}

{{Infobox_entity
| classname = entity_name
| commonname = Entity
| type = point
| class = [[Entity (entity class)|entity]]
| dimensions = X x Y x Z
| quakec = [[entity.qc]]
| precaches =
list precached&lt;br&gt;
models and sounds&lt;br&gt;
here. Otherwise&lt;br&gt;
leave empty&lt;br&gt;
}}

The '''entity_name''' is a blah blah blah; basic entity information goes here.

== Usage ==
The [[Entity name tutorial]] article has some examples of the creation and use of this entity.

You might want to add a link to a more detailed article or tutorial, but for some entities the information can be added right here.

== Attributes ==
Some basic information about the entity's use of attributes goes here, such as how it uses an angle given to it.

=== Keys ===
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' |
| The targetname of the Entity.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target''
| The entity to be triggered when the entity is activated / killed / insert whatever is appropriate.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''example_key'' 
| You can keep adding more keeps like this
|}

===Spawnflags===
The entity_name entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| flag #
| flag name in editor (TrenchBroom is ideal)
| Description of flag effects
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Entity
}}

==Definitions==

===FGD Definition===
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the base class definition, which may also be required.
&lt;pre&gt;
[ code from entity entry in an .fgd file goes in here ]
&lt;/pre&gt;
===DEF Definition===
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
[ code from entity entry in a .def file goes in here ]
&lt;/pre&gt;

[[Category:Quake entities]]
&lt;/nowiki&gt;
If copied to a new page, the above markup should look like the below for you to begin editing.

----
=entity_name=

{{Infobox_entity
| classname = entity_name
| commonname = Entity
| type = point
| class = [[Entity (entity class)|entity]]
| dimensions = X x Y x Z
| quakec = [[entity.qc]]
| precaches =
list precached&lt;br&gt;
models and sounds&lt;br&gt;
here. Otherwise&lt;br&gt;
leave empty&lt;br&gt;
}}

The '''entity_name''' is a blah blah blah; basic entity information goes here.

== Usage ==
The [[Entity name tutorial]] article has some examples of the creation and use of this entity. 

You might want to add a link to a more detailed article or tutorial, but for some entities the information can be added right here.

== Attributes ==
Some basic information about the entity's use of attributes goes here, such as how it uses an angle given to it.

=== Keys ===
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' |
| The targetname of the Entity.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target''
| The entity to be triggered when the entity is activated / killed / insert whatever is appropriate.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''example_key'' 
| You can keep adding more keeps like this
|}

===Spawnflags===
The entity_name entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| flag #
| flag name in editor (TrenchBroom is ideal)
| Description of flag effects
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Entity
}}

==Definitions==

===FGD Definition===
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the base class definition, which may also be required.
&lt;pre&gt;
[ code from entity entry in an .fgd file goes in here ]
&lt;/pre&gt;
===DEF Definition===
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
[ code from entity entry in a .def file goes in here ]
&lt;/pre&gt;

[[Category:Quake entities]]

----</text>
      <sha1>2sq6rlavs6hjwsm7b022vo3tteayuw2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quake Wiki:Log</title>
    <ns>4</ns>
    <id>1030</id>
    <revision>
      <id>2933</id>
      <timestamp>2013-04-27T19:26:53Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Created page with &quot;This page lists administrative tasks and suchs.  2013-04-27: The wiki was incredibly slow. Profiling showed &quot;query: SELECT mr_blob,mr_resource,mr_timestamp FROM msg_resource W...&quot;</comment>
      <text xml:space="preserve" bytes="383">This page lists administrative tasks and suchs.

2013-04-27: The wiki was incredibly slow. Profiling showed &quot;query: SELECT mr_blob,mr_resource,mr_timestamp FROM msg_resource WHERE mr_r&quot; as offender. The table had 80k entries. I simply did &quot;DELETE FROM msg_resource; vacuum;&quot; and it seems to have fixed it. [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 19:26, 27 April 2013 (UTC)</text>
      <sha1>gvtwx5nm0mj01taxeumob6sz74500bm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2977</id>
      <parentid>2933</parentid>
      <timestamp>2013-05-28T16:05:24Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <text xml:space="preserve" bytes="570">This page lists administrative tasks and suchs.

2013-05-28: I moved Starbuck's CSS to the Wiki at http://quakewiki.org/wiki/MediaWiki:Common.css and also used local links for all the images. The fonts remain hosted at Google for now.

2013-04-27: The wiki was incredibly slow. Profiling showed &quot;query: SELECT mr_blob,mr_resource,mr_timestamp FROM msg_resource WHERE mr_r&quot; as offender. The table had 80k entries. I simply did &quot;DELETE FROM msg_resource; vacuum;&quot; and it seems to have fixed it. [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 19:26, 27 April 2013 (UTC)</text>
      <sha1>t3c6mc7rw6fvcb7l9q3qhgundybe4bo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3008</id>
      <parentid>2977</parentid>
      <timestamp>2013-09-14T11:35:20Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>domain renewed</comment>
      <text xml:space="preserve" bytes="780">This page lists administrative tasks and suchs.

2013-09-14: Domain renewed for another year. --[[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 11:35, 14 September 2013 (UTC)

2013-05-28: I moved Starbuck's CSS to the Wiki at http://quakewiki.org/wiki/MediaWiki:Common.css and also used local links for all the images. The fonts remain hosted at Google for now. --[[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 00:00, 28 May 2013 (UTC)

2013-04-27: The wiki was incredibly slow. Profiling showed &quot;query: SELECT mr_blob,mr_resource,mr_timestamp FROM msg_resource WHERE mr_r&quot; as offender. The table had 80k entries. I simply did &quot;DELETE FROM msg_resource; vacuum;&quot; and it seems to have fixed it. --[[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 19:26, 27 April 2013 (UTC)</text>
      <sha1>dk90ep3idcfqa8bobbjoza0ets010su</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3213</id>
      <parentid>3008</parentid>
      <timestamp>2014-01-02T09:54:51Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <text xml:space="preserve" bytes="828">This page lists administrative tasks and suchs.

2014-01-02: Vacuumed msg_resource table again.

2013-09-14: Domain renewed for another year. --[[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 11:35, 14 September 2013 (UTC)

2013-05-28: I moved Starbuck's CSS to the Wiki at http://quakewiki.org/wiki/MediaWiki:Common.css and also used local links for all the images. The fonts remain hosted at Google for now. --[[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 00:00, 28 May 2013 (UTC)

2013-04-27: The wiki was incredibly slow. Profiling showed &quot;query: SELECT mr_blob,mr_resource,mr_timestamp FROM msg_resource WHERE mr_r&quot; as offender. The table had 80k entries. I simply did &quot;DELETE FROM msg_resource; vacuum;&quot; and it seems to have fixed it. --[[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 19:26, 27 April 2013 (UTC)</text>
      <sha1>hxcfaxmvc1ir9sb0mjc5zpn6khuoomb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3235</id>
      <parentid>3213</parentid>
      <timestamp>2014-05-07T19:09:47Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <text xml:space="preserve" bytes="867">This page lists administrative tasks and suchs.

2014-05-07: Site moved to new server.

2014-01-02: Vacuumed msg_resource table again.

2013-09-14: Domain renewed for another year. --[[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 11:35, 14 September 2013 (UTC)

2013-05-28: I moved Starbuck's CSS to the Wiki at http://quakewiki.org/wiki/MediaWiki:Common.css and also used local links for all the images. The fonts remain hosted at Google for now. --[[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 00:00, 28 May 2013 (UTC)

2013-04-27: The wiki was incredibly slow. Profiling showed &quot;query: SELECT mr_blob,mr_resource,mr_timestamp FROM msg_resource WHERE mr_r&quot; as offender. The table had 80k entries. I simply did &quot;DELETE FROM msg_resource; vacuum;&quot; and it seems to have fixed it. --[[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 19:26, 27 April 2013 (UTC)</text>
      <sha1>inyjovmlndn7lr3d0xpkr23spiscq2i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3238</id>
      <parentid>3235</parentid>
      <timestamp>2014-05-12T10:26:20Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <text xml:space="preserve" bytes="1148">This page lists administrative tasks and suchs.

2014-05-12: Added favicon by Scampie. Thanks! --[[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 10:26, 12 May 2014 (UTC)

2014-05-07: Site moved to new server. --[[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 10:26, 12 May 2014 (UTC)

2014-01-02: Vacuumed msg_resource table again. --[[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 10:26, 12 May 2014 (UTC)

2013-09-14: Domain renewed for another year. --[[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 11:35, 14 September 2013 (UTC)

2013-05-28: I moved Starbuck's CSS to the Wiki at http://quakewiki.org/wiki/MediaWiki:Common.css and also used local links for all the images. The fonts remain hosted at Google for now. --[[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 00:00, 28 May 2013 (UTC)

2013-04-27: The wiki was incredibly slow. Profiling showed &quot;query: SELECT mr_blob,mr_resource,mr_timestamp FROM msg_resource WHERE mr_r&quot; as offender. The table had 80k entries. I simply did &quot;DELETE FROM msg_resource; vacuum;&quot; and it seems to have fixed it. --[[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 19:26, 27 April 2013 (UTC)</text>
      <sha1>9gkmc9n82qzkfksaaojiorf1w9ovpws</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quake Wiki:Policies and guidelines</title>
    <ns>4</ns>
    <id>539</id>
    <revision>
      <id>1293</id>
      <timestamp>2009-09-27T08:46:47Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <comment>New page: We generally follow the same conventions as Wikipedia, so if you're familiar with those you're all set. When in doubt, just use common sense.  == Spelling == Don't worry about American/Eve...</comment>
      <text xml:space="preserve" bytes="1119">We generally follow the same conventions as Wikipedia, so if you're familiar with those you're all set. When in doubt, just use common sense.

== Spelling ==
Don't worry about American/Everyone-else spelling conventions (colour/color and that sort of thing) too much, as long as you don't mix them in the same sentence!

== Article titles ==
Only the first word and proper nouns in an article title should be capitalized (not that MediaWiki gives you a choice with the first word).

Good:
* [[Singleplayer maps]]
* [[Customizing Quake]]
Bad:
* Singleplayer Maps
* Config Files
(Unfortunately a lot of cleanup still needs to be done in this area.)

=== Console variables ===
By default, MediaWiki capitalizes the first letter in an article title, and treats underscores as spaces. This means articles on console variables will have really ugly titles, such as &quot;[[Cl name]]&quot; for &quot;cl_name&quot;. For these articles, include the text &lt;tt&gt;&lt;nowiki&gt;{{lowercase-underscores}}&lt;/nowiki&gt;&lt;/tt&gt; at the beginning of the article (see [[sv_gravity]] for an example). The URL will still have a initial capital letter, but that's not too bad.</text>
      <sha1>d33spawg5z5udokmyu04tpozb0rm2t0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1868</id>
      <parentid>1293</parentid>
      <timestamp>2013-03-25T01:18:18Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>/* Console variables */</comment>
      <text xml:space="preserve" bytes="1483">We generally follow the same conventions as Wikipedia, so if you're familiar with those you're all set. When in doubt, just use common sense.

== Spelling ==
Don't worry about American/Everyone-else spelling conventions (colour/color and that sort of thing) too much, as long as you don't mix them in the same sentence!

== Article titles ==
Only the first word and proper nouns in an article title should be capitalized (not that MediaWiki gives you a choice with the first word).

Good:
* [[Singleplayer maps]]
* [[Customizing Quake]]
Bad:
* Singleplayer Maps
* Config Files
(Unfortunately a lot of cleanup still needs to be done in this area.)

=== Console variables ===
By default, MediaWiki capitalizes the first letter in an article title, and treats underscores as spaces. This means articles on console variables will have really ugly titles, such as &quot;[[Cl name]]&quot; for &quot;cl_name&quot;. For these articles, include the text &lt;tt&gt;&lt;nowiki&gt;{{lowercase-underscores}}&lt;/nowiki&gt;&lt;/tt&gt; at the beginning of the article (see [[sv_gravity]] for an example). The URL will still have a initial capital letter, but that's not too bad.
: I tried copying the template:lowercase from Wikipedia to see if it would function here but while it doesn't break anything it doesn't change the capital letters to lowercase (for the first letter only, see [[iD Software]] for example) like it does for Wikipedia. Not sure why... --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 01:18, 25 March 2013 (UTC)</text>
      <sha1>tgqqiq8gmj37x2crcmz5bd6yfsmvco9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1871</id>
      <parentid>1868</parentid>
      <timestamp>2013-03-25T01:19:22Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>/* Console variables */ capitalization kills all! lol</comment>
      <text xml:space="preserve" bytes="1483">We generally follow the same conventions as Wikipedia, so if you're familiar with those you're all set. When in doubt, just use common sense.

== Spelling ==
Don't worry about American/Everyone-else spelling conventions (colour/color and that sort of thing) too much, as long as you don't mix them in the same sentence!

== Article titles ==
Only the first word and proper nouns in an article title should be capitalized (not that MediaWiki gives you a choice with the first word).

Good:
* [[Singleplayer maps]]
* [[Customizing Quake]]
Bad:
* Singleplayer Maps
* Config Files
(Unfortunately a lot of cleanup still needs to be done in this area.)

=== Console variables ===
By default, MediaWiki capitalizes the first letter in an article title, and treats underscores as spaces. This means articles on console variables will have really ugly titles, such as &quot;[[Cl name]]&quot; for &quot;cl_name&quot;. For these articles, include the text &lt;tt&gt;&lt;nowiki&gt;{{lowercase-underscores}}&lt;/nowiki&gt;&lt;/tt&gt; at the beginning of the article (see [[sv_gravity]] for an example). The URL will still have a initial capital letter, but that's not too bad.
: I tried copying the template:lowercase from Wikipedia to see if it would function here but while it doesn't break anything it doesn't change the capital letters to lowercase (for the first letter only, see [[id Software]] for example) like it does for Wikipedia. Not sure why... --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 01:18, 25 March 2013 (UTC)</text>
      <sha1>07kn4wy9ogfnwlyv3mselh35fkys9e6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1896</id>
      <parentid>1871</parentid>
      <timestamp>2013-03-25T02:47:10Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="2128">We generally follow the same conventions as Wikipedia, so if you're familiar with those you're all set. When in doubt, just use common sense.

== Spelling ==
Don't worry about American/Everyone-else spelling conventions (colour/color and that sort of thing) too much, as long as you don't mix them in the same sentence!

== Article titles ==
Only the first word and proper nouns in an article title should be capitalized (not that MediaWiki gives you a choice with the first word).

Good:
* [[Singleplayer maps]]
* [[Customizing Quake]]
Bad:
* Singleplayer Maps
* Config Files
(Unfortunately a lot of cleanup still needs to be done in this area.)

=== Console variables ===
By default, MediaWiki capitalizes the first letter in an article title, and treats underscores as spaces. This means articles on console variables will have really ugly titles, such as &quot;[[Cl name]]&quot; for &quot;cl_name&quot;. For these articles, include the text &lt;tt&gt;&lt;nowiki&gt;{{lowercase-underscores}}&lt;/nowiki&gt;&lt;/tt&gt; at the beginning of the article (see [[sv_gravity]] for an example). The URL will still have a initial capital letter, but that's not too bad.
: I tried copying the template:lowercase from Wikipedia to see if it would function here but while it doesn't break anything it doesn't change the capital letters to lowercase (for the first letter only, see [[id Software]] for example) like it does for Wikipedia. Not sure why... --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 01:18, 25 March 2013 (UTC)

=== Categories ===
I've been adding categories hither and yon and seem to have discovered an issue with MediaWiki. Looking at [[Special:Categories]] shows there's some kind of issue with the categories being repeatedly listed as it finds items for it or something. I found [http://www.mwusers.com/forums/archive/index.php/t-8671.html this help request] online that seems to be related, but the version reported here appears to be higher than that. I'm not sure what he issue is though. Also, it appears we no longer have a direct place for reporting wiki bugs? --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 02:47, 25 March 2013 (UTC)</text>
      <sha1>l7x92puly7i6blef8qioc0ui185pt9j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1956</id>
      <parentid>1896</parentid>
      <timestamp>2013-03-25T06:42:27Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>/* Console variables */  added note</comment>
      <text xml:space="preserve" bytes="2448">We generally follow the same conventions as Wikipedia, so if you're familiar with those you're all set. When in doubt, just use common sense.

== Spelling ==
Don't worry about American/Everyone-else spelling conventions (colour/color and that sort of thing) too much, as long as you don't mix them in the same sentence!

== Article titles ==
Only the first word and proper nouns in an article title should be capitalized (not that MediaWiki gives you a choice with the first word).

Good:
* [[Singleplayer maps]]
* [[Customizing Quake]]
Bad:
* Singleplayer Maps
* Config Files
(Unfortunately a lot of cleanup still needs to be done in this area.)

=== Console variables ===
By default, MediaWiki capitalizes the first letter in an article title, and treats underscores as spaces. This means articles on console variables will have really ugly titles, such as &quot;[[Cl name]]&quot; for &quot;cl_name&quot;. For these articles, include the text &lt;tt&gt;&lt;nowiki&gt;{{lowercase-underscores}}&lt;/nowiki&gt;&lt;/tt&gt; at the beginning of the article (see [[sv_gravity]] for an example). The URL will still have a initial capital letter, but that's not too bad.
: I tried copying the template:lowercase from Wikipedia to see if it would function here but while it doesn't break anything it doesn't change the capital letters to lowercase (for the first letter only, see [[id Software]] for example) like it does for Wikipedia. Not sure why... --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 01:18, 25 March 2013 (UTC)
: It's possible to use &lt;tt&gt;&lt;nowiki&gt;{{DISPLAYNAME:func_door}}&lt;/nowiki&gt;&lt;/tt&gt;to fix titles quite nicely. I've tried it on a couple of articles in the Entity Guide. See [[func_button]]. However, a proper working template would be better I guess. (than... sorry for not adding this note properly. wiki editing is confusing.)

=== Categories ===
I've been adding categories hither and yon and seem to have discovered an issue with MediaWiki. Looking at [[Special:Categories]] shows there's some kind of issue with the categories being repeatedly listed as it finds items for it or something. I found [http://www.mwusers.com/forums/archive/index.php/t-8671.html this help request] online that seems to be related, but the version reported here appears to be higher than that. I'm not sure what he issue is though. Also, it appears we no longer have a direct place for reporting wiki bugs? --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 02:47, 25 March 2013 (UTC)</text>
      <sha1>4zbhe7mivbcc9gp0qbpwvlfa0mw74ga</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1957</id>
      <parentid>1956</parentid>
      <timestamp>2013-03-25T06:43:06Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>/* Console variables */</comment>
      <text xml:space="preserve" bytes="2462">We generally follow the same conventions as Wikipedia, so if you're familiar with those you're all set. When in doubt, just use common sense.

== Spelling ==
Don't worry about American/Everyone-else spelling conventions (colour/color and that sort of thing) too much, as long as you don't mix them in the same sentence!

== Article titles ==
Only the first word and proper nouns in an article title should be capitalized (not that MediaWiki gives you a choice with the first word).

Good:
* [[Singleplayer maps]]
* [[Customizing Quake]]
Bad:
* Singleplayer Maps
* Config Files
(Unfortunately a lot of cleanup still needs to be done in this area.)

=== Console variables ===
By default, MediaWiki capitalizes the first letter in an article title, and treats underscores as spaces. This means articles on console variables will have really ugly titles, such as &quot;[[Cl name]]&quot; for &quot;cl_name&quot;. For these articles, include the text &lt;tt&gt;&lt;nowiki&gt;{{lowercase-underscores}}&lt;/nowiki&gt;&lt;/tt&gt; at the beginning of the article (see [[sv_gravity]] for an example). The URL will still have a initial capital letter, but that's not too bad.
: I tried copying the template:lowercase from Wikipedia to see if it would function here but while it doesn't break anything it doesn't change the capital letters to lowercase (for the first letter only, see [[id Software]] for example) like it does for Wikipedia. Not sure why... --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 01:18, 25 March 2013 (UTC)
: It's possible to use &lt;tt&gt;&lt;nowiki&gt;{{DISPLAYNAME:func_door}}&lt;/nowiki&gt;&lt;/tt&gt;to fix titles quite nicely. I've tried it on a couple of articles in the Entity Guide. See [[func_button]]. However, a proper working template would be better I guess. ([[User:Than|Than]]... sorry for not adding this note properly. wiki editing is confusing.)

=== Categories ===
I've been adding categories hither and yon and seem to have discovered an issue with MediaWiki. Looking at [[Special:Categories]] shows there's some kind of issue with the categories being repeatedly listed as it finds items for it or something. I found [http://www.mwusers.com/forums/archive/index.php/t-8671.html this help request] online that seems to be related, but the version reported here appears to be higher than that. I'm not sure what he issue is though. Also, it appears we no longer have a direct place for reporting wiki bugs? --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 02:47, 25 March 2013 (UTC)</text>
      <sha1>qqeud37y91mglsmdamxjghyc6eip4t1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2074</id>
      <parentid>1957</parentid>
      <timestamp>2013-03-25T14:51:24Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>/* Console variables */  reply</comment>
      <text xml:space="preserve" bytes="2761">We generally follow the same conventions as Wikipedia, so if you're familiar with those you're all set. When in doubt, just use common sense.

== Spelling ==
Don't worry about American/Everyone-else spelling conventions (colour/color and that sort of thing) too much, as long as you don't mix them in the same sentence!

== Article titles ==
Only the first word and proper nouns in an article title should be capitalized (not that MediaWiki gives you a choice with the first word).

Good:
* [[Singleplayer maps]]
* [[Customizing Quake]]
Bad:
* Singleplayer Maps
* Config Files
(Unfortunately a lot of cleanup still needs to be done in this area.)

=== Console variables ===
By default, MediaWiki capitalizes the first letter in an article title, and treats underscores as spaces. This means articles on console variables will have really ugly titles, such as &quot;[[Cl name]]&quot; for &quot;cl_name&quot;. For these articles, include the text &lt;tt&gt;&lt;nowiki&gt;{{lowercase-underscores}}&lt;/nowiki&gt;&lt;/tt&gt; at the beginning of the article (see [[sv_gravity]] for an example). The URL will still have a initial capital letter, but that's not too bad.
: I tried copying the template:lowercase from Wikipedia to see if it would function here but while it doesn't break anything it doesn't change the capital letters to lowercase (for the first letter only, see [[id Software]] for example) like it does for Wikipedia. Not sure why... --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 01:18, 25 March 2013 (UTC)
:: It's possible to use &lt;tt&gt;&lt;nowiki&gt;{{DISPLAYNAME:func_door}}&lt;/nowiki&gt;&lt;/tt&gt;to fix titles quite nicely. I've tried it on a couple of articles in the Entity Guide. See [[func_button]]. However, a proper working template would be better I guess. ([[User:Than|Than]]... sorry for not adding this note properly. wiki editing is confusing.)
::: Yeah I saw your message - it's looking good. Also, after I replied I saw the table you had implemented in the [[func_button]] and it looks great. That's a much better implementation than just a standard * list. --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 14:51, 25 March 2013 (UTC)

=== Categories ===
I've been adding categories hither and yon and seem to have discovered an issue with MediaWiki. Looking at [[Special:Categories]] shows there's some kind of issue with the categories being repeatedly listed as it finds items for it or something. I found [http://www.mwusers.com/forums/archive/index.php/t-8671.html this help request] online that seems to be related, but the version reported here appears to be higher than that. I'm not sure what he issue is though. Also, it appears we no longer have a direct place for reporting wiki bugs? --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 02:47, 25 March 2013 (UTC)</text>
      <sha1>9l6bev42a3f4ibhs2hztjpgd9gye92f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2076</id>
      <parentid>2074</parentid>
      <timestamp>2013-03-25T15:02:30Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>/* Console variables */ note about ancient paragraph</comment>
      <text xml:space="preserve" bytes="3018">We generally follow the same conventions as Wikipedia, so if you're familiar with those you're all set. When in doubt, just use common sense.

== Spelling ==
Don't worry about American/Everyone-else spelling conventions (colour/color and that sort of thing) too much, as long as you don't mix them in the same sentence!

== Article titles ==
Only the first word and proper nouns in an article title should be capitalized (not that MediaWiki gives you a choice with the first word).

Good:
* [[Singleplayer maps]]
* [[Customizing Quake]]
Bad:
* Singleplayer Maps
* Config Files
(Unfortunately a lot of cleanup still needs to be done in this area.)

=== Console variables ===
By default, MediaWiki capitalizes the first letter in an article title, and treats underscores as spaces. This means articles on console variables will have really ugly titles, such as &quot;[[Cl name]]&quot; for &quot;cl_name&quot;. For these articles, include the text &lt;tt&gt;&lt;nowiki&gt;{{lowercase-underscores}}&lt;/nowiki&gt;&lt;/tt&gt; at the beginning of the article (see [[sv_gravity]] for an example). The URL will still have a initial capital letter, but that's not too bad.
: I tried copying the template:lowercase from Wikipedia to see if it would function here but while it doesn't break anything it doesn't change the capital letters to lowercase (for the first letter only, see [[id Software]] for example) like it does for Wikipedia. Not sure why... --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 01:18, 25 March 2013 (UTC)
:: If you read anything, check the date. This paragraph above was from 2009. I have setup '''this''' wiki to not force uppercase for the first character so it should work better. [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 15:02, 25 March 2013 (UTC)
:: It's possible to use &lt;tt&gt;&lt;nowiki&gt;{{DISPLAYNAME:func_door}}&lt;/nowiki&gt;&lt;/tt&gt;to fix titles quite nicely. I've tried it on a couple of articles in the Entity Guide. See [[func_button]]. However, a proper working template would be better I guess. ([[User:Than|Than]]... sorry for not adding this note properly. wiki editing is confusing.)
::: Yeah I saw your message - it's looking good. Also, after I replied I saw the table you had implemented in the [[func_button]] and it looks great. That's a much better implementation than just a standard * list. --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 14:51, 25 March 2013 (UTC)

=== Categories ===
I've been adding categories hither and yon and seem to have discovered an issue with MediaWiki. Looking at [[Special:Categories]] shows there's some kind of issue with the categories being repeatedly listed as it finds items for it or something. I found [http://www.mwusers.com/forums/archive/index.php/t-8671.html this help request] online that seems to be related, but the version reported here appears to be higher than that. I'm not sure what he issue is though. Also, it appears we no longer have a direct place for reporting wiki bugs? --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 02:47, 25 March 2013 (UTC)</text>
      <sha1>1eluw2p412529k6hkpwogbg5c526qh1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2084</id>
      <parentid>2076</parentid>
      <timestamp>2013-03-25T15:35:23Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>Notes about a new todo template</comment>
      <text xml:space="preserve" bytes="3629">We generally follow the same conventions as Wikipedia, so if you're familiar with those you're all set. When in doubt, just use common sense.

== Spelling ==
Don't worry about American/Everyone-else spelling conventions (colour/color and that sort of thing) too much, as long as you don't mix them in the same sentence!

== Article titles ==
Only the first word and proper nouns in an article title should be capitalized (not that MediaWiki gives you a choice with the first word).

Good:
* [[Singleplayer maps]]
* [[Customizing Quake]]
Bad:
* Singleplayer Maps
* Config Files
(Unfortunately a lot of cleanup still needs to be done in this area.)

=== Console variables ===
By default, MediaWiki capitalizes the first letter in an article title, and treats underscores as spaces. This means articles on console variables will have really ugly titles, such as &quot;[[Cl name]]&quot; for &quot;cl_name&quot;. For these articles, include the text &lt;tt&gt;&lt;nowiki&gt;{{lowercase-underscores}}&lt;/nowiki&gt;&lt;/tt&gt; at the beginning of the article (see [[sv_gravity]] for an example). The URL will still have a initial capital letter, but that's not too bad.
: I tried copying the template:lowercase from Wikipedia to see if it would function here but while it doesn't break anything it doesn't change the capital letters to lowercase (for the first letter only, see [[id Software]] for example) like it does for Wikipedia. Not sure why... --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 01:18, 25 March 2013 (UTC)
:: If you read anything, check the date. This paragraph above was from 2009. I have setup '''this''' wiki to not force uppercase for the first character so it should work better. [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 15:02, 25 March 2013 (UTC)
:: It's possible to use &lt;tt&gt;&lt;nowiki&gt;{{DISPLAYNAME:func_door}}&lt;/nowiki&gt;&lt;/tt&gt;to fix titles quite nicely. I've tried it on a couple of articles in the Entity Guide. See [[func_button]]. However, a proper working template would be better I guess. ([[User:Than|Than]]... sorry for not adding this note properly. wiki editing is confusing.)
::: Yeah I saw your message - it's looking good. Also, after I replied I saw the table you had implemented in the [[func_button]] and it looks great. That's a much better implementation than just a standard * list. --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 14:51, 25 March 2013 (UTC)

=== Categories ===
I've been adding categories hither and yon and seem to have discovered an issue with MediaWiki. Looking at [[Special:Categories]] shows there's some kind of issue with the categories being repeatedly listed as it finds items for it or something. I found [http://www.mwusers.com/forums/archive/index.php/t-8671.html this help request] online that seems to be related, but the version reported here appears to be higher than that. I'm not sure what he issue is though. Also, it appears we no longer have a direct place for reporting wiki bugs? --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 02:47, 25 March 2013 (UTC)

=== Templates being used/made ===
I added a template for creation of an automatic To-Do list as well as a reminder. To use it simply insert &lt;nowiki&gt;{{todo}}&lt;/nowiki&gt; into an article's talk page (preferably the talk page anyway). You can optionally specify a user (yourself) and a reminder of what to do. A full example would be &lt;nowiki&gt;{{todo|user=[[Hectate]]|todo=Figure out what other templates we need}}&lt;/nowiki&gt;. Enhancements to the appearance or function of the template would be nice if anybody wants to jump in on that. --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 15:35, 25 March 2013 (UTC)</text>
      <sha1>deair1xq8tuawqsdf4zo32vv0hiugbq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quake Wiki:Timeline</title>
    <ns>4</ns>
    <id>995</id>
    <revision>
      <id>2764</id>
      <timestamp>2013-04-06T08:12:35Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Created page with &quot;2013-04-06: Installed ConfirmEdit with QuestyCaptcha&quot;</comment>
      <text xml:space="preserve" bytes="52">2013-04-06: Installed ConfirmEdit with QuestyCaptcha</text>
      <sha1>aqo8nhfg2f41ypgskq1gqjptef8jxr8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quake bugs</title>
    <ns>0</ns>
    <id>33</id>
    <revision>
      <id>39</id>
      <timestamp>2007-10-30T17:34:51Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: For now, see the Quake Info Pool page which contains a VERY detailed record of [[QuakeC]] and [[Quake]] [[engine]] bugs, and workarounds or fixes for most of them.  http://www.inside3d.com...</comment>
      <text xml:space="preserve" bytes="1138">For now, see the Quake Info Pool page which contains a VERY detailed record of [[QuakeC]] and [[Quake]] [[engine]] bugs, and workarounds or fixes for most of them.

http://www.inside3d.com/qip/home.shtml

===Texture Bugs===

ID Software made a huge mistake when they put their textures in maps. ID included two different textuers in different maps under the same name. Loading a map with one texture then loading a different map with another texture but the same name caused earlier versions of (net/reg)Quake to crash, but newer clients simply use the old (first) texture loaded. Newer clients (as the Quake Retexture Project is hoping) will make use of shaders to differentiate between textures and maps. Here is a running list of texture problems:

Below are all maps (in regular Quake) where the (three) textures appear in.

Todo: get a fucking table to work.

: What about getting Maddes's permission to copy-and-paste stuff from QIP here? Or is the permission implied (IANAL)? -- Tonik
:: Good Idea, I'll do it within a few days. Should I just copy-paste things that are still bugs, or ALL quake bugs? fixed or unfixed? -- Up2nOgOoD</text>
      <sha1>opwlhcyi9l3lgsnu24n7ev1zyv7whm3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1598</id>
      <parentid>39</parentid>
      <timestamp>2010-02-12T19:36:50Z</timestamp>
      <contributor>
        <ip>72.25.192.4</ip>
      </contributor>
      <comment>put this here until a more organized bugs section materializes</comment>
      <text xml:space="preserve" bytes="1542">For now, see the Quake Info Pool page which contains a VERY detailed record of [[QuakeC]] and [[Quake]] [[engine]] bugs, and workarounds or fixes for most of them.

http://www.inside3d.com/qip/home.shtml

===Texture Bugs===

ID Software made a huge mistake when they put their textures in maps. ID included two different textuers in different maps under the same name. Loading a map with one texture then loading a different map with another texture but the same name caused earlier versions of (net/reg)Quake to crash, but newer clients simply use the old (first) texture loaded. Newer clients (as the Quake Retexture Project is hoping) will make use of shaders to differentiate between textures and maps. Here is a running list of texture problems:

Below are all maps (in regular Quake) where the (three) textures appear in.

Todo: get a fucking table to work.

: What about getting Maddes's permission to copy-and-paste stuff from QIP here? Or is the permission implied (IANAL)? -- Tonik
:: Good Idea, I'll do it within a few days. Should I just copy-paste things that are still bugs, or ALL quake bugs? fixed or unfixed? -- Up2nOgOoD

== Engine bugs ==
CL_UpdateTEnts (in cl_tent.c) contains some satanic code which should never have worked. In fact it's a dormant crash, waiting to surface if you look at it funny.

This code at the bottom of the function:

 for (i=0 ; i&lt;3 ; i++)
     org[i] += dist[i]*30;

Is overwriting the use of the variable 'i' in the outer loop! So make a new variable 'j' and use it in this inner loop instead.</text>
      <sha1>lyhthlt4whfdebsxawd5whwuocquamc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2226</id>
      <parentid>1598</parentid>
      <timestamp>2013-03-26T13:16:59Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>/* Texture Bugs */</comment>
      <text xml:space="preserve" bytes="1683">For now, see the Quake Info Pool page which contains a VERY detailed record of [[QuakeC]] and [[Quake]] [[engine]] bugs, and workarounds or fixes for most of them.

http://www.inside3d.com/qip/home.shtml

===Texture Bugs===

ID Software made a huge mistake when they put their textures in maps. ID included two different textuers in different maps under the same name. Loading a map with one texture then loading a different map with another texture but the same name caused earlier versions of (net/reg)Quake to crash, but newer clients simply use the old (first) texture loaded. Newer clients (as the Quake Retexture Project is hoping) will make use of shaders to differentiate between textures and maps. Here is a running list of texture problems:

Below are all maps (in regular Quake) where the (three) textures appear in.

Todo: get a fucking table to work.

: What about getting Maddes's permission to copy-and-paste stuff from QIP here? Or is the permission implied (IANAL)? -- Tonik
:: Good Idea, I'll do it within a few days. Should I just copy-paste things that are still bugs, or ALL quake bugs? fixed or unfixed? -- Up2nOgOoD

{{todo|todo=get a table of known Quake bugs together, list known engines or projects that have corrected these bugs, other information...}}

== Engine bugs ==
CL_UpdateTEnts (in cl_tent.c) contains some satanic code which should never have worked. In fact it's a dormant crash, waiting to surface if you look at it funny.

This code at the bottom of the function:

 for (i=0 ; i&lt;3 ; i++)
     org[i] += dist[i]*30;

Is overwriting the use of the variable 'i' in the outer loop! So make a new variable 'j' and use it in this inner loop instead.</text>
      <sha1>9x1t0b9up67fgqwwqqzsj5frvmefy3d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quake error guide</title>
    <ns>0</ns>
    <id>65</id>
    <revision>
      <id>104</id>
      <timestamp>2007-10-30T21:28:02Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: * [[W_LoadWadFile : couldn't load gfx.wad]] * [[wglMakeCurrent failed]] * [[Fatal error: Hunk_Alloc: bad size]]: -2147483564 * [[Error: (size) is greator than free hunk]] * [[Couldn't load...</comment>
      <text xml:space="preserve" bytes="517">* [[W_LoadWadFile : couldn't load gfx.wad]]
* [[wglMakeCurrent failed]]
* [[Fatal error: Hunk_Alloc: bad size]]: -2147483564
* [[Error: (size) is greator than free hunk]]
* [[Couldn't load Gfx.wad]]
* [[Common Z_Malloc in-game error]]
* [[Common U_Remove error]]
* [[A required .DLL file, Glide2x.dll, was not found]]
* [[The file, *****.***, could not be copied, the file or system is damaged]]
* [[You do not have enough memory to run this program]]
* [[Cannot open file pak*.pak]]
* [[Cannot find file ******.***]]</text>
      <sha1>4h3smbstxl4noc58g9ojfgbpwepvxt3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1014</id>
      <parentid>104</parentid>
      <timestamp>2009-05-27T07:18:35Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="489">* [[W_LoadWadFile : couldn't load gfx.wad]]
* [[wglMakeCurrent failed]]
* [[Fatal error: Hunk_Alloc: bad size]]: -2147483564
* [[Error: (size) is greator than free hunk]]
* [[Common Z_Malloc in-game error]]
* [[Common U_Remove error]]
* [[A required .DLL file, Glide2x.dll, was not found]]
* [[The file, *****.***, could not be copied, the file or system is damaged]]
* [[You do not have enough memory to run this program]]
* [[Cannot open file pak*.pak]]
* [[Cannot find file ******.***]]</text>
      <sha1>1vnjmnzlguujb7gpbieeu0h99ltjc9x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1025</id>
      <parentid>1014</parentid>
      <timestamp>2009-06-10T09:56:23Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>added ATI</comment>
      <text xml:space="preserve" bytes="522">* [[W_LoadWadFile : couldn't load gfx.wad]]
* [[wglMakeCurrent failed]]
* [[Fatal error: Hunk_Alloc: bad size]]: -2147483564
* [[Error: (size) is greator than free hunk]]
* [[Common Z_Malloc in-game error]]
* [[Common U_Remove error]]
* [[A required .DLL file, Glide2x.dll, was not found]]
* [[The file, *****.***, could not be copied, the file or system is damaged]]
* [[You do not have enough memory to run this program]]
* [[Cannot open file pak*.pak]]
* [[Cannot find file ******.***]]
* [[ATI and corrupted graphics]]</text>
      <sha1>t12g1bmbr8e57mv9q3t50mq7gekeztm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2988</id>
      <parentid>1025</parentid>
      <timestamp>2013-06-16T17:25:14Z</timestamp>
      <contributor>
        <username>Deqer</username>
        <id>42</id>
      </contributor>
      <minor/>
      <comment>Adding link for max_leafs_visible</comment>
      <text xml:space="preserve" bytes="570">* [[W_LoadWadFile : couldn't load gfx.wad]]
* [[wglMakeCurrent failed]]
* [[Fatal error: Hunk_Alloc: bad size]]: -2147483564
* [[Error: (size) is greator than free hunk]]
* [[Common Z_Malloc in-game error]]
* [[Common U_Remove error]]
* [[A required .DLL file, Glide2x.dll, was not found]]
* [[The file, *****.***, could not be copied, the file or system is damaged]]
* [[You do not have enough memory to run this program]]
* [[Cannot open file pak*.pak]]
* [[Cannot find file ******.***]]
* [[ATI and corrupted graphics]]
* [[max_leafs_visible]] (This is not an error.)</text>
      <sha1>om4x8ulvknv5w469fchgurylcs6hd4e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quake file formats</title>
    <ns>0</ns>
    <id>34</id>
    <revision>
      <id>41</id>
      <timestamp>2007-10-30T17:36:29Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: * [[.bsp]] * [[.cfg]] * [[.lmp]] * [[.mdl]] * [[.ms2]] * [[.pak]] * [[.rc]] * [[.spr]] * [[.wad]] * [[.wav]]  ===Extended engines File Formats===  * '''.ent''' : [[entity]] definition file...</comment>
      <text xml:space="preserve" bytes="1027">* [[.bsp]]
* [[.cfg]]
* [[.lmp]]
* [[.mdl]]
* [[.ms2]]
* [[.pak]]
* [[.rc]]
* [[.spr]]
* [[.wad]]
* [[.wav]]

===Extended engines File Formats===

* '''.ent''' : [[entity]] definition file (see EntFiles)
* '''.jpg''' : JPEG image format file
* '''.lights''' : light definition
* '''.lit''' : colored lightmap definition
* '''.md2''' : Quake II Model format
* '''.md3''' : Quake III Model format
* '''.pcx''' : PCX image format file
* '''.pk3''' : Quake III's pak file (zip-archives)
* '''.png''' : Portable Network Graphics image format file
* '''.raw''' : heighfield data
* '''.rtlights''' : realtime light definition file
* '''.skin''' : skin scripts
* '''.spr32''' : enhanced sprite files
* '''.tga''' : Targa image format file
* '''.tpak''' : [[Telejano]] private data files
* '''.txt''' : Textfile, used for various scripts
* '''.ogg''' : Ogg Vorbis compressed audio file

===Extended engines Reserved File Formats===

* '''.hlit''' : high-resolution colored lightmap definition. No implementation as yet.

(incomplete...)</text>
      <sha1>gtxmltm0syi4s5b6gjk1sz16l0qd97j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1006</id>
      <parentid>41</parentid>
      <timestamp>2009-05-23T13:43:00Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>added some infos</comment>
      <text xml:space="preserve" bytes="1115">* [[.bsp]] : Quake Map
* [[.cfg]] : Configuration file
* [[.lmp]]
* [[.mdl]] : Quake Model
* [[.ms2]]
* [[.pak]]
* [[.rc]]
* [[.spr]]
* [[.wad]] : Quake Textures
* [[.wav]] : Waveform audio format

===Extended engines File Formats===

* '''.ent''' : [[entity]] definition file (see EntFiles)
* '''.jpg''' : JPEG image format file
* '''.lights''' : light definition
* '''.lit''' : colored lightmap definition
* '''.md2''' : Quake II Model format
* '''.md3''' : Quake III Model format
* '''.pcx''' : PCX image format file
* '''.pk3''' : Quake III's pak file (zip-archives)
* '''.png''' : Portable Network Graphics image format file
* '''.raw''' : heighfield data
* '''.rtlights''' : realtime light definition file
* '''.skin''' : skin scripts
* '''.spr32''' : enhanced sprite files
* '''.tga''' : Targa image format file
* '''.tpak''' : [[Telejano]] private data files
* '''.txt''' : Textfile, used for various scripts
* '''.ogg''' : Ogg Vorbis compressed audio file

===Extended engines Reserved File Formats===

* '''.hlit''' : high-resolution colored lightmap definition. No implementation as yet.

(incomplete...)</text>
      <sha1>brfnwfyncc3gv05rphmxk6mykmwqggy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1010</id>
      <parentid>1006</parentid>
      <timestamp>2009-05-26T00:58:25Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="1479">* [[.bsp]] : Level (suitable for playing)
* [[.cfg]] : Configuration file
* [[.lmp]] : 2D HUD/UI graphics, also [[colormap.lmp]]
* [[.map]] : Uncompiled level (must be compiled into a .bsp before playing)
* [[.mdl]] : Model (3D asset for in-game entities)
* [[.ms2]] : Cached 3D mesh file generated by [[GLQuake]]
* [[.pak]] : File archive, contains many files of other types, 
* [[.rc]]  : Configuration file
* [[.spr]] : Sprite (2D asset for in-game entities)
* [[.wad]] : Quake Textures for map compiling, also [[gfx.wad]]
* [[.wav]] : Waveform audio format

===Extended engines File Formats===

* '''.ent''' : [[entity]] definition file (see EntFiles)
* '''.jpg''' : JPEG image format file
* '''.lights''' : light definition
* '''.lit''' : colored lightmap definition
* '''.md2''' : Quake II Model format
* '''.md3''' : Quake III Model format
* '''.pcx''' : PCX image format file
* '''.pk3''' : Quake III's pak file (zip-archives)
* '''.png''' : Portable Network Graphics image format file
* '''.raw''' : heighfield data
* '''.rtlights''' : realtime light definition file
* '''.skin''' : skin scripts
* '''.spr32''' : enhanced sprite files
* '''.tga''' : Targa image format file
* '''.tpak''' : [[Telejano]] private data files
* '''.txt''' : Textfile, used for various scripts
* '''.ogg''' : Ogg Vorbis compressed audio file

===Extended engines Reserved File Formats===

* '''.hlit''' : high-resolution colored lightmap definition. No implementation as yet.

(incomplete...)</text>
      <sha1>05qf2wcrp4g8c9ip0bck34f4y720dze</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1011</id>
      <parentid>1010</parentid>
      <timestamp>2009-05-26T00:58:51Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="1477">* [[.bsp]] : Level (suitable for playing)
* [[.cfg]] : Configuration file
* [[.lmp]] : 2D HUD/UI graphics, also [[colormap.lmp]]
* [[.map]] : Uncompiled level (must be compiled into a .bsp before playing)
* [[.mdl]] : Model (3D asset for in-game entities)
* [[.ms2]] : Cached 3D mesh file generated by [[GLQuake]]
* [[.pak]] : File archive, contains many files of other types
* [[.rc]]  : Configuration file
* [[.spr]] : Sprite (2D asset for in-game entities)
* [[.wad]] : Quake Textures for map compiling, also [[gfx.wad]]
* [[.wav]] : Waveform audio format

===Extended engines File Formats===

* '''.ent''' : [[entity]] definition file (see EntFiles)
* '''.jpg''' : JPEG image format file
* '''.lights''' : light definition
* '''.lit''' : colored lightmap definition
* '''.md2''' : Quake II Model format
* '''.md3''' : Quake III Model format
* '''.pcx''' : PCX image format file
* '''.pk3''' : Quake III's pak file (zip-archives)
* '''.png''' : Portable Network Graphics image format file
* '''.raw''' : heighfield data
* '''.rtlights''' : realtime light definition file
* '''.skin''' : skin scripts
* '''.spr32''' : enhanced sprite files
* '''.tga''' : Targa image format file
* '''.tpak''' : [[Telejano]] private data files
* '''.txt''' : Textfile, used for various scripts
* '''.ogg''' : Ogg Vorbis compressed audio file

===Extended engines Reserved File Formats===

* '''.hlit''' : high-resolution colored lightmap definition. No implementation as yet.

(incomplete...)</text>
      <sha1>7y4x3vf3b4uf9rqdedfge9alms95bhz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1012</id>
      <parentid>1011</parentid>
      <timestamp>2009-05-26T01:00:57Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="1550">* [[.bsp]] : [[Level]] (suitable for playing)
* [[.cfg]] : Configuration file
* [[.dem]] : Quake [[demo]], a recorded gameplay session
* [[.lmp]] : 2D HUD/UI graphics, also [[colormap.lmp]]
* [[.map]] : Uncompiled level (must be compiled into a .bsp before playing)
* [[.mdl]] : [[Model]] (3D asset for in-game entities)
* [[.ms2]] : Cached 3D mesh file generated by [[GLQuake]]
* [[.pak]] : File archive, contains many files of other types
* [[.rc]]  : Configuration file
* [[.spr]] : [[Sprite]] (2D asset for in-game entities)
* [[.wad]] : Quake [[Textures]] for map compiling, also [[gfx.wad]]
* [[.wav]] : Waveform audio format

===Extended engines File Formats===

* '''.ent''' : [[entity]] definition file (see EntFiles)
* '''.jpg''' : JPEG image format file
* '''.lights''' : light definition
* '''.lit''' : colored lightmap definition
* '''.md2''' : Quake II Model format
* '''.md3''' : Quake III Model format
* '''.pcx''' : PCX image format file
* '''.pk3''' : Quake III's pak file (zip-archives)
* '''.png''' : Portable Network Graphics image format file
* '''.raw''' : heighfield data
* '''.rtlights''' : realtime light definition file
* '''.skin''' : skin scripts
* '''.spr32''' : enhanced sprite files
* '''.tga''' : Targa image format file
* '''.tpak''' : [[Telejano]] private data files
* '''.txt''' : Textfile, used for various scripts
* '''.ogg''' : Ogg Vorbis compressed audio file

===Extended engines Reserved File Formats===

* '''.hlit''' : high-resolution colored lightmap definition. No implementation as yet.

(incomplete...)</text>
      <sha1>8bjy7vd7t9nwpojek1u12mf5kwpuh01</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1170</id>
      <parentid>1012</parentid>
      <timestamp>2009-09-23T22:39:19Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1602">* [[.bsp]] : [[Level]] (suitable for playing)
* [[.cfg]] : Configuration file
* [[.dem]] : Quake [[demo]], a recorded gameplay session
* [[.lmp]] : 2D HUD/UI graphics, also [[palette.lmp]] and [[colormap.lmp]] (sort of a catch-all extension)
* [[.map]] : Uncompiled level (must be compiled into a .bsp before playing)
* [[.mdl]] : [[Model]] (3D asset for in-game entities)
* [[.ms2]] : Cached 3D mesh file generated by [[GLQuake]]
* [[.pak]] : File archive, contains many files of other types
* [[.rc]]  : Configuration file
* [[.spr]] : [[Sprite]] (2D asset for in-game entities)
* [[.wad]] : Quake [[Textures]] for map compiling, also [[gfx.wad]]
* [[.wav]] : Waveform audio format

===Extended engines File Formats===

* '''.ent''' : [[entity]] definition file (see EntFiles)
* '''.jpg''' : JPEG image format file
* '''.lights''' : light definition
* '''.lit''' : colored lightmap definition
* '''.md2''' : Quake II Model format
* '''.md3''' : Quake III Model format
* '''.pcx''' : PCX image format file
* '''.pk3''' : Quake III's pak file (zip-archives)
* '''.png''' : Portable Network Graphics image format file
* '''.raw''' : heighfield data
* '''.rtlights''' : realtime light definition file
* '''.skin''' : skin scripts
* '''.spr32''' : enhanced sprite files
* '''.tga''' : Targa image format file
* '''.tpak''' : [[Telejano]] private data files
* '''.txt''' : Textfile, used for various scripts
* '''.ogg''' : Ogg Vorbis compressed audio file

===Extended engines Reserved File Formats===

* '''.hlit''' : high-resolution colored lightmap definition. No implementation as yet.

(incomplete...)</text>
      <sha1>9phureqo0fhi6uujdwn8kri7zwxaklm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2289</id>
      <parentid>1170</parentid>
      <timestamp>2013-03-26T17:57:03Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="1636">* [[Quake_BSP_Format|.bsp]] : [[Level]] (suitable for playing)
* [[.cfg]] : Configuration file
* [[.dem]] : Quake [[demo]], a recorded gameplay session
* [[.lmp]] : 2D HUD/UI graphics, also [[palette.lmp]] and [[colormap.lmp]] (sort of a catch-all extension)
* [[Quake_Map_Format|.map]] : Uncompiled level (must be compiled into a .bsp before playing)
* [[.mdl]] : [[Model]] (3D asset for in-game entities)
* [[.ms2]] : Cached 3D mesh file generated by [[GLQuake]]
* [[.pak]] : File archive, contains many files of other types
* [[.rc]]  : Configuration file
* [[.spr]] : [[Sprite]] (2D asset for in-game entities)
* [[.wad]] : Quake [[Textures]] for map compiling, also [[gfx.wad]]
* [[.wav]] : Waveform audio format

===Extended engines File Formats===

* '''.ent''' : [[entity]] definition file (see EntFiles)
* '''.jpg''' : JPEG image format file
* '''.lights''' : light definition
* '''.lit''' : colored lightmap definition
* '''.md2''' : Quake II Model format
* '''.md3''' : Quake III Model format
* '''.pcx''' : PCX image format file
* '''.pk3''' : Quake III's pak file (zip-archives)
* '''.png''' : Portable Network Graphics image format file
* '''.raw''' : heighfield data
* '''.rtlights''' : realtime light definition file
* '''.skin''' : skin scripts
* '''.spr32''' : enhanced sprite files
* '''.tga''' : Targa image format file
* '''.tpak''' : [[Telejano]] private data files
* '''.txt''' : Textfile, used for various scripts
* '''.ogg''' : Ogg Vorbis compressed audio file

===Extended engines Reserved File Formats===

* '''.hlit''' : high-resolution colored lightmap definition. No implementation as yet.

(incomplete...)</text>
      <sha1>7mrb2fz9w3xt5e0ifiacpyk094vacnf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2292</id>
      <parentid>2289</parentid>
      <timestamp>2013-03-26T18:00:34Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="1648">* [[Quake_BSP_Format|.bsp]] : [[Level]] (suitable for playing)
* [[.cfg]] : Configuration file
* [[.dem]] : Quake [[demo]], a recorded gameplay session
* [[.lmp]] : 2D HUD/UI graphics, also [[palette.lmp]] and [[colormap.lmp]] (sort of a catch-all extension)
* [[Quake_Map_Format|.map]] : Uncompiled level (must be compiled into a .bsp before playing)
* [[.mdl]] : [[Model]] (3D asset for in-game entities)
* [[.ms2]] : Cached 3D mesh file generated by [[GLQuake]]
* [[.pak]] : File archive, contains many files of other types
* [[.rc]]  : Configuration file
* [[.spr]] : [[Sprite]] (2D asset for in-game entities)
* [[Texture_Wad|.wad]] : Quake [[Textures]] for map compiling, also [[gfx.wad]]
* [[.wav]] : Waveform audio format

===Extended engines File Formats===

* '''.ent''' : [[entity]] definition file (see EntFiles)
* '''.jpg''' : JPEG image format file
* '''.lights''' : light definition
* '''.lit''' : colored lightmap definition
* '''.md2''' : Quake II Model format
* '''.md3''' : Quake III Model format
* '''.pcx''' : PCX image format file
* '''.pk3''' : Quake III's pak file (zip-archives)
* '''.png''' : Portable Network Graphics image format file
* '''.raw''' : heighfield data
* '''.rtlights''' : realtime light definition file
* '''.skin''' : skin scripts
* '''.spr32''' : enhanced sprite files
* '''.tga''' : Targa image format file
* '''.tpak''' : [[Telejano]] private data files
* '''.txt''' : Textfile, used for various scripts
* '''.ogg''' : Ogg Vorbis compressed audio file

===Extended engines Reserved File Formats===

* '''.hlit''' : high-resolution colored lightmap definition. No implementation as yet.

(incomplete...)</text>
      <sha1>qyasoljdwxjed86wix1skw5tu20p08m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2700</id>
      <parentid>2292</parentid>
      <timestamp>2013-03-30T15:13:11Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>cfg link</comment>
      <text xml:space="preserve" bytes="1661">* [[Quake_BSP_Format|.bsp]] : [[Level]] (suitable for playing)
* [[Config files|.cfg]] : Configuration file
* [[.dem]] : Quake [[demo]], a recorded gameplay session
* [[.lmp]] : 2D HUD/UI graphics, also [[palette.lmp]] and [[colormap.lmp]] (sort of a catch-all extension)
* [[Quake_Map_Format|.map]] : Uncompiled level (must be compiled into a .bsp before playing)
* [[.mdl]] : [[Model]] (3D asset for in-game entities)
* [[.ms2]] : Cached 3D mesh file generated by [[GLQuake]]
* [[.pak]] : File archive, contains many files of other types
* [[.rc]]  : Configuration file
* [[.spr]] : [[Sprite]] (2D asset for in-game entities)
* [[Texture_Wad|.wad]] : Quake [[Textures]] for map compiling, also [[gfx.wad]]
* [[.wav]] : Waveform audio format

===Extended engines File Formats===

* '''.ent''' : [[entity]] definition file (see EntFiles)
* '''.jpg''' : JPEG image format file
* '''.lights''' : light definition
* '''.lit''' : colored lightmap definition
* '''.md2''' : Quake II Model format
* '''.md3''' : Quake III Model format
* '''.pcx''' : PCX image format file
* '''.pk3''' : Quake III's pak file (zip-archives)
* '''.png''' : Portable Network Graphics image format file
* '''.raw''' : heighfield data
* '''.rtlights''' : realtime light definition file
* '''.skin''' : skin scripts
* '''.spr32''' : enhanced sprite files
* '''.tga''' : Targa image format file
* '''.tpak''' : [[Telejano]] private data files
* '''.txt''' : Textfile, used for various scripts
* '''.ogg''' : Ogg Vorbis compressed audio file

===Extended engines Reserved File Formats===

* '''.hlit''' : high-resolution colored lightmap definition. No implementation as yet.

(incomplete...)</text>
      <sha1>69lqq70d9foyjvh8vfivh01m27t70ai</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quake font</title>
    <ns>0</ns>
    <id>38</id>
    <revision>
      <id>45</id>
      <timestamp>2007-10-30T17:40:57Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: The bitmap font that [[Quake]] uses to display text in the console or on screen. The image data is stored in gfx/conchars.lmp.  [[Image:Quakefont.gif]]  Certain characters have special mea...</comment>
      <text xml:space="preserve" bytes="451">The bitmap font that [[Quake]] uses to display text in the console or on screen. The image data is stored in gfx/conchars.lmp.

[[Image:Quakefont.gif]]

Certain characters have special meaning when printing on the client:

* \{13} - New line
* \{10} - Line Feed
* \{2} - 'Red' text for [[SVC_PRINT|prints]] (used by the engine for the map message)
* \{1} - 'Red' text for [[SVC_PRINT|prints]] plus play misc/talk.wav (used by the engine for chat text)</text>
      <sha1>imsspry3yoq26py5l1pddmpxvkw2nf7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quake network messages</title>
    <ns>0</ns>
    <id>47</id>
    <revision>
      <id>57</id>
      <timestamp>2007-10-30T18:11:44Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: ===Message modes=== * [[MSG_BROADCAST]] = 0; * [[MSG_ONE]] = 1; * [[MSG_ALL]] = 2; * [[MSG_INIT]] = 3;  ===Message Types=== * [[SVC_BAD]] = 0; * [[SVC_NOP]] = 1; * [[SVC_DISCONNECT]] = 2; ...</comment>
      <text xml:space="preserve" bytes="1050">===Message modes===
* [[MSG_BROADCAST]] = 0;
* [[MSG_ONE]] = 1;
* [[MSG_ALL]] = 2;
* [[MSG_INIT]] = 3;

===Message Types===
* [[SVC_BAD]] = 0;
* [[SVC_NOP]] = 1;
* [[SVC_DISCONNECT]] = 2;
* [[SVC_UPDATESTAT]] = 3;
* [[SVC_VERSION]] = 4;
* [[SVC_SETVIEW]] = 5;
* [[SVC_SOUND]] = 6
* [[SVC_TIME]] = 7;
* [[SVC_PRINT]] = 8;
* [[SVC_STUFFTEXT]] = 9;
* [[SVC_SETANGLE]] = 10;
* [[SVC_SERVERINFO]] = 11;
* [[SVC_LIGHTSTYLE]] = 12;
* [[SVC_UPDATENAME]] = 13;
* [[SVC_UPDATEFRAGS]] = 13;
* [[SVC_CLIENTDATA]] = 14;
* [[SVC_STOPSOUND]] = 16;
* [[SVC_UPDATECOLORS]] = 17;
* [[SVC_PARTICLE]] = 18;
* [[SVC_DAMAGE]] = 19;
* [[SVC_SPAWNSTATIC]] = 20;
* [[SVC_SPAWNBINARY]] = 21;
* [[SVC_SPAWNBASELINE]] = 22;
* [[SVC_TEMPENTITY]] = 23;
* [[SVC_SETPAUSE]] = 24;
* [[SVC_SIGNONNUM]] = 25;
* [[SVC_CENTERPRINT]] = 26;
* [[SVC_KILLEDMONSTER]] = 27;
* [[SVC_FOUNDSECRET]] = 28;
* [[SVC_SPAWNSTATICSOUND]] = 29;
* [[SVC_INTERMISSION]] = 30;
* [[SVC_FINALE]] = 31;
* [[SVC_CDTRACK]] = 32;
* [[SVC_SELLSCREEN]] = 33;
* [[SVC_CUTSCENE]] = 34;
* [[SVC_UPDATEENTITY]] = 128;</text>
      <sha1>fyxwnvu3y471ilo8wgjqzv60412cvuv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quake palette</title>
    <ns>0</ns>
    <id>36</id>
    <revision>
      <id>43</id>
      <timestamp>2007-10-30T17:40:01Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: [[Image:Palette.png]]  The last 2 bottom rows, colors 224 to 255 are normally &quot;fullbright&quot; and will not be affected by shadows on properly functioning Quake ports. The number of fullbright...</comment>
      <text xml:space="preserve" bytes="1768">[[Image:Palette.png]]

The last 2 bottom rows, colors 224 to 255 are normally &quot;fullbright&quot; and will not be affected by shadows on properly functioning Quake ports. The number of fullbrights are actually determined by the gfx/colormap.lmp file. Fullbrights are broken in [[GLQuake]] and some Quake ports based off of GLQuake. Color 255 is transparent for sprites, 2d lmps, and gfx.wad entries (excluding [[conchars]], in which case it is black (color 0) that's made transparent) The parameters for the [color] console command are the row #, but is restricted to rows 0 - 13:

*Row 0 = Colors 0 - 15 = &quot;White&quot;
*Row 1 = Colors 16 - 31 = &quot;Brown&quot;
*Row 2 = Colors 32 - 47 = &quot;Light Blue&quot;
*Row 3 = Colors 48 - 63 = &quot;Green&quot;
*Row 4 = Colors 64 - 79 = &quot;Red&quot;
*Row 5 = Colors 80 - 95 = &quot;Orange&quot;
*Row 6 = Colors 96 - 111 = &quot;Gold&quot;
*Row 7 = Colors 112 - 127 = &quot;Peach&quot;
*Row 8 = Colors 128 - 143 = &quot;Purple&quot;
*Row 9 = Colors 144 - 159 = &quot;Magenta&quot;
*Row 10 = Colors 160 - 175 = &quot;Tan&quot;
*Row 11 = Colors 176 - 191 = &quot;Light Green&quot;
*Row 12 = Colors 192 - 207 = &quot;Yellow&quot;
*Row 13 = Colors 208 - 223 = &quot;Blue&quot;
*Row 14 = Colors 224 - 239 = &quot;Fire&quot;
*Row 15 = Colors 240 - 255 = &quot;Brights&quot;

===Related Info===
* Some mods use a new palette, like the Warhammer 40000 mod (you need to buy) or YPOD Doom.
* Most engine mods use 32-bit colour, so you need not worry about palettes. With 32-bit textures, shirt/pants colour changing and fullbrights are only possible if engines support a new implementation of them, for example [[DarkPlaces]]'s [[DP_GFX_EXTERNALTEXTURES]] extension, which allows additional _glow, _pants, _shirt, etc textures on top of the main one)
: Lame question: Its the colormap.lmp file copyrighted?
:: I don't know but you can easily build a new one with [[AdQuedit]] or [[qME]] -- SA</text>
      <sha1>m8z8fpynhxy3j6bt9ciig0uo4yan8m9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>572</id>
      <parentid>43</parentid>
      <timestamp>2008-03-30T07:33:30Z</timestamp>
      <contributor>
        <ip>69.59.212.88</ip>
      </contributor>
      <comment>/* Related Info */</comment>
      <text xml:space="preserve" bytes="2003">[[Image:Palette.png]]

The last 2 bottom rows, colors 224 to 255 are normally &quot;fullbright&quot; and will not be affected by shadows on properly functioning Quake ports. The number of fullbrights are actually determined by the gfx/colormap.lmp file. Fullbrights are broken in [[GLQuake]] and some Quake ports based off of GLQuake. Color 255 is transparent for sprites, 2d lmps, and gfx.wad entries (excluding [[conchars]], in which case it is black (color 0) that's made transparent) The parameters for the [color] console command are the row #, but is restricted to rows 0 - 13:

*Row 0 = Colors 0 - 15 = &quot;White&quot;
*Row 1 = Colors 16 - 31 = &quot;Brown&quot;
*Row 2 = Colors 32 - 47 = &quot;Light Blue&quot;
*Row 3 = Colors 48 - 63 = &quot;Green&quot;
*Row 4 = Colors 64 - 79 = &quot;Red&quot;
*Row 5 = Colors 80 - 95 = &quot;Orange&quot;
*Row 6 = Colors 96 - 111 = &quot;Gold&quot;
*Row 7 = Colors 112 - 127 = &quot;Peach&quot;
*Row 8 = Colors 128 - 143 = &quot;Purple&quot;
*Row 9 = Colors 144 - 159 = &quot;Magenta&quot;
*Row 10 = Colors 160 - 175 = &quot;Tan&quot;
*Row 11 = Colors 176 - 191 = &quot;Light Green&quot;
*Row 12 = Colors 192 - 207 = &quot;Yellow&quot;
*Row 13 = Colors 208 - 223 = &quot;Blue&quot;
*Row 14 = Colors 224 - 239 = &quot;Fire&quot;
*Row 15 = Colors 240 - 255 = &quot;Brights&quot;

===Related Info===
* Some mods use a new palette, like the Warhammer 40000 mod (you need to buy) or YPOD Doom.
* Most engine mods use 32-bit colour, so you need not worry about palettes. With 32-bit textures, shirt/pants colour changing and fullbrights are only possible if engines support a new implementation of them, for example [[DarkPlaces]]'s [[DP_GFX_EXTERNALTEXTURES]] extension, which allows additional _glow, _pants, _shirt, etc textures on top of the main one)
: Lame question: Its the colormap.lmp file copyrighted?
:: I don't know but you can easily build a new one with [[AdQuedit]] or [[qME]] -- SA
:: John Carmack officially put palette.lmp in the public domain to make Quake ports easier - one could assume that colormap.lmp is probably also public domain as it is simply derived from it and easily replaceable anyway. -- LordHavoc</text>
      <sha1>gr6turzeasaj1i0sqpuhyo0owea8ynp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1164</id>
      <parentid>572</parentid>
      <timestamp>2009-09-23T22:00:55Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <comment>revamped somewhat</comment>
      <text xml:space="preserve" bytes="14405">__NOTOC__[[Image:Qpalette.png|right|thumb|The Quake palette.]]
{|style=&quot;color:white;font-weight:bold;font-size:8pt;text-align:center;&quot;
|-
|style=&quot;color:black;text-align:right;&quot;|White (0)
|style=&quot;background:#000000;height:8pt;&quot;|0
|style=&quot;background:#0f0f0f;height:8pt;&quot;|1
|style=&quot;background:#1f1f1f;height:8pt;&quot;|2
|style=&quot;background:#2f2f2f;height:8pt;&quot;|3
|style=&quot;background:#3f3f3f;height:8pt;&quot;|4
|style=&quot;background:#4b4b4b;height:8pt;&quot;|5
|style=&quot;background:#5b5b5b;height:8pt;&quot;|6
|style=&quot;background:#6b6b6b;height:8pt;&quot;|7
|style=&quot;background:#7b7b7b;height:8pt;&quot;|8
|style=&quot;background:#8b8b8b;height:8pt;&quot;|9
|style=&quot;background:#9b9b9b;height:8pt;&quot;|10
|style=&quot;background:#ababab;height:8pt;&quot;|11
|style=&quot;background:#bbbbbb;height:8pt;&quot;|12
|style=&quot;background:#cbcbcb;height:8pt;&quot;|13
|style=&quot;background:#dbdbdb;height:8pt;&quot;|14
|style=&quot;background:#ebebeb;height:8pt;&quot;|15
|-
|style=&quot;color:black;text-align:right;&quot;|Brown (1)
|style=&quot;background:#0f0b07;height:8pt;&quot;|16
|style=&quot;background:#170f0b;height:8pt;&quot;|17
|style=&quot;background:#1f170b;height:8pt;&quot;|18
|style=&quot;background:#271b0f;height:8pt;&quot;|19
|style=&quot;background:#2f2313;height:8pt;&quot;|20
|style=&quot;background:#372b17;height:8pt;&quot;|21
|style=&quot;background:#3f2f17;height:8pt;&quot;|22
|style=&quot;background:#4b371b;height:8pt;&quot;|23
|style=&quot;background:#533b1b;height:8pt;&quot;|24
|style=&quot;background:#5b431f;height:8pt;&quot;|25
|style=&quot;background:#634b1f;height:8pt;&quot;|26
|style=&quot;background:#6b531f;height:8pt;&quot;|27
|style=&quot;background:#73571f;height:8pt;&quot;|28
|style=&quot;background:#7b5f23;height:8pt;&quot;|29
|style=&quot;background:#836723;height:8pt;&quot;|30
|style=&quot;background:#8f6f23;height:8pt;&quot;|31
|-
|style=&quot;color:black;text-align:right;&quot;|Light blue (2)
|style=&quot;background:#0b0b0f;height:8pt;&quot;|32
|style=&quot;background:#13131b;height:8pt;&quot;|33
|style=&quot;background:#1b1b27;height:8pt;&quot;|34
|style=&quot;background:#272733;height:8pt;&quot;|35
|style=&quot;background:#2f2f3f;height:8pt;&quot;|36
|style=&quot;background:#37374b;height:8pt;&quot;|37
|style=&quot;background:#3f3f57;height:8pt;&quot;|38
|style=&quot;background:#474767;height:8pt;&quot;|39
|style=&quot;background:#4f4f73;height:8pt;&quot;|40
|style=&quot;background:#5b5b7f;height:8pt;&quot;|41
|style=&quot;background:#63638b;height:8pt;&quot;|42
|style=&quot;background:#6b6b97;height:8pt;&quot;|43
|style=&quot;background:#7373a3;height:8pt;&quot;|44
|style=&quot;background:#7b7baf;height:8pt;&quot;|45
|style=&quot;background:#8383bb;height:8pt;&quot;|46
|style=&quot;background:#8b8bcb;height:8pt;&quot;|47
|-
|style=&quot;color:black;text-align:right;&quot;|Green (3)
|style=&quot;background:#000000;height:8pt;&quot;|48
|style=&quot;background:#070700;height:8pt;&quot;|49
|style=&quot;background:#0b0b00;height:8pt;&quot;|50
|style=&quot;background:#131300;height:8pt;&quot;|51
|style=&quot;background:#1b1b00;height:8pt;&quot;|52
|style=&quot;background:#232300;height:8pt;&quot;|53
|style=&quot;background:#2b2b07;height:8pt;&quot;|54
|style=&quot;background:#2f2f07;height:8pt;&quot;|55
|style=&quot;background:#373707;height:8pt;&quot;|56
|style=&quot;background:#3f3f07;height:8pt;&quot;|57
|style=&quot;background:#474707;height:8pt;&quot;|58
|style=&quot;background:#4b4b0b;height:8pt;&quot;|59
|style=&quot;background:#53530b;height:8pt;&quot;|60
|style=&quot;background:#5b5b0b;height:8pt;&quot;|61
|style=&quot;background:#63630b;height:8pt;&quot;|62
|style=&quot;background:#6b6b0f;height:8pt;&quot;|63
|-
|style=&quot;color:black;text-align:right;&quot;|Red (4)
|style=&quot;background:#070000;height:8pt;&quot;|64
|style=&quot;background:#0f0000;height:8pt;&quot;|65
|style=&quot;background:#170000;height:8pt;&quot;|66
|style=&quot;background:#1f0000;height:8pt;&quot;|67
|style=&quot;background:#270000;height:8pt;&quot;|68
|style=&quot;background:#2f0000;height:8pt;&quot;|69
|style=&quot;background:#370000;height:8pt;&quot;|70
|style=&quot;background:#3f0000;height:8pt;&quot;|71
|style=&quot;background:#470000;height:8pt;&quot;|72
|style=&quot;background:#4f0000;height:8pt;&quot;|73
|style=&quot;background:#570000;height:8pt;&quot;|74
|style=&quot;background:#5f0000;height:8pt;&quot;|75
|style=&quot;background:#670000;height:8pt;&quot;|76
|style=&quot;background:#6f0000;height:8pt;&quot;|77
|style=&quot;background:#770000;height:8pt;&quot;|78
|style=&quot;background:#7f0000;height:8pt;&quot;|79
|-
|style=&quot;color:black;text-align:right;&quot;|Orange (5)
|style=&quot;background:#131300;height:8pt;&quot;|80
|style=&quot;background:#1b1b00;height:8pt;&quot;|81
|style=&quot;background:#232300;height:8pt;&quot;|82
|style=&quot;background:#2f2b00;height:8pt;&quot;|83
|style=&quot;background:#372f00;height:8pt;&quot;|84
|style=&quot;background:#433700;height:8pt;&quot;|85
|style=&quot;background:#4b3b07;height:8pt;&quot;|86
|style=&quot;background:#574307;height:8pt;&quot;|87
|style=&quot;background:#5f4707;height:8pt;&quot;|88
|style=&quot;background:#6b4b0b;height:8pt;&quot;|89
|style=&quot;background:#77530f;height:8pt;&quot;|90
|style=&quot;background:#835713;height:8pt;&quot;|91
|style=&quot;background:#8b5b13;height:8pt;&quot;|92
|style=&quot;background:#975f1b;height:8pt;&quot;|93
|style=&quot;background:#a3631f;height:8pt;&quot;|94
|style=&quot;background:#af6723;height:8pt;&quot;|95
|-
|style=&quot;color:black;text-align:right;&quot;|Gold (6)
|style=&quot;background:#231307;height:8pt;&quot;|96
|style=&quot;background:#2f170b;height:8pt;&quot;|97
|style=&quot;background:#3b1f0f;height:8pt;&quot;|98
|style=&quot;background:#4b2313;height:8pt;&quot;|99
|style=&quot;background:#572b17;height:8pt;&quot;|100
|style=&quot;background:#632f1f;height:8pt;&quot;|101
|style=&quot;background:#733723;height:8pt;&quot;|102
|style=&quot;background:#7f3b2b;height:8pt;&quot;|103
|style=&quot;background:#8f4333;height:8pt;&quot;|104
|style=&quot;background:#9f4f33;height:8pt;&quot;|105
|style=&quot;background:#af632f;height:8pt;&quot;|106
|style=&quot;background:#bf772f;height:8pt;&quot;|107
|style=&quot;background:#cf8f2b;height:8pt;&quot;|108
|style=&quot;background:#dfab27;height:8pt;&quot;|109
|style=&quot;background:#efcb1f;height:8pt;&quot;|110
|style=&quot;background:#fff31b;height:8pt;&quot;|111
|-
|style=&quot;color:black;text-align:right;&quot;|Peach (7)
|style=&quot;background:#0b0700;height:8pt;&quot;|112
|style=&quot;background:#1b1300;height:8pt;&quot;|113
|style=&quot;background:#2b230f;height:8pt;&quot;|114
|style=&quot;background:#372b13;height:8pt;&quot;|115
|style=&quot;background:#47331b;height:8pt;&quot;|116
|style=&quot;background:#533723;height:8pt;&quot;|117
|style=&quot;background:#633f2b;height:8pt;&quot;|118
|style=&quot;background:#6f4733;height:8pt;&quot;|119
|style=&quot;background:#7f533f;height:8pt;&quot;|120
|style=&quot;background:#8b5f47;height:8pt;&quot;|121
|style=&quot;background:#9b6b53;height:8pt;&quot;|122
|style=&quot;background:#a77b5f;height:8pt;&quot;|123
|style=&quot;background:#b7876b;height:8pt;&quot;|124
|style=&quot;background:#c3937b;height:8pt;&quot;|125
|style=&quot;background:#d3a38b;height:8pt;&quot;|126
|style=&quot;background:#e3b397;height:8pt;&quot;|127
|-
|style=&quot;color:black;text-align:right;&quot;|Purple (8)
|style=&quot;background:#ab8ba3;height:8pt;&quot;|128
|style=&quot;background:#9f7f97;height:8pt;&quot;|129
|style=&quot;background:#937387;height:8pt;&quot;|130
|style=&quot;background:#8b677b;height:8pt;&quot;|131
|style=&quot;background:#7f5b6f;height:8pt;&quot;|132
|style=&quot;background:#775363;height:8pt;&quot;|133
|style=&quot;background:#6b4b57;height:8pt;&quot;|134
|style=&quot;background:#5f3f4b;height:8pt;&quot;|135
|style=&quot;background:#573743;height:8pt;&quot;|136
|style=&quot;background:#4b2f37;height:8pt;&quot;|137
|style=&quot;background:#43272f;height:8pt;&quot;|138
|style=&quot;background:#371f23;height:8pt;&quot;|139
|style=&quot;background:#2b171b;height:8pt;&quot;|140
|style=&quot;background:#231313;height:8pt;&quot;|141
|style=&quot;background:#170b0b;height:8pt;&quot;|142
|style=&quot;background:#0f0707;height:8pt;&quot;|143
|-
|style=&quot;color:black;text-align:right;&quot;|Magenta (9)
|style=&quot;background:#bb739f;height:8pt;&quot;|144
|style=&quot;background:#af6b8f;height:8pt;&quot;|145
|style=&quot;background:#a35f83;height:8pt;&quot;|146
|style=&quot;background:#975777;height:8pt;&quot;|147
|style=&quot;background:#8b4f6b;height:8pt;&quot;|148
|style=&quot;background:#7f4b5f;height:8pt;&quot;|149
|style=&quot;background:#734353;height:8pt;&quot;|150
|style=&quot;background:#6b3b4b;height:8pt;&quot;|151
|style=&quot;background:#5f333f;height:8pt;&quot;|152
|style=&quot;background:#532b37;height:8pt;&quot;|153
|style=&quot;background:#47232b;height:8pt;&quot;|154
|style=&quot;background:#3b1f23;height:8pt;&quot;|155
|style=&quot;background:#2f171b;height:8pt;&quot;|156
|style=&quot;background:#231313;height:8pt;&quot;|157
|style=&quot;background:#170b0b;height:8pt;&quot;|158
|style=&quot;background:#0f0707;height:8pt;&quot;|159
|-
|style=&quot;color:black;text-align:right;&quot;|Tan (10)
|style=&quot;background:#dbc3bb;height:8pt;&quot;|160
|style=&quot;background:#cbb3a7;height:8pt;&quot;|161
|style=&quot;background:#bfa39b;height:8pt;&quot;|162
|style=&quot;background:#af978b;height:8pt;&quot;|163
|style=&quot;background:#a3877b;height:8pt;&quot;|164
|style=&quot;background:#977b6f;height:8pt;&quot;|165
|style=&quot;background:#876f5f;height:8pt;&quot;|166
|style=&quot;background:#7b6353;height:8pt;&quot;|167
|style=&quot;background:#6b5747;height:8pt;&quot;|168
|style=&quot;background:#5f4b3b;height:8pt;&quot;|169
|style=&quot;background:#533f33;height:8pt;&quot;|170
|style=&quot;background:#433327;height:8pt;&quot;|171
|style=&quot;background:#372b1f;height:8pt;&quot;|172
|style=&quot;background:#271f17;height:8pt;&quot;|173
|style=&quot;background:#1b130f;height:8pt;&quot;|174
|style=&quot;background:#0f0b07;height:8pt;&quot;|175
|-
|style=&quot;color:black;text-align:right;&quot;|Light green (11)
|style=&quot;background:#6f837b;height:8pt;&quot;|176
|style=&quot;background:#677b6f;height:8pt;&quot;|177
|style=&quot;background:#5f7367;height:8pt;&quot;|178
|style=&quot;background:#576b5f;height:8pt;&quot;|179
|style=&quot;background:#4f6357;height:8pt;&quot;|180
|style=&quot;background:#475b4f;height:8pt;&quot;|181
|style=&quot;background:#3f5347;height:8pt;&quot;|182
|style=&quot;background:#374b3f;height:8pt;&quot;|183
|style=&quot;background:#2f4337;height:8pt;&quot;|184
|style=&quot;background:#2b3b2f;height:8pt;&quot;|185
|style=&quot;background:#233327;height:8pt;&quot;|186
|style=&quot;background:#1f2b1f;height:8pt;&quot;|187
|style=&quot;background:#172317;height:8pt;&quot;|188
|style=&quot;background:#0f1b13;height:8pt;&quot;|189
|style=&quot;background:#0b130b;height:8pt;&quot;|190
|style=&quot;background:#070b07;height:8pt;&quot;|191
|-
|style=&quot;color:black;text-align:right;&quot;|Yellow (12)
|style=&quot;background:#fff31b;height:8pt;&quot;|192
|style=&quot;background:#efdf17;height:8pt;&quot;|193
|style=&quot;background:#dbcb13;height:8pt;&quot;|194
|style=&quot;background:#cbb70f;height:8pt;&quot;|195
|style=&quot;background:#bba70f;height:8pt;&quot;|196
|style=&quot;background:#ab970b;height:8pt;&quot;|197
|style=&quot;background:#9b8307;height:8pt;&quot;|198
|style=&quot;background:#8b7307;height:8pt;&quot;|199
|style=&quot;background:#7b6307;height:8pt;&quot;|200
|style=&quot;background:#6b5300;height:8pt;&quot;|201
|style=&quot;background:#5b4700;height:8pt;&quot;|202
|style=&quot;background:#4b3700;height:8pt;&quot;|203
|style=&quot;background:#3b2b00;height:8pt;&quot;|204
|style=&quot;background:#2b1f00;height:8pt;&quot;|205
|style=&quot;background:#1b0f00;height:8pt;&quot;|206
|style=&quot;background:#0b0700;height:8pt;&quot;|207
|-
|style=&quot;color:black;text-align:right;&quot;|Blue (13)
|style=&quot;background:#0000ff;height:8pt;&quot;|208
|style=&quot;background:#0b0bef;height:8pt;&quot;|209
|style=&quot;background:#1313df;height:8pt;&quot;|210
|style=&quot;background:#1b1bcf;height:8pt;&quot;|211
|style=&quot;background:#2323bf;height:8pt;&quot;|212
|style=&quot;background:#2b2baf;height:8pt;&quot;|213
|style=&quot;background:#2f2f9f;height:8pt;&quot;|214
|style=&quot;background:#2f2f8f;height:8pt;&quot;|215
|style=&quot;background:#2f2f7f;height:8pt;&quot;|216
|style=&quot;background:#2f2f6f;height:8pt;&quot;|217
|style=&quot;background:#2f2f5f;height:8pt;&quot;|218
|style=&quot;background:#2b2b4f;height:8pt;&quot;|219
|style=&quot;background:#23233f;height:8pt;&quot;|220
|style=&quot;background:#1b1b2f;height:8pt;&quot;|221
|style=&quot;background:#13131f;height:8pt;&quot;|222
|style=&quot;background:#0b0b0f;height:8pt;&quot;|223
|-
|style=&quot;color:black;text-align:right;&quot;|Fire (14)
|style=&quot;background:#2b0000;height:8pt;&quot;|224
|style=&quot;background:#3b0000;height:8pt;&quot;|225
|style=&quot;background:#4b0700;height:8pt;&quot;|226
|style=&quot;background:#5f0700;height:8pt;&quot;|227
|style=&quot;background:#6f0f00;height:8pt;&quot;|228
|style=&quot;background:#7f1707;height:8pt;&quot;|229
|style=&quot;background:#931f07;height:8pt;&quot;|230
|style=&quot;background:#a3270b;height:8pt;&quot;|231
|style=&quot;background:#b7330f;height:8pt;&quot;|232
|style=&quot;background:#c34b1b;height:8pt;&quot;|233
|style=&quot;background:#cf632b;height:8pt;&quot;|234
|style=&quot;background:#db7f3b;height:8pt;&quot;|235
|style=&quot;background:#e3974f;height:8pt;&quot;|236
|style=&quot;background:#e7ab5f;height:8pt;&quot;|237
|style=&quot;background:#efbf77;height:8pt;&quot;|238
|style=&quot;background:#f7d38b;height:8pt;&quot;|239
|-
|style=&quot;color:black;text-align:right;&quot;|Brights (15)
|style=&quot;background:#a77b3b;height:8pt;&quot;|240
|style=&quot;background:#b79b37;height:8pt;&quot;|241
|style=&quot;background:#c7c337;height:8pt;&quot;|242
|style=&quot;background:#e7e357;height:8pt;&quot;|243
|style=&quot;background:#7fbfff;height:8pt;&quot;|244
|style=&quot;background:#abe7ff;height:8pt;&quot;|245
|style=&quot;background:#d7ffff;height:8pt;&quot;|246
|style=&quot;background:#670000;height:8pt;&quot;|247
|style=&quot;background:#8b0000;height:8pt;&quot;|248
|style=&quot;background:#b30000;height:8pt;&quot;|249
|style=&quot;background:#d70000;height:8pt;&quot;|250
|style=&quot;background:#ff0000;height:8pt;&quot;|251
|style=&quot;background:#fff393;height:8pt;&quot;|252
|style=&quot;background:#fff7c7;height:8pt;&quot;|253
|style=&quot;background:#ffffff;height:8pt;&quot;|254
|style=&quot;background:#9f5b53;height:8pt;&quot;|255
|-
|}

Color 255 is transparent for sprites, 2d lmps, and gfx.wad entries (excluding [[conchars]], in which case it is black (color 0) that's made transparent). The parameters for the [[color]] console command are the row #, but is restricted to rows 0 - 13.

=== palette.lmp ===
The palette is stored in gfx/palette.lmp. It consists of 256 RGB values, coming out to 768 bytes in total.

=== Download ===
* [[Image:quake_palette.zip]] - The Quake palette in 3 formats: JASC (text), Microsoft (RIFF), and raw (768-byte lump of RGB values).

== Colormap ==
[[Image:Colormap.png]]

The colormap is a table used for lighting in software Quake engines. It contains a column of 64 values per each palette color. Each value is an index into the palette representing as closely as possible the original color brightened or darkened: shade 0 is double bright, shade 32 is the original color, and shade 63 is black.

&quot;Fullbright&quot; colors are those which are not lit in the colormap, simply using the original color for all 64 shades. These colors, when used in textures and model skins, will not be affected by lighting. Fullbrights are used for things like fire and glowing lights. In Quake these are the last 32 colors in the palette.

Since the [[GLQuake]] engine ignores the colormap, it doesn't support fullbrights. Most user-modified engines have fixed this problem.

=== colormap.lmp ===
The colormap is stored in gfx/colormap.lmp. The version included with Quake is 16385 bytes. Since the colormap only requires 16384 bytes (256 * 64), I'm not exactly sure what the extra byte (&lt;tt&gt;0x20&lt;/tt&gt;) at the end is for.

== Legal status ==
John Carmack officially put palette.lmp in the public domain to make Quake ports easier, so it is legal to, for example, embed it right into an engine executable. Colormap.lmp can also be considered public domain as it is trivially derived from the palette.

== Related Info ==
* Most engine mods use 32-bit colour, so you need not worry about palettes. With 32-bit textures, shirt/pants colour changing and fullbrights are only possible if engines support a new implementation of them, for example [[DarkPlaces]]'s [[DP_GFX_EXTERNALTEXTURES]] extension, which allows additional _glow, _pants, _shirt, etc textures on top of the main one)</text>
      <sha1>n529hxlluk2lar6w8azf3h2yjjnk363</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1165</id>
      <parentid>1164</parentid>
      <timestamp>2009-09-23T22:02:55Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="14452">__NOTOC__[[Image:Qpalette.png|right|thumb|The Quake palette.]]
{|style=&quot;color:white;font-weight:bold;font-size:8pt;text-align:center;&quot;
|-
|style=&quot;color:black;text-align:right;&quot;|White (0)
|style=&quot;background:#000000;height:8pt;&quot;|0
|style=&quot;background:#0f0f0f;height:8pt;&quot;|1
|style=&quot;background:#1f1f1f;height:8pt;&quot;|2
|style=&quot;background:#2f2f2f;height:8pt;&quot;|3
|style=&quot;background:#3f3f3f;height:8pt;&quot;|4
|style=&quot;background:#4b4b4b;height:8pt;&quot;|5
|style=&quot;background:#5b5b5b;height:8pt;&quot;|6
|style=&quot;background:#6b6b6b;height:8pt;&quot;|7
|style=&quot;background:#7b7b7b;height:8pt;&quot;|8
|style=&quot;background:#8b8b8b;height:8pt;&quot;|9
|style=&quot;background:#9b9b9b;height:8pt;&quot;|10
|style=&quot;background:#ababab;height:8pt;&quot;|11
|style=&quot;background:#bbbbbb;height:8pt;&quot;|12
|style=&quot;background:#cbcbcb;height:8pt;&quot;|13
|style=&quot;background:#dbdbdb;height:8pt;&quot;|14
|style=&quot;background:#ebebeb;height:8pt;&quot;|15
|-
|style=&quot;color:black;text-align:right;&quot;|Brown (1)
|style=&quot;background:#0f0b07;height:8pt;&quot;|16
|style=&quot;background:#170f0b;height:8pt;&quot;|17
|style=&quot;background:#1f170b;height:8pt;&quot;|18
|style=&quot;background:#271b0f;height:8pt;&quot;|19
|style=&quot;background:#2f2313;height:8pt;&quot;|20
|style=&quot;background:#372b17;height:8pt;&quot;|21
|style=&quot;background:#3f2f17;height:8pt;&quot;|22
|style=&quot;background:#4b371b;height:8pt;&quot;|23
|style=&quot;background:#533b1b;height:8pt;&quot;|24
|style=&quot;background:#5b431f;height:8pt;&quot;|25
|style=&quot;background:#634b1f;height:8pt;&quot;|26
|style=&quot;background:#6b531f;height:8pt;&quot;|27
|style=&quot;background:#73571f;height:8pt;&quot;|28
|style=&quot;background:#7b5f23;height:8pt;&quot;|29
|style=&quot;background:#836723;height:8pt;&quot;|30
|style=&quot;background:#8f6f23;height:8pt;&quot;|31
|-
|style=&quot;color:black;text-align:right;&quot;|Light blue (2)
|style=&quot;background:#0b0b0f;height:8pt;&quot;|32
|style=&quot;background:#13131b;height:8pt;&quot;|33
|style=&quot;background:#1b1b27;height:8pt;&quot;|34
|style=&quot;background:#272733;height:8pt;&quot;|35
|style=&quot;background:#2f2f3f;height:8pt;&quot;|36
|style=&quot;background:#37374b;height:8pt;&quot;|37
|style=&quot;background:#3f3f57;height:8pt;&quot;|38
|style=&quot;background:#474767;height:8pt;&quot;|39
|style=&quot;background:#4f4f73;height:8pt;&quot;|40
|style=&quot;background:#5b5b7f;height:8pt;&quot;|41
|style=&quot;background:#63638b;height:8pt;&quot;|42
|style=&quot;background:#6b6b97;height:8pt;&quot;|43
|style=&quot;background:#7373a3;height:8pt;&quot;|44
|style=&quot;background:#7b7baf;height:8pt;&quot;|45
|style=&quot;background:#8383bb;height:8pt;&quot;|46
|style=&quot;background:#8b8bcb;height:8pt;&quot;|47
|-
|style=&quot;color:black;text-align:right;&quot;|Green (3)
|style=&quot;background:#000000;height:8pt;&quot;|48
|style=&quot;background:#070700;height:8pt;&quot;|49
|style=&quot;background:#0b0b00;height:8pt;&quot;|50
|style=&quot;background:#131300;height:8pt;&quot;|51
|style=&quot;background:#1b1b00;height:8pt;&quot;|52
|style=&quot;background:#232300;height:8pt;&quot;|53
|style=&quot;background:#2b2b07;height:8pt;&quot;|54
|style=&quot;background:#2f2f07;height:8pt;&quot;|55
|style=&quot;background:#373707;height:8pt;&quot;|56
|style=&quot;background:#3f3f07;height:8pt;&quot;|57
|style=&quot;background:#474707;height:8pt;&quot;|58
|style=&quot;background:#4b4b0b;height:8pt;&quot;|59
|style=&quot;background:#53530b;height:8pt;&quot;|60
|style=&quot;background:#5b5b0b;height:8pt;&quot;|61
|style=&quot;background:#63630b;height:8pt;&quot;|62
|style=&quot;background:#6b6b0f;height:8pt;&quot;|63
|-
|style=&quot;color:black;text-align:right;&quot;|Red (4)
|style=&quot;background:#070000;height:8pt;&quot;|64
|style=&quot;background:#0f0000;height:8pt;&quot;|65
|style=&quot;background:#170000;height:8pt;&quot;|66
|style=&quot;background:#1f0000;height:8pt;&quot;|67
|style=&quot;background:#270000;height:8pt;&quot;|68
|style=&quot;background:#2f0000;height:8pt;&quot;|69
|style=&quot;background:#370000;height:8pt;&quot;|70
|style=&quot;background:#3f0000;height:8pt;&quot;|71
|style=&quot;background:#470000;height:8pt;&quot;|72
|style=&quot;background:#4f0000;height:8pt;&quot;|73
|style=&quot;background:#570000;height:8pt;&quot;|74
|style=&quot;background:#5f0000;height:8pt;&quot;|75
|style=&quot;background:#670000;height:8pt;&quot;|76
|style=&quot;background:#6f0000;height:8pt;&quot;|77
|style=&quot;background:#770000;height:8pt;&quot;|78
|style=&quot;background:#7f0000;height:8pt;&quot;|79
|-
|style=&quot;color:black;text-align:right;&quot;|Orange (5)
|style=&quot;background:#131300;height:8pt;&quot;|80
|style=&quot;background:#1b1b00;height:8pt;&quot;|81
|style=&quot;background:#232300;height:8pt;&quot;|82
|style=&quot;background:#2f2b00;height:8pt;&quot;|83
|style=&quot;background:#372f00;height:8pt;&quot;|84
|style=&quot;background:#433700;height:8pt;&quot;|85
|style=&quot;background:#4b3b07;height:8pt;&quot;|86
|style=&quot;background:#574307;height:8pt;&quot;|87
|style=&quot;background:#5f4707;height:8pt;&quot;|88
|style=&quot;background:#6b4b0b;height:8pt;&quot;|89
|style=&quot;background:#77530f;height:8pt;&quot;|90
|style=&quot;background:#835713;height:8pt;&quot;|91
|style=&quot;background:#8b5b13;height:8pt;&quot;|92
|style=&quot;background:#975f1b;height:8pt;&quot;|93
|style=&quot;background:#a3631f;height:8pt;&quot;|94
|style=&quot;background:#af6723;height:8pt;&quot;|95
|-
|style=&quot;color:black;text-align:right;&quot;|Gold (6)
|style=&quot;background:#231307;height:8pt;&quot;|96
|style=&quot;background:#2f170b;height:8pt;&quot;|97
|style=&quot;background:#3b1f0f;height:8pt;&quot;|98
|style=&quot;background:#4b2313;height:8pt;&quot;|99
|style=&quot;background:#572b17;height:8pt;&quot;|100
|style=&quot;background:#632f1f;height:8pt;&quot;|101
|style=&quot;background:#733723;height:8pt;&quot;|102
|style=&quot;background:#7f3b2b;height:8pt;&quot;|103
|style=&quot;background:#8f4333;height:8pt;&quot;|104
|style=&quot;background:#9f4f33;height:8pt;&quot;|105
|style=&quot;background:#af632f;height:8pt;&quot;|106
|style=&quot;background:#bf772f;height:8pt;&quot;|107
|style=&quot;background:#cf8f2b;height:8pt;&quot;|108
|style=&quot;background:#dfab27;height:8pt;&quot;|109
|style=&quot;background:#efcb1f;height:8pt;&quot;|110
|style=&quot;background:#fff31b;height:8pt;&quot;|111
|-
|style=&quot;color:black;text-align:right;&quot;|Peach (7)
|style=&quot;background:#0b0700;height:8pt;&quot;|112
|style=&quot;background:#1b1300;height:8pt;&quot;|113
|style=&quot;background:#2b230f;height:8pt;&quot;|114
|style=&quot;background:#372b13;height:8pt;&quot;|115
|style=&quot;background:#47331b;height:8pt;&quot;|116
|style=&quot;background:#533723;height:8pt;&quot;|117
|style=&quot;background:#633f2b;height:8pt;&quot;|118
|style=&quot;background:#6f4733;height:8pt;&quot;|119
|style=&quot;background:#7f533f;height:8pt;&quot;|120
|style=&quot;background:#8b5f47;height:8pt;&quot;|121
|style=&quot;background:#9b6b53;height:8pt;&quot;|122
|style=&quot;background:#a77b5f;height:8pt;&quot;|123
|style=&quot;background:#b7876b;height:8pt;&quot;|124
|style=&quot;background:#c3937b;height:8pt;&quot;|125
|style=&quot;background:#d3a38b;height:8pt;&quot;|126
|style=&quot;background:#e3b397;height:8pt;&quot;|127
|-
|style=&quot;color:black;text-align:right;&quot;|Purple (8)
|style=&quot;background:#ab8ba3;height:8pt;&quot;|128
|style=&quot;background:#9f7f97;height:8pt;&quot;|129
|style=&quot;background:#937387;height:8pt;&quot;|130
|style=&quot;background:#8b677b;height:8pt;&quot;|131
|style=&quot;background:#7f5b6f;height:8pt;&quot;|132
|style=&quot;background:#775363;height:8pt;&quot;|133
|style=&quot;background:#6b4b57;height:8pt;&quot;|134
|style=&quot;background:#5f3f4b;height:8pt;&quot;|135
|style=&quot;background:#573743;height:8pt;&quot;|136
|style=&quot;background:#4b2f37;height:8pt;&quot;|137
|style=&quot;background:#43272f;height:8pt;&quot;|138
|style=&quot;background:#371f23;height:8pt;&quot;|139
|style=&quot;background:#2b171b;height:8pt;&quot;|140
|style=&quot;background:#231313;height:8pt;&quot;|141
|style=&quot;background:#170b0b;height:8pt;&quot;|142
|style=&quot;background:#0f0707;height:8pt;&quot;|143
|-
|style=&quot;color:black;text-align:right;&quot;|Magenta (9)
|style=&quot;background:#bb739f;height:8pt;&quot;|144
|style=&quot;background:#af6b8f;height:8pt;&quot;|145
|style=&quot;background:#a35f83;height:8pt;&quot;|146
|style=&quot;background:#975777;height:8pt;&quot;|147
|style=&quot;background:#8b4f6b;height:8pt;&quot;|148
|style=&quot;background:#7f4b5f;height:8pt;&quot;|149
|style=&quot;background:#734353;height:8pt;&quot;|150
|style=&quot;background:#6b3b4b;height:8pt;&quot;|151
|style=&quot;background:#5f333f;height:8pt;&quot;|152
|style=&quot;background:#532b37;height:8pt;&quot;|153
|style=&quot;background:#47232b;height:8pt;&quot;|154
|style=&quot;background:#3b1f23;height:8pt;&quot;|155
|style=&quot;background:#2f171b;height:8pt;&quot;|156
|style=&quot;background:#231313;height:8pt;&quot;|157
|style=&quot;background:#170b0b;height:8pt;&quot;|158
|style=&quot;background:#0f0707;height:8pt;&quot;|159
|-
|style=&quot;color:black;text-align:right;&quot;|Tan (10)
|style=&quot;background:#dbc3bb;height:8pt;&quot;|160
|style=&quot;background:#cbb3a7;height:8pt;&quot;|161
|style=&quot;background:#bfa39b;height:8pt;&quot;|162
|style=&quot;background:#af978b;height:8pt;&quot;|163
|style=&quot;background:#a3877b;height:8pt;&quot;|164
|style=&quot;background:#977b6f;height:8pt;&quot;|165
|style=&quot;background:#876f5f;height:8pt;&quot;|166
|style=&quot;background:#7b6353;height:8pt;&quot;|167
|style=&quot;background:#6b5747;height:8pt;&quot;|168
|style=&quot;background:#5f4b3b;height:8pt;&quot;|169
|style=&quot;background:#533f33;height:8pt;&quot;|170
|style=&quot;background:#433327;height:8pt;&quot;|171
|style=&quot;background:#372b1f;height:8pt;&quot;|172
|style=&quot;background:#271f17;height:8pt;&quot;|173
|style=&quot;background:#1b130f;height:8pt;&quot;|174
|style=&quot;background:#0f0b07;height:8pt;&quot;|175
|-
|style=&quot;color:black;text-align:right;&quot;|Light green (11)
|style=&quot;background:#6f837b;height:8pt;&quot;|176
|style=&quot;background:#677b6f;height:8pt;&quot;|177
|style=&quot;background:#5f7367;height:8pt;&quot;|178
|style=&quot;background:#576b5f;height:8pt;&quot;|179
|style=&quot;background:#4f6357;height:8pt;&quot;|180
|style=&quot;background:#475b4f;height:8pt;&quot;|181
|style=&quot;background:#3f5347;height:8pt;&quot;|182
|style=&quot;background:#374b3f;height:8pt;&quot;|183
|style=&quot;background:#2f4337;height:8pt;&quot;|184
|style=&quot;background:#2b3b2f;height:8pt;&quot;|185
|style=&quot;background:#233327;height:8pt;&quot;|186
|style=&quot;background:#1f2b1f;height:8pt;&quot;|187
|style=&quot;background:#172317;height:8pt;&quot;|188
|style=&quot;background:#0f1b13;height:8pt;&quot;|189
|style=&quot;background:#0b130b;height:8pt;&quot;|190
|style=&quot;background:#070b07;height:8pt;&quot;|191
|-
|style=&quot;color:black;text-align:right;&quot;|Yellow (12)
|style=&quot;background:#fff31b;height:8pt;&quot;|192
|style=&quot;background:#efdf17;height:8pt;&quot;|193
|style=&quot;background:#dbcb13;height:8pt;&quot;|194
|style=&quot;background:#cbb70f;height:8pt;&quot;|195
|style=&quot;background:#bba70f;height:8pt;&quot;|196
|style=&quot;background:#ab970b;height:8pt;&quot;|197
|style=&quot;background:#9b8307;height:8pt;&quot;|198
|style=&quot;background:#8b7307;height:8pt;&quot;|199
|style=&quot;background:#7b6307;height:8pt;&quot;|200
|style=&quot;background:#6b5300;height:8pt;&quot;|201
|style=&quot;background:#5b4700;height:8pt;&quot;|202
|style=&quot;background:#4b3700;height:8pt;&quot;|203
|style=&quot;background:#3b2b00;height:8pt;&quot;|204
|style=&quot;background:#2b1f00;height:8pt;&quot;|205
|style=&quot;background:#1b0f00;height:8pt;&quot;|206
|style=&quot;background:#0b0700;height:8pt;&quot;|207
|-
|style=&quot;color:black;text-align:right;&quot;|Blue (13)
|style=&quot;background:#0000ff;height:8pt;&quot;|208
|style=&quot;background:#0b0bef;height:8pt;&quot;|209
|style=&quot;background:#1313df;height:8pt;&quot;|210
|style=&quot;background:#1b1bcf;height:8pt;&quot;|211
|style=&quot;background:#2323bf;height:8pt;&quot;|212
|style=&quot;background:#2b2baf;height:8pt;&quot;|213
|style=&quot;background:#2f2f9f;height:8pt;&quot;|214
|style=&quot;background:#2f2f8f;height:8pt;&quot;|215
|style=&quot;background:#2f2f7f;height:8pt;&quot;|216
|style=&quot;background:#2f2f6f;height:8pt;&quot;|217
|style=&quot;background:#2f2f5f;height:8pt;&quot;|218
|style=&quot;background:#2b2b4f;height:8pt;&quot;|219
|style=&quot;background:#23233f;height:8pt;&quot;|220
|style=&quot;background:#1b1b2f;height:8pt;&quot;|221
|style=&quot;background:#13131f;height:8pt;&quot;|222
|style=&quot;background:#0b0b0f;height:8pt;&quot;|223
|-
|style=&quot;color:black;text-align:right;&quot;|Fire (14)
|style=&quot;background:#2b0000;height:8pt;&quot;|224
|style=&quot;background:#3b0000;height:8pt;&quot;|225
|style=&quot;background:#4b0700;height:8pt;&quot;|226
|style=&quot;background:#5f0700;height:8pt;&quot;|227
|style=&quot;background:#6f0f00;height:8pt;&quot;|228
|style=&quot;background:#7f1707;height:8pt;&quot;|229
|style=&quot;background:#931f07;height:8pt;&quot;|230
|style=&quot;background:#a3270b;height:8pt;&quot;|231
|style=&quot;background:#b7330f;height:8pt;&quot;|232
|style=&quot;background:#c34b1b;height:8pt;&quot;|233
|style=&quot;background:#cf632b;height:8pt;&quot;|234
|style=&quot;background:#db7f3b;height:8pt;&quot;|235
|style=&quot;background:#e3974f;height:8pt;&quot;|236
|style=&quot;background:#e7ab5f;height:8pt;&quot;|237
|style=&quot;background:#efbf77;height:8pt;&quot;|238
|style=&quot;background:#f7d38b;height:8pt;&quot;|239
|-
|style=&quot;color:black;text-align:right;&quot;|Brights (15)
|style=&quot;background:#a77b3b;height:8pt;&quot;|240
|style=&quot;background:#b79b37;height:8pt;&quot;|241
|style=&quot;background:#c7c337;height:8pt;&quot;|242
|style=&quot;background:#e7e357;height:8pt;&quot;|243
|style=&quot;background:#7fbfff;height:8pt;&quot;|244
|style=&quot;background:#abe7ff;height:8pt;&quot;|245
|style=&quot;background:#d7ffff;height:8pt;&quot;|246
|style=&quot;background:#670000;height:8pt;&quot;|247
|style=&quot;background:#8b0000;height:8pt;&quot;|248
|style=&quot;background:#b30000;height:8pt;&quot;|249
|style=&quot;background:#d70000;height:8pt;&quot;|250
|style=&quot;background:#ff0000;height:8pt;&quot;|251
|style=&quot;background:#fff393;height:8pt;&quot;|252
|style=&quot;background:#fff7c7;height:8pt;&quot;|253
|style=&quot;background:#ffffff;height:8pt;&quot;|254
|style=&quot;background:#9f5b53;height:8pt;&quot;|255
|-
|}

Color 255 is transparent for sprites, 2d lmps, and gfx.wad entries (excluding [[conchars]], in which case it is black (color 0) that's made transparent). It is important that palette index 0 is black. The parameters for the [[color]] console command are the row #, but is restricted to rows 0 - 13.

=== palette.lmp ===
The palette is stored in gfx/palette.lmp. It consists of 256 RGB values, coming out to 768 bytes in total.

=== Download ===
* [[Image:quake_palette.zip]] - The Quake palette in 3 formats: JASC (text), Microsoft (RIFF), and raw (768-byte lump of RGB values).

== Colormap ==
[[Image:Colormap.png]]

The colormap is a table used for lighting in software Quake engines. It contains a column of 64 values per each palette color. Each value is an index into the palette representing as closely as possible the original color brightened or darkened: shade 0 is double bright, shade 32 is the original color, and shade 63 is black.

&quot;Fullbright&quot; colors are those which are not lit in the colormap, simply using the original color for all 64 shades. These colors, when used in textures and model skins, will not be affected by lighting. Fullbrights are used for things like fire and glowing lights. In Quake these are the last 32 colors in the palette.

Since the [[GLQuake]] engine ignores the colormap, it doesn't support fullbrights. Most user-modified engines have fixed this problem.

=== colormap.lmp ===
The colormap is stored in gfx/colormap.lmp. The version included with Quake is 16385 bytes. Since the colormap only requires 16384 bytes (256 * 64), I'm not exactly sure what the extra byte (&lt;tt&gt;0x20&lt;/tt&gt;) at the end is for.

== Legal status ==
John Carmack officially put palette.lmp in the public domain to make Quake ports easier, so it is legal to, for example, embed it right into an engine executable. Colormap.lmp can also be considered public domain as it is trivially derived from the palette.

== Related Info ==
* Most engine mods use 32-bit colour, so you need not worry about palettes. With 32-bit textures, shirt/pants colour changing and fullbrights are only possible if engines support a new implementation of them, for example [[DarkPlaces]]'s [[DP_GFX_EXTERNALTEXTURES]] extension, which allows additional _glow, _pants, _shirt, etc textures on top of the main one)</text>
      <sha1>3o0sn8isj08b0kv9lmvp27m6rkfenxz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1166</id>
      <parentid>1165</parentid>
      <timestamp>2009-09-23T22:03:26Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="14484">__NOTOC__[[Image:Qpalette.png|right|thumb|The Quake palette.]]
{|style=&quot;color:white;font-weight:bold;font-size:8pt;text-align:center;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot;
|-
|style=&quot;color:black;text-align:right;&quot;|White (0)
|style=&quot;background:#000000;height:8pt;&quot;|0
|style=&quot;background:#0f0f0f;height:8pt;&quot;|1
|style=&quot;background:#1f1f1f;height:8pt;&quot;|2
|style=&quot;background:#2f2f2f;height:8pt;&quot;|3
|style=&quot;background:#3f3f3f;height:8pt;&quot;|4
|style=&quot;background:#4b4b4b;height:8pt;&quot;|5
|style=&quot;background:#5b5b5b;height:8pt;&quot;|6
|style=&quot;background:#6b6b6b;height:8pt;&quot;|7
|style=&quot;background:#7b7b7b;height:8pt;&quot;|8
|style=&quot;background:#8b8b8b;height:8pt;&quot;|9
|style=&quot;background:#9b9b9b;height:8pt;&quot;|10
|style=&quot;background:#ababab;height:8pt;&quot;|11
|style=&quot;background:#bbbbbb;height:8pt;&quot;|12
|style=&quot;background:#cbcbcb;height:8pt;&quot;|13
|style=&quot;background:#dbdbdb;height:8pt;&quot;|14
|style=&quot;background:#ebebeb;height:8pt;&quot;|15
|-
|style=&quot;color:black;text-align:right;&quot;|Brown (1)
|style=&quot;background:#0f0b07;height:8pt;&quot;|16
|style=&quot;background:#170f0b;height:8pt;&quot;|17
|style=&quot;background:#1f170b;height:8pt;&quot;|18
|style=&quot;background:#271b0f;height:8pt;&quot;|19
|style=&quot;background:#2f2313;height:8pt;&quot;|20
|style=&quot;background:#372b17;height:8pt;&quot;|21
|style=&quot;background:#3f2f17;height:8pt;&quot;|22
|style=&quot;background:#4b371b;height:8pt;&quot;|23
|style=&quot;background:#533b1b;height:8pt;&quot;|24
|style=&quot;background:#5b431f;height:8pt;&quot;|25
|style=&quot;background:#634b1f;height:8pt;&quot;|26
|style=&quot;background:#6b531f;height:8pt;&quot;|27
|style=&quot;background:#73571f;height:8pt;&quot;|28
|style=&quot;background:#7b5f23;height:8pt;&quot;|29
|style=&quot;background:#836723;height:8pt;&quot;|30
|style=&quot;background:#8f6f23;height:8pt;&quot;|31
|-
|style=&quot;color:black;text-align:right;&quot;|Light blue (2)
|style=&quot;background:#0b0b0f;height:8pt;&quot;|32
|style=&quot;background:#13131b;height:8pt;&quot;|33
|style=&quot;background:#1b1b27;height:8pt;&quot;|34
|style=&quot;background:#272733;height:8pt;&quot;|35
|style=&quot;background:#2f2f3f;height:8pt;&quot;|36
|style=&quot;background:#37374b;height:8pt;&quot;|37
|style=&quot;background:#3f3f57;height:8pt;&quot;|38
|style=&quot;background:#474767;height:8pt;&quot;|39
|style=&quot;background:#4f4f73;height:8pt;&quot;|40
|style=&quot;background:#5b5b7f;height:8pt;&quot;|41
|style=&quot;background:#63638b;height:8pt;&quot;|42
|style=&quot;background:#6b6b97;height:8pt;&quot;|43
|style=&quot;background:#7373a3;height:8pt;&quot;|44
|style=&quot;background:#7b7baf;height:8pt;&quot;|45
|style=&quot;background:#8383bb;height:8pt;&quot;|46
|style=&quot;background:#8b8bcb;height:8pt;&quot;|47
|-
|style=&quot;color:black;text-align:right;&quot;|Green (3)
|style=&quot;background:#000000;height:8pt;&quot;|48
|style=&quot;background:#070700;height:8pt;&quot;|49
|style=&quot;background:#0b0b00;height:8pt;&quot;|50
|style=&quot;background:#131300;height:8pt;&quot;|51
|style=&quot;background:#1b1b00;height:8pt;&quot;|52
|style=&quot;background:#232300;height:8pt;&quot;|53
|style=&quot;background:#2b2b07;height:8pt;&quot;|54
|style=&quot;background:#2f2f07;height:8pt;&quot;|55
|style=&quot;background:#373707;height:8pt;&quot;|56
|style=&quot;background:#3f3f07;height:8pt;&quot;|57
|style=&quot;background:#474707;height:8pt;&quot;|58
|style=&quot;background:#4b4b0b;height:8pt;&quot;|59
|style=&quot;background:#53530b;height:8pt;&quot;|60
|style=&quot;background:#5b5b0b;height:8pt;&quot;|61
|style=&quot;background:#63630b;height:8pt;&quot;|62
|style=&quot;background:#6b6b0f;height:8pt;&quot;|63
|-
|style=&quot;color:black;text-align:right;&quot;|Red (4)
|style=&quot;background:#070000;height:8pt;&quot;|64
|style=&quot;background:#0f0000;height:8pt;&quot;|65
|style=&quot;background:#170000;height:8pt;&quot;|66
|style=&quot;background:#1f0000;height:8pt;&quot;|67
|style=&quot;background:#270000;height:8pt;&quot;|68
|style=&quot;background:#2f0000;height:8pt;&quot;|69
|style=&quot;background:#370000;height:8pt;&quot;|70
|style=&quot;background:#3f0000;height:8pt;&quot;|71
|style=&quot;background:#470000;height:8pt;&quot;|72
|style=&quot;background:#4f0000;height:8pt;&quot;|73
|style=&quot;background:#570000;height:8pt;&quot;|74
|style=&quot;background:#5f0000;height:8pt;&quot;|75
|style=&quot;background:#670000;height:8pt;&quot;|76
|style=&quot;background:#6f0000;height:8pt;&quot;|77
|style=&quot;background:#770000;height:8pt;&quot;|78
|style=&quot;background:#7f0000;height:8pt;&quot;|79
|-
|style=&quot;color:black;text-align:right;&quot;|Orange (5)
|style=&quot;background:#131300;height:8pt;&quot;|80
|style=&quot;background:#1b1b00;height:8pt;&quot;|81
|style=&quot;background:#232300;height:8pt;&quot;|82
|style=&quot;background:#2f2b00;height:8pt;&quot;|83
|style=&quot;background:#372f00;height:8pt;&quot;|84
|style=&quot;background:#433700;height:8pt;&quot;|85
|style=&quot;background:#4b3b07;height:8pt;&quot;|86
|style=&quot;background:#574307;height:8pt;&quot;|87
|style=&quot;background:#5f4707;height:8pt;&quot;|88
|style=&quot;background:#6b4b0b;height:8pt;&quot;|89
|style=&quot;background:#77530f;height:8pt;&quot;|90
|style=&quot;background:#835713;height:8pt;&quot;|91
|style=&quot;background:#8b5b13;height:8pt;&quot;|92
|style=&quot;background:#975f1b;height:8pt;&quot;|93
|style=&quot;background:#a3631f;height:8pt;&quot;|94
|style=&quot;background:#af6723;height:8pt;&quot;|95
|-
|style=&quot;color:black;text-align:right;&quot;|Gold (6)
|style=&quot;background:#231307;height:8pt;&quot;|96
|style=&quot;background:#2f170b;height:8pt;&quot;|97
|style=&quot;background:#3b1f0f;height:8pt;&quot;|98
|style=&quot;background:#4b2313;height:8pt;&quot;|99
|style=&quot;background:#572b17;height:8pt;&quot;|100
|style=&quot;background:#632f1f;height:8pt;&quot;|101
|style=&quot;background:#733723;height:8pt;&quot;|102
|style=&quot;background:#7f3b2b;height:8pt;&quot;|103
|style=&quot;background:#8f4333;height:8pt;&quot;|104
|style=&quot;background:#9f4f33;height:8pt;&quot;|105
|style=&quot;background:#af632f;height:8pt;&quot;|106
|style=&quot;background:#bf772f;height:8pt;&quot;|107
|style=&quot;background:#cf8f2b;height:8pt;&quot;|108
|style=&quot;background:#dfab27;height:8pt;&quot;|109
|style=&quot;background:#efcb1f;height:8pt;&quot;|110
|style=&quot;background:#fff31b;height:8pt;&quot;|111
|-
|style=&quot;color:black;text-align:right;&quot;|Peach (7)
|style=&quot;background:#0b0700;height:8pt;&quot;|112
|style=&quot;background:#1b1300;height:8pt;&quot;|113
|style=&quot;background:#2b230f;height:8pt;&quot;|114
|style=&quot;background:#372b13;height:8pt;&quot;|115
|style=&quot;background:#47331b;height:8pt;&quot;|116
|style=&quot;background:#533723;height:8pt;&quot;|117
|style=&quot;background:#633f2b;height:8pt;&quot;|118
|style=&quot;background:#6f4733;height:8pt;&quot;|119
|style=&quot;background:#7f533f;height:8pt;&quot;|120
|style=&quot;background:#8b5f47;height:8pt;&quot;|121
|style=&quot;background:#9b6b53;height:8pt;&quot;|122
|style=&quot;background:#a77b5f;height:8pt;&quot;|123
|style=&quot;background:#b7876b;height:8pt;&quot;|124
|style=&quot;background:#c3937b;height:8pt;&quot;|125
|style=&quot;background:#d3a38b;height:8pt;&quot;|126
|style=&quot;background:#e3b397;height:8pt;&quot;|127
|-
|style=&quot;color:black;text-align:right;&quot;|Purple (8)
|style=&quot;background:#ab8ba3;height:8pt;&quot;|128
|style=&quot;background:#9f7f97;height:8pt;&quot;|129
|style=&quot;background:#937387;height:8pt;&quot;|130
|style=&quot;background:#8b677b;height:8pt;&quot;|131
|style=&quot;background:#7f5b6f;height:8pt;&quot;|132
|style=&quot;background:#775363;height:8pt;&quot;|133
|style=&quot;background:#6b4b57;height:8pt;&quot;|134
|style=&quot;background:#5f3f4b;height:8pt;&quot;|135
|style=&quot;background:#573743;height:8pt;&quot;|136
|style=&quot;background:#4b2f37;height:8pt;&quot;|137
|style=&quot;background:#43272f;height:8pt;&quot;|138
|style=&quot;background:#371f23;height:8pt;&quot;|139
|style=&quot;background:#2b171b;height:8pt;&quot;|140
|style=&quot;background:#231313;height:8pt;&quot;|141
|style=&quot;background:#170b0b;height:8pt;&quot;|142
|style=&quot;background:#0f0707;height:8pt;&quot;|143
|-
|style=&quot;color:black;text-align:right;&quot;|Magenta (9)
|style=&quot;background:#bb739f;height:8pt;&quot;|144
|style=&quot;background:#af6b8f;height:8pt;&quot;|145
|style=&quot;background:#a35f83;height:8pt;&quot;|146
|style=&quot;background:#975777;height:8pt;&quot;|147
|style=&quot;background:#8b4f6b;height:8pt;&quot;|148
|style=&quot;background:#7f4b5f;height:8pt;&quot;|149
|style=&quot;background:#734353;height:8pt;&quot;|150
|style=&quot;background:#6b3b4b;height:8pt;&quot;|151
|style=&quot;background:#5f333f;height:8pt;&quot;|152
|style=&quot;background:#532b37;height:8pt;&quot;|153
|style=&quot;background:#47232b;height:8pt;&quot;|154
|style=&quot;background:#3b1f23;height:8pt;&quot;|155
|style=&quot;background:#2f171b;height:8pt;&quot;|156
|style=&quot;background:#231313;height:8pt;&quot;|157
|style=&quot;background:#170b0b;height:8pt;&quot;|158
|style=&quot;background:#0f0707;height:8pt;&quot;|159
|-
|style=&quot;color:black;text-align:right;&quot;|Tan (10)
|style=&quot;background:#dbc3bb;height:8pt;&quot;|160
|style=&quot;background:#cbb3a7;height:8pt;&quot;|161
|style=&quot;background:#bfa39b;height:8pt;&quot;|162
|style=&quot;background:#af978b;height:8pt;&quot;|163
|style=&quot;background:#a3877b;height:8pt;&quot;|164
|style=&quot;background:#977b6f;height:8pt;&quot;|165
|style=&quot;background:#876f5f;height:8pt;&quot;|166
|style=&quot;background:#7b6353;height:8pt;&quot;|167
|style=&quot;background:#6b5747;height:8pt;&quot;|168
|style=&quot;background:#5f4b3b;height:8pt;&quot;|169
|style=&quot;background:#533f33;height:8pt;&quot;|170
|style=&quot;background:#433327;height:8pt;&quot;|171
|style=&quot;background:#372b1f;height:8pt;&quot;|172
|style=&quot;background:#271f17;height:8pt;&quot;|173
|style=&quot;background:#1b130f;height:8pt;&quot;|174
|style=&quot;background:#0f0b07;height:8pt;&quot;|175
|-
|style=&quot;color:black;text-align:right;&quot;|Light green (11)
|style=&quot;background:#6f837b;height:8pt;&quot;|176
|style=&quot;background:#677b6f;height:8pt;&quot;|177
|style=&quot;background:#5f7367;height:8pt;&quot;|178
|style=&quot;background:#576b5f;height:8pt;&quot;|179
|style=&quot;background:#4f6357;height:8pt;&quot;|180
|style=&quot;background:#475b4f;height:8pt;&quot;|181
|style=&quot;background:#3f5347;height:8pt;&quot;|182
|style=&quot;background:#374b3f;height:8pt;&quot;|183
|style=&quot;background:#2f4337;height:8pt;&quot;|184
|style=&quot;background:#2b3b2f;height:8pt;&quot;|185
|style=&quot;background:#233327;height:8pt;&quot;|186
|style=&quot;background:#1f2b1f;height:8pt;&quot;|187
|style=&quot;background:#172317;height:8pt;&quot;|188
|style=&quot;background:#0f1b13;height:8pt;&quot;|189
|style=&quot;background:#0b130b;height:8pt;&quot;|190
|style=&quot;background:#070b07;height:8pt;&quot;|191
|-
|style=&quot;color:black;text-align:right;&quot;|Yellow (12)
|style=&quot;background:#fff31b;height:8pt;&quot;|192
|style=&quot;background:#efdf17;height:8pt;&quot;|193
|style=&quot;background:#dbcb13;height:8pt;&quot;|194
|style=&quot;background:#cbb70f;height:8pt;&quot;|195
|style=&quot;background:#bba70f;height:8pt;&quot;|196
|style=&quot;background:#ab970b;height:8pt;&quot;|197
|style=&quot;background:#9b8307;height:8pt;&quot;|198
|style=&quot;background:#8b7307;height:8pt;&quot;|199
|style=&quot;background:#7b6307;height:8pt;&quot;|200
|style=&quot;background:#6b5300;height:8pt;&quot;|201
|style=&quot;background:#5b4700;height:8pt;&quot;|202
|style=&quot;background:#4b3700;height:8pt;&quot;|203
|style=&quot;background:#3b2b00;height:8pt;&quot;|204
|style=&quot;background:#2b1f00;height:8pt;&quot;|205
|style=&quot;background:#1b0f00;height:8pt;&quot;|206
|style=&quot;background:#0b0700;height:8pt;&quot;|207
|-
|style=&quot;color:black;text-align:right;&quot;|Blue (13)
|style=&quot;background:#0000ff;height:8pt;&quot;|208
|style=&quot;background:#0b0bef;height:8pt;&quot;|209
|style=&quot;background:#1313df;height:8pt;&quot;|210
|style=&quot;background:#1b1bcf;height:8pt;&quot;|211
|style=&quot;background:#2323bf;height:8pt;&quot;|212
|style=&quot;background:#2b2baf;height:8pt;&quot;|213
|style=&quot;background:#2f2f9f;height:8pt;&quot;|214
|style=&quot;background:#2f2f8f;height:8pt;&quot;|215
|style=&quot;background:#2f2f7f;height:8pt;&quot;|216
|style=&quot;background:#2f2f6f;height:8pt;&quot;|217
|style=&quot;background:#2f2f5f;height:8pt;&quot;|218
|style=&quot;background:#2b2b4f;height:8pt;&quot;|219
|style=&quot;background:#23233f;height:8pt;&quot;|220
|style=&quot;background:#1b1b2f;height:8pt;&quot;|221
|style=&quot;background:#13131f;height:8pt;&quot;|222
|style=&quot;background:#0b0b0f;height:8pt;&quot;|223
|-
|style=&quot;color:black;text-align:right;&quot;|Fire (14)
|style=&quot;background:#2b0000;height:8pt;&quot;|224
|style=&quot;background:#3b0000;height:8pt;&quot;|225
|style=&quot;background:#4b0700;height:8pt;&quot;|226
|style=&quot;background:#5f0700;height:8pt;&quot;|227
|style=&quot;background:#6f0f00;height:8pt;&quot;|228
|style=&quot;background:#7f1707;height:8pt;&quot;|229
|style=&quot;background:#931f07;height:8pt;&quot;|230
|style=&quot;background:#a3270b;height:8pt;&quot;|231
|style=&quot;background:#b7330f;height:8pt;&quot;|232
|style=&quot;background:#c34b1b;height:8pt;&quot;|233
|style=&quot;background:#cf632b;height:8pt;&quot;|234
|style=&quot;background:#db7f3b;height:8pt;&quot;|235
|style=&quot;background:#e3974f;height:8pt;&quot;|236
|style=&quot;background:#e7ab5f;height:8pt;&quot;|237
|style=&quot;background:#efbf77;height:8pt;&quot;|238
|style=&quot;background:#f7d38b;height:8pt;&quot;|239
|-
|style=&quot;color:black;text-align:right;&quot;|Brights (15)
|style=&quot;background:#a77b3b;height:8pt;&quot;|240
|style=&quot;background:#b79b37;height:8pt;&quot;|241
|style=&quot;background:#c7c337;height:8pt;&quot;|242
|style=&quot;background:#e7e357;height:8pt;&quot;|243
|style=&quot;background:#7fbfff;height:8pt;&quot;|244
|style=&quot;background:#abe7ff;height:8pt;&quot;|245
|style=&quot;background:#d7ffff;height:8pt;&quot;|246
|style=&quot;background:#670000;height:8pt;&quot;|247
|style=&quot;background:#8b0000;height:8pt;&quot;|248
|style=&quot;background:#b30000;height:8pt;&quot;|249
|style=&quot;background:#d70000;height:8pt;&quot;|250
|style=&quot;background:#ff0000;height:8pt;&quot;|251
|style=&quot;background:#fff393;height:8pt;&quot;|252
|style=&quot;background:#fff7c7;height:8pt;&quot;|253
|style=&quot;background:#ffffff;height:8pt;&quot;|254
|style=&quot;background:#9f5b53;height:8pt;&quot;|255
|-
|}

Color 255 is transparent for sprites, 2d lmps, and gfx.wad entries (excluding [[conchars]], in which case it is black (color 0) that's made transparent). It is important that palette index 0 is black. The parameters for the [[color]] console command are the row #, but is restricted to rows 0 - 13.

=== palette.lmp ===
The palette is stored in gfx/palette.lmp. It consists of 256 RGB values, coming out to 768 bytes in total.

=== Download ===
* [[Image:quake_palette.zip]] - The Quake palette in 3 formats: JASC (text), Microsoft (RIFF), and raw (768-byte lump of RGB values).

== Colormap ==
[[Image:Colormap.png]]

The colormap is a table used for lighting in software Quake engines. It contains a column of 64 values per each palette color. Each value is an index into the palette representing as closely as possible the original color brightened or darkened: shade 0 is double bright, shade 32 is the original color, and shade 63 is black.

&quot;Fullbright&quot; colors are those which are not lit in the colormap, simply using the original color for all 64 shades. These colors, when used in textures and model skins, will not be affected by lighting. Fullbrights are used for things like fire and glowing lights. In Quake these are the last 32 colors in the palette.

Since the [[GLQuake]] engine ignores the colormap, it doesn't support fullbrights. Most user-modified engines have fixed this problem.

=== colormap.lmp ===
The colormap is stored in gfx/colormap.lmp. The version included with Quake is 16385 bytes. Since the colormap only requires 16384 bytes (256 * 64), I'm not exactly sure what the extra byte (&lt;tt&gt;0x20&lt;/tt&gt;) at the end is for.

== Legal status ==
John Carmack officially put palette.lmp in the public domain to make Quake ports easier, so it is legal to, for example, embed it right into an engine executable. Colormap.lmp can also be considered public domain as it is trivially derived from the palette.

== Related Info ==
* Most engine mods use 32-bit colour, so you need not worry about palettes. With 32-bit textures, shirt/pants colour changing and fullbrights are only possible if engines support a new implementation of them, for example [[DarkPlaces]]'s [[DP_GFX_EXTERNALTEXTURES]] extension, which allows additional _glow, _pants, _shirt, etc textures on top of the main one)</text>
      <sha1>m4pijnctk4x2l7olcjxfhbe81nh1zr8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1167</id>
      <parentid>1166</parentid>
      <timestamp>2009-09-23T22:13:00Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="14516">__NOTOC__[[Image:Qpalette.png|right|thumb|The Quake palette.]]
{|style=&quot;color:white;font-weight:bold;font-size:8pt;text-align:center;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot;
|-
|style=&quot;color:black;text-align:right;&quot;|White (0)
|style=&quot;background:#000000;height:8pt;&quot;|0
|style=&quot;background:#0f0f0f;height:8pt;&quot;|1
|style=&quot;background:#1f1f1f;height:8pt;&quot;|2
|style=&quot;background:#2f2f2f;height:8pt;&quot;|3
|style=&quot;background:#3f3f3f;height:8pt;&quot;|4
|style=&quot;background:#4b4b4b;height:8pt;&quot;|5
|style=&quot;background:#5b5b5b;height:8pt;&quot;|6
|style=&quot;background:#6b6b6b;height:8pt;&quot;|7
|style=&quot;background:#7b7b7b;height:8pt;&quot;|8
|style=&quot;background:#8b8b8b;height:8pt;&quot;|9
|style=&quot;background:#9b9b9b;height:8pt;&quot;|10
|style=&quot;background:#ababab;height:8pt;&quot;|11
|style=&quot;background:#bbbbbb;height:8pt;&quot;|12
|style=&quot;background:#cbcbcb;height:8pt;&quot;|13
|style=&quot;background:#dbdbdb;height:8pt;&quot;|14
|style=&quot;background:#ebebeb;height:8pt;&quot;|15
|-
|style=&quot;color:black;text-align:right;&quot;|Brown (1)
|style=&quot;background:#0f0b07;height:8pt;&quot;|16
|style=&quot;background:#170f0b;height:8pt;&quot;|17
|style=&quot;background:#1f170b;height:8pt;&quot;|18
|style=&quot;background:#271b0f;height:8pt;&quot;|19
|style=&quot;background:#2f2313;height:8pt;&quot;|20
|style=&quot;background:#372b17;height:8pt;&quot;|21
|style=&quot;background:#3f2f17;height:8pt;&quot;|22
|style=&quot;background:#4b371b;height:8pt;&quot;|23
|style=&quot;background:#533b1b;height:8pt;&quot;|24
|style=&quot;background:#5b431f;height:8pt;&quot;|25
|style=&quot;background:#634b1f;height:8pt;&quot;|26
|style=&quot;background:#6b531f;height:8pt;&quot;|27
|style=&quot;background:#73571f;height:8pt;&quot;|28
|style=&quot;background:#7b5f23;height:8pt;&quot;|29
|style=&quot;background:#836723;height:8pt;&quot;|30
|style=&quot;background:#8f6f23;height:8pt;&quot;|31
|-
|style=&quot;color:black;text-align:right;&quot;|Light blue (2)
|style=&quot;background:#0b0b0f;height:8pt;&quot;|32
|style=&quot;background:#13131b;height:8pt;&quot;|33
|style=&quot;background:#1b1b27;height:8pt;&quot;|34
|style=&quot;background:#272733;height:8pt;&quot;|35
|style=&quot;background:#2f2f3f;height:8pt;&quot;|36
|style=&quot;background:#37374b;height:8pt;&quot;|37
|style=&quot;background:#3f3f57;height:8pt;&quot;|38
|style=&quot;background:#474767;height:8pt;&quot;|39
|style=&quot;background:#4f4f73;height:8pt;&quot;|40
|style=&quot;background:#5b5b7f;height:8pt;&quot;|41
|style=&quot;background:#63638b;height:8pt;&quot;|42
|style=&quot;background:#6b6b97;height:8pt;&quot;|43
|style=&quot;background:#7373a3;height:8pt;&quot;|44
|style=&quot;background:#7b7baf;height:8pt;&quot;|45
|style=&quot;background:#8383bb;height:8pt;&quot;|46
|style=&quot;background:#8b8bcb;height:8pt;&quot;|47
|-
|style=&quot;color:black;text-align:right;&quot;|Green (3)
|style=&quot;background:#000000;height:8pt;&quot;|48
|style=&quot;background:#070700;height:8pt;&quot;|49
|style=&quot;background:#0b0b00;height:8pt;&quot;|50
|style=&quot;background:#131300;height:8pt;&quot;|51
|style=&quot;background:#1b1b00;height:8pt;&quot;|52
|style=&quot;background:#232300;height:8pt;&quot;|53
|style=&quot;background:#2b2b07;height:8pt;&quot;|54
|style=&quot;background:#2f2f07;height:8pt;&quot;|55
|style=&quot;background:#373707;height:8pt;&quot;|56
|style=&quot;background:#3f3f07;height:8pt;&quot;|57
|style=&quot;background:#474707;height:8pt;&quot;|58
|style=&quot;background:#4b4b0b;height:8pt;&quot;|59
|style=&quot;background:#53530b;height:8pt;&quot;|60
|style=&quot;background:#5b5b0b;height:8pt;&quot;|61
|style=&quot;background:#63630b;height:8pt;&quot;|62
|style=&quot;background:#6b6b0f;height:8pt;&quot;|63
|-
|style=&quot;color:black;text-align:right;&quot;|Red (4)
|style=&quot;background:#070000;height:8pt;&quot;|64
|style=&quot;background:#0f0000;height:8pt;&quot;|65
|style=&quot;background:#170000;height:8pt;&quot;|66
|style=&quot;background:#1f0000;height:8pt;&quot;|67
|style=&quot;background:#270000;height:8pt;&quot;|68
|style=&quot;background:#2f0000;height:8pt;&quot;|69
|style=&quot;background:#370000;height:8pt;&quot;|70
|style=&quot;background:#3f0000;height:8pt;&quot;|71
|style=&quot;background:#470000;height:8pt;&quot;|72
|style=&quot;background:#4f0000;height:8pt;&quot;|73
|style=&quot;background:#570000;height:8pt;&quot;|74
|style=&quot;background:#5f0000;height:8pt;&quot;|75
|style=&quot;background:#670000;height:8pt;&quot;|76
|style=&quot;background:#6f0000;height:8pt;&quot;|77
|style=&quot;background:#770000;height:8pt;&quot;|78
|style=&quot;background:#7f0000;height:8pt;&quot;|79
|-
|style=&quot;color:black;text-align:right;&quot;|Orange (5)
|style=&quot;background:#131300;height:8pt;&quot;|80
|style=&quot;background:#1b1b00;height:8pt;&quot;|81
|style=&quot;background:#232300;height:8pt;&quot;|82
|style=&quot;background:#2f2b00;height:8pt;&quot;|83
|style=&quot;background:#372f00;height:8pt;&quot;|84
|style=&quot;background:#433700;height:8pt;&quot;|85
|style=&quot;background:#4b3b07;height:8pt;&quot;|86
|style=&quot;background:#574307;height:8pt;&quot;|87
|style=&quot;background:#5f4707;height:8pt;&quot;|88
|style=&quot;background:#6b4b0b;height:8pt;&quot;|89
|style=&quot;background:#77530f;height:8pt;&quot;|90
|style=&quot;background:#835713;height:8pt;&quot;|91
|style=&quot;background:#8b5b13;height:8pt;&quot;|92
|style=&quot;background:#975f1b;height:8pt;&quot;|93
|style=&quot;background:#a3631f;height:8pt;&quot;|94
|style=&quot;background:#af6723;height:8pt;&quot;|95
|-
|style=&quot;color:black;text-align:right;&quot;|Gold (6)
|style=&quot;background:#231307;height:8pt;&quot;|96
|style=&quot;background:#2f170b;height:8pt;&quot;|97
|style=&quot;background:#3b1f0f;height:8pt;&quot;|98
|style=&quot;background:#4b2313;height:8pt;&quot;|99
|style=&quot;background:#572b17;height:8pt;&quot;|100
|style=&quot;background:#632f1f;height:8pt;&quot;|101
|style=&quot;background:#733723;height:8pt;&quot;|102
|style=&quot;background:#7f3b2b;height:8pt;&quot;|103
|style=&quot;background:#8f4333;height:8pt;&quot;|104
|style=&quot;background:#9f4f33;height:8pt;&quot;|105
|style=&quot;background:#af632f;height:8pt;&quot;|106
|style=&quot;background:#bf772f;height:8pt;&quot;|107
|style=&quot;background:#cf8f2b;height:8pt;&quot;|108
|style=&quot;background:#dfab27;height:8pt;&quot;|109
|style=&quot;background:#efcb1f;height:8pt;&quot;|110
|style=&quot;background:#fff31b;height:8pt;&quot;|111
|-
|style=&quot;color:black;text-align:right;&quot;|Peach (7)
|style=&quot;background:#0b0700;height:8pt;&quot;|112
|style=&quot;background:#1b1300;height:8pt;&quot;|113
|style=&quot;background:#2b230f;height:8pt;&quot;|114
|style=&quot;background:#372b13;height:8pt;&quot;|115
|style=&quot;background:#47331b;height:8pt;&quot;|116
|style=&quot;background:#533723;height:8pt;&quot;|117
|style=&quot;background:#633f2b;height:8pt;&quot;|118
|style=&quot;background:#6f4733;height:8pt;&quot;|119
|style=&quot;background:#7f533f;height:8pt;&quot;|120
|style=&quot;background:#8b5f47;height:8pt;&quot;|121
|style=&quot;background:#9b6b53;height:8pt;&quot;|122
|style=&quot;background:#a77b5f;height:8pt;&quot;|123
|style=&quot;background:#b7876b;height:8pt;&quot;|124
|style=&quot;background:#c3937b;height:8pt;&quot;|125
|style=&quot;background:#d3a38b;height:8pt;&quot;|126
|style=&quot;background:#e3b397;height:8pt;&quot;|127
|-
|style=&quot;color:black;text-align:right;&quot;|Purple (8)
|style=&quot;background:#ab8ba3;height:8pt;&quot;|128
|style=&quot;background:#9f7f97;height:8pt;&quot;|129
|style=&quot;background:#937387;height:8pt;&quot;|130
|style=&quot;background:#8b677b;height:8pt;&quot;|131
|style=&quot;background:#7f5b6f;height:8pt;&quot;|132
|style=&quot;background:#775363;height:8pt;&quot;|133
|style=&quot;background:#6b4b57;height:8pt;&quot;|134
|style=&quot;background:#5f3f4b;height:8pt;&quot;|135
|style=&quot;background:#573743;height:8pt;&quot;|136
|style=&quot;background:#4b2f37;height:8pt;&quot;|137
|style=&quot;background:#43272f;height:8pt;&quot;|138
|style=&quot;background:#371f23;height:8pt;&quot;|139
|style=&quot;background:#2b171b;height:8pt;&quot;|140
|style=&quot;background:#231313;height:8pt;&quot;|141
|style=&quot;background:#170b0b;height:8pt;&quot;|142
|style=&quot;background:#0f0707;height:8pt;&quot;|143
|-
|style=&quot;color:black;text-align:right;&quot;|Magenta (9)
|style=&quot;background:#bb739f;height:8pt;&quot;|144
|style=&quot;background:#af6b8f;height:8pt;&quot;|145
|style=&quot;background:#a35f83;height:8pt;&quot;|146
|style=&quot;background:#975777;height:8pt;&quot;|147
|style=&quot;background:#8b4f6b;height:8pt;&quot;|148
|style=&quot;background:#7f4b5f;height:8pt;&quot;|149
|style=&quot;background:#734353;height:8pt;&quot;|150
|style=&quot;background:#6b3b4b;height:8pt;&quot;|151
|style=&quot;background:#5f333f;height:8pt;&quot;|152
|style=&quot;background:#532b37;height:8pt;&quot;|153
|style=&quot;background:#47232b;height:8pt;&quot;|154
|style=&quot;background:#3b1f23;height:8pt;&quot;|155
|style=&quot;background:#2f171b;height:8pt;&quot;|156
|style=&quot;background:#231313;height:8pt;&quot;|157
|style=&quot;background:#170b0b;height:8pt;&quot;|158
|style=&quot;background:#0f0707;height:8pt;&quot;|159
|-
|style=&quot;color:black;text-align:right;&quot;|Tan (10)
|style=&quot;background:#dbc3bb;height:8pt;&quot;|160
|style=&quot;background:#cbb3a7;height:8pt;&quot;|161
|style=&quot;background:#bfa39b;height:8pt;&quot;|162
|style=&quot;background:#af978b;height:8pt;&quot;|163
|style=&quot;background:#a3877b;height:8pt;&quot;|164
|style=&quot;background:#977b6f;height:8pt;&quot;|165
|style=&quot;background:#876f5f;height:8pt;&quot;|166
|style=&quot;background:#7b6353;height:8pt;&quot;|167
|style=&quot;background:#6b5747;height:8pt;&quot;|168
|style=&quot;background:#5f4b3b;height:8pt;&quot;|169
|style=&quot;background:#533f33;height:8pt;&quot;|170
|style=&quot;background:#433327;height:8pt;&quot;|171
|style=&quot;background:#372b1f;height:8pt;&quot;|172
|style=&quot;background:#271f17;height:8pt;&quot;|173
|style=&quot;background:#1b130f;height:8pt;&quot;|174
|style=&quot;background:#0f0b07;height:8pt;&quot;|175
|-
|style=&quot;color:black;text-align:right;&quot;|Light green (11)
|style=&quot;background:#6f837b;height:8pt;&quot;|176
|style=&quot;background:#677b6f;height:8pt;&quot;|177
|style=&quot;background:#5f7367;height:8pt;&quot;|178
|style=&quot;background:#576b5f;height:8pt;&quot;|179
|style=&quot;background:#4f6357;height:8pt;&quot;|180
|style=&quot;background:#475b4f;height:8pt;&quot;|181
|style=&quot;background:#3f5347;height:8pt;&quot;|182
|style=&quot;background:#374b3f;height:8pt;&quot;|183
|style=&quot;background:#2f4337;height:8pt;&quot;|184
|style=&quot;background:#2b3b2f;height:8pt;&quot;|185
|style=&quot;background:#233327;height:8pt;&quot;|186
|style=&quot;background:#1f2b1f;height:8pt;&quot;|187
|style=&quot;background:#172317;height:8pt;&quot;|188
|style=&quot;background:#0f1b13;height:8pt;&quot;|189
|style=&quot;background:#0b130b;height:8pt;&quot;|190
|style=&quot;background:#070b07;height:8pt;&quot;|191
|-
|style=&quot;color:black;text-align:right;&quot;|Yellow (12)
|style=&quot;background:#fff31b;height:8pt;&quot;|192
|style=&quot;background:#efdf17;height:8pt;&quot;|193
|style=&quot;background:#dbcb13;height:8pt;&quot;|194
|style=&quot;background:#cbb70f;height:8pt;&quot;|195
|style=&quot;background:#bba70f;height:8pt;&quot;|196
|style=&quot;background:#ab970b;height:8pt;&quot;|197
|style=&quot;background:#9b8307;height:8pt;&quot;|198
|style=&quot;background:#8b7307;height:8pt;&quot;|199
|style=&quot;background:#7b6307;height:8pt;&quot;|200
|style=&quot;background:#6b5300;height:8pt;&quot;|201
|style=&quot;background:#5b4700;height:8pt;&quot;|202
|style=&quot;background:#4b3700;height:8pt;&quot;|203
|style=&quot;background:#3b2b00;height:8pt;&quot;|204
|style=&quot;background:#2b1f00;height:8pt;&quot;|205
|style=&quot;background:#1b0f00;height:8pt;&quot;|206
|style=&quot;background:#0b0700;height:8pt;&quot;|207
|-
|style=&quot;color:black;text-align:right;&quot;|Blue (13)
|style=&quot;background:#0000ff;height:8pt;&quot;|208
|style=&quot;background:#0b0bef;height:8pt;&quot;|209
|style=&quot;background:#1313df;height:8pt;&quot;|210
|style=&quot;background:#1b1bcf;height:8pt;&quot;|211
|style=&quot;background:#2323bf;height:8pt;&quot;|212
|style=&quot;background:#2b2baf;height:8pt;&quot;|213
|style=&quot;background:#2f2f9f;height:8pt;&quot;|214
|style=&quot;background:#2f2f8f;height:8pt;&quot;|215
|style=&quot;background:#2f2f7f;height:8pt;&quot;|216
|style=&quot;background:#2f2f6f;height:8pt;&quot;|217
|style=&quot;background:#2f2f5f;height:8pt;&quot;|218
|style=&quot;background:#2b2b4f;height:8pt;&quot;|219
|style=&quot;background:#23233f;height:8pt;&quot;|220
|style=&quot;background:#1b1b2f;height:8pt;&quot;|221
|style=&quot;background:#13131f;height:8pt;&quot;|222
|style=&quot;background:#0b0b0f;height:8pt;&quot;|223
|-
|style=&quot;color:black;text-align:right;&quot;|Fire (14)
|style=&quot;background:#2b0000;height:8pt;&quot;|224
|style=&quot;background:#3b0000;height:8pt;&quot;|225
|style=&quot;background:#4b0700;height:8pt;&quot;|226
|style=&quot;background:#5f0700;height:8pt;&quot;|227
|style=&quot;background:#6f0f00;height:8pt;&quot;|228
|style=&quot;background:#7f1707;height:8pt;&quot;|229
|style=&quot;background:#931f07;height:8pt;&quot;|230
|style=&quot;background:#a3270b;height:8pt;&quot;|231
|style=&quot;background:#b7330f;height:8pt;&quot;|232
|style=&quot;background:#c34b1b;height:8pt;&quot;|233
|style=&quot;background:#cf632b;height:8pt;&quot;|234
|style=&quot;background:#db7f3b;height:8pt;&quot;|235
|style=&quot;background:#e3974f;height:8pt;&quot;|236
|style=&quot;background:#e7ab5f;height:8pt;&quot;|237
|style=&quot;background:#efbf77;height:8pt;&quot;|238
|style=&quot;background:#f7d38b;height:8pt;&quot;|239
|-
|style=&quot;color:black;text-align:right;&quot;|Brights (15)
|style=&quot;background:#a77b3b;height:8pt;&quot;|240
|style=&quot;background:#b79b37;height:8pt;&quot;|241
|style=&quot;background:#c7c337;height:8pt;&quot;|242
|style=&quot;background:#e7e357;height:8pt;&quot;|243
|style=&quot;background:#7fbfff;height:8pt;&quot;|244
|style=&quot;background:#abe7ff;height:8pt;&quot;|245
|style=&quot;background:#d7ffff;height:8pt;&quot;|246
|style=&quot;background:#670000;height:8pt;&quot;|247
|style=&quot;background:#8b0000;height:8pt;&quot;|248
|style=&quot;background:#b30000;height:8pt;&quot;|249
|style=&quot;background:#d70000;height:8pt;&quot;|250
|style=&quot;background:#ff0000;height:8pt;&quot;|251
|style=&quot;background:#fff393;height:8pt;&quot;|252
|style=&quot;background:#fff7c7;height:8pt;&quot;|253
|style=&quot;background:#ffffff;height:8pt;&quot;|254
|style=&quot;background:#9f5b53;height:8pt;&quot;|255
|-
|}

Color 255 is transparent for sprites, 2d lmps, and gfx.wad entries (excluding [[conchars]], in which case it is black (color 0) that's made transparent). It is important that palette index 0 is black. The parameters for the [[color]] console command are the row #, but is restricted to rows 0 - 13.

=== palette.lmp ===
The palette is stored in gfx/palette.lmp. It consists of 256 RGB values, coming out to 768 bytes in total.

=== Download ===
* [[Image:quake_palette.zip]] - The Quake palette in 3 formats: JASC (text), Microsoft (RIFF), and raw (768-byte lump of RGB values).

== Colormap ==
[[Image:Colormap.png|right|thumb|The Quake colormap.]]

The colormap is a table used for lighting in software Quake engines. It contains a column of 64 values per each palette color. Each value is an index into the palette representing as closely as possible the original color brightened or darkened: shade 0 is double bright, shade 32 is the original color, and shade 63 is black.

&quot;Fullbright&quot; colors are those which are not lit in the colormap, simply using the original color for all 64 shades. These colors, when used in textures and model skins, will not be affected by lighting. Fullbrights are used for things like fire and glowing lights. In Quake these are the last 32 colors in the palette.

Since the [[GLQuake]] engine ignores the colormap, it doesn't support fullbrights. Most user-modified engines have fixed this problem.

=== colormap.lmp ===
The colormap is stored in gfx/colormap.lmp. The version included with Quake is 16385 bytes. Since the colormap only requires 16384 bytes (256 * 64), I'm not exactly sure what the extra byte (&lt;tt&gt;0x20&lt;/tt&gt;) at the end is for.

== Legal status ==
John Carmack officially put palette.lmp in the public domain to make Quake ports easier, so it is legal to, for example, embed it right into an engine executable. Colormap.lmp can also be considered public domain as it is trivially derived from the palette.

== Related Info ==
* Most engine mods use 32-bit colour, so you need not worry about palettes. With 32-bit textures, shirt/pants colour changing and fullbrights are only possible if engines support a new implementation of them, for example [[DarkPlaces]]'s [[DP_GFX_EXTERNALTEXTURES]] extension, which allows additional _glow, _pants, _shirt, etc textures on top of the main one)</text>
      <sha1>nlar0ccbcox9w96dtewipowca6hicab</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1168</id>
      <parentid>1167</parentid>
      <timestamp>2009-09-23T22:36:21Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <comment>code to generate colormap</comment>
      <text xml:space="preserve" bytes="16210">__NOTOC__[[Image:Qpalette.png|right|thumb|The Quake palette.]]
{|style=&quot;color:white;font-weight:bold;font-size:8pt;text-align:center;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot;
|-
|style=&quot;color:black;text-align:right;&quot;|White (0)
|style=&quot;background:#000000;height:8pt;&quot;|0
|style=&quot;background:#0f0f0f;height:8pt;&quot;|1
|style=&quot;background:#1f1f1f;height:8pt;&quot;|2
|style=&quot;background:#2f2f2f;height:8pt;&quot;|3
|style=&quot;background:#3f3f3f;height:8pt;&quot;|4
|style=&quot;background:#4b4b4b;height:8pt;&quot;|5
|style=&quot;background:#5b5b5b;height:8pt;&quot;|6
|style=&quot;background:#6b6b6b;height:8pt;&quot;|7
|style=&quot;background:#7b7b7b;height:8pt;&quot;|8
|style=&quot;background:#8b8b8b;height:8pt;&quot;|9
|style=&quot;background:#9b9b9b;height:8pt;&quot;|10
|style=&quot;background:#ababab;height:8pt;&quot;|11
|style=&quot;background:#bbbbbb;height:8pt;&quot;|12
|style=&quot;background:#cbcbcb;height:8pt;&quot;|13
|style=&quot;background:#dbdbdb;height:8pt;&quot;|14
|style=&quot;background:#ebebeb;height:8pt;&quot;|15
|-
|style=&quot;color:black;text-align:right;&quot;|Brown (1)
|style=&quot;background:#0f0b07;height:8pt;&quot;|16
|style=&quot;background:#170f0b;height:8pt;&quot;|17
|style=&quot;background:#1f170b;height:8pt;&quot;|18
|style=&quot;background:#271b0f;height:8pt;&quot;|19
|style=&quot;background:#2f2313;height:8pt;&quot;|20
|style=&quot;background:#372b17;height:8pt;&quot;|21
|style=&quot;background:#3f2f17;height:8pt;&quot;|22
|style=&quot;background:#4b371b;height:8pt;&quot;|23
|style=&quot;background:#533b1b;height:8pt;&quot;|24
|style=&quot;background:#5b431f;height:8pt;&quot;|25
|style=&quot;background:#634b1f;height:8pt;&quot;|26
|style=&quot;background:#6b531f;height:8pt;&quot;|27
|style=&quot;background:#73571f;height:8pt;&quot;|28
|style=&quot;background:#7b5f23;height:8pt;&quot;|29
|style=&quot;background:#836723;height:8pt;&quot;|30
|style=&quot;background:#8f6f23;height:8pt;&quot;|31
|-
|style=&quot;color:black;text-align:right;&quot;|Light blue (2)
|style=&quot;background:#0b0b0f;height:8pt;&quot;|32
|style=&quot;background:#13131b;height:8pt;&quot;|33
|style=&quot;background:#1b1b27;height:8pt;&quot;|34
|style=&quot;background:#272733;height:8pt;&quot;|35
|style=&quot;background:#2f2f3f;height:8pt;&quot;|36
|style=&quot;background:#37374b;height:8pt;&quot;|37
|style=&quot;background:#3f3f57;height:8pt;&quot;|38
|style=&quot;background:#474767;height:8pt;&quot;|39
|style=&quot;background:#4f4f73;height:8pt;&quot;|40
|style=&quot;background:#5b5b7f;height:8pt;&quot;|41
|style=&quot;background:#63638b;height:8pt;&quot;|42
|style=&quot;background:#6b6b97;height:8pt;&quot;|43
|style=&quot;background:#7373a3;height:8pt;&quot;|44
|style=&quot;background:#7b7baf;height:8pt;&quot;|45
|style=&quot;background:#8383bb;height:8pt;&quot;|46
|style=&quot;background:#8b8bcb;height:8pt;&quot;|47
|-
|style=&quot;color:black;text-align:right;&quot;|Green (3)
|style=&quot;background:#000000;height:8pt;&quot;|48
|style=&quot;background:#070700;height:8pt;&quot;|49
|style=&quot;background:#0b0b00;height:8pt;&quot;|50
|style=&quot;background:#131300;height:8pt;&quot;|51
|style=&quot;background:#1b1b00;height:8pt;&quot;|52
|style=&quot;background:#232300;height:8pt;&quot;|53
|style=&quot;background:#2b2b07;height:8pt;&quot;|54
|style=&quot;background:#2f2f07;height:8pt;&quot;|55
|style=&quot;background:#373707;height:8pt;&quot;|56
|style=&quot;background:#3f3f07;height:8pt;&quot;|57
|style=&quot;background:#474707;height:8pt;&quot;|58
|style=&quot;background:#4b4b0b;height:8pt;&quot;|59
|style=&quot;background:#53530b;height:8pt;&quot;|60
|style=&quot;background:#5b5b0b;height:8pt;&quot;|61
|style=&quot;background:#63630b;height:8pt;&quot;|62
|style=&quot;background:#6b6b0f;height:8pt;&quot;|63
|-
|style=&quot;color:black;text-align:right;&quot;|Red (4)
|style=&quot;background:#070000;height:8pt;&quot;|64
|style=&quot;background:#0f0000;height:8pt;&quot;|65
|style=&quot;background:#170000;height:8pt;&quot;|66
|style=&quot;background:#1f0000;height:8pt;&quot;|67
|style=&quot;background:#270000;height:8pt;&quot;|68
|style=&quot;background:#2f0000;height:8pt;&quot;|69
|style=&quot;background:#370000;height:8pt;&quot;|70
|style=&quot;background:#3f0000;height:8pt;&quot;|71
|style=&quot;background:#470000;height:8pt;&quot;|72
|style=&quot;background:#4f0000;height:8pt;&quot;|73
|style=&quot;background:#570000;height:8pt;&quot;|74
|style=&quot;background:#5f0000;height:8pt;&quot;|75
|style=&quot;background:#670000;height:8pt;&quot;|76
|style=&quot;background:#6f0000;height:8pt;&quot;|77
|style=&quot;background:#770000;height:8pt;&quot;|78
|style=&quot;background:#7f0000;height:8pt;&quot;|79
|-
|style=&quot;color:black;text-align:right;&quot;|Orange (5)
|style=&quot;background:#131300;height:8pt;&quot;|80
|style=&quot;background:#1b1b00;height:8pt;&quot;|81
|style=&quot;background:#232300;height:8pt;&quot;|82
|style=&quot;background:#2f2b00;height:8pt;&quot;|83
|style=&quot;background:#372f00;height:8pt;&quot;|84
|style=&quot;background:#433700;height:8pt;&quot;|85
|style=&quot;background:#4b3b07;height:8pt;&quot;|86
|style=&quot;background:#574307;height:8pt;&quot;|87
|style=&quot;background:#5f4707;height:8pt;&quot;|88
|style=&quot;background:#6b4b0b;height:8pt;&quot;|89
|style=&quot;background:#77530f;height:8pt;&quot;|90
|style=&quot;background:#835713;height:8pt;&quot;|91
|style=&quot;background:#8b5b13;height:8pt;&quot;|92
|style=&quot;background:#975f1b;height:8pt;&quot;|93
|style=&quot;background:#a3631f;height:8pt;&quot;|94
|style=&quot;background:#af6723;height:8pt;&quot;|95
|-
|style=&quot;color:black;text-align:right;&quot;|Gold (6)
|style=&quot;background:#231307;height:8pt;&quot;|96
|style=&quot;background:#2f170b;height:8pt;&quot;|97
|style=&quot;background:#3b1f0f;height:8pt;&quot;|98
|style=&quot;background:#4b2313;height:8pt;&quot;|99
|style=&quot;background:#572b17;height:8pt;&quot;|100
|style=&quot;background:#632f1f;height:8pt;&quot;|101
|style=&quot;background:#733723;height:8pt;&quot;|102
|style=&quot;background:#7f3b2b;height:8pt;&quot;|103
|style=&quot;background:#8f4333;height:8pt;&quot;|104
|style=&quot;background:#9f4f33;height:8pt;&quot;|105
|style=&quot;background:#af632f;height:8pt;&quot;|106
|style=&quot;background:#bf772f;height:8pt;&quot;|107
|style=&quot;background:#cf8f2b;height:8pt;&quot;|108
|style=&quot;background:#dfab27;height:8pt;&quot;|109
|style=&quot;background:#efcb1f;height:8pt;&quot;|110
|style=&quot;background:#fff31b;height:8pt;&quot;|111
|-
|style=&quot;color:black;text-align:right;&quot;|Peach (7)
|style=&quot;background:#0b0700;height:8pt;&quot;|112
|style=&quot;background:#1b1300;height:8pt;&quot;|113
|style=&quot;background:#2b230f;height:8pt;&quot;|114
|style=&quot;background:#372b13;height:8pt;&quot;|115
|style=&quot;background:#47331b;height:8pt;&quot;|116
|style=&quot;background:#533723;height:8pt;&quot;|117
|style=&quot;background:#633f2b;height:8pt;&quot;|118
|style=&quot;background:#6f4733;height:8pt;&quot;|119
|style=&quot;background:#7f533f;height:8pt;&quot;|120
|style=&quot;background:#8b5f47;height:8pt;&quot;|121
|style=&quot;background:#9b6b53;height:8pt;&quot;|122
|style=&quot;background:#a77b5f;height:8pt;&quot;|123
|style=&quot;background:#b7876b;height:8pt;&quot;|124
|style=&quot;background:#c3937b;height:8pt;&quot;|125
|style=&quot;background:#d3a38b;height:8pt;&quot;|126
|style=&quot;background:#e3b397;height:8pt;&quot;|127
|-
|style=&quot;color:black;text-align:right;&quot;|Purple (8)
|style=&quot;background:#ab8ba3;height:8pt;&quot;|128
|style=&quot;background:#9f7f97;height:8pt;&quot;|129
|style=&quot;background:#937387;height:8pt;&quot;|130
|style=&quot;background:#8b677b;height:8pt;&quot;|131
|style=&quot;background:#7f5b6f;height:8pt;&quot;|132
|style=&quot;background:#775363;height:8pt;&quot;|133
|style=&quot;background:#6b4b57;height:8pt;&quot;|134
|style=&quot;background:#5f3f4b;height:8pt;&quot;|135
|style=&quot;background:#573743;height:8pt;&quot;|136
|style=&quot;background:#4b2f37;height:8pt;&quot;|137
|style=&quot;background:#43272f;height:8pt;&quot;|138
|style=&quot;background:#371f23;height:8pt;&quot;|139
|style=&quot;background:#2b171b;height:8pt;&quot;|140
|style=&quot;background:#231313;height:8pt;&quot;|141
|style=&quot;background:#170b0b;height:8pt;&quot;|142
|style=&quot;background:#0f0707;height:8pt;&quot;|143
|-
|style=&quot;color:black;text-align:right;&quot;|Magenta (9)
|style=&quot;background:#bb739f;height:8pt;&quot;|144
|style=&quot;background:#af6b8f;height:8pt;&quot;|145
|style=&quot;background:#a35f83;height:8pt;&quot;|146
|style=&quot;background:#975777;height:8pt;&quot;|147
|style=&quot;background:#8b4f6b;height:8pt;&quot;|148
|style=&quot;background:#7f4b5f;height:8pt;&quot;|149
|style=&quot;background:#734353;height:8pt;&quot;|150
|style=&quot;background:#6b3b4b;height:8pt;&quot;|151
|style=&quot;background:#5f333f;height:8pt;&quot;|152
|style=&quot;background:#532b37;height:8pt;&quot;|153
|style=&quot;background:#47232b;height:8pt;&quot;|154
|style=&quot;background:#3b1f23;height:8pt;&quot;|155
|style=&quot;background:#2f171b;height:8pt;&quot;|156
|style=&quot;background:#231313;height:8pt;&quot;|157
|style=&quot;background:#170b0b;height:8pt;&quot;|158
|style=&quot;background:#0f0707;height:8pt;&quot;|159
|-
|style=&quot;color:black;text-align:right;&quot;|Tan (10)
|style=&quot;background:#dbc3bb;height:8pt;&quot;|160
|style=&quot;background:#cbb3a7;height:8pt;&quot;|161
|style=&quot;background:#bfa39b;height:8pt;&quot;|162
|style=&quot;background:#af978b;height:8pt;&quot;|163
|style=&quot;background:#a3877b;height:8pt;&quot;|164
|style=&quot;background:#977b6f;height:8pt;&quot;|165
|style=&quot;background:#876f5f;height:8pt;&quot;|166
|style=&quot;background:#7b6353;height:8pt;&quot;|167
|style=&quot;background:#6b5747;height:8pt;&quot;|168
|style=&quot;background:#5f4b3b;height:8pt;&quot;|169
|style=&quot;background:#533f33;height:8pt;&quot;|170
|style=&quot;background:#433327;height:8pt;&quot;|171
|style=&quot;background:#372b1f;height:8pt;&quot;|172
|style=&quot;background:#271f17;height:8pt;&quot;|173
|style=&quot;background:#1b130f;height:8pt;&quot;|174
|style=&quot;background:#0f0b07;height:8pt;&quot;|175
|-
|style=&quot;color:black;text-align:right;&quot;|Light green (11)
|style=&quot;background:#6f837b;height:8pt;&quot;|176
|style=&quot;background:#677b6f;height:8pt;&quot;|177
|style=&quot;background:#5f7367;height:8pt;&quot;|178
|style=&quot;background:#576b5f;height:8pt;&quot;|179
|style=&quot;background:#4f6357;height:8pt;&quot;|180
|style=&quot;background:#475b4f;height:8pt;&quot;|181
|style=&quot;background:#3f5347;height:8pt;&quot;|182
|style=&quot;background:#374b3f;height:8pt;&quot;|183
|style=&quot;background:#2f4337;height:8pt;&quot;|184
|style=&quot;background:#2b3b2f;height:8pt;&quot;|185
|style=&quot;background:#233327;height:8pt;&quot;|186
|style=&quot;background:#1f2b1f;height:8pt;&quot;|187
|style=&quot;background:#172317;height:8pt;&quot;|188
|style=&quot;background:#0f1b13;height:8pt;&quot;|189
|style=&quot;background:#0b130b;height:8pt;&quot;|190
|style=&quot;background:#070b07;height:8pt;&quot;|191
|-
|style=&quot;color:black;text-align:right;&quot;|Yellow (12)
|style=&quot;background:#fff31b;height:8pt;&quot;|192
|style=&quot;background:#efdf17;height:8pt;&quot;|193
|style=&quot;background:#dbcb13;height:8pt;&quot;|194
|style=&quot;background:#cbb70f;height:8pt;&quot;|195
|style=&quot;background:#bba70f;height:8pt;&quot;|196
|style=&quot;background:#ab970b;height:8pt;&quot;|197
|style=&quot;background:#9b8307;height:8pt;&quot;|198
|style=&quot;background:#8b7307;height:8pt;&quot;|199
|style=&quot;background:#7b6307;height:8pt;&quot;|200
|style=&quot;background:#6b5300;height:8pt;&quot;|201
|style=&quot;background:#5b4700;height:8pt;&quot;|202
|style=&quot;background:#4b3700;height:8pt;&quot;|203
|style=&quot;background:#3b2b00;height:8pt;&quot;|204
|style=&quot;background:#2b1f00;height:8pt;&quot;|205
|style=&quot;background:#1b0f00;height:8pt;&quot;|206
|style=&quot;background:#0b0700;height:8pt;&quot;|207
|-
|style=&quot;color:black;text-align:right;&quot;|Blue (13)
|style=&quot;background:#0000ff;height:8pt;&quot;|208
|style=&quot;background:#0b0bef;height:8pt;&quot;|209
|style=&quot;background:#1313df;height:8pt;&quot;|210
|style=&quot;background:#1b1bcf;height:8pt;&quot;|211
|style=&quot;background:#2323bf;height:8pt;&quot;|212
|style=&quot;background:#2b2baf;height:8pt;&quot;|213
|style=&quot;background:#2f2f9f;height:8pt;&quot;|214
|style=&quot;background:#2f2f8f;height:8pt;&quot;|215
|style=&quot;background:#2f2f7f;height:8pt;&quot;|216
|style=&quot;background:#2f2f6f;height:8pt;&quot;|217
|style=&quot;background:#2f2f5f;height:8pt;&quot;|218
|style=&quot;background:#2b2b4f;height:8pt;&quot;|219
|style=&quot;background:#23233f;height:8pt;&quot;|220
|style=&quot;background:#1b1b2f;height:8pt;&quot;|221
|style=&quot;background:#13131f;height:8pt;&quot;|222
|style=&quot;background:#0b0b0f;height:8pt;&quot;|223
|-
|style=&quot;color:black;text-align:right;&quot;|Fire (14)
|style=&quot;background:#2b0000;height:8pt;&quot;|224
|style=&quot;background:#3b0000;height:8pt;&quot;|225
|style=&quot;background:#4b0700;height:8pt;&quot;|226
|style=&quot;background:#5f0700;height:8pt;&quot;|227
|style=&quot;background:#6f0f00;height:8pt;&quot;|228
|style=&quot;background:#7f1707;height:8pt;&quot;|229
|style=&quot;background:#931f07;height:8pt;&quot;|230
|style=&quot;background:#a3270b;height:8pt;&quot;|231
|style=&quot;background:#b7330f;height:8pt;&quot;|232
|style=&quot;background:#c34b1b;height:8pt;&quot;|233
|style=&quot;background:#cf632b;height:8pt;&quot;|234
|style=&quot;background:#db7f3b;height:8pt;&quot;|235
|style=&quot;background:#e3974f;height:8pt;&quot;|236
|style=&quot;background:#e7ab5f;height:8pt;&quot;|237
|style=&quot;background:#efbf77;height:8pt;&quot;|238
|style=&quot;background:#f7d38b;height:8pt;&quot;|239
|-
|style=&quot;color:black;text-align:right;&quot;|Brights (15)
|style=&quot;background:#a77b3b;height:8pt;&quot;|240
|style=&quot;background:#b79b37;height:8pt;&quot;|241
|style=&quot;background:#c7c337;height:8pt;&quot;|242
|style=&quot;background:#e7e357;height:8pt;&quot;|243
|style=&quot;background:#7fbfff;height:8pt;&quot;|244
|style=&quot;background:#abe7ff;height:8pt;&quot;|245
|style=&quot;background:#d7ffff;height:8pt;&quot;|246
|style=&quot;background:#670000;height:8pt;&quot;|247
|style=&quot;background:#8b0000;height:8pt;&quot;|248
|style=&quot;background:#b30000;height:8pt;&quot;|249
|style=&quot;background:#d70000;height:8pt;&quot;|250
|style=&quot;background:#ff0000;height:8pt;&quot;|251
|style=&quot;background:#fff393;height:8pt;&quot;|252
|style=&quot;background:#fff7c7;height:8pt;&quot;|253
|style=&quot;background:#ffffff;height:8pt;&quot;|254
|style=&quot;background:#9f5b53;height:8pt;&quot;|255
|-
|}

Color 255 is transparent for sprites, 2d lmps, and gfx.wad entries (excluding [[conchars]], in which case it is black (color 0) that's made transparent). It is important that palette index 0 is black. The parameters for the [[color]] console command are the row #, but is restricted to rows 0 - 13.

=== palette.lmp ===
The palette is stored in gfx/palette.lmp. It consists of 256 RGB values, coming out to 768 bytes in total.

=== Download ===
* [[Image:quake_palette.zip]] - The Quake palette in 3 formats: JASC (text), Microsoft (RIFF), and raw (768-byte lump of RGB values).

== Colormap ==
[[Image:Colormap.png|right|thumb|The Quake colormap.]]

The colormap is a table used for lighting in software Quake engines. It contains a column of 64 values per each palette color. Each value is an index into the palette representing as closely as possible the original color brightened or darkened: shade 0 is double bright, shade 32 is the original color, and shade 63 is black.

&quot;Fullbright&quot; colors are those which are not lit in the colormap, simply using the original color for all 64 shades. These colors, when used in textures and model skins, will not be affected by lighting. Fullbrights are used for things like fire and glowing lights. In Quake these are the last 32 colors in the palette.

Since the [[GLQuake]] engine ignores the colormap, it doesn't support fullbrights. Most user-modified engines have fixed this problem.

=== colormap.lmp ===
The colormap is stored in gfx/colormap.lmp. The version included with Quake is 16385 bytes. Since the colormap only requires 16384 bytes (256 * 64), I'm not exactly sure what the extra byte (&lt;tt&gt;0x20&lt;/tt&gt;) at the end is for.

=== Generating the colormap ===
The following C code will generate a colormap.lmp that is nearly (but not exactly) identical to the Quake colormap. Sorry about the lack of comments, maybe I'll add some later. Consider it public domain.

 /* sample a 24-bit RGB value to one of the colours on the existing 8-bit palette */
 unsigned char convert_24_to_8(const unsigned char palette[768], const int rgb[3])
 {
   int i, j;
   int best_index = -1;
   int best_dist = 0;
 
   for (i = 0; i &lt; 256; i++)
   {
     int dist = 0;
 
     for (j = 0; j &lt; 3; j++)
     {
     /* note that we could use RGB luminosity bias for greater accuracy, but quake's colormap apparently didn't do this */
       int d = abs(rgb[j] - palette[i*3+j]);
       dist += d * d;
     }
 
     if (best_index == -1 || dist &lt; best_dist)
     {
       best_index = i;
       best_dist = dist;
     }
   }
 
   return (unsigned char)best_index;
 }
 
 void generate_colormap(const unsigned char palette[768], unsigned char out_colormap[16384])
 {
   int num_fullbrights = 32; /* the last 32 colours will be full bright */
   int x, y, i;
 
   for (x = 0; x &lt; 256; x++)
   {
     for (y = 0; y &lt; 64; y++)
     {
       if (x &lt; 256 - num_fullbrights)
       {
         int rgb[3];
 
         for (i = 0; i &lt; 3; i++)
         {
           rgb[i] = (palette[x*3+i] * (63 - y) + 16) &gt;&gt; 5; /* divide by 32, rounding to nearest integer */
           if (rgb[i] &gt; 255)
             rgb[i] = 255;
         }
 
         out_colormap[y*256+x] = convert_24_to_8(palette, rgb);
       }
       else
       {
       /* this colour is a fullbright, just keep the original colour */
         out_colormap[y*256+x] = x;
       }
     }
   }
 }

== Legal status ==
John Carmack officially put palette.lmp in the public domain to make Quake ports easier, so it is legal to, for example, embed it right into an engine executable. Colormap.lmp can also be considered public domain as it is trivially derived from the palette.

== Related Info ==
* Most engine mods use 32-bit colour, so you need not worry about palettes. With 32-bit textures, shirt/pants colour changing and fullbrights are only possible if engines support a new implementation of them, for example [[DarkPlaces]]'s [[DP_GFX_EXTERNALTEXTURES]] extension, which allows additional _glow, _pants, _shirt, etc textures on top of the main one)</text>
      <sha1>ig91kizw3ri20ki4pat9admxh21jfmz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1172</id>
      <parentid>1168</parentid>
      <timestamp>2009-09-23T22:40:44Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="16370">__NOTOC__[[Image:Qpalette.png|right|thumb|The Quake palette.]]
{|style=&quot;color:white;font-weight:bold;font-size:8pt;text-align:center;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot;
|-
|style=&quot;color:black;text-align:right;&quot;|White (0)
|style=&quot;background:#000000;height:8pt;&quot;|0
|style=&quot;background:#0f0f0f;height:8pt;&quot;|1
|style=&quot;background:#1f1f1f;height:8pt;&quot;|2
|style=&quot;background:#2f2f2f;height:8pt;&quot;|3
|style=&quot;background:#3f3f3f;height:8pt;&quot;|4
|style=&quot;background:#4b4b4b;height:8pt;&quot;|5
|style=&quot;background:#5b5b5b;height:8pt;&quot;|6
|style=&quot;background:#6b6b6b;height:8pt;&quot;|7
|style=&quot;background:#7b7b7b;height:8pt;&quot;|8
|style=&quot;background:#8b8b8b;height:8pt;&quot;|9
|style=&quot;background:#9b9b9b;height:8pt;&quot;|10
|style=&quot;background:#ababab;height:8pt;&quot;|11
|style=&quot;background:#bbbbbb;height:8pt;&quot;|12
|style=&quot;background:#cbcbcb;height:8pt;&quot;|13
|style=&quot;background:#dbdbdb;height:8pt;&quot;|14
|style=&quot;background:#ebebeb;height:8pt;&quot;|15
|-
|style=&quot;color:black;text-align:right;&quot;|Brown (1)
|style=&quot;background:#0f0b07;height:8pt;&quot;|16
|style=&quot;background:#170f0b;height:8pt;&quot;|17
|style=&quot;background:#1f170b;height:8pt;&quot;|18
|style=&quot;background:#271b0f;height:8pt;&quot;|19
|style=&quot;background:#2f2313;height:8pt;&quot;|20
|style=&quot;background:#372b17;height:8pt;&quot;|21
|style=&quot;background:#3f2f17;height:8pt;&quot;|22
|style=&quot;background:#4b371b;height:8pt;&quot;|23
|style=&quot;background:#533b1b;height:8pt;&quot;|24
|style=&quot;background:#5b431f;height:8pt;&quot;|25
|style=&quot;background:#634b1f;height:8pt;&quot;|26
|style=&quot;background:#6b531f;height:8pt;&quot;|27
|style=&quot;background:#73571f;height:8pt;&quot;|28
|style=&quot;background:#7b5f23;height:8pt;&quot;|29
|style=&quot;background:#836723;height:8pt;&quot;|30
|style=&quot;background:#8f6f23;height:8pt;&quot;|31
|-
|style=&quot;color:black;text-align:right;&quot;|Light blue (2)
|style=&quot;background:#0b0b0f;height:8pt;&quot;|32
|style=&quot;background:#13131b;height:8pt;&quot;|33
|style=&quot;background:#1b1b27;height:8pt;&quot;|34
|style=&quot;background:#272733;height:8pt;&quot;|35
|style=&quot;background:#2f2f3f;height:8pt;&quot;|36
|style=&quot;background:#37374b;height:8pt;&quot;|37
|style=&quot;background:#3f3f57;height:8pt;&quot;|38
|style=&quot;background:#474767;height:8pt;&quot;|39
|style=&quot;background:#4f4f73;height:8pt;&quot;|40
|style=&quot;background:#5b5b7f;height:8pt;&quot;|41
|style=&quot;background:#63638b;height:8pt;&quot;|42
|style=&quot;background:#6b6b97;height:8pt;&quot;|43
|style=&quot;background:#7373a3;height:8pt;&quot;|44
|style=&quot;background:#7b7baf;height:8pt;&quot;|45
|style=&quot;background:#8383bb;height:8pt;&quot;|46
|style=&quot;background:#8b8bcb;height:8pt;&quot;|47
|-
|style=&quot;color:black;text-align:right;&quot;|Green (3)
|style=&quot;background:#000000;height:8pt;&quot;|48
|style=&quot;background:#070700;height:8pt;&quot;|49
|style=&quot;background:#0b0b00;height:8pt;&quot;|50
|style=&quot;background:#131300;height:8pt;&quot;|51
|style=&quot;background:#1b1b00;height:8pt;&quot;|52
|style=&quot;background:#232300;height:8pt;&quot;|53
|style=&quot;background:#2b2b07;height:8pt;&quot;|54
|style=&quot;background:#2f2f07;height:8pt;&quot;|55
|style=&quot;background:#373707;height:8pt;&quot;|56
|style=&quot;background:#3f3f07;height:8pt;&quot;|57
|style=&quot;background:#474707;height:8pt;&quot;|58
|style=&quot;background:#4b4b0b;height:8pt;&quot;|59
|style=&quot;background:#53530b;height:8pt;&quot;|60
|style=&quot;background:#5b5b0b;height:8pt;&quot;|61
|style=&quot;background:#63630b;height:8pt;&quot;|62
|style=&quot;background:#6b6b0f;height:8pt;&quot;|63
|-
|style=&quot;color:black;text-align:right;&quot;|Red (4)
|style=&quot;background:#070000;height:8pt;&quot;|64
|style=&quot;background:#0f0000;height:8pt;&quot;|65
|style=&quot;background:#170000;height:8pt;&quot;|66
|style=&quot;background:#1f0000;height:8pt;&quot;|67
|style=&quot;background:#270000;height:8pt;&quot;|68
|style=&quot;background:#2f0000;height:8pt;&quot;|69
|style=&quot;background:#370000;height:8pt;&quot;|70
|style=&quot;background:#3f0000;height:8pt;&quot;|71
|style=&quot;background:#470000;height:8pt;&quot;|72
|style=&quot;background:#4f0000;height:8pt;&quot;|73
|style=&quot;background:#570000;height:8pt;&quot;|74
|style=&quot;background:#5f0000;height:8pt;&quot;|75
|style=&quot;background:#670000;height:8pt;&quot;|76
|style=&quot;background:#6f0000;height:8pt;&quot;|77
|style=&quot;background:#770000;height:8pt;&quot;|78
|style=&quot;background:#7f0000;height:8pt;&quot;|79
|-
|style=&quot;color:black;text-align:right;&quot;|Orange (5)
|style=&quot;background:#131300;height:8pt;&quot;|80
|style=&quot;background:#1b1b00;height:8pt;&quot;|81
|style=&quot;background:#232300;height:8pt;&quot;|82
|style=&quot;background:#2f2b00;height:8pt;&quot;|83
|style=&quot;background:#372f00;height:8pt;&quot;|84
|style=&quot;background:#433700;height:8pt;&quot;|85
|style=&quot;background:#4b3b07;height:8pt;&quot;|86
|style=&quot;background:#574307;height:8pt;&quot;|87
|style=&quot;background:#5f4707;height:8pt;&quot;|88
|style=&quot;background:#6b4b0b;height:8pt;&quot;|89
|style=&quot;background:#77530f;height:8pt;&quot;|90
|style=&quot;background:#835713;height:8pt;&quot;|91
|style=&quot;background:#8b5b13;height:8pt;&quot;|92
|style=&quot;background:#975f1b;height:8pt;&quot;|93
|style=&quot;background:#a3631f;height:8pt;&quot;|94
|style=&quot;background:#af6723;height:8pt;&quot;|95
|-
|style=&quot;color:black;text-align:right;&quot;|Gold (6)
|style=&quot;background:#231307;height:8pt;&quot;|96
|style=&quot;background:#2f170b;height:8pt;&quot;|97
|style=&quot;background:#3b1f0f;height:8pt;&quot;|98
|style=&quot;background:#4b2313;height:8pt;&quot;|99
|style=&quot;background:#572b17;height:8pt;&quot;|100
|style=&quot;background:#632f1f;height:8pt;&quot;|101
|style=&quot;background:#733723;height:8pt;&quot;|102
|style=&quot;background:#7f3b2b;height:8pt;&quot;|103
|style=&quot;background:#8f4333;height:8pt;&quot;|104
|style=&quot;background:#9f4f33;height:8pt;&quot;|105
|style=&quot;background:#af632f;height:8pt;&quot;|106
|style=&quot;background:#bf772f;height:8pt;&quot;|107
|style=&quot;background:#cf8f2b;height:8pt;&quot;|108
|style=&quot;background:#dfab27;height:8pt;&quot;|109
|style=&quot;background:#efcb1f;height:8pt;&quot;|110
|style=&quot;background:#fff31b;height:8pt;&quot;|111
|-
|style=&quot;color:black;text-align:right;&quot;|Peach (7)
|style=&quot;background:#0b0700;height:8pt;&quot;|112
|style=&quot;background:#1b1300;height:8pt;&quot;|113
|style=&quot;background:#2b230f;height:8pt;&quot;|114
|style=&quot;background:#372b13;height:8pt;&quot;|115
|style=&quot;background:#47331b;height:8pt;&quot;|116
|style=&quot;background:#533723;height:8pt;&quot;|117
|style=&quot;background:#633f2b;height:8pt;&quot;|118
|style=&quot;background:#6f4733;height:8pt;&quot;|119
|style=&quot;background:#7f533f;height:8pt;&quot;|120
|style=&quot;background:#8b5f47;height:8pt;&quot;|121
|style=&quot;background:#9b6b53;height:8pt;&quot;|122
|style=&quot;background:#a77b5f;height:8pt;&quot;|123
|style=&quot;background:#b7876b;height:8pt;&quot;|124
|style=&quot;background:#c3937b;height:8pt;&quot;|125
|style=&quot;background:#d3a38b;height:8pt;&quot;|126
|style=&quot;background:#e3b397;height:8pt;&quot;|127
|-
|style=&quot;color:black;text-align:right;&quot;|Purple (8)
|style=&quot;background:#ab8ba3;height:8pt;&quot;|128
|style=&quot;background:#9f7f97;height:8pt;&quot;|129
|style=&quot;background:#937387;height:8pt;&quot;|130
|style=&quot;background:#8b677b;height:8pt;&quot;|131
|style=&quot;background:#7f5b6f;height:8pt;&quot;|132
|style=&quot;background:#775363;height:8pt;&quot;|133
|style=&quot;background:#6b4b57;height:8pt;&quot;|134
|style=&quot;background:#5f3f4b;height:8pt;&quot;|135
|style=&quot;background:#573743;height:8pt;&quot;|136
|style=&quot;background:#4b2f37;height:8pt;&quot;|137
|style=&quot;background:#43272f;height:8pt;&quot;|138
|style=&quot;background:#371f23;height:8pt;&quot;|139
|style=&quot;background:#2b171b;height:8pt;&quot;|140
|style=&quot;background:#231313;height:8pt;&quot;|141
|style=&quot;background:#170b0b;height:8pt;&quot;|142
|style=&quot;background:#0f0707;height:8pt;&quot;|143
|-
|style=&quot;color:black;text-align:right;&quot;|Magenta (9)
|style=&quot;background:#bb739f;height:8pt;&quot;|144
|style=&quot;background:#af6b8f;height:8pt;&quot;|145
|style=&quot;background:#a35f83;height:8pt;&quot;|146
|style=&quot;background:#975777;height:8pt;&quot;|147
|style=&quot;background:#8b4f6b;height:8pt;&quot;|148
|style=&quot;background:#7f4b5f;height:8pt;&quot;|149
|style=&quot;background:#734353;height:8pt;&quot;|150
|style=&quot;background:#6b3b4b;height:8pt;&quot;|151
|style=&quot;background:#5f333f;height:8pt;&quot;|152
|style=&quot;background:#532b37;height:8pt;&quot;|153
|style=&quot;background:#47232b;height:8pt;&quot;|154
|style=&quot;background:#3b1f23;height:8pt;&quot;|155
|style=&quot;background:#2f171b;height:8pt;&quot;|156
|style=&quot;background:#231313;height:8pt;&quot;|157
|style=&quot;background:#170b0b;height:8pt;&quot;|158
|style=&quot;background:#0f0707;height:8pt;&quot;|159
|-
|style=&quot;color:black;text-align:right;&quot;|Tan (10)
|style=&quot;background:#dbc3bb;height:8pt;&quot;|160
|style=&quot;background:#cbb3a7;height:8pt;&quot;|161
|style=&quot;background:#bfa39b;height:8pt;&quot;|162
|style=&quot;background:#af978b;height:8pt;&quot;|163
|style=&quot;background:#a3877b;height:8pt;&quot;|164
|style=&quot;background:#977b6f;height:8pt;&quot;|165
|style=&quot;background:#876f5f;height:8pt;&quot;|166
|style=&quot;background:#7b6353;height:8pt;&quot;|167
|style=&quot;background:#6b5747;height:8pt;&quot;|168
|style=&quot;background:#5f4b3b;height:8pt;&quot;|169
|style=&quot;background:#533f33;height:8pt;&quot;|170
|style=&quot;background:#433327;height:8pt;&quot;|171
|style=&quot;background:#372b1f;height:8pt;&quot;|172
|style=&quot;background:#271f17;height:8pt;&quot;|173
|style=&quot;background:#1b130f;height:8pt;&quot;|174
|style=&quot;background:#0f0b07;height:8pt;&quot;|175
|-
|style=&quot;color:black;text-align:right;&quot;|Light green (11)
|style=&quot;background:#6f837b;height:8pt;&quot;|176
|style=&quot;background:#677b6f;height:8pt;&quot;|177
|style=&quot;background:#5f7367;height:8pt;&quot;|178
|style=&quot;background:#576b5f;height:8pt;&quot;|179
|style=&quot;background:#4f6357;height:8pt;&quot;|180
|style=&quot;background:#475b4f;height:8pt;&quot;|181
|style=&quot;background:#3f5347;height:8pt;&quot;|182
|style=&quot;background:#374b3f;height:8pt;&quot;|183
|style=&quot;background:#2f4337;height:8pt;&quot;|184
|style=&quot;background:#2b3b2f;height:8pt;&quot;|185
|style=&quot;background:#233327;height:8pt;&quot;|186
|style=&quot;background:#1f2b1f;height:8pt;&quot;|187
|style=&quot;background:#172317;height:8pt;&quot;|188
|style=&quot;background:#0f1b13;height:8pt;&quot;|189
|style=&quot;background:#0b130b;height:8pt;&quot;|190
|style=&quot;background:#070b07;height:8pt;&quot;|191
|-
|style=&quot;color:black;text-align:right;&quot;|Yellow (12)
|style=&quot;background:#fff31b;height:8pt;&quot;|192
|style=&quot;background:#efdf17;height:8pt;&quot;|193
|style=&quot;background:#dbcb13;height:8pt;&quot;|194
|style=&quot;background:#cbb70f;height:8pt;&quot;|195
|style=&quot;background:#bba70f;height:8pt;&quot;|196
|style=&quot;background:#ab970b;height:8pt;&quot;|197
|style=&quot;background:#9b8307;height:8pt;&quot;|198
|style=&quot;background:#8b7307;height:8pt;&quot;|199
|style=&quot;background:#7b6307;height:8pt;&quot;|200
|style=&quot;background:#6b5300;height:8pt;&quot;|201
|style=&quot;background:#5b4700;height:8pt;&quot;|202
|style=&quot;background:#4b3700;height:8pt;&quot;|203
|style=&quot;background:#3b2b00;height:8pt;&quot;|204
|style=&quot;background:#2b1f00;height:8pt;&quot;|205
|style=&quot;background:#1b0f00;height:8pt;&quot;|206
|style=&quot;background:#0b0700;height:8pt;&quot;|207
|-
|style=&quot;color:black;text-align:right;&quot;|Blue (13)
|style=&quot;background:#0000ff;height:8pt;&quot;|208
|style=&quot;background:#0b0bef;height:8pt;&quot;|209
|style=&quot;background:#1313df;height:8pt;&quot;|210
|style=&quot;background:#1b1bcf;height:8pt;&quot;|211
|style=&quot;background:#2323bf;height:8pt;&quot;|212
|style=&quot;background:#2b2baf;height:8pt;&quot;|213
|style=&quot;background:#2f2f9f;height:8pt;&quot;|214
|style=&quot;background:#2f2f8f;height:8pt;&quot;|215
|style=&quot;background:#2f2f7f;height:8pt;&quot;|216
|style=&quot;background:#2f2f6f;height:8pt;&quot;|217
|style=&quot;background:#2f2f5f;height:8pt;&quot;|218
|style=&quot;background:#2b2b4f;height:8pt;&quot;|219
|style=&quot;background:#23233f;height:8pt;&quot;|220
|style=&quot;background:#1b1b2f;height:8pt;&quot;|221
|style=&quot;background:#13131f;height:8pt;&quot;|222
|style=&quot;background:#0b0b0f;height:8pt;&quot;|223
|-
|style=&quot;color:black;text-align:right;&quot;|Fire (14)
|style=&quot;background:#2b0000;height:8pt;&quot;|224
|style=&quot;background:#3b0000;height:8pt;&quot;|225
|style=&quot;background:#4b0700;height:8pt;&quot;|226
|style=&quot;background:#5f0700;height:8pt;&quot;|227
|style=&quot;background:#6f0f00;height:8pt;&quot;|228
|style=&quot;background:#7f1707;height:8pt;&quot;|229
|style=&quot;background:#931f07;height:8pt;&quot;|230
|style=&quot;background:#a3270b;height:8pt;&quot;|231
|style=&quot;background:#b7330f;height:8pt;&quot;|232
|style=&quot;background:#c34b1b;height:8pt;&quot;|233
|style=&quot;background:#cf632b;height:8pt;&quot;|234
|style=&quot;background:#db7f3b;height:8pt;&quot;|235
|style=&quot;background:#e3974f;height:8pt;&quot;|236
|style=&quot;background:#e7ab5f;height:8pt;&quot;|237
|style=&quot;background:#efbf77;height:8pt;&quot;|238
|style=&quot;background:#f7d38b;height:8pt;&quot;|239
|-
|style=&quot;color:black;text-align:right;&quot;|Brights (15)
|style=&quot;background:#a77b3b;height:8pt;&quot;|240
|style=&quot;background:#b79b37;height:8pt;&quot;|241
|style=&quot;background:#c7c337;height:8pt;&quot;|242
|style=&quot;background:#e7e357;height:8pt;&quot;|243
|style=&quot;background:#7fbfff;height:8pt;&quot;|244
|style=&quot;background:#abe7ff;height:8pt;&quot;|245
|style=&quot;background:#d7ffff;height:8pt;&quot;|246
|style=&quot;background:#670000;height:8pt;&quot;|247
|style=&quot;background:#8b0000;height:8pt;&quot;|248
|style=&quot;background:#b30000;height:8pt;&quot;|249
|style=&quot;background:#d70000;height:8pt;&quot;|250
|style=&quot;background:#ff0000;height:8pt;&quot;|251
|style=&quot;background:#fff393;height:8pt;&quot;|252
|style=&quot;background:#fff7c7;height:8pt;&quot;|253
|style=&quot;background:#ffffff;height:8pt;&quot;|254
|style=&quot;background:#9f5b53;height:8pt;&quot;|255
|-
|}

Color 255 is transparent for sprites, 2d lmps, and gfx.wad entries (excluding [[conchars]], in which case it is black (color 0) that's made transparent). It is important that palette index 0 is black. The parameters for the [[color]] console command are the row #, but is restricted to rows 0 - 13.

=== palette.lmp ===
The palette is stored in gfx/palette.lmp. It consists of 256 RGB values, coming out to 768 bytes in total.

=== Download ===
* [[Image:quake_palette.zip]] - The Quake palette in 3 formats: JASC (text), Microsoft (RIFF), and raw (768-byte lump of RGB values).

== Colormap ==
[[Image:Colormap.png|right|thumb|The Quake colormap.]]

The colormap is a table used for lighting in software Quake engines. It contains a column of 64 values per each palette color. Each value is an index into the palette representing as closely as possible the original color brightened or darkened: shade 0 is double bright, shade 32 is the original color, and shade 63 is black.

&quot;Fullbright&quot; colors are those which are not lit in the colormap, simply using the original color for all 64 shades. These colors, when used in textures and model skins, will not be affected by lighting. Fullbrights are used for things like fire and glowing lights. In Quake these are the last 32 colors in the palette.

Since the [[GLQuake]] engine ignores the colormap, it doesn't support fullbrights. Most user-modified engines have fixed this problem.

You could generate a colormap with a different amount of fullbrights, but this would be ill-advised since modern GL engines are hard-coded for 32 fullbrights.

=== colormap.lmp ===
The colormap is stored in gfx/colormap.lmp. The version included with Quake is 16385 bytes. Since the colormap only requires 16384 bytes (256 * 64), I'm not exactly sure what the extra byte (&lt;tt&gt;0x20&lt;/tt&gt;) at the end is for.

=== Generating the colormap ===
The following C code will generate a colormap.lmp that is nearly (but not exactly) identical to the Quake colormap. Sorry about the lack of comments, maybe I'll add some later. Consider it public domain.

 /* sample a 24-bit RGB value to one of the colours on the existing 8-bit palette */
 unsigned char convert_24_to_8(const unsigned char palette[768], const int rgb[3])
 {
   int i, j;
   int best_index = -1;
   int best_dist = 0;
 
   for (i = 0; i &lt; 256; i++)
   {
     int dist = 0;
 
     for (j = 0; j &lt; 3; j++)
     {
     /* note that we could use RGB luminosity bias for greater accuracy, but quake's colormap apparently didn't do this */
       int d = abs(rgb[j] - palette[i*3+j]);
       dist += d * d;
     }
 
     if (best_index == -1 || dist &lt; best_dist)
     {
       best_index = i;
       best_dist = dist;
     }
   }
 
   return (unsigned char)best_index;
 }
 
 void generate_colormap(const unsigned char palette[768], unsigned char out_colormap[16384])
 {
   int num_fullbrights = 32; /* the last 32 colours will be full bright */
   int x, y, i;
 
   for (x = 0; x &lt; 256; x++)
   {
     for (y = 0; y &lt; 64; y++)
     {
       if (x &lt; 256 - num_fullbrights)
       {
         int rgb[3];
 
         for (i = 0; i &lt; 3; i++)
         {
           rgb[i] = (palette[x*3+i] * (63 - y) + 16) &gt;&gt; 5; /* divide by 32, rounding to nearest integer */
           if (rgb[i] &gt; 255)
             rgb[i] = 255;
         }
 
         out_colormap[y*256+x] = convert_24_to_8(palette, rgb);
       }
       else
       {
       /* this colour is a fullbright, just keep the original colour */
         out_colormap[y*256+x] = x;
       }
     }
   }
 }

== Legal status ==
John Carmack officially put palette.lmp in the public domain to make Quake ports easier, so it is legal to, for example, embed it right into an engine executable. Colormap.lmp can also be considered public domain as it is trivially derived from the palette.

== Related Info ==
* Most engine mods use 32-bit colour, so you need not worry about palettes. With 32-bit textures, shirt/pants colour changing and fullbrights are only possible if engines support a new implementation of them, for example [[DarkPlaces]]'s [[DP_GFX_EXTERNALTEXTURES]] extension, which allows additional _glow, _pants, _shirt, etc textures on top of the main one)</text>
      <sha1>6hj0idedbefkmeouviblb2uc7gpz9ss</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1173</id>
      <parentid>1172</parentid>
      <timestamp>2009-09-23T22:42:53Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="16430">__NOTOC__[[Image:Qpalette.png|right|thumb|The Quake palette.]]
{|style=&quot;color:white;font-weight:bold;font-size:8pt;text-align:center;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot;
|-
|style=&quot;color:black;text-align:right;&quot;|White (0)
|style=&quot;background:#000000;height:8pt;&quot;|0
|style=&quot;background:#0f0f0f;height:8pt;&quot;|1
|style=&quot;background:#1f1f1f;height:8pt;&quot;|2
|style=&quot;background:#2f2f2f;height:8pt;&quot;|3
|style=&quot;background:#3f3f3f;height:8pt;&quot;|4
|style=&quot;background:#4b4b4b;height:8pt;&quot;|5
|style=&quot;background:#5b5b5b;height:8pt;&quot;|6
|style=&quot;background:#6b6b6b;height:8pt;&quot;|7
|style=&quot;background:#7b7b7b;height:8pt;&quot;|8
|style=&quot;background:#8b8b8b;height:8pt;&quot;|9
|style=&quot;background:#9b9b9b;height:8pt;&quot;|10
|style=&quot;background:#ababab;height:8pt;&quot;|11
|style=&quot;background:#bbbbbb;height:8pt;&quot;|12
|style=&quot;background:#cbcbcb;height:8pt;&quot;|13
|style=&quot;background:#dbdbdb;height:8pt;&quot;|14
|style=&quot;background:#ebebeb;height:8pt;&quot;|15
|-
|style=&quot;color:black;text-align:right;&quot;|Brown (1)
|style=&quot;background:#0f0b07;height:8pt;&quot;|16
|style=&quot;background:#170f0b;height:8pt;&quot;|17
|style=&quot;background:#1f170b;height:8pt;&quot;|18
|style=&quot;background:#271b0f;height:8pt;&quot;|19
|style=&quot;background:#2f2313;height:8pt;&quot;|20
|style=&quot;background:#372b17;height:8pt;&quot;|21
|style=&quot;background:#3f2f17;height:8pt;&quot;|22
|style=&quot;background:#4b371b;height:8pt;&quot;|23
|style=&quot;background:#533b1b;height:8pt;&quot;|24
|style=&quot;background:#5b431f;height:8pt;&quot;|25
|style=&quot;background:#634b1f;height:8pt;&quot;|26
|style=&quot;background:#6b531f;height:8pt;&quot;|27
|style=&quot;background:#73571f;height:8pt;&quot;|28
|style=&quot;background:#7b5f23;height:8pt;&quot;|29
|style=&quot;background:#836723;height:8pt;&quot;|30
|style=&quot;background:#8f6f23;height:8pt;&quot;|31
|-
|style=&quot;color:black;text-align:right;&quot;|Light blue (2)
|style=&quot;background:#0b0b0f;height:8pt;&quot;|32
|style=&quot;background:#13131b;height:8pt;&quot;|33
|style=&quot;background:#1b1b27;height:8pt;&quot;|34
|style=&quot;background:#272733;height:8pt;&quot;|35
|style=&quot;background:#2f2f3f;height:8pt;&quot;|36
|style=&quot;background:#37374b;height:8pt;&quot;|37
|style=&quot;background:#3f3f57;height:8pt;&quot;|38
|style=&quot;background:#474767;height:8pt;&quot;|39
|style=&quot;background:#4f4f73;height:8pt;&quot;|40
|style=&quot;background:#5b5b7f;height:8pt;&quot;|41
|style=&quot;background:#63638b;height:8pt;&quot;|42
|style=&quot;background:#6b6b97;height:8pt;&quot;|43
|style=&quot;background:#7373a3;height:8pt;&quot;|44
|style=&quot;background:#7b7baf;height:8pt;&quot;|45
|style=&quot;background:#8383bb;height:8pt;&quot;|46
|style=&quot;background:#8b8bcb;height:8pt;&quot;|47
|-
|style=&quot;color:black;text-align:right;&quot;|Green (3)
|style=&quot;background:#000000;height:8pt;&quot;|48
|style=&quot;background:#070700;height:8pt;&quot;|49
|style=&quot;background:#0b0b00;height:8pt;&quot;|50
|style=&quot;background:#131300;height:8pt;&quot;|51
|style=&quot;background:#1b1b00;height:8pt;&quot;|52
|style=&quot;background:#232300;height:8pt;&quot;|53
|style=&quot;background:#2b2b07;height:8pt;&quot;|54
|style=&quot;background:#2f2f07;height:8pt;&quot;|55
|style=&quot;background:#373707;height:8pt;&quot;|56
|style=&quot;background:#3f3f07;height:8pt;&quot;|57
|style=&quot;background:#474707;height:8pt;&quot;|58
|style=&quot;background:#4b4b0b;height:8pt;&quot;|59
|style=&quot;background:#53530b;height:8pt;&quot;|60
|style=&quot;background:#5b5b0b;height:8pt;&quot;|61
|style=&quot;background:#63630b;height:8pt;&quot;|62
|style=&quot;background:#6b6b0f;height:8pt;&quot;|63
|-
|style=&quot;color:black;text-align:right;&quot;|Red (4)
|style=&quot;background:#070000;height:8pt;&quot;|64
|style=&quot;background:#0f0000;height:8pt;&quot;|65
|style=&quot;background:#170000;height:8pt;&quot;|66
|style=&quot;background:#1f0000;height:8pt;&quot;|67
|style=&quot;background:#270000;height:8pt;&quot;|68
|style=&quot;background:#2f0000;height:8pt;&quot;|69
|style=&quot;background:#370000;height:8pt;&quot;|70
|style=&quot;background:#3f0000;height:8pt;&quot;|71
|style=&quot;background:#470000;height:8pt;&quot;|72
|style=&quot;background:#4f0000;height:8pt;&quot;|73
|style=&quot;background:#570000;height:8pt;&quot;|74
|style=&quot;background:#5f0000;height:8pt;&quot;|75
|style=&quot;background:#670000;height:8pt;&quot;|76
|style=&quot;background:#6f0000;height:8pt;&quot;|77
|style=&quot;background:#770000;height:8pt;&quot;|78
|style=&quot;background:#7f0000;height:8pt;&quot;|79
|-
|style=&quot;color:black;text-align:right;&quot;|Orange (5)
|style=&quot;background:#131300;height:8pt;&quot;|80
|style=&quot;background:#1b1b00;height:8pt;&quot;|81
|style=&quot;background:#232300;height:8pt;&quot;|82
|style=&quot;background:#2f2b00;height:8pt;&quot;|83
|style=&quot;background:#372f00;height:8pt;&quot;|84
|style=&quot;background:#433700;height:8pt;&quot;|85
|style=&quot;background:#4b3b07;height:8pt;&quot;|86
|style=&quot;background:#574307;height:8pt;&quot;|87
|style=&quot;background:#5f4707;height:8pt;&quot;|88
|style=&quot;background:#6b4b0b;height:8pt;&quot;|89
|style=&quot;background:#77530f;height:8pt;&quot;|90
|style=&quot;background:#835713;height:8pt;&quot;|91
|style=&quot;background:#8b5b13;height:8pt;&quot;|92
|style=&quot;background:#975f1b;height:8pt;&quot;|93
|style=&quot;background:#a3631f;height:8pt;&quot;|94
|style=&quot;background:#af6723;height:8pt;&quot;|95
|-
|style=&quot;color:black;text-align:right;&quot;|Gold (6)
|style=&quot;background:#231307;height:8pt;&quot;|96
|style=&quot;background:#2f170b;height:8pt;&quot;|97
|style=&quot;background:#3b1f0f;height:8pt;&quot;|98
|style=&quot;background:#4b2313;height:8pt;&quot;|99
|style=&quot;background:#572b17;height:8pt;&quot;|100
|style=&quot;background:#632f1f;height:8pt;&quot;|101
|style=&quot;background:#733723;height:8pt;&quot;|102
|style=&quot;background:#7f3b2b;height:8pt;&quot;|103
|style=&quot;background:#8f4333;height:8pt;&quot;|104
|style=&quot;background:#9f4f33;height:8pt;&quot;|105
|style=&quot;background:#af632f;height:8pt;&quot;|106
|style=&quot;background:#bf772f;height:8pt;&quot;|107
|style=&quot;background:#cf8f2b;height:8pt;&quot;|108
|style=&quot;background:#dfab27;height:8pt;&quot;|109
|style=&quot;background:#efcb1f;height:8pt;&quot;|110
|style=&quot;background:#fff31b;height:8pt;&quot;|111
|-
|style=&quot;color:black;text-align:right;&quot;|Peach (7)
|style=&quot;background:#0b0700;height:8pt;&quot;|112
|style=&quot;background:#1b1300;height:8pt;&quot;|113
|style=&quot;background:#2b230f;height:8pt;&quot;|114
|style=&quot;background:#372b13;height:8pt;&quot;|115
|style=&quot;background:#47331b;height:8pt;&quot;|116
|style=&quot;background:#533723;height:8pt;&quot;|117
|style=&quot;background:#633f2b;height:8pt;&quot;|118
|style=&quot;background:#6f4733;height:8pt;&quot;|119
|style=&quot;background:#7f533f;height:8pt;&quot;|120
|style=&quot;background:#8b5f47;height:8pt;&quot;|121
|style=&quot;background:#9b6b53;height:8pt;&quot;|122
|style=&quot;background:#a77b5f;height:8pt;&quot;|123
|style=&quot;background:#b7876b;height:8pt;&quot;|124
|style=&quot;background:#c3937b;height:8pt;&quot;|125
|style=&quot;background:#d3a38b;height:8pt;&quot;|126
|style=&quot;background:#e3b397;height:8pt;&quot;|127
|-
|style=&quot;color:black;text-align:right;&quot;|Purple (8)
|style=&quot;background:#ab8ba3;height:8pt;&quot;|128
|style=&quot;background:#9f7f97;height:8pt;&quot;|129
|style=&quot;background:#937387;height:8pt;&quot;|130
|style=&quot;background:#8b677b;height:8pt;&quot;|131
|style=&quot;background:#7f5b6f;height:8pt;&quot;|132
|style=&quot;background:#775363;height:8pt;&quot;|133
|style=&quot;background:#6b4b57;height:8pt;&quot;|134
|style=&quot;background:#5f3f4b;height:8pt;&quot;|135
|style=&quot;background:#573743;height:8pt;&quot;|136
|style=&quot;background:#4b2f37;height:8pt;&quot;|137
|style=&quot;background:#43272f;height:8pt;&quot;|138
|style=&quot;background:#371f23;height:8pt;&quot;|139
|style=&quot;background:#2b171b;height:8pt;&quot;|140
|style=&quot;background:#231313;height:8pt;&quot;|141
|style=&quot;background:#170b0b;height:8pt;&quot;|142
|style=&quot;background:#0f0707;height:8pt;&quot;|143
|-
|style=&quot;color:black;text-align:right;&quot;|Magenta (9)
|style=&quot;background:#bb739f;height:8pt;&quot;|144
|style=&quot;background:#af6b8f;height:8pt;&quot;|145
|style=&quot;background:#a35f83;height:8pt;&quot;|146
|style=&quot;background:#975777;height:8pt;&quot;|147
|style=&quot;background:#8b4f6b;height:8pt;&quot;|148
|style=&quot;background:#7f4b5f;height:8pt;&quot;|149
|style=&quot;background:#734353;height:8pt;&quot;|150
|style=&quot;background:#6b3b4b;height:8pt;&quot;|151
|style=&quot;background:#5f333f;height:8pt;&quot;|152
|style=&quot;background:#532b37;height:8pt;&quot;|153
|style=&quot;background:#47232b;height:8pt;&quot;|154
|style=&quot;background:#3b1f23;height:8pt;&quot;|155
|style=&quot;background:#2f171b;height:8pt;&quot;|156
|style=&quot;background:#231313;height:8pt;&quot;|157
|style=&quot;background:#170b0b;height:8pt;&quot;|158
|style=&quot;background:#0f0707;height:8pt;&quot;|159
|-
|style=&quot;color:black;text-align:right;&quot;|Tan (10)
|style=&quot;background:#dbc3bb;height:8pt;&quot;|160
|style=&quot;background:#cbb3a7;height:8pt;&quot;|161
|style=&quot;background:#bfa39b;height:8pt;&quot;|162
|style=&quot;background:#af978b;height:8pt;&quot;|163
|style=&quot;background:#a3877b;height:8pt;&quot;|164
|style=&quot;background:#977b6f;height:8pt;&quot;|165
|style=&quot;background:#876f5f;height:8pt;&quot;|166
|style=&quot;background:#7b6353;height:8pt;&quot;|167
|style=&quot;background:#6b5747;height:8pt;&quot;|168
|style=&quot;background:#5f4b3b;height:8pt;&quot;|169
|style=&quot;background:#533f33;height:8pt;&quot;|170
|style=&quot;background:#433327;height:8pt;&quot;|171
|style=&quot;background:#372b1f;height:8pt;&quot;|172
|style=&quot;background:#271f17;height:8pt;&quot;|173
|style=&quot;background:#1b130f;height:8pt;&quot;|174
|style=&quot;background:#0f0b07;height:8pt;&quot;|175
|-
|style=&quot;color:black;text-align:right;&quot;|Light green (11)
|style=&quot;background:#6f837b;height:8pt;&quot;|176
|style=&quot;background:#677b6f;height:8pt;&quot;|177
|style=&quot;background:#5f7367;height:8pt;&quot;|178
|style=&quot;background:#576b5f;height:8pt;&quot;|179
|style=&quot;background:#4f6357;height:8pt;&quot;|180
|style=&quot;background:#475b4f;height:8pt;&quot;|181
|style=&quot;background:#3f5347;height:8pt;&quot;|182
|style=&quot;background:#374b3f;height:8pt;&quot;|183
|style=&quot;background:#2f4337;height:8pt;&quot;|184
|style=&quot;background:#2b3b2f;height:8pt;&quot;|185
|style=&quot;background:#233327;height:8pt;&quot;|186
|style=&quot;background:#1f2b1f;height:8pt;&quot;|187
|style=&quot;background:#172317;height:8pt;&quot;|188
|style=&quot;background:#0f1b13;height:8pt;&quot;|189
|style=&quot;background:#0b130b;height:8pt;&quot;|190
|style=&quot;background:#070b07;height:8pt;&quot;|191
|-
|style=&quot;color:black;text-align:right;&quot;|Yellow (12)
|style=&quot;background:#fff31b;height:8pt;&quot;|192
|style=&quot;background:#efdf17;height:8pt;&quot;|193
|style=&quot;background:#dbcb13;height:8pt;&quot;|194
|style=&quot;background:#cbb70f;height:8pt;&quot;|195
|style=&quot;background:#bba70f;height:8pt;&quot;|196
|style=&quot;background:#ab970b;height:8pt;&quot;|197
|style=&quot;background:#9b8307;height:8pt;&quot;|198
|style=&quot;background:#8b7307;height:8pt;&quot;|199
|style=&quot;background:#7b6307;height:8pt;&quot;|200
|style=&quot;background:#6b5300;height:8pt;&quot;|201
|style=&quot;background:#5b4700;height:8pt;&quot;|202
|style=&quot;background:#4b3700;height:8pt;&quot;|203
|style=&quot;background:#3b2b00;height:8pt;&quot;|204
|style=&quot;background:#2b1f00;height:8pt;&quot;|205
|style=&quot;background:#1b0f00;height:8pt;&quot;|206
|style=&quot;background:#0b0700;height:8pt;&quot;|207
|-
|style=&quot;color:black;text-align:right;&quot;|Blue (13)
|style=&quot;background:#0000ff;height:8pt;&quot;|208
|style=&quot;background:#0b0bef;height:8pt;&quot;|209
|style=&quot;background:#1313df;height:8pt;&quot;|210
|style=&quot;background:#1b1bcf;height:8pt;&quot;|211
|style=&quot;background:#2323bf;height:8pt;&quot;|212
|style=&quot;background:#2b2baf;height:8pt;&quot;|213
|style=&quot;background:#2f2f9f;height:8pt;&quot;|214
|style=&quot;background:#2f2f8f;height:8pt;&quot;|215
|style=&quot;background:#2f2f7f;height:8pt;&quot;|216
|style=&quot;background:#2f2f6f;height:8pt;&quot;|217
|style=&quot;background:#2f2f5f;height:8pt;&quot;|218
|style=&quot;background:#2b2b4f;height:8pt;&quot;|219
|style=&quot;background:#23233f;height:8pt;&quot;|220
|style=&quot;background:#1b1b2f;height:8pt;&quot;|221
|style=&quot;background:#13131f;height:8pt;&quot;|222
|style=&quot;background:#0b0b0f;height:8pt;&quot;|223
|-
|style=&quot;color:black;text-align:right;&quot;|Fire (14)
|style=&quot;background:#2b0000;height:8pt;&quot;|224
|style=&quot;background:#3b0000;height:8pt;&quot;|225
|style=&quot;background:#4b0700;height:8pt;&quot;|226
|style=&quot;background:#5f0700;height:8pt;&quot;|227
|style=&quot;background:#6f0f00;height:8pt;&quot;|228
|style=&quot;background:#7f1707;height:8pt;&quot;|229
|style=&quot;background:#931f07;height:8pt;&quot;|230
|style=&quot;background:#a3270b;height:8pt;&quot;|231
|style=&quot;background:#b7330f;height:8pt;&quot;|232
|style=&quot;background:#c34b1b;height:8pt;&quot;|233
|style=&quot;background:#cf632b;height:8pt;&quot;|234
|style=&quot;background:#db7f3b;height:8pt;&quot;|235
|style=&quot;background:#e3974f;height:8pt;&quot;|236
|style=&quot;background:#e7ab5f;height:8pt;&quot;|237
|style=&quot;background:#efbf77;height:8pt;&quot;|238
|style=&quot;background:#f7d38b;height:8pt;&quot;|239
|-
|style=&quot;color:black;text-align:right;&quot;|Brights (15)
|style=&quot;background:#a77b3b;height:8pt;&quot;|240
|style=&quot;background:#b79b37;height:8pt;&quot;|241
|style=&quot;background:#c7c337;height:8pt;&quot;|242
|style=&quot;background:#e7e357;height:8pt;&quot;|243
|style=&quot;background:#7fbfff;height:8pt;&quot;|244
|style=&quot;background:#abe7ff;height:8pt;&quot;|245
|style=&quot;background:#d7ffff;height:8pt;&quot;|246
|style=&quot;background:#670000;height:8pt;&quot;|247
|style=&quot;background:#8b0000;height:8pt;&quot;|248
|style=&quot;background:#b30000;height:8pt;&quot;|249
|style=&quot;background:#d70000;height:8pt;&quot;|250
|style=&quot;background:#ff0000;height:8pt;&quot;|251
|style=&quot;background:#fff393;height:8pt;&quot;|252
|style=&quot;background:#fff7c7;height:8pt;&quot;|253
|style=&quot;background:#ffffff;height:8pt;&quot;|254
|style=&quot;background:#9f5b53;height:8pt;&quot;|255
|-
|}

Color 255 is transparent for sprites, 2d lmps, and gfx.wad entries (excluding [[conchars]], in which case it is black (color 0) that's made transparent). It is important that palette index 0 is black. The parameters for the [[color]] console command are the row #, but is restricted to rows 0 - 13.

=== palette.lmp ===
The palette is stored in gfx/palette.lmp. It consists of 256 RGB values, coming out to 768 bytes in total.

=== Download ===
* [[Image:quake_palette.zip]] - The Quake palette in 3 formats: JASC (text), Microsoft (RIFF), and raw (768-byte lump of RGB values).

== Colormap ==
[[Image:Colormap.png|right|thumb|The Quake colormap.]]

The colormap is a table used for lighting in software Quake engines. It contains a column of 64 values per each palette color. Each value is an index into the palette representing as closely as possible the original color brightened or darkened: shade 0 is double bright, shade 32 is the original color, and shade 63 is black.

&quot;Fullbright&quot; colors are those which are not lit in the colormap, simply using the original color for all 64 shades. These colors, when used in textures and model skins, will not be affected by lighting. Fullbrights are used for things like fire and glowing lights. In Quake these are the last 32 colors in the palette.

Since the [[GLQuake]] engine ignores the colormap, it doesn't support fullbrights. Most user-modified engines have fixed this problem, being hard-coded to treat the last 32 colors as fullbright. For this reason, you shouldn't generate a colormap with a different amount of fullbrights, since it will work in software engines but not in modern GL engines.

=== colormap.lmp ===
The colormap is stored in gfx/colormap.lmp. The version included with Quake is 16385 bytes. Since the colormap only requires 16384 bytes (256 * 64), I'm not exactly sure what the extra byte (&lt;tt&gt;0x20&lt;/tt&gt;) at the end is for.

=== Generating the colormap ===
The following C code will generate a colormap.lmp that is nearly (but not exactly) identical to the Quake colormap. Sorry about the lack of comments, maybe I'll add some later. Consider it public domain.

 /* sample a 24-bit RGB value to one of the colours on the existing 8-bit palette */
 unsigned char convert_24_to_8(const unsigned char palette[768], const int rgb[3])
 {
   int i, j;
   int best_index = -1;
   int best_dist = 0;
 
   for (i = 0; i &lt; 256; i++)
   {
     int dist = 0;
 
     for (j = 0; j &lt; 3; j++)
     {
     /* note that we could use RGB luminosity bias for greater accuracy, but quake's colormap apparently didn't do this */
       int d = abs(rgb[j] - palette[i*3+j]);
       dist += d * d;
     }
 
     if (best_index == -1 || dist &lt; best_dist)
     {
       best_index = i;
       best_dist = dist;
     }
   }
 
   return (unsigned char)best_index;
 }
 
 void generate_colormap(const unsigned char palette[768], unsigned char out_colormap[16384])
 {
   int num_fullbrights = 32; /* the last 32 colours will be full bright */
   int x, y, i;
 
   for (x = 0; x &lt; 256; x++)
   {
     for (y = 0; y &lt; 64; y++)
     {
       if (x &lt; 256 - num_fullbrights)
       {
         int rgb[3];
 
         for (i = 0; i &lt; 3; i++)
         {
           rgb[i] = (palette[x*3+i] * (63 - y) + 16) &gt;&gt; 5; /* divide by 32, rounding to nearest integer */
           if (rgb[i] &gt; 255)
             rgb[i] = 255;
         }
 
         out_colormap[y*256+x] = convert_24_to_8(palette, rgb);
       }
       else
       {
       /* this colour is a fullbright, just keep the original colour */
         out_colormap[y*256+x] = x;
       }
     }
   }
 }

== Legal status ==
John Carmack officially put palette.lmp in the public domain to make Quake ports easier, so it is legal to, for example, embed it right into an engine executable. Colormap.lmp can also be considered public domain as it is trivially derived from the palette.

== Related Info ==
* Most engine mods use 32-bit colour, so you need not worry about palettes. With 32-bit textures, shirt/pants colour changing and fullbrights are only possible if engines support a new implementation of them, for example [[DarkPlaces]]'s [[DP_GFX_EXTERNALTEXTURES]] extension, which allows additional _glow, _pants, _shirt, etc textures on top of the main one)</text>
      <sha1>5gpgzjg8m9km22nje5e5mrjdv5rhnet</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1473</id>
      <parentid>1173</parentid>
      <timestamp>2009-12-11T20:25:24Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <comment>todo - more info about shirt/pants translation (i don't know much about this)</comment>
      <text xml:space="preserve" bytes="16888">__NOTOC__[[Image:Qpalette.png|right|thumb|The Quake palette.]]
{|style=&quot;color:white;font-weight:bold;font-size:8pt;text-align:center;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot;
|-
|style=&quot;color:black;text-align:right;&quot;|White (0)
|style=&quot;background:#000000;height:8pt;&quot;|0
|style=&quot;background:#0f0f0f;height:8pt;&quot;|1
|style=&quot;background:#1f1f1f;height:8pt;&quot;|2
|style=&quot;background:#2f2f2f;height:8pt;&quot;|3
|style=&quot;background:#3f3f3f;height:8pt;&quot;|4
|style=&quot;background:#4b4b4b;height:8pt;&quot;|5
|style=&quot;background:#5b5b5b;height:8pt;&quot;|6
|style=&quot;background:#6b6b6b;height:8pt;&quot;|7
|style=&quot;background:#7b7b7b;height:8pt;&quot;|8
|style=&quot;background:#8b8b8b;height:8pt;&quot;|9
|style=&quot;background:#9b9b9b;height:8pt;&quot;|10
|style=&quot;background:#ababab;height:8pt;&quot;|11
|style=&quot;background:#bbbbbb;height:8pt;&quot;|12
|style=&quot;background:#cbcbcb;height:8pt;&quot;|13
|style=&quot;background:#dbdbdb;height:8pt;&quot;|14
|style=&quot;background:#ebebeb;height:8pt;&quot;|15
|-
|style=&quot;color:black;text-align:right;&quot;|Brown (1)
|style=&quot;background:#0f0b07;height:8pt;&quot;|16
|style=&quot;background:#170f0b;height:8pt;&quot;|17
|style=&quot;background:#1f170b;height:8pt;&quot;|18
|style=&quot;background:#271b0f;height:8pt;&quot;|19
|style=&quot;background:#2f2313;height:8pt;&quot;|20
|style=&quot;background:#372b17;height:8pt;&quot;|21
|style=&quot;background:#3f2f17;height:8pt;&quot;|22
|style=&quot;background:#4b371b;height:8pt;&quot;|23
|style=&quot;background:#533b1b;height:8pt;&quot;|24
|style=&quot;background:#5b431f;height:8pt;&quot;|25
|style=&quot;background:#634b1f;height:8pt;&quot;|26
|style=&quot;background:#6b531f;height:8pt;&quot;|27
|style=&quot;background:#73571f;height:8pt;&quot;|28
|style=&quot;background:#7b5f23;height:8pt;&quot;|29
|style=&quot;background:#836723;height:8pt;&quot;|30
|style=&quot;background:#8f6f23;height:8pt;&quot;|31
|-
|style=&quot;color:black;text-align:right;&quot;|Light blue (2)
|style=&quot;background:#0b0b0f;height:8pt;&quot;|32
|style=&quot;background:#13131b;height:8pt;&quot;|33
|style=&quot;background:#1b1b27;height:8pt;&quot;|34
|style=&quot;background:#272733;height:8pt;&quot;|35
|style=&quot;background:#2f2f3f;height:8pt;&quot;|36
|style=&quot;background:#37374b;height:8pt;&quot;|37
|style=&quot;background:#3f3f57;height:8pt;&quot;|38
|style=&quot;background:#474767;height:8pt;&quot;|39
|style=&quot;background:#4f4f73;height:8pt;&quot;|40
|style=&quot;background:#5b5b7f;height:8pt;&quot;|41
|style=&quot;background:#63638b;height:8pt;&quot;|42
|style=&quot;background:#6b6b97;height:8pt;&quot;|43
|style=&quot;background:#7373a3;height:8pt;&quot;|44
|style=&quot;background:#7b7baf;height:8pt;&quot;|45
|style=&quot;background:#8383bb;height:8pt;&quot;|46
|style=&quot;background:#8b8bcb;height:8pt;&quot;|47
|-
|style=&quot;color:black;text-align:right;&quot;|Green (3)
|style=&quot;background:#000000;height:8pt;&quot;|48
|style=&quot;background:#070700;height:8pt;&quot;|49
|style=&quot;background:#0b0b00;height:8pt;&quot;|50
|style=&quot;background:#131300;height:8pt;&quot;|51
|style=&quot;background:#1b1b00;height:8pt;&quot;|52
|style=&quot;background:#232300;height:8pt;&quot;|53
|style=&quot;background:#2b2b07;height:8pt;&quot;|54
|style=&quot;background:#2f2f07;height:8pt;&quot;|55
|style=&quot;background:#373707;height:8pt;&quot;|56
|style=&quot;background:#3f3f07;height:8pt;&quot;|57
|style=&quot;background:#474707;height:8pt;&quot;|58
|style=&quot;background:#4b4b0b;height:8pt;&quot;|59
|style=&quot;background:#53530b;height:8pt;&quot;|60
|style=&quot;background:#5b5b0b;height:8pt;&quot;|61
|style=&quot;background:#63630b;height:8pt;&quot;|62
|style=&quot;background:#6b6b0f;height:8pt;&quot;|63
|-
|style=&quot;color:black;text-align:right;&quot;|Red (4)
|style=&quot;background:#070000;height:8pt;&quot;|64
|style=&quot;background:#0f0000;height:8pt;&quot;|65
|style=&quot;background:#170000;height:8pt;&quot;|66
|style=&quot;background:#1f0000;height:8pt;&quot;|67
|style=&quot;background:#270000;height:8pt;&quot;|68
|style=&quot;background:#2f0000;height:8pt;&quot;|69
|style=&quot;background:#370000;height:8pt;&quot;|70
|style=&quot;background:#3f0000;height:8pt;&quot;|71
|style=&quot;background:#470000;height:8pt;&quot;|72
|style=&quot;background:#4f0000;height:8pt;&quot;|73
|style=&quot;background:#570000;height:8pt;&quot;|74
|style=&quot;background:#5f0000;height:8pt;&quot;|75
|style=&quot;background:#670000;height:8pt;&quot;|76
|style=&quot;background:#6f0000;height:8pt;&quot;|77
|style=&quot;background:#770000;height:8pt;&quot;|78
|style=&quot;background:#7f0000;height:8pt;&quot;|79
|-
|style=&quot;color:black;text-align:right;&quot;|Orange (5)
|style=&quot;background:#131300;height:8pt;&quot;|80
|style=&quot;background:#1b1b00;height:8pt;&quot;|81
|style=&quot;background:#232300;height:8pt;&quot;|82
|style=&quot;background:#2f2b00;height:8pt;&quot;|83
|style=&quot;background:#372f00;height:8pt;&quot;|84
|style=&quot;background:#433700;height:8pt;&quot;|85
|style=&quot;background:#4b3b07;height:8pt;&quot;|86
|style=&quot;background:#574307;height:8pt;&quot;|87
|style=&quot;background:#5f4707;height:8pt;&quot;|88
|style=&quot;background:#6b4b0b;height:8pt;&quot;|89
|style=&quot;background:#77530f;height:8pt;&quot;|90
|style=&quot;background:#835713;height:8pt;&quot;|91
|style=&quot;background:#8b5b13;height:8pt;&quot;|92
|style=&quot;background:#975f1b;height:8pt;&quot;|93
|style=&quot;background:#a3631f;height:8pt;&quot;|94
|style=&quot;background:#af6723;height:8pt;&quot;|95
|-
|style=&quot;color:black;text-align:right;&quot;|Gold (6)
|style=&quot;background:#231307;height:8pt;&quot;|96
|style=&quot;background:#2f170b;height:8pt;&quot;|97
|style=&quot;background:#3b1f0f;height:8pt;&quot;|98
|style=&quot;background:#4b2313;height:8pt;&quot;|99
|style=&quot;background:#572b17;height:8pt;&quot;|100
|style=&quot;background:#632f1f;height:8pt;&quot;|101
|style=&quot;background:#733723;height:8pt;&quot;|102
|style=&quot;background:#7f3b2b;height:8pt;&quot;|103
|style=&quot;background:#8f4333;height:8pt;&quot;|104
|style=&quot;background:#9f4f33;height:8pt;&quot;|105
|style=&quot;background:#af632f;height:8pt;&quot;|106
|style=&quot;background:#bf772f;height:8pt;&quot;|107
|style=&quot;background:#cf8f2b;height:8pt;&quot;|108
|style=&quot;background:#dfab27;height:8pt;&quot;|109
|style=&quot;background:#efcb1f;height:8pt;&quot;|110
|style=&quot;background:#fff31b;height:8pt;&quot;|111
|-
|style=&quot;color:black;text-align:right;&quot;|Peach (7)
|style=&quot;background:#0b0700;height:8pt;&quot;|112
|style=&quot;background:#1b1300;height:8pt;&quot;|113
|style=&quot;background:#2b230f;height:8pt;&quot;|114
|style=&quot;background:#372b13;height:8pt;&quot;|115
|style=&quot;background:#47331b;height:8pt;&quot;|116
|style=&quot;background:#533723;height:8pt;&quot;|117
|style=&quot;background:#633f2b;height:8pt;&quot;|118
|style=&quot;background:#6f4733;height:8pt;&quot;|119
|style=&quot;background:#7f533f;height:8pt;&quot;|120
|style=&quot;background:#8b5f47;height:8pt;&quot;|121
|style=&quot;background:#9b6b53;height:8pt;&quot;|122
|style=&quot;background:#a77b5f;height:8pt;&quot;|123
|style=&quot;background:#b7876b;height:8pt;&quot;|124
|style=&quot;background:#c3937b;height:8pt;&quot;|125
|style=&quot;background:#d3a38b;height:8pt;&quot;|126
|style=&quot;background:#e3b397;height:8pt;&quot;|127
|-
|style=&quot;color:black;text-align:right;&quot;|Purple (8)
|style=&quot;background:#ab8ba3;height:8pt;&quot;|128
|style=&quot;background:#9f7f97;height:8pt;&quot;|129
|style=&quot;background:#937387;height:8pt;&quot;|130
|style=&quot;background:#8b677b;height:8pt;&quot;|131
|style=&quot;background:#7f5b6f;height:8pt;&quot;|132
|style=&quot;background:#775363;height:8pt;&quot;|133
|style=&quot;background:#6b4b57;height:8pt;&quot;|134
|style=&quot;background:#5f3f4b;height:8pt;&quot;|135
|style=&quot;background:#573743;height:8pt;&quot;|136
|style=&quot;background:#4b2f37;height:8pt;&quot;|137
|style=&quot;background:#43272f;height:8pt;&quot;|138
|style=&quot;background:#371f23;height:8pt;&quot;|139
|style=&quot;background:#2b171b;height:8pt;&quot;|140
|style=&quot;background:#231313;height:8pt;&quot;|141
|style=&quot;background:#170b0b;height:8pt;&quot;|142
|style=&quot;background:#0f0707;height:8pt;&quot;|143
|-
|style=&quot;color:black;text-align:right;&quot;|Magenta (9)
|style=&quot;background:#bb739f;height:8pt;&quot;|144
|style=&quot;background:#af6b8f;height:8pt;&quot;|145
|style=&quot;background:#a35f83;height:8pt;&quot;|146
|style=&quot;background:#975777;height:8pt;&quot;|147
|style=&quot;background:#8b4f6b;height:8pt;&quot;|148
|style=&quot;background:#7f4b5f;height:8pt;&quot;|149
|style=&quot;background:#734353;height:8pt;&quot;|150
|style=&quot;background:#6b3b4b;height:8pt;&quot;|151
|style=&quot;background:#5f333f;height:8pt;&quot;|152
|style=&quot;background:#532b37;height:8pt;&quot;|153
|style=&quot;background:#47232b;height:8pt;&quot;|154
|style=&quot;background:#3b1f23;height:8pt;&quot;|155
|style=&quot;background:#2f171b;height:8pt;&quot;|156
|style=&quot;background:#231313;height:8pt;&quot;|157
|style=&quot;background:#170b0b;height:8pt;&quot;|158
|style=&quot;background:#0f0707;height:8pt;&quot;|159
|-
|style=&quot;color:black;text-align:right;&quot;|Tan (10)
|style=&quot;background:#dbc3bb;height:8pt;&quot;|160
|style=&quot;background:#cbb3a7;height:8pt;&quot;|161
|style=&quot;background:#bfa39b;height:8pt;&quot;|162
|style=&quot;background:#af978b;height:8pt;&quot;|163
|style=&quot;background:#a3877b;height:8pt;&quot;|164
|style=&quot;background:#977b6f;height:8pt;&quot;|165
|style=&quot;background:#876f5f;height:8pt;&quot;|166
|style=&quot;background:#7b6353;height:8pt;&quot;|167
|style=&quot;background:#6b5747;height:8pt;&quot;|168
|style=&quot;background:#5f4b3b;height:8pt;&quot;|169
|style=&quot;background:#533f33;height:8pt;&quot;|170
|style=&quot;background:#433327;height:8pt;&quot;|171
|style=&quot;background:#372b1f;height:8pt;&quot;|172
|style=&quot;background:#271f17;height:8pt;&quot;|173
|style=&quot;background:#1b130f;height:8pt;&quot;|174
|style=&quot;background:#0f0b07;height:8pt;&quot;|175
|-
|style=&quot;color:black;text-align:right;&quot;|Light green (11)
|style=&quot;background:#6f837b;height:8pt;&quot;|176
|style=&quot;background:#677b6f;height:8pt;&quot;|177
|style=&quot;background:#5f7367;height:8pt;&quot;|178
|style=&quot;background:#576b5f;height:8pt;&quot;|179
|style=&quot;background:#4f6357;height:8pt;&quot;|180
|style=&quot;background:#475b4f;height:8pt;&quot;|181
|style=&quot;background:#3f5347;height:8pt;&quot;|182
|style=&quot;background:#374b3f;height:8pt;&quot;|183
|style=&quot;background:#2f4337;height:8pt;&quot;|184
|style=&quot;background:#2b3b2f;height:8pt;&quot;|185
|style=&quot;background:#233327;height:8pt;&quot;|186
|style=&quot;background:#1f2b1f;height:8pt;&quot;|187
|style=&quot;background:#172317;height:8pt;&quot;|188
|style=&quot;background:#0f1b13;height:8pt;&quot;|189
|style=&quot;background:#0b130b;height:8pt;&quot;|190
|style=&quot;background:#070b07;height:8pt;&quot;|191
|-
|style=&quot;color:black;text-align:right;&quot;|Yellow (12)
|style=&quot;background:#fff31b;height:8pt;&quot;|192
|style=&quot;background:#efdf17;height:8pt;&quot;|193
|style=&quot;background:#dbcb13;height:8pt;&quot;|194
|style=&quot;background:#cbb70f;height:8pt;&quot;|195
|style=&quot;background:#bba70f;height:8pt;&quot;|196
|style=&quot;background:#ab970b;height:8pt;&quot;|197
|style=&quot;background:#9b8307;height:8pt;&quot;|198
|style=&quot;background:#8b7307;height:8pt;&quot;|199
|style=&quot;background:#7b6307;height:8pt;&quot;|200
|style=&quot;background:#6b5300;height:8pt;&quot;|201
|style=&quot;background:#5b4700;height:8pt;&quot;|202
|style=&quot;background:#4b3700;height:8pt;&quot;|203
|style=&quot;background:#3b2b00;height:8pt;&quot;|204
|style=&quot;background:#2b1f00;height:8pt;&quot;|205
|style=&quot;background:#1b0f00;height:8pt;&quot;|206
|style=&quot;background:#0b0700;height:8pt;&quot;|207
|-
|style=&quot;color:black;text-align:right;&quot;|Blue (13)
|style=&quot;background:#0000ff;height:8pt;&quot;|208
|style=&quot;background:#0b0bef;height:8pt;&quot;|209
|style=&quot;background:#1313df;height:8pt;&quot;|210
|style=&quot;background:#1b1bcf;height:8pt;&quot;|211
|style=&quot;background:#2323bf;height:8pt;&quot;|212
|style=&quot;background:#2b2baf;height:8pt;&quot;|213
|style=&quot;background:#2f2f9f;height:8pt;&quot;|214
|style=&quot;background:#2f2f8f;height:8pt;&quot;|215
|style=&quot;background:#2f2f7f;height:8pt;&quot;|216
|style=&quot;background:#2f2f6f;height:8pt;&quot;|217
|style=&quot;background:#2f2f5f;height:8pt;&quot;|218
|style=&quot;background:#2b2b4f;height:8pt;&quot;|219
|style=&quot;background:#23233f;height:8pt;&quot;|220
|style=&quot;background:#1b1b2f;height:8pt;&quot;|221
|style=&quot;background:#13131f;height:8pt;&quot;|222
|style=&quot;background:#0b0b0f;height:8pt;&quot;|223
|-
|style=&quot;color:black;text-align:right;&quot;|Fire (14)
|style=&quot;background:#2b0000;height:8pt;&quot;|224
|style=&quot;background:#3b0000;height:8pt;&quot;|225
|style=&quot;background:#4b0700;height:8pt;&quot;|226
|style=&quot;background:#5f0700;height:8pt;&quot;|227
|style=&quot;background:#6f0f00;height:8pt;&quot;|228
|style=&quot;background:#7f1707;height:8pt;&quot;|229
|style=&quot;background:#931f07;height:8pt;&quot;|230
|style=&quot;background:#a3270b;height:8pt;&quot;|231
|style=&quot;background:#b7330f;height:8pt;&quot;|232
|style=&quot;background:#c34b1b;height:8pt;&quot;|233
|style=&quot;background:#cf632b;height:8pt;&quot;|234
|style=&quot;background:#db7f3b;height:8pt;&quot;|235
|style=&quot;background:#e3974f;height:8pt;&quot;|236
|style=&quot;background:#e7ab5f;height:8pt;&quot;|237
|style=&quot;background:#efbf77;height:8pt;&quot;|238
|style=&quot;background:#f7d38b;height:8pt;&quot;|239
|-
|style=&quot;color:black;text-align:right;&quot;|Brights (15)
|style=&quot;background:#a77b3b;height:8pt;&quot;|240
|style=&quot;background:#b79b37;height:8pt;&quot;|241
|style=&quot;background:#c7c337;height:8pt;&quot;|242
|style=&quot;background:#e7e357;height:8pt;&quot;|243
|style=&quot;background:#7fbfff;height:8pt;&quot;|244
|style=&quot;background:#abe7ff;height:8pt;&quot;|245
|style=&quot;background:#d7ffff;height:8pt;&quot;|246
|style=&quot;background:#670000;height:8pt;&quot;|247
|style=&quot;background:#8b0000;height:8pt;&quot;|248
|style=&quot;background:#b30000;height:8pt;&quot;|249
|style=&quot;background:#d70000;height:8pt;&quot;|250
|style=&quot;background:#ff0000;height:8pt;&quot;|251
|style=&quot;background:#fff393;height:8pt;&quot;|252
|style=&quot;background:#fff7c7;height:8pt;&quot;|253
|style=&quot;background:#ffffff;height:8pt;&quot;|254
|style=&quot;background:#9f5b53;height:8pt;&quot;|255
|-
|}

Color 255 is transparent for sprites, 2d lmps, and gfx.wad entries (excluding [[conchars]], in which case it is black (color 0) that's made transparent). It is important that palette index 0 is black. The parameters for the [[color]] console command are the row #, but is restricted to rows 0 - 13.

It is important that the latter 8 palette rows are &quot;backwards&quot; (light-to-dark instead of dark-to-light). It appears that the ID artists did this for no good reason in the original Quake palette, and the engine programmers were forced to add a hack to accommodate it (along with the comment &quot;the artists made some backwards ranges. sigh&quot;). The only area this affects is player shirt/pants color translation (where one palette row must be mapped to another).

=== palette.lmp ===
The palette is stored in gfx/palette.lmp. It consists of 256 RGB values, coming out to 768 bytes in total.

=== Download ===
* [[Image:quake_palette.zip]] - The Quake palette in 3 formats: JASC (text), Microsoft (RIFF), and raw (768-byte lump of RGB values).

== Colormap ==
[[Image:Colormap.png|right|thumb|The Quake colormap.]]

The colormap is a table used for lighting in software Quake engines. It contains a column of 64 values per each palette color. Each value is an index into the palette representing as closely as possible the original color brightened or darkened: shade 0 is double bright, shade 32 is the original color, and shade 63 is black.

&quot;Fullbright&quot; colors are those which are not lit in the colormap, simply using the original color for all 64 shades. These colors, when used in textures and model skins, will not be affected by lighting. Fullbrights are used for things like fire and glowing lights. In Quake these are the last 32 colors in the palette.

Since the [[GLQuake]] engine ignores the colormap, it doesn't support fullbrights. Most user-modified engines have fixed this problem, being hard-coded to treat the last 32 colors as fullbright. For this reason, you shouldn't generate a colormap with a different amount of fullbrights, since it will work in software engines but not in modern GL engines.

=== colormap.lmp ===
The colormap is stored in gfx/colormap.lmp. The version included with Quake is 16385 bytes. Since the colormap only requires 16384 bytes (256 * 64), I'm not exactly sure what the extra byte (&lt;tt&gt;0x20&lt;/tt&gt;) at the end is for.

=== Generating the colormap ===
The following C code will generate a colormap.lmp that is nearly (but not exactly) identical to the Quake colormap. Sorry about the lack of comments, maybe I'll add some later. Consider it public domain.

 /* sample a 24-bit RGB value to one of the colours on the existing 8-bit palette */
 unsigned char convert_24_to_8(const unsigned char palette[768], const int rgb[3])
 {
   int i, j;
   int best_index = -1;
   int best_dist = 0;
 
   for (i = 0; i &lt; 256; i++)
   {
     int dist = 0;
 
     for (j = 0; j &lt; 3; j++)
     {
     /* note that we could use RGB luminosity bias for greater accuracy, but quake's colormap apparently didn't do this */
       int d = abs(rgb[j] - palette[i*3+j]);
       dist += d * d;
     }
 
     if (best_index == -1 || dist &lt; best_dist)
     {
       best_index = i;
       best_dist = dist;
     }
   }
 
   return (unsigned char)best_index;
 }
 
 void generate_colormap(const unsigned char palette[768], unsigned char out_colormap[16384])
 {
   int num_fullbrights = 32; /* the last 32 colours will be full bright */
   int x, y, i;
 
   for (x = 0; x &lt; 256; x++)
   {
     for (y = 0; y &lt; 64; y++)
     {
       if (x &lt; 256 - num_fullbrights)
       {
         int rgb[3];
 
         for (i = 0; i &lt; 3; i++)
         {
           rgb[i] = (palette[x*3+i] * (63 - y) + 16) &gt;&gt; 5; /* divide by 32, rounding to nearest integer */
           if (rgb[i] &gt; 255)
             rgb[i] = 255;
         }
 
         out_colormap[y*256+x] = convert_24_to_8(palette, rgb);
       }
       else
       {
       /* this colour is a fullbright, just keep the original colour */
         out_colormap[y*256+x] = x;
       }
     }
   }
 }

== Legal status ==
John Carmack officially put palette.lmp in the public domain to make Quake ports easier, so it is legal to, for example, embed it right into an engine executable. Colormap.lmp can also be considered public domain as it is trivially derived from the palette.

== Related Info ==
* Most engine mods use 32-bit colour, so you need not worry about palettes. With 32-bit textures, shirt/pants colour changing and fullbrights are only possible if engines support a new implementation of them, for example [[DarkPlaces]]'s [[DP_GFX_EXTERNALTEXTURES]] extension, which allows additional _glow, _pants, _shirt, etc textures on top of the main one)</text>
      <sha1>tlcuex022vzyocyemyi6telrgonoime</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1476</id>
      <parentid>1473</parentid>
      <timestamp>2009-12-11T20:33:16Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="16904">__NOTOC__[[Image:Qpalette.png|right|thumb|The Quake palette.]]
{|style=&quot;color:white;font-weight:bold;font-size:8pt;text-align:center;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot;
|-
|style=&quot;color:black;text-align:right;&quot;|White (0)
|style=&quot;background:#000000;height:8pt;&quot;|0
|style=&quot;background:#0f0f0f;height:8pt;&quot;|1
|style=&quot;background:#1f1f1f;height:8pt;&quot;|2
|style=&quot;background:#2f2f2f;height:8pt;&quot;|3
|style=&quot;background:#3f3f3f;height:8pt;&quot;|4
|style=&quot;background:#4b4b4b;height:8pt;&quot;|5
|style=&quot;background:#5b5b5b;height:8pt;&quot;|6
|style=&quot;background:#6b6b6b;height:8pt;&quot;|7
|style=&quot;background:#7b7b7b;height:8pt;&quot;|8
|style=&quot;background:#8b8b8b;height:8pt;&quot;|9
|style=&quot;background:#9b9b9b;height:8pt;&quot;|10
|style=&quot;background:#ababab;height:8pt;&quot;|11
|style=&quot;background:#bbbbbb;height:8pt;&quot;|12
|style=&quot;background:#cbcbcb;height:8pt;&quot;|13
|style=&quot;background:#dbdbdb;height:8pt;&quot;|14
|style=&quot;background:#ebebeb;height:8pt;&quot;|15
|-
|style=&quot;color:black;text-align:right;&quot;|Brown (1)
|style=&quot;background:#0f0b07;height:8pt;&quot;|16
|style=&quot;background:#170f0b;height:8pt;&quot;|17
|style=&quot;background:#1f170b;height:8pt;&quot;|18
|style=&quot;background:#271b0f;height:8pt;&quot;|19
|style=&quot;background:#2f2313;height:8pt;&quot;|20
|style=&quot;background:#372b17;height:8pt;&quot;|21
|style=&quot;background:#3f2f17;height:8pt;&quot;|22
|style=&quot;background:#4b371b;height:8pt;&quot;|23
|style=&quot;background:#533b1b;height:8pt;&quot;|24
|style=&quot;background:#5b431f;height:8pt;&quot;|25
|style=&quot;background:#634b1f;height:8pt;&quot;|26
|style=&quot;background:#6b531f;height:8pt;&quot;|27
|style=&quot;background:#73571f;height:8pt;&quot;|28
|style=&quot;background:#7b5f23;height:8pt;&quot;|29
|style=&quot;background:#836723;height:8pt;&quot;|30
|style=&quot;background:#8f6f23;height:8pt;&quot;|31
|-
|style=&quot;color:black;text-align:right;&quot;|Light blue (2)
|style=&quot;background:#0b0b0f;height:8pt;&quot;|32
|style=&quot;background:#13131b;height:8pt;&quot;|33
|style=&quot;background:#1b1b27;height:8pt;&quot;|34
|style=&quot;background:#272733;height:8pt;&quot;|35
|style=&quot;background:#2f2f3f;height:8pt;&quot;|36
|style=&quot;background:#37374b;height:8pt;&quot;|37
|style=&quot;background:#3f3f57;height:8pt;&quot;|38
|style=&quot;background:#474767;height:8pt;&quot;|39
|style=&quot;background:#4f4f73;height:8pt;&quot;|40
|style=&quot;background:#5b5b7f;height:8pt;&quot;|41
|style=&quot;background:#63638b;height:8pt;&quot;|42
|style=&quot;background:#6b6b97;height:8pt;&quot;|43
|style=&quot;background:#7373a3;height:8pt;&quot;|44
|style=&quot;background:#7b7baf;height:8pt;&quot;|45
|style=&quot;background:#8383bb;height:8pt;&quot;|46
|style=&quot;background:#8b8bcb;height:8pt;&quot;|47
|-
|style=&quot;color:black;text-align:right;&quot;|Green (3)
|style=&quot;background:#000000;height:8pt;&quot;|48
|style=&quot;background:#070700;height:8pt;&quot;|49
|style=&quot;background:#0b0b00;height:8pt;&quot;|50
|style=&quot;background:#131300;height:8pt;&quot;|51
|style=&quot;background:#1b1b00;height:8pt;&quot;|52
|style=&quot;background:#232300;height:8pt;&quot;|53
|style=&quot;background:#2b2b07;height:8pt;&quot;|54
|style=&quot;background:#2f2f07;height:8pt;&quot;|55
|style=&quot;background:#373707;height:8pt;&quot;|56
|style=&quot;background:#3f3f07;height:8pt;&quot;|57
|style=&quot;background:#474707;height:8pt;&quot;|58
|style=&quot;background:#4b4b0b;height:8pt;&quot;|59
|style=&quot;background:#53530b;height:8pt;&quot;|60
|style=&quot;background:#5b5b0b;height:8pt;&quot;|61
|style=&quot;background:#63630b;height:8pt;&quot;|62
|style=&quot;background:#6b6b0f;height:8pt;&quot;|63
|-
|style=&quot;color:black;text-align:right;&quot;|Red (4)
|style=&quot;background:#070000;height:8pt;&quot;|64
|style=&quot;background:#0f0000;height:8pt;&quot;|65
|style=&quot;background:#170000;height:8pt;&quot;|66
|style=&quot;background:#1f0000;height:8pt;&quot;|67
|style=&quot;background:#270000;height:8pt;&quot;|68
|style=&quot;background:#2f0000;height:8pt;&quot;|69
|style=&quot;background:#370000;height:8pt;&quot;|70
|style=&quot;background:#3f0000;height:8pt;&quot;|71
|style=&quot;background:#470000;height:8pt;&quot;|72
|style=&quot;background:#4f0000;height:8pt;&quot;|73
|style=&quot;background:#570000;height:8pt;&quot;|74
|style=&quot;background:#5f0000;height:8pt;&quot;|75
|style=&quot;background:#670000;height:8pt;&quot;|76
|style=&quot;background:#6f0000;height:8pt;&quot;|77
|style=&quot;background:#770000;height:8pt;&quot;|78
|style=&quot;background:#7f0000;height:8pt;&quot;|79
|-
|style=&quot;color:black;text-align:right;&quot;|Orange (5)
|style=&quot;background:#131300;height:8pt;&quot;|80
|style=&quot;background:#1b1b00;height:8pt;&quot;|81
|style=&quot;background:#232300;height:8pt;&quot;|82
|style=&quot;background:#2f2b00;height:8pt;&quot;|83
|style=&quot;background:#372f00;height:8pt;&quot;|84
|style=&quot;background:#433700;height:8pt;&quot;|85
|style=&quot;background:#4b3b07;height:8pt;&quot;|86
|style=&quot;background:#574307;height:8pt;&quot;|87
|style=&quot;background:#5f4707;height:8pt;&quot;|88
|style=&quot;background:#6b4b0b;height:8pt;&quot;|89
|style=&quot;background:#77530f;height:8pt;&quot;|90
|style=&quot;background:#835713;height:8pt;&quot;|91
|style=&quot;background:#8b5b13;height:8pt;&quot;|92
|style=&quot;background:#975f1b;height:8pt;&quot;|93
|style=&quot;background:#a3631f;height:8pt;&quot;|94
|style=&quot;background:#af6723;height:8pt;&quot;|95
|-
|style=&quot;color:black;text-align:right;&quot;|Gold (6)
|style=&quot;background:#231307;height:8pt;&quot;|96
|style=&quot;background:#2f170b;height:8pt;&quot;|97
|style=&quot;background:#3b1f0f;height:8pt;&quot;|98
|style=&quot;background:#4b2313;height:8pt;&quot;|99
|style=&quot;background:#572b17;height:8pt;&quot;|100
|style=&quot;background:#632f1f;height:8pt;&quot;|101
|style=&quot;background:#733723;height:8pt;&quot;|102
|style=&quot;background:#7f3b2b;height:8pt;&quot;|103
|style=&quot;background:#8f4333;height:8pt;&quot;|104
|style=&quot;background:#9f4f33;height:8pt;&quot;|105
|style=&quot;background:#af632f;height:8pt;&quot;|106
|style=&quot;background:#bf772f;height:8pt;&quot;|107
|style=&quot;background:#cf8f2b;height:8pt;&quot;|108
|style=&quot;background:#dfab27;height:8pt;&quot;|109
|style=&quot;background:#efcb1f;height:8pt;&quot;|110
|style=&quot;background:#fff31b;height:8pt;&quot;|111
|-
|style=&quot;color:black;text-align:right;&quot;|Peach (7)
|style=&quot;background:#0b0700;height:8pt;&quot;|112
|style=&quot;background:#1b1300;height:8pt;&quot;|113
|style=&quot;background:#2b230f;height:8pt;&quot;|114
|style=&quot;background:#372b13;height:8pt;&quot;|115
|style=&quot;background:#47331b;height:8pt;&quot;|116
|style=&quot;background:#533723;height:8pt;&quot;|117
|style=&quot;background:#633f2b;height:8pt;&quot;|118
|style=&quot;background:#6f4733;height:8pt;&quot;|119
|style=&quot;background:#7f533f;height:8pt;&quot;|120
|style=&quot;background:#8b5f47;height:8pt;&quot;|121
|style=&quot;background:#9b6b53;height:8pt;&quot;|122
|style=&quot;background:#a77b5f;height:8pt;&quot;|123
|style=&quot;background:#b7876b;height:8pt;&quot;|124
|style=&quot;background:#c3937b;height:8pt;&quot;|125
|style=&quot;background:#d3a38b;height:8pt;&quot;|126
|style=&quot;background:#e3b397;height:8pt;&quot;|127
|-
|style=&quot;color:black;text-align:right;&quot;|Purple (8)
|style=&quot;background:#ab8ba3;height:8pt;&quot;|128
|style=&quot;background:#9f7f97;height:8pt;&quot;|129
|style=&quot;background:#937387;height:8pt;&quot;|130
|style=&quot;background:#8b677b;height:8pt;&quot;|131
|style=&quot;background:#7f5b6f;height:8pt;&quot;|132
|style=&quot;background:#775363;height:8pt;&quot;|133
|style=&quot;background:#6b4b57;height:8pt;&quot;|134
|style=&quot;background:#5f3f4b;height:8pt;&quot;|135
|style=&quot;background:#573743;height:8pt;&quot;|136
|style=&quot;background:#4b2f37;height:8pt;&quot;|137
|style=&quot;background:#43272f;height:8pt;&quot;|138
|style=&quot;background:#371f23;height:8pt;&quot;|139
|style=&quot;background:#2b171b;height:8pt;&quot;|140
|style=&quot;background:#231313;height:8pt;&quot;|141
|style=&quot;background:#170b0b;height:8pt;&quot;|142
|style=&quot;background:#0f0707;height:8pt;&quot;|143
|-
|style=&quot;color:black;text-align:right;&quot;|Magenta (9)
|style=&quot;background:#bb739f;height:8pt;&quot;|144
|style=&quot;background:#af6b8f;height:8pt;&quot;|145
|style=&quot;background:#a35f83;height:8pt;&quot;|146
|style=&quot;background:#975777;height:8pt;&quot;|147
|style=&quot;background:#8b4f6b;height:8pt;&quot;|148
|style=&quot;background:#7f4b5f;height:8pt;&quot;|149
|style=&quot;background:#734353;height:8pt;&quot;|150
|style=&quot;background:#6b3b4b;height:8pt;&quot;|151
|style=&quot;background:#5f333f;height:8pt;&quot;|152
|style=&quot;background:#532b37;height:8pt;&quot;|153
|style=&quot;background:#47232b;height:8pt;&quot;|154
|style=&quot;background:#3b1f23;height:8pt;&quot;|155
|style=&quot;background:#2f171b;height:8pt;&quot;|156
|style=&quot;background:#231313;height:8pt;&quot;|157
|style=&quot;background:#170b0b;height:8pt;&quot;|158
|style=&quot;background:#0f0707;height:8pt;&quot;|159
|-
|style=&quot;color:black;text-align:right;&quot;|Tan (10)
|style=&quot;background:#dbc3bb;height:8pt;&quot;|160
|style=&quot;background:#cbb3a7;height:8pt;&quot;|161
|style=&quot;background:#bfa39b;height:8pt;&quot;|162
|style=&quot;background:#af978b;height:8pt;&quot;|163
|style=&quot;background:#a3877b;height:8pt;&quot;|164
|style=&quot;background:#977b6f;height:8pt;&quot;|165
|style=&quot;background:#876f5f;height:8pt;&quot;|166
|style=&quot;background:#7b6353;height:8pt;&quot;|167
|style=&quot;background:#6b5747;height:8pt;&quot;|168
|style=&quot;background:#5f4b3b;height:8pt;&quot;|169
|style=&quot;background:#533f33;height:8pt;&quot;|170
|style=&quot;background:#433327;height:8pt;&quot;|171
|style=&quot;background:#372b1f;height:8pt;&quot;|172
|style=&quot;background:#271f17;height:8pt;&quot;|173
|style=&quot;background:#1b130f;height:8pt;&quot;|174
|style=&quot;background:#0f0b07;height:8pt;&quot;|175
|-
|style=&quot;color:black;text-align:right;&quot;|Light green (11)
|style=&quot;background:#6f837b;height:8pt;&quot;|176
|style=&quot;background:#677b6f;height:8pt;&quot;|177
|style=&quot;background:#5f7367;height:8pt;&quot;|178
|style=&quot;background:#576b5f;height:8pt;&quot;|179
|style=&quot;background:#4f6357;height:8pt;&quot;|180
|style=&quot;background:#475b4f;height:8pt;&quot;|181
|style=&quot;background:#3f5347;height:8pt;&quot;|182
|style=&quot;background:#374b3f;height:8pt;&quot;|183
|style=&quot;background:#2f4337;height:8pt;&quot;|184
|style=&quot;background:#2b3b2f;height:8pt;&quot;|185
|style=&quot;background:#233327;height:8pt;&quot;|186
|style=&quot;background:#1f2b1f;height:8pt;&quot;|187
|style=&quot;background:#172317;height:8pt;&quot;|188
|style=&quot;background:#0f1b13;height:8pt;&quot;|189
|style=&quot;background:#0b130b;height:8pt;&quot;|190
|style=&quot;background:#070b07;height:8pt;&quot;|191
|-
|style=&quot;color:black;text-align:right;&quot;|Yellow (12)
|style=&quot;background:#fff31b;height:8pt;&quot;|192
|style=&quot;background:#efdf17;height:8pt;&quot;|193
|style=&quot;background:#dbcb13;height:8pt;&quot;|194
|style=&quot;background:#cbb70f;height:8pt;&quot;|195
|style=&quot;background:#bba70f;height:8pt;&quot;|196
|style=&quot;background:#ab970b;height:8pt;&quot;|197
|style=&quot;background:#9b8307;height:8pt;&quot;|198
|style=&quot;background:#8b7307;height:8pt;&quot;|199
|style=&quot;background:#7b6307;height:8pt;&quot;|200
|style=&quot;background:#6b5300;height:8pt;&quot;|201
|style=&quot;background:#5b4700;height:8pt;&quot;|202
|style=&quot;background:#4b3700;height:8pt;&quot;|203
|style=&quot;background:#3b2b00;height:8pt;&quot;|204
|style=&quot;background:#2b1f00;height:8pt;&quot;|205
|style=&quot;background:#1b0f00;height:8pt;&quot;|206
|style=&quot;background:#0b0700;height:8pt;&quot;|207
|-
|style=&quot;color:black;text-align:right;&quot;|Blue (13)
|style=&quot;background:#0000ff;height:8pt;&quot;|208
|style=&quot;background:#0b0bef;height:8pt;&quot;|209
|style=&quot;background:#1313df;height:8pt;&quot;|210
|style=&quot;background:#1b1bcf;height:8pt;&quot;|211
|style=&quot;background:#2323bf;height:8pt;&quot;|212
|style=&quot;background:#2b2baf;height:8pt;&quot;|213
|style=&quot;background:#2f2f9f;height:8pt;&quot;|214
|style=&quot;background:#2f2f8f;height:8pt;&quot;|215
|style=&quot;background:#2f2f7f;height:8pt;&quot;|216
|style=&quot;background:#2f2f6f;height:8pt;&quot;|217
|style=&quot;background:#2f2f5f;height:8pt;&quot;|218
|style=&quot;background:#2b2b4f;height:8pt;&quot;|219
|style=&quot;background:#23233f;height:8pt;&quot;|220
|style=&quot;background:#1b1b2f;height:8pt;&quot;|221
|style=&quot;background:#13131f;height:8pt;&quot;|222
|style=&quot;background:#0b0b0f;height:8pt;&quot;|223
|-
|style=&quot;color:black;text-align:right;&quot;|Fire (14)
|style=&quot;background:#2b0000;height:8pt;&quot;|224
|style=&quot;background:#3b0000;height:8pt;&quot;|225
|style=&quot;background:#4b0700;height:8pt;&quot;|226
|style=&quot;background:#5f0700;height:8pt;&quot;|227
|style=&quot;background:#6f0f00;height:8pt;&quot;|228
|style=&quot;background:#7f1707;height:8pt;&quot;|229
|style=&quot;background:#931f07;height:8pt;&quot;|230
|style=&quot;background:#a3270b;height:8pt;&quot;|231
|style=&quot;background:#b7330f;height:8pt;&quot;|232
|style=&quot;background:#c34b1b;height:8pt;&quot;|233
|style=&quot;background:#cf632b;height:8pt;&quot;|234
|style=&quot;background:#db7f3b;height:8pt;&quot;|235
|style=&quot;background:#e3974f;height:8pt;&quot;|236
|style=&quot;background:#e7ab5f;height:8pt;&quot;|237
|style=&quot;background:#efbf77;height:8pt;&quot;|238
|style=&quot;background:#f7d38b;height:8pt;&quot;|239
|-
|style=&quot;color:black;text-align:right;&quot;|Brights (15)
|style=&quot;background:#a77b3b;height:8pt;&quot;|240
|style=&quot;background:#b79b37;height:8pt;&quot;|241
|style=&quot;background:#c7c337;height:8pt;&quot;|242
|style=&quot;background:#e7e357;height:8pt;&quot;|243
|style=&quot;background:#7fbfff;height:8pt;&quot;|244
|style=&quot;background:#abe7ff;height:8pt;&quot;|245
|style=&quot;background:#d7ffff;height:8pt;&quot;|246
|style=&quot;background:#670000;height:8pt;&quot;|247
|style=&quot;background:#8b0000;height:8pt;&quot;|248
|style=&quot;background:#b30000;height:8pt;&quot;|249
|style=&quot;background:#d70000;height:8pt;&quot;|250
|style=&quot;background:#ff0000;height:8pt;&quot;|251
|style=&quot;background:#fff393;height:8pt;&quot;|252
|style=&quot;background:#fff7c7;height:8pt;&quot;|253
|style=&quot;background:#ffffff;height:8pt;&quot;|254
|style=&quot;background:#9f5b53;height:8pt;&quot;|255
|-
|}

Color 255 is transparent for sprites, 2d lmps, and gfx.wad entries (excluding [[conchars]], in which case it is black (color 0) that's made transparent). It is important that palette index 0 is black. The parameters for the [[color]] console command are the row #, but is restricted to rows 0 - 13.

It is important that the latter 8 palette rows are &quot;backwards&quot; (light-to-dark instead of dark-to-light). It appears that the [[id Software|ID]] artists did this for no good reason in the original Quake palette, and the engine programmers were forced to add a hack to accommodate it (along with the comment &quot;the artists made some backwards ranges. sigh&quot;). The only area this affects is player shirt/pants color translation (where one palette row must be mapped to another).

=== palette.lmp ===
The palette is stored in gfx/palette.lmp. It consists of 256 RGB values, coming out to 768 bytes in total.

=== Download ===
* [[Image:quake_palette.zip]] - The Quake palette in 3 formats: JASC (text), Microsoft (RIFF), and raw (768-byte lump of RGB values).

== Colormap ==
[[Image:Colormap.png|right|thumb|The Quake colormap.]]

The colormap is a table used for lighting in software Quake engines. It contains a column of 64 values per each palette color. Each value is an index into the palette representing as closely as possible the original color brightened or darkened: shade 0 is double bright, shade 32 is the original color, and shade 63 is black.

&quot;Fullbright&quot; colors are those which are not lit in the colormap, simply using the original color for all 64 shades. These colors, when used in textures and model skins, will not be affected by lighting. Fullbrights are used for things like fire and glowing lights. In Quake these are the last 32 colors in the palette.

Since the [[GLQuake]] engine ignores the colormap, it doesn't support fullbrights. Most user-modified engines have fixed this problem, being hard-coded to treat the last 32 colors as fullbright. For this reason, you shouldn't generate a colormap with a different amount of fullbrights, since it will work in software engines but not in modern GL engines.

=== colormap.lmp ===
The colormap is stored in gfx/colormap.lmp. The version included with Quake is 16385 bytes. Since the colormap only requires 16384 bytes (256 * 64), I'm not exactly sure what the extra byte (&lt;tt&gt;0x20&lt;/tt&gt;) at the end is for.

=== Generating the colormap ===
The following C code will generate a colormap.lmp that is nearly (but not exactly) identical to the Quake colormap. Sorry about the lack of comments, maybe I'll add some later. Consider it public domain.

 /* sample a 24-bit RGB value to one of the colours on the existing 8-bit palette */
 unsigned char convert_24_to_8(const unsigned char palette[768], const int rgb[3])
 {
   int i, j;
   int best_index = -1;
   int best_dist = 0;
 
   for (i = 0; i &lt; 256; i++)
   {
     int dist = 0;
 
     for (j = 0; j &lt; 3; j++)
     {
     /* note that we could use RGB luminosity bias for greater accuracy, but quake's colormap apparently didn't do this */
       int d = abs(rgb[j] - palette[i*3+j]);
       dist += d * d;
     }
 
     if (best_index == -1 || dist &lt; best_dist)
     {
       best_index = i;
       best_dist = dist;
     }
   }
 
   return (unsigned char)best_index;
 }
 
 void generate_colormap(const unsigned char palette[768], unsigned char out_colormap[16384])
 {
   int num_fullbrights = 32; /* the last 32 colours will be full bright */
   int x, y, i;
 
   for (x = 0; x &lt; 256; x++)
   {
     for (y = 0; y &lt; 64; y++)
     {
       if (x &lt; 256 - num_fullbrights)
       {
         int rgb[3];
 
         for (i = 0; i &lt; 3; i++)
         {
           rgb[i] = (palette[x*3+i] * (63 - y) + 16) &gt;&gt; 5; /* divide by 32, rounding to nearest integer */
           if (rgb[i] &gt; 255)
             rgb[i] = 255;
         }
 
         out_colormap[y*256+x] = convert_24_to_8(palette, rgb);
       }
       else
       {
       /* this colour is a fullbright, just keep the original colour */
         out_colormap[y*256+x] = x;
       }
     }
   }
 }

== Legal status ==
John Carmack officially put palette.lmp in the public domain to make Quake ports easier, so it is legal to, for example, embed it right into an engine executable. Colormap.lmp can also be considered public domain as it is trivially derived from the palette.

== Related Info ==
* Most engine mods use 32-bit colour, so you need not worry about palettes. With 32-bit textures, shirt/pants colour changing and fullbrights are only possible if engines support a new implementation of them, for example [[DarkPlaces]]'s [[DP_GFX_EXTERNALTEXTURES]] extension, which allows additional _glow, _pants, _shirt, etc textures on top of the main one)</text>
      <sha1>lbeooye2t0lj31hojn1o3wpizx2xvbh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1480</id>
      <parentid>1476</parentid>
      <timestamp>2009-12-12T04:30:21Z</timestamp>
      <contributor>
        <ip>72.25.192.4</ip>
      </contributor>
      <text xml:space="preserve" bytes="16904">__NOTOC__[[Image:Qpalette.png|right|thumb|The Quake palette.]]
{|style=&quot;color:white;font-weight:bold;font-size:8pt;text-align:center;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot;
|-
|style=&quot;color:black;text-align:right;&quot;|White (0)
|style=&quot;background:#000000;height:8pt;&quot;|0
|style=&quot;background:#0f0f0f;height:8pt;&quot;|1
|style=&quot;background:#1f1f1f;height:8pt;&quot;|2
|style=&quot;background:#2f2f2f;height:8pt;&quot;|3
|style=&quot;background:#3f3f3f;height:8pt;&quot;|4
|style=&quot;background:#4b4b4b;height:8pt;&quot;|5
|style=&quot;background:#5b5b5b;height:8pt;&quot;|6
|style=&quot;background:#6b6b6b;height:8pt;&quot;|7
|style=&quot;background:#7b7b7b;height:8pt;&quot;|8
|style=&quot;background:#8b8b8b;height:8pt;&quot;|9
|style=&quot;background:#9b9b9b;height:8pt;&quot;|10
|style=&quot;background:#ababab;height:8pt;&quot;|11
|style=&quot;background:#bbbbbb;height:8pt;&quot;|12
|style=&quot;background:#cbcbcb;height:8pt;&quot;|13
|style=&quot;background:#dbdbdb;height:8pt;&quot;|14
|style=&quot;background:#ebebeb;height:8pt;&quot;|15
|-
|style=&quot;color:black;text-align:right;&quot;|Brown (1)
|style=&quot;background:#0f0b07;height:8pt;&quot;|16
|style=&quot;background:#170f0b;height:8pt;&quot;|17
|style=&quot;background:#1f170b;height:8pt;&quot;|18
|style=&quot;background:#271b0f;height:8pt;&quot;|19
|style=&quot;background:#2f2313;height:8pt;&quot;|20
|style=&quot;background:#372b17;height:8pt;&quot;|21
|style=&quot;background:#3f2f17;height:8pt;&quot;|22
|style=&quot;background:#4b371b;height:8pt;&quot;|23
|style=&quot;background:#533b1b;height:8pt;&quot;|24
|style=&quot;background:#5b431f;height:8pt;&quot;|25
|style=&quot;background:#634b1f;height:8pt;&quot;|26
|style=&quot;background:#6b531f;height:8pt;&quot;|27
|style=&quot;background:#73571f;height:8pt;&quot;|28
|style=&quot;background:#7b5f23;height:8pt;&quot;|29
|style=&quot;background:#836723;height:8pt;&quot;|30
|style=&quot;background:#8f6f23;height:8pt;&quot;|31
|-
|style=&quot;color:black;text-align:right;&quot;|Light blue (2)
|style=&quot;background:#0b0b0f;height:8pt;&quot;|32
|style=&quot;background:#13131b;height:8pt;&quot;|33
|style=&quot;background:#1b1b27;height:8pt;&quot;|34
|style=&quot;background:#272733;height:8pt;&quot;|35
|style=&quot;background:#2f2f3f;height:8pt;&quot;|36
|style=&quot;background:#37374b;height:8pt;&quot;|37
|style=&quot;background:#3f3f57;height:8pt;&quot;|38
|style=&quot;background:#474767;height:8pt;&quot;|39
|style=&quot;background:#4f4f73;height:8pt;&quot;|40
|style=&quot;background:#5b5b7f;height:8pt;&quot;|41
|style=&quot;background:#63638b;height:8pt;&quot;|42
|style=&quot;background:#6b6b97;height:8pt;&quot;|43
|style=&quot;background:#7373a3;height:8pt;&quot;|44
|style=&quot;background:#7b7baf;height:8pt;&quot;|45
|style=&quot;background:#8383bb;height:8pt;&quot;|46
|style=&quot;background:#8b8bcb;height:8pt;&quot;|47
|-
|style=&quot;color:black;text-align:right;&quot;|Green (3)
|style=&quot;background:#000000;height:8pt;&quot;|48
|style=&quot;background:#070700;height:8pt;&quot;|49
|style=&quot;background:#0b0b00;height:8pt;&quot;|50
|style=&quot;background:#131300;height:8pt;&quot;|51
|style=&quot;background:#1b1b00;height:8pt;&quot;|52
|style=&quot;background:#232300;height:8pt;&quot;|53
|style=&quot;background:#2b2b07;height:8pt;&quot;|54
|style=&quot;background:#2f2f07;height:8pt;&quot;|55
|style=&quot;background:#373707;height:8pt;&quot;|56
|style=&quot;background:#3f3f07;height:8pt;&quot;|57
|style=&quot;background:#474707;height:8pt;&quot;|58
|style=&quot;background:#4b4b0b;height:8pt;&quot;|59
|style=&quot;background:#53530b;height:8pt;&quot;|60
|style=&quot;background:#5b5b0b;height:8pt;&quot;|61
|style=&quot;background:#63630b;height:8pt;&quot;|62
|style=&quot;background:#6b6b0f;height:8pt;&quot;|63
|-
|style=&quot;color:black;text-align:right;&quot;|Red (4)
|style=&quot;background:#070000;height:8pt;&quot;|64
|style=&quot;background:#0f0000;height:8pt;&quot;|65
|style=&quot;background:#170000;height:8pt;&quot;|66
|style=&quot;background:#1f0000;height:8pt;&quot;|67
|style=&quot;background:#270000;height:8pt;&quot;|68
|style=&quot;background:#2f0000;height:8pt;&quot;|69
|style=&quot;background:#370000;height:8pt;&quot;|70
|style=&quot;background:#3f0000;height:8pt;&quot;|71
|style=&quot;background:#470000;height:8pt;&quot;|72
|style=&quot;background:#4f0000;height:8pt;&quot;|73
|style=&quot;background:#570000;height:8pt;&quot;|74
|style=&quot;background:#5f0000;height:8pt;&quot;|75
|style=&quot;background:#670000;height:8pt;&quot;|76
|style=&quot;background:#6f0000;height:8pt;&quot;|77
|style=&quot;background:#770000;height:8pt;&quot;|78
|style=&quot;background:#7f0000;height:8pt;&quot;|79
|-
|style=&quot;color:black;text-align:right;&quot;|Orange (5)
|style=&quot;background:#131300;height:8pt;&quot;|80
|style=&quot;background:#1b1b00;height:8pt;&quot;|81
|style=&quot;background:#232300;height:8pt;&quot;|82
|style=&quot;background:#2f2b00;height:8pt;&quot;|83
|style=&quot;background:#372f00;height:8pt;&quot;|84
|style=&quot;background:#433700;height:8pt;&quot;|85
|style=&quot;background:#4b3b07;height:8pt;&quot;|86
|style=&quot;background:#574307;height:8pt;&quot;|87
|style=&quot;background:#5f4707;height:8pt;&quot;|88
|style=&quot;background:#6b4b0b;height:8pt;&quot;|89
|style=&quot;background:#77530f;height:8pt;&quot;|90
|style=&quot;background:#835713;height:8pt;&quot;|91
|style=&quot;background:#8b5b13;height:8pt;&quot;|92
|style=&quot;background:#975f1b;height:8pt;&quot;|93
|style=&quot;background:#a3631f;height:8pt;&quot;|94
|style=&quot;background:#af6723;height:8pt;&quot;|95
|-
|style=&quot;color:black;text-align:right;&quot;|Gold (6)
|style=&quot;background:#231307;height:8pt;&quot;|96
|style=&quot;background:#2f170b;height:8pt;&quot;|97
|style=&quot;background:#3b1f0f;height:8pt;&quot;|98
|style=&quot;background:#4b2313;height:8pt;&quot;|99
|style=&quot;background:#572b17;height:8pt;&quot;|100
|style=&quot;background:#632f1f;height:8pt;&quot;|101
|style=&quot;background:#733723;height:8pt;&quot;|102
|style=&quot;background:#7f3b2b;height:8pt;&quot;|103
|style=&quot;background:#8f4333;height:8pt;&quot;|104
|style=&quot;background:#9f4f33;height:8pt;&quot;|105
|style=&quot;background:#af632f;height:8pt;&quot;|106
|style=&quot;background:#bf772f;height:8pt;&quot;|107
|style=&quot;background:#cf8f2b;height:8pt;&quot;|108
|style=&quot;background:#dfab27;height:8pt;&quot;|109
|style=&quot;background:#efcb1f;height:8pt;&quot;|110
|style=&quot;background:#fff31b;height:8pt;&quot;|111
|-
|style=&quot;color:black;text-align:right;&quot;|Peach (7)
|style=&quot;background:#0b0700;height:8pt;&quot;|112
|style=&quot;background:#1b1300;height:8pt;&quot;|113
|style=&quot;background:#2b230f;height:8pt;&quot;|114
|style=&quot;background:#372b13;height:8pt;&quot;|115
|style=&quot;background:#47331b;height:8pt;&quot;|116
|style=&quot;background:#533723;height:8pt;&quot;|117
|style=&quot;background:#633f2b;height:8pt;&quot;|118
|style=&quot;background:#6f4733;height:8pt;&quot;|119
|style=&quot;background:#7f533f;height:8pt;&quot;|120
|style=&quot;background:#8b5f47;height:8pt;&quot;|121
|style=&quot;background:#9b6b53;height:8pt;&quot;|122
|style=&quot;background:#a77b5f;height:8pt;&quot;|123
|style=&quot;background:#b7876b;height:8pt;&quot;|124
|style=&quot;background:#c3937b;height:8pt;&quot;|125
|style=&quot;background:#d3a38b;height:8pt;&quot;|126
|style=&quot;background:#e3b397;height:8pt;&quot;|127
|-
|style=&quot;color:black;text-align:right;&quot;|Purple (8)
|style=&quot;background:#ab8ba3;height:8pt;&quot;|128
|style=&quot;background:#9f7f97;height:8pt;&quot;|129
|style=&quot;background:#937387;height:8pt;&quot;|130
|style=&quot;background:#8b677b;height:8pt;&quot;|131
|style=&quot;background:#7f5b6f;height:8pt;&quot;|132
|style=&quot;background:#775363;height:8pt;&quot;|133
|style=&quot;background:#6b4b57;height:8pt;&quot;|134
|style=&quot;background:#5f3f4b;height:8pt;&quot;|135
|style=&quot;background:#573743;height:8pt;&quot;|136
|style=&quot;background:#4b2f37;height:8pt;&quot;|137
|style=&quot;background:#43272f;height:8pt;&quot;|138
|style=&quot;background:#371f23;height:8pt;&quot;|139
|style=&quot;background:#2b171b;height:8pt;&quot;|140
|style=&quot;background:#231313;height:8pt;&quot;|141
|style=&quot;background:#170b0b;height:8pt;&quot;|142
|style=&quot;background:#0f0707;height:8pt;&quot;|143
|-
|style=&quot;color:black;text-align:right;&quot;|Magenta (9)
|style=&quot;background:#bb739f;height:8pt;&quot;|144
|style=&quot;background:#af6b8f;height:8pt;&quot;|145
|style=&quot;background:#a35f83;height:8pt;&quot;|146
|style=&quot;background:#975777;height:8pt;&quot;|147
|style=&quot;background:#8b4f6b;height:8pt;&quot;|148
|style=&quot;background:#7f4b5f;height:8pt;&quot;|149
|style=&quot;background:#734353;height:8pt;&quot;|150
|style=&quot;background:#6b3b4b;height:8pt;&quot;|151
|style=&quot;background:#5f333f;height:8pt;&quot;|152
|style=&quot;background:#532b37;height:8pt;&quot;|153
|style=&quot;background:#47232b;height:8pt;&quot;|154
|style=&quot;background:#3b1f23;height:8pt;&quot;|155
|style=&quot;background:#2f171b;height:8pt;&quot;|156
|style=&quot;background:#231313;height:8pt;&quot;|157
|style=&quot;background:#170b0b;height:8pt;&quot;|158
|style=&quot;background:#0f0707;height:8pt;&quot;|159
|-
|style=&quot;color:black;text-align:right;&quot;|Tan (10)
|style=&quot;background:#dbc3bb;height:8pt;&quot;|160
|style=&quot;background:#cbb3a7;height:8pt;&quot;|161
|style=&quot;background:#bfa39b;height:8pt;&quot;|162
|style=&quot;background:#af978b;height:8pt;&quot;|163
|style=&quot;background:#a3877b;height:8pt;&quot;|164
|style=&quot;background:#977b6f;height:8pt;&quot;|165
|style=&quot;background:#876f5f;height:8pt;&quot;|166
|style=&quot;background:#7b6353;height:8pt;&quot;|167
|style=&quot;background:#6b5747;height:8pt;&quot;|168
|style=&quot;background:#5f4b3b;height:8pt;&quot;|169
|style=&quot;background:#533f33;height:8pt;&quot;|170
|style=&quot;background:#433327;height:8pt;&quot;|171
|style=&quot;background:#372b1f;height:8pt;&quot;|172
|style=&quot;background:#271f17;height:8pt;&quot;|173
|style=&quot;background:#1b130f;height:8pt;&quot;|174
|style=&quot;background:#0f0b07;height:8pt;&quot;|175
|-
|style=&quot;color:black;text-align:right;&quot;|Light green (11)
|style=&quot;background:#6f837b;height:8pt;&quot;|176
|style=&quot;background:#677b6f;height:8pt;&quot;|177
|style=&quot;background:#5f7367;height:8pt;&quot;|178
|style=&quot;background:#576b5f;height:8pt;&quot;|179
|style=&quot;background:#4f6357;height:8pt;&quot;|180
|style=&quot;background:#475b4f;height:8pt;&quot;|181
|style=&quot;background:#3f5347;height:8pt;&quot;|182
|style=&quot;background:#374b3f;height:8pt;&quot;|183
|style=&quot;background:#2f4337;height:8pt;&quot;|184
|style=&quot;background:#2b3b2f;height:8pt;&quot;|185
|style=&quot;background:#233327;height:8pt;&quot;|186
|style=&quot;background:#1f2b1f;height:8pt;&quot;|187
|style=&quot;background:#172317;height:8pt;&quot;|188
|style=&quot;background:#0f1b13;height:8pt;&quot;|189
|style=&quot;background:#0b130b;height:8pt;&quot;|190
|style=&quot;background:#070b07;height:8pt;&quot;|191
|-
|style=&quot;color:black;text-align:right;&quot;|Yellow (12)
|style=&quot;background:#fff31b;height:8pt;&quot;|192
|style=&quot;background:#efdf17;height:8pt;&quot;|193
|style=&quot;background:#dbcb13;height:8pt;&quot;|194
|style=&quot;background:#cbb70f;height:8pt;&quot;|195
|style=&quot;background:#bba70f;height:8pt;&quot;|196
|style=&quot;background:#ab970b;height:8pt;&quot;|197
|style=&quot;background:#9b8307;height:8pt;&quot;|198
|style=&quot;background:#8b7307;height:8pt;&quot;|199
|style=&quot;background:#7b6307;height:8pt;&quot;|200
|style=&quot;background:#6b5300;height:8pt;&quot;|201
|style=&quot;background:#5b4700;height:8pt;&quot;|202
|style=&quot;background:#4b3700;height:8pt;&quot;|203
|style=&quot;background:#3b2b00;height:8pt;&quot;|204
|style=&quot;background:#2b1f00;height:8pt;&quot;|205
|style=&quot;background:#1b0f00;height:8pt;&quot;|206
|style=&quot;background:#0b0700;height:8pt;&quot;|207
|-
|style=&quot;color:black;text-align:right;&quot;|Blue (13)
|style=&quot;background:#0000ff;height:8pt;&quot;|208
|style=&quot;background:#0b0bef;height:8pt;&quot;|209
|style=&quot;background:#1313df;height:8pt;&quot;|210
|style=&quot;background:#1b1bcf;height:8pt;&quot;|211
|style=&quot;background:#2323bf;height:8pt;&quot;|212
|style=&quot;background:#2b2baf;height:8pt;&quot;|213
|style=&quot;background:#2f2f9f;height:8pt;&quot;|214
|style=&quot;background:#2f2f8f;height:8pt;&quot;|215
|style=&quot;background:#2f2f7f;height:8pt;&quot;|216
|style=&quot;background:#2f2f6f;height:8pt;&quot;|217
|style=&quot;background:#2f2f5f;height:8pt;&quot;|218
|style=&quot;background:#2b2b4f;height:8pt;&quot;|219
|style=&quot;background:#23233f;height:8pt;&quot;|220
|style=&quot;background:#1b1b2f;height:8pt;&quot;|221
|style=&quot;background:#13131f;height:8pt;&quot;|222
|style=&quot;background:#0b0b0f;height:8pt;&quot;|223
|-
|style=&quot;color:black;text-align:right;&quot;|Fire (14)
|style=&quot;background:#2b0000;height:8pt;&quot;|224
|style=&quot;background:#3b0000;height:8pt;&quot;|225
|style=&quot;background:#4b0700;height:8pt;&quot;|226
|style=&quot;background:#5f0700;height:8pt;&quot;|227
|style=&quot;background:#6f0f00;height:8pt;&quot;|228
|style=&quot;background:#7f1707;height:8pt;&quot;|229
|style=&quot;background:#931f07;height:8pt;&quot;|230
|style=&quot;background:#a3270b;height:8pt;&quot;|231
|style=&quot;background:#b7330f;height:8pt;&quot;|232
|style=&quot;background:#c34b1b;height:8pt;&quot;|233
|style=&quot;background:#cf632b;height:8pt;&quot;|234
|style=&quot;background:#db7f3b;height:8pt;&quot;|235
|style=&quot;background:#e3974f;height:8pt;&quot;|236
|style=&quot;background:#e7ab5f;height:8pt;&quot;|237
|style=&quot;background:#efbf77;height:8pt;&quot;|238
|style=&quot;background:#f7d38b;height:8pt;&quot;|239
|-
|style=&quot;color:black;text-align:right;&quot;|Brights (15)
|style=&quot;background:#a77b3b;height:8pt;&quot;|240
|style=&quot;background:#b79b37;height:8pt;&quot;|241
|style=&quot;background:#c7c337;height:8pt;&quot;|242
|style=&quot;background:#e7e357;height:8pt;&quot;|243
|style=&quot;background:#7fbfff;height:8pt;&quot;|244
|style=&quot;background:#abe7ff;height:8pt;&quot;|245
|style=&quot;background:#d7ffff;height:8pt;&quot;|246
|style=&quot;background:#670000;height:8pt;&quot;|247
|style=&quot;background:#8b0000;height:8pt;&quot;|248
|style=&quot;background:#b30000;height:8pt;&quot;|249
|style=&quot;background:#d70000;height:8pt;&quot;|250
|style=&quot;background:#ff0000;height:8pt;&quot;|251
|style=&quot;background:#fff393;height:8pt;&quot;|252
|style=&quot;background:#fff7c7;height:8pt;&quot;|253
|style=&quot;background:#ffffff;height:8pt;&quot;|254
|style=&quot;background:#9f5b53;height:8pt;&quot;|255
|-
|}

Color 255 is transparent for sprites, 2d lmps, and gfx.wad entries (excluding [[conchars]], in which case it is black (color 0) that's made transparent). It is important that palette index 0 is black. The parameters for the [[color]] console command are the row #, but is restricted to rows 0 - 13.

It is important that the latter 8 palette rows are &quot;backwards&quot; (light-to-dark instead of dark-to-light). It appears that the [[id Software|ID]] artists did this for no good reason in the original Quake palette, and the engine programmers were forced to add a hack to accommodate it (along with the comment &quot;the artists made some backwards ranges. sigh&quot;). The only area this affects is player shirt/pants color translation (where one palette row must be mapped to another).

=== palette.lmp ===
The palette is stored in gfx/palette.lmp. It consists of 256 RGB values, coming out to 768 bytes in total.

=== Download ===
* [[Image:quake_palette.zip]] - The Quake palette in 3 formats: JASC (text), Microsoft (RIFF), and raw (768-byte lump of RGB values).

== Colormap ==
[[Image:Colormap.png|right|thumb|The Quake colormap.]]

The colormap is a table used for lighting in software Quake engines. It contains a column of 64 values for each palette color. Each value is an index into the palette representing as closely as possible the original color brightened or darkened: shade 0 is double bright, shade 32 is the original color, and shade 63 is black.

&quot;Fullbright&quot; colors are those which are not lit in the colormap, simply using the original color for all 64 shades. These colors, when used in textures and model skins, will not be affected by lighting. Fullbrights are used for things like fire and glowing lights. In Quake these are the last 32 colors in the palette.

Since the [[GLQuake]] engine ignores the colormap, it doesn't support fullbrights. Most user-modified engines have fixed this problem, being hard-coded to treat the last 32 colors as fullbright. For this reason, you shouldn't generate a colormap with a different amount of fullbrights, since it will work in software engines but not in modern GL engines.

=== colormap.lmp ===
The colormap is stored in gfx/colormap.lmp. The version included with Quake is 16385 bytes. Since the colormap only requires 16384 bytes (256 * 64), I'm not exactly sure what the extra byte (&lt;tt&gt;0x20&lt;/tt&gt;) at the end is for.

=== Generating the colormap ===
The following C code will generate a colormap.lmp that is nearly (but not exactly) identical to the Quake colormap. Sorry about the lack of comments, maybe I'll add some later. Consider it public domain.

 /* sample a 24-bit RGB value to one of the colours on the existing 8-bit palette */
 unsigned char convert_24_to_8(const unsigned char palette[768], const int rgb[3])
 {
   int i, j;
   int best_index = -1;
   int best_dist = 0;
 
   for (i = 0; i &lt; 256; i++)
   {
     int dist = 0;
 
     for (j = 0; j &lt; 3; j++)
     {
     /* note that we could use RGB luminosity bias for greater accuracy, but quake's colormap apparently didn't do this */
       int d = abs(rgb[j] - palette[i*3+j]);
       dist += d * d;
     }
 
     if (best_index == -1 || dist &lt; best_dist)
     {
       best_index = i;
       best_dist = dist;
     }
   }
 
   return (unsigned char)best_index;
 }
 
 void generate_colormap(const unsigned char palette[768], unsigned char out_colormap[16384])
 {
   int num_fullbrights = 32; /* the last 32 colours will be full bright */
   int x, y, i;
 
   for (x = 0; x &lt; 256; x++)
   {
     for (y = 0; y &lt; 64; y++)
     {
       if (x &lt; 256 - num_fullbrights)
       {
         int rgb[3];
 
         for (i = 0; i &lt; 3; i++)
         {
           rgb[i] = (palette[x*3+i] * (63 - y) + 16) &gt;&gt; 5; /* divide by 32, rounding to nearest integer */
           if (rgb[i] &gt; 255)
             rgb[i] = 255;
         }
 
         out_colormap[y*256+x] = convert_24_to_8(palette, rgb);
       }
       else
       {
       /* this colour is a fullbright, just keep the original colour */
         out_colormap[y*256+x] = x;
       }
     }
   }
 }

== Legal status ==
John Carmack officially put palette.lmp in the public domain to make Quake ports easier, so it is legal to, for example, embed it right into an engine executable. Colormap.lmp can also be considered public domain as it is trivially derived from the palette.

== Related Info ==
* Most engine mods use 32-bit colour, so you need not worry about palettes. With 32-bit textures, shirt/pants colour changing and fullbrights are only possible if engines support a new implementation of them, for example [[DarkPlaces]]'s [[DP_GFX_EXTERNALTEXTURES]] extension, which allows additional _glow, _pants, _shirt, etc textures on top of the main one)</text>
      <sha1>knzteapykwvzjc2h5fpl145nlkp6ezy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1481</id>
      <parentid>1480</parentid>
      <timestamp>2009-12-13T23:49:59Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>made text black on very bright palette colors, for readability</comment>
      <text xml:space="preserve" bytes="17048">__NOTOC__[[Image:Qpalette.png|right|thumb|The Quake palette.]]
{|style=&quot;color:white;font-weight:bold;font-size:8pt;text-align:center;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot;
|-
|style=&quot;color:black;text-align:right;&quot;|White (0)
|style=&quot;background:#000000;height:8pt;&quot;|0
|style=&quot;background:#0f0f0f;height:8pt;&quot;|1
|style=&quot;background:#1f1f1f;height:8pt;&quot;|2
|style=&quot;background:#2f2f2f;height:8pt;&quot;|3
|style=&quot;background:#3f3f3f;height:8pt;&quot;|4
|style=&quot;background:#4b4b4b;height:8pt;&quot;|5
|style=&quot;background:#5b5b5b;height:8pt;&quot;|6
|style=&quot;background:#6b6b6b;height:8pt;&quot;|7
|style=&quot;background:#7b7b7b;height:8pt;&quot;|8
|style=&quot;background:#8b8b8b;height:8pt;&quot;|9
|style=&quot;background:#9b9b9b;height:8pt;&quot;|10
|style=&quot;background:#ababab;height:8pt;&quot;|11
|style=&quot;background:#bbbbbb;height:8pt;&quot;|12
|style=&quot;background:#cbcbcb;height:8pt;&quot;|13
|style=&quot;background:#dbdbdb;height:8pt;&quot;|14
|style=&quot;background:#ebebeb;height:8pt;color:black;&quot;|15
|-
|style=&quot;color:black;text-align:right;&quot;|Brown (1)
|style=&quot;background:#0f0b07;height:8pt;&quot;|16
|style=&quot;background:#170f0b;height:8pt;&quot;|17
|style=&quot;background:#1f170b;height:8pt;&quot;|18
|style=&quot;background:#271b0f;height:8pt;&quot;|19
|style=&quot;background:#2f2313;height:8pt;&quot;|20
|style=&quot;background:#372b17;height:8pt;&quot;|21
|style=&quot;background:#3f2f17;height:8pt;&quot;|22
|style=&quot;background:#4b371b;height:8pt;&quot;|23
|style=&quot;background:#533b1b;height:8pt;&quot;|24
|style=&quot;background:#5b431f;height:8pt;&quot;|25
|style=&quot;background:#634b1f;height:8pt;&quot;|26
|style=&quot;background:#6b531f;height:8pt;&quot;|27
|style=&quot;background:#73571f;height:8pt;&quot;|28
|style=&quot;background:#7b5f23;height:8pt;&quot;|29
|style=&quot;background:#836723;height:8pt;&quot;|30
|style=&quot;background:#8f6f23;height:8pt;&quot;|31
|-
|style=&quot;color:black;text-align:right;&quot;|Light blue (2)
|style=&quot;background:#0b0b0f;height:8pt;&quot;|32
|style=&quot;background:#13131b;height:8pt;&quot;|33
|style=&quot;background:#1b1b27;height:8pt;&quot;|34
|style=&quot;background:#272733;height:8pt;&quot;|35
|style=&quot;background:#2f2f3f;height:8pt;&quot;|36
|style=&quot;background:#37374b;height:8pt;&quot;|37
|style=&quot;background:#3f3f57;height:8pt;&quot;|38
|style=&quot;background:#474767;height:8pt;&quot;|39
|style=&quot;background:#4f4f73;height:8pt;&quot;|40
|style=&quot;background:#5b5b7f;height:8pt;&quot;|41
|style=&quot;background:#63638b;height:8pt;&quot;|42
|style=&quot;background:#6b6b97;height:8pt;&quot;|43
|style=&quot;background:#7373a3;height:8pt;&quot;|44
|style=&quot;background:#7b7baf;height:8pt;&quot;|45
|style=&quot;background:#8383bb;height:8pt;&quot;|46
|style=&quot;background:#8b8bcb;height:8pt;&quot;|47
|-
|style=&quot;color:black;text-align:right;&quot;|Green (3)
|style=&quot;background:#000000;height:8pt;&quot;|48
|style=&quot;background:#070700;height:8pt;&quot;|49
|style=&quot;background:#0b0b00;height:8pt;&quot;|50
|style=&quot;background:#131300;height:8pt;&quot;|51
|style=&quot;background:#1b1b00;height:8pt;&quot;|52
|style=&quot;background:#232300;height:8pt;&quot;|53
|style=&quot;background:#2b2b07;height:8pt;&quot;|54
|style=&quot;background:#2f2f07;height:8pt;&quot;|55
|style=&quot;background:#373707;height:8pt;&quot;|56
|style=&quot;background:#3f3f07;height:8pt;&quot;|57
|style=&quot;background:#474707;height:8pt;&quot;|58
|style=&quot;background:#4b4b0b;height:8pt;&quot;|59
|style=&quot;background:#53530b;height:8pt;&quot;|60
|style=&quot;background:#5b5b0b;height:8pt;&quot;|61
|style=&quot;background:#63630b;height:8pt;&quot;|62
|style=&quot;background:#6b6b0f;height:8pt;&quot;|63
|-
|style=&quot;color:black;text-align:right;&quot;|Red (4)
|style=&quot;background:#070000;height:8pt;&quot;|64
|style=&quot;background:#0f0000;height:8pt;&quot;|65
|style=&quot;background:#170000;height:8pt;&quot;|66
|style=&quot;background:#1f0000;height:8pt;&quot;|67
|style=&quot;background:#270000;height:8pt;&quot;|68
|style=&quot;background:#2f0000;height:8pt;&quot;|69
|style=&quot;background:#370000;height:8pt;&quot;|70
|style=&quot;background:#3f0000;height:8pt;&quot;|71
|style=&quot;background:#470000;height:8pt;&quot;|72
|style=&quot;background:#4f0000;height:8pt;&quot;|73
|style=&quot;background:#570000;height:8pt;&quot;|74
|style=&quot;background:#5f0000;height:8pt;&quot;|75
|style=&quot;background:#670000;height:8pt;&quot;|76
|style=&quot;background:#6f0000;height:8pt;&quot;|77
|style=&quot;background:#770000;height:8pt;&quot;|78
|style=&quot;background:#7f0000;height:8pt;&quot;|79
|-
|style=&quot;color:black;text-align:right;&quot;|Orange (5)
|style=&quot;background:#131300;height:8pt;&quot;|80
|style=&quot;background:#1b1b00;height:8pt;&quot;|81
|style=&quot;background:#232300;height:8pt;&quot;|82
|style=&quot;background:#2f2b00;height:8pt;&quot;|83
|style=&quot;background:#372f00;height:8pt;&quot;|84
|style=&quot;background:#433700;height:8pt;&quot;|85
|style=&quot;background:#4b3b07;height:8pt;&quot;|86
|style=&quot;background:#574307;height:8pt;&quot;|87
|style=&quot;background:#5f4707;height:8pt;&quot;|88
|style=&quot;background:#6b4b0b;height:8pt;&quot;|89
|style=&quot;background:#77530f;height:8pt;&quot;|90
|style=&quot;background:#835713;height:8pt;&quot;|91
|style=&quot;background:#8b5b13;height:8pt;&quot;|92
|style=&quot;background:#975f1b;height:8pt;&quot;|93
|style=&quot;background:#a3631f;height:8pt;&quot;|94
|style=&quot;background:#af6723;height:8pt;&quot;|95
|-
|style=&quot;color:black;text-align:right;&quot;|Gold (6)
|style=&quot;background:#231307;height:8pt;&quot;|96
|style=&quot;background:#2f170b;height:8pt;&quot;|97
|style=&quot;background:#3b1f0f;height:8pt;&quot;|98
|style=&quot;background:#4b2313;height:8pt;&quot;|99
|style=&quot;background:#572b17;height:8pt;&quot;|100
|style=&quot;background:#632f1f;height:8pt;&quot;|101
|style=&quot;background:#733723;height:8pt;&quot;|102
|style=&quot;background:#7f3b2b;height:8pt;&quot;|103
|style=&quot;background:#8f4333;height:8pt;&quot;|104
|style=&quot;background:#9f4f33;height:8pt;&quot;|105
|style=&quot;background:#af632f;height:8pt;&quot;|106
|style=&quot;background:#bf772f;height:8pt;&quot;|107
|style=&quot;background:#cf8f2b;height:8pt;&quot;|108
|style=&quot;background:#dfab27;height:8pt;&quot;|109
|style=&quot;background:#efcb1f;height:8pt;&quot;|110
|style=&quot;background:#fff31b;height:8pt;color:black;&quot;|111
|-
|style=&quot;color:black;text-align:right;&quot;|Peach (7)
|style=&quot;background:#0b0700;height:8pt;&quot;|112
|style=&quot;background:#1b1300;height:8pt;&quot;|113
|style=&quot;background:#2b230f;height:8pt;&quot;|114
|style=&quot;background:#372b13;height:8pt;&quot;|115
|style=&quot;background:#47331b;height:8pt;&quot;|116
|style=&quot;background:#533723;height:8pt;&quot;|117
|style=&quot;background:#633f2b;height:8pt;&quot;|118
|style=&quot;background:#6f4733;height:8pt;&quot;|119
|style=&quot;background:#7f533f;height:8pt;&quot;|120
|style=&quot;background:#8b5f47;height:8pt;&quot;|121
|style=&quot;background:#9b6b53;height:8pt;&quot;|122
|style=&quot;background:#a77b5f;height:8pt;&quot;|123
|style=&quot;background:#b7876b;height:8pt;&quot;|124
|style=&quot;background:#c3937b;height:8pt;&quot;|125
|style=&quot;background:#d3a38b;height:8pt;&quot;|126
|style=&quot;background:#e3b397;height:8pt;&quot;|127
|-
|style=&quot;color:black;text-align:right;&quot;|Purple (8)
|style=&quot;background:#ab8ba3;height:8pt;&quot;|128
|style=&quot;background:#9f7f97;height:8pt;&quot;|129
|style=&quot;background:#937387;height:8pt;&quot;|130
|style=&quot;background:#8b677b;height:8pt;&quot;|131
|style=&quot;background:#7f5b6f;height:8pt;&quot;|132
|style=&quot;background:#775363;height:8pt;&quot;|133
|style=&quot;background:#6b4b57;height:8pt;&quot;|134
|style=&quot;background:#5f3f4b;height:8pt;&quot;|135
|style=&quot;background:#573743;height:8pt;&quot;|136
|style=&quot;background:#4b2f37;height:8pt;&quot;|137
|style=&quot;background:#43272f;height:8pt;&quot;|138
|style=&quot;background:#371f23;height:8pt;&quot;|139
|style=&quot;background:#2b171b;height:8pt;&quot;|140
|style=&quot;background:#231313;height:8pt;&quot;|141
|style=&quot;background:#170b0b;height:8pt;&quot;|142
|style=&quot;background:#0f0707;height:8pt;&quot;|143
|-
|style=&quot;color:black;text-align:right;&quot;|Magenta (9)
|style=&quot;background:#bb739f;height:8pt;&quot;|144
|style=&quot;background:#af6b8f;height:8pt;&quot;|145
|style=&quot;background:#a35f83;height:8pt;&quot;|146
|style=&quot;background:#975777;height:8pt;&quot;|147
|style=&quot;background:#8b4f6b;height:8pt;&quot;|148
|style=&quot;background:#7f4b5f;height:8pt;&quot;|149
|style=&quot;background:#734353;height:8pt;&quot;|150
|style=&quot;background:#6b3b4b;height:8pt;&quot;|151
|style=&quot;background:#5f333f;height:8pt;&quot;|152
|style=&quot;background:#532b37;height:8pt;&quot;|153
|style=&quot;background:#47232b;height:8pt;&quot;|154
|style=&quot;background:#3b1f23;height:8pt;&quot;|155
|style=&quot;background:#2f171b;height:8pt;&quot;|156
|style=&quot;background:#231313;height:8pt;&quot;|157
|style=&quot;background:#170b0b;height:8pt;&quot;|158
|style=&quot;background:#0f0707;height:8pt;&quot;|159
|-
|style=&quot;color:black;text-align:right;&quot;|Tan (10)
|style=&quot;background:#dbc3bb;height:8pt;&quot;|160
|style=&quot;background:#cbb3a7;height:8pt;&quot;|161
|style=&quot;background:#bfa39b;height:8pt;&quot;|162
|style=&quot;background:#af978b;height:8pt;&quot;|163
|style=&quot;background:#a3877b;height:8pt;&quot;|164
|style=&quot;background:#977b6f;height:8pt;&quot;|165
|style=&quot;background:#876f5f;height:8pt;&quot;|166
|style=&quot;background:#7b6353;height:8pt;&quot;|167
|style=&quot;background:#6b5747;height:8pt;&quot;|168
|style=&quot;background:#5f4b3b;height:8pt;&quot;|169
|style=&quot;background:#533f33;height:8pt;&quot;|170
|style=&quot;background:#433327;height:8pt;&quot;|171
|style=&quot;background:#372b1f;height:8pt;&quot;|172
|style=&quot;background:#271f17;height:8pt;&quot;|173
|style=&quot;background:#1b130f;height:8pt;&quot;|174
|style=&quot;background:#0f0b07;height:8pt;&quot;|175
|-
|style=&quot;color:black;text-align:right;&quot;|Light green (11)
|style=&quot;background:#6f837b;height:8pt;&quot;|176
|style=&quot;background:#677b6f;height:8pt;&quot;|177
|style=&quot;background:#5f7367;height:8pt;&quot;|178
|style=&quot;background:#576b5f;height:8pt;&quot;|179
|style=&quot;background:#4f6357;height:8pt;&quot;|180
|style=&quot;background:#475b4f;height:8pt;&quot;|181
|style=&quot;background:#3f5347;height:8pt;&quot;|182
|style=&quot;background:#374b3f;height:8pt;&quot;|183
|style=&quot;background:#2f4337;height:8pt;&quot;|184
|style=&quot;background:#2b3b2f;height:8pt;&quot;|185
|style=&quot;background:#233327;height:8pt;&quot;|186
|style=&quot;background:#1f2b1f;height:8pt;&quot;|187
|style=&quot;background:#172317;height:8pt;&quot;|188
|style=&quot;background:#0f1b13;height:8pt;&quot;|189
|style=&quot;background:#0b130b;height:8pt;&quot;|190
|style=&quot;background:#070b07;height:8pt;&quot;|191
|-
|style=&quot;color:black;text-align:right;&quot;|Yellow (12)
|style=&quot;background:#fff31b;height:8pt;color:black;&quot;|192
|style=&quot;background:#efdf17;height:8pt;color:black;&quot;|193
|style=&quot;background:#dbcb13;height:8pt;&quot;|194
|style=&quot;background:#cbb70f;height:8pt;&quot;|195
|style=&quot;background:#bba70f;height:8pt;&quot;|196
|style=&quot;background:#ab970b;height:8pt;&quot;|197
|style=&quot;background:#9b8307;height:8pt;&quot;|198
|style=&quot;background:#8b7307;height:8pt;&quot;|199
|style=&quot;background:#7b6307;height:8pt;&quot;|200
|style=&quot;background:#6b5300;height:8pt;&quot;|201
|style=&quot;background:#5b4700;height:8pt;&quot;|202
|style=&quot;background:#4b3700;height:8pt;&quot;|203
|style=&quot;background:#3b2b00;height:8pt;&quot;|204
|style=&quot;background:#2b1f00;height:8pt;&quot;|205
|style=&quot;background:#1b0f00;height:8pt;&quot;|206
|style=&quot;background:#0b0700;height:8pt;&quot;|207
|-
|style=&quot;color:black;text-align:right;&quot;|Blue (13)
|style=&quot;background:#0000ff;height:8pt;&quot;|208
|style=&quot;background:#0b0bef;height:8pt;&quot;|209
|style=&quot;background:#1313df;height:8pt;&quot;|210
|style=&quot;background:#1b1bcf;height:8pt;&quot;|211
|style=&quot;background:#2323bf;height:8pt;&quot;|212
|style=&quot;background:#2b2baf;height:8pt;&quot;|213
|style=&quot;background:#2f2f9f;height:8pt;&quot;|214
|style=&quot;background:#2f2f8f;height:8pt;&quot;|215
|style=&quot;background:#2f2f7f;height:8pt;&quot;|216
|style=&quot;background:#2f2f6f;height:8pt;&quot;|217
|style=&quot;background:#2f2f5f;height:8pt;&quot;|218
|style=&quot;background:#2b2b4f;height:8pt;&quot;|219
|style=&quot;background:#23233f;height:8pt;&quot;|220
|style=&quot;background:#1b1b2f;height:8pt;&quot;|221
|style=&quot;background:#13131f;height:8pt;&quot;|222
|style=&quot;background:#0b0b0f;height:8pt;&quot;|223
|-
|style=&quot;color:black;text-align:right;&quot;|Fire (14)
|style=&quot;background:#2b0000;height:8pt;&quot;|224
|style=&quot;background:#3b0000;height:8pt;&quot;|225
|style=&quot;background:#4b0700;height:8pt;&quot;|226
|style=&quot;background:#5f0700;height:8pt;&quot;|227
|style=&quot;background:#6f0f00;height:8pt;&quot;|228
|style=&quot;background:#7f1707;height:8pt;&quot;|229
|style=&quot;background:#931f07;height:8pt;&quot;|230
|style=&quot;background:#a3270b;height:8pt;&quot;|231
|style=&quot;background:#b7330f;height:8pt;&quot;|232
|style=&quot;background:#c34b1b;height:8pt;&quot;|233
|style=&quot;background:#cf632b;height:8pt;&quot;|234
|style=&quot;background:#db7f3b;height:8pt;&quot;|235
|style=&quot;background:#e3974f;height:8pt;&quot;|236
|style=&quot;background:#e7ab5f;height:8pt;&quot;|237
|style=&quot;background:#efbf77;height:8pt;&quot;|238
|style=&quot;background:#f7d38b;height:8pt;color:black;&quot;|239
|-
|style=&quot;color:black;text-align:right;&quot;|Brights (15)
|style=&quot;background:#a77b3b;height:8pt;&quot;|240
|style=&quot;background:#b79b37;height:8pt;&quot;|241
|style=&quot;background:#c7c337;height:8pt;&quot;|242
|style=&quot;background:#e7e357;height:8pt;color:black;&quot;|243
|style=&quot;background:#7fbfff;height:8pt;color:black;&quot;|244
|style=&quot;background:#abe7ff;height:8pt;color:black;&quot;|245
|style=&quot;background:#d7ffff;height:8pt;color:black;&quot;|246
|style=&quot;background:#670000;height:8pt;&quot;|247
|style=&quot;background:#8b0000;height:8pt;&quot;|248
|style=&quot;background:#b30000;height:8pt;&quot;|249
|style=&quot;background:#d70000;height:8pt;&quot;|250
|style=&quot;background:#ff0000;height:8pt;&quot;|251
|style=&quot;background:#fff393;height:8pt;color:black;&quot;|252
|style=&quot;background:#fff7c7;height:8pt;color:black;&quot;|253
|style=&quot;background:#ffffff;height:8pt;color:black;&quot;|254
|style=&quot;background:#9f5b53;height:8pt;&quot;|255
|-
|}

Color 255 is transparent for sprites, 2d lmps, and gfx.wad entries (excluding [[conchars]], in which case it is black (color 0) that's made transparent). It is important that palette index 0 is black. The parameters for the [[color]] console command are the row #, but is restricted to rows 0 - 13.

It is important that the latter 8 palette rows are &quot;backwards&quot; (light-to-dark instead of dark-to-light). It appears that the [[id Software|ID]] artists did this for no good reason in the original Quake palette, and the engine programmers were forced to add a hack to accommodate it (along with the comment &quot;the artists made some backwards ranges. sigh&quot;). The only area this affects is player shirt/pants color translation (where one palette row must be mapped to another).

=== palette.lmp ===
The palette is stored in gfx/palette.lmp. It consists of 256 RGB values, coming out to 768 bytes in total.

=== Download ===
* [[Image:quake_palette.zip]] - The Quake palette in 3 formats: JASC (text), Microsoft (RIFF), and raw (768-byte lump of RGB values).

== Colormap ==
[[Image:Colormap.png|right|thumb|The Quake colormap.]]

The colormap is a table used for lighting in software Quake engines. It contains a column of 64 values for each palette color. Each value is an index into the palette representing as closely as possible the original color brightened or darkened: shade 0 is double bright, shade 32 is the original color, and shade 63 is black.

&quot;Fullbright&quot; colors are those which are not lit in the colormap, simply using the original color for all 64 shades. These colors, when used in textures and model skins, will not be affected by lighting. Fullbrights are used for things like fire and glowing lights. In Quake these are the last 32 colors in the palette.

Since the [[GLQuake]] engine ignores the colormap, it doesn't support fullbrights. Most user-modified engines have fixed this problem, being hard-coded to treat the last 32 colors as fullbright. For this reason, you shouldn't generate a colormap with a different amount of fullbrights, since it will work in software engines but not in modern GL engines.

=== colormap.lmp ===
The colormap is stored in gfx/colormap.lmp. The version included with Quake is 16385 bytes. Since the colormap only requires 16384 bytes (256 * 64), I'm not exactly sure what the extra byte (&lt;tt&gt;0x20&lt;/tt&gt;) at the end is for.

=== Generating the colormap ===
The following C code will generate a colormap.lmp that is nearly (but not exactly) identical to the Quake colormap. Sorry about the lack of comments, maybe I'll add some later. Consider it public domain.

 /* sample a 24-bit RGB value to one of the colours on the existing 8-bit palette */
 unsigned char convert_24_to_8(const unsigned char palette[768], const int rgb[3])
 {
   int i, j;
   int best_index = -1;
   int best_dist = 0;
 
   for (i = 0; i &lt; 256; i++)
   {
     int dist = 0;
 
     for (j = 0; j &lt; 3; j++)
     {
     /* note that we could use RGB luminosity bias for greater accuracy, but quake's colormap apparently didn't do this */
       int d = abs(rgb[j] - palette[i*3+j]);
       dist += d * d;
     }
 
     if (best_index == -1 || dist &lt; best_dist)
     {
       best_index = i;
       best_dist = dist;
     }
   }
 
   return (unsigned char)best_index;
 }
 
 void generate_colormap(const unsigned char palette[768], unsigned char out_colormap[16384])
 {
   int num_fullbrights = 32; /* the last 32 colours will be full bright */
   int x, y, i;
 
   for (x = 0; x &lt; 256; x++)
   {
     for (y = 0; y &lt; 64; y++)
     {
       if (x &lt; 256 - num_fullbrights)
       {
         int rgb[3];
 
         for (i = 0; i &lt; 3; i++)
         {
           rgb[i] = (palette[x*3+i] * (63 - y) + 16) &gt;&gt; 5; /* divide by 32, rounding to nearest integer */
           if (rgb[i] &gt; 255)
             rgb[i] = 255;
         }
 
         out_colormap[y*256+x] = convert_24_to_8(palette, rgb);
       }
       else
       {
       /* this colour is a fullbright, just keep the original colour */
         out_colormap[y*256+x] = x;
       }
     }
   }
 }

== Legal status ==
John Carmack officially put palette.lmp in the public domain to make Quake ports easier, so it is legal to, for example, embed it right into an engine executable. Colormap.lmp can also be considered public domain as it is trivially derived from the palette.

== Related Info ==
* Most engine mods use 32-bit colour, so you need not worry about palettes. With 32-bit textures, shirt/pants colour changing and fullbrights are only possible if engines support a new implementation of them, for example [[DarkPlaces]]'s [[DP_GFX_EXTERNALTEXTURES]] extension, which allows additional _glow, _pants, _shirt, etc textures on top of the main one)</text>
      <sha1>2ellix0dj3x6badmqx2fvqhm483e24k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2686</id>
      <parentid>1481</parentid>
      <timestamp>2013-03-30T11:15:26Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>/* palette.lmp */</comment>
      <text xml:space="preserve" bytes="17077">__NOTOC__[[Image:Qpalette.png|right|thumb|The Quake palette.]]
{|style=&quot;color:white;font-weight:bold;font-size:8pt;text-align:center;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot;
|-
|style=&quot;color:black;text-align:right;&quot;|White (0)
|style=&quot;background:#000000;height:8pt;&quot;|0
|style=&quot;background:#0f0f0f;height:8pt;&quot;|1
|style=&quot;background:#1f1f1f;height:8pt;&quot;|2
|style=&quot;background:#2f2f2f;height:8pt;&quot;|3
|style=&quot;background:#3f3f3f;height:8pt;&quot;|4
|style=&quot;background:#4b4b4b;height:8pt;&quot;|5
|style=&quot;background:#5b5b5b;height:8pt;&quot;|6
|style=&quot;background:#6b6b6b;height:8pt;&quot;|7
|style=&quot;background:#7b7b7b;height:8pt;&quot;|8
|style=&quot;background:#8b8b8b;height:8pt;&quot;|9
|style=&quot;background:#9b9b9b;height:8pt;&quot;|10
|style=&quot;background:#ababab;height:8pt;&quot;|11
|style=&quot;background:#bbbbbb;height:8pt;&quot;|12
|style=&quot;background:#cbcbcb;height:8pt;&quot;|13
|style=&quot;background:#dbdbdb;height:8pt;&quot;|14
|style=&quot;background:#ebebeb;height:8pt;color:black;&quot;|15
|-
|style=&quot;color:black;text-align:right;&quot;|Brown (1)
|style=&quot;background:#0f0b07;height:8pt;&quot;|16
|style=&quot;background:#170f0b;height:8pt;&quot;|17
|style=&quot;background:#1f170b;height:8pt;&quot;|18
|style=&quot;background:#271b0f;height:8pt;&quot;|19
|style=&quot;background:#2f2313;height:8pt;&quot;|20
|style=&quot;background:#372b17;height:8pt;&quot;|21
|style=&quot;background:#3f2f17;height:8pt;&quot;|22
|style=&quot;background:#4b371b;height:8pt;&quot;|23
|style=&quot;background:#533b1b;height:8pt;&quot;|24
|style=&quot;background:#5b431f;height:8pt;&quot;|25
|style=&quot;background:#634b1f;height:8pt;&quot;|26
|style=&quot;background:#6b531f;height:8pt;&quot;|27
|style=&quot;background:#73571f;height:8pt;&quot;|28
|style=&quot;background:#7b5f23;height:8pt;&quot;|29
|style=&quot;background:#836723;height:8pt;&quot;|30
|style=&quot;background:#8f6f23;height:8pt;&quot;|31
|-
|style=&quot;color:black;text-align:right;&quot;|Light blue (2)
|style=&quot;background:#0b0b0f;height:8pt;&quot;|32
|style=&quot;background:#13131b;height:8pt;&quot;|33
|style=&quot;background:#1b1b27;height:8pt;&quot;|34
|style=&quot;background:#272733;height:8pt;&quot;|35
|style=&quot;background:#2f2f3f;height:8pt;&quot;|36
|style=&quot;background:#37374b;height:8pt;&quot;|37
|style=&quot;background:#3f3f57;height:8pt;&quot;|38
|style=&quot;background:#474767;height:8pt;&quot;|39
|style=&quot;background:#4f4f73;height:8pt;&quot;|40
|style=&quot;background:#5b5b7f;height:8pt;&quot;|41
|style=&quot;background:#63638b;height:8pt;&quot;|42
|style=&quot;background:#6b6b97;height:8pt;&quot;|43
|style=&quot;background:#7373a3;height:8pt;&quot;|44
|style=&quot;background:#7b7baf;height:8pt;&quot;|45
|style=&quot;background:#8383bb;height:8pt;&quot;|46
|style=&quot;background:#8b8bcb;height:8pt;&quot;|47
|-
|style=&quot;color:black;text-align:right;&quot;|Green (3)
|style=&quot;background:#000000;height:8pt;&quot;|48
|style=&quot;background:#070700;height:8pt;&quot;|49
|style=&quot;background:#0b0b00;height:8pt;&quot;|50
|style=&quot;background:#131300;height:8pt;&quot;|51
|style=&quot;background:#1b1b00;height:8pt;&quot;|52
|style=&quot;background:#232300;height:8pt;&quot;|53
|style=&quot;background:#2b2b07;height:8pt;&quot;|54
|style=&quot;background:#2f2f07;height:8pt;&quot;|55
|style=&quot;background:#373707;height:8pt;&quot;|56
|style=&quot;background:#3f3f07;height:8pt;&quot;|57
|style=&quot;background:#474707;height:8pt;&quot;|58
|style=&quot;background:#4b4b0b;height:8pt;&quot;|59
|style=&quot;background:#53530b;height:8pt;&quot;|60
|style=&quot;background:#5b5b0b;height:8pt;&quot;|61
|style=&quot;background:#63630b;height:8pt;&quot;|62
|style=&quot;background:#6b6b0f;height:8pt;&quot;|63
|-
|style=&quot;color:black;text-align:right;&quot;|Red (4)
|style=&quot;background:#070000;height:8pt;&quot;|64
|style=&quot;background:#0f0000;height:8pt;&quot;|65
|style=&quot;background:#170000;height:8pt;&quot;|66
|style=&quot;background:#1f0000;height:8pt;&quot;|67
|style=&quot;background:#270000;height:8pt;&quot;|68
|style=&quot;background:#2f0000;height:8pt;&quot;|69
|style=&quot;background:#370000;height:8pt;&quot;|70
|style=&quot;background:#3f0000;height:8pt;&quot;|71
|style=&quot;background:#470000;height:8pt;&quot;|72
|style=&quot;background:#4f0000;height:8pt;&quot;|73
|style=&quot;background:#570000;height:8pt;&quot;|74
|style=&quot;background:#5f0000;height:8pt;&quot;|75
|style=&quot;background:#670000;height:8pt;&quot;|76
|style=&quot;background:#6f0000;height:8pt;&quot;|77
|style=&quot;background:#770000;height:8pt;&quot;|78
|style=&quot;background:#7f0000;height:8pt;&quot;|79
|-
|style=&quot;color:black;text-align:right;&quot;|Orange (5)
|style=&quot;background:#131300;height:8pt;&quot;|80
|style=&quot;background:#1b1b00;height:8pt;&quot;|81
|style=&quot;background:#232300;height:8pt;&quot;|82
|style=&quot;background:#2f2b00;height:8pt;&quot;|83
|style=&quot;background:#372f00;height:8pt;&quot;|84
|style=&quot;background:#433700;height:8pt;&quot;|85
|style=&quot;background:#4b3b07;height:8pt;&quot;|86
|style=&quot;background:#574307;height:8pt;&quot;|87
|style=&quot;background:#5f4707;height:8pt;&quot;|88
|style=&quot;background:#6b4b0b;height:8pt;&quot;|89
|style=&quot;background:#77530f;height:8pt;&quot;|90
|style=&quot;background:#835713;height:8pt;&quot;|91
|style=&quot;background:#8b5b13;height:8pt;&quot;|92
|style=&quot;background:#975f1b;height:8pt;&quot;|93
|style=&quot;background:#a3631f;height:8pt;&quot;|94
|style=&quot;background:#af6723;height:8pt;&quot;|95
|-
|style=&quot;color:black;text-align:right;&quot;|Gold (6)
|style=&quot;background:#231307;height:8pt;&quot;|96
|style=&quot;background:#2f170b;height:8pt;&quot;|97
|style=&quot;background:#3b1f0f;height:8pt;&quot;|98
|style=&quot;background:#4b2313;height:8pt;&quot;|99
|style=&quot;background:#572b17;height:8pt;&quot;|100
|style=&quot;background:#632f1f;height:8pt;&quot;|101
|style=&quot;background:#733723;height:8pt;&quot;|102
|style=&quot;background:#7f3b2b;height:8pt;&quot;|103
|style=&quot;background:#8f4333;height:8pt;&quot;|104
|style=&quot;background:#9f4f33;height:8pt;&quot;|105
|style=&quot;background:#af632f;height:8pt;&quot;|106
|style=&quot;background:#bf772f;height:8pt;&quot;|107
|style=&quot;background:#cf8f2b;height:8pt;&quot;|108
|style=&quot;background:#dfab27;height:8pt;&quot;|109
|style=&quot;background:#efcb1f;height:8pt;&quot;|110
|style=&quot;background:#fff31b;height:8pt;color:black;&quot;|111
|-
|style=&quot;color:black;text-align:right;&quot;|Peach (7)
|style=&quot;background:#0b0700;height:8pt;&quot;|112
|style=&quot;background:#1b1300;height:8pt;&quot;|113
|style=&quot;background:#2b230f;height:8pt;&quot;|114
|style=&quot;background:#372b13;height:8pt;&quot;|115
|style=&quot;background:#47331b;height:8pt;&quot;|116
|style=&quot;background:#533723;height:8pt;&quot;|117
|style=&quot;background:#633f2b;height:8pt;&quot;|118
|style=&quot;background:#6f4733;height:8pt;&quot;|119
|style=&quot;background:#7f533f;height:8pt;&quot;|120
|style=&quot;background:#8b5f47;height:8pt;&quot;|121
|style=&quot;background:#9b6b53;height:8pt;&quot;|122
|style=&quot;background:#a77b5f;height:8pt;&quot;|123
|style=&quot;background:#b7876b;height:8pt;&quot;|124
|style=&quot;background:#c3937b;height:8pt;&quot;|125
|style=&quot;background:#d3a38b;height:8pt;&quot;|126
|style=&quot;background:#e3b397;height:8pt;&quot;|127
|-
|style=&quot;color:black;text-align:right;&quot;|Purple (8)
|style=&quot;background:#ab8ba3;height:8pt;&quot;|128
|style=&quot;background:#9f7f97;height:8pt;&quot;|129
|style=&quot;background:#937387;height:8pt;&quot;|130
|style=&quot;background:#8b677b;height:8pt;&quot;|131
|style=&quot;background:#7f5b6f;height:8pt;&quot;|132
|style=&quot;background:#775363;height:8pt;&quot;|133
|style=&quot;background:#6b4b57;height:8pt;&quot;|134
|style=&quot;background:#5f3f4b;height:8pt;&quot;|135
|style=&quot;background:#573743;height:8pt;&quot;|136
|style=&quot;background:#4b2f37;height:8pt;&quot;|137
|style=&quot;background:#43272f;height:8pt;&quot;|138
|style=&quot;background:#371f23;height:8pt;&quot;|139
|style=&quot;background:#2b171b;height:8pt;&quot;|140
|style=&quot;background:#231313;height:8pt;&quot;|141
|style=&quot;background:#170b0b;height:8pt;&quot;|142
|style=&quot;background:#0f0707;height:8pt;&quot;|143
|-
|style=&quot;color:black;text-align:right;&quot;|Magenta (9)
|style=&quot;background:#bb739f;height:8pt;&quot;|144
|style=&quot;background:#af6b8f;height:8pt;&quot;|145
|style=&quot;background:#a35f83;height:8pt;&quot;|146
|style=&quot;background:#975777;height:8pt;&quot;|147
|style=&quot;background:#8b4f6b;height:8pt;&quot;|148
|style=&quot;background:#7f4b5f;height:8pt;&quot;|149
|style=&quot;background:#734353;height:8pt;&quot;|150
|style=&quot;background:#6b3b4b;height:8pt;&quot;|151
|style=&quot;background:#5f333f;height:8pt;&quot;|152
|style=&quot;background:#532b37;height:8pt;&quot;|153
|style=&quot;background:#47232b;height:8pt;&quot;|154
|style=&quot;background:#3b1f23;height:8pt;&quot;|155
|style=&quot;background:#2f171b;height:8pt;&quot;|156
|style=&quot;background:#231313;height:8pt;&quot;|157
|style=&quot;background:#170b0b;height:8pt;&quot;|158
|style=&quot;background:#0f0707;height:8pt;&quot;|159
|-
|style=&quot;color:black;text-align:right;&quot;|Tan (10)
|style=&quot;background:#dbc3bb;height:8pt;&quot;|160
|style=&quot;background:#cbb3a7;height:8pt;&quot;|161
|style=&quot;background:#bfa39b;height:8pt;&quot;|162
|style=&quot;background:#af978b;height:8pt;&quot;|163
|style=&quot;background:#a3877b;height:8pt;&quot;|164
|style=&quot;background:#977b6f;height:8pt;&quot;|165
|style=&quot;background:#876f5f;height:8pt;&quot;|166
|style=&quot;background:#7b6353;height:8pt;&quot;|167
|style=&quot;background:#6b5747;height:8pt;&quot;|168
|style=&quot;background:#5f4b3b;height:8pt;&quot;|169
|style=&quot;background:#533f33;height:8pt;&quot;|170
|style=&quot;background:#433327;height:8pt;&quot;|171
|style=&quot;background:#372b1f;height:8pt;&quot;|172
|style=&quot;background:#271f17;height:8pt;&quot;|173
|style=&quot;background:#1b130f;height:8pt;&quot;|174
|style=&quot;background:#0f0b07;height:8pt;&quot;|175
|-
|style=&quot;color:black;text-align:right;&quot;|Light green (11)
|style=&quot;background:#6f837b;height:8pt;&quot;|176
|style=&quot;background:#677b6f;height:8pt;&quot;|177
|style=&quot;background:#5f7367;height:8pt;&quot;|178
|style=&quot;background:#576b5f;height:8pt;&quot;|179
|style=&quot;background:#4f6357;height:8pt;&quot;|180
|style=&quot;background:#475b4f;height:8pt;&quot;|181
|style=&quot;background:#3f5347;height:8pt;&quot;|182
|style=&quot;background:#374b3f;height:8pt;&quot;|183
|style=&quot;background:#2f4337;height:8pt;&quot;|184
|style=&quot;background:#2b3b2f;height:8pt;&quot;|185
|style=&quot;background:#233327;height:8pt;&quot;|186
|style=&quot;background:#1f2b1f;height:8pt;&quot;|187
|style=&quot;background:#172317;height:8pt;&quot;|188
|style=&quot;background:#0f1b13;height:8pt;&quot;|189
|style=&quot;background:#0b130b;height:8pt;&quot;|190
|style=&quot;background:#070b07;height:8pt;&quot;|191
|-
|style=&quot;color:black;text-align:right;&quot;|Yellow (12)
|style=&quot;background:#fff31b;height:8pt;color:black;&quot;|192
|style=&quot;background:#efdf17;height:8pt;color:black;&quot;|193
|style=&quot;background:#dbcb13;height:8pt;&quot;|194
|style=&quot;background:#cbb70f;height:8pt;&quot;|195
|style=&quot;background:#bba70f;height:8pt;&quot;|196
|style=&quot;background:#ab970b;height:8pt;&quot;|197
|style=&quot;background:#9b8307;height:8pt;&quot;|198
|style=&quot;background:#8b7307;height:8pt;&quot;|199
|style=&quot;background:#7b6307;height:8pt;&quot;|200
|style=&quot;background:#6b5300;height:8pt;&quot;|201
|style=&quot;background:#5b4700;height:8pt;&quot;|202
|style=&quot;background:#4b3700;height:8pt;&quot;|203
|style=&quot;background:#3b2b00;height:8pt;&quot;|204
|style=&quot;background:#2b1f00;height:8pt;&quot;|205
|style=&quot;background:#1b0f00;height:8pt;&quot;|206
|style=&quot;background:#0b0700;height:8pt;&quot;|207
|-
|style=&quot;color:black;text-align:right;&quot;|Blue (13)
|style=&quot;background:#0000ff;height:8pt;&quot;|208
|style=&quot;background:#0b0bef;height:8pt;&quot;|209
|style=&quot;background:#1313df;height:8pt;&quot;|210
|style=&quot;background:#1b1bcf;height:8pt;&quot;|211
|style=&quot;background:#2323bf;height:8pt;&quot;|212
|style=&quot;background:#2b2baf;height:8pt;&quot;|213
|style=&quot;background:#2f2f9f;height:8pt;&quot;|214
|style=&quot;background:#2f2f8f;height:8pt;&quot;|215
|style=&quot;background:#2f2f7f;height:8pt;&quot;|216
|style=&quot;background:#2f2f6f;height:8pt;&quot;|217
|style=&quot;background:#2f2f5f;height:8pt;&quot;|218
|style=&quot;background:#2b2b4f;height:8pt;&quot;|219
|style=&quot;background:#23233f;height:8pt;&quot;|220
|style=&quot;background:#1b1b2f;height:8pt;&quot;|221
|style=&quot;background:#13131f;height:8pt;&quot;|222
|style=&quot;background:#0b0b0f;height:8pt;&quot;|223
|-
|style=&quot;color:black;text-align:right;&quot;|Fire (14)
|style=&quot;background:#2b0000;height:8pt;&quot;|224
|style=&quot;background:#3b0000;height:8pt;&quot;|225
|style=&quot;background:#4b0700;height:8pt;&quot;|226
|style=&quot;background:#5f0700;height:8pt;&quot;|227
|style=&quot;background:#6f0f00;height:8pt;&quot;|228
|style=&quot;background:#7f1707;height:8pt;&quot;|229
|style=&quot;background:#931f07;height:8pt;&quot;|230
|style=&quot;background:#a3270b;height:8pt;&quot;|231
|style=&quot;background:#b7330f;height:8pt;&quot;|232
|style=&quot;background:#c34b1b;height:8pt;&quot;|233
|style=&quot;background:#cf632b;height:8pt;&quot;|234
|style=&quot;background:#db7f3b;height:8pt;&quot;|235
|style=&quot;background:#e3974f;height:8pt;&quot;|236
|style=&quot;background:#e7ab5f;height:8pt;&quot;|237
|style=&quot;background:#efbf77;height:8pt;&quot;|238
|style=&quot;background:#f7d38b;height:8pt;color:black;&quot;|239
|-
|style=&quot;color:black;text-align:right;&quot;|Brights (15)
|style=&quot;background:#a77b3b;height:8pt;&quot;|240
|style=&quot;background:#b79b37;height:8pt;&quot;|241
|style=&quot;background:#c7c337;height:8pt;&quot;|242
|style=&quot;background:#e7e357;height:8pt;color:black;&quot;|243
|style=&quot;background:#7fbfff;height:8pt;color:black;&quot;|244
|style=&quot;background:#abe7ff;height:8pt;color:black;&quot;|245
|style=&quot;background:#d7ffff;height:8pt;color:black;&quot;|246
|style=&quot;background:#670000;height:8pt;&quot;|247
|style=&quot;background:#8b0000;height:8pt;&quot;|248
|style=&quot;background:#b30000;height:8pt;&quot;|249
|style=&quot;background:#d70000;height:8pt;&quot;|250
|style=&quot;background:#ff0000;height:8pt;&quot;|251
|style=&quot;background:#fff393;height:8pt;color:black;&quot;|252
|style=&quot;background:#fff7c7;height:8pt;color:black;&quot;|253
|style=&quot;background:#ffffff;height:8pt;color:black;&quot;|254
|style=&quot;background:#9f5b53;height:8pt;&quot;|255
|-
|}

Color 255 is transparent for sprites, 2d lmps, and gfx.wad entries (excluding [[conchars]], in which case it is black (color 0) that's made transparent). It is important that palette index 0 is black. The parameters for the [[color]] console command are the row #, but is restricted to rows 0 - 13.

It is important that the latter 8 palette rows are &quot;backwards&quot; (light-to-dark instead of dark-to-light). It appears that the [[id Software|ID]] artists did this for no good reason in the original Quake palette, and the engine programmers were forced to add a hack to accommodate it (along with the comment &quot;the artists made some backwards ranges. sigh&quot;). The only area this affects is player shirt/pants color translation (where one palette row must be mapped to another).

=== palette.lmp ===
The palette is stored in gfx/palette.lmp. It consists of 256 RGB values using one byte per component, coming out to 768 bytes in total.

=== Download ===
* [[Image:quake_palette.zip]] - The Quake palette in 3 formats: JASC (text), Microsoft (RIFF), and raw (768-byte lump of RGB values).

== Colormap ==
[[Image:Colormap.png|right|thumb|The Quake colormap.]]

The colormap is a table used for lighting in software Quake engines. It contains a column of 64 values for each palette color. Each value is an index into the palette representing as closely as possible the original color brightened or darkened: shade 0 is double bright, shade 32 is the original color, and shade 63 is black.

&quot;Fullbright&quot; colors are those which are not lit in the colormap, simply using the original color for all 64 shades. These colors, when used in textures and model skins, will not be affected by lighting. Fullbrights are used for things like fire and glowing lights. In Quake these are the last 32 colors in the palette.

Since the [[GLQuake]] engine ignores the colormap, it doesn't support fullbrights. Most user-modified engines have fixed this problem, being hard-coded to treat the last 32 colors as fullbright. For this reason, you shouldn't generate a colormap with a different amount of fullbrights, since it will work in software engines but not in modern GL engines.

=== colormap.lmp ===
The colormap is stored in gfx/colormap.lmp. The version included with Quake is 16385 bytes. Since the colormap only requires 16384 bytes (256 * 64), I'm not exactly sure what the extra byte (&lt;tt&gt;0x20&lt;/tt&gt;) at the end is for.

=== Generating the colormap ===
The following C code will generate a colormap.lmp that is nearly (but not exactly) identical to the Quake colormap. Sorry about the lack of comments, maybe I'll add some later. Consider it public domain.

 /* sample a 24-bit RGB value to one of the colours on the existing 8-bit palette */
 unsigned char convert_24_to_8(const unsigned char palette[768], const int rgb[3])
 {
   int i, j;
   int best_index = -1;
   int best_dist = 0;
 
   for (i = 0; i &lt; 256; i++)
   {
     int dist = 0;
 
     for (j = 0; j &lt; 3; j++)
     {
     /* note that we could use RGB luminosity bias for greater accuracy, but quake's colormap apparently didn't do this */
       int d = abs(rgb[j] - palette[i*3+j]);
       dist += d * d;
     }
 
     if (best_index == -1 || dist &lt; best_dist)
     {
       best_index = i;
       best_dist = dist;
     }
   }
 
   return (unsigned char)best_index;
 }
 
 void generate_colormap(const unsigned char palette[768], unsigned char out_colormap[16384])
 {
   int num_fullbrights = 32; /* the last 32 colours will be full bright */
   int x, y, i;
 
   for (x = 0; x &lt; 256; x++)
   {
     for (y = 0; y &lt; 64; y++)
     {
       if (x &lt; 256 - num_fullbrights)
       {
         int rgb[3];
 
         for (i = 0; i &lt; 3; i++)
         {
           rgb[i] = (palette[x*3+i] * (63 - y) + 16) &gt;&gt; 5; /* divide by 32, rounding to nearest integer */
           if (rgb[i] &gt; 255)
             rgb[i] = 255;
         }
 
         out_colormap[y*256+x] = convert_24_to_8(palette, rgb);
       }
       else
       {
       /* this colour is a fullbright, just keep the original colour */
         out_colormap[y*256+x] = x;
       }
     }
   }
 }

== Legal status ==
John Carmack officially put palette.lmp in the public domain to make Quake ports easier, so it is legal to, for example, embed it right into an engine executable. Colormap.lmp can also be considered public domain as it is trivially derived from the palette.

== Related Info ==
* Most engine mods use 32-bit colour, so you need not worry about palettes. With 32-bit textures, shirt/pants colour changing and fullbrights are only possible if engines support a new implementation of them, for example [[DarkPlaces]]'s [[DP_GFX_EXTERNALTEXTURES]] extension, which allows additional _glow, _pants, _shirt, etc textures on top of the main one)</text>
      <sha1>chklfp2htr7twgg0mswfox4h7lgr1hw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2688</id>
      <parentid>2686</parentid>
      <timestamp>2013-03-30T11:33:55Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>/* Legal status */</comment>
      <text xml:space="preserve" bytes="17096">__NOTOC__[[Image:Qpalette.png|right|thumb|The Quake palette.]]
{|style=&quot;color:white;font-weight:bold;font-size:8pt;text-align:center;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot;
|-
|style=&quot;color:black;text-align:right;&quot;|White (0)
|style=&quot;background:#000000;height:8pt;&quot;|0
|style=&quot;background:#0f0f0f;height:8pt;&quot;|1
|style=&quot;background:#1f1f1f;height:8pt;&quot;|2
|style=&quot;background:#2f2f2f;height:8pt;&quot;|3
|style=&quot;background:#3f3f3f;height:8pt;&quot;|4
|style=&quot;background:#4b4b4b;height:8pt;&quot;|5
|style=&quot;background:#5b5b5b;height:8pt;&quot;|6
|style=&quot;background:#6b6b6b;height:8pt;&quot;|7
|style=&quot;background:#7b7b7b;height:8pt;&quot;|8
|style=&quot;background:#8b8b8b;height:8pt;&quot;|9
|style=&quot;background:#9b9b9b;height:8pt;&quot;|10
|style=&quot;background:#ababab;height:8pt;&quot;|11
|style=&quot;background:#bbbbbb;height:8pt;&quot;|12
|style=&quot;background:#cbcbcb;height:8pt;&quot;|13
|style=&quot;background:#dbdbdb;height:8pt;&quot;|14
|style=&quot;background:#ebebeb;height:8pt;color:black;&quot;|15
|-
|style=&quot;color:black;text-align:right;&quot;|Brown (1)
|style=&quot;background:#0f0b07;height:8pt;&quot;|16
|style=&quot;background:#170f0b;height:8pt;&quot;|17
|style=&quot;background:#1f170b;height:8pt;&quot;|18
|style=&quot;background:#271b0f;height:8pt;&quot;|19
|style=&quot;background:#2f2313;height:8pt;&quot;|20
|style=&quot;background:#372b17;height:8pt;&quot;|21
|style=&quot;background:#3f2f17;height:8pt;&quot;|22
|style=&quot;background:#4b371b;height:8pt;&quot;|23
|style=&quot;background:#533b1b;height:8pt;&quot;|24
|style=&quot;background:#5b431f;height:8pt;&quot;|25
|style=&quot;background:#634b1f;height:8pt;&quot;|26
|style=&quot;background:#6b531f;height:8pt;&quot;|27
|style=&quot;background:#73571f;height:8pt;&quot;|28
|style=&quot;background:#7b5f23;height:8pt;&quot;|29
|style=&quot;background:#836723;height:8pt;&quot;|30
|style=&quot;background:#8f6f23;height:8pt;&quot;|31
|-
|style=&quot;color:black;text-align:right;&quot;|Light blue (2)
|style=&quot;background:#0b0b0f;height:8pt;&quot;|32
|style=&quot;background:#13131b;height:8pt;&quot;|33
|style=&quot;background:#1b1b27;height:8pt;&quot;|34
|style=&quot;background:#272733;height:8pt;&quot;|35
|style=&quot;background:#2f2f3f;height:8pt;&quot;|36
|style=&quot;background:#37374b;height:8pt;&quot;|37
|style=&quot;background:#3f3f57;height:8pt;&quot;|38
|style=&quot;background:#474767;height:8pt;&quot;|39
|style=&quot;background:#4f4f73;height:8pt;&quot;|40
|style=&quot;background:#5b5b7f;height:8pt;&quot;|41
|style=&quot;background:#63638b;height:8pt;&quot;|42
|style=&quot;background:#6b6b97;height:8pt;&quot;|43
|style=&quot;background:#7373a3;height:8pt;&quot;|44
|style=&quot;background:#7b7baf;height:8pt;&quot;|45
|style=&quot;background:#8383bb;height:8pt;&quot;|46
|style=&quot;background:#8b8bcb;height:8pt;&quot;|47
|-
|style=&quot;color:black;text-align:right;&quot;|Green (3)
|style=&quot;background:#000000;height:8pt;&quot;|48
|style=&quot;background:#070700;height:8pt;&quot;|49
|style=&quot;background:#0b0b00;height:8pt;&quot;|50
|style=&quot;background:#131300;height:8pt;&quot;|51
|style=&quot;background:#1b1b00;height:8pt;&quot;|52
|style=&quot;background:#232300;height:8pt;&quot;|53
|style=&quot;background:#2b2b07;height:8pt;&quot;|54
|style=&quot;background:#2f2f07;height:8pt;&quot;|55
|style=&quot;background:#373707;height:8pt;&quot;|56
|style=&quot;background:#3f3f07;height:8pt;&quot;|57
|style=&quot;background:#474707;height:8pt;&quot;|58
|style=&quot;background:#4b4b0b;height:8pt;&quot;|59
|style=&quot;background:#53530b;height:8pt;&quot;|60
|style=&quot;background:#5b5b0b;height:8pt;&quot;|61
|style=&quot;background:#63630b;height:8pt;&quot;|62
|style=&quot;background:#6b6b0f;height:8pt;&quot;|63
|-
|style=&quot;color:black;text-align:right;&quot;|Red (4)
|style=&quot;background:#070000;height:8pt;&quot;|64
|style=&quot;background:#0f0000;height:8pt;&quot;|65
|style=&quot;background:#170000;height:8pt;&quot;|66
|style=&quot;background:#1f0000;height:8pt;&quot;|67
|style=&quot;background:#270000;height:8pt;&quot;|68
|style=&quot;background:#2f0000;height:8pt;&quot;|69
|style=&quot;background:#370000;height:8pt;&quot;|70
|style=&quot;background:#3f0000;height:8pt;&quot;|71
|style=&quot;background:#470000;height:8pt;&quot;|72
|style=&quot;background:#4f0000;height:8pt;&quot;|73
|style=&quot;background:#570000;height:8pt;&quot;|74
|style=&quot;background:#5f0000;height:8pt;&quot;|75
|style=&quot;background:#670000;height:8pt;&quot;|76
|style=&quot;background:#6f0000;height:8pt;&quot;|77
|style=&quot;background:#770000;height:8pt;&quot;|78
|style=&quot;background:#7f0000;height:8pt;&quot;|79
|-
|style=&quot;color:black;text-align:right;&quot;|Orange (5)
|style=&quot;background:#131300;height:8pt;&quot;|80
|style=&quot;background:#1b1b00;height:8pt;&quot;|81
|style=&quot;background:#232300;height:8pt;&quot;|82
|style=&quot;background:#2f2b00;height:8pt;&quot;|83
|style=&quot;background:#372f00;height:8pt;&quot;|84
|style=&quot;background:#433700;height:8pt;&quot;|85
|style=&quot;background:#4b3b07;height:8pt;&quot;|86
|style=&quot;background:#574307;height:8pt;&quot;|87
|style=&quot;background:#5f4707;height:8pt;&quot;|88
|style=&quot;background:#6b4b0b;height:8pt;&quot;|89
|style=&quot;background:#77530f;height:8pt;&quot;|90
|style=&quot;background:#835713;height:8pt;&quot;|91
|style=&quot;background:#8b5b13;height:8pt;&quot;|92
|style=&quot;background:#975f1b;height:8pt;&quot;|93
|style=&quot;background:#a3631f;height:8pt;&quot;|94
|style=&quot;background:#af6723;height:8pt;&quot;|95
|-
|style=&quot;color:black;text-align:right;&quot;|Gold (6)
|style=&quot;background:#231307;height:8pt;&quot;|96
|style=&quot;background:#2f170b;height:8pt;&quot;|97
|style=&quot;background:#3b1f0f;height:8pt;&quot;|98
|style=&quot;background:#4b2313;height:8pt;&quot;|99
|style=&quot;background:#572b17;height:8pt;&quot;|100
|style=&quot;background:#632f1f;height:8pt;&quot;|101
|style=&quot;background:#733723;height:8pt;&quot;|102
|style=&quot;background:#7f3b2b;height:8pt;&quot;|103
|style=&quot;background:#8f4333;height:8pt;&quot;|104
|style=&quot;background:#9f4f33;height:8pt;&quot;|105
|style=&quot;background:#af632f;height:8pt;&quot;|106
|style=&quot;background:#bf772f;height:8pt;&quot;|107
|style=&quot;background:#cf8f2b;height:8pt;&quot;|108
|style=&quot;background:#dfab27;height:8pt;&quot;|109
|style=&quot;background:#efcb1f;height:8pt;&quot;|110
|style=&quot;background:#fff31b;height:8pt;color:black;&quot;|111
|-
|style=&quot;color:black;text-align:right;&quot;|Peach (7)
|style=&quot;background:#0b0700;height:8pt;&quot;|112
|style=&quot;background:#1b1300;height:8pt;&quot;|113
|style=&quot;background:#2b230f;height:8pt;&quot;|114
|style=&quot;background:#372b13;height:8pt;&quot;|115
|style=&quot;background:#47331b;height:8pt;&quot;|116
|style=&quot;background:#533723;height:8pt;&quot;|117
|style=&quot;background:#633f2b;height:8pt;&quot;|118
|style=&quot;background:#6f4733;height:8pt;&quot;|119
|style=&quot;background:#7f533f;height:8pt;&quot;|120
|style=&quot;background:#8b5f47;height:8pt;&quot;|121
|style=&quot;background:#9b6b53;height:8pt;&quot;|122
|style=&quot;background:#a77b5f;height:8pt;&quot;|123
|style=&quot;background:#b7876b;height:8pt;&quot;|124
|style=&quot;background:#c3937b;height:8pt;&quot;|125
|style=&quot;background:#d3a38b;height:8pt;&quot;|126
|style=&quot;background:#e3b397;height:8pt;&quot;|127
|-
|style=&quot;color:black;text-align:right;&quot;|Purple (8)
|style=&quot;background:#ab8ba3;height:8pt;&quot;|128
|style=&quot;background:#9f7f97;height:8pt;&quot;|129
|style=&quot;background:#937387;height:8pt;&quot;|130
|style=&quot;background:#8b677b;height:8pt;&quot;|131
|style=&quot;background:#7f5b6f;height:8pt;&quot;|132
|style=&quot;background:#775363;height:8pt;&quot;|133
|style=&quot;background:#6b4b57;height:8pt;&quot;|134
|style=&quot;background:#5f3f4b;height:8pt;&quot;|135
|style=&quot;background:#573743;height:8pt;&quot;|136
|style=&quot;background:#4b2f37;height:8pt;&quot;|137
|style=&quot;background:#43272f;height:8pt;&quot;|138
|style=&quot;background:#371f23;height:8pt;&quot;|139
|style=&quot;background:#2b171b;height:8pt;&quot;|140
|style=&quot;background:#231313;height:8pt;&quot;|141
|style=&quot;background:#170b0b;height:8pt;&quot;|142
|style=&quot;background:#0f0707;height:8pt;&quot;|143
|-
|style=&quot;color:black;text-align:right;&quot;|Magenta (9)
|style=&quot;background:#bb739f;height:8pt;&quot;|144
|style=&quot;background:#af6b8f;height:8pt;&quot;|145
|style=&quot;background:#a35f83;height:8pt;&quot;|146
|style=&quot;background:#975777;height:8pt;&quot;|147
|style=&quot;background:#8b4f6b;height:8pt;&quot;|148
|style=&quot;background:#7f4b5f;height:8pt;&quot;|149
|style=&quot;background:#734353;height:8pt;&quot;|150
|style=&quot;background:#6b3b4b;height:8pt;&quot;|151
|style=&quot;background:#5f333f;height:8pt;&quot;|152
|style=&quot;background:#532b37;height:8pt;&quot;|153
|style=&quot;background:#47232b;height:8pt;&quot;|154
|style=&quot;background:#3b1f23;height:8pt;&quot;|155
|style=&quot;background:#2f171b;height:8pt;&quot;|156
|style=&quot;background:#231313;height:8pt;&quot;|157
|style=&quot;background:#170b0b;height:8pt;&quot;|158
|style=&quot;background:#0f0707;height:8pt;&quot;|159
|-
|style=&quot;color:black;text-align:right;&quot;|Tan (10)
|style=&quot;background:#dbc3bb;height:8pt;&quot;|160
|style=&quot;background:#cbb3a7;height:8pt;&quot;|161
|style=&quot;background:#bfa39b;height:8pt;&quot;|162
|style=&quot;background:#af978b;height:8pt;&quot;|163
|style=&quot;background:#a3877b;height:8pt;&quot;|164
|style=&quot;background:#977b6f;height:8pt;&quot;|165
|style=&quot;background:#876f5f;height:8pt;&quot;|166
|style=&quot;background:#7b6353;height:8pt;&quot;|167
|style=&quot;background:#6b5747;height:8pt;&quot;|168
|style=&quot;background:#5f4b3b;height:8pt;&quot;|169
|style=&quot;background:#533f33;height:8pt;&quot;|170
|style=&quot;background:#433327;height:8pt;&quot;|171
|style=&quot;background:#372b1f;height:8pt;&quot;|172
|style=&quot;background:#271f17;height:8pt;&quot;|173
|style=&quot;background:#1b130f;height:8pt;&quot;|174
|style=&quot;background:#0f0b07;height:8pt;&quot;|175
|-
|style=&quot;color:black;text-align:right;&quot;|Light green (11)
|style=&quot;background:#6f837b;height:8pt;&quot;|176
|style=&quot;background:#677b6f;height:8pt;&quot;|177
|style=&quot;background:#5f7367;height:8pt;&quot;|178
|style=&quot;background:#576b5f;height:8pt;&quot;|179
|style=&quot;background:#4f6357;height:8pt;&quot;|180
|style=&quot;background:#475b4f;height:8pt;&quot;|181
|style=&quot;background:#3f5347;height:8pt;&quot;|182
|style=&quot;background:#374b3f;height:8pt;&quot;|183
|style=&quot;background:#2f4337;height:8pt;&quot;|184
|style=&quot;background:#2b3b2f;height:8pt;&quot;|185
|style=&quot;background:#233327;height:8pt;&quot;|186
|style=&quot;background:#1f2b1f;height:8pt;&quot;|187
|style=&quot;background:#172317;height:8pt;&quot;|188
|style=&quot;background:#0f1b13;height:8pt;&quot;|189
|style=&quot;background:#0b130b;height:8pt;&quot;|190
|style=&quot;background:#070b07;height:8pt;&quot;|191
|-
|style=&quot;color:black;text-align:right;&quot;|Yellow (12)
|style=&quot;background:#fff31b;height:8pt;color:black;&quot;|192
|style=&quot;background:#efdf17;height:8pt;color:black;&quot;|193
|style=&quot;background:#dbcb13;height:8pt;&quot;|194
|style=&quot;background:#cbb70f;height:8pt;&quot;|195
|style=&quot;background:#bba70f;height:8pt;&quot;|196
|style=&quot;background:#ab970b;height:8pt;&quot;|197
|style=&quot;background:#9b8307;height:8pt;&quot;|198
|style=&quot;background:#8b7307;height:8pt;&quot;|199
|style=&quot;background:#7b6307;height:8pt;&quot;|200
|style=&quot;background:#6b5300;height:8pt;&quot;|201
|style=&quot;background:#5b4700;height:8pt;&quot;|202
|style=&quot;background:#4b3700;height:8pt;&quot;|203
|style=&quot;background:#3b2b00;height:8pt;&quot;|204
|style=&quot;background:#2b1f00;height:8pt;&quot;|205
|style=&quot;background:#1b0f00;height:8pt;&quot;|206
|style=&quot;background:#0b0700;height:8pt;&quot;|207
|-
|style=&quot;color:black;text-align:right;&quot;|Blue (13)
|style=&quot;background:#0000ff;height:8pt;&quot;|208
|style=&quot;background:#0b0bef;height:8pt;&quot;|209
|style=&quot;background:#1313df;height:8pt;&quot;|210
|style=&quot;background:#1b1bcf;height:8pt;&quot;|211
|style=&quot;background:#2323bf;height:8pt;&quot;|212
|style=&quot;background:#2b2baf;height:8pt;&quot;|213
|style=&quot;background:#2f2f9f;height:8pt;&quot;|214
|style=&quot;background:#2f2f8f;height:8pt;&quot;|215
|style=&quot;background:#2f2f7f;height:8pt;&quot;|216
|style=&quot;background:#2f2f6f;height:8pt;&quot;|217
|style=&quot;background:#2f2f5f;height:8pt;&quot;|218
|style=&quot;background:#2b2b4f;height:8pt;&quot;|219
|style=&quot;background:#23233f;height:8pt;&quot;|220
|style=&quot;background:#1b1b2f;height:8pt;&quot;|221
|style=&quot;background:#13131f;height:8pt;&quot;|222
|style=&quot;background:#0b0b0f;height:8pt;&quot;|223
|-
|style=&quot;color:black;text-align:right;&quot;|Fire (14)
|style=&quot;background:#2b0000;height:8pt;&quot;|224
|style=&quot;background:#3b0000;height:8pt;&quot;|225
|style=&quot;background:#4b0700;height:8pt;&quot;|226
|style=&quot;background:#5f0700;height:8pt;&quot;|227
|style=&quot;background:#6f0f00;height:8pt;&quot;|228
|style=&quot;background:#7f1707;height:8pt;&quot;|229
|style=&quot;background:#931f07;height:8pt;&quot;|230
|style=&quot;background:#a3270b;height:8pt;&quot;|231
|style=&quot;background:#b7330f;height:8pt;&quot;|232
|style=&quot;background:#c34b1b;height:8pt;&quot;|233
|style=&quot;background:#cf632b;height:8pt;&quot;|234
|style=&quot;background:#db7f3b;height:8pt;&quot;|235
|style=&quot;background:#e3974f;height:8pt;&quot;|236
|style=&quot;background:#e7ab5f;height:8pt;&quot;|237
|style=&quot;background:#efbf77;height:8pt;&quot;|238
|style=&quot;background:#f7d38b;height:8pt;color:black;&quot;|239
|-
|style=&quot;color:black;text-align:right;&quot;|Brights (15)
|style=&quot;background:#a77b3b;height:8pt;&quot;|240
|style=&quot;background:#b79b37;height:8pt;&quot;|241
|style=&quot;background:#c7c337;height:8pt;&quot;|242
|style=&quot;background:#e7e357;height:8pt;color:black;&quot;|243
|style=&quot;background:#7fbfff;height:8pt;color:black;&quot;|244
|style=&quot;background:#abe7ff;height:8pt;color:black;&quot;|245
|style=&quot;background:#d7ffff;height:8pt;color:black;&quot;|246
|style=&quot;background:#670000;height:8pt;&quot;|247
|style=&quot;background:#8b0000;height:8pt;&quot;|248
|style=&quot;background:#b30000;height:8pt;&quot;|249
|style=&quot;background:#d70000;height:8pt;&quot;|250
|style=&quot;background:#ff0000;height:8pt;&quot;|251
|style=&quot;background:#fff393;height:8pt;color:black;&quot;|252
|style=&quot;background:#fff7c7;height:8pt;color:black;&quot;|253
|style=&quot;background:#ffffff;height:8pt;color:black;&quot;|254
|style=&quot;background:#9f5b53;height:8pt;&quot;|255
|-
|}

Color 255 is transparent for sprites, 2d lmps, and gfx.wad entries (excluding [[conchars]], in which case it is black (color 0) that's made transparent). It is important that palette index 0 is black. The parameters for the [[color]] console command are the row #, but is restricted to rows 0 - 13.

It is important that the latter 8 palette rows are &quot;backwards&quot; (light-to-dark instead of dark-to-light). It appears that the [[id Software|ID]] artists did this for no good reason in the original Quake palette, and the engine programmers were forced to add a hack to accommodate it (along with the comment &quot;the artists made some backwards ranges. sigh&quot;). The only area this affects is player shirt/pants color translation (where one palette row must be mapped to another).

=== palette.lmp ===
The palette is stored in gfx/palette.lmp. It consists of 256 RGB values using one byte per component, coming out to 768 bytes in total.

=== Download ===
* [[Image:quake_palette.zip]] - The Quake palette in 3 formats: JASC (text), Microsoft (RIFF), and raw (768-byte lump of RGB values).

== Colormap ==
[[Image:Colormap.png|right|thumb|The Quake colormap.]]

The colormap is a table used for lighting in software Quake engines. It contains a column of 64 values for each palette color. Each value is an index into the palette representing as closely as possible the original color brightened or darkened: shade 0 is double bright, shade 32 is the original color, and shade 63 is black.

&quot;Fullbright&quot; colors are those which are not lit in the colormap, simply using the original color for all 64 shades. These colors, when used in textures and model skins, will not be affected by lighting. Fullbrights are used for things like fire and glowing lights. In Quake these are the last 32 colors in the palette.

Since the [[GLQuake]] engine ignores the colormap, it doesn't support fullbrights. Most user-modified engines have fixed this problem, being hard-coded to treat the last 32 colors as fullbright. For this reason, you shouldn't generate a colormap with a different amount of fullbrights, since it will work in software engines but not in modern GL engines.

=== colormap.lmp ===
The colormap is stored in gfx/colormap.lmp. The version included with Quake is 16385 bytes. Since the colormap only requires 16384 bytes (256 * 64), I'm not exactly sure what the extra byte (&lt;tt&gt;0x20&lt;/tt&gt;) at the end is for.

=== Generating the colormap ===
The following C code will generate a colormap.lmp that is nearly (but not exactly) identical to the Quake colormap. Sorry about the lack of comments, maybe I'll add some later. Consider it public domain.

 /* sample a 24-bit RGB value to one of the colours on the existing 8-bit palette */
 unsigned char convert_24_to_8(const unsigned char palette[768], const int rgb[3])
 {
   int i, j;
   int best_index = -1;
   int best_dist = 0;
 
   for (i = 0; i &lt; 256; i++)
   {
     int dist = 0;
 
     for (j = 0; j &lt; 3; j++)
     {
     /* note that we could use RGB luminosity bias for greater accuracy, but quake's colormap apparently didn't do this */
       int d = abs(rgb[j] - palette[i*3+j]);
       dist += d * d;
     }
 
     if (best_index == -1 || dist &lt; best_dist)
     {
       best_index = i;
       best_dist = dist;
     }
   }
 
   return (unsigned char)best_index;
 }
 
 void generate_colormap(const unsigned char palette[768], unsigned char out_colormap[16384])
 {
   int num_fullbrights = 32; /* the last 32 colours will be full bright */
   int x, y, i;
 
   for (x = 0; x &lt; 256; x++)
   {
     for (y = 0; y &lt; 64; y++)
     {
       if (x &lt; 256 - num_fullbrights)
       {
         int rgb[3];
 
         for (i = 0; i &lt; 3; i++)
         {
           rgb[i] = (palette[x*3+i] * (63 - y) + 16) &gt;&gt; 5; /* divide by 32, rounding to nearest integer */
           if (rgb[i] &gt; 255)
             rgb[i] = 255;
         }
 
         out_colormap[y*256+x] = convert_24_to_8(palette, rgb);
       }
       else
       {
       /* this colour is a fullbright, just keep the original colour */
         out_colormap[y*256+x] = x;
       }
     }
   }
 }

== Legal status ==
John Carmack officially put palette.lmp in the public domain{{citation needed}} to make Quake ports easier, so it is legal to, for example, embed it right into an engine executable. Colormap.lmp can also be considered public domain as it is trivially derived from the palette.

== Related Info ==
* Most engine mods use 32-bit colour, so you need not worry about palettes. With 32-bit textures, shirt/pants colour changing and fullbrights are only possible if engines support a new implementation of them, for example [[DarkPlaces]]'s [[DP_GFX_EXTERNALTEXTURES]] extension, which allows additional _glow, _pants, _shirt, etc textures on top of the main one)</text>
      <sha1>btgx33x5rpts1rrj1gv28ne2efi5awu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2689</id>
      <parentid>2688</parentid>
      <timestamp>2013-03-30T11:34:53Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>/* Generating the colormap */ removed self</comment>
      <text xml:space="preserve" bytes="17069">__NOTOC__[[Image:Qpalette.png|right|thumb|The Quake palette.]]
{|style=&quot;color:white;font-weight:bold;font-size:8pt;text-align:center;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot;
|-
|style=&quot;color:black;text-align:right;&quot;|White (0)
|style=&quot;background:#000000;height:8pt;&quot;|0
|style=&quot;background:#0f0f0f;height:8pt;&quot;|1
|style=&quot;background:#1f1f1f;height:8pt;&quot;|2
|style=&quot;background:#2f2f2f;height:8pt;&quot;|3
|style=&quot;background:#3f3f3f;height:8pt;&quot;|4
|style=&quot;background:#4b4b4b;height:8pt;&quot;|5
|style=&quot;background:#5b5b5b;height:8pt;&quot;|6
|style=&quot;background:#6b6b6b;height:8pt;&quot;|7
|style=&quot;background:#7b7b7b;height:8pt;&quot;|8
|style=&quot;background:#8b8b8b;height:8pt;&quot;|9
|style=&quot;background:#9b9b9b;height:8pt;&quot;|10
|style=&quot;background:#ababab;height:8pt;&quot;|11
|style=&quot;background:#bbbbbb;height:8pt;&quot;|12
|style=&quot;background:#cbcbcb;height:8pt;&quot;|13
|style=&quot;background:#dbdbdb;height:8pt;&quot;|14
|style=&quot;background:#ebebeb;height:8pt;color:black;&quot;|15
|-
|style=&quot;color:black;text-align:right;&quot;|Brown (1)
|style=&quot;background:#0f0b07;height:8pt;&quot;|16
|style=&quot;background:#170f0b;height:8pt;&quot;|17
|style=&quot;background:#1f170b;height:8pt;&quot;|18
|style=&quot;background:#271b0f;height:8pt;&quot;|19
|style=&quot;background:#2f2313;height:8pt;&quot;|20
|style=&quot;background:#372b17;height:8pt;&quot;|21
|style=&quot;background:#3f2f17;height:8pt;&quot;|22
|style=&quot;background:#4b371b;height:8pt;&quot;|23
|style=&quot;background:#533b1b;height:8pt;&quot;|24
|style=&quot;background:#5b431f;height:8pt;&quot;|25
|style=&quot;background:#634b1f;height:8pt;&quot;|26
|style=&quot;background:#6b531f;height:8pt;&quot;|27
|style=&quot;background:#73571f;height:8pt;&quot;|28
|style=&quot;background:#7b5f23;height:8pt;&quot;|29
|style=&quot;background:#836723;height:8pt;&quot;|30
|style=&quot;background:#8f6f23;height:8pt;&quot;|31
|-
|style=&quot;color:black;text-align:right;&quot;|Light blue (2)
|style=&quot;background:#0b0b0f;height:8pt;&quot;|32
|style=&quot;background:#13131b;height:8pt;&quot;|33
|style=&quot;background:#1b1b27;height:8pt;&quot;|34
|style=&quot;background:#272733;height:8pt;&quot;|35
|style=&quot;background:#2f2f3f;height:8pt;&quot;|36
|style=&quot;background:#37374b;height:8pt;&quot;|37
|style=&quot;background:#3f3f57;height:8pt;&quot;|38
|style=&quot;background:#474767;height:8pt;&quot;|39
|style=&quot;background:#4f4f73;height:8pt;&quot;|40
|style=&quot;background:#5b5b7f;height:8pt;&quot;|41
|style=&quot;background:#63638b;height:8pt;&quot;|42
|style=&quot;background:#6b6b97;height:8pt;&quot;|43
|style=&quot;background:#7373a3;height:8pt;&quot;|44
|style=&quot;background:#7b7baf;height:8pt;&quot;|45
|style=&quot;background:#8383bb;height:8pt;&quot;|46
|style=&quot;background:#8b8bcb;height:8pt;&quot;|47
|-
|style=&quot;color:black;text-align:right;&quot;|Green (3)
|style=&quot;background:#000000;height:8pt;&quot;|48
|style=&quot;background:#070700;height:8pt;&quot;|49
|style=&quot;background:#0b0b00;height:8pt;&quot;|50
|style=&quot;background:#131300;height:8pt;&quot;|51
|style=&quot;background:#1b1b00;height:8pt;&quot;|52
|style=&quot;background:#232300;height:8pt;&quot;|53
|style=&quot;background:#2b2b07;height:8pt;&quot;|54
|style=&quot;background:#2f2f07;height:8pt;&quot;|55
|style=&quot;background:#373707;height:8pt;&quot;|56
|style=&quot;background:#3f3f07;height:8pt;&quot;|57
|style=&quot;background:#474707;height:8pt;&quot;|58
|style=&quot;background:#4b4b0b;height:8pt;&quot;|59
|style=&quot;background:#53530b;height:8pt;&quot;|60
|style=&quot;background:#5b5b0b;height:8pt;&quot;|61
|style=&quot;background:#63630b;height:8pt;&quot;|62
|style=&quot;background:#6b6b0f;height:8pt;&quot;|63
|-
|style=&quot;color:black;text-align:right;&quot;|Red (4)
|style=&quot;background:#070000;height:8pt;&quot;|64
|style=&quot;background:#0f0000;height:8pt;&quot;|65
|style=&quot;background:#170000;height:8pt;&quot;|66
|style=&quot;background:#1f0000;height:8pt;&quot;|67
|style=&quot;background:#270000;height:8pt;&quot;|68
|style=&quot;background:#2f0000;height:8pt;&quot;|69
|style=&quot;background:#370000;height:8pt;&quot;|70
|style=&quot;background:#3f0000;height:8pt;&quot;|71
|style=&quot;background:#470000;height:8pt;&quot;|72
|style=&quot;background:#4f0000;height:8pt;&quot;|73
|style=&quot;background:#570000;height:8pt;&quot;|74
|style=&quot;background:#5f0000;height:8pt;&quot;|75
|style=&quot;background:#670000;height:8pt;&quot;|76
|style=&quot;background:#6f0000;height:8pt;&quot;|77
|style=&quot;background:#770000;height:8pt;&quot;|78
|style=&quot;background:#7f0000;height:8pt;&quot;|79
|-
|style=&quot;color:black;text-align:right;&quot;|Orange (5)
|style=&quot;background:#131300;height:8pt;&quot;|80
|style=&quot;background:#1b1b00;height:8pt;&quot;|81
|style=&quot;background:#232300;height:8pt;&quot;|82
|style=&quot;background:#2f2b00;height:8pt;&quot;|83
|style=&quot;background:#372f00;height:8pt;&quot;|84
|style=&quot;background:#433700;height:8pt;&quot;|85
|style=&quot;background:#4b3b07;height:8pt;&quot;|86
|style=&quot;background:#574307;height:8pt;&quot;|87
|style=&quot;background:#5f4707;height:8pt;&quot;|88
|style=&quot;background:#6b4b0b;height:8pt;&quot;|89
|style=&quot;background:#77530f;height:8pt;&quot;|90
|style=&quot;background:#835713;height:8pt;&quot;|91
|style=&quot;background:#8b5b13;height:8pt;&quot;|92
|style=&quot;background:#975f1b;height:8pt;&quot;|93
|style=&quot;background:#a3631f;height:8pt;&quot;|94
|style=&quot;background:#af6723;height:8pt;&quot;|95
|-
|style=&quot;color:black;text-align:right;&quot;|Gold (6)
|style=&quot;background:#231307;height:8pt;&quot;|96
|style=&quot;background:#2f170b;height:8pt;&quot;|97
|style=&quot;background:#3b1f0f;height:8pt;&quot;|98
|style=&quot;background:#4b2313;height:8pt;&quot;|99
|style=&quot;background:#572b17;height:8pt;&quot;|100
|style=&quot;background:#632f1f;height:8pt;&quot;|101
|style=&quot;background:#733723;height:8pt;&quot;|102
|style=&quot;background:#7f3b2b;height:8pt;&quot;|103
|style=&quot;background:#8f4333;height:8pt;&quot;|104
|style=&quot;background:#9f4f33;height:8pt;&quot;|105
|style=&quot;background:#af632f;height:8pt;&quot;|106
|style=&quot;background:#bf772f;height:8pt;&quot;|107
|style=&quot;background:#cf8f2b;height:8pt;&quot;|108
|style=&quot;background:#dfab27;height:8pt;&quot;|109
|style=&quot;background:#efcb1f;height:8pt;&quot;|110
|style=&quot;background:#fff31b;height:8pt;color:black;&quot;|111
|-
|style=&quot;color:black;text-align:right;&quot;|Peach (7)
|style=&quot;background:#0b0700;height:8pt;&quot;|112
|style=&quot;background:#1b1300;height:8pt;&quot;|113
|style=&quot;background:#2b230f;height:8pt;&quot;|114
|style=&quot;background:#372b13;height:8pt;&quot;|115
|style=&quot;background:#47331b;height:8pt;&quot;|116
|style=&quot;background:#533723;height:8pt;&quot;|117
|style=&quot;background:#633f2b;height:8pt;&quot;|118
|style=&quot;background:#6f4733;height:8pt;&quot;|119
|style=&quot;background:#7f533f;height:8pt;&quot;|120
|style=&quot;background:#8b5f47;height:8pt;&quot;|121
|style=&quot;background:#9b6b53;height:8pt;&quot;|122
|style=&quot;background:#a77b5f;height:8pt;&quot;|123
|style=&quot;background:#b7876b;height:8pt;&quot;|124
|style=&quot;background:#c3937b;height:8pt;&quot;|125
|style=&quot;background:#d3a38b;height:8pt;&quot;|126
|style=&quot;background:#e3b397;height:8pt;&quot;|127
|-
|style=&quot;color:black;text-align:right;&quot;|Purple (8)
|style=&quot;background:#ab8ba3;height:8pt;&quot;|128
|style=&quot;background:#9f7f97;height:8pt;&quot;|129
|style=&quot;background:#937387;height:8pt;&quot;|130
|style=&quot;background:#8b677b;height:8pt;&quot;|131
|style=&quot;background:#7f5b6f;height:8pt;&quot;|132
|style=&quot;background:#775363;height:8pt;&quot;|133
|style=&quot;background:#6b4b57;height:8pt;&quot;|134
|style=&quot;background:#5f3f4b;height:8pt;&quot;|135
|style=&quot;background:#573743;height:8pt;&quot;|136
|style=&quot;background:#4b2f37;height:8pt;&quot;|137
|style=&quot;background:#43272f;height:8pt;&quot;|138
|style=&quot;background:#371f23;height:8pt;&quot;|139
|style=&quot;background:#2b171b;height:8pt;&quot;|140
|style=&quot;background:#231313;height:8pt;&quot;|141
|style=&quot;background:#170b0b;height:8pt;&quot;|142
|style=&quot;background:#0f0707;height:8pt;&quot;|143
|-
|style=&quot;color:black;text-align:right;&quot;|Magenta (9)
|style=&quot;background:#bb739f;height:8pt;&quot;|144
|style=&quot;background:#af6b8f;height:8pt;&quot;|145
|style=&quot;background:#a35f83;height:8pt;&quot;|146
|style=&quot;background:#975777;height:8pt;&quot;|147
|style=&quot;background:#8b4f6b;height:8pt;&quot;|148
|style=&quot;background:#7f4b5f;height:8pt;&quot;|149
|style=&quot;background:#734353;height:8pt;&quot;|150
|style=&quot;background:#6b3b4b;height:8pt;&quot;|151
|style=&quot;background:#5f333f;height:8pt;&quot;|152
|style=&quot;background:#532b37;height:8pt;&quot;|153
|style=&quot;background:#47232b;height:8pt;&quot;|154
|style=&quot;background:#3b1f23;height:8pt;&quot;|155
|style=&quot;background:#2f171b;height:8pt;&quot;|156
|style=&quot;background:#231313;height:8pt;&quot;|157
|style=&quot;background:#170b0b;height:8pt;&quot;|158
|style=&quot;background:#0f0707;height:8pt;&quot;|159
|-
|style=&quot;color:black;text-align:right;&quot;|Tan (10)
|style=&quot;background:#dbc3bb;height:8pt;&quot;|160
|style=&quot;background:#cbb3a7;height:8pt;&quot;|161
|style=&quot;background:#bfa39b;height:8pt;&quot;|162
|style=&quot;background:#af978b;height:8pt;&quot;|163
|style=&quot;background:#a3877b;height:8pt;&quot;|164
|style=&quot;background:#977b6f;height:8pt;&quot;|165
|style=&quot;background:#876f5f;height:8pt;&quot;|166
|style=&quot;background:#7b6353;height:8pt;&quot;|167
|style=&quot;background:#6b5747;height:8pt;&quot;|168
|style=&quot;background:#5f4b3b;height:8pt;&quot;|169
|style=&quot;background:#533f33;height:8pt;&quot;|170
|style=&quot;background:#433327;height:8pt;&quot;|171
|style=&quot;background:#372b1f;height:8pt;&quot;|172
|style=&quot;background:#271f17;height:8pt;&quot;|173
|style=&quot;background:#1b130f;height:8pt;&quot;|174
|style=&quot;background:#0f0b07;height:8pt;&quot;|175
|-
|style=&quot;color:black;text-align:right;&quot;|Light green (11)
|style=&quot;background:#6f837b;height:8pt;&quot;|176
|style=&quot;background:#677b6f;height:8pt;&quot;|177
|style=&quot;background:#5f7367;height:8pt;&quot;|178
|style=&quot;background:#576b5f;height:8pt;&quot;|179
|style=&quot;background:#4f6357;height:8pt;&quot;|180
|style=&quot;background:#475b4f;height:8pt;&quot;|181
|style=&quot;background:#3f5347;height:8pt;&quot;|182
|style=&quot;background:#374b3f;height:8pt;&quot;|183
|style=&quot;background:#2f4337;height:8pt;&quot;|184
|style=&quot;background:#2b3b2f;height:8pt;&quot;|185
|style=&quot;background:#233327;height:8pt;&quot;|186
|style=&quot;background:#1f2b1f;height:8pt;&quot;|187
|style=&quot;background:#172317;height:8pt;&quot;|188
|style=&quot;background:#0f1b13;height:8pt;&quot;|189
|style=&quot;background:#0b130b;height:8pt;&quot;|190
|style=&quot;background:#070b07;height:8pt;&quot;|191
|-
|style=&quot;color:black;text-align:right;&quot;|Yellow (12)
|style=&quot;background:#fff31b;height:8pt;color:black;&quot;|192
|style=&quot;background:#efdf17;height:8pt;color:black;&quot;|193
|style=&quot;background:#dbcb13;height:8pt;&quot;|194
|style=&quot;background:#cbb70f;height:8pt;&quot;|195
|style=&quot;background:#bba70f;height:8pt;&quot;|196
|style=&quot;background:#ab970b;height:8pt;&quot;|197
|style=&quot;background:#9b8307;height:8pt;&quot;|198
|style=&quot;background:#8b7307;height:8pt;&quot;|199
|style=&quot;background:#7b6307;height:8pt;&quot;|200
|style=&quot;background:#6b5300;height:8pt;&quot;|201
|style=&quot;background:#5b4700;height:8pt;&quot;|202
|style=&quot;background:#4b3700;height:8pt;&quot;|203
|style=&quot;background:#3b2b00;height:8pt;&quot;|204
|style=&quot;background:#2b1f00;height:8pt;&quot;|205
|style=&quot;background:#1b0f00;height:8pt;&quot;|206
|style=&quot;background:#0b0700;height:8pt;&quot;|207
|-
|style=&quot;color:black;text-align:right;&quot;|Blue (13)
|style=&quot;background:#0000ff;height:8pt;&quot;|208
|style=&quot;background:#0b0bef;height:8pt;&quot;|209
|style=&quot;background:#1313df;height:8pt;&quot;|210
|style=&quot;background:#1b1bcf;height:8pt;&quot;|211
|style=&quot;background:#2323bf;height:8pt;&quot;|212
|style=&quot;background:#2b2baf;height:8pt;&quot;|213
|style=&quot;background:#2f2f9f;height:8pt;&quot;|214
|style=&quot;background:#2f2f8f;height:8pt;&quot;|215
|style=&quot;background:#2f2f7f;height:8pt;&quot;|216
|style=&quot;background:#2f2f6f;height:8pt;&quot;|217
|style=&quot;background:#2f2f5f;height:8pt;&quot;|218
|style=&quot;background:#2b2b4f;height:8pt;&quot;|219
|style=&quot;background:#23233f;height:8pt;&quot;|220
|style=&quot;background:#1b1b2f;height:8pt;&quot;|221
|style=&quot;background:#13131f;height:8pt;&quot;|222
|style=&quot;background:#0b0b0f;height:8pt;&quot;|223
|-
|style=&quot;color:black;text-align:right;&quot;|Fire (14)
|style=&quot;background:#2b0000;height:8pt;&quot;|224
|style=&quot;background:#3b0000;height:8pt;&quot;|225
|style=&quot;background:#4b0700;height:8pt;&quot;|226
|style=&quot;background:#5f0700;height:8pt;&quot;|227
|style=&quot;background:#6f0f00;height:8pt;&quot;|228
|style=&quot;background:#7f1707;height:8pt;&quot;|229
|style=&quot;background:#931f07;height:8pt;&quot;|230
|style=&quot;background:#a3270b;height:8pt;&quot;|231
|style=&quot;background:#b7330f;height:8pt;&quot;|232
|style=&quot;background:#c34b1b;height:8pt;&quot;|233
|style=&quot;background:#cf632b;height:8pt;&quot;|234
|style=&quot;background:#db7f3b;height:8pt;&quot;|235
|style=&quot;background:#e3974f;height:8pt;&quot;|236
|style=&quot;background:#e7ab5f;height:8pt;&quot;|237
|style=&quot;background:#efbf77;height:8pt;&quot;|238
|style=&quot;background:#f7d38b;height:8pt;color:black;&quot;|239
|-
|style=&quot;color:black;text-align:right;&quot;|Brights (15)
|style=&quot;background:#a77b3b;height:8pt;&quot;|240
|style=&quot;background:#b79b37;height:8pt;&quot;|241
|style=&quot;background:#c7c337;height:8pt;&quot;|242
|style=&quot;background:#e7e357;height:8pt;color:black;&quot;|243
|style=&quot;background:#7fbfff;height:8pt;color:black;&quot;|244
|style=&quot;background:#abe7ff;height:8pt;color:black;&quot;|245
|style=&quot;background:#d7ffff;height:8pt;color:black;&quot;|246
|style=&quot;background:#670000;height:8pt;&quot;|247
|style=&quot;background:#8b0000;height:8pt;&quot;|248
|style=&quot;background:#b30000;height:8pt;&quot;|249
|style=&quot;background:#d70000;height:8pt;&quot;|250
|style=&quot;background:#ff0000;height:8pt;&quot;|251
|style=&quot;background:#fff393;height:8pt;color:black;&quot;|252
|style=&quot;background:#fff7c7;height:8pt;color:black;&quot;|253
|style=&quot;background:#ffffff;height:8pt;color:black;&quot;|254
|style=&quot;background:#9f5b53;height:8pt;&quot;|255
|-
|}

Color 255 is transparent for sprites, 2d lmps, and gfx.wad entries (excluding [[conchars]], in which case it is black (color 0) that's made transparent). It is important that palette index 0 is black. The parameters for the [[color]] console command are the row #, but is restricted to rows 0 - 13.

It is important that the latter 8 palette rows are &quot;backwards&quot; (light-to-dark instead of dark-to-light). It appears that the [[id Software|ID]] artists did this for no good reason in the original Quake palette, and the engine programmers were forced to add a hack to accommodate it (along with the comment &quot;the artists made some backwards ranges. sigh&quot;). The only area this affects is player shirt/pants color translation (where one palette row must be mapped to another).

=== palette.lmp ===
The palette is stored in gfx/palette.lmp. It consists of 256 RGB values using one byte per component, coming out to 768 bytes in total.

=== Download ===
* [[Image:quake_palette.zip]] - The Quake palette in 3 formats: JASC (text), Microsoft (RIFF), and raw (768-byte lump of RGB values).

== Colormap ==
[[Image:Colormap.png|right|thumb|The Quake colormap.]]

The colormap is a table used for lighting in software Quake engines. It contains a column of 64 values for each palette color. Each value is an index into the palette representing as closely as possible the original color brightened or darkened: shade 0 is double bright, shade 32 is the original color, and shade 63 is black.

&quot;Fullbright&quot; colors are those which are not lit in the colormap, simply using the original color for all 64 shades. These colors, when used in textures and model skins, will not be affected by lighting. Fullbrights are used for things like fire and glowing lights. In Quake these are the last 32 colors in the palette.

Since the [[GLQuake]] engine ignores the colormap, it doesn't support fullbrights. Most user-modified engines have fixed this problem, being hard-coded to treat the last 32 colors as fullbright. For this reason, you shouldn't generate a colormap with a different amount of fullbrights, since it will work in software engines but not in modern GL engines.

=== colormap.lmp ===
The colormap is stored in gfx/colormap.lmp. The version included with Quake is 16385 bytes. Since the colormap only requires 16384 bytes (256 * 64), I'm not exactly sure what the extra byte (&lt;tt&gt;0x20&lt;/tt&gt;) at the end is for.

=== Generating the colormap ===
The following C code will generate a colormap.lmp that is nearly (but not exactly) identical to the Quake colormap. Written by [[metlslime]] who placed it in the public domain.

 /* sample a 24-bit RGB value to one of the colours on the existing 8-bit palette */
 unsigned char convert_24_to_8(const unsigned char palette[768], const int rgb[3])
 {
   int i, j;
   int best_index = -1;
   int best_dist = 0;
 
   for (i = 0; i &lt; 256; i++)
   {
     int dist = 0;
 
     for (j = 0; j &lt; 3; j++)
     {
     /* note that we could use RGB luminosity bias for greater accuracy, but quake's colormap apparently didn't do this */
       int d = abs(rgb[j] - palette[i*3+j]);
       dist += d * d;
     }
 
     if (best_index == -1 || dist &lt; best_dist)
     {
       best_index = i;
       best_dist = dist;
     }
   }
 
   return (unsigned char)best_index;
 }
 
 void generate_colormap(const unsigned char palette[768], unsigned char out_colormap[16384])
 {
   int num_fullbrights = 32; /* the last 32 colours will be full bright */
   int x, y, i;
 
   for (x = 0; x &lt; 256; x++)
   {
     for (y = 0; y &lt; 64; y++)
     {
       if (x &lt; 256 - num_fullbrights)
       {
         int rgb[3];
 
         for (i = 0; i &lt; 3; i++)
         {
           rgb[i] = (palette[x*3+i] * (63 - y) + 16) &gt;&gt; 5; /* divide by 32, rounding to nearest integer */
           if (rgb[i] &gt; 255)
             rgb[i] = 255;
         }
 
         out_colormap[y*256+x] = convert_24_to_8(palette, rgb);
       }
       else
       {
       /* this colour is a fullbright, just keep the original colour */
         out_colormap[y*256+x] = x;
       }
     }
   }
 }

== Legal status ==
John Carmack officially put palette.lmp in the public domain{{citation needed}} to make Quake ports easier, so it is legal to, for example, embed it right into an engine executable. Colormap.lmp can also be considered public domain as it is trivially derived from the palette.

== Related Info ==
* Most engine mods use 32-bit colour, so you need not worry about palettes. With 32-bit textures, shirt/pants colour changing and fullbrights are only possible if engines support a new implementation of them, for example [[DarkPlaces]]'s [[DP_GFX_EXTERNALTEXTURES]] extension, which allows additional _glow, _pants, _shirt, etc textures on top of the main one)</text>
      <sha1>e56rnt6phxstxh70dwojsf6zw9c3vmx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2690</id>
      <parentid>2689</parentid>
      <timestamp>2013-03-30T11:36:59Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>reordered</comment>
      <text xml:space="preserve" bytes="17063">[[Image:Qpalette.png|right|thumb|The Quake palette.]]
Color 255 is transparent for sprites, 2d lmps, and gfx.wad entries (excluding [[conchars]], in which case it is black (color 0) that's made transparent). It is important that palette index 0 is black. The parameters for the [[color]] console command are the row #, but is restricted to rows 0 - 13.

It is important that the latter 8 palette rows are &quot;backwards&quot; (light-to-dark instead of dark-to-light). It appears that the [[id Software|ID]] artists did this for no good reason in the original Quake palette, and the engine programmers were forced to add a hack to accommodate it (along with the comment &quot;the artists made some backwards ranges. sigh&quot;). The only area this affects is player shirt/pants color translation (where one palette row must be mapped to another).


{|style=&quot;color:white;font-weight:bold;font-size:8pt;text-align:center;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot;
|-
|style=&quot;color:black;text-align:right;&quot;|White (0)
|style=&quot;background:#000000;height:8pt;&quot;|0
|style=&quot;background:#0f0f0f;height:8pt;&quot;|1
|style=&quot;background:#1f1f1f;height:8pt;&quot;|2
|style=&quot;background:#2f2f2f;height:8pt;&quot;|3
|style=&quot;background:#3f3f3f;height:8pt;&quot;|4
|style=&quot;background:#4b4b4b;height:8pt;&quot;|5
|style=&quot;background:#5b5b5b;height:8pt;&quot;|6
|style=&quot;background:#6b6b6b;height:8pt;&quot;|7
|style=&quot;background:#7b7b7b;height:8pt;&quot;|8
|style=&quot;background:#8b8b8b;height:8pt;&quot;|9
|style=&quot;background:#9b9b9b;height:8pt;&quot;|10
|style=&quot;background:#ababab;height:8pt;&quot;|11
|style=&quot;background:#bbbbbb;height:8pt;&quot;|12
|style=&quot;background:#cbcbcb;height:8pt;&quot;|13
|style=&quot;background:#dbdbdb;height:8pt;&quot;|14
|style=&quot;background:#ebebeb;height:8pt;color:black;&quot;|15
|-
|style=&quot;color:black;text-align:right;&quot;|Brown (1)
|style=&quot;background:#0f0b07;height:8pt;&quot;|16
|style=&quot;background:#170f0b;height:8pt;&quot;|17
|style=&quot;background:#1f170b;height:8pt;&quot;|18
|style=&quot;background:#271b0f;height:8pt;&quot;|19
|style=&quot;background:#2f2313;height:8pt;&quot;|20
|style=&quot;background:#372b17;height:8pt;&quot;|21
|style=&quot;background:#3f2f17;height:8pt;&quot;|22
|style=&quot;background:#4b371b;height:8pt;&quot;|23
|style=&quot;background:#533b1b;height:8pt;&quot;|24
|style=&quot;background:#5b431f;height:8pt;&quot;|25
|style=&quot;background:#634b1f;height:8pt;&quot;|26
|style=&quot;background:#6b531f;height:8pt;&quot;|27
|style=&quot;background:#73571f;height:8pt;&quot;|28
|style=&quot;background:#7b5f23;height:8pt;&quot;|29
|style=&quot;background:#836723;height:8pt;&quot;|30
|style=&quot;background:#8f6f23;height:8pt;&quot;|31
|-
|style=&quot;color:black;text-align:right;&quot;|Light blue (2)
|style=&quot;background:#0b0b0f;height:8pt;&quot;|32
|style=&quot;background:#13131b;height:8pt;&quot;|33
|style=&quot;background:#1b1b27;height:8pt;&quot;|34
|style=&quot;background:#272733;height:8pt;&quot;|35
|style=&quot;background:#2f2f3f;height:8pt;&quot;|36
|style=&quot;background:#37374b;height:8pt;&quot;|37
|style=&quot;background:#3f3f57;height:8pt;&quot;|38
|style=&quot;background:#474767;height:8pt;&quot;|39
|style=&quot;background:#4f4f73;height:8pt;&quot;|40
|style=&quot;background:#5b5b7f;height:8pt;&quot;|41
|style=&quot;background:#63638b;height:8pt;&quot;|42
|style=&quot;background:#6b6b97;height:8pt;&quot;|43
|style=&quot;background:#7373a3;height:8pt;&quot;|44
|style=&quot;background:#7b7baf;height:8pt;&quot;|45
|style=&quot;background:#8383bb;height:8pt;&quot;|46
|style=&quot;background:#8b8bcb;height:8pt;&quot;|47
|-
|style=&quot;color:black;text-align:right;&quot;|Green (3)
|style=&quot;background:#000000;height:8pt;&quot;|48
|style=&quot;background:#070700;height:8pt;&quot;|49
|style=&quot;background:#0b0b00;height:8pt;&quot;|50
|style=&quot;background:#131300;height:8pt;&quot;|51
|style=&quot;background:#1b1b00;height:8pt;&quot;|52
|style=&quot;background:#232300;height:8pt;&quot;|53
|style=&quot;background:#2b2b07;height:8pt;&quot;|54
|style=&quot;background:#2f2f07;height:8pt;&quot;|55
|style=&quot;background:#373707;height:8pt;&quot;|56
|style=&quot;background:#3f3f07;height:8pt;&quot;|57
|style=&quot;background:#474707;height:8pt;&quot;|58
|style=&quot;background:#4b4b0b;height:8pt;&quot;|59
|style=&quot;background:#53530b;height:8pt;&quot;|60
|style=&quot;background:#5b5b0b;height:8pt;&quot;|61
|style=&quot;background:#63630b;height:8pt;&quot;|62
|style=&quot;background:#6b6b0f;height:8pt;&quot;|63
|-
|style=&quot;color:black;text-align:right;&quot;|Red (4)
|style=&quot;background:#070000;height:8pt;&quot;|64
|style=&quot;background:#0f0000;height:8pt;&quot;|65
|style=&quot;background:#170000;height:8pt;&quot;|66
|style=&quot;background:#1f0000;height:8pt;&quot;|67
|style=&quot;background:#270000;height:8pt;&quot;|68
|style=&quot;background:#2f0000;height:8pt;&quot;|69
|style=&quot;background:#370000;height:8pt;&quot;|70
|style=&quot;background:#3f0000;height:8pt;&quot;|71
|style=&quot;background:#470000;height:8pt;&quot;|72
|style=&quot;background:#4f0000;height:8pt;&quot;|73
|style=&quot;background:#570000;height:8pt;&quot;|74
|style=&quot;background:#5f0000;height:8pt;&quot;|75
|style=&quot;background:#670000;height:8pt;&quot;|76
|style=&quot;background:#6f0000;height:8pt;&quot;|77
|style=&quot;background:#770000;height:8pt;&quot;|78
|style=&quot;background:#7f0000;height:8pt;&quot;|79
|-
|style=&quot;color:black;text-align:right;&quot;|Orange (5)
|style=&quot;background:#131300;height:8pt;&quot;|80
|style=&quot;background:#1b1b00;height:8pt;&quot;|81
|style=&quot;background:#232300;height:8pt;&quot;|82
|style=&quot;background:#2f2b00;height:8pt;&quot;|83
|style=&quot;background:#372f00;height:8pt;&quot;|84
|style=&quot;background:#433700;height:8pt;&quot;|85
|style=&quot;background:#4b3b07;height:8pt;&quot;|86
|style=&quot;background:#574307;height:8pt;&quot;|87
|style=&quot;background:#5f4707;height:8pt;&quot;|88
|style=&quot;background:#6b4b0b;height:8pt;&quot;|89
|style=&quot;background:#77530f;height:8pt;&quot;|90
|style=&quot;background:#835713;height:8pt;&quot;|91
|style=&quot;background:#8b5b13;height:8pt;&quot;|92
|style=&quot;background:#975f1b;height:8pt;&quot;|93
|style=&quot;background:#a3631f;height:8pt;&quot;|94
|style=&quot;background:#af6723;height:8pt;&quot;|95
|-
|style=&quot;color:black;text-align:right;&quot;|Gold (6)
|style=&quot;background:#231307;height:8pt;&quot;|96
|style=&quot;background:#2f170b;height:8pt;&quot;|97
|style=&quot;background:#3b1f0f;height:8pt;&quot;|98
|style=&quot;background:#4b2313;height:8pt;&quot;|99
|style=&quot;background:#572b17;height:8pt;&quot;|100
|style=&quot;background:#632f1f;height:8pt;&quot;|101
|style=&quot;background:#733723;height:8pt;&quot;|102
|style=&quot;background:#7f3b2b;height:8pt;&quot;|103
|style=&quot;background:#8f4333;height:8pt;&quot;|104
|style=&quot;background:#9f4f33;height:8pt;&quot;|105
|style=&quot;background:#af632f;height:8pt;&quot;|106
|style=&quot;background:#bf772f;height:8pt;&quot;|107
|style=&quot;background:#cf8f2b;height:8pt;&quot;|108
|style=&quot;background:#dfab27;height:8pt;&quot;|109
|style=&quot;background:#efcb1f;height:8pt;&quot;|110
|style=&quot;background:#fff31b;height:8pt;color:black;&quot;|111
|-
|style=&quot;color:black;text-align:right;&quot;|Peach (7)
|style=&quot;background:#0b0700;height:8pt;&quot;|112
|style=&quot;background:#1b1300;height:8pt;&quot;|113
|style=&quot;background:#2b230f;height:8pt;&quot;|114
|style=&quot;background:#372b13;height:8pt;&quot;|115
|style=&quot;background:#47331b;height:8pt;&quot;|116
|style=&quot;background:#533723;height:8pt;&quot;|117
|style=&quot;background:#633f2b;height:8pt;&quot;|118
|style=&quot;background:#6f4733;height:8pt;&quot;|119
|style=&quot;background:#7f533f;height:8pt;&quot;|120
|style=&quot;background:#8b5f47;height:8pt;&quot;|121
|style=&quot;background:#9b6b53;height:8pt;&quot;|122
|style=&quot;background:#a77b5f;height:8pt;&quot;|123
|style=&quot;background:#b7876b;height:8pt;&quot;|124
|style=&quot;background:#c3937b;height:8pt;&quot;|125
|style=&quot;background:#d3a38b;height:8pt;&quot;|126
|style=&quot;background:#e3b397;height:8pt;&quot;|127
|-
|style=&quot;color:black;text-align:right;&quot;|Purple (8)
|style=&quot;background:#ab8ba3;height:8pt;&quot;|128
|style=&quot;background:#9f7f97;height:8pt;&quot;|129
|style=&quot;background:#937387;height:8pt;&quot;|130
|style=&quot;background:#8b677b;height:8pt;&quot;|131
|style=&quot;background:#7f5b6f;height:8pt;&quot;|132
|style=&quot;background:#775363;height:8pt;&quot;|133
|style=&quot;background:#6b4b57;height:8pt;&quot;|134
|style=&quot;background:#5f3f4b;height:8pt;&quot;|135
|style=&quot;background:#573743;height:8pt;&quot;|136
|style=&quot;background:#4b2f37;height:8pt;&quot;|137
|style=&quot;background:#43272f;height:8pt;&quot;|138
|style=&quot;background:#371f23;height:8pt;&quot;|139
|style=&quot;background:#2b171b;height:8pt;&quot;|140
|style=&quot;background:#231313;height:8pt;&quot;|141
|style=&quot;background:#170b0b;height:8pt;&quot;|142
|style=&quot;background:#0f0707;height:8pt;&quot;|143
|-
|style=&quot;color:black;text-align:right;&quot;|Magenta (9)
|style=&quot;background:#bb739f;height:8pt;&quot;|144
|style=&quot;background:#af6b8f;height:8pt;&quot;|145
|style=&quot;background:#a35f83;height:8pt;&quot;|146
|style=&quot;background:#975777;height:8pt;&quot;|147
|style=&quot;background:#8b4f6b;height:8pt;&quot;|148
|style=&quot;background:#7f4b5f;height:8pt;&quot;|149
|style=&quot;background:#734353;height:8pt;&quot;|150
|style=&quot;background:#6b3b4b;height:8pt;&quot;|151
|style=&quot;background:#5f333f;height:8pt;&quot;|152
|style=&quot;background:#532b37;height:8pt;&quot;|153
|style=&quot;background:#47232b;height:8pt;&quot;|154
|style=&quot;background:#3b1f23;height:8pt;&quot;|155
|style=&quot;background:#2f171b;height:8pt;&quot;|156
|style=&quot;background:#231313;height:8pt;&quot;|157
|style=&quot;background:#170b0b;height:8pt;&quot;|158
|style=&quot;background:#0f0707;height:8pt;&quot;|159
|-
|style=&quot;color:black;text-align:right;&quot;|Tan (10)
|style=&quot;background:#dbc3bb;height:8pt;&quot;|160
|style=&quot;background:#cbb3a7;height:8pt;&quot;|161
|style=&quot;background:#bfa39b;height:8pt;&quot;|162
|style=&quot;background:#af978b;height:8pt;&quot;|163
|style=&quot;background:#a3877b;height:8pt;&quot;|164
|style=&quot;background:#977b6f;height:8pt;&quot;|165
|style=&quot;background:#876f5f;height:8pt;&quot;|166
|style=&quot;background:#7b6353;height:8pt;&quot;|167
|style=&quot;background:#6b5747;height:8pt;&quot;|168
|style=&quot;background:#5f4b3b;height:8pt;&quot;|169
|style=&quot;background:#533f33;height:8pt;&quot;|170
|style=&quot;background:#433327;height:8pt;&quot;|171
|style=&quot;background:#372b1f;height:8pt;&quot;|172
|style=&quot;background:#271f17;height:8pt;&quot;|173
|style=&quot;background:#1b130f;height:8pt;&quot;|174
|style=&quot;background:#0f0b07;height:8pt;&quot;|175
|-
|style=&quot;color:black;text-align:right;&quot;|Light green (11)
|style=&quot;background:#6f837b;height:8pt;&quot;|176
|style=&quot;background:#677b6f;height:8pt;&quot;|177
|style=&quot;background:#5f7367;height:8pt;&quot;|178
|style=&quot;background:#576b5f;height:8pt;&quot;|179
|style=&quot;background:#4f6357;height:8pt;&quot;|180
|style=&quot;background:#475b4f;height:8pt;&quot;|181
|style=&quot;background:#3f5347;height:8pt;&quot;|182
|style=&quot;background:#374b3f;height:8pt;&quot;|183
|style=&quot;background:#2f4337;height:8pt;&quot;|184
|style=&quot;background:#2b3b2f;height:8pt;&quot;|185
|style=&quot;background:#233327;height:8pt;&quot;|186
|style=&quot;background:#1f2b1f;height:8pt;&quot;|187
|style=&quot;background:#172317;height:8pt;&quot;|188
|style=&quot;background:#0f1b13;height:8pt;&quot;|189
|style=&quot;background:#0b130b;height:8pt;&quot;|190
|style=&quot;background:#070b07;height:8pt;&quot;|191
|-
|style=&quot;color:black;text-align:right;&quot;|Yellow (12)
|style=&quot;background:#fff31b;height:8pt;color:black;&quot;|192
|style=&quot;background:#efdf17;height:8pt;color:black;&quot;|193
|style=&quot;background:#dbcb13;height:8pt;&quot;|194
|style=&quot;background:#cbb70f;height:8pt;&quot;|195
|style=&quot;background:#bba70f;height:8pt;&quot;|196
|style=&quot;background:#ab970b;height:8pt;&quot;|197
|style=&quot;background:#9b8307;height:8pt;&quot;|198
|style=&quot;background:#8b7307;height:8pt;&quot;|199
|style=&quot;background:#7b6307;height:8pt;&quot;|200
|style=&quot;background:#6b5300;height:8pt;&quot;|201
|style=&quot;background:#5b4700;height:8pt;&quot;|202
|style=&quot;background:#4b3700;height:8pt;&quot;|203
|style=&quot;background:#3b2b00;height:8pt;&quot;|204
|style=&quot;background:#2b1f00;height:8pt;&quot;|205
|style=&quot;background:#1b0f00;height:8pt;&quot;|206
|style=&quot;background:#0b0700;height:8pt;&quot;|207
|-
|style=&quot;color:black;text-align:right;&quot;|Blue (13)
|style=&quot;background:#0000ff;height:8pt;&quot;|208
|style=&quot;background:#0b0bef;height:8pt;&quot;|209
|style=&quot;background:#1313df;height:8pt;&quot;|210
|style=&quot;background:#1b1bcf;height:8pt;&quot;|211
|style=&quot;background:#2323bf;height:8pt;&quot;|212
|style=&quot;background:#2b2baf;height:8pt;&quot;|213
|style=&quot;background:#2f2f9f;height:8pt;&quot;|214
|style=&quot;background:#2f2f8f;height:8pt;&quot;|215
|style=&quot;background:#2f2f7f;height:8pt;&quot;|216
|style=&quot;background:#2f2f6f;height:8pt;&quot;|217
|style=&quot;background:#2f2f5f;height:8pt;&quot;|218
|style=&quot;background:#2b2b4f;height:8pt;&quot;|219
|style=&quot;background:#23233f;height:8pt;&quot;|220
|style=&quot;background:#1b1b2f;height:8pt;&quot;|221
|style=&quot;background:#13131f;height:8pt;&quot;|222
|style=&quot;background:#0b0b0f;height:8pt;&quot;|223
|-
|style=&quot;color:black;text-align:right;&quot;|Fire (14)
|style=&quot;background:#2b0000;height:8pt;&quot;|224
|style=&quot;background:#3b0000;height:8pt;&quot;|225
|style=&quot;background:#4b0700;height:8pt;&quot;|226
|style=&quot;background:#5f0700;height:8pt;&quot;|227
|style=&quot;background:#6f0f00;height:8pt;&quot;|228
|style=&quot;background:#7f1707;height:8pt;&quot;|229
|style=&quot;background:#931f07;height:8pt;&quot;|230
|style=&quot;background:#a3270b;height:8pt;&quot;|231
|style=&quot;background:#b7330f;height:8pt;&quot;|232
|style=&quot;background:#c34b1b;height:8pt;&quot;|233
|style=&quot;background:#cf632b;height:8pt;&quot;|234
|style=&quot;background:#db7f3b;height:8pt;&quot;|235
|style=&quot;background:#e3974f;height:8pt;&quot;|236
|style=&quot;background:#e7ab5f;height:8pt;&quot;|237
|style=&quot;background:#efbf77;height:8pt;&quot;|238
|style=&quot;background:#f7d38b;height:8pt;color:black;&quot;|239
|-
|style=&quot;color:black;text-align:right;&quot;|Brights (15)
|style=&quot;background:#a77b3b;height:8pt;&quot;|240
|style=&quot;background:#b79b37;height:8pt;&quot;|241
|style=&quot;background:#c7c337;height:8pt;&quot;|242
|style=&quot;background:#e7e357;height:8pt;color:black;&quot;|243
|style=&quot;background:#7fbfff;height:8pt;color:black;&quot;|244
|style=&quot;background:#abe7ff;height:8pt;color:black;&quot;|245
|style=&quot;background:#d7ffff;height:8pt;color:black;&quot;|246
|style=&quot;background:#670000;height:8pt;&quot;|247
|style=&quot;background:#8b0000;height:8pt;&quot;|248
|style=&quot;background:#b30000;height:8pt;&quot;|249
|style=&quot;background:#d70000;height:8pt;&quot;|250
|style=&quot;background:#ff0000;height:8pt;&quot;|251
|style=&quot;background:#fff393;height:8pt;color:black;&quot;|252
|style=&quot;background:#fff7c7;height:8pt;color:black;&quot;|253
|style=&quot;background:#ffffff;height:8pt;color:black;&quot;|254
|style=&quot;background:#9f5b53;height:8pt;&quot;|255
|-
|}



=== palette.lmp ===
The palette is stored in gfx/palette.lmp. It consists of 256 RGB values using one byte per component, coming out to 768 bytes in total.

=== Download ===
* [[Image:quake_palette.zip]] - The Quake palette in 3 formats: JASC (text), Microsoft (RIFF), and raw (768-byte lump of RGB values).

== Colormap ==
[[Image:Colormap.png|right|thumb|The Quake colormap.]]

The colormap is a table used for lighting in software Quake engines. It contains a column of 64 values for each palette color. Each value is an index into the palette representing as closely as possible the original color brightened or darkened: shade 0 is double bright, shade 32 is the original color, and shade 63 is black.

&quot;Fullbright&quot; colors are those which are not lit in the colormap, simply using the original color for all 64 shades. These colors, when used in textures and model skins, will not be affected by lighting. Fullbrights are used for things like fire and glowing lights. In Quake these are the last 32 colors in the palette.

Since the [[GLQuake]] engine ignores the colormap, it doesn't support fullbrights. Most user-modified engines have fixed this problem, being hard-coded to treat the last 32 colors as fullbright. For this reason, you shouldn't generate a colormap with a different amount of fullbrights, since it will work in software engines but not in modern GL engines.

=== colormap.lmp ===
The colormap is stored in gfx/colormap.lmp. The version included with Quake is 16385 bytes. Since the colormap only requires 16384 bytes (256 * 64), I'm not exactly sure what the extra byte (&lt;tt&gt;0x20&lt;/tt&gt;) at the end is for.

=== Generating the colormap ===
The following C code will generate a colormap.lmp that is nearly (but not exactly) identical to the Quake colormap. Written by [[metlslime]] who placed it in the public domain.

 /* sample a 24-bit RGB value to one of the colours on the existing 8-bit palette */
 unsigned char convert_24_to_8(const unsigned char palette[768], const int rgb[3])
 {
   int i, j;
   int best_index = -1;
   int best_dist = 0;
 
   for (i = 0; i &lt; 256; i++)
   {
     int dist = 0;
 
     for (j = 0; j &lt; 3; j++)
     {
     /* note that we could use RGB luminosity bias for greater accuracy, but quake's colormap apparently didn't do this */
       int d = abs(rgb[j] - palette[i*3+j]);
       dist += d * d;
     }
 
     if (best_index == -1 || dist &lt; best_dist)
     {
       best_index = i;
       best_dist = dist;
     }
   }
 
   return (unsigned char)best_index;
 }
 
 void generate_colormap(const unsigned char palette[768], unsigned char out_colormap[16384])
 {
   int num_fullbrights = 32; /* the last 32 colours will be full bright */
   int x, y, i;
 
   for (x = 0; x &lt; 256; x++)
   {
     for (y = 0; y &lt; 64; y++)
     {
       if (x &lt; 256 - num_fullbrights)
       {
         int rgb[3];
 
         for (i = 0; i &lt; 3; i++)
         {
           rgb[i] = (palette[x*3+i] * (63 - y) + 16) &gt;&gt; 5; /* divide by 32, rounding to nearest integer */
           if (rgb[i] &gt; 255)
             rgb[i] = 255;
         }
 
         out_colormap[y*256+x] = convert_24_to_8(palette, rgb);
       }
       else
       {
       /* this colour is a fullbright, just keep the original colour */
         out_colormap[y*256+x] = x;
       }
     }
   }
 }

== Legal status ==
John Carmack officially put palette.lmp in the public domain{{citation needed}} to make Quake ports easier, so it is legal to, for example, embed it right into an engine executable. Colormap.lmp can also be considered public domain as it is trivially derived from the palette.

== Related Info ==
* Most engine mods use 32-bit colour, so you need not worry about palettes. With 32-bit textures, shirt/pants colour changing and fullbrights are only possible if engines support a new implementation of them, for example [[DarkPlaces]]'s [[DP_GFX_EXTERNALTEXTURES]] extension, which allows additional _glow, _pants, _shirt, etc textures on top of the main one)</text>
      <sha1>b0ja89o7l0024xco2vwr66940nntihy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2692</id>
      <parentid>2690</parentid>
      <timestamp>2013-03-30T13:54:15Z</timestamp>
      <contributor>
        <username>Spiney</username>
        <id>40</id>
      </contributor>
      <comment>/* Download */ changed the summary to reflect the file contents.</comment>
      <text xml:space="preserve" bytes="17133">[[Image:Qpalette.png|right|thumb|The Quake palette.]]
Color 255 is transparent for sprites, 2d lmps, and gfx.wad entries (excluding [[conchars]], in which case it is black (color 0) that's made transparent). It is important that palette index 0 is black. The parameters for the [[color]] console command are the row #, but is restricted to rows 0 - 13.

It is important that the latter 8 palette rows are &quot;backwards&quot; (light-to-dark instead of dark-to-light). It appears that the [[id Software|ID]] artists did this for no good reason in the original Quake palette, and the engine programmers were forced to add a hack to accommodate it (along with the comment &quot;the artists made some backwards ranges. sigh&quot;). The only area this affects is player shirt/pants color translation (where one palette row must be mapped to another).


{|style=&quot;color:white;font-weight:bold;font-size:8pt;text-align:center;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot;
|-
|style=&quot;color:black;text-align:right;&quot;|White (0)
|style=&quot;background:#000000;height:8pt;&quot;|0
|style=&quot;background:#0f0f0f;height:8pt;&quot;|1
|style=&quot;background:#1f1f1f;height:8pt;&quot;|2
|style=&quot;background:#2f2f2f;height:8pt;&quot;|3
|style=&quot;background:#3f3f3f;height:8pt;&quot;|4
|style=&quot;background:#4b4b4b;height:8pt;&quot;|5
|style=&quot;background:#5b5b5b;height:8pt;&quot;|6
|style=&quot;background:#6b6b6b;height:8pt;&quot;|7
|style=&quot;background:#7b7b7b;height:8pt;&quot;|8
|style=&quot;background:#8b8b8b;height:8pt;&quot;|9
|style=&quot;background:#9b9b9b;height:8pt;&quot;|10
|style=&quot;background:#ababab;height:8pt;&quot;|11
|style=&quot;background:#bbbbbb;height:8pt;&quot;|12
|style=&quot;background:#cbcbcb;height:8pt;&quot;|13
|style=&quot;background:#dbdbdb;height:8pt;&quot;|14
|style=&quot;background:#ebebeb;height:8pt;color:black;&quot;|15
|-
|style=&quot;color:black;text-align:right;&quot;|Brown (1)
|style=&quot;background:#0f0b07;height:8pt;&quot;|16
|style=&quot;background:#170f0b;height:8pt;&quot;|17
|style=&quot;background:#1f170b;height:8pt;&quot;|18
|style=&quot;background:#271b0f;height:8pt;&quot;|19
|style=&quot;background:#2f2313;height:8pt;&quot;|20
|style=&quot;background:#372b17;height:8pt;&quot;|21
|style=&quot;background:#3f2f17;height:8pt;&quot;|22
|style=&quot;background:#4b371b;height:8pt;&quot;|23
|style=&quot;background:#533b1b;height:8pt;&quot;|24
|style=&quot;background:#5b431f;height:8pt;&quot;|25
|style=&quot;background:#634b1f;height:8pt;&quot;|26
|style=&quot;background:#6b531f;height:8pt;&quot;|27
|style=&quot;background:#73571f;height:8pt;&quot;|28
|style=&quot;background:#7b5f23;height:8pt;&quot;|29
|style=&quot;background:#836723;height:8pt;&quot;|30
|style=&quot;background:#8f6f23;height:8pt;&quot;|31
|-
|style=&quot;color:black;text-align:right;&quot;|Light blue (2)
|style=&quot;background:#0b0b0f;height:8pt;&quot;|32
|style=&quot;background:#13131b;height:8pt;&quot;|33
|style=&quot;background:#1b1b27;height:8pt;&quot;|34
|style=&quot;background:#272733;height:8pt;&quot;|35
|style=&quot;background:#2f2f3f;height:8pt;&quot;|36
|style=&quot;background:#37374b;height:8pt;&quot;|37
|style=&quot;background:#3f3f57;height:8pt;&quot;|38
|style=&quot;background:#474767;height:8pt;&quot;|39
|style=&quot;background:#4f4f73;height:8pt;&quot;|40
|style=&quot;background:#5b5b7f;height:8pt;&quot;|41
|style=&quot;background:#63638b;height:8pt;&quot;|42
|style=&quot;background:#6b6b97;height:8pt;&quot;|43
|style=&quot;background:#7373a3;height:8pt;&quot;|44
|style=&quot;background:#7b7baf;height:8pt;&quot;|45
|style=&quot;background:#8383bb;height:8pt;&quot;|46
|style=&quot;background:#8b8bcb;height:8pt;&quot;|47
|-
|style=&quot;color:black;text-align:right;&quot;|Green (3)
|style=&quot;background:#000000;height:8pt;&quot;|48
|style=&quot;background:#070700;height:8pt;&quot;|49
|style=&quot;background:#0b0b00;height:8pt;&quot;|50
|style=&quot;background:#131300;height:8pt;&quot;|51
|style=&quot;background:#1b1b00;height:8pt;&quot;|52
|style=&quot;background:#232300;height:8pt;&quot;|53
|style=&quot;background:#2b2b07;height:8pt;&quot;|54
|style=&quot;background:#2f2f07;height:8pt;&quot;|55
|style=&quot;background:#373707;height:8pt;&quot;|56
|style=&quot;background:#3f3f07;height:8pt;&quot;|57
|style=&quot;background:#474707;height:8pt;&quot;|58
|style=&quot;background:#4b4b0b;height:8pt;&quot;|59
|style=&quot;background:#53530b;height:8pt;&quot;|60
|style=&quot;background:#5b5b0b;height:8pt;&quot;|61
|style=&quot;background:#63630b;height:8pt;&quot;|62
|style=&quot;background:#6b6b0f;height:8pt;&quot;|63
|-
|style=&quot;color:black;text-align:right;&quot;|Red (4)
|style=&quot;background:#070000;height:8pt;&quot;|64
|style=&quot;background:#0f0000;height:8pt;&quot;|65
|style=&quot;background:#170000;height:8pt;&quot;|66
|style=&quot;background:#1f0000;height:8pt;&quot;|67
|style=&quot;background:#270000;height:8pt;&quot;|68
|style=&quot;background:#2f0000;height:8pt;&quot;|69
|style=&quot;background:#370000;height:8pt;&quot;|70
|style=&quot;background:#3f0000;height:8pt;&quot;|71
|style=&quot;background:#470000;height:8pt;&quot;|72
|style=&quot;background:#4f0000;height:8pt;&quot;|73
|style=&quot;background:#570000;height:8pt;&quot;|74
|style=&quot;background:#5f0000;height:8pt;&quot;|75
|style=&quot;background:#670000;height:8pt;&quot;|76
|style=&quot;background:#6f0000;height:8pt;&quot;|77
|style=&quot;background:#770000;height:8pt;&quot;|78
|style=&quot;background:#7f0000;height:8pt;&quot;|79
|-
|style=&quot;color:black;text-align:right;&quot;|Orange (5)
|style=&quot;background:#131300;height:8pt;&quot;|80
|style=&quot;background:#1b1b00;height:8pt;&quot;|81
|style=&quot;background:#232300;height:8pt;&quot;|82
|style=&quot;background:#2f2b00;height:8pt;&quot;|83
|style=&quot;background:#372f00;height:8pt;&quot;|84
|style=&quot;background:#433700;height:8pt;&quot;|85
|style=&quot;background:#4b3b07;height:8pt;&quot;|86
|style=&quot;background:#574307;height:8pt;&quot;|87
|style=&quot;background:#5f4707;height:8pt;&quot;|88
|style=&quot;background:#6b4b0b;height:8pt;&quot;|89
|style=&quot;background:#77530f;height:8pt;&quot;|90
|style=&quot;background:#835713;height:8pt;&quot;|91
|style=&quot;background:#8b5b13;height:8pt;&quot;|92
|style=&quot;background:#975f1b;height:8pt;&quot;|93
|style=&quot;background:#a3631f;height:8pt;&quot;|94
|style=&quot;background:#af6723;height:8pt;&quot;|95
|-
|style=&quot;color:black;text-align:right;&quot;|Gold (6)
|style=&quot;background:#231307;height:8pt;&quot;|96
|style=&quot;background:#2f170b;height:8pt;&quot;|97
|style=&quot;background:#3b1f0f;height:8pt;&quot;|98
|style=&quot;background:#4b2313;height:8pt;&quot;|99
|style=&quot;background:#572b17;height:8pt;&quot;|100
|style=&quot;background:#632f1f;height:8pt;&quot;|101
|style=&quot;background:#733723;height:8pt;&quot;|102
|style=&quot;background:#7f3b2b;height:8pt;&quot;|103
|style=&quot;background:#8f4333;height:8pt;&quot;|104
|style=&quot;background:#9f4f33;height:8pt;&quot;|105
|style=&quot;background:#af632f;height:8pt;&quot;|106
|style=&quot;background:#bf772f;height:8pt;&quot;|107
|style=&quot;background:#cf8f2b;height:8pt;&quot;|108
|style=&quot;background:#dfab27;height:8pt;&quot;|109
|style=&quot;background:#efcb1f;height:8pt;&quot;|110
|style=&quot;background:#fff31b;height:8pt;color:black;&quot;|111
|-
|style=&quot;color:black;text-align:right;&quot;|Peach (7)
|style=&quot;background:#0b0700;height:8pt;&quot;|112
|style=&quot;background:#1b1300;height:8pt;&quot;|113
|style=&quot;background:#2b230f;height:8pt;&quot;|114
|style=&quot;background:#372b13;height:8pt;&quot;|115
|style=&quot;background:#47331b;height:8pt;&quot;|116
|style=&quot;background:#533723;height:8pt;&quot;|117
|style=&quot;background:#633f2b;height:8pt;&quot;|118
|style=&quot;background:#6f4733;height:8pt;&quot;|119
|style=&quot;background:#7f533f;height:8pt;&quot;|120
|style=&quot;background:#8b5f47;height:8pt;&quot;|121
|style=&quot;background:#9b6b53;height:8pt;&quot;|122
|style=&quot;background:#a77b5f;height:8pt;&quot;|123
|style=&quot;background:#b7876b;height:8pt;&quot;|124
|style=&quot;background:#c3937b;height:8pt;&quot;|125
|style=&quot;background:#d3a38b;height:8pt;&quot;|126
|style=&quot;background:#e3b397;height:8pt;&quot;|127
|-
|style=&quot;color:black;text-align:right;&quot;|Purple (8)
|style=&quot;background:#ab8ba3;height:8pt;&quot;|128
|style=&quot;background:#9f7f97;height:8pt;&quot;|129
|style=&quot;background:#937387;height:8pt;&quot;|130
|style=&quot;background:#8b677b;height:8pt;&quot;|131
|style=&quot;background:#7f5b6f;height:8pt;&quot;|132
|style=&quot;background:#775363;height:8pt;&quot;|133
|style=&quot;background:#6b4b57;height:8pt;&quot;|134
|style=&quot;background:#5f3f4b;height:8pt;&quot;|135
|style=&quot;background:#573743;height:8pt;&quot;|136
|style=&quot;background:#4b2f37;height:8pt;&quot;|137
|style=&quot;background:#43272f;height:8pt;&quot;|138
|style=&quot;background:#371f23;height:8pt;&quot;|139
|style=&quot;background:#2b171b;height:8pt;&quot;|140
|style=&quot;background:#231313;height:8pt;&quot;|141
|style=&quot;background:#170b0b;height:8pt;&quot;|142
|style=&quot;background:#0f0707;height:8pt;&quot;|143
|-
|style=&quot;color:black;text-align:right;&quot;|Magenta (9)
|style=&quot;background:#bb739f;height:8pt;&quot;|144
|style=&quot;background:#af6b8f;height:8pt;&quot;|145
|style=&quot;background:#a35f83;height:8pt;&quot;|146
|style=&quot;background:#975777;height:8pt;&quot;|147
|style=&quot;background:#8b4f6b;height:8pt;&quot;|148
|style=&quot;background:#7f4b5f;height:8pt;&quot;|149
|style=&quot;background:#734353;height:8pt;&quot;|150
|style=&quot;background:#6b3b4b;height:8pt;&quot;|151
|style=&quot;background:#5f333f;height:8pt;&quot;|152
|style=&quot;background:#532b37;height:8pt;&quot;|153
|style=&quot;background:#47232b;height:8pt;&quot;|154
|style=&quot;background:#3b1f23;height:8pt;&quot;|155
|style=&quot;background:#2f171b;height:8pt;&quot;|156
|style=&quot;background:#231313;height:8pt;&quot;|157
|style=&quot;background:#170b0b;height:8pt;&quot;|158
|style=&quot;background:#0f0707;height:8pt;&quot;|159
|-
|style=&quot;color:black;text-align:right;&quot;|Tan (10)
|style=&quot;background:#dbc3bb;height:8pt;&quot;|160
|style=&quot;background:#cbb3a7;height:8pt;&quot;|161
|style=&quot;background:#bfa39b;height:8pt;&quot;|162
|style=&quot;background:#af978b;height:8pt;&quot;|163
|style=&quot;background:#a3877b;height:8pt;&quot;|164
|style=&quot;background:#977b6f;height:8pt;&quot;|165
|style=&quot;background:#876f5f;height:8pt;&quot;|166
|style=&quot;background:#7b6353;height:8pt;&quot;|167
|style=&quot;background:#6b5747;height:8pt;&quot;|168
|style=&quot;background:#5f4b3b;height:8pt;&quot;|169
|style=&quot;background:#533f33;height:8pt;&quot;|170
|style=&quot;background:#433327;height:8pt;&quot;|171
|style=&quot;background:#372b1f;height:8pt;&quot;|172
|style=&quot;background:#271f17;height:8pt;&quot;|173
|style=&quot;background:#1b130f;height:8pt;&quot;|174
|style=&quot;background:#0f0b07;height:8pt;&quot;|175
|-
|style=&quot;color:black;text-align:right;&quot;|Light green (11)
|style=&quot;background:#6f837b;height:8pt;&quot;|176
|style=&quot;background:#677b6f;height:8pt;&quot;|177
|style=&quot;background:#5f7367;height:8pt;&quot;|178
|style=&quot;background:#576b5f;height:8pt;&quot;|179
|style=&quot;background:#4f6357;height:8pt;&quot;|180
|style=&quot;background:#475b4f;height:8pt;&quot;|181
|style=&quot;background:#3f5347;height:8pt;&quot;|182
|style=&quot;background:#374b3f;height:8pt;&quot;|183
|style=&quot;background:#2f4337;height:8pt;&quot;|184
|style=&quot;background:#2b3b2f;height:8pt;&quot;|185
|style=&quot;background:#233327;height:8pt;&quot;|186
|style=&quot;background:#1f2b1f;height:8pt;&quot;|187
|style=&quot;background:#172317;height:8pt;&quot;|188
|style=&quot;background:#0f1b13;height:8pt;&quot;|189
|style=&quot;background:#0b130b;height:8pt;&quot;|190
|style=&quot;background:#070b07;height:8pt;&quot;|191
|-
|style=&quot;color:black;text-align:right;&quot;|Yellow (12)
|style=&quot;background:#fff31b;height:8pt;color:black;&quot;|192
|style=&quot;background:#efdf17;height:8pt;color:black;&quot;|193
|style=&quot;background:#dbcb13;height:8pt;&quot;|194
|style=&quot;background:#cbb70f;height:8pt;&quot;|195
|style=&quot;background:#bba70f;height:8pt;&quot;|196
|style=&quot;background:#ab970b;height:8pt;&quot;|197
|style=&quot;background:#9b8307;height:8pt;&quot;|198
|style=&quot;background:#8b7307;height:8pt;&quot;|199
|style=&quot;background:#7b6307;height:8pt;&quot;|200
|style=&quot;background:#6b5300;height:8pt;&quot;|201
|style=&quot;background:#5b4700;height:8pt;&quot;|202
|style=&quot;background:#4b3700;height:8pt;&quot;|203
|style=&quot;background:#3b2b00;height:8pt;&quot;|204
|style=&quot;background:#2b1f00;height:8pt;&quot;|205
|style=&quot;background:#1b0f00;height:8pt;&quot;|206
|style=&quot;background:#0b0700;height:8pt;&quot;|207
|-
|style=&quot;color:black;text-align:right;&quot;|Blue (13)
|style=&quot;background:#0000ff;height:8pt;&quot;|208
|style=&quot;background:#0b0bef;height:8pt;&quot;|209
|style=&quot;background:#1313df;height:8pt;&quot;|210
|style=&quot;background:#1b1bcf;height:8pt;&quot;|211
|style=&quot;background:#2323bf;height:8pt;&quot;|212
|style=&quot;background:#2b2baf;height:8pt;&quot;|213
|style=&quot;background:#2f2f9f;height:8pt;&quot;|214
|style=&quot;background:#2f2f8f;height:8pt;&quot;|215
|style=&quot;background:#2f2f7f;height:8pt;&quot;|216
|style=&quot;background:#2f2f6f;height:8pt;&quot;|217
|style=&quot;background:#2f2f5f;height:8pt;&quot;|218
|style=&quot;background:#2b2b4f;height:8pt;&quot;|219
|style=&quot;background:#23233f;height:8pt;&quot;|220
|style=&quot;background:#1b1b2f;height:8pt;&quot;|221
|style=&quot;background:#13131f;height:8pt;&quot;|222
|style=&quot;background:#0b0b0f;height:8pt;&quot;|223
|-
|style=&quot;color:black;text-align:right;&quot;|Fire (14)
|style=&quot;background:#2b0000;height:8pt;&quot;|224
|style=&quot;background:#3b0000;height:8pt;&quot;|225
|style=&quot;background:#4b0700;height:8pt;&quot;|226
|style=&quot;background:#5f0700;height:8pt;&quot;|227
|style=&quot;background:#6f0f00;height:8pt;&quot;|228
|style=&quot;background:#7f1707;height:8pt;&quot;|229
|style=&quot;background:#931f07;height:8pt;&quot;|230
|style=&quot;background:#a3270b;height:8pt;&quot;|231
|style=&quot;background:#b7330f;height:8pt;&quot;|232
|style=&quot;background:#c34b1b;height:8pt;&quot;|233
|style=&quot;background:#cf632b;height:8pt;&quot;|234
|style=&quot;background:#db7f3b;height:8pt;&quot;|235
|style=&quot;background:#e3974f;height:8pt;&quot;|236
|style=&quot;background:#e7ab5f;height:8pt;&quot;|237
|style=&quot;background:#efbf77;height:8pt;&quot;|238
|style=&quot;background:#f7d38b;height:8pt;color:black;&quot;|239
|-
|style=&quot;color:black;text-align:right;&quot;|Brights (15)
|style=&quot;background:#a77b3b;height:8pt;&quot;|240
|style=&quot;background:#b79b37;height:8pt;&quot;|241
|style=&quot;background:#c7c337;height:8pt;&quot;|242
|style=&quot;background:#e7e357;height:8pt;color:black;&quot;|243
|style=&quot;background:#7fbfff;height:8pt;color:black;&quot;|244
|style=&quot;background:#abe7ff;height:8pt;color:black;&quot;|245
|style=&quot;background:#d7ffff;height:8pt;color:black;&quot;|246
|style=&quot;background:#670000;height:8pt;&quot;|247
|style=&quot;background:#8b0000;height:8pt;&quot;|248
|style=&quot;background:#b30000;height:8pt;&quot;|249
|style=&quot;background:#d70000;height:8pt;&quot;|250
|style=&quot;background:#ff0000;height:8pt;&quot;|251
|style=&quot;background:#fff393;height:8pt;color:black;&quot;|252
|style=&quot;background:#fff7c7;height:8pt;color:black;&quot;|253
|style=&quot;background:#ffffff;height:8pt;color:black;&quot;|254
|style=&quot;background:#9f5b53;height:8pt;&quot;|255
|-
|}



=== palette.lmp ===
The palette is stored in gfx/palette.lmp. It consists of 256 RGB values using one byte per component, coming out to 768 bytes in total.

=== Download ===
* [[Image:quake_palette.zip]] - The Quake palette in following formats: .ACO, .ACT, .ASE, .PAL and the original .LMP (raw lump of RGB values, 768-bit). Also has a plaintext hex matrix and a .PNG preview.

== Colormap ==
[[Image:Colormap.png|right|thumb|The Quake colormap.]]

The colormap is a table used for lighting in software Quake engines. It contains a column of 64 values for each palette color. Each value is an index into the palette representing as closely as possible the original color brightened or darkened: shade 0 is double bright, shade 32 is the original color, and shade 63 is black.

&quot;Fullbright&quot; colors are those which are not lit in the colormap, simply using the original color for all 64 shades. These colors, when used in textures and model skins, will not be affected by lighting. Fullbrights are used for things like fire and glowing lights. In Quake these are the last 32 colors in the palette.

Since the [[GLQuake]] engine ignores the colormap, it doesn't support fullbrights. Most user-modified engines have fixed this problem, being hard-coded to treat the last 32 colors as fullbright. For this reason, you shouldn't generate a colormap with a different amount of fullbrights, since it will work in software engines but not in modern GL engines.

=== colormap.lmp ===
The colormap is stored in gfx/colormap.lmp. The version included with Quake is 16385 bytes. Since the colormap only requires 16384 bytes (256 * 64), I'm not exactly sure what the extra byte (&lt;tt&gt;0x20&lt;/tt&gt;) at the end is for.

=== Generating the colormap ===
The following C code will generate a colormap.lmp that is nearly (but not exactly) identical to the Quake colormap. Written by [[metlslime]] who placed it in the public domain.

 /* sample a 24-bit RGB value to one of the colours on the existing 8-bit palette */
 unsigned char convert_24_to_8(const unsigned char palette[768], const int rgb[3])
 {
   int i, j;
   int best_index = -1;
   int best_dist = 0;
 
   for (i = 0; i &lt; 256; i++)
   {
     int dist = 0;
 
     for (j = 0; j &lt; 3; j++)
     {
     /* note that we could use RGB luminosity bias for greater accuracy, but quake's colormap apparently didn't do this */
       int d = abs(rgb[j] - palette[i*3+j]);
       dist += d * d;
     }
 
     if (best_index == -1 || dist &lt; best_dist)
     {
       best_index = i;
       best_dist = dist;
     }
   }
 
   return (unsigned char)best_index;
 }
 
 void generate_colormap(const unsigned char palette[768], unsigned char out_colormap[16384])
 {
   int num_fullbrights = 32; /* the last 32 colours will be full bright */
   int x, y, i;
 
   for (x = 0; x &lt; 256; x++)
   {
     for (y = 0; y &lt; 64; y++)
     {
       if (x &lt; 256 - num_fullbrights)
       {
         int rgb[3];
 
         for (i = 0; i &lt; 3; i++)
         {
           rgb[i] = (palette[x*3+i] * (63 - y) + 16) &gt;&gt; 5; /* divide by 32, rounding to nearest integer */
           if (rgb[i] &gt; 255)
             rgb[i] = 255;
         }
 
         out_colormap[y*256+x] = convert_24_to_8(palette, rgb);
       }
       else
       {
       /* this colour is a fullbright, just keep the original colour */
         out_colormap[y*256+x] = x;
       }
     }
   }
 }

== Legal status ==
John Carmack officially put palette.lmp in the public domain{{citation needed}} to make Quake ports easier, so it is legal to, for example, embed it right into an engine executable. Colormap.lmp can also be considered public domain as it is trivially derived from the palette.

== Related Info ==
* Most engine mods use 32-bit colour, so you need not worry about palettes. With 32-bit textures, shirt/pants colour changing and fullbrights are only possible if engines support a new implementation of them, for example [[DarkPlaces]]'s [[DP_GFX_EXTERNALTEXTURES]] extension, which allows additional _glow, _pants, _shirt, etc textures on top of the main one)</text>
      <sha1>aahg69smub4za36jzmfzyad1kow1uzo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2693</id>
      <parentid>2692</parentid>
      <timestamp>2013-03-30T14:06:10Z</timestamp>
      <contributor>
        <username>Spiney</username>
        <id>40</id>
      </contributor>
      <minor/>
      <comment>/* Download */ use lowercase for extensions to stay with the program</comment>
      <text xml:space="preserve" bytes="17140">[[Image:Qpalette.png|right|thumb|The Quake palette.]]
Color 255 is transparent for sprites, 2d lmps, and gfx.wad entries (excluding [[conchars]], in which case it is black (color 0) that's made transparent). It is important that palette index 0 is black. The parameters for the [[color]] console command are the row #, but is restricted to rows 0 - 13.

It is important that the latter 8 palette rows are &quot;backwards&quot; (light-to-dark instead of dark-to-light). It appears that the [[id Software|ID]] artists did this for no good reason in the original Quake palette, and the engine programmers were forced to add a hack to accommodate it (along with the comment &quot;the artists made some backwards ranges. sigh&quot;). The only area this affects is player shirt/pants color translation (where one palette row must be mapped to another).


{|style=&quot;color:white;font-weight:bold;font-size:8pt;text-align:center;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot;
|-
|style=&quot;color:black;text-align:right;&quot;|White (0)
|style=&quot;background:#000000;height:8pt;&quot;|0
|style=&quot;background:#0f0f0f;height:8pt;&quot;|1
|style=&quot;background:#1f1f1f;height:8pt;&quot;|2
|style=&quot;background:#2f2f2f;height:8pt;&quot;|3
|style=&quot;background:#3f3f3f;height:8pt;&quot;|4
|style=&quot;background:#4b4b4b;height:8pt;&quot;|5
|style=&quot;background:#5b5b5b;height:8pt;&quot;|6
|style=&quot;background:#6b6b6b;height:8pt;&quot;|7
|style=&quot;background:#7b7b7b;height:8pt;&quot;|8
|style=&quot;background:#8b8b8b;height:8pt;&quot;|9
|style=&quot;background:#9b9b9b;height:8pt;&quot;|10
|style=&quot;background:#ababab;height:8pt;&quot;|11
|style=&quot;background:#bbbbbb;height:8pt;&quot;|12
|style=&quot;background:#cbcbcb;height:8pt;&quot;|13
|style=&quot;background:#dbdbdb;height:8pt;&quot;|14
|style=&quot;background:#ebebeb;height:8pt;color:black;&quot;|15
|-
|style=&quot;color:black;text-align:right;&quot;|Brown (1)
|style=&quot;background:#0f0b07;height:8pt;&quot;|16
|style=&quot;background:#170f0b;height:8pt;&quot;|17
|style=&quot;background:#1f170b;height:8pt;&quot;|18
|style=&quot;background:#271b0f;height:8pt;&quot;|19
|style=&quot;background:#2f2313;height:8pt;&quot;|20
|style=&quot;background:#372b17;height:8pt;&quot;|21
|style=&quot;background:#3f2f17;height:8pt;&quot;|22
|style=&quot;background:#4b371b;height:8pt;&quot;|23
|style=&quot;background:#533b1b;height:8pt;&quot;|24
|style=&quot;background:#5b431f;height:8pt;&quot;|25
|style=&quot;background:#634b1f;height:8pt;&quot;|26
|style=&quot;background:#6b531f;height:8pt;&quot;|27
|style=&quot;background:#73571f;height:8pt;&quot;|28
|style=&quot;background:#7b5f23;height:8pt;&quot;|29
|style=&quot;background:#836723;height:8pt;&quot;|30
|style=&quot;background:#8f6f23;height:8pt;&quot;|31
|-
|style=&quot;color:black;text-align:right;&quot;|Light blue (2)
|style=&quot;background:#0b0b0f;height:8pt;&quot;|32
|style=&quot;background:#13131b;height:8pt;&quot;|33
|style=&quot;background:#1b1b27;height:8pt;&quot;|34
|style=&quot;background:#272733;height:8pt;&quot;|35
|style=&quot;background:#2f2f3f;height:8pt;&quot;|36
|style=&quot;background:#37374b;height:8pt;&quot;|37
|style=&quot;background:#3f3f57;height:8pt;&quot;|38
|style=&quot;background:#474767;height:8pt;&quot;|39
|style=&quot;background:#4f4f73;height:8pt;&quot;|40
|style=&quot;background:#5b5b7f;height:8pt;&quot;|41
|style=&quot;background:#63638b;height:8pt;&quot;|42
|style=&quot;background:#6b6b97;height:8pt;&quot;|43
|style=&quot;background:#7373a3;height:8pt;&quot;|44
|style=&quot;background:#7b7baf;height:8pt;&quot;|45
|style=&quot;background:#8383bb;height:8pt;&quot;|46
|style=&quot;background:#8b8bcb;height:8pt;&quot;|47
|-
|style=&quot;color:black;text-align:right;&quot;|Green (3)
|style=&quot;background:#000000;height:8pt;&quot;|48
|style=&quot;background:#070700;height:8pt;&quot;|49
|style=&quot;background:#0b0b00;height:8pt;&quot;|50
|style=&quot;background:#131300;height:8pt;&quot;|51
|style=&quot;background:#1b1b00;height:8pt;&quot;|52
|style=&quot;background:#232300;height:8pt;&quot;|53
|style=&quot;background:#2b2b07;height:8pt;&quot;|54
|style=&quot;background:#2f2f07;height:8pt;&quot;|55
|style=&quot;background:#373707;height:8pt;&quot;|56
|style=&quot;background:#3f3f07;height:8pt;&quot;|57
|style=&quot;background:#474707;height:8pt;&quot;|58
|style=&quot;background:#4b4b0b;height:8pt;&quot;|59
|style=&quot;background:#53530b;height:8pt;&quot;|60
|style=&quot;background:#5b5b0b;height:8pt;&quot;|61
|style=&quot;background:#63630b;height:8pt;&quot;|62
|style=&quot;background:#6b6b0f;height:8pt;&quot;|63
|-
|style=&quot;color:black;text-align:right;&quot;|Red (4)
|style=&quot;background:#070000;height:8pt;&quot;|64
|style=&quot;background:#0f0000;height:8pt;&quot;|65
|style=&quot;background:#170000;height:8pt;&quot;|66
|style=&quot;background:#1f0000;height:8pt;&quot;|67
|style=&quot;background:#270000;height:8pt;&quot;|68
|style=&quot;background:#2f0000;height:8pt;&quot;|69
|style=&quot;background:#370000;height:8pt;&quot;|70
|style=&quot;background:#3f0000;height:8pt;&quot;|71
|style=&quot;background:#470000;height:8pt;&quot;|72
|style=&quot;background:#4f0000;height:8pt;&quot;|73
|style=&quot;background:#570000;height:8pt;&quot;|74
|style=&quot;background:#5f0000;height:8pt;&quot;|75
|style=&quot;background:#670000;height:8pt;&quot;|76
|style=&quot;background:#6f0000;height:8pt;&quot;|77
|style=&quot;background:#770000;height:8pt;&quot;|78
|style=&quot;background:#7f0000;height:8pt;&quot;|79
|-
|style=&quot;color:black;text-align:right;&quot;|Orange (5)
|style=&quot;background:#131300;height:8pt;&quot;|80
|style=&quot;background:#1b1b00;height:8pt;&quot;|81
|style=&quot;background:#232300;height:8pt;&quot;|82
|style=&quot;background:#2f2b00;height:8pt;&quot;|83
|style=&quot;background:#372f00;height:8pt;&quot;|84
|style=&quot;background:#433700;height:8pt;&quot;|85
|style=&quot;background:#4b3b07;height:8pt;&quot;|86
|style=&quot;background:#574307;height:8pt;&quot;|87
|style=&quot;background:#5f4707;height:8pt;&quot;|88
|style=&quot;background:#6b4b0b;height:8pt;&quot;|89
|style=&quot;background:#77530f;height:8pt;&quot;|90
|style=&quot;background:#835713;height:8pt;&quot;|91
|style=&quot;background:#8b5b13;height:8pt;&quot;|92
|style=&quot;background:#975f1b;height:8pt;&quot;|93
|style=&quot;background:#a3631f;height:8pt;&quot;|94
|style=&quot;background:#af6723;height:8pt;&quot;|95
|-
|style=&quot;color:black;text-align:right;&quot;|Gold (6)
|style=&quot;background:#231307;height:8pt;&quot;|96
|style=&quot;background:#2f170b;height:8pt;&quot;|97
|style=&quot;background:#3b1f0f;height:8pt;&quot;|98
|style=&quot;background:#4b2313;height:8pt;&quot;|99
|style=&quot;background:#572b17;height:8pt;&quot;|100
|style=&quot;background:#632f1f;height:8pt;&quot;|101
|style=&quot;background:#733723;height:8pt;&quot;|102
|style=&quot;background:#7f3b2b;height:8pt;&quot;|103
|style=&quot;background:#8f4333;height:8pt;&quot;|104
|style=&quot;background:#9f4f33;height:8pt;&quot;|105
|style=&quot;background:#af632f;height:8pt;&quot;|106
|style=&quot;background:#bf772f;height:8pt;&quot;|107
|style=&quot;background:#cf8f2b;height:8pt;&quot;|108
|style=&quot;background:#dfab27;height:8pt;&quot;|109
|style=&quot;background:#efcb1f;height:8pt;&quot;|110
|style=&quot;background:#fff31b;height:8pt;color:black;&quot;|111
|-
|style=&quot;color:black;text-align:right;&quot;|Peach (7)
|style=&quot;background:#0b0700;height:8pt;&quot;|112
|style=&quot;background:#1b1300;height:8pt;&quot;|113
|style=&quot;background:#2b230f;height:8pt;&quot;|114
|style=&quot;background:#372b13;height:8pt;&quot;|115
|style=&quot;background:#47331b;height:8pt;&quot;|116
|style=&quot;background:#533723;height:8pt;&quot;|117
|style=&quot;background:#633f2b;height:8pt;&quot;|118
|style=&quot;background:#6f4733;height:8pt;&quot;|119
|style=&quot;background:#7f533f;height:8pt;&quot;|120
|style=&quot;background:#8b5f47;height:8pt;&quot;|121
|style=&quot;background:#9b6b53;height:8pt;&quot;|122
|style=&quot;background:#a77b5f;height:8pt;&quot;|123
|style=&quot;background:#b7876b;height:8pt;&quot;|124
|style=&quot;background:#c3937b;height:8pt;&quot;|125
|style=&quot;background:#d3a38b;height:8pt;&quot;|126
|style=&quot;background:#e3b397;height:8pt;&quot;|127
|-
|style=&quot;color:black;text-align:right;&quot;|Purple (8)
|style=&quot;background:#ab8ba3;height:8pt;&quot;|128
|style=&quot;background:#9f7f97;height:8pt;&quot;|129
|style=&quot;background:#937387;height:8pt;&quot;|130
|style=&quot;background:#8b677b;height:8pt;&quot;|131
|style=&quot;background:#7f5b6f;height:8pt;&quot;|132
|style=&quot;background:#775363;height:8pt;&quot;|133
|style=&quot;background:#6b4b57;height:8pt;&quot;|134
|style=&quot;background:#5f3f4b;height:8pt;&quot;|135
|style=&quot;background:#573743;height:8pt;&quot;|136
|style=&quot;background:#4b2f37;height:8pt;&quot;|137
|style=&quot;background:#43272f;height:8pt;&quot;|138
|style=&quot;background:#371f23;height:8pt;&quot;|139
|style=&quot;background:#2b171b;height:8pt;&quot;|140
|style=&quot;background:#231313;height:8pt;&quot;|141
|style=&quot;background:#170b0b;height:8pt;&quot;|142
|style=&quot;background:#0f0707;height:8pt;&quot;|143
|-
|style=&quot;color:black;text-align:right;&quot;|Magenta (9)
|style=&quot;background:#bb739f;height:8pt;&quot;|144
|style=&quot;background:#af6b8f;height:8pt;&quot;|145
|style=&quot;background:#a35f83;height:8pt;&quot;|146
|style=&quot;background:#975777;height:8pt;&quot;|147
|style=&quot;background:#8b4f6b;height:8pt;&quot;|148
|style=&quot;background:#7f4b5f;height:8pt;&quot;|149
|style=&quot;background:#734353;height:8pt;&quot;|150
|style=&quot;background:#6b3b4b;height:8pt;&quot;|151
|style=&quot;background:#5f333f;height:8pt;&quot;|152
|style=&quot;background:#532b37;height:8pt;&quot;|153
|style=&quot;background:#47232b;height:8pt;&quot;|154
|style=&quot;background:#3b1f23;height:8pt;&quot;|155
|style=&quot;background:#2f171b;height:8pt;&quot;|156
|style=&quot;background:#231313;height:8pt;&quot;|157
|style=&quot;background:#170b0b;height:8pt;&quot;|158
|style=&quot;background:#0f0707;height:8pt;&quot;|159
|-
|style=&quot;color:black;text-align:right;&quot;|Tan (10)
|style=&quot;background:#dbc3bb;height:8pt;&quot;|160
|style=&quot;background:#cbb3a7;height:8pt;&quot;|161
|style=&quot;background:#bfa39b;height:8pt;&quot;|162
|style=&quot;background:#af978b;height:8pt;&quot;|163
|style=&quot;background:#a3877b;height:8pt;&quot;|164
|style=&quot;background:#977b6f;height:8pt;&quot;|165
|style=&quot;background:#876f5f;height:8pt;&quot;|166
|style=&quot;background:#7b6353;height:8pt;&quot;|167
|style=&quot;background:#6b5747;height:8pt;&quot;|168
|style=&quot;background:#5f4b3b;height:8pt;&quot;|169
|style=&quot;background:#533f33;height:8pt;&quot;|170
|style=&quot;background:#433327;height:8pt;&quot;|171
|style=&quot;background:#372b1f;height:8pt;&quot;|172
|style=&quot;background:#271f17;height:8pt;&quot;|173
|style=&quot;background:#1b130f;height:8pt;&quot;|174
|style=&quot;background:#0f0b07;height:8pt;&quot;|175
|-
|style=&quot;color:black;text-align:right;&quot;|Light green (11)
|style=&quot;background:#6f837b;height:8pt;&quot;|176
|style=&quot;background:#677b6f;height:8pt;&quot;|177
|style=&quot;background:#5f7367;height:8pt;&quot;|178
|style=&quot;background:#576b5f;height:8pt;&quot;|179
|style=&quot;background:#4f6357;height:8pt;&quot;|180
|style=&quot;background:#475b4f;height:8pt;&quot;|181
|style=&quot;background:#3f5347;height:8pt;&quot;|182
|style=&quot;background:#374b3f;height:8pt;&quot;|183
|style=&quot;background:#2f4337;height:8pt;&quot;|184
|style=&quot;background:#2b3b2f;height:8pt;&quot;|185
|style=&quot;background:#233327;height:8pt;&quot;|186
|style=&quot;background:#1f2b1f;height:8pt;&quot;|187
|style=&quot;background:#172317;height:8pt;&quot;|188
|style=&quot;background:#0f1b13;height:8pt;&quot;|189
|style=&quot;background:#0b130b;height:8pt;&quot;|190
|style=&quot;background:#070b07;height:8pt;&quot;|191
|-
|style=&quot;color:black;text-align:right;&quot;|Yellow (12)
|style=&quot;background:#fff31b;height:8pt;color:black;&quot;|192
|style=&quot;background:#efdf17;height:8pt;color:black;&quot;|193
|style=&quot;background:#dbcb13;height:8pt;&quot;|194
|style=&quot;background:#cbb70f;height:8pt;&quot;|195
|style=&quot;background:#bba70f;height:8pt;&quot;|196
|style=&quot;background:#ab970b;height:8pt;&quot;|197
|style=&quot;background:#9b8307;height:8pt;&quot;|198
|style=&quot;background:#8b7307;height:8pt;&quot;|199
|style=&quot;background:#7b6307;height:8pt;&quot;|200
|style=&quot;background:#6b5300;height:8pt;&quot;|201
|style=&quot;background:#5b4700;height:8pt;&quot;|202
|style=&quot;background:#4b3700;height:8pt;&quot;|203
|style=&quot;background:#3b2b00;height:8pt;&quot;|204
|style=&quot;background:#2b1f00;height:8pt;&quot;|205
|style=&quot;background:#1b0f00;height:8pt;&quot;|206
|style=&quot;background:#0b0700;height:8pt;&quot;|207
|-
|style=&quot;color:black;text-align:right;&quot;|Blue (13)
|style=&quot;background:#0000ff;height:8pt;&quot;|208
|style=&quot;background:#0b0bef;height:8pt;&quot;|209
|style=&quot;background:#1313df;height:8pt;&quot;|210
|style=&quot;background:#1b1bcf;height:8pt;&quot;|211
|style=&quot;background:#2323bf;height:8pt;&quot;|212
|style=&quot;background:#2b2baf;height:8pt;&quot;|213
|style=&quot;background:#2f2f9f;height:8pt;&quot;|214
|style=&quot;background:#2f2f8f;height:8pt;&quot;|215
|style=&quot;background:#2f2f7f;height:8pt;&quot;|216
|style=&quot;background:#2f2f6f;height:8pt;&quot;|217
|style=&quot;background:#2f2f5f;height:8pt;&quot;|218
|style=&quot;background:#2b2b4f;height:8pt;&quot;|219
|style=&quot;background:#23233f;height:8pt;&quot;|220
|style=&quot;background:#1b1b2f;height:8pt;&quot;|221
|style=&quot;background:#13131f;height:8pt;&quot;|222
|style=&quot;background:#0b0b0f;height:8pt;&quot;|223
|-
|style=&quot;color:black;text-align:right;&quot;|Fire (14)
|style=&quot;background:#2b0000;height:8pt;&quot;|224
|style=&quot;background:#3b0000;height:8pt;&quot;|225
|style=&quot;background:#4b0700;height:8pt;&quot;|226
|style=&quot;background:#5f0700;height:8pt;&quot;|227
|style=&quot;background:#6f0f00;height:8pt;&quot;|228
|style=&quot;background:#7f1707;height:8pt;&quot;|229
|style=&quot;background:#931f07;height:8pt;&quot;|230
|style=&quot;background:#a3270b;height:8pt;&quot;|231
|style=&quot;background:#b7330f;height:8pt;&quot;|232
|style=&quot;background:#c34b1b;height:8pt;&quot;|233
|style=&quot;background:#cf632b;height:8pt;&quot;|234
|style=&quot;background:#db7f3b;height:8pt;&quot;|235
|style=&quot;background:#e3974f;height:8pt;&quot;|236
|style=&quot;background:#e7ab5f;height:8pt;&quot;|237
|style=&quot;background:#efbf77;height:8pt;&quot;|238
|style=&quot;background:#f7d38b;height:8pt;color:black;&quot;|239
|-
|style=&quot;color:black;text-align:right;&quot;|Brights (15)
|style=&quot;background:#a77b3b;height:8pt;&quot;|240
|style=&quot;background:#b79b37;height:8pt;&quot;|241
|style=&quot;background:#c7c337;height:8pt;&quot;|242
|style=&quot;background:#e7e357;height:8pt;color:black;&quot;|243
|style=&quot;background:#7fbfff;height:8pt;color:black;&quot;|244
|style=&quot;background:#abe7ff;height:8pt;color:black;&quot;|245
|style=&quot;background:#d7ffff;height:8pt;color:black;&quot;|246
|style=&quot;background:#670000;height:8pt;&quot;|247
|style=&quot;background:#8b0000;height:8pt;&quot;|248
|style=&quot;background:#b30000;height:8pt;&quot;|249
|style=&quot;background:#d70000;height:8pt;&quot;|250
|style=&quot;background:#ff0000;height:8pt;&quot;|251
|style=&quot;background:#fff393;height:8pt;color:black;&quot;|252
|style=&quot;background:#fff7c7;height:8pt;color:black;&quot;|253
|style=&quot;background:#ffffff;height:8pt;color:black;&quot;|254
|style=&quot;background:#9f5b53;height:8pt;&quot;|255
|-
|}



=== palette.lmp ===
The palette is stored in gfx/palette.lmp. It consists of 256 RGB values using one byte per component, coming out to 768 bytes in total.

=== Download ===
* [[Image:quake_palette.zip]] - The Quake palette in following formats: .aco, .act, .ase, .pal and the original palette.lmp (raw lump of RGB values, 768-bit). Also has a plaintext hex matrix and a .png preview.

== Colormap ==
[[Image:Colormap.png|right|thumb|The Quake colormap.]]

The colormap is a table used for lighting in software Quake engines. It contains a column of 64 values for each palette color. Each value is an index into the palette representing as closely as possible the original color brightened or darkened: shade 0 is double bright, shade 32 is the original color, and shade 63 is black.

&quot;Fullbright&quot; colors are those which are not lit in the colormap, simply using the original color for all 64 shades. These colors, when used in textures and model skins, will not be affected by lighting. Fullbrights are used for things like fire and glowing lights. In Quake these are the last 32 colors in the palette.

Since the [[GLQuake]] engine ignores the colormap, it doesn't support fullbrights. Most user-modified engines have fixed this problem, being hard-coded to treat the last 32 colors as fullbright. For this reason, you shouldn't generate a colormap with a different amount of fullbrights, since it will work in software engines but not in modern GL engines.

=== colormap.lmp ===
The colormap is stored in gfx/colormap.lmp. The version included with Quake is 16385 bytes. Since the colormap only requires 16384 bytes (256 * 64), I'm not exactly sure what the extra byte (&lt;tt&gt;0x20&lt;/tt&gt;) at the end is for.

=== Generating the colormap ===
The following C code will generate a colormap.lmp that is nearly (but not exactly) identical to the Quake colormap. Written by [[metlslime]] who placed it in the public domain.

 /* sample a 24-bit RGB value to one of the colours on the existing 8-bit palette */
 unsigned char convert_24_to_8(const unsigned char palette[768], const int rgb[3])
 {
   int i, j;
   int best_index = -1;
   int best_dist = 0;
 
   for (i = 0; i &lt; 256; i++)
   {
     int dist = 0;
 
     for (j = 0; j &lt; 3; j++)
     {
     /* note that we could use RGB luminosity bias for greater accuracy, but quake's colormap apparently didn't do this */
       int d = abs(rgb[j] - palette[i*3+j]);
       dist += d * d;
     }
 
     if (best_index == -1 || dist &lt; best_dist)
     {
       best_index = i;
       best_dist = dist;
     }
   }
 
   return (unsigned char)best_index;
 }
 
 void generate_colormap(const unsigned char palette[768], unsigned char out_colormap[16384])
 {
   int num_fullbrights = 32; /* the last 32 colours will be full bright */
   int x, y, i;
 
   for (x = 0; x &lt; 256; x++)
   {
     for (y = 0; y &lt; 64; y++)
     {
       if (x &lt; 256 - num_fullbrights)
       {
         int rgb[3];
 
         for (i = 0; i &lt; 3; i++)
         {
           rgb[i] = (palette[x*3+i] * (63 - y) + 16) &gt;&gt; 5; /* divide by 32, rounding to nearest integer */
           if (rgb[i] &gt; 255)
             rgb[i] = 255;
         }
 
         out_colormap[y*256+x] = convert_24_to_8(palette, rgb);
       }
       else
       {
       /* this colour is a fullbright, just keep the original colour */
         out_colormap[y*256+x] = x;
       }
     }
   }
 }

== Legal status ==
John Carmack officially put palette.lmp in the public domain{{citation needed}} to make Quake ports easier, so it is legal to, for example, embed it right into an engine executable. Colormap.lmp can also be considered public domain as it is trivially derived from the palette.

== Related Info ==
* Most engine mods use 32-bit colour, so you need not worry about palettes. With 32-bit textures, shirt/pants colour changing and fullbrights are only possible if engines support a new implementation of them, for example [[DarkPlaces]]'s [[DP_GFX_EXTERNALTEXTURES]] extension, which allows additional _glow, _pants, _shirt, etc textures on top of the main one)</text>
      <sha1>1f7k579871zhomf0dlehawlxsvderug</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3075</id>
      <parentid>2693</parentid>
      <timestamp>2013-12-21T10:58:52Z</timestamp>
      <contributor>
        <ip>146.0.74.205</ip>
      </contributor>
      <comment>dwemolu xzonljf</comment>
      <text xml:space="preserve" bytes="64">lpwgzrvblfxjlj, [url=http://www.hbrexvqxsh.com/]awdxtmhqrg[/url]</text>
      <sha1>7saelha1xi4gs0wnok5td4hru2p4mtw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3107</id>
      <parentid>3075</parentid>
      <timestamp>2013-12-23T14:59:20Z</timestamp>
      <contributor>
        <ip>146.0.74.205</ip>
      </contributor>
      <comment>tsctxic bqdsbrx</comment>
      <text xml:space="preserve" bytes="157">mqzhrrvblfxjlj, &lt;a href=&quot;http://www.zivypdxfxh.com/&quot;&gt;alljhjlklr&lt;/a&gt; , [url=http://www.dhhygqlije.com/]llatutxpgy[/url], http://www.cqkwardmnl.com/ alljhjlklr</text>
      <sha1>17q0t7vr0qg1yl148xkt2c4a4blxkg3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3210</id>
      <parentid>3107</parentid>
      <timestamp>2013-12-30T19:47:22Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <text xml:space="preserve" bytes="17140">[[Image:Qpalette.png|right|thumb|The Quake palette.]]
Color 255 is transparent for sprites, 2d lmps, and gfx.wad entries (excluding [[conchars]], in which case it is black (color 0) that's made transparent). It is important that palette index 0 is black. The parameters for the [[color]] console command are the row #, but is restricted to rows 0 - 13.

It is important that the latter 8 palette rows are &quot;backwards&quot; (light-to-dark instead of dark-to-light). It appears that the [[id Software|ID]] artists did this for no good reason in the original Quake palette, and the engine programmers were forced to add a hack to accommodate it (along with the comment &quot;the artists made some backwards ranges. sigh&quot;). The only area this affects is player shirt/pants color translation (where one palette row must be mapped to another).


{|style=&quot;color:white;font-weight:bold;font-size:8pt;text-align:center;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot;
|-
|style=&quot;color:black;text-align:right;&quot;|White (0)
|style=&quot;background:#000000;height:8pt;&quot;|0
|style=&quot;background:#0f0f0f;height:8pt;&quot;|1
|style=&quot;background:#1f1f1f;height:8pt;&quot;|2
|style=&quot;background:#2f2f2f;height:8pt;&quot;|3
|style=&quot;background:#3f3f3f;height:8pt;&quot;|4
|style=&quot;background:#4b4b4b;height:8pt;&quot;|5
|style=&quot;background:#5b5b5b;height:8pt;&quot;|6
|style=&quot;background:#6b6b6b;height:8pt;&quot;|7
|style=&quot;background:#7b7b7b;height:8pt;&quot;|8
|style=&quot;background:#8b8b8b;height:8pt;&quot;|9
|style=&quot;background:#9b9b9b;height:8pt;&quot;|10
|style=&quot;background:#ababab;height:8pt;&quot;|11
|style=&quot;background:#bbbbbb;height:8pt;&quot;|12
|style=&quot;background:#cbcbcb;height:8pt;&quot;|13
|style=&quot;background:#dbdbdb;height:8pt;&quot;|14
|style=&quot;background:#ebebeb;height:8pt;color:black;&quot;|15
|-
|style=&quot;color:black;text-align:right;&quot;|Brown (1)
|style=&quot;background:#0f0b07;height:8pt;&quot;|16
|style=&quot;background:#170f0b;height:8pt;&quot;|17
|style=&quot;background:#1f170b;height:8pt;&quot;|18
|style=&quot;background:#271b0f;height:8pt;&quot;|19
|style=&quot;background:#2f2313;height:8pt;&quot;|20
|style=&quot;background:#372b17;height:8pt;&quot;|21
|style=&quot;background:#3f2f17;height:8pt;&quot;|22
|style=&quot;background:#4b371b;height:8pt;&quot;|23
|style=&quot;background:#533b1b;height:8pt;&quot;|24
|style=&quot;background:#5b431f;height:8pt;&quot;|25
|style=&quot;background:#634b1f;height:8pt;&quot;|26
|style=&quot;background:#6b531f;height:8pt;&quot;|27
|style=&quot;background:#73571f;height:8pt;&quot;|28
|style=&quot;background:#7b5f23;height:8pt;&quot;|29
|style=&quot;background:#836723;height:8pt;&quot;|30
|style=&quot;background:#8f6f23;height:8pt;&quot;|31
|-
|style=&quot;color:black;text-align:right;&quot;|Light blue (2)
|style=&quot;background:#0b0b0f;height:8pt;&quot;|32
|style=&quot;background:#13131b;height:8pt;&quot;|33
|style=&quot;background:#1b1b27;height:8pt;&quot;|34
|style=&quot;background:#272733;height:8pt;&quot;|35
|style=&quot;background:#2f2f3f;height:8pt;&quot;|36
|style=&quot;background:#37374b;height:8pt;&quot;|37
|style=&quot;background:#3f3f57;height:8pt;&quot;|38
|style=&quot;background:#474767;height:8pt;&quot;|39
|style=&quot;background:#4f4f73;height:8pt;&quot;|40
|style=&quot;background:#5b5b7f;height:8pt;&quot;|41
|style=&quot;background:#63638b;height:8pt;&quot;|42
|style=&quot;background:#6b6b97;height:8pt;&quot;|43
|style=&quot;background:#7373a3;height:8pt;&quot;|44
|style=&quot;background:#7b7baf;height:8pt;&quot;|45
|style=&quot;background:#8383bb;height:8pt;&quot;|46
|style=&quot;background:#8b8bcb;height:8pt;&quot;|47
|-
|style=&quot;color:black;text-align:right;&quot;|Green (3)
|style=&quot;background:#000000;height:8pt;&quot;|48
|style=&quot;background:#070700;height:8pt;&quot;|49
|style=&quot;background:#0b0b00;height:8pt;&quot;|50
|style=&quot;background:#131300;height:8pt;&quot;|51
|style=&quot;background:#1b1b00;height:8pt;&quot;|52
|style=&quot;background:#232300;height:8pt;&quot;|53
|style=&quot;background:#2b2b07;height:8pt;&quot;|54
|style=&quot;background:#2f2f07;height:8pt;&quot;|55
|style=&quot;background:#373707;height:8pt;&quot;|56
|style=&quot;background:#3f3f07;height:8pt;&quot;|57
|style=&quot;background:#474707;height:8pt;&quot;|58
|style=&quot;background:#4b4b0b;height:8pt;&quot;|59
|style=&quot;background:#53530b;height:8pt;&quot;|60
|style=&quot;background:#5b5b0b;height:8pt;&quot;|61
|style=&quot;background:#63630b;height:8pt;&quot;|62
|style=&quot;background:#6b6b0f;height:8pt;&quot;|63
|-
|style=&quot;color:black;text-align:right;&quot;|Red (4)
|style=&quot;background:#070000;height:8pt;&quot;|64
|style=&quot;background:#0f0000;height:8pt;&quot;|65
|style=&quot;background:#170000;height:8pt;&quot;|66
|style=&quot;background:#1f0000;height:8pt;&quot;|67
|style=&quot;background:#270000;height:8pt;&quot;|68
|style=&quot;background:#2f0000;height:8pt;&quot;|69
|style=&quot;background:#370000;height:8pt;&quot;|70
|style=&quot;background:#3f0000;height:8pt;&quot;|71
|style=&quot;background:#470000;height:8pt;&quot;|72
|style=&quot;background:#4f0000;height:8pt;&quot;|73
|style=&quot;background:#570000;height:8pt;&quot;|74
|style=&quot;background:#5f0000;height:8pt;&quot;|75
|style=&quot;background:#670000;height:8pt;&quot;|76
|style=&quot;background:#6f0000;height:8pt;&quot;|77
|style=&quot;background:#770000;height:8pt;&quot;|78
|style=&quot;background:#7f0000;height:8pt;&quot;|79
|-
|style=&quot;color:black;text-align:right;&quot;|Orange (5)
|style=&quot;background:#131300;height:8pt;&quot;|80
|style=&quot;background:#1b1b00;height:8pt;&quot;|81
|style=&quot;background:#232300;height:8pt;&quot;|82
|style=&quot;background:#2f2b00;height:8pt;&quot;|83
|style=&quot;background:#372f00;height:8pt;&quot;|84
|style=&quot;background:#433700;height:8pt;&quot;|85
|style=&quot;background:#4b3b07;height:8pt;&quot;|86
|style=&quot;background:#574307;height:8pt;&quot;|87
|style=&quot;background:#5f4707;height:8pt;&quot;|88
|style=&quot;background:#6b4b0b;height:8pt;&quot;|89
|style=&quot;background:#77530f;height:8pt;&quot;|90
|style=&quot;background:#835713;height:8pt;&quot;|91
|style=&quot;background:#8b5b13;height:8pt;&quot;|92
|style=&quot;background:#975f1b;height:8pt;&quot;|93
|style=&quot;background:#a3631f;height:8pt;&quot;|94
|style=&quot;background:#af6723;height:8pt;&quot;|95
|-
|style=&quot;color:black;text-align:right;&quot;|Gold (6)
|style=&quot;background:#231307;height:8pt;&quot;|96
|style=&quot;background:#2f170b;height:8pt;&quot;|97
|style=&quot;background:#3b1f0f;height:8pt;&quot;|98
|style=&quot;background:#4b2313;height:8pt;&quot;|99
|style=&quot;background:#572b17;height:8pt;&quot;|100
|style=&quot;background:#632f1f;height:8pt;&quot;|101
|style=&quot;background:#733723;height:8pt;&quot;|102
|style=&quot;background:#7f3b2b;height:8pt;&quot;|103
|style=&quot;background:#8f4333;height:8pt;&quot;|104
|style=&quot;background:#9f4f33;height:8pt;&quot;|105
|style=&quot;background:#af632f;height:8pt;&quot;|106
|style=&quot;background:#bf772f;height:8pt;&quot;|107
|style=&quot;background:#cf8f2b;height:8pt;&quot;|108
|style=&quot;background:#dfab27;height:8pt;&quot;|109
|style=&quot;background:#efcb1f;height:8pt;&quot;|110
|style=&quot;background:#fff31b;height:8pt;color:black;&quot;|111
|-
|style=&quot;color:black;text-align:right;&quot;|Peach (7)
|style=&quot;background:#0b0700;height:8pt;&quot;|112
|style=&quot;background:#1b1300;height:8pt;&quot;|113
|style=&quot;background:#2b230f;height:8pt;&quot;|114
|style=&quot;background:#372b13;height:8pt;&quot;|115
|style=&quot;background:#47331b;height:8pt;&quot;|116
|style=&quot;background:#533723;height:8pt;&quot;|117
|style=&quot;background:#633f2b;height:8pt;&quot;|118
|style=&quot;background:#6f4733;height:8pt;&quot;|119
|style=&quot;background:#7f533f;height:8pt;&quot;|120
|style=&quot;background:#8b5f47;height:8pt;&quot;|121
|style=&quot;background:#9b6b53;height:8pt;&quot;|122
|style=&quot;background:#a77b5f;height:8pt;&quot;|123
|style=&quot;background:#b7876b;height:8pt;&quot;|124
|style=&quot;background:#c3937b;height:8pt;&quot;|125
|style=&quot;background:#d3a38b;height:8pt;&quot;|126
|style=&quot;background:#e3b397;height:8pt;&quot;|127
|-
|style=&quot;color:black;text-align:right;&quot;|Purple (8)
|style=&quot;background:#ab8ba3;height:8pt;&quot;|128
|style=&quot;background:#9f7f97;height:8pt;&quot;|129
|style=&quot;background:#937387;height:8pt;&quot;|130
|style=&quot;background:#8b677b;height:8pt;&quot;|131
|style=&quot;background:#7f5b6f;height:8pt;&quot;|132
|style=&quot;background:#775363;height:8pt;&quot;|133
|style=&quot;background:#6b4b57;height:8pt;&quot;|134
|style=&quot;background:#5f3f4b;height:8pt;&quot;|135
|style=&quot;background:#573743;height:8pt;&quot;|136
|style=&quot;background:#4b2f37;height:8pt;&quot;|137
|style=&quot;background:#43272f;height:8pt;&quot;|138
|style=&quot;background:#371f23;height:8pt;&quot;|139
|style=&quot;background:#2b171b;height:8pt;&quot;|140
|style=&quot;background:#231313;height:8pt;&quot;|141
|style=&quot;background:#170b0b;height:8pt;&quot;|142
|style=&quot;background:#0f0707;height:8pt;&quot;|143
|-
|style=&quot;color:black;text-align:right;&quot;|Magenta (9)
|style=&quot;background:#bb739f;height:8pt;&quot;|144
|style=&quot;background:#af6b8f;height:8pt;&quot;|145
|style=&quot;background:#a35f83;height:8pt;&quot;|146
|style=&quot;background:#975777;height:8pt;&quot;|147
|style=&quot;background:#8b4f6b;height:8pt;&quot;|148
|style=&quot;background:#7f4b5f;height:8pt;&quot;|149
|style=&quot;background:#734353;height:8pt;&quot;|150
|style=&quot;background:#6b3b4b;height:8pt;&quot;|151
|style=&quot;background:#5f333f;height:8pt;&quot;|152
|style=&quot;background:#532b37;height:8pt;&quot;|153
|style=&quot;background:#47232b;height:8pt;&quot;|154
|style=&quot;background:#3b1f23;height:8pt;&quot;|155
|style=&quot;background:#2f171b;height:8pt;&quot;|156
|style=&quot;background:#231313;height:8pt;&quot;|157
|style=&quot;background:#170b0b;height:8pt;&quot;|158
|style=&quot;background:#0f0707;height:8pt;&quot;|159
|-
|style=&quot;color:black;text-align:right;&quot;|Tan (10)
|style=&quot;background:#dbc3bb;height:8pt;&quot;|160
|style=&quot;background:#cbb3a7;height:8pt;&quot;|161
|style=&quot;background:#bfa39b;height:8pt;&quot;|162
|style=&quot;background:#af978b;height:8pt;&quot;|163
|style=&quot;background:#a3877b;height:8pt;&quot;|164
|style=&quot;background:#977b6f;height:8pt;&quot;|165
|style=&quot;background:#876f5f;height:8pt;&quot;|166
|style=&quot;background:#7b6353;height:8pt;&quot;|167
|style=&quot;background:#6b5747;height:8pt;&quot;|168
|style=&quot;background:#5f4b3b;height:8pt;&quot;|169
|style=&quot;background:#533f33;height:8pt;&quot;|170
|style=&quot;background:#433327;height:8pt;&quot;|171
|style=&quot;background:#372b1f;height:8pt;&quot;|172
|style=&quot;background:#271f17;height:8pt;&quot;|173
|style=&quot;background:#1b130f;height:8pt;&quot;|174
|style=&quot;background:#0f0b07;height:8pt;&quot;|175
|-
|style=&quot;color:black;text-align:right;&quot;|Light green (11)
|style=&quot;background:#6f837b;height:8pt;&quot;|176
|style=&quot;background:#677b6f;height:8pt;&quot;|177
|style=&quot;background:#5f7367;height:8pt;&quot;|178
|style=&quot;background:#576b5f;height:8pt;&quot;|179
|style=&quot;background:#4f6357;height:8pt;&quot;|180
|style=&quot;background:#475b4f;height:8pt;&quot;|181
|style=&quot;background:#3f5347;height:8pt;&quot;|182
|style=&quot;background:#374b3f;height:8pt;&quot;|183
|style=&quot;background:#2f4337;height:8pt;&quot;|184
|style=&quot;background:#2b3b2f;height:8pt;&quot;|185
|style=&quot;background:#233327;height:8pt;&quot;|186
|style=&quot;background:#1f2b1f;height:8pt;&quot;|187
|style=&quot;background:#172317;height:8pt;&quot;|188
|style=&quot;background:#0f1b13;height:8pt;&quot;|189
|style=&quot;background:#0b130b;height:8pt;&quot;|190
|style=&quot;background:#070b07;height:8pt;&quot;|191
|-
|style=&quot;color:black;text-align:right;&quot;|Yellow (12)
|style=&quot;background:#fff31b;height:8pt;color:black;&quot;|192
|style=&quot;background:#efdf17;height:8pt;color:black;&quot;|193
|style=&quot;background:#dbcb13;height:8pt;&quot;|194
|style=&quot;background:#cbb70f;height:8pt;&quot;|195
|style=&quot;background:#bba70f;height:8pt;&quot;|196
|style=&quot;background:#ab970b;height:8pt;&quot;|197
|style=&quot;background:#9b8307;height:8pt;&quot;|198
|style=&quot;background:#8b7307;height:8pt;&quot;|199
|style=&quot;background:#7b6307;height:8pt;&quot;|200
|style=&quot;background:#6b5300;height:8pt;&quot;|201
|style=&quot;background:#5b4700;height:8pt;&quot;|202
|style=&quot;background:#4b3700;height:8pt;&quot;|203
|style=&quot;background:#3b2b00;height:8pt;&quot;|204
|style=&quot;background:#2b1f00;height:8pt;&quot;|205
|style=&quot;background:#1b0f00;height:8pt;&quot;|206
|style=&quot;background:#0b0700;height:8pt;&quot;|207
|-
|style=&quot;color:black;text-align:right;&quot;|Blue (13)
|style=&quot;background:#0000ff;height:8pt;&quot;|208
|style=&quot;background:#0b0bef;height:8pt;&quot;|209
|style=&quot;background:#1313df;height:8pt;&quot;|210
|style=&quot;background:#1b1bcf;height:8pt;&quot;|211
|style=&quot;background:#2323bf;height:8pt;&quot;|212
|style=&quot;background:#2b2baf;height:8pt;&quot;|213
|style=&quot;background:#2f2f9f;height:8pt;&quot;|214
|style=&quot;background:#2f2f8f;height:8pt;&quot;|215
|style=&quot;background:#2f2f7f;height:8pt;&quot;|216
|style=&quot;background:#2f2f6f;height:8pt;&quot;|217
|style=&quot;background:#2f2f5f;height:8pt;&quot;|218
|style=&quot;background:#2b2b4f;height:8pt;&quot;|219
|style=&quot;background:#23233f;height:8pt;&quot;|220
|style=&quot;background:#1b1b2f;height:8pt;&quot;|221
|style=&quot;background:#13131f;height:8pt;&quot;|222
|style=&quot;background:#0b0b0f;height:8pt;&quot;|223
|-
|style=&quot;color:black;text-align:right;&quot;|Fire (14)
|style=&quot;background:#2b0000;height:8pt;&quot;|224
|style=&quot;background:#3b0000;height:8pt;&quot;|225
|style=&quot;background:#4b0700;height:8pt;&quot;|226
|style=&quot;background:#5f0700;height:8pt;&quot;|227
|style=&quot;background:#6f0f00;height:8pt;&quot;|228
|style=&quot;background:#7f1707;height:8pt;&quot;|229
|style=&quot;background:#931f07;height:8pt;&quot;|230
|style=&quot;background:#a3270b;height:8pt;&quot;|231
|style=&quot;background:#b7330f;height:8pt;&quot;|232
|style=&quot;background:#c34b1b;height:8pt;&quot;|233
|style=&quot;background:#cf632b;height:8pt;&quot;|234
|style=&quot;background:#db7f3b;height:8pt;&quot;|235
|style=&quot;background:#e3974f;height:8pt;&quot;|236
|style=&quot;background:#e7ab5f;height:8pt;&quot;|237
|style=&quot;background:#efbf77;height:8pt;&quot;|238
|style=&quot;background:#f7d38b;height:8pt;color:black;&quot;|239
|-
|style=&quot;color:black;text-align:right;&quot;|Brights (15)
|style=&quot;background:#a77b3b;height:8pt;&quot;|240
|style=&quot;background:#b79b37;height:8pt;&quot;|241
|style=&quot;background:#c7c337;height:8pt;&quot;|242
|style=&quot;background:#e7e357;height:8pt;color:black;&quot;|243
|style=&quot;background:#7fbfff;height:8pt;color:black;&quot;|244
|style=&quot;background:#abe7ff;height:8pt;color:black;&quot;|245
|style=&quot;background:#d7ffff;height:8pt;color:black;&quot;|246
|style=&quot;background:#670000;height:8pt;&quot;|247
|style=&quot;background:#8b0000;height:8pt;&quot;|248
|style=&quot;background:#b30000;height:8pt;&quot;|249
|style=&quot;background:#d70000;height:8pt;&quot;|250
|style=&quot;background:#ff0000;height:8pt;&quot;|251
|style=&quot;background:#fff393;height:8pt;color:black;&quot;|252
|style=&quot;background:#fff7c7;height:8pt;color:black;&quot;|253
|style=&quot;background:#ffffff;height:8pt;color:black;&quot;|254
|style=&quot;background:#9f5b53;height:8pt;&quot;|255
|-
|}



=== palette.lmp ===
The palette is stored in gfx/palette.lmp. It consists of 256 RGB values using one byte per component, coming out to 768 bytes in total.

=== Download ===
* [[Image:quake_palette.zip]] - The Quake palette in following formats: .aco, .act, .ase, .pal and the original palette.lmp (raw lump of RGB values, 768-bit). Also has a plaintext hex matrix and a .png preview.

== Colormap ==
[[Image:Colormap.png|right|thumb|The Quake colormap.]]

The colormap is a table used for lighting in software Quake engines. It contains a column of 64 values for each palette color. Each value is an index into the palette representing as closely as possible the original color brightened or darkened: shade 0 is double bright, shade 32 is the original color, and shade 63 is black.

&quot;Fullbright&quot; colors are those which are not lit in the colormap, simply using the original color for all 64 shades. These colors, when used in textures and model skins, will not be affected by lighting. Fullbrights are used for things like fire and glowing lights. In Quake these are the last 32 colors in the palette.

Since the [[GLQuake]] engine ignores the colormap, it doesn't support fullbrights. Most user-modified engines have fixed this problem, being hard-coded to treat the last 32 colors as fullbright. For this reason, you shouldn't generate a colormap with a different amount of fullbrights, since it will work in software engines but not in modern GL engines.

=== colormap.lmp ===
The colormap is stored in gfx/colormap.lmp. The version included with Quake is 16385 bytes. Since the colormap only requires 16384 bytes (256 * 64), I'm not exactly sure what the extra byte (&lt;tt&gt;0x20&lt;/tt&gt;) at the end is for.

=== Generating the colormap ===
The following C code will generate a colormap.lmp that is nearly (but not exactly) identical to the Quake colormap. Written by [[metlslime]] who placed it in the public domain.

 /* sample a 24-bit RGB value to one of the colours on the existing 8-bit palette */
 unsigned char convert_24_to_8(const unsigned char palette[768], const int rgb[3])
 {
   int i, j;
   int best_index = -1;
   int best_dist = 0;
 
   for (i = 0; i &lt; 256; i++)
   {
     int dist = 0;
 
     for (j = 0; j &lt; 3; j++)
     {
     /* note that we could use RGB luminosity bias for greater accuracy, but quake's colormap apparently didn't do this */
       int d = abs(rgb[j] - palette[i*3+j]);
       dist += d * d;
     }
 
     if (best_index == -1 || dist &lt; best_dist)
     {
       best_index = i;
       best_dist = dist;
     }
   }
 
   return (unsigned char)best_index;
 }
 
 void generate_colormap(const unsigned char palette[768], unsigned char out_colormap[16384])
 {
   int num_fullbrights = 32; /* the last 32 colours will be full bright */
   int x, y, i;
 
   for (x = 0; x &lt; 256; x++)
   {
     for (y = 0; y &lt; 64; y++)
     {
       if (x &lt; 256 - num_fullbrights)
       {
         int rgb[3];
 
         for (i = 0; i &lt; 3; i++)
         {
           rgb[i] = (palette[x*3+i] * (63 - y) + 16) &gt;&gt; 5; /* divide by 32, rounding to nearest integer */
           if (rgb[i] &gt; 255)
             rgb[i] = 255;
         }
 
         out_colormap[y*256+x] = convert_24_to_8(palette, rgb);
       }
       else
       {
       /* this colour is a fullbright, just keep the original colour */
         out_colormap[y*256+x] = x;
       }
     }
   }
 }

== Legal status ==
John Carmack officially put palette.lmp in the public domain{{citation needed}} to make Quake ports easier, so it is legal to, for example, embed it right into an engine executable. Colormap.lmp can also be considered public domain as it is trivially derived from the palette.

== Related Info ==
* Most engine mods use 32-bit colour, so you need not worry about palettes. With 32-bit textures, shirt/pants colour changing and fullbrights are only possible if engines support a new implementation of them, for example [[DarkPlaces]]'s [[DP_GFX_EXTERNALTEXTURES]] extension, which allows additional _glow, _pants, _shirt, etc textures on top of the main one)</text>
      <sha1>1f7k579871zhomf0dlehawlxsvderug</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quake story</title>
    <ns>0</ns>
    <id>779</id>
    <revision>
      <id>2267</id>
      <timestamp>2013-03-26T15:23:33Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>Created page with &quot;Quake is not a game well-known for having a deep, well executed story. The plot as included in the .txt file that can be found in the root directory of a fresh install contain...&quot;</comment>
      <text xml:space="preserve" bytes="2030">Quake is not a game well-known for having a deep, well executed story. The plot as included in the .txt file that can be found in the root directory of a fresh install contains a few paragraphs that give the game a very rough background that helps to explain the sudden shifts between modern bases, medieval and strange Netherworldian environments. As the player progresses through the game, additional passages are presented to them at the end of each episode, and upon finishing the game, having collected all four [[Runes]] and defeated [[Shub-Niggurath]].

==Official Story==

===Quake manual===
'''A. Background'''
You get the phone call at 4 a.m. By 5:30 you're in the secret installation. The commander explains tersely, &quot;It's about the Slipgate device. Once we perfect these, we'll be able to use them to transport people and cargo from one place to another instantly.

&quot;An enemy codenamed Quake, is using his own slipgates to insert death squads inside our bases to kill, steal, and kidnap..

&quot;The hell of it is we have no idea where he's from. Our top scientists think Quake's not from Earth, but another dimension. They say Quake's preparing to unleash his real army, whatever that is.

&quot;You're our best man. This is Operation Counterstrike and you're in charge. Find Quake, and stop him ... or it ... You have full authority to requisition anything you need. If the eggheads are right, all our lives are expendable..&quot;

'''B. Prelude to Destruction'''
While scouting the neighborhood, you hear shots back at the base Damn, that Quake bastard works fast! He heard about Operation Counterstrike, and hit first. Racing back, you see the place is overrun. You are almost certainly the only survivor. Operation Counterstrike is over. Except for you.

You know that the heart of the installation holds a Slipgate. Since Quake's killers came through, it is still set to his dimension. You can use it to get loose in his hometown. Maybe you can get to the asshole personally. You pump a round into your shotgun, and get moving.</text>
      <sha1>3i070ggbvc7cvq115q1aqapzt0am9ib</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2269</id>
      <parentid>2267</parentid>
      <timestamp>2013-03-26T15:43:28Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>added small introductions to each piece of story text and formatted with italics</comment>
      <text xml:space="preserve" bytes="5607">Quake is not a game well-known for having a deep, well-executed story. The plot as included in the .txt file that can be found in the root directory of a fresh install contains a few paragraphs that give the game a very rough background that helps to explain the sudden shifts between modern bases, medieval and strange Netherworldian environments. As the player progresses through the game, additional passages are presented to them at the end of each episode, and upon finishing the game, having collected all four [[Runes]] and defeated [[Shub-Niggurath]].

==Official Story==

===Quake manual===
This is the text that can be found in the manual.txt that is included in every install of Quake.

&lt;i&gt;'''Background'''

You get the phone call at 4 a.m. By 5:30 you're in the secret installation. The commander explains tersely, &quot;It's about the Slipgate device. Once we perfect these, we'll be able to use them to transport people and cargo from one place to another instantly.

&quot;An enemy codenamed Quake, is using his own slipgates to insert death squads inside our bases to kill, steal, and kidnap..

&quot;The hell of it is we have no idea where he's from. Our top scientists think Quake's not from Earth, but another dimension. They say Quake's preparing to unleash his real army, whatever that is.

&quot;You're our best man. This is Operation Counterstrike and you're in charge. Find Quake, and stop him ... or it ... You have full authority to requisition anything you need. If the eggheads are right, all our lives are expendable..&quot;

'''Prelude to Destruction'''

While scouting the neighborhood, you hear shots back at the base Damn, that Quake bastard works fast! He heard about Operation Counterstrike, and hit first. Racing back, you see the place is overrun. You are almost certainly the only survivor. Operation Counterstrike is over. Except for you.

You know that the heart of the installation holds a Slipgate. Since Quake's killers came through, it is still set to his dimension. You can use it to get loose in his hometown. Maybe you can get to the asshole personally. You pump a round into your shotgun, and get moving.&lt;/i&gt;

===The Dimension of the Doomed===
After taking the first Rune and defeating [[Cthon]], the player is rewarded with the following text.

&lt;i&gt;As the corpse of the monstrous entity
Chthon sinks back into the lava whence
it rose, you grip the Rune of Earth
Magic tightly. Now that you have
conquered the Dimension of the Doomed,
realm of Earth Magic, you are ready to
complete your task. A Rune of magic
power lies at the end of each haunted
land of Quake. Go forth, seek the
totality of the four Runes!&lt;/i&gt;

===The Realm of Black Magic===
Once the player makes it out of the brutal final sequence of the Dismal Oubliette with the second Rune, the player is shown the following text.

&lt;i&gt;The Rune of Black Magic throbs evilly in
your hand and whispers dark thoughts
into your brain. You learn the inmost
lore of the Hell-Mother; Shub-Niggurath!
You now know that she is behind all the
terrible plotting which has led to so
much death and horror. But she is not
inviolate! Armed with this Rune, you
realize that once all four Runes are
combined, the gate to Shub-Niggurath's
Pit will open, and you can face the
Witch-Goddess herself in her frightful
otherworld cathedral.&lt;/i&gt;

===The Netherworld===
Once the player escapes with the third Rune from the Chambers of Torment, they are shown the following message.

&lt;i&gt;The charred viscera of diabolic horrors
bubble viscously as you seize the Rune
of Hell Magic. Its heat scorches your
hand, and its terrible secrets blight
your mind. Gathering the shreds of your
courage, you shake the devil's shackles
from your soul, and become ever more
hard and determined to destroy the
hideous creatures whose mere existence
threatens the souls and psyches of all
the population of Earth.&lt;/i&gt;

===The Elderworld===
The Elderworld ends with the player battling a group of vores in a tense battle, before grabbing the final Rune and escaping. Upon doing so, the following message is shown.

&lt;i&gt;Despite the awful might of the Elder
World, you have achieved the Rune of
Elder Magic, capstone of all types of
arcane wisdom. Beyond good and evil,
beyond life and death, the Rune
pulsates, heavy with import. Patient and
potent, the Elder Being Shub-Niggurath
weaves her dire plans to clear off all
life from the Earth, and bring her own
foul offspring to our world! For all the
dwellers in these nightmare dimensions
are her descendants! Once all Runes of
magic power are united, the energy
behind them will blast open the Gateway
to Shub-Niggurath, and you can travel
there to foil the Hell-Mother's plots
in person.&lt;/i&gt;

===All Runes collected===
After collecting the all four runes, the player is shown the following text.

&lt;i&gt;Now, you have all four Runes. You sense
tremendous invisible forces moving to
unseal ancient barriers. Shub-Niggurath
had hoped to use the Runes Herself to
clear off the Earth, but now instead,
you will use them to enter her home and
confront her as an avatar of avenging
Earth-life. If you defeat her, you will
be remembered forever as the savior of
the planet. If she conquers, it will be
as if you had never been born.&lt;/i&gt;

===The end===
After killing [[Shub-Niggurath]] at the end of the game, the final congratulations message is displayed.

&lt;i&gt;Congratulations and well done! You have
beaten the hideous Shub-Niggurath, and
her hundreds of ugly changelings and
monsters. You have proven that your
skill and your cunning are greater than
nall the powers of Quake. You are the
master now. Id Software salutes you.&lt;/i&gt;</text>
      <sha1>t8mtavjyiwa6t3xds15bbcbwr5ctfq3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2270</id>
      <parentid>2269</parentid>
      <timestamp>2013-03-26T15:48:33Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="5612">Quake is not a game well-known for having a deep, well-executed story. The plot as included in the .txt file that can be found in the root directory of a fresh install contains a few paragraphs that give the game a very rough background that helps to explain the sudden shifts between modern bases, medieval and strange Netherworldian environments. As the player progresses through the game, additional passages are presented to them at the end of each episode, and upon finishing the game, having collected all four [[Rune|Runes]] and defeated [[Shub-Niggurath]].

==Official Story==

===Quake manual===
This is the text that can be found in the manual.txt that is included in every install of Quake.

&lt;i&gt;'''Background'''

You get the phone call at 4 a.m. By 5:30 you're in the secret installation. The commander explains tersely, &quot;It's about the Slipgate device. Once we perfect these, we'll be able to use them to transport people and cargo from one place to another instantly.

&quot;An enemy codenamed Quake, is using his own slipgates to insert death squads inside our bases to kill, steal, and kidnap..

&quot;The hell of it is we have no idea where he's from. Our top scientists think Quake's not from Earth, but another dimension. They say Quake's preparing to unleash his real army, whatever that is.

&quot;You're our best man. This is Operation Counterstrike and you're in charge. Find Quake, and stop him ... or it ... You have full authority to requisition anything you need. If the eggheads are right, all our lives are expendable..&quot;

'''Prelude to Destruction'''

While scouting the neighborhood, you hear shots back at the base Damn, that Quake bastard works fast! He heard about Operation Counterstrike, and hit first. Racing back, you see the place is overrun. You are almost certainly the only survivor. Operation Counterstrike is over. Except for you.

You know that the heart of the installation holds a Slipgate. Since Quake's killers came through, it is still set to his dimension. You can use it to get loose in his hometown. Maybe you can get to the asshole personally. You pump a round into your shotgun, and get moving.&lt;/i&gt;

===The Dimension of the Doomed===
After taking the first Rune and defeating [[Cthon]], the player is rewarded with the following text.

&lt;i&gt;As the corpse of the monstrous entity
Chthon sinks back into the lava whence
it rose, you grip the Rune of Earth
Magic tightly. Now that you have
conquered the Dimension of the Doomed,
realm of Earth Magic, you are ready to
complete your task. A Rune of magic
power lies at the end of each haunted
land of Quake. Go forth, seek the
totality of the four Runes!&lt;/i&gt;

===The Realm of Black Magic===
Once the player makes it out of the brutal final sequence of the Dismal Oubliette with the second Rune, the player is shown the following text.

&lt;i&gt;The Rune of Black Magic throbs evilly in
your hand and whispers dark thoughts
into your brain. You learn the inmost
lore of the Hell-Mother; Shub-Niggurath!
You now know that she is behind all the
terrible plotting which has led to so
much death and horror. But she is not
inviolate! Armed with this Rune, you
realize that once all four Runes are
combined, the gate to Shub-Niggurath's
Pit will open, and you can face the
Witch-Goddess herself in her frightful
otherworld cathedral.&lt;/i&gt;

===The Netherworld===
Once the player escapes with the third Rune from the Chambers of Torment, they are shown the following message.

&lt;i&gt;The charred viscera of diabolic horrors
bubble viscously as you seize the Rune
of Hell Magic. Its heat scorches your
hand, and its terrible secrets blight
your mind. Gathering the shreds of your
courage, you shake the devil's shackles
from your soul, and become ever more
hard and determined to destroy the
hideous creatures whose mere existence
threatens the souls and psyches of all
the population of Earth.&lt;/i&gt;

===The Elderworld===
The Elderworld ends with the player battling a group of vores in a tense battle, before grabbing the final Rune and escaping. Upon doing so, the following message is shown.

&lt;i&gt;Despite the awful might of the Elder
World, you have achieved the Rune of
Elder Magic, capstone of all types of
arcane wisdom. Beyond good and evil,
beyond life and death, the Rune
pulsates, heavy with import. Patient and
potent, the Elder Being Shub-Niggurath
weaves her dire plans to clear off all
life from the Earth, and bring her own
foul offspring to our world! For all the
dwellers in these nightmare dimensions
are her descendants! Once all Runes of
magic power are united, the energy
behind them will blast open the Gateway
to Shub-Niggurath, and you can travel
there to foil the Hell-Mother's plots
in person.&lt;/i&gt;

===All Runes collected===
After collecting the all four runes, the player is shown the following text.

&lt;i&gt;Now, you have all four Runes. You sense
tremendous invisible forces moving to
unseal ancient barriers. Shub-Niggurath
had hoped to use the Runes Herself to
clear off the Earth, but now instead,
you will use them to enter her home and
confront her as an avatar of avenging
Earth-life. If you defeat her, you will
be remembered forever as the savior of
the planet. If she conquers, it will be
as if you had never been born.&lt;/i&gt;

===The end===
After killing [[Shub-Niggurath]] at the end of the game, the final congratulations message is displayed.

&lt;i&gt;Congratulations and well done! You have
beaten the hideous Shub-Niggurath, and
her hundreds of ugly changelings and
monsters. You have proven that your
skill and your cunning are greater than
nall the powers of Quake. You are the
master now. Id Software salutes you.&lt;/i&gt;</text>
      <sha1>3f53qt4hfmgxcm725n333kqhwt4viyy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quake tools</title>
    <ns>0</ns>
    <id>460</id>
    <revision>
      <id>840</id>
      <timestamp>2008-05-16T10:30:31Z</timestamp>
      <contributor>
        <username>DrLabman</username>
        <id>11</id>
      </contributor>
      <comment>New page: 	 PAK editors      * [[AdQuedit]]     * [[PakExplorer]] - very handy, explorer-like interface     * [[PakScape]] - an excellent, multigame pak/zip utility with an explorer-like interface  ...</comment>
      <text xml:space="preserve" bytes="1047">	
PAK editors

    * [[AdQuedit]]
    * [[PakExplorer]] - very handy, explorer-like interface
    * [[PakScape]] - an excellent, multigame pak/zip utility with an explorer-like interface
    * [[QuArK]] - crappy python linking (fail somethimes)
    * [[qPED]] - support long names, explorer-like interface
    * [[WinPak]] - functional
    * [[XmPak]] - old Motif-based GUI to display and export the contents of Quake and Quake II PAK files
    * [[XPak]] - freeware modification/extraction/creation tool

Graphic &amp; Resource Editors

    * [[AdQuedit]]
    * [[TexMex]] - solid tool with a few niggling bugs
    * [[Wally]] - q2 texture tool which also supports q1 wads
    * ?MipDip - old, don't use
    * ?qArt - based on ?MipDip, almost as old, don't use

Model Editors

    * [[qME]]
    * [[QuArK]]
    * ?3DS Max - ?How to generate Quake content with 3ds Max
    * ?Quake 2 modeler
    * [[MilkShape 3D]]
    * [[Wings3d]] - include uvw to create correct skins

See Also:

    * [[Modding Tools]]
    * [[Mapping Tools]]
    * [[Demo Tools]]</text>
      <sha1>6n2pc29kej2rj4ccdbtcvcpe1i5k592</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>841</id>
      <parentid>840</parentid>
      <timestamp>2008-05-16T10:31:21Z</timestamp>
      <contributor>
        <username>DrLabman</username>
        <id>11</id>
      </contributor>
      <text xml:space="preserve" bytes="1047">	
PAK editors

    * [[AdQuedit]]
    * [[PakExplorer]] - very handy, explorer-like interface
    * [[PakScape]] - an excellent, multigame pak/zip utility with an explorer-like interface
    * [[QuArK]] - crappy python linking (fail somethimes)
    * [[qPED]] - support long names, explorer-like interface
    * [[WinPak]] - functional
    * [[XmPak]] - old Motif-based GUI to display and export the contents of Quake and Quake II PAK files
    * [[XPak]] - freeware modification/extraction/creation tool

Graphic &amp; Resource Editors

    * [[AdQuedit]]
    * [[TexMex]] - solid tool with a few niggling bugs
    * [[Wally]] - q2 texture tool which also supports q1 wads
    * ?MipDip - old, don't use
    * ?qArt - based on ?MipDip, almost as old, don't use

Model Editors

    * [[qME]]
    * [[QuArK]]
    * ?3DS Max - ?How to generate Quake content with 3ds Max
    * ?Quake 2 modeler
    * [[MilkShape 3D]]
    * [[Wings3d]] - include uvw to create correct skins

See Also:

    * [[Modding tools]]
    * [[Mapping tools]]
    * [[Demo tools]]</text>
      <sha1>93o8710r1p9q4cl4opkqqvh2z78kw8f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>956</id>
      <parentid>841</parentid>
      <timestamp>2008-11-14T08:03:43Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="1218">TODO: need stuff like dzip, fun name makers, idgamma , front-ends, server browsers, etc.  Maybe need one page for development tools, and another for player-oriented tools.

PAK editors

    * [[AdQuedit]]
    * [[PakExplorer]] - very handy, explorer-like interface
    * [[PakScape]] - an excellent, multigame pak/zip utility with an explorer-like interface
    * [[QuArK]] - crappy python linking (fail somethimes)
    * [[qPED]] - support long names, explorer-like interface
    * [[WinPak]] - functional
    * [[XmPak]] - old Motif-based GUI to display and export the contents of Quake and Quake II PAK files
    * [[XPak]] - freeware modification/extraction/creation tool

Graphic &amp; Resource Editors

    * [[AdQuedit]]
    * [[TexMex]] - solid tool with a few niggling bugs
    * [[Wally]] - q2 texture tool which also supports q1 wads
    * ?MipDip - old, don't use
    * ?qArt - based on ?MipDip, almost as old, don't use

Model Editors

    * [[qME]]
    * [[QuArK]]
    * ?3DS Max - ?How to generate Quake content with 3ds Max
    * ?Quake 2 modeler
    * [[MilkShape 3D]]
    * [[Wings3d]] - include uvw to create correct skins

See Also:

    * [[Modding tools]]
    * [[Mapping tools]]
    * [[Demo tools]]</text>
      <sha1>fnwxhc5ymmda2obscjal08k51slmjpa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>983</id>
      <parentid>956</parentid>
      <timestamp>2009-04-17T23:31:07Z</timestamp>
      <contributor>
        <ip>88.70.232.110</ip>
      </contributor>
      <comment>Quaddicted tools repository link added</comment>
      <text xml:space="preserve" bytes="1290">TODO: need stuff like dzip, fun name makers, idgamma , front-ends, server browsers, etc.  Maybe need one page for development tools, and another for player-oriented tools.

PAK editors

    * [[AdQuedit]]
    * [[PakExplorer]] - very handy, explorer-like interface
    * [[PakScape]] - an excellent, multigame pak/zip utility with an explorer-like interface
    * [[QuArK]] - crappy python linking (fail somethimes)
    * [[qPED]] - support long names, explorer-like interface
    * [[WinPak]] - functional
    * [[XmPak]] - old Motif-based GUI to display and export the contents of Quake and Quake II PAK files
    * [[XPak]] - freeware modification/extraction/creation tool

Graphic &amp; Resource Editors

    * [[AdQuedit]]
    * [[TexMex]] - solid tool with a few niggling bugs
    * [[Wally]] - q2 texture tool which also supports q1 wads
    * ?MipDip - old, don't use
    * ?qArt - based on ?MipDip, almost as old, don't use

Model Editors

    * [[qME]]
    * [[QuArK]]
    * ?3DS Max - ?How to generate Quake content with 3ds Max
    * ?Quake 2 modeler
    * [[MilkShape 3D]]
    * [[Wings3d]] - include uvw to create correct skins

See Also:

    * [http://www.quaddicted.com/tools/ Quaddicted Quake Tools Archive]
    * [[Modding tools]]
    * [[Mapping tools]]
    * [[Demo tools]]</text>
      <sha1>k6m95p51yenj9t41xufvv14v8v7i0mn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1176</id>
      <parentid>983</parentid>
      <timestamp>2009-09-24T04:12:37Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <comment>general clean up, few additions</comment>
      <text xml:space="preserve" bytes="1202">''TODO: need stuff like dzip, fun name makers, idgamma , front-ends, server browsers, etc.  Maybe need one page for development tools, and another for player-oriented tools.''
==PAK Editors:==
* [[AdQuedit]]
* [[PakExplorer]] - Very handy, explorer-like interface.
* [[PakScape]] - An excellent, multigame pak/zip utility with an explorer-like interface.
* [[QuArK]]
* [[qPED]] - Supports long names, explorer-like interface.
* [[WinPak]]
* [[XmPak]] - Old Motif-based GUI to display and export the contents of Quake and Quake 2 PAK files.
* [[XPak]] - Freeware modification/extraction/creation tool.

==Graphic &amp; Resource Editors:==
* [[Fimg]] - [[FrikaC|FrikaC's]] graphical resource editor for Quake formats.
* [[AdQuedit]]
* [[TexMex]]
* [[Wally]] - Quake 2 texture tool which also supports Quake wads.
* [[MipDip]] - Antiquated, not recommended.
* [[qArt]] - Based on MipDip, similarly antiquated.

==Model Editors:==
* [[qME]]
* [[QuArK]]

===Third Party Model Editors:===
* [http://chumbalum.swissquake.ch/ Milkshape3d]
* [http://www.wings3d.com/ Wings3d]

==See Also:==
* [http://www.quaddicted.com/tools/ Quaddicted Quake Tools Archive]
* [[Modding tools]]
* [[Mapping tools]]
* [[Demo tools]]</text>
      <sha1>smapc2rt3ec5wouqqos4kmc7gagwzlb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1219</id>
      <parentid>1176</parentid>
      <timestamp>2009-09-25T05:19:05Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1202">''TODO: need stuff like dzip, fun name makers, idgamma , front-ends, server browsers, etc.  Maybe need one page for development tools, and another for player-oriented tools.''
==PAK Editors:==
* [[AdQuedit]]
* [[PakExplorer]] - Very handy, explorer-like interface.
* [[PakScape]] - An excellent, multigame pak/zip utility with an explorer-like interface.
* [[QuArK]]
* [[QPed]] - Supports long names, explorer-like interface.
* [[WinPak]]
* [[XmPak]] - Old Motif-based GUI to display and export the contents of Quake and Quake 2 PAK files.
* [[XPak]] - Freeware modification/extraction/creation tool.

==Graphic &amp; Resource Editors:==
* [[Fimg]] - [[FrikaC|FrikaC's]] graphical resource editor for Quake formats.
* [[AdQuedit]]
* [[TexMex]]
* [[Wally]] - Quake 2 texture tool which also supports Quake wads.
* [[MipDip]] - Antiquated, not recommended.
* [[qArt]] - Based on MipDip, similarly antiquated.

==Model Editors:==
* [[qME]]
* [[QuArK]]

===Third Party Model Editors:===
* [http://chumbalum.swissquake.ch/ Milkshape3d]
* [http://www.wings3d.com/ Wings3d]

==See Also:==
* [http://www.quaddicted.com/tools/ Quaddicted Quake Tools Archive]
* [[Modding tools]]
* [[Mapping tools]]
* [[Demo tools]]</text>
      <sha1>qs9i16al3tbyx7e4qrtl10e2zktp7ee</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2219</id>
      <parentid>1219</parentid>
      <timestamp>2013-03-26T13:04:17Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1206">{{todo|todo=need stuff like dzip, fun name makers, idgamma , front-ends, server browsers, etc.  Maybe need one page for development tools, and another for player-oriented tools.}}
==PAK Editors:==
* [[AdQuedit]]
* [[PakExplorer]] - Very handy, explorer-like interface.
* [[PakScape]] - An excellent, multigame pak/zip utility with an explorer-like interface.
* [[QuArK]]
* [[QPed]] - Supports long names, explorer-like interface.
* [[WinPak]]
* [[XmPak]] - Old Motif-based GUI to display and export the contents of Quake and Quake 2 PAK files.
* [[XPak]] - Freeware modification/extraction/creation tool.

==Graphic &amp; Resource Editors:==
* [[Fimg]] - [[FrikaC|FrikaC's]] graphical resource editor for Quake formats.
* [[AdQuedit]]
* [[TexMex]]
* [[Wally]] - Quake 2 texture tool which also supports Quake wads.
* [[MipDip]] - Antiquated, not recommended.
* [[qArt]] - Based on MipDip, similarly antiquated.

==Model Editors:==
* [[qME]]
* [[QuArK]]

===Third Party Model Editors:===
* [http://chumbalum.swissquake.ch/ Milkshape3d]
* [http://www.wings3d.com/ Wings3d]

==See Also:==
* [http://www.quaddicted.com/tools/ Quaddicted Quake Tools Archive]
* [[Modding tools]]
* [[Mapping tools]]
* [[Demo tools]]</text>
      <sha1>49gfpbn7plfo85l1lqpgnwj1bwqv3im</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2992</id>
      <parentid>2219</parentid>
      <timestamp>2013-06-22T10:30:19Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>added more pak tools</comment>
      <text xml:space="preserve" bytes="1672">{{todo|todo=need stuff like dzip, fun name makers, idgamma , front-ends, server browsers, etc.  Maybe need one page for development tools, and another for player-oriented tools.}}
==PAK Editors==
* [[AdQuedit]]
* [http://tomeofpreach.wordpress.com/2013/06/22/makepak-py makepak.py] is a python script to create a pak file from a directory of files.
* [[PakExplorer]] - Very handy, explorer-like interface.
* [[PakScape]] - An excellent, multigame pak/zip utility with an explorer-like interface.
* [ftp://ibiblio.org/pub/linux/games/quake/par-0.03.01.tar.gz par] is a &quot;archiving tool for Quake pak files (Pak ARchiver)&quot; for Linux.
* [[QuakeForge]] - QuakeForge's tools include a multiplatform, commandline pak utility.
* [[QuArK]]
* [http://openarena.ws/board/index.php?topic=1710.0 QPakMan] &quot;is an all-singing all-dancing Quake1 pak/mip tool&quot; for Windows and Linux.
* [[QPed]] - Supports long names, explorer-like interface.
* [[WinPak]]
* [[XmPak]] - Old Motif-based GUI to display and export the contents of Quake and Quake 2 PAK files.
* [[XPak]] - Freeware modification/extraction/creation tool.

==Graphic &amp; Resource Editors==
* [[Fimg]] - [[FrikaC|FrikaC's]] graphical resource editor for Quake formats.
* [[AdQuedit]]
* [[TexMex]]
* [[Wally]] - Quake 2 texture tool which also supports Quake wads.
* [[MipDip]] - Antiquated, not recommended.
* [[qArt]] - Based on MipDip, similarly antiquated.

==Model Editors==
* [http://chumbalum.swissquake.ch/ Milkshape3d]
* [[qME]]
* [[QuArK]]
* [http://www.wings3d.com/ Wings3d]

==See Also==
* [https://www.quaddicted.com/files/tools/ Quaddicted Quake Tools Archive]
* [[Modding tools]]
* [[Mapping tools]]
* [[Demo tools]]</text>
      <sha1>onlh480pcek3i9v138p914geziery5x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quake-C</title>
    <ns>0</ns>
    <id>367</id>
    <redirect title="QuakeC" />
    <revision>
      <id>605</id>
      <timestamp>2008-04-12T13:32:54Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>Redirecting to [[QuakeC]]</comment>
      <text xml:space="preserve" bytes="20">#REDIRECT [[QuakeC]]</text>
      <sha1>2c4sjh4xdi38eiha1vpjyq9by20fgxc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QuakeC</title>
    <ns>0</ns>
    <id>23</id>
    <revision>
      <id>29</id>
      <timestamp>2007-10-30T16:59:48Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: '''QuakeC''' is a language developed by [[id Software]] for their smash hit game, [[Quake]]. It is inspired by the C programming language, but has many many differences. While not particul...</comment>
      <text xml:space="preserve" bytes="1139">'''QuakeC''' is a language developed by [[id Software]] for their smash hit game, [[Quake]]. It is inspired by the C programming language, but has many many differences. While not particularly powerful, it made Quake one of the most easy to edit games of its day and spawned literally millions of [[mod|mods]]. In fact the total quantity of mods easily exceeds [[Quake 2]], [[Quake 3]], and [[Half-Life]] combined. However, most of them are no longer available as the great hub of the community, [[PlanetQuake]] lost interest in Quake, when Quake 2 came out, and started dumping sites and mods left and right. Another major hit to the community is that [[The Fall of CDRom.com|cdrom.com]] stopped, a long time ago, accepting uploads for Quake and even the new location of the community archives doesn't accept uploads.

But anyway, QuakeC is compiled with a [[QCC]] program (such as [[FrikQCC]]) into a [[progs.dat]] file. The file is read by the virtual  machine inside the engine. This method is incredibly secure and cross platform, much like [[Java]].

===See Also===
* [http://en.wikipedia.org/wiki/QuakeC Wikipedia article on QuakeC]</text>
      <sha1>87by0irv3hq43ri8bwf1dax1hq2q6f7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>594</id>
      <parentid>29</parentid>
      <timestamp>2008-04-11T02:47:38Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="1149">'''QuakeC''' is a language developed by [[id Software]] for their smash hit game, [[Quake]]. It is inspired by the C programming language, but has many many differences. While not particularly powerful, it made Quake one of the most easy to edit games of its day and spawned literally millions of [[mod|mods]]. In fact the total quantity of mods easily exceeds [[Quake 2]], [[Quake 3]], and [[Half-Life]] combined. However, most of them are no longer available as the great hub of the community, [[PlanetQuake]] lost interest in Quake, when Quake 2 came out, and started dumping sites and mods left and right. Another major hit to the community is that [[The Fall of CDRom.com|cdrom.com]] stopped, a long time ago, accepting uploads for Quake and even the new location of the community archives doesn't accept uploads.

But anyway, QuakeC is compiled with a [[QCC]] program (such as [[FrikQCC or FTEQCC]]) into a [[progs.dat]] file. The file is read by the virtual  machine inside the engine. This method is incredibly secure and cross platform, much like [[Java]].

===See Also===
* [http://en.wikipedia.org/wiki/QuakeC Wikipedia article on QuakeC]</text>
      <sha1>kh5e3daaqucqdy6cig13k6k5rdlu8xt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1601</id>
      <parentid>594</parentid>
      <timestamp>2010-02-23T17:06:17Z</timestamp>
      <contributor>
        <ip>85.132.153.171</ip>
      </contributor>
      <text xml:space="preserve" bytes="1153">'''QuakeC''' is a language developed by [[id Software]] for their smash hit game, [[Quake]]. It is inspired by the C programming language, but has many many differences. While not particularly powerful, it made Quake one of the most easy to edit games of its day and spawned literally millions of [[mod|mods]]. In fact the total quantity of mods easily exceeds [[Quake 2]], [[Quake 3]], and [[Half-Life]] combined. However, most of them are no longer available as the great hub of the community, [[PlanetQuake]] lost interest in Quake, when Quake 2 came out, and started dumping sites and mods left and right. Another major hit to the community is that [[The Fall of CDRom.com|cdrom.com]] stopped, a long time ago, accepting uploads for Quake and even the new location of the community archives doesn't accept uploads.

But anyway, QuakeC is compiled with a [[QCC]] program (such as [[FrikQCC]] or [[FTEQCC]]) into a [[progs.dat]] file. The file is read by the virtual  machine inside the engine. This method is incredibly secure and cross platform, much like [[Java]].

===See Also===
* [http://en.wikipedia.org/wiki/QuakeC Wikipedia article on QuakeC]</text>
      <sha1>6e0wq84lgswtlzmdqqr1tn31439abqt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2491</id>
      <parentid>1601</parentid>
      <timestamp>2013-03-29T12:20:23Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>removed rant</comment>
      <text xml:space="preserve" bytes="745">'''QuakeC''' is a language developed by [[id Software]] for their smash hit game, [[Quake]]. It is inspired by the C programming language, but has many many differences. While not particularly powerful, it made Quake one of the most easy to edit games of its day and spawned literally millions of [[mod|mods]]. In fact the total quantity of mods easily exceeds [[Quake 2]], [[Quake 3]], and [[Half-Life]] combined.{{Citation needed}}

QuakeC is compiled with a [[QCC]] compiler (such as [[FrikQCC]] or [[FTEQCC]]) into a [[progs.dat]] file. The file is read by the virtual machine inside the engine. This method is secure and cross-platform, much like [[Java]].

===See Also===
* [http://en.wikipedia.org/wiki/QuakeC Wikipedia article on QuakeC]</text>
      <sha1>6eitfxnmbn60ssibquoglz3l281rwan</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2907</id>
      <parentid>2491</parentid>
      <timestamp>2013-04-09T14:43:27Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>added spec link</comment>
      <text xml:space="preserve" bytes="835">'''QuakeC''' is a language developed by [[id Software]] for their smash hit game, [[Quake]]. It is inspired by the C programming language, but has many many differences. While not particularly powerful, it made Quake one of the most easy to edit games of its day and spawned literally millions of [[mod|mods]]. In fact the total quantity of mods easily exceeds [[Quake 2]], [[Quake 3]], and [[Half-Life]] combined.{{Citation needed}}

QuakeC is compiled with a [[QCC]] compiler (such as [[FrikQCC]] or [[FTEQCC]]) into a [[progs.dat]] file. The file is read by the virtual machine inside the engine. This method is secure and cross-platform, much like [[Java]].

==See Also==
* [http://en.wikipedia.org/wiki/QuakeC Wikipedia article on QuakeC]
* [http://www.gamers.org/dEngine/quake/spec/quake-spec34/qc-menu.htm QuakeC Specifications]</text>
      <sha1>9whfyxfev5258hgyr7l2ekj4gh0geb7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QuakeC Comments</title>
    <ns>0</ns>
    <id>432</id>
    <revision>
      <id>749</id>
      <timestamp>2008-05-08T14:05:51Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page:  == Comments ==    // followed by comments, until the next line.    /* enclose a block comments */   Those comments are the same as in C++ (and many C languages).</comment>
      <text xml:space="preserve" bytes="162">
== Comments ==

  // followed by comments, until the next line.

  /* enclose a block comments */ 

Those comments are the same as in C++ (and many C languages).</text>
      <sha1>3895fwys9euc2qyt4cf983mpqkel9hi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QuakeC Definition of Functions</title>
    <ns>0</ns>
    <id>398</id>
    <revision>
      <id>672</id>
      <timestamp>2008-05-07T17:36:18Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: === Definition of Functions ===   == Ordinary functions ==   The general structure of a function definition is:      type (type param1, typeparam2, ... ) function =     {        ... code ....</comment>
      <text xml:space="preserve" bytes="1703">=== Definition of Functions ===


== Ordinary functions ==


The general structure of a function definition is:

    type (type param1, typeparam2, ... ) function =
    {
       ... code ...
       return expression;
    };

Notes:

    * Do not forget the ; after the ending brackets.
    * The return statement can be used more than once, anywhere in the function.
    * The expresion in a return statement must of course be of the same type as the return value of the fuction.
    * If the return type is void, then you can omit the return statement. 

Here are some examples:

    void ()	think = {...};
    entity ()	FindTarget = {...};
    void(vector destination, float speed, void() callback)  SUB_CalcMove = {...};


== Function calls ==


Here is how a function is called in Quake-C:

    function_name ( parameter1, parameter2,... )

The cannot be more than 8 parameters.


== Function declaration ==


If you want to use a function before defining it, you must declare it, otherwise the Quake-C compiler will not be able to use it.

The general structure of a function declaration is:

    type (type param1, typeparam2, ... ) function;


== Definition of a frame function ==


Frame functions (also called States) are special functions that are meant to facilitate the definition of models animation frames.

Here is an example:

    void() framename = [$framenum, nextthink] { ...code...};

It is strictly equivalent to:

    void() framename =
    {
       self.frame= $framenum;  // the model frame to displayed
       self.nextthink = time + 0.1;   // next frame happens in 1/10 of second
       self.think = nextthink; // the function to call at the next frame
       ...code...
    };</text>
      <sha1>gk2uffj2tb6crx4djh5xxvgxsd7z8vc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1427</id>
      <parentid>672</parentid>
      <timestamp>2009-10-23T23:04:56Z</timestamp>
      <contributor>
        <ip>94.193.174.213</ip>
      </contributor>
      <comment>/* Function calls */</comment>
      <text xml:space="preserve" bytes="1704">=== Definition of Functions ===


== Ordinary functions ==


The general structure of a function definition is:

    type (type param1, typeparam2, ... ) function =
    {
       ... code ...
       return expression;
    };

Notes:

    * Do not forget the ; after the ending brackets.
    * The return statement can be used more than once, anywhere in the function.
    * The expresion in a return statement must of course be of the same type as the return value of the fuction.
    * If the return type is void, then you can omit the return statement. 

Here are some examples:

    void ()	think = {...};
    entity ()	FindTarget = {...};
    void(vector destination, float speed, void() callback)  SUB_CalcMove = {...};


== Function calls ==


Here is how a function is called in Quake-C:

    function_name ( parameter1, parameter2,... )

There cannot be more than 8 parameters.

== Function declaration ==


If you want to use a function before defining it, you must declare it, otherwise the Quake-C compiler will not be able to use it.

The general structure of a function declaration is:

    type (type param1, typeparam2, ... ) function;


== Definition of a frame function ==


Frame functions (also called States) are special functions that are meant to facilitate the definition of models animation frames.

Here is an example:

    void() framename = [$framenum, nextthink] { ...code...};

It is strictly equivalent to:

    void() framename =
    {
       self.frame= $framenum;  // the model frame to displayed
       self.nextthink = time + 0.1;   // next frame happens in 1/10 of second
       self.think = nextthink; // the function to call at the next frame
       ...code...
    };</text>
      <sha1>93q6ruskxw16bzn5xoj9kmfvv66i6yd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2986</id>
      <parentid>1427</parentid>
      <timestamp>2013-06-14T16:33:45Z</timestamp>
      <contributor>
        <ip>86.183.25.94</ip>
      </contributor>
      <text xml:space="preserve" bytes="2458">=== Definition of Functions ===


== Ordinary functions ==


The general structure of a function definition is:

    type (type param1, type param2, ... ) function =
    {
       ... code ...
       return expression;
    };

Notes:

    * Do not forget the ; after the ending brackets.
    * The return statement can be used more than once, anywhere in the function.
    * The expresion in a return statement must of course be of the same type as the return value of the fuction.
    * If the return type is void, then you can omit the return statement. 

Here are some examples:

    void ()	think = {...};
    entity ()	FindTarget = {...};
    void(vector destination, float speed, void() callback)  SUB_CalcMove = {...};


== Function calls ==


Here is how a function is called in Quake-C:

    function_name ( parameter1, parameter2,... )

There cannot be more than 8 parameters.

== Function declaration ==


If you want to use a function before defining it, you must declare it, otherwise the Quake-C compiler will not be able to use it.

The general structure of a function declaration is:

    type (type param1, typeparam2, ... ) function;


== Definition of a frame function ==


Frame functions (also called States) are special functions that are meant to facilitate the definition of models animation frames.

Here is an example:

    void() framename = [$framenum, nextthink] { ...code...};

It is strictly equivalent to:

    void() framename =
    {
       self.frame= $framenum;  // the model frame to displayed
       self.nextthink = time + 0.1;   // next frame happens in 1/10 of second
       self.think = nextthink; // the function to call at the next frame
       ...code...
    };

= Extended features =

For consistancy with C code, many modern qcc support this alternative syntax for prototypes:
    type function(type param1, type param2);
Or for functions that accept no arguments:
    type function(void);
For bodies, the same ordering is permitted.

The = has become optional regardless of whether the arguments are defined before or after the name of the function.

The semi-colon on the end of the body is also now optional (semi-colon is still mandatory in prototypes). 

A function prototype prefixed with the 'var' keyword may be assigned to (any occurences of the function will then refer to the new function instead, identical to .void() usage), and is not required to have a function body defined (but may still do so).</text>
      <sha1>3bj2e8rh909n7d7yzscdytwlhbs3e2t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QuakeC Field Types</title>
    <ns>0</ns>
    <id>435</id>
    <revision>
      <id>757</id>
      <timestamp>2008-05-08T14:12:04Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: &lt;h2&gt;The field types&lt;/h2&gt;  &lt;h4&gt;What's a field?&lt;/h4&gt;  &lt;p&gt;Countrary to the other types, the entity type  is a reference to an instance of a structured object, that contains many informations ...</comment>
      <text xml:space="preserve" bytes="2690">&lt;h2&gt;The field types&lt;/h2&gt;

&lt;h4&gt;What's a field?&lt;/h4&gt;

&lt;p&gt;Countrary to the other types, the entity type 
is a reference to an instance of a structured object, that contains
many informations of totally different kinds.&lt;/p&gt;

&lt;p&gt;To access all these informations conveniently, they are stored as
fields of the entity object, and each field is given a name and a type,
that makes it distinct of the others.&lt;/p&gt;

&lt;p&gt;Some of the fields do not store value, but instead they store the
function to be executed in certain conditions. They are called the
&lt;b&gt;methods&lt;/b&gt; that can be aplied to the object.&lt;/p&gt;

&lt;p&gt;If [[Quake-C]] was an object oriented programming language, those method
functions and would be distinguished from the other fields. And, above
all, you would be able to create new object types, with their own fields.&lt;/p&gt;

&lt;p&gt;As Quake-C stands currently, &lt;b&gt;all the field definitions&lt;/b&gt; are
definitions of entity fields. So anywhere in your code you could add
definition of new fields, and the compiler would interpret them
as an extension of the entity definition.&lt;/p&gt;

&lt;h4&gt;Creating new fields&lt;/h4&gt;

&lt;p&gt;The only way to extend the entity type
is to add some fields at the end of the structures.&lt;/p&gt;

&lt;p&gt;This is done via a field definitions, whose general structure is:
&lt;pre&gt;
   .type field_name;
&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt; For instance, if you wanted to add a sling to the game, and needed
to store the count of pellets for every player, you would add
the following line in the source code:
&lt;pre&gt;
   .float ammo_sling;
   &lt;/pre&gt;
That will add a fields &lt;b&gt;ammo_sling&lt;/b&gt; to every entity in the game,
and in particular to the player entities.
&lt;/p&gt;

&lt;p&gt;Here are all the possible definitions of entity fields, with their types:
&lt;pre&gt;
    .float field_name;
    .string field_name;
    .vector field_name;
    .entity field_name;
    &lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;The strange bit is that you can add those type definitions almost
anywhere in the source code. They are not supposed to be grouped in
a single place, where the entity type would be defined.
&lt;/p&gt;

&lt;h4&gt;Allowed modifications of types&lt;/h4&gt;

&lt;p&gt;In the first file read by the Quake-C compiler, &lt;b&gt;[[defs.qc]]&lt;/b&gt;,
there must be a definition for the entity fields, and world fields.
This definition is hard coded. You had better not touch it,
or you will have to recompile Quake itself.&lt;/p&gt;

&lt;p&gt;The globals are defined before the special definition
&lt;b&gt;[[void end_sys_globals;]]&lt;/b&gt;&lt;br&gt;

The entity fields are defined before the special
definition &lt;b&gt;[[void end_sys_fields;]]&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;It's not important if you don't understand the nonsense
above. It's an ugly hack. Just &lt;b&gt;don't modify defs.qc&lt;/b&gt; 
before those two tags, and you won't be in trouble.&lt;/p&gt;
&lt;hr&gt;</text>
      <sha1>k4e7xylc3k4fj0bban7wor10xgxi5ce</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QuakeC Loops and Conditions</title>
    <ns>0</ns>
    <id>397</id>
    <revision>
      <id>669</id>
      <timestamp>2008-05-07T17:32:37Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: === Loops and conditions ===   == Conditional construct ==       if( expression )     {       statements     }     else     {       statements     }   == Loop construct ==       while( exp...</comment>
      <text xml:space="preserve" bytes="287">=== Loops and conditions ===


== Conditional construct ==


    if( expression )
    {
      statements
    }
    else
    {
      statements
    }


== Loop construct ==


    while( expression )
    {
      statements
    }

or

    do
    { 
      statements
    }while( expression )</text>
      <sha1>jdhsus9n7ymu7lpybu6oudfxx32mzuy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>670</id>
      <parentid>669</parentid>
      <timestamp>2008-05-07T17:34:30Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>/* Loop construct */</comment>
      <text xml:space="preserve" bytes="430">=== Loops and conditions ===


== Conditional construct ==


    if( expression )
    {
      statements
    }
    else
    {
      statements
    }


== Loop construct ==

Pre-test loop: Checks the expression before executing the code within the loop.
    while( expression )
    {
      statements
    }

or post-test loop: Check the expression after the first execution.

    do
    { 
      statements
    }while( expression )</text>
      <sha1>ebsn50sej6pcfbbzyv50l9944lq049w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2985</id>
      <parentid>670</parentid>
      <timestamp>2013-06-14T16:23:00Z</timestamp>
      <contributor>
        <ip>86.183.25.94</ip>
      </contributor>
      <text xml:space="preserve" bytes="3174">=== Loops and conditions ===


== Conditional construct ==


    if( expression )
    {
      statements
    }
    else
    {
      statements
    }


== Loop construct ==

Pre-test loop: Checks the expression before executing the code within the loop.
    while( expression )
    {
      statements
    }

or post-test loop: Check the expression after the first execution.

    do
    { 
      statements
    }while( expression )

= Extended syntax =

== For-loop construct ==

This is an extension supported by most modern qc compilers, basically every qcc since (and including) FrikQCC.
A more complex 'do everything' loop.

    for (initialassignment ; conditionexpression ; incrementexpression)
    {
      statements
    }

Which expands to:

    initialassignment;
    while  (conditionexpression)
    {
      statements
      incrementexpression;
    }

Note that the initialassignment and incrementexpression can include the comma operator, which allows you to separate multiple statements within a single expression.

The line 'for (i = 0; i &lt; 64; i = i+1)' will thus execute the following code block with i set to the values 0 .. 63 inclusive. i will contain the value 64 after the loop has finished.

Slightly more usefully, the line 'for (e = find(world, classname, &quot;player&quot;) ; e ; e = find(e, classname, &quot;player&quot;) )' will execute its code block with e set to every single entity that has classname &quot;player&quot;.

== Continue Statement ==

An extended statement available in every qc compiler since FrikQCC.

A continue statement takes the form:
    continue;
When executed, such a statement will jump to the condition part of the containing do-while,  or while loops, and will jump to the increment part of a for-loop (see the 'expanded' for-loop example).

Unlike break, continue is unaffected by switch constructs.

== Break statement ==

An extended statement available in every qc compiler since FrikQCC.
A break statement takes the form:
    break;
When executed, such a statement will jump out of the most inner loop for switch statement.

Note: not to be confused with the break() builtin, which behaves completely differently.

== Switch Construct ==

    switch(expression)
    {
    case CONSTANT_1:
      statements_1
      break;
    case CONSTANT_2:
      statements_2
    default:
      statements_def
      break;
    case CONSTANT_3 .. CONSTANT_4:
      statements_range
      break;
    }

If the expression evaluates to CONSTANT_1, the statements_1 line will be executed, followed by the break statement which ends the switch.
If it equals CONSTANT_2, statements_2 will be executed, followed by statements_def, followed by the default's break statement ending the switch. This is refered to as 'falling through' the end of the CONSTANT_2 case, and while perfectly legal is often unintended and best avoided.
If the expression's value is inclusively between CONSTANT_3 and CONSTANT_4, statements_range will be executed, before the break statement ends the switch. This is only valid if the expression evaluates to a float.
If the expression didn't match *any* value, then statements_def will be executed before the following break ends the switch.</text>
      <sha1>9xpnejp85r1g11loq0wjy52wq328n9i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QuakeC Names</title>
    <ns>0</ns>
    <id>433</id>
    <revision>
      <id>751</id>
      <timestamp>2008-05-08T14:08:01Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page:  == Names ==  Names of variable, fields, or functions have a maximum of 64 characters, must begin with A-Z,a-z, or _, and can continue with those characters or 0-9. Definition of new types...</comment>
      <text xml:space="preserve" bytes="467">
== Names ==

Names of variable, fields, or functions have a maximum of 64 characters, must begin with A-Z,a-z, or _, and can continue with those characters or 0-9.
Definition of new types

Example:
  String name

Let's start with the bad news: it is impossible, in Quake-C, to define new types. That means for instance that you cannot create a type named ammo, derived from float, that will only be used to store ammo count. So much for the clean programming habits.</text>
      <sha1>16zddf9up8l3ioc55be17h009twjsqh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QuakeC Operators</title>
    <ns>0</ns>
    <id>396</id>
    <revision>
      <id>667</id>
      <timestamp>2008-05-07T17:30:46Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: == Logical operations ==        !   // logical not      &amp;&amp;  // logical and      ||  // logical or  Take care that in if() conditional expressions containing two or more logical clauses, al...</comment>
      <text xml:space="preserve" bytes="890">== Logical operations ==


     !   // logical not
     &amp;&amp;  // logical and
     ||  // logical or

Take care that in if() conditional expressions containing two or more logical clauses, all the clauses will be evaluated before the condition test (like in Basic, and unlike C).

That means that if one part of your condition is not always valid or defined, you had better decompose your if() into two successive if(). It should also make it faster.
Comparisons

     &lt;=    &lt;      &gt;=     &gt;  
     ==  // equal, beware at the double = like in C.
     !=  // not equal, like in C.


== Operations on floats or integer ==


     *  /  -  +

Use parenthesis to remove ambiguities.

Those operators perform bitwise operations on integers:

    &amp;   // bitwise and
    |   // bitwise or

These operators treat floats like integers, so they are usually meant to be used with values made of bit masks.</text>
      <sha1>90vbdtqzkcvthg7kapx6h314bj37gri</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QuakeC Simple Types</title>
    <ns>0</ns>
    <id>366</id>
    <revision>
      <id>600</id>
      <timestamp>2008-04-12T13:14:41Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: &lt;H1&gt;&lt;FONT COLOR=&quot;#007F00&quot;&gt;2. The Quake-C Basic Types&lt;/FONT&gt;&lt;/H1&gt;   &lt;h2&gt;2.1 The simple Types&lt;/h2&gt;  &lt;h4&gt;2.1.1 Void type&lt;/h4&gt;  &lt;p&gt;An empty result, mostly used for definition of procedures (i....</comment>
      <text xml:space="preserve" bytes="5001">&lt;H1&gt;&lt;FONT COLOR=&quot;#007F00&quot;&gt;2. The Quake-C Basic Types&lt;/FONT&gt;&lt;/H1&gt;


&lt;h2&gt;2.1 The simple Types&lt;/h2&gt;

&lt;h4&gt;2.1.1 Void type&lt;/h4&gt;

&lt;p&gt;An empty result, mostly used for definition of procedures (i.e. functions 
that return no result at all).
&lt;/p&gt;

&lt;h4&gt;2.1.2 Float type&lt;/h4&gt;

&lt;p&gt;A floating point value.&lt;/p&gt;
&lt;p&gt;Floats are also used to store booleans (TRUE, FALSE) or integer values
link counters, or bit flags.
&lt;pre&gt;
    Valid syntax: 12  1.6  0.5  -100
  
    Invalid syntax: .5  -.50  .690
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;A parsing ambiguity is present with negative constants. &quot;a-5&quot; will be parsed 
as &quot;a&quot;, then &quot;-5&quot;, causing an error.  Separate the - from the digits with a 
space &quot;a - 5&quot; to get the proper behavior.
&lt;/p&gt;

&lt;h4&gt;2.1.3 Vector type&lt;/h4&gt;

&lt;p&gt;A vector, made of 3 &lt;a href=&quot;qc-types.htm#float&quot; target=&quot;content&quot;&gt;float&lt;/a&gt; coordinates.
&lt;br&gt;
Used to represent positions or directions in 3D space.

&lt;br&gt;
Valid syntax: &lt;b&gt;'0 0 0'&lt;/b&gt;  or &lt;b&gt;'20.5 -10 0.00001'&lt;/b&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Note the simple quotes around the vector. Do not use
double quotes, they are reserved for strings.&lt;/p&gt;

&lt;p&gt;If you declare a vector &lt;b&gt;foobar&lt;/b&gt;, then you can
access it's x, y and z fields with: &lt;b&gt;foobar_x&lt;/b&gt;,

&lt;b&gt;foobar_y&lt;/b&gt;,&lt;b&gt;foobar_z&lt;/b&gt;.
&lt;/p&gt;

&lt;h4&gt;2.1.4 String type&lt;/h4&gt;

&lt;p&gt;This is used to store character string.
&lt;br&gt;
Used to indicate file names, or messages to be broadcast to players.
&lt;br&gt;
Valid syntax: &lt;b&gt;&quot;maps/jrwiz1.bsp&quot;&lt;/b&gt; or &lt;b&gt;&quot;ouch!\
&quot;&lt;/b&gt;

&lt;br&gt;
Use &lt;b&gt;\
&lt;/b&gt; for newline.
&lt;/p&gt;
&lt;p&gt;Note: that character strings cannot be modified, or concatenated.
Because they are stored at fixed locations in memory, and if
would be postentially troublesome to allow modification.
&lt;/p&gt;

&lt;h4&gt;2.1.5 entity type&lt;/h4&gt;

&lt;p&gt;The reference of an entity in the game, like things, players, monsters.&lt;br&gt;

For instance, this is the type of the entities self
and other.
&lt;/p&gt; 
&lt;p&gt;The entity type is a structured type, made of [[fields]].&lt;br&gt;
A description of each field is available.
&lt;/p&gt;

 
&lt;hr&gt;
&lt;h2&gt;2.2 The field types&lt;/h2&gt;

&lt;h4&gt;2.2.1 What's a field?&lt;/h4&gt;

&lt;p&gt;Countrary to the other types, the [[entity]] type 
is a reference to an instance of a structured object, that contains
many informations of totally different kinds.&lt;/p&gt;

&lt;p&gt;To access all these informations conveniently, they are stored as
fields of the entity object, and each field is given a name and a type,
that makes it distinct of the others.&lt;/p&gt;

&lt;p&gt;Some of the fields do not store value, but instead they store the
function to be executed in certain conditions. They are called the
&lt;b&gt;methods&lt;/b&gt; that can be aplied to the object.&lt;/p&gt;

&lt;p&gt;If Quake-C was an object oriented programming language, those method
functions and would be distinguished from the other fields. And, above
all, you would be able to create new object types, with their own fields.&lt;/p&gt;

&lt;p&gt;As Quake-C stands currently, &lt;b&gt;all the field definitions&lt;/b&gt; are
definitions of entity fields. So anywhere in your code you could add
definition of new fields, and the compiler would interpret them
as an extension of the entity definition.&lt;/p&gt;


&lt;h4&gt;2.2.2 Creating new fields&lt;/h4&gt;

&lt;p&gt;The only way to extend the &lt;a href=&quot;qc-types.htm#entity&quot; target=&quot;content&quot;&gt;entity&lt;/a&gt; type
is to add some fields at the end of the structures.&lt;/p&gt;

&lt;p&gt;This is done via a field definitions, whose general structure is:
&lt;pre&gt;
   &lt;b&gt;.&lt;a href=&quot;qc-types.htm#QC-TSMP&quot; target=&quot;content&quot;&gt;type&lt;/a&gt; field_name;&lt;/b&gt;
&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt; For instance, if you wanted to add a sling to the game, and needed
to store the count of pellets for every player, you would add
the following line in the source code:
&lt;pre&gt;
   &lt;b&gt;.&lt;a href=&quot;qc-types.htm#QC-TSMP&quot; target=&quot;content&quot;&gt;float&lt;/a&gt; ammo_sling;&lt;/b&gt;
&lt;/pre&gt;
That will add a fields &lt;b&gt;ammo_sling&lt;/b&gt; to every entity in the game,
and in particular to the player entities.
&lt;/p&gt;

&lt;p&gt;Here are all the possible definitions of entity fields, with their &lt;a href=&quot;qc-types.htm#QC-TSMP&quot; target=&quot;content&quot;&gt;types&lt;/a&gt;:
&lt;pre&gt;
    &lt;a name=&quot;dot_float&quot;&gt;.float&lt;/a&gt; &lt;i&gt;field_name&lt;/i&gt;;
    &lt;a name=&quot;dot_string&quot;&gt;.string&lt;/a&gt; &lt;i&gt;field_name&lt;/i&gt;;
    &lt;a name=&quot;dot_vector&quot;&gt;.vector&lt;/a&gt; &lt;i&gt;field_name&lt;/i&gt;;
    &lt;a name=&quot;dot_entity&quot;&gt;.entity&lt;/a&gt; &lt;i&gt;field_name&lt;/i&gt;;

&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;The strange bit is that you can add those type definitions almost
anywhere in the source code. They are not supposed to be grouped in
a single place, where the entity type would be defined.
&lt;/p&gt;

&lt;h4&gt;2.2.3 Allowed modifications of types&lt;/h4&gt;

&lt;p&gt;In the first file read by the Quake-C compiler, &lt;b&gt;[[defs.qc]]&lt;/b&gt;,
there must be a definition for the entity fields, and world fields.
This definition is hard coded. You had better not touch it,
or you will have to recompile Quake itself.
&lt;p&gt;

&lt;p&gt;The globals are defined before the special definition
&lt;b&gt;[[void end_sys_globals;]]&lt;/b&gt;&lt;br&gt;

The entity fields are defined before the special
definition &lt;b&gt;[[void end_sys_fields;]]&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;It's not important if you don't understand the nonsense
above. It's an ugly hack. Just &lt;b&gt;don't modify defs.qc&lt;/b&gt; 
before those two tags, and you won't be in trouble.&lt;/p&gt;
&lt;hr&gt;</text>
      <sha1>o7w0yqr5u4b2i7gn1r7pz1ttlf0k5ae</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>601</id>
      <parentid>600</parentid>
      <timestamp>2008-04-12T13:20:37Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="4657">&lt;H1&gt;&lt;FONT COLOR=&quot;#007F00&quot;&gt;2. The Quake-C Basic Types&lt;/FONT&gt;&lt;/H1&gt;


&lt;h2&gt;2.1 The simple Types&lt;/h2&gt;

&lt;h4&gt;2.1.1 Void type&lt;/h4&gt;

&lt;p&gt;An empty result, mostly used for definition of procedures (i.e. functions 
that return no result at all).
&lt;/p&gt;

&lt;h4&gt;2.1.2 Float type&lt;/h4&gt;

&lt;p&gt;A floating point value.&lt;/p&gt;
&lt;p&gt;Floats are also used to store booleans (TRUE, FALSE) or integer values
link counters, or bit flags.
&lt;pre&gt;
    Valid syntax: 12  1.6  0.5  -100
  
    Invalid syntax: .5  -.50  .690
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;A parsing ambiguity is present with negative constants. &quot;a-5&quot; will be parsed 
as &quot;a&quot;, then &quot;-5&quot;, causing an error.  Separate the - from the digits with a 
space &quot;a - 5&quot; to get the proper behavior.
&lt;/p&gt;

&lt;h4&gt;2.1.3 Vector type&lt;/h4&gt;

&lt;p&gt;A vector, made of 3 float coordinates.
&lt;br&gt;
Used to represent positions or directions in 3D space.

&lt;br&gt;
Valid syntax: &lt;b&gt;'0 0 0'&lt;/b&gt;  or &lt;b&gt;'20.5 -10 0.00001'&lt;/b&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Note the simple quotes around the vector. Do not use
double quotes, they are reserved for strings.&lt;/p&gt;

&lt;p&gt;If you declare a vector &lt;b&gt;foobar&lt;/b&gt;, then you can
access it's x, y and z fields with: &lt;b&gt;foobar_x&lt;/b&gt;,

&lt;b&gt;foobar_y&lt;/b&gt;,&lt;b&gt;foobar_z&lt;/b&gt;.
&lt;/p&gt;

&lt;h4&gt;2.1.4 String type&lt;/h4&gt;

&lt;p&gt;This is used to store character string.
&lt;br&gt;
Used to indicate file names, or messages to be broadcast to players.
&lt;br&gt;
Valid syntax: &lt;b&gt;&quot;maps/jrwiz1.bsp&quot;&lt;/b&gt; or &lt;b&gt;&quot;ouch!\
&quot;&lt;/b&gt;

&lt;br&gt;
Use &lt;b&gt;\
&lt;/b&gt; for newline.
&lt;/p&gt;
&lt;p&gt;Note: that character strings cannot be modified, or concatenated.
Because they are stored at fixed locations in memory, and if
would be postentially troublesome to allow modification.
&lt;/p&gt;

&lt;h4&gt;2.1.5 entity type&lt;/h4&gt;

&lt;p&gt;The reference of an entity in the game, like things, players, monsters.&lt;br&gt;

For instance, this is the type of the entities self
and other.
&lt;/p&gt; 
&lt;p&gt;The entity type is a structured type, made of [[fields]].&lt;br&gt;
A description of each field is available.
&lt;/p&gt;

 
&lt;hr&gt;
&lt;h2&gt;2.2 The field types&lt;/h2&gt;

&lt;h4&gt;2.2.1 What's a field?&lt;/h4&gt;

&lt;p&gt;Countrary to the other types, the entity type 
is a reference to an instance of a structured object, that contains
many informations of totally different kinds.&lt;/p&gt;

&lt;p&gt;To access all these informations conveniently, they are stored as
fields of the entity object, and each field is given a name and a type,
that makes it distinct of the others.&lt;/p&gt;

&lt;p&gt;Some of the fields do not store value, but instead they store the
function to be executed in certain conditions. They are called the
&lt;b&gt;methods&lt;/b&gt; that can be aplied to the object.&lt;/p&gt;

&lt;p&gt;If Quake-C was an object oriented programming language, those method
functions and would be distinguished from the other fields. And, above
all, you would be able to create new object types, with their own fields.&lt;/p&gt;

&lt;p&gt;As Quake-C stands currently, &lt;b&gt;all the field definitions&lt;/b&gt; are
definitions of entity fields. So anywhere in your code you could add
definition of new fields, and the compiler would interpret them
as an extension of the entity definition.&lt;/p&gt;


&lt;h4&gt;2.2.2 Creating new fields&lt;/h4&gt;

&lt;p&gt;The only way to extend the entity type
is to add some fields at the end of the structures.&lt;/p&gt;

&lt;p&gt;This is done via a field definitions, whose general structure is:
&lt;pre&gt;
   .type field_name;
&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt; For instance, if you wanted to add a sling to the game, and needed
to store the count of pellets for every player, you would add
the following line in the source code:
&lt;pre&gt;
   .float ammo_sling;
   &lt;/pre&gt;
That will add a fields &lt;b&gt;ammo_sling&lt;/b&gt; to every entity in the game,
and in particular to the player entities.
&lt;/p&gt;

&lt;p&gt;Here are all the possible definitions of entity fields, with their &lt;a href=&quot;qc-types.htm#QC-TSMP&quot; target=&quot;content&quot;&gt;types&lt;/a&gt;:
&lt;pre&gt;
    .float field_name;
    .string field_name;
    .vector field_name;
    .entity field_name;
    &lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;The strange bit is that you can add those type definitions almost
anywhere in the source code. They are not supposed to be grouped in
a single place, where the entity type would be defined.
&lt;/p&gt;

&lt;h4&gt;2.2.3 Allowed modifications of types&lt;/h4&gt;

&lt;p&gt;In the first file read by the Quake-C compiler, &lt;b&gt;[[defs.qc]]&lt;/b&gt;,
there must be a definition for the entity fields, and world fields.
This definition is hard coded. You had better not touch it,
or you will have to recompile Quake itself.
&lt;p&gt;

&lt;p&gt;The globals are defined before the special definition
&lt;b&gt;[[void end_sys_globals;]]&lt;/b&gt;&lt;br&gt;

The entity fields are defined before the special
definition &lt;b&gt;[[void end_sys_fields;]]&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;It's not important if you don't understand the nonsense
above. It's an ugly hack. Just &lt;b&gt;don't modify defs.qc&lt;/b&gt; 
before those two tags, and you won't be in trouble.&lt;/p&gt;
&lt;hr&gt;</text>
      <sha1>lntlrjvlvt9k86n8gdoutrag4xni2if</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>602</id>
      <parentid>601</parentid>
      <timestamp>2008-04-12T13:24:29Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="4657">&lt;H1&gt;&lt;FONT COLOR=&quot;#007F00&quot;&gt;2. The Quake-C Basic Types&lt;/FONT&gt;&lt;/H1&gt;


&lt;h2&gt;2.1 The simple Types&lt;/h2&gt;

&lt;h4&gt;2.1.1 Void type&lt;/h4&gt;

&lt;p&gt;An empty result, mostly used for definition of procedures (i.e. functions 
that return no result at all).
&lt;/p&gt;

&lt;h4&gt;2.1.2 Float type&lt;/h4&gt;

&lt;p&gt;A floating point value.&lt;/p&gt;
&lt;p&gt;Floats are also used to store booleans (TRUE, FALSE) or integer values
link counters, or bit flags.
&lt;pre&gt;
    Valid syntax: 12  1.6  0.5  -100
  
    Invalid syntax: .5  -.50  .690
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;A parsing ambiguity is present with negative constants. &quot;a-5&quot; will be parsed 
as &quot;a&quot;, then &quot;-5&quot;, causing an error.  Separate the - from the digits with a 
space &quot;a - 5&quot; to get the proper behavior.
&lt;/p&gt;

&lt;h4&gt;2.1.3 Vector type&lt;/h4&gt;

&lt;p&gt;A vector, made of 3 float coordinates.
&lt;br&gt;
Used to represent positions or directions in 3D space.

&lt;br&gt;
Valid syntax: &lt;b&gt;'0 0 0'&lt;/b&gt;  or &lt;b&gt;'20.5 -10 0.00001'&lt;/b&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Note the simple quotes around the vector. Do not use
double quotes, they are reserved for strings.&lt;/p&gt;

&lt;p&gt;If you declare a vector &lt;b&gt;foobar&lt;/b&gt;, then you can
access it's x, y and z fields with: &lt;b&gt;foobar_x&lt;/b&gt;,

&lt;b&gt;foobar_y&lt;/b&gt;,&lt;b&gt;foobar_z&lt;/b&gt;.
&lt;/p&gt;

&lt;h4&gt;2.1.4 String type&lt;/h4&gt;

&lt;p&gt;This is used to store character string.
&lt;br&gt;
Used to indicate file names, or messages to be broadcast to players.
&lt;br&gt;
Valid syntax: &lt;b&gt;&quot;maps/jrwiz1.bsp&quot;&lt;/b&gt; or &lt;b&gt;&quot;ouch!\
&quot;&lt;/b&gt;

&lt;br&gt;
Use &lt;b&gt;\
&lt;/b&gt; for newline.
&lt;/p&gt;
&lt;p&gt;Note: that character strings cannot be modified, or concatenated.
Because they are stored at fixed locations in memory, and if
would be postentially troublesome to allow modification.
&lt;/p&gt;

&lt;h4&gt;2.1.5 entity type&lt;/h4&gt;

&lt;p&gt;The reference of an entity in the game, like things, players, monsters.&lt;br&gt;

For instance, this is the type of the entities self
and other.
&lt;/p&gt; 
&lt;p&gt;The entity type is a structured type, made of [[fields]].&lt;br&gt;
A description of each field is available.
&lt;/p&gt;

 
&lt;hr&gt;
&lt;h2&gt;2.2 The field types&lt;/h2&gt;

&lt;h4&gt;2.2.1 What's a field?&lt;/h4&gt;

&lt;p&gt;Countrary to the other types, the entity type 
is a reference to an instance of a structured object, that contains
many informations of totally different kinds.&lt;/p&gt;

&lt;p&gt;To access all these informations conveniently, they are stored as
fields of the entity object, and each field is given a name and a type,
that makes it distinct of the others.&lt;/p&gt;

&lt;p&gt;Some of the fields do not store value, but instead they store the
function to be executed in certain conditions. They are called the
&lt;b&gt;methods&lt;/b&gt; that can be aplied to the object.&lt;/p&gt;

&lt;p&gt;If Quake-C was an object oriented programming language, those method
functions and would be distinguished from the other fields. And, above
all, you would be able to create new object types, with their own fields.&lt;/p&gt;

&lt;p&gt;As Quake-C stands currently, &lt;b&gt;all the field definitions&lt;/b&gt; are
definitions of entity fields. So anywhere in your code you could add
definition of new fields, and the compiler would interpret them
as an extension of the entity definition.&lt;/p&gt;


&lt;h4&gt;2.2.2 Creating new fields&lt;/h4&gt;

&lt;p&gt;The only way to extend the entity type
is to add some fields at the end of the structures.&lt;/p&gt;

&lt;p&gt;This is done via a field definitions, whose general structure is:
&lt;pre&gt;
   .type field_name;
&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt; For instance, if you wanted to add a sling to the game, and needed
to store the count of pellets for every player, you would add
the following line in the source code:
&lt;pre&gt;
   .float ammo_sling;
   &lt;/pre&gt;
That will add a fields &lt;b&gt;ammo_sling&lt;/b&gt; to every entity in the game,
and in particular to the player entities.
&lt;/p&gt;

&lt;p&gt;Here are all the possible definitions of entity fields, with their &lt;a href=&quot;qc-types.htm#QC-TSMP&quot; target=&quot;content&quot;&gt;types&lt;/a&gt;:
&lt;pre&gt;
    .float field_name;
    .string field_name;
    .vector field_name;
    .entity field_name;
    &lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;The strange bit is that you can add those type definitions almost
anywhere in the source code. They are not supposed to be grouped in
a single place, where the entity type would be defined.
&lt;/p&gt;

&lt;h4&gt;2.2.3 Allowed modifications of types&lt;/h4&gt;

&lt;p&gt;In the first file read by the Quake-C compiler, &lt;b&gt;[[defs.qc]]&lt;/b&gt;,
there must be a definition for the entity fields, and world fields.
This definition is hard coded. You had better not touch it,
or you will have to recompile Quake itself.&lt;/p&gt;

&lt;p&gt;The globals are defined before the special definition
&lt;b&gt;[[void end_sys_globals;]]&lt;/b&gt;&lt;br&gt;

The entity fields are defined before the special
definition &lt;b&gt;[[void end_sys_fields;]]&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;It's not important if you don't understand the nonsense
above. It's an ugly hack. Just &lt;b&gt;don't modify defs.qc&lt;/b&gt; 
before those two tags, and you won't be in trouble.&lt;/p&gt;
&lt;hr&gt;</text>
      <sha1>jlcs7zfb4rhtemmowg089kjm2oakosd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>603</id>
      <parentid>602</parentid>
      <timestamp>2008-04-12T13:25:49Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="4605">&lt;H1&gt;&lt;FONT COLOR=&quot;#007F00&quot;&gt;2. The Quake-C Basic Types&lt;/FONT&gt;&lt;/H1&gt;


&lt;h2&gt;2.1 The simple Types&lt;/h2&gt;

&lt;h4&gt;2.1.1 Void type&lt;/h4&gt;

&lt;p&gt;An empty result, mostly used for definition of procedures (i.e. functions 
that return no result at all).
&lt;/p&gt;

&lt;h4&gt;2.1.2 Float type&lt;/h4&gt;

&lt;p&gt;A floating point value.&lt;/p&gt;
&lt;p&gt;Floats are also used to store booleans (TRUE, FALSE) or integer values
link counters, or bit flags.
&lt;pre&gt;
    Valid syntax: 12  1.6  0.5  -100
  
    Invalid syntax: .5  -.50  .690
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;A parsing ambiguity is present with negative constants. &quot;a-5&quot; will be parsed 
as &quot;a&quot;, then &quot;-5&quot;, causing an error.  Separate the - from the digits with a 
space &quot;a - 5&quot; to get the proper behavior.
&lt;/p&gt;

&lt;h4&gt;2.1.3 Vector type&lt;/h4&gt;

&lt;p&gt;A vector, made of 3 float coordinates.
&lt;br&gt;
Used to represent positions or directions in 3D space.

&lt;br&gt;
Valid syntax: &lt;b&gt;'0 0 0'&lt;/b&gt;  or &lt;b&gt;'20.5 -10 0.00001'&lt;/b&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Note the simple quotes around the vector. Do not use
double quotes, they are reserved for strings.&lt;/p&gt;

&lt;p&gt;If you declare a vector &lt;b&gt;foobar&lt;/b&gt;, then you can
access it's x, y and z fields with: &lt;b&gt;foobar_x&lt;/b&gt;,

&lt;b&gt;foobar_y&lt;/b&gt;,&lt;b&gt;foobar_z&lt;/b&gt;.
&lt;/p&gt;

&lt;h4&gt;2.1.4 String type&lt;/h4&gt;

&lt;p&gt;This is used to store character string.
&lt;br&gt;
Used to indicate file names, or messages to be broadcast to players.
&lt;br&gt;
Valid syntax: &lt;b&gt;&quot;maps/jrwiz1.bsp&quot;&lt;/b&gt; or &lt;b&gt;&quot;ouch!\
&quot;&lt;/b&gt;

&lt;br&gt;
Use &lt;b&gt;\
&lt;/b&gt; for newline.
&lt;/p&gt;
&lt;p&gt;Note: that character strings cannot be modified, or concatenated.
Because they are stored at fixed locations in memory, and if
would be postentially troublesome to allow modification.
&lt;/p&gt;

&lt;h4&gt;2.1.5 entity type&lt;/h4&gt;

&lt;p&gt;The reference of an entity in the game, like things, players, monsters.&lt;br&gt;

For instance, this is the type of the entities self
and other.
&lt;/p&gt; 
&lt;p&gt;The entity type is a structured type, made of [[fields]].&lt;br&gt;
A description of each field is available.
&lt;/p&gt;

 
&lt;hr&gt;
&lt;h2&gt;2.2 The field types&lt;/h2&gt;

&lt;h4&gt;2.2.1 What's a field?&lt;/h4&gt;

&lt;p&gt;Countrary to the other types, the entity type 
is a reference to an instance of a structured object, that contains
many informations of totally different kinds.&lt;/p&gt;

&lt;p&gt;To access all these informations conveniently, they are stored as
fields of the entity object, and each field is given a name and a type,
that makes it distinct of the others.&lt;/p&gt;

&lt;p&gt;Some of the fields do not store value, but instead they store the
function to be executed in certain conditions. They are called the
&lt;b&gt;methods&lt;/b&gt; that can be aplied to the object.&lt;/p&gt;

&lt;p&gt;If Quake-C was an object oriented programming language, those method
functions and would be distinguished from the other fields. And, above
all, you would be able to create new object types, with their own fields.&lt;/p&gt;

&lt;p&gt;As Quake-C stands currently, &lt;b&gt;all the field definitions&lt;/b&gt; are
definitions of entity fields. So anywhere in your code you could add
definition of new fields, and the compiler would interpret them
as an extension of the entity definition.&lt;/p&gt;


&lt;h4&gt;2.2.2 Creating new fields&lt;/h4&gt;

&lt;p&gt;The only way to extend the entity type
is to add some fields at the end of the structures.&lt;/p&gt;

&lt;p&gt;This is done via a field definitions, whose general structure is:
&lt;pre&gt;
   .type field_name;
&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt; For instance, if you wanted to add a sling to the game, and needed
to store the count of pellets for every player, you would add
the following line in the source code:
&lt;pre&gt;
   .float ammo_sling;
   &lt;/pre&gt;
That will add a fields &lt;b&gt;ammo_sling&lt;/b&gt; to every entity in the game,
and in particular to the player entities.
&lt;/p&gt;

&lt;p&gt;Here are all the possible definitions of entity fields, with their types:
&lt;pre&gt;
    .float field_name;
    .string field_name;
    .vector field_name;
    .entity field_name;
    &lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;The strange bit is that you can add those type definitions almost
anywhere in the source code. They are not supposed to be grouped in
a single place, where the entity type would be defined.
&lt;/p&gt;

&lt;h4&gt;2.2.3 Allowed modifications of types&lt;/h4&gt;

&lt;p&gt;In the first file read by the Quake-C compiler, &lt;b&gt;[[defs.qc]]&lt;/b&gt;,
there must be a definition for the entity fields, and world fields.
This definition is hard coded. You had better not touch it,
or you will have to recompile Quake itself.&lt;/p&gt;

&lt;p&gt;The globals are defined before the special definition
&lt;b&gt;[[void end_sys_globals;]]&lt;/b&gt;&lt;br&gt;

The entity fields are defined before the special
definition &lt;b&gt;[[void end_sys_fields;]]&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;It's not important if you don't understand the nonsense
above. It's an ugly hack. Just &lt;b&gt;don't modify defs.qc&lt;/b&gt; 
before those two tags, and you won't be in trouble.&lt;/p&gt;
&lt;hr&gt;</text>
      <sha1>fgidnj0f3jedi7z4dfr8u9f2na3iw5m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>604</id>
      <parentid>603</parentid>
      <timestamp>2008-04-12T13:32:27Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="4608">&lt;H1&gt;&lt;FONT COLOR=&quot;#007F00&quot;&gt;2. The Quake-C Basic Types&lt;/FONT&gt;&lt;/H1&gt;


&lt;h2&gt;2.1 The simple Types&lt;/h2&gt;

&lt;h4&gt;2.1.1 Void type&lt;/h4&gt;

&lt;p&gt;An empty result, mostly used for definition of procedures (i.e. functions 
that return no result at all).
&lt;/p&gt;

&lt;h4&gt;2.1.2 Float type&lt;/h4&gt;

&lt;p&gt;A floating point value.&lt;/p&gt;
&lt;p&gt;Floats are also used to store booleans (TRUE, FALSE) or integer values
link counters, or bit flags.
&lt;pre&gt;
    Valid syntax: 12  1.6  0.5  -100
  
    Invalid syntax: .5  -.50  .690
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;A parsing ambiguity is present with negative constants. &quot;a-5&quot; will be parsed 
as &quot;a&quot;, then &quot;-5&quot;, causing an error.  Separate the - from the digits with a 
space &quot;a - 5&quot; to get the proper behavior.
&lt;/p&gt;

&lt;h4&gt;2.1.3 Vector type&lt;/h4&gt;

&lt;p&gt;A vector, made of 3 float coordinates.
&lt;br&gt;
Used to represent positions or directions in 3D space.

&lt;br&gt;
Valid syntax: &lt;b&gt;'0 0 0'&lt;/b&gt;  or &lt;b&gt;'20.5 -10 0.00001'&lt;/b&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Note the simple quotes around the vector. Do not use
double quotes, they are reserved for strings.&lt;/p&gt;

&lt;p&gt;If you declare a vector &lt;b&gt;foobar&lt;/b&gt;, then you can
access it's x, y and z fields with: &lt;b&gt;foobar_x&lt;/b&gt;,

&lt;b&gt;foobar_y&lt;/b&gt;,&lt;b&gt;foobar_z&lt;/b&gt;.
&lt;/p&gt;

&lt;h4&gt;2.1.4 String type&lt;/h4&gt;

&lt;p&gt;This is used to store character string.
&lt;br&gt;
Used to indicate file names, or messages to be broadcast to players.
&lt;br&gt;
Valid syntax: &lt;b&gt;&quot;maps/jrwiz1.bsp&quot;&lt;/b&gt; or &lt;b&gt;&quot;ouch!\
&quot;&lt;/b&gt;

&lt;br&gt;
Use &lt;b&gt;\
&lt;/b&gt; for newline.
&lt;/p&gt;
&lt;p&gt;Note: that character strings cannot be modified, or concatenated.
Because they are stored at fixed locations in memory, and if
would be postentially troublesome to allow modification.
&lt;/p&gt;

&lt;h4&gt;2.1.5 entity type&lt;/h4&gt;

&lt;p&gt;The reference of an entity in the game, like things, players, monsters.&lt;br&gt;

For instance, this is the type of the entities self
and other.
&lt;/p&gt; 
&lt;p&gt;The entity type is a structured type, made of [[fields]].&lt;br&gt;
A description of each field is available.
&lt;/p&gt;

 
&lt;hr&gt;
&lt;h2&gt;2.2 The field types&lt;/h2&gt;

&lt;h4&gt;2.2.1 What's a field?&lt;/h4&gt;

&lt;p&gt;Countrary to the other types, the entity type 
is a reference to an instance of a structured object, that contains
many informations of totally different kinds.&lt;/p&gt;

&lt;p&gt;To access all these informations conveniently, they are stored as
fields of the entity object, and each field is given a name and a type,
that makes it distinct of the others.&lt;/p&gt;

&lt;p&gt;Some of the fields do not store value, but instead they store the
function to be executed in certain conditions. They are called the
&lt;b&gt;methods&lt;/b&gt; that can be aplied to the object.&lt;/p&gt;

&lt;p&gt;If [[Quake-C]] was an object oriented programming language, those method
functions and would be distinguished from the other fields. And, above
all, you would be able to create new object types, with their own fields.&lt;/p&gt;

&lt;p&gt;As Quake-C stands currently, &lt;b&gt;all the field definitions&lt;/b&gt; are
definitions of entity fields. So anywhere in your code you could add
definition of new fields, and the compiler would interpret them
as an extension of the entity definition.&lt;/p&gt;

&lt;h4&gt;2.2.2 Creating new fields&lt;/h4&gt;

&lt;p&gt;The only way to extend the entity type
is to add some fields at the end of the structures.&lt;/p&gt;

&lt;p&gt;This is done via a field definitions, whose general structure is:
&lt;pre&gt;
   .type field_name;
&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt; For instance, if you wanted to add a sling to the game, and needed
to store the count of pellets for every player, you would add
the following line in the source code:
&lt;pre&gt;
   .float ammo_sling;
   &lt;/pre&gt;
That will add a fields &lt;b&gt;ammo_sling&lt;/b&gt; to every entity in the game,
and in particular to the player entities.
&lt;/p&gt;

&lt;p&gt;Here are all the possible definitions of entity fields, with their types:
&lt;pre&gt;
    .float field_name;
    .string field_name;
    .vector field_name;
    .entity field_name;
    &lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;The strange bit is that you can add those type definitions almost
anywhere in the source code. They are not supposed to be grouped in
a single place, where the entity type would be defined.
&lt;/p&gt;

&lt;h4&gt;2.2.3 Allowed modifications of types&lt;/h4&gt;

&lt;p&gt;In the first file read by the Quake-C compiler, &lt;b&gt;[[defs.qc]]&lt;/b&gt;,
there must be a definition for the entity fields, and world fields.
This definition is hard coded. You had better not touch it,
or you will have to recompile Quake itself.&lt;/p&gt;

&lt;p&gt;The globals are defined before the special definition
&lt;b&gt;[[void end_sys_globals;]]&lt;/b&gt;&lt;br&gt;

The entity fields are defined before the special
definition &lt;b&gt;[[void end_sys_fields;]]&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;It's not important if you don't understand the nonsense
above. It's an ugly hack. Just &lt;b&gt;don't modify defs.qc&lt;/b&gt; 
before those two tags, and you won't be in trouble.&lt;/p&gt;
&lt;hr&gt;</text>
      <sha1>e50h21zrd621rvihq8prn8hvchnregw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>673</id>
      <parentid>604</parentid>
      <timestamp>2008-05-07T17:37:53Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="4612">&lt;H1&gt;&lt;FONT COLOR=&quot;#007F00&quot;&gt;2. The Quake-C Basic Types&lt;/FONT&gt;&lt;/H1&gt;


&lt;h2&gt;2.1 The simple Types&lt;/h2&gt;

&lt;h4&gt;2.1.1 [[void]] type&lt;/h4&gt;

&lt;p&gt;An empty result, mostly used for definition of procedures (i.e. functions 
that return no result at all).
&lt;/p&gt;

&lt;h4&gt;2.1.2 Float type&lt;/h4&gt;

&lt;p&gt;A floating point value.&lt;/p&gt;
&lt;p&gt;Floats are also used to store booleans (TRUE, FALSE) or integer values
link counters, or bit flags.
&lt;pre&gt;
    Valid syntax: 12  1.6  0.5  -100
  
    Invalid syntax: .5  -.50  .690
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;A parsing ambiguity is present with negative constants. &quot;a-5&quot; will be parsed 
as &quot;a&quot;, then &quot;-5&quot;, causing an error.  Separate the - from the digits with a 
space &quot;a - 5&quot; to get the proper behavior.
&lt;/p&gt;

&lt;h4&gt;2.1.3 Vector type&lt;/h4&gt;

&lt;p&gt;A vector, made of 3 float coordinates.
&lt;br&gt;
Used to represent positions or directions in 3D space.

&lt;br&gt;
Valid syntax: &lt;b&gt;'0 0 0'&lt;/b&gt;  or &lt;b&gt;'20.5 -10 0.00001'&lt;/b&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Note the simple quotes around the vector. Do not use
double quotes, they are reserved for strings.&lt;/p&gt;

&lt;p&gt;If you declare a vector &lt;b&gt;foobar&lt;/b&gt;, then you can
access it's x, y and z fields with: &lt;b&gt;foobar_x&lt;/b&gt;,

&lt;b&gt;foobar_y&lt;/b&gt;,&lt;b&gt;foobar_z&lt;/b&gt;.
&lt;/p&gt;

&lt;h4&gt;2.1.4 String type&lt;/h4&gt;

&lt;p&gt;This is used to store character string.
&lt;br&gt;
Used to indicate file names, or messages to be broadcast to players.
&lt;br&gt;
Valid syntax: &lt;b&gt;&quot;maps/jrwiz1.bsp&quot;&lt;/b&gt; or &lt;b&gt;&quot;ouch!\
&quot;&lt;/b&gt;

&lt;br&gt;
Use &lt;b&gt;\
&lt;/b&gt; for newline.
&lt;/p&gt;
&lt;p&gt;Note: that character strings cannot be modified, or concatenated.
Because they are stored at fixed locations in memory, and if
would be postentially troublesome to allow modification.
&lt;/p&gt;

&lt;h4&gt;2.1.5 entity type&lt;/h4&gt;

&lt;p&gt;The reference of an entity in the game, like things, players, monsters.&lt;br&gt;

For instance, this is the type of the entities self
and other.
&lt;/p&gt; 
&lt;p&gt;The entity type is a structured type, made of [[fields]].&lt;br&gt;
A description of each field is available.
&lt;/p&gt;

 
&lt;hr&gt;
&lt;h2&gt;2.2 The field types&lt;/h2&gt;

&lt;h4&gt;2.2.1 What's a field?&lt;/h4&gt;

&lt;p&gt;Countrary to the other types, the entity type 
is a reference to an instance of a structured object, that contains
many informations of totally different kinds.&lt;/p&gt;

&lt;p&gt;To access all these informations conveniently, they are stored as
fields of the entity object, and each field is given a name and a type,
that makes it distinct of the others.&lt;/p&gt;

&lt;p&gt;Some of the fields do not store value, but instead they store the
function to be executed in certain conditions. They are called the
&lt;b&gt;methods&lt;/b&gt; that can be aplied to the object.&lt;/p&gt;

&lt;p&gt;If [[Quake-C]] was an object oriented programming language, those method
functions and would be distinguished from the other fields. And, above
all, you would be able to create new object types, with their own fields.&lt;/p&gt;

&lt;p&gt;As Quake-C stands currently, &lt;b&gt;all the field definitions&lt;/b&gt; are
definitions of entity fields. So anywhere in your code you could add
definition of new fields, and the compiler would interpret them
as an extension of the entity definition.&lt;/p&gt;

&lt;h4&gt;2.2.2 Creating new fields&lt;/h4&gt;

&lt;p&gt;The only way to extend the entity type
is to add some fields at the end of the structures.&lt;/p&gt;

&lt;p&gt;This is done via a field definitions, whose general structure is:
&lt;pre&gt;
   .type field_name;
&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt; For instance, if you wanted to add a sling to the game, and needed
to store the count of pellets for every player, you would add
the following line in the source code:
&lt;pre&gt;
   .float ammo_sling;
   &lt;/pre&gt;
That will add a fields &lt;b&gt;ammo_sling&lt;/b&gt; to every entity in the game,
and in particular to the player entities.
&lt;/p&gt;

&lt;p&gt;Here are all the possible definitions of entity fields, with their types:
&lt;pre&gt;
    .float field_name;
    .string field_name;
    .vector field_name;
    .entity field_name;
    &lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;The strange bit is that you can add those type definitions almost
anywhere in the source code. They are not supposed to be grouped in
a single place, where the entity type would be defined.
&lt;/p&gt;

&lt;h4&gt;2.2.3 Allowed modifications of types&lt;/h4&gt;

&lt;p&gt;In the first file read by the Quake-C compiler, &lt;b&gt;[[defs.qc]]&lt;/b&gt;,
there must be a definition for the entity fields, and world fields.
This definition is hard coded. You had better not touch it,
or you will have to recompile Quake itself.&lt;/p&gt;

&lt;p&gt;The globals are defined before the special definition
&lt;b&gt;[[void end_sys_globals;]]&lt;/b&gt;&lt;br&gt;

The entity fields are defined before the special
definition &lt;b&gt;[[void end_sys_fields;]]&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;It's not important if you don't understand the nonsense
above. It's an ugly hack. Just &lt;b&gt;don't modify defs.qc&lt;/b&gt; 
before those two tags, and you won't be in trouble.&lt;/p&gt;
&lt;hr&gt;</text>
      <sha1>8zehty0p0q5i5weiiqyqgqle1p6bix3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>674</id>
      <parentid>673</parentid>
      <timestamp>2008-05-07T17:38:10Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="4616">&lt;H1&gt;&lt;FONT COLOR=&quot;#007F00&quot;&gt;2. The Quake-C Basic Types&lt;/FONT&gt;&lt;/H1&gt;


&lt;h2&gt;2.1 The simple Types&lt;/h2&gt;

&lt;h4&gt;2.1.1 [[void]] type&lt;/h4&gt;

&lt;p&gt;An empty result, mostly used for definition of procedures (i.e. functions 
that return no result at all).
&lt;/p&gt;

&lt;h4&gt;2.1.2 [[Float]] type&lt;/h4&gt;

&lt;p&gt;A floating point value.&lt;/p&gt;
&lt;p&gt;Floats are also used to store booleans (TRUE, FALSE) or integer values
link counters, or bit flags.
&lt;pre&gt;
    Valid syntax: 12  1.6  0.5  -100
  
    Invalid syntax: .5  -.50  .690
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;A parsing ambiguity is present with negative constants. &quot;a-5&quot; will be parsed 
as &quot;a&quot;, then &quot;-5&quot;, causing an error.  Separate the - from the digits with a 
space &quot;a - 5&quot; to get the proper behavior.
&lt;/p&gt;

&lt;h4&gt;2.1.3 Vector type&lt;/h4&gt;

&lt;p&gt;A vector, made of 3 float coordinates.
&lt;br&gt;
Used to represent positions or directions in 3D space.

&lt;br&gt;
Valid syntax: &lt;b&gt;'0 0 0'&lt;/b&gt;  or &lt;b&gt;'20.5 -10 0.00001'&lt;/b&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Note the simple quotes around the vector. Do not use
double quotes, they are reserved for strings.&lt;/p&gt;

&lt;p&gt;If you declare a vector &lt;b&gt;foobar&lt;/b&gt;, then you can
access it's x, y and z fields with: &lt;b&gt;foobar_x&lt;/b&gt;,

&lt;b&gt;foobar_y&lt;/b&gt;,&lt;b&gt;foobar_z&lt;/b&gt;.
&lt;/p&gt;

&lt;h4&gt;2.1.4 String type&lt;/h4&gt;

&lt;p&gt;This is used to store character string.
&lt;br&gt;
Used to indicate file names, or messages to be broadcast to players.
&lt;br&gt;
Valid syntax: &lt;b&gt;&quot;maps/jrwiz1.bsp&quot;&lt;/b&gt; or &lt;b&gt;&quot;ouch!\
&quot;&lt;/b&gt;

&lt;br&gt;
Use &lt;b&gt;\
&lt;/b&gt; for newline.
&lt;/p&gt;
&lt;p&gt;Note: that character strings cannot be modified, or concatenated.
Because they are stored at fixed locations in memory, and if
would be postentially troublesome to allow modification.
&lt;/p&gt;

&lt;h4&gt;2.1.5 entity type&lt;/h4&gt;

&lt;p&gt;The reference of an entity in the game, like things, players, monsters.&lt;br&gt;

For instance, this is the type of the entities self
and other.
&lt;/p&gt; 
&lt;p&gt;The entity type is a structured type, made of [[fields]].&lt;br&gt;
A description of each field is available.
&lt;/p&gt;

 
&lt;hr&gt;
&lt;h2&gt;2.2 The field types&lt;/h2&gt;

&lt;h4&gt;2.2.1 What's a field?&lt;/h4&gt;

&lt;p&gt;Countrary to the other types, the entity type 
is a reference to an instance of a structured object, that contains
many informations of totally different kinds.&lt;/p&gt;

&lt;p&gt;To access all these informations conveniently, they are stored as
fields of the entity object, and each field is given a name and a type,
that makes it distinct of the others.&lt;/p&gt;

&lt;p&gt;Some of the fields do not store value, but instead they store the
function to be executed in certain conditions. They are called the
&lt;b&gt;methods&lt;/b&gt; that can be aplied to the object.&lt;/p&gt;

&lt;p&gt;If [[Quake-C]] was an object oriented programming language, those method
functions and would be distinguished from the other fields. And, above
all, you would be able to create new object types, with their own fields.&lt;/p&gt;

&lt;p&gt;As Quake-C stands currently, &lt;b&gt;all the field definitions&lt;/b&gt; are
definitions of entity fields. So anywhere in your code you could add
definition of new fields, and the compiler would interpret them
as an extension of the entity definition.&lt;/p&gt;

&lt;h4&gt;2.2.2 Creating new fields&lt;/h4&gt;

&lt;p&gt;The only way to extend the entity type
is to add some fields at the end of the structures.&lt;/p&gt;

&lt;p&gt;This is done via a field definitions, whose general structure is:
&lt;pre&gt;
   .type field_name;
&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt; For instance, if you wanted to add a sling to the game, and needed
to store the count of pellets for every player, you would add
the following line in the source code:
&lt;pre&gt;
   .float ammo_sling;
   &lt;/pre&gt;
That will add a fields &lt;b&gt;ammo_sling&lt;/b&gt; to every entity in the game,
and in particular to the player entities.
&lt;/p&gt;

&lt;p&gt;Here are all the possible definitions of entity fields, with their types:
&lt;pre&gt;
    .float field_name;
    .string field_name;
    .vector field_name;
    .entity field_name;
    &lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;The strange bit is that you can add those type definitions almost
anywhere in the source code. They are not supposed to be grouped in
a single place, where the entity type would be defined.
&lt;/p&gt;

&lt;h4&gt;2.2.3 Allowed modifications of types&lt;/h4&gt;

&lt;p&gt;In the first file read by the Quake-C compiler, &lt;b&gt;[[defs.qc]]&lt;/b&gt;,
there must be a definition for the entity fields, and world fields.
This definition is hard coded. You had better not touch it,
or you will have to recompile Quake itself.&lt;/p&gt;

&lt;p&gt;The globals are defined before the special definition
&lt;b&gt;[[void end_sys_globals;]]&lt;/b&gt;&lt;br&gt;

The entity fields are defined before the special
definition &lt;b&gt;[[void end_sys_fields;]]&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;It's not important if you don't understand the nonsense
above. It's an ugly hack. Just &lt;b&gt;don't modify defs.qc&lt;/b&gt; 
before those two tags, and you won't be in trouble.&lt;/p&gt;
&lt;hr&gt;</text>
      <sha1>g5tnghjh04uo4xvcs7jjpd0x303udpb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>675</id>
      <parentid>674</parentid>
      <timestamp>2008-05-07T17:38:24Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="4620">&lt;H1&gt;&lt;FONT COLOR=&quot;#007F00&quot;&gt;2. The Quake-C Basic Types&lt;/FONT&gt;&lt;/H1&gt;


&lt;h2&gt;2.1 The simple Types&lt;/h2&gt;

&lt;h4&gt;2.1.1 [[void]] type&lt;/h4&gt;

&lt;p&gt;An empty result, mostly used for definition of procedures (i.e. functions 
that return no result at all).
&lt;/p&gt;

&lt;h4&gt;2.1.2 [[Float]] type&lt;/h4&gt;

&lt;p&gt;A floating point value.&lt;/p&gt;
&lt;p&gt;Floats are also used to store booleans (TRUE, FALSE) or integer values
link counters, or bit flags.
&lt;pre&gt;
    Valid syntax: 12  1.6  0.5  -100
  
    Invalid syntax: .5  -.50  .690
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;A parsing ambiguity is present with negative constants. &quot;a-5&quot; will be parsed 
as &quot;a&quot;, then &quot;-5&quot;, causing an error.  Separate the - from the digits with a 
space &quot;a - 5&quot; to get the proper behavior.
&lt;/p&gt;

&lt;h4&gt;2.1.3 [[Vector]] type&lt;/h4&gt;

&lt;p&gt;A vector, made of 3 float coordinates.
&lt;br&gt;
Used to represent positions or directions in 3D space.

&lt;br&gt;
Valid syntax: &lt;b&gt;'0 0 0'&lt;/b&gt;  or &lt;b&gt;'20.5 -10 0.00001'&lt;/b&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Note the simple quotes around the vector. Do not use
double quotes, they are reserved for strings.&lt;/p&gt;

&lt;p&gt;If you declare a vector &lt;b&gt;foobar&lt;/b&gt;, then you can
access it's x, y and z fields with: &lt;b&gt;foobar_x&lt;/b&gt;,

&lt;b&gt;foobar_y&lt;/b&gt;,&lt;b&gt;foobar_z&lt;/b&gt;.
&lt;/p&gt;

&lt;h4&gt;2.1.4 String type&lt;/h4&gt;

&lt;p&gt;This is used to store character string.
&lt;br&gt;
Used to indicate file names, or messages to be broadcast to players.
&lt;br&gt;
Valid syntax: &lt;b&gt;&quot;maps/jrwiz1.bsp&quot;&lt;/b&gt; or &lt;b&gt;&quot;ouch!\
&quot;&lt;/b&gt;

&lt;br&gt;
Use &lt;b&gt;\
&lt;/b&gt; for newline.
&lt;/p&gt;
&lt;p&gt;Note: that character strings cannot be modified, or concatenated.
Because they are stored at fixed locations in memory, and if
would be postentially troublesome to allow modification.
&lt;/p&gt;

&lt;h4&gt;2.1.5 entity type&lt;/h4&gt;

&lt;p&gt;The reference of an entity in the game, like things, players, monsters.&lt;br&gt;

For instance, this is the type of the entities self
and other.
&lt;/p&gt; 
&lt;p&gt;The entity type is a structured type, made of [[fields]].&lt;br&gt;
A description of each field is available.
&lt;/p&gt;

 
&lt;hr&gt;
&lt;h2&gt;2.2 The field types&lt;/h2&gt;

&lt;h4&gt;2.2.1 What's a field?&lt;/h4&gt;

&lt;p&gt;Countrary to the other types, the entity type 
is a reference to an instance of a structured object, that contains
many informations of totally different kinds.&lt;/p&gt;

&lt;p&gt;To access all these informations conveniently, they are stored as
fields of the entity object, and each field is given a name and a type,
that makes it distinct of the others.&lt;/p&gt;

&lt;p&gt;Some of the fields do not store value, but instead they store the
function to be executed in certain conditions. They are called the
&lt;b&gt;methods&lt;/b&gt; that can be aplied to the object.&lt;/p&gt;

&lt;p&gt;If [[Quake-C]] was an object oriented programming language, those method
functions and would be distinguished from the other fields. And, above
all, you would be able to create new object types, with their own fields.&lt;/p&gt;

&lt;p&gt;As Quake-C stands currently, &lt;b&gt;all the field definitions&lt;/b&gt; are
definitions of entity fields. So anywhere in your code you could add
definition of new fields, and the compiler would interpret them
as an extension of the entity definition.&lt;/p&gt;

&lt;h4&gt;2.2.2 Creating new fields&lt;/h4&gt;

&lt;p&gt;The only way to extend the entity type
is to add some fields at the end of the structures.&lt;/p&gt;

&lt;p&gt;This is done via a field definitions, whose general structure is:
&lt;pre&gt;
   .type field_name;
&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt; For instance, if you wanted to add a sling to the game, and needed
to store the count of pellets for every player, you would add
the following line in the source code:
&lt;pre&gt;
   .float ammo_sling;
   &lt;/pre&gt;
That will add a fields &lt;b&gt;ammo_sling&lt;/b&gt; to every entity in the game,
and in particular to the player entities.
&lt;/p&gt;

&lt;p&gt;Here are all the possible definitions of entity fields, with their types:
&lt;pre&gt;
    .float field_name;
    .string field_name;
    .vector field_name;
    .entity field_name;
    &lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;The strange bit is that you can add those type definitions almost
anywhere in the source code. They are not supposed to be grouped in
a single place, where the entity type would be defined.
&lt;/p&gt;

&lt;h4&gt;2.2.3 Allowed modifications of types&lt;/h4&gt;

&lt;p&gt;In the first file read by the Quake-C compiler, &lt;b&gt;[[defs.qc]]&lt;/b&gt;,
there must be a definition for the entity fields, and world fields.
This definition is hard coded. You had better not touch it,
or you will have to recompile Quake itself.&lt;/p&gt;

&lt;p&gt;The globals are defined before the special definition
&lt;b&gt;[[void end_sys_globals;]]&lt;/b&gt;&lt;br&gt;

The entity fields are defined before the special
definition &lt;b&gt;[[void end_sys_fields;]]&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;It's not important if you don't understand the nonsense
above. It's an ugly hack. Just &lt;b&gt;don't modify defs.qc&lt;/b&gt; 
before those two tags, and you won't be in trouble.&lt;/p&gt;
&lt;hr&gt;</text>
      <sha1>jmkf98wibuz22y0hyhg0jicinjmld7w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>676</id>
      <parentid>675</parentid>
      <timestamp>2008-05-07T17:38:33Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="4624">&lt;H1&gt;&lt;FONT COLOR=&quot;#007F00&quot;&gt;2. The Quake-C Basic Types&lt;/FONT&gt;&lt;/H1&gt;


&lt;h2&gt;2.1 The simple Types&lt;/h2&gt;

&lt;h4&gt;2.1.1 [[void]] type&lt;/h4&gt;

&lt;p&gt;An empty result, mostly used for definition of procedures (i.e. functions 
that return no result at all).
&lt;/p&gt;

&lt;h4&gt;2.1.2 [[Float]] type&lt;/h4&gt;

&lt;p&gt;A floating point value.&lt;/p&gt;
&lt;p&gt;Floats are also used to store booleans (TRUE, FALSE) or integer values
link counters, or bit flags.
&lt;pre&gt;
    Valid syntax: 12  1.6  0.5  -100
  
    Invalid syntax: .5  -.50  .690
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;A parsing ambiguity is present with negative constants. &quot;a-5&quot; will be parsed 
as &quot;a&quot;, then &quot;-5&quot;, causing an error.  Separate the - from the digits with a 
space &quot;a - 5&quot; to get the proper behavior.
&lt;/p&gt;

&lt;h4&gt;2.1.3 [[Vector]] type&lt;/h4&gt;

&lt;p&gt;A vector, made of 3 float coordinates.
&lt;br&gt;
Used to represent positions or directions in 3D space.

&lt;br&gt;
Valid syntax: &lt;b&gt;'0 0 0'&lt;/b&gt;  or &lt;b&gt;'20.5 -10 0.00001'&lt;/b&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Note the simple quotes around the vector. Do not use
double quotes, they are reserved for strings.&lt;/p&gt;

&lt;p&gt;If you declare a vector &lt;b&gt;foobar&lt;/b&gt;, then you can
access it's x, y and z fields with: &lt;b&gt;foobar_x&lt;/b&gt;,

&lt;b&gt;foobar_y&lt;/b&gt;,&lt;b&gt;foobar_z&lt;/b&gt;.
&lt;/p&gt;

&lt;h4&gt;2.1.4 [[String]] type&lt;/h4&gt;

&lt;p&gt;This is used to store character string.
&lt;br&gt;
Used to indicate file names, or messages to be broadcast to players.
&lt;br&gt;
Valid syntax: &lt;b&gt;&quot;maps/jrwiz1.bsp&quot;&lt;/b&gt; or &lt;b&gt;&quot;ouch!\
&quot;&lt;/b&gt;

&lt;br&gt;
Use &lt;b&gt;\
&lt;/b&gt; for newline.
&lt;/p&gt;
&lt;p&gt;Note: that character strings cannot be modified, or concatenated.
Because they are stored at fixed locations in memory, and if
would be postentially troublesome to allow modification.
&lt;/p&gt;

&lt;h4&gt;2.1.5 entity type&lt;/h4&gt;

&lt;p&gt;The reference of an entity in the game, like things, players, monsters.&lt;br&gt;

For instance, this is the type of the entities self
and other.
&lt;/p&gt; 
&lt;p&gt;The entity type is a structured type, made of [[fields]].&lt;br&gt;
A description of each field is available.
&lt;/p&gt;

 
&lt;hr&gt;
&lt;h2&gt;2.2 The field types&lt;/h2&gt;

&lt;h4&gt;2.2.1 What's a field?&lt;/h4&gt;

&lt;p&gt;Countrary to the other types, the entity type 
is a reference to an instance of a structured object, that contains
many informations of totally different kinds.&lt;/p&gt;

&lt;p&gt;To access all these informations conveniently, they are stored as
fields of the entity object, and each field is given a name and a type,
that makes it distinct of the others.&lt;/p&gt;

&lt;p&gt;Some of the fields do not store value, but instead they store the
function to be executed in certain conditions. They are called the
&lt;b&gt;methods&lt;/b&gt; that can be aplied to the object.&lt;/p&gt;

&lt;p&gt;If [[Quake-C]] was an object oriented programming language, those method
functions and would be distinguished from the other fields. And, above
all, you would be able to create new object types, with their own fields.&lt;/p&gt;

&lt;p&gt;As Quake-C stands currently, &lt;b&gt;all the field definitions&lt;/b&gt; are
definitions of entity fields. So anywhere in your code you could add
definition of new fields, and the compiler would interpret them
as an extension of the entity definition.&lt;/p&gt;

&lt;h4&gt;2.2.2 Creating new fields&lt;/h4&gt;

&lt;p&gt;The only way to extend the entity type
is to add some fields at the end of the structures.&lt;/p&gt;

&lt;p&gt;This is done via a field definitions, whose general structure is:
&lt;pre&gt;
   .type field_name;
&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt; For instance, if you wanted to add a sling to the game, and needed
to store the count of pellets for every player, you would add
the following line in the source code:
&lt;pre&gt;
   .float ammo_sling;
   &lt;/pre&gt;
That will add a fields &lt;b&gt;ammo_sling&lt;/b&gt; to every entity in the game,
and in particular to the player entities.
&lt;/p&gt;

&lt;p&gt;Here are all the possible definitions of entity fields, with their types:
&lt;pre&gt;
    .float field_name;
    .string field_name;
    .vector field_name;
    .entity field_name;
    &lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;The strange bit is that you can add those type definitions almost
anywhere in the source code. They are not supposed to be grouped in
a single place, where the entity type would be defined.
&lt;/p&gt;

&lt;h4&gt;2.2.3 Allowed modifications of types&lt;/h4&gt;

&lt;p&gt;In the first file read by the Quake-C compiler, &lt;b&gt;[[defs.qc]]&lt;/b&gt;,
there must be a definition for the entity fields, and world fields.
This definition is hard coded. You had better not touch it,
or you will have to recompile Quake itself.&lt;/p&gt;

&lt;p&gt;The globals are defined before the special definition
&lt;b&gt;[[void end_sys_globals;]]&lt;/b&gt;&lt;br&gt;

The entity fields are defined before the special
definition &lt;b&gt;[[void end_sys_fields;]]&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;It's not important if you don't understand the nonsense
above. It's an ugly hack. Just &lt;b&gt;don't modify defs.qc&lt;/b&gt; 
before those two tags, and you won't be in trouble.&lt;/p&gt;
&lt;hr&gt;</text>
      <sha1>82fxfjqwsp04kueaje7hf7fdsmlovz9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>746</id>
      <parentid>676</parentid>
      <timestamp>2008-05-08T14:01:25Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="4608">&lt;H1&gt;&lt;FONT COLOR=&quot;#007F00&quot;&gt;2. The Quake-C Basic Types&lt;/FONT&gt;&lt;/H1&gt;


&lt;h2&gt;The simple Types&lt;/h2&gt;

&lt;h4&gt;[[void]] type&lt;/h4&gt;

&lt;p&gt;An empty result, mostly used for definition of procedures (i.e. functions 
that return no result at all).
&lt;/p&gt;

&lt;h4&gt;[[Float]] type&lt;/h4&gt;

&lt;p&gt;A floating point value.&lt;/p&gt;
&lt;p&gt;Floats are also used to store booleans (TRUE, FALSE) or integer values
link counters, or bit flags.
&lt;pre&gt;
    Valid syntax: 12  1.6  0.5  -100
  
    Invalid syntax: .5  -.50  .690
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;A parsing ambiguity is present with negative constants. &quot;a-5&quot; will be parsed 
as &quot;a&quot;, then &quot;-5&quot;, causing an error.  Separate the - from the digits with a 
space &quot;a - 5&quot; to get the proper behavior.
&lt;/p&gt;

&lt;h4&gt;2.1.3 [[Vector]] type&lt;/h4&gt;

&lt;p&gt;A vector, made of 3 float coordinates.
&lt;br&gt;
Used to represent positions or directions in 3D space.

&lt;br&gt;
Valid syntax: &lt;b&gt;'0 0 0'&lt;/b&gt;  or &lt;b&gt;'20.5 -10 0.00001'&lt;/b&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Note the simple quotes around the vector. Do not use
double quotes, they are reserved for strings.&lt;/p&gt;

&lt;p&gt;If you declare a vector &lt;b&gt;foobar&lt;/b&gt;, then you can
access it's x, y and z fields with: &lt;b&gt;foobar_x&lt;/b&gt;,

&lt;b&gt;foobar_y&lt;/b&gt;,&lt;b&gt;foobar_z&lt;/b&gt;.
&lt;/p&gt;

&lt;h4&gt;2.1.4 [[String]] type&lt;/h4&gt;

&lt;p&gt;This is used to store character string.
&lt;br&gt;
Used to indicate file names, or messages to be broadcast to players.
&lt;br&gt;
Valid syntax: &lt;b&gt;&quot;maps/jrwiz1.bsp&quot;&lt;/b&gt; or &lt;b&gt;&quot;ouch!\
&quot;&lt;/b&gt;

&lt;br&gt;
Use &lt;b&gt;\
&lt;/b&gt; for newline.
&lt;/p&gt;
&lt;p&gt;Note: that character strings cannot be modified, or concatenated.
Because they are stored at fixed locations in memory, and if
would be postentially troublesome to allow modification.
&lt;/p&gt;

&lt;h4&gt;2.1.5 entity type&lt;/h4&gt;

&lt;p&gt;The reference of an entity in the game, like things, players, monsters.&lt;br&gt;

For instance, this is the type of the entities self
and other.
&lt;/p&gt; 
&lt;p&gt;The entity type is a structured type, made of [[fields]].&lt;br&gt;
A description of each field is available.
&lt;/p&gt;

 
&lt;hr&gt;
&lt;h2&gt;2.2 The field types&lt;/h2&gt;

&lt;h4&gt;2.2.1 What's a field?&lt;/h4&gt;

&lt;p&gt;Countrary to the other types, the entity type 
is a reference to an instance of a structured object, that contains
many informations of totally different kinds.&lt;/p&gt;

&lt;p&gt;To access all these informations conveniently, they are stored as
fields of the entity object, and each field is given a name and a type,
that makes it distinct of the others.&lt;/p&gt;

&lt;p&gt;Some of the fields do not store value, but instead they store the
function to be executed in certain conditions. They are called the
&lt;b&gt;methods&lt;/b&gt; that can be aplied to the object.&lt;/p&gt;

&lt;p&gt;If [[Quake-C]] was an object oriented programming language, those method
functions and would be distinguished from the other fields. And, above
all, you would be able to create new object types, with their own fields.&lt;/p&gt;

&lt;p&gt;As Quake-C stands currently, &lt;b&gt;all the field definitions&lt;/b&gt; are
definitions of entity fields. So anywhere in your code you could add
definition of new fields, and the compiler would interpret them
as an extension of the entity definition.&lt;/p&gt;

&lt;h4&gt;2.2.2 Creating new fields&lt;/h4&gt;

&lt;p&gt;The only way to extend the entity type
is to add some fields at the end of the structures.&lt;/p&gt;

&lt;p&gt;This is done via a field definitions, whose general structure is:
&lt;pre&gt;
   .type field_name;
&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt; For instance, if you wanted to add a sling to the game, and needed
to store the count of pellets for every player, you would add
the following line in the source code:
&lt;pre&gt;
   .float ammo_sling;
   &lt;/pre&gt;
That will add a fields &lt;b&gt;ammo_sling&lt;/b&gt; to every entity in the game,
and in particular to the player entities.
&lt;/p&gt;

&lt;p&gt;Here are all the possible definitions of entity fields, with their types:
&lt;pre&gt;
    .float field_name;
    .string field_name;
    .vector field_name;
    .entity field_name;
    &lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;The strange bit is that you can add those type definitions almost
anywhere in the source code. They are not supposed to be grouped in
a single place, where the entity type would be defined.
&lt;/p&gt;

&lt;h4&gt;2.2.3 Allowed modifications of types&lt;/h4&gt;

&lt;p&gt;In the first file read by the Quake-C compiler, &lt;b&gt;[[defs.qc]]&lt;/b&gt;,
there must be a definition for the entity fields, and world fields.
This definition is hard coded. You had better not touch it,
or you will have to recompile Quake itself.&lt;/p&gt;

&lt;p&gt;The globals are defined before the special definition
&lt;b&gt;[[void end_sys_globals;]]&lt;/b&gt;&lt;br&gt;

The entity fields are defined before the special
definition &lt;b&gt;[[void end_sys_fields;]]&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;It's not important if you don't understand the nonsense
above. It's an ugly hack. Just &lt;b&gt;don't modify defs.qc&lt;/b&gt; 
before those two tags, and you won't be in trouble.&lt;/p&gt;
&lt;hr&gt;</text>
      <sha1>fud157xcka03gaipps7k1rbeirpvske</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>747</id>
      <parentid>746</parentid>
      <timestamp>2008-05-08T14:02:10Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="4565">&lt;H1&gt;&lt;FONT COLOR=&quot;#007F00&quot;&gt;The Quake-C Basic Types&lt;/FONT&gt;&lt;/H1&gt;


&lt;h2&gt;The simple Types&lt;/h2&gt;

&lt;h4&gt;[[void]] type&lt;/h4&gt;

&lt;p&gt;An empty result, mostly used for definition of procedures (i.e. functions 
that return no result at all).
&lt;/p&gt;

&lt;h4&gt;[[Float]] type&lt;/h4&gt;

&lt;p&gt;A floating point value.&lt;/p&gt;
&lt;p&gt;Floats are also used to store booleans (TRUE, FALSE) or integer values
link counters, or bit flags.
&lt;pre&gt;
    Valid syntax: 12  1.6  0.5  -100
  
    Invalid syntax: .5  -.50  .690
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;A parsing ambiguity is present with negative constants. &quot;a-5&quot; will be parsed 
as &quot;a&quot;, then &quot;-5&quot;, causing an error.  Separate the - from the digits with a 
space &quot;a - 5&quot; to get the proper behavior.
&lt;/p&gt;

&lt;h4&gt;[[Vector]] type&lt;/h4&gt;

&lt;p&gt;A vector, made of 3 float coordinates.
&lt;br&gt;
Used to represent positions or directions in 3D space.

&lt;br&gt;
Valid syntax: &lt;b&gt;'0 0 0'&lt;/b&gt;  or &lt;b&gt;'20.5 -10 0.00001'&lt;/b&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Note the simple quotes around the vector. Do not use
double quotes, they are reserved for strings.&lt;/p&gt;

&lt;p&gt;If you declare a vector &lt;b&gt;foobar&lt;/b&gt;, then you can
access it's x, y and z fields with: &lt;b&gt;foobar_x&lt;/b&gt;,

&lt;b&gt;foobar_y&lt;/b&gt;,&lt;b&gt;foobar_z&lt;/b&gt;.
&lt;/p&gt;

&lt;h4&gt;[[String]] type&lt;/h4&gt;

&lt;p&gt;This is used to store character string.
&lt;br&gt;
Used to indicate file names, or messages to be broadcast to players.
&lt;br&gt;
Valid syntax: &lt;b&gt;&quot;maps/jrwiz1.bsp&quot;&lt;/b&gt; or &lt;b&gt;&quot;ouch!\
&quot;&lt;/b&gt;

&lt;br&gt;
Use &lt;b&gt;\
&lt;/b&gt; for newline.
&lt;/p&gt;
&lt;p&gt;Note: that character strings cannot be modified, or concatenated.
Because they are stored at fixed locations in memory, and if
would be postentially troublesome to allow modification.
&lt;/p&gt;

&lt;h4&gt;entity type&lt;/h4&gt;

&lt;p&gt;The reference of an entity in the game, like things, players, monsters.&lt;br&gt;

For instance, this is the type of the entities self
and other.
&lt;/p&gt; 
&lt;p&gt;The entity type is a structured type, made of [[fields]].&lt;br&gt;
A description of each field is available.
&lt;/p&gt;

 
&lt;hr&gt;
&lt;h2&gt;The field types&lt;/h2&gt;

&lt;h4&gt;What's a field?&lt;/h4&gt;

&lt;p&gt;Countrary to the other types, the entity type 
is a reference to an instance of a structured object, that contains
many informations of totally different kinds.&lt;/p&gt;

&lt;p&gt;To access all these informations conveniently, they are stored as
fields of the entity object, and each field is given a name and a type,
that makes it distinct of the others.&lt;/p&gt;

&lt;p&gt;Some of the fields do not store value, but instead they store the
function to be executed in certain conditions. They are called the
&lt;b&gt;methods&lt;/b&gt; that can be aplied to the object.&lt;/p&gt;

&lt;p&gt;If [[Quake-C]] was an object oriented programming language, those method
functions and would be distinguished from the other fields. And, above
all, you would be able to create new object types, with their own fields.&lt;/p&gt;

&lt;p&gt;As Quake-C stands currently, &lt;b&gt;all the field definitions&lt;/b&gt; are
definitions of entity fields. So anywhere in your code you could add
definition of new fields, and the compiler would interpret them
as an extension of the entity definition.&lt;/p&gt;

&lt;h4&gt;Creating new fields&lt;/h4&gt;

&lt;p&gt;The only way to extend the entity type
is to add some fields at the end of the structures.&lt;/p&gt;

&lt;p&gt;This is done via a field definitions, whose general structure is:
&lt;pre&gt;
   .type field_name;
&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt; For instance, if you wanted to add a sling to the game, and needed
to store the count of pellets for every player, you would add
the following line in the source code:
&lt;pre&gt;
   .float ammo_sling;
   &lt;/pre&gt;
That will add a fields &lt;b&gt;ammo_sling&lt;/b&gt; to every entity in the game,
and in particular to the player entities.
&lt;/p&gt;

&lt;p&gt;Here are all the possible definitions of entity fields, with their types:
&lt;pre&gt;
    .float field_name;
    .string field_name;
    .vector field_name;
    .entity field_name;
    &lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;The strange bit is that you can add those type definitions almost
anywhere in the source code. They are not supposed to be grouped in
a single place, where the entity type would be defined.
&lt;/p&gt;

&lt;h4&gt;Allowed modifications of types&lt;/h4&gt;

&lt;p&gt;In the first file read by the Quake-C compiler, &lt;b&gt;[[defs.qc]]&lt;/b&gt;,
there must be a definition for the entity fields, and world fields.
This definition is hard coded. You had better not touch it,
or you will have to recompile Quake itself.&lt;/p&gt;

&lt;p&gt;The globals are defined before the special definition
&lt;b&gt;[[void end_sys_globals;]]&lt;/b&gt;&lt;br&gt;

The entity fields are defined before the special
definition &lt;b&gt;[[void end_sys_fields;]]&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;It's not important if you don't understand the nonsense
above. It's an ugly hack. Just &lt;b&gt;don't modify defs.qc&lt;/b&gt; 
before those two tags, and you won't be in trouble.&lt;/p&gt;
&lt;hr&gt;</text>
      <sha1>hjn7qq744nblik7e01hruwofn51m09j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>754</id>
      <parentid>747</parentid>
      <timestamp>2008-05-08T14:11:00Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="1866">&lt;H1&gt;&lt;FONT COLOR=&quot;#007F00&quot;&gt;The Quake-C Basic Types&lt;/FONT&gt;&lt;/H1&gt;


&lt;h2&gt;The simple Types&lt;/h2&gt;

&lt;h4&gt;[[void]] type&lt;/h4&gt;

&lt;p&gt;An empty result, mostly used for definition of procedures (i.e. functions 
that return no result at all).
&lt;/p&gt;

&lt;h4&gt;[[Float]] type&lt;/h4&gt;

&lt;p&gt;A floating point value.&lt;/p&gt;
&lt;p&gt;Floats are also used to store booleans (TRUE, FALSE) or integer values
link counters, or bit flags.
&lt;pre&gt;
    Valid syntax: 12  1.6  0.5  -100
  
    Invalid syntax: .5  -.50  .690
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;A parsing ambiguity is present with negative constants. &quot;a-5&quot; will be parsed 
as &quot;a&quot;, then &quot;-5&quot;, causing an error.  Separate the - from the digits with a 
space &quot;a - 5&quot; to get the proper behavior.
&lt;/p&gt;

&lt;h4&gt;[[Vector]] type&lt;/h4&gt;

&lt;p&gt;A vector, made of 3 float coordinates.
&lt;br&gt;
Used to represent positions or directions in 3D space.

&lt;br&gt;
Valid syntax: &lt;b&gt;'0 0 0'&lt;/b&gt;  or &lt;b&gt;'20.5 -10 0.00001'&lt;/b&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Note the simple quotes around the vector. Do not use
double quotes, they are reserved for strings.&lt;/p&gt;

&lt;p&gt;If you declare a vector &lt;b&gt;foobar&lt;/b&gt;, then you can
access it's x, y and z fields with: &lt;b&gt;foobar_x&lt;/b&gt;,

&lt;b&gt;foobar_y&lt;/b&gt;,&lt;b&gt;foobar_z&lt;/b&gt;.
&lt;/p&gt;

&lt;h4&gt;[[String]] type&lt;/h4&gt;

&lt;p&gt;This is used to store character string.
&lt;br&gt;
Used to indicate file names, or messages to be broadcast to players.
&lt;br&gt;
Valid syntax: &lt;b&gt;&quot;maps/jrwiz1.bsp&quot;&lt;/b&gt; or &lt;b&gt;&quot;ouch!\
&quot;&lt;/b&gt;

&lt;br&gt;
Use &lt;b&gt;\
&lt;/b&gt; for newline.
&lt;/p&gt;
&lt;p&gt;Note: that character strings cannot be modified, or concatenated.
Because they are stored at fixed locations in memory, and if
would be postentially troublesome to allow modification.
&lt;/p&gt;

&lt;h4&gt;entity type&lt;/h4&gt;

&lt;p&gt;The reference of an entity in the game, like things, players, monsters.&lt;br&gt;

For instance, this is the type of the entities self
and other.
&lt;/p&gt; 
&lt;p&gt;The entity type is a structured type, made of [[fields]].&lt;br&gt;
A description of each field is available.
&lt;/p&gt;</text>
      <sha1>acmprob3je1ukb6s3abmaf5enr043s9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>755</id>
      <parentid>754</parentid>
      <timestamp>2008-05-08T14:11:25Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="1800">
== The simple Types ==

&lt;h4&gt;[[void]] type&lt;/h4&gt;

&lt;p&gt;An empty result, mostly used for definition of procedures (i.e. functions 
that return no result at all).
&lt;/p&gt;

&lt;h4&gt;[[Float]] type&lt;/h4&gt;

&lt;p&gt;A floating point value.&lt;/p&gt;
&lt;p&gt;Floats are also used to store booleans (TRUE, FALSE) or integer values
link counters, or bit flags.
&lt;pre&gt;
    Valid syntax: 12  1.6  0.5  -100
  
    Invalid syntax: .5  -.50  .690
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;A parsing ambiguity is present with negative constants. &quot;a-5&quot; will be parsed 
as &quot;a&quot;, then &quot;-5&quot;, causing an error.  Separate the - from the digits with a 
space &quot;a - 5&quot; to get the proper behavior.
&lt;/p&gt;

&lt;h4&gt;[[Vector]] type&lt;/h4&gt;

&lt;p&gt;A vector, made of 3 float coordinates.
&lt;br&gt;
Used to represent positions or directions in 3D space.

&lt;br&gt;
Valid syntax: &lt;b&gt;'0 0 0'&lt;/b&gt;  or &lt;b&gt;'20.5 -10 0.00001'&lt;/b&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Note the simple quotes around the vector. Do not use
double quotes, they are reserved for strings.&lt;/p&gt;

&lt;p&gt;If you declare a vector &lt;b&gt;foobar&lt;/b&gt;, then you can
access it's x, y and z fields with: &lt;b&gt;foobar_x&lt;/b&gt;,

&lt;b&gt;foobar_y&lt;/b&gt;,&lt;b&gt;foobar_z&lt;/b&gt;.
&lt;/p&gt;

&lt;h4&gt;[[String]] type&lt;/h4&gt;

&lt;p&gt;This is used to store character string.
&lt;br&gt;
Used to indicate file names, or messages to be broadcast to players.
&lt;br&gt;
Valid syntax: &lt;b&gt;&quot;maps/jrwiz1.bsp&quot;&lt;/b&gt; or &lt;b&gt;&quot;ouch!\
&quot;&lt;/b&gt;

&lt;br&gt;
Use &lt;b&gt;\
&lt;/b&gt; for newline.
&lt;/p&gt;
&lt;p&gt;Note: that character strings cannot be modified, or concatenated.
Because they are stored at fixed locations in memory, and if
would be postentially troublesome to allow modification.
&lt;/p&gt;

&lt;h4&gt;entity type&lt;/h4&gt;

&lt;p&gt;The reference of an entity in the game, like things, players, monsters.&lt;br&gt;

For instance, this is the type of the entities self
and other.
&lt;/p&gt; 
&lt;p&gt;The entity type is a structured type, made of [[fields]].&lt;br&gt;
A description of each field is available.
&lt;/p&gt;</text>
      <sha1>dg73jwtkvu9g4b5ofufz6v3tc66xwmr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>758</id>
      <parentid>755</parentid>
      <timestamp>2008-05-08T14:12:57Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <minor/>
      <comment>[[QuakeC Types]] moved to [[QuakeC Simple Types]]: Defining simple and field types as separate pages... makes things a little clearer.</comment>
      <text xml:space="preserve" bytes="1800">
== The simple Types ==

&lt;h4&gt;[[void]] type&lt;/h4&gt;

&lt;p&gt;An empty result, mostly used for definition of procedures (i.e. functions 
that return no result at all).
&lt;/p&gt;

&lt;h4&gt;[[Float]] type&lt;/h4&gt;

&lt;p&gt;A floating point value.&lt;/p&gt;
&lt;p&gt;Floats are also used to store booleans (TRUE, FALSE) or integer values
link counters, or bit flags.
&lt;pre&gt;
    Valid syntax: 12  1.6  0.5  -100
  
    Invalid syntax: .5  -.50  .690
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;A parsing ambiguity is present with negative constants. &quot;a-5&quot; will be parsed 
as &quot;a&quot;, then &quot;-5&quot;, causing an error.  Separate the - from the digits with a 
space &quot;a - 5&quot; to get the proper behavior.
&lt;/p&gt;

&lt;h4&gt;[[Vector]] type&lt;/h4&gt;

&lt;p&gt;A vector, made of 3 float coordinates.
&lt;br&gt;
Used to represent positions or directions in 3D space.

&lt;br&gt;
Valid syntax: &lt;b&gt;'0 0 0'&lt;/b&gt;  or &lt;b&gt;'20.5 -10 0.00001'&lt;/b&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Note the simple quotes around the vector. Do not use
double quotes, they are reserved for strings.&lt;/p&gt;

&lt;p&gt;If you declare a vector &lt;b&gt;foobar&lt;/b&gt;, then you can
access it's x, y and z fields with: &lt;b&gt;foobar_x&lt;/b&gt;,

&lt;b&gt;foobar_y&lt;/b&gt;,&lt;b&gt;foobar_z&lt;/b&gt;.
&lt;/p&gt;

&lt;h4&gt;[[String]] type&lt;/h4&gt;

&lt;p&gt;This is used to store character string.
&lt;br&gt;
Used to indicate file names, or messages to be broadcast to players.
&lt;br&gt;
Valid syntax: &lt;b&gt;&quot;maps/jrwiz1.bsp&quot;&lt;/b&gt; or &lt;b&gt;&quot;ouch!\
&quot;&lt;/b&gt;

&lt;br&gt;
Use &lt;b&gt;\
&lt;/b&gt; for newline.
&lt;/p&gt;
&lt;p&gt;Note: that character strings cannot be modified, or concatenated.
Because they are stored at fixed locations in memory, and if
would be postentially troublesome to allow modification.
&lt;/p&gt;

&lt;h4&gt;entity type&lt;/h4&gt;

&lt;p&gt;The reference of an entity in the game, like things, players, monsters.&lt;br&gt;

For instance, this is the type of the entities self
and other.
&lt;/p&gt; 
&lt;p&gt;The entity type is a structured type, made of [[fields]].&lt;br&gt;
A description of each field is available.
&lt;/p&gt;</text>
      <sha1>dg73jwtkvu9g4b5ofufz6v3tc66xwmr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2100</id>
      <parentid>758</parentid>
      <timestamp>2013-03-25T17:59:46Z</timestamp>
      <contributor>
        <ip>80.217.79.210</ip>
      </contributor>
      <text xml:space="preserve" bytes="1799">
== The simple Types ==

&lt;h4&gt;[[void]] type&lt;/h4&gt;

&lt;p&gt;An empty result, mostly used for definition of procedures (i.e. functions 
that return no result at all).
&lt;/p&gt;

&lt;h4&gt;[[Float]] type&lt;/h4&gt;

&lt;p&gt;A floating point value.&lt;/p&gt;
&lt;p&gt;Floats are also used to store booleans (TRUE, FALSE) or integer values
link counters, or bit flags.
&lt;pre&gt;
    Valid syntax: 12  1.6  0.5  -100
  
    Invalid syntax: .5  -.50  .690
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;A parsing ambiguity is present with negative constants. &quot;a-5&quot; will be parsed 
as &quot;a&quot;, then &quot;-5&quot;, causing an error.  Separate the - from the digits with a 
space &quot;a - 5&quot; to get the proper behavior.
&lt;/p&gt;

&lt;h4&gt;[[Vector]] type&lt;/h4&gt;

&lt;p&gt;A vector, made of 3 float coordinates.
&lt;br&gt;
Used to represent positions or directions in 3D space.

&lt;br&gt;
Valid syntax: &lt;b&gt;'0 0 0'&lt;/b&gt;  or &lt;b&gt;'20.5 -10 0.00001'&lt;/b&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Note the simple quotes around the vector. Do not use
double quotes, they are reserved for strings.&lt;/p&gt;

&lt;p&gt;If you declare a vector &lt;b&gt;foobar&lt;/b&gt;, then you can
access it's x, y and z fields with: &lt;b&gt;foobar_x&lt;/b&gt;,

&lt;b&gt;foobar_y&lt;/b&gt;,&lt;b&gt;foobar_z&lt;/b&gt;.
&lt;/p&gt;

&lt;h4&gt;[[String]] type&lt;/h4&gt;

&lt;p&gt;This is used to store character string.
&lt;br&gt;
Used to indicate file names, or messages to be broadcast to players.
&lt;br&gt;
Valid syntax: &lt;b&gt;&quot;maps/jrwiz1.bsp&quot;&lt;/b&gt; or &lt;b&gt;&quot;ouch!\
&quot;&lt;/b&gt;

&lt;br&gt;
Use &lt;b&gt;\
&lt;/b&gt; for newline.
&lt;/p&gt;
&lt;p&gt;Note: that character strings cannot be modified, or concatenated.
Because they are stored at fixed locations in memory, and if
would be potentially troublesome to allow modification.
&lt;/p&gt;

&lt;h4&gt;entity type&lt;/h4&gt;

&lt;p&gt;The reference of an entity in the game, like things, players, monsters.&lt;br&gt;

For instance, this is the type of the entities self
and other.
&lt;/p&gt; 
&lt;p&gt;The entity type is a structured type, made of [[fields]].&lt;br&gt;
A description of each field is available.
&lt;/p&gt;</text>
      <sha1>3rzqcrt0h61yajydpwykjowl6jhymlx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2751</id>
      <parentid>2100</parentid>
      <timestamp>2013-04-05T00:15:27Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <minor/>
      <comment>/* The simple Types */</comment>
      <text xml:space="preserve" bytes="1799">
== The simple Types ==

&lt;h4&gt;[[void]] type&lt;/h4&gt;

&lt;p&gt;An empty result, mostly used for definition of procedures (i.e. functions 
that return no result at all).
&lt;/p&gt;

&lt;h4&gt;[[Float]] type&lt;/h4&gt;

&lt;p&gt;A floating point value.&lt;/p&gt;
&lt;p&gt;Floats are also used to store booleans (TRUE, FALSE) or integer values
link counters, or bit flags.
&lt;pre&gt;
    Valid syntax: 12  1.6  0.5  -100
  
    Invalid syntax: .5  -.50  .690
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;A parsing ambiguity is present with negative constants. &quot;a-5&quot; will be parsed 
as &quot;a&quot;, then &quot;-5&quot;, causing an error.  Separate the - from the digits with a 
space &quot;a - 5&quot; to get the proper behavior.
&lt;/p&gt;

&lt;h4&gt;[[Vector]] type&lt;/h4&gt;

&lt;p&gt;A vector, made of 3 float coordinates.
&lt;br&gt;
Used to represent positions or directions in 3D space.

&lt;br&gt;
Valid syntax: &lt;b&gt;'0 0 0'&lt;/b&gt;  or &lt;b&gt;'20.5 -10 0.00001'&lt;/b&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Note the simple quotes around the vector. Do not use
double quotes, they are reserved for strings.&lt;/p&gt;

&lt;p&gt;If you declare a vector &lt;b&gt;foobar&lt;/b&gt;, then you can
access it's x, y and z fields with: &lt;b&gt;foobar_x&lt;/b&gt;,

&lt;b&gt;foobar_y&lt;/b&gt;,&lt;b&gt;foobar_z&lt;/b&gt;.
&lt;/p&gt;

&lt;h4&gt;[[String]] type&lt;/h4&gt;

&lt;p&gt;This is used to store character string.
&lt;br&gt;
Used to indicate file names, or messages to be broadcast to players.
&lt;br&gt;
Valid syntax: &lt;b&gt;&quot;maps/jrwiz1.bsp&quot;&lt;/b&gt; or &lt;b&gt;&quot;ouch!\n&quot;&lt;/b&gt;

&lt;br&gt;
Use &lt;b&gt;\n&lt;/b&gt; for newline.
&lt;/p&gt;
&lt;p&gt;Note: that character strings cannot be modified, or concatenated.
Because they are stored at fixed locations in memory, and if
would be potentially troublesome to allow modification.
&lt;/p&gt;

&lt;h4&gt;entity type&lt;/h4&gt;

&lt;p&gt;The reference of an entity in the game, like things, players, monsters.&lt;br&gt;

For instance, this is the type of the entities self
and other.
&lt;/p&gt; 
&lt;p&gt;The entity type is a structured type, made of [[fields]].&lt;br&gt;
A description of each field is available.
&lt;/p&gt;</text>
      <sha1>p1kkce6k1uaovcj138rs6iygugdw57x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QuakeC Structures and Objects</title>
    <ns>0</ns>
    <id>434</id>
    <revision>
      <id>753</id>
      <timestamp>2008-05-08T14:10:10Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page:  == Definition of structures and objects ==  It is often convenient, in C (or C++), to create new structures (or Objects, or record) to store a few related informations at the same place. ...</comment>
      <text xml:space="preserve" bytes="589">
== Definition of structures and objects ==

It is often convenient, in C (or C++), to create new structures (or Objects, or record) to store a few related informations at the same place. For instance, you may wish to use a single structure to store all the ammo count of the player, and also the current selected weapon, since those informations are obviously related to each other.

Though both entity and vector are obviously structured types, it is impossible to create new structured types of that kind, in Quake-C. However, the entity type can be modified to suit some of your needs.</text>
      <sha1>1rl5tti9jobzxnzqag4x3wx4mjfh9k2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QuakeC Types</title>
    <ns>0</ns>
    <id>436</id>
    <redirect title="QuakeC Simple Types" />
    <revision>
      <id>759</id>
      <timestamp>2008-05-08T14:12:57Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>[[QuakeC Types]] moved to [[QuakeC Simple Types]]: Defining simple and field types as separate pages... makes things a little clearer.</comment>
      <text xml:space="preserve" bytes="33">#REDIRECT [[QuakeC Simple Types]]</text>
      <sha1>k8ko3hhy653ztrhcvifwm138kv7dvh1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QuakeC basics</title>
    <ns>0</ns>
    <id>31</id>
    <revision>
      <id>37</id>
      <timestamp>2007-10-30T17:32:30Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: * [[QuakeC Types]] * [[QuakeC Keywords]] * [[QuakeC Operators]]</comment>
      <text xml:space="preserve" bytes="63">* [[QuakeC Types]]
* [[QuakeC Keywords]]
* [[QuakeC Operators]]</text>
      <sha1>qkwtsvy4d7lytweoo8azr4hgwpkniq5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>668</id>
      <parentid>37</parentid>
      <timestamp>2008-05-07T17:32:06Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="97">* [[QuakeC Types]]
* [[QuakeC Keywords]]
* [[QuakeC Operators]]
* [[QuakeC Loops and Conditions]]</text>
      <sha1>m0lzvif6qroyvhcwa5d4elh7puj0tht</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>671</id>
      <parentid>668</parentid>
      <timestamp>2008-05-07T17:35:36Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="134">* [[QuakeC Types]]
* [[QuakeC Keywords]]
* [[QuakeC Operators]]
* [[QuakeC Definition of Functions]]
* [[QuakeC Loops and Conditions]]</text>
      <sha1>fkdx1uvhij3r835jxegcrmsmw36r524</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>748</id>
      <parentid>671</parentid>
      <timestamp>2008-05-08T14:05:12Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="156">* [[QuakeC Types]]
* [[QuakeC Comments]]
* [[QuakeC Keywords]]
* [[QuakeC Operators]]
* [[QuakeC Definition of Functions]]
* [[QuakeC Loops and Conditions]]</text>
      <sha1>sp6bzq9dq6v3f8tnyc1sce85px7xu9d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>750</id>
      <parentid>748</parentid>
      <timestamp>2008-05-08T14:06:19Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="175">* [[QuakeC Types]]
* [[QuakeC Comments]]
* [[QuakeC Names]]
* [[QuakeC Keywords]]
* [[QuakeC Operators]]
* [[QuakeC Definition of Functions]]
* [[QuakeC Loops and Conditions]]</text>
      <sha1>pmrbppghkppdr1ghfzmvqp4tclldftl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>752</id>
      <parentid>750</parentid>
      <timestamp>2008-05-08T14:09:22Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="211">* [[QuakeC Types]]
* [[QuakeC Comments]]
* [[QuakeC Names]]
* [[QuakeC Structures and Objects]]
* [[QuakeC Keywords]]
* [[QuakeC Operators]]
* [[QuakeC Definition of Functions]]
* [[QuakeC Loops and Conditions]]</text>
      <sha1>e8xiqdpd7ag44chrckqnhybgzuhx550</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>756</id>
      <parentid>752</parentid>
      <timestamp>2008-05-08T14:11:56Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="236">* [[QuakeC Types]]
* [[QuakeC Field Types]]
* [[QuakeC Comments]]
* [[QuakeC Names]]
* [[QuakeC Structures and Objects]]
* [[QuakeC Keywords]]
* [[QuakeC Operators]]
* [[QuakeC Definition of Functions]]
* [[QuakeC Loops and Conditions]]</text>
      <sha1>lyqp9xfw9ocuc0ihaogj6k48jt9rwxr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>760</id>
      <parentid>756</parentid>
      <timestamp>2008-05-08T14:13:18Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="243">* [[QuakeC Simple Types]]
* [[QuakeC Field Types]]
* [[QuakeC Comments]]
* [[QuakeC Names]]
* [[QuakeC Structures and Objects]]
* [[QuakeC Keywords]]
* [[QuakeC Operators]]
* [[QuakeC Definition of Functions]]
* [[QuakeC Loops and Conditions]]</text>
      <sha1>fnk6v84d6nhvlk4gogarpwq4krf8mdd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>761</id>
      <parentid>760</parentid>
      <timestamp>2008-05-08T14:14:44Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="307">
== QuakeC Language Basics==

* [[QuakeC Simple Types]]
* [[QuakeC Field Types]]
* [[QuakeC Comments]]
* [[QuakeC Names]]
* [[QuakeC Structures and Objects]]
* [[QuakeC Keywords]]
* [[QuakeC Operators]]
* [[QuakeC Definition of Functions]]
* [[QuakeC Loops and Conditions]]


----

== Alternate Resources ==</text>
      <sha1>tnorqe7wkf9m1aqqr8mouhdkdhugr10</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>762</id>
      <parentid>761</parentid>
      <timestamp>2008-05-08T14:16:42Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="498">== QuakeC Language Basics==

* [[QuakeC Simple Types]]
* [[QuakeC Field Types]]
* [[QuakeC Comments]]
* [[QuakeC Names]]
* [[QuakeC Structures and Objects]]
* [[QuakeC Keywords]]
* [[QuakeC Operators]]
* [[QuakeC Definition of Functions]]
* [[QuakeC Loops and Conditions]]


== Alternate Resources ==
*Inside3D's QC Specs documentation: [http://www.inside3d.com/qcspecs/qc-menu.htm]
  This section is here to credit places where contributors get their information found in this section of the wiki.</text>
      <sha1>890y28wjh8fumqx01ar2z1rv2zu51an</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>763</id>
      <parentid>762</parentid>
      <timestamp>2008-05-08T14:17:27Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="476">== QuakeC Language Basics==

* [[QuakeC Simple Types]]
* [[QuakeC Field Types]]
* [[QuakeC Comments]]
* [[QuakeC Names]]
* [[QuakeC Structures and Objects]]
* [[QuakeC Operators]]
* [[QuakeC Definition of Functions]]
* [[QuakeC Loops and Conditions]]


== Alternate Resources ==
*Inside3D's QC Specs documentation: [http://www.inside3d.com/qcspecs/qc-menu.htm]
  This section is here to credit places where contributors get their information found in this section of the wiki.</text>
      <sha1>s8nhk9y5jzlowqxsndj5congbdw4vm5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2906</id>
      <parentid>763</parentid>
      <timestamp>2013-04-09T14:41:55Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>added QuakeC source link</comment>
      <text xml:space="preserve" bytes="538">== QuakeC Language Basics==

* [[QuakeC Simple Types]]
* [[QuakeC Field Types]]
* [[QuakeC Comments]]
* [[QuakeC Names]]
* [[QuakeC Structures and Objects]]
* [[QuakeC Operators]]
* [[QuakeC Definition of Functions]]
* [[QuakeC Loops and Conditions]]
* [[Quake QuakeC source|QuakeC Source Code of Vanilla Quake]]


== Alternate Resources ==
*Inside3D's QC Specs documentation: [http://www.inside3d.com/qcspecs/qc-menu.htm]
  This section is here to credit places where contributors get their information found in this section of the wiki.</text>
      <sha1>ctpd8jnmdyf8gtzlc3oc1b7tm3xose5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QuakeC tips</title>
    <ns>0</ns>
    <id>28</id>
    <revision>
      <id>34</id>
      <timestamp>2007-10-30T17:06:31Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: * [[QuakeC Code Optimizations|Writing optimum code]] * [[Tips to fix warnings and errors in a decompiled source]] * [[Dont do list]] * [[Available Cvars]] * [[Use Linked Lists For Added Sp...</comment>
      <text xml:space="preserve" bytes="193">* [[QuakeC Code Optimizations|Writing optimum code]]
* [[Tips to fix warnings and errors in a decompiled source]]
* [[Dont do list]]
* [[Available Cvars]]
* [[Use Linked Lists For Added Speed]]</text>
      <sha1>2ykm9o2ynbtw6t42kxvek3cv7tbtu04</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QuakeC tutorials</title>
    <ns>0</ns>
    <id>27</id>
    <revision>
      <id>33</id>
      <timestamp>2007-10-30T17:06:01Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: * [[Creating a Dynamically-Sized Bodyque]]  ===See Also=== * [http://www.planetquake.com/minion/ AI Cafe] * [http://www.inside3d.com/qctut/ Inside3D QuakeC tutorials] * [http://tutorials.m...</comment>
      <text xml:space="preserve" bytes="317">* [[Creating a Dynamically-Sized Bodyque]]

===See Also===
* [http://www.planetquake.com/minion/ AI Cafe]
* [http://www.inside3d.com/qctut/ Inside3D QuakeC tutorials]
* [http://tutorials.moddb.com/?game=2&amp;type=1&amp;=Load+Tutorials ModDB QuakeC tutorials]
* [http://www.quakesrc.org/tutorials/old/ QuakeSrc.org tutorials]</text>
      <sha1>gaphsoqlmu6wu7ap9sgi7n3ytnn7ya6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QuakeEd</title>
    <ns>0</ns>
    <id>802</id>
    <revision>
      <id>2348</id>
      <timestamp>2013-03-27T13:28:25Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>added a little info about QuakeEd</comment>
      <text xml:space="preserve" bytes="610">'''QuakeEd''' is the original Quake level editor used by [[id Software]] to create the levels for Quake. It was developed in Objective-C for the (at the time) powerful NeXTSTEP workstation computers that id were using to build and [[compile]] the levels with. The code for QuakeEd was released shortly after the release of the game, but could not be used compiled and used directly because players were highly unlikely to possess a NeXT workstation. However, the release of the code almost certainly helped the development of other early Quake editors, such as [[Thred]], [[Qoole]], [[BSP]] and [[Worldcraft]].</text>
      <sha1>71arld3hdqh88c6998fvpvepesdfqad</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2350</id>
      <parentid>2348</parentid>
      <timestamp>2013-03-27T13:35:58Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>added screenshot</comment>
      <text xml:space="preserve" bytes="695">[[File:quakeed_screen_1.png|thumb|right|QuakeEd running on a NeXTSTEP workstation]]

'''QuakeEd''' is the original Quake level editor used by [[id Software]] to create the levels for Quake. It was developed in Objective-C for the (at the time) powerful NeXTSTEP workstation computers that id were using to build and [[compile]] the levels with. The code for QuakeEd was released shortly after the release of the game, but could not be used compiled and used directly because players were highly unlikely to possess a NeXT workstation. However, the release of the code almost certainly helped the development of other early Quake editors, such as [[Thred]], [[Qoole]], [[BSP]] and [[Worldcraft]].</text>
      <sha1>shkvw14mxn768aqzfs3b09vs37djsb0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2353</id>
      <parentid>2350</parentid>
      <timestamp>2013-03-27T14:59:55Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <minor/>
      <comment>grammar fix 'could not be used compiled and used', instead simply 'could not be compiled and used'</comment>
      <text xml:space="preserve" bytes="690">[[File:quakeed_screen_1.png|thumb|right|QuakeEd running on a NeXTSTEP workstation]]

'''QuakeEd''' is the original Quake level editor used by [[id Software]] to create the levels for Quake. It was developed in Objective-C for the (at the time) powerful NeXTSTEP workstation computers that id were using to build and [[compile]] the levels with. The code for QuakeEd was released shortly after the release of the game, but could not be compiled and used directly because players were highly unlikely to possess a NeXT workstation. However, the release of the code almost certainly helped the development of other early Quake editors, such as [[Thred]], [[Qoole]], [[BSP]] and [[Worldcraft]].</text>
      <sha1>9o6iwfnlenyzoh0w49oiqqkglnue6ro</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2354</id>
      <parentid>2353</parentid>
      <timestamp>2013-03-27T15:13:42Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>added some external links</comment>
      <text xml:space="preserve" bytes="906">[[File:quakeed_screen_1.png|thumb|right|QuakeEd running on a NeXTSTEP workstation]]

'''QuakeEd''' is the original Quake level editor used by [[id Software]] to create the levels for Quake. It was developed in Objective-C for the (at the time) powerful NeXTSTEP workstation computers that id were using to build and [[compile]] the levels with. The code for QuakeEd was released shortly after the release of the game, but could not be compiled and used directly because players were highly unlikely to possess a NeXT workstation. However, the release of the code almost certainly helped the development of other early Quake editors, such as [[Thred]], [[Qoole]], [[BSP]] and [[Worldcraft]].

==External Links==
* [http://www.gamers.org/dEngine/quake/QuakeEd/source.html QuakeEd information page]
* [http://planetromero.com/tag/quakeed A few blog posts by [[John Romero]] about QuakeEd and Quake development</text>
      <sha1>j2ua67f5hdba1r3zf2deqsk7h2day0w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2355</id>
      <parentid>2354</parentid>
      <timestamp>2013-03-27T15:15:11Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>fixed link</comment>
      <text xml:space="preserve" bytes="861">[[File:quakeed_screen_1.png|thumb|right|QuakeEd running on a NeXTSTEP workstation]]

'''QuakeEd''' is the original Quake level editor used by [[id Software]] to create the levels for Quake. It was developed in Objective-C for the (at the time) powerful NeXTSTEP workstation computers that id were using to build and [[compile]] the levels with. The code for QuakeEd was released shortly after the release of the game, but could not be compiled and used directly because players were highly unlikely to possess a NeXT workstation. However, the release of the code almost certainly helped the development of other early Quake editors, such as [[Thred]], [[Qoole]], [[BSP]] and [[Worldcraft]].

==External Links==
* [http://www.gamers.org/dEngine/quake/QuakeEd/source.html QuakeEd information page]
* [http://planetromero.com/tag/quakeed Planet Romero QuakeEd tag]</text>
      <sha1>1qw40jsa51qwpxyi250dpiid2bhtsmo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QuakeSpasm</title>
    <ns>0</ns>
    <id>986</id>
    <revision>
      <id>2750</id>
      <timestamp>2013-04-03T10:35:11Z</timestamp>
      <contributor>
        <username>SleepwalkR</username>
        <id>37</id>
      </contributor>
      <comment>Initial page</comment>
      <text xml:space="preserve" bytes="550">{{Infobox Engine
|name=QuakeSpasm
|based-on=[[Fitzquake]]
|author=Ozkan Sezer et al.
|first-release=Feb 20 2010
|newest-release=[http://quakespasm.sourceforge.net/download.htm Oct 7 2012]
|website=[http://quakespasm.sourceforge.net/ quakespasm.sourceforge.net]
}}

'''QuakeSpasm''' is a cross-platform Quake engine based on the SDL port of [[Fitzquake]]. The main focus is on portability, bug fixes and improvements without breaking backwards compatibility.

Binaries for Windows, Linux and Mac OS X are provided.

{{Engines}}
{{GL NetQuake Engines}}</text>
      <sha1>hoddlnpt9lyczgo3hi7my99t1z3mdnk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>QuakeWorld</title>
    <ns>0</ns>
    <id>453</id>
    <revision>
      <id>799</id>
      <timestamp>2008-05-09T17:25:26Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: QuakeWorld is an update to id Software's seminal multiplayer [[deathmatch]] game, Quake, that enhances the game's multiplayer features (namely TCP/IP support) to allow people with dial-up ...</comment>
      <text xml:space="preserve" bytes="546">QuakeWorld is an update to id Software's seminal multiplayer [[deathmatch]] game, Quake, that enhances the game's multiplayer features (namely TCP/IP support) to allow people with dial-up modems to achieve greatly improved responsiveness when playing on Internet game servers. Modern broadband connections such as cable and DSL also benefit greatly from the improved network handling and game physics. Official id Software development stopped with the test release of QuakeWorld 2.33 in December 21, 1998. Latest official stable release was 2.30.</text>
      <sha1>h6krmcf1st1zl8g92m6hffwwfwlmcbr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1062</id>
      <parentid>799</parentid>
      <timestamp>2009-07-09T09:15:39Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>rewrote the article and added much info; none of the original info was lost.</comment>
      <text xml:space="preserve" bytes="3059">'''QuakeWorld''' is an alternative, official but unsupported Quake engine which id Software released in order to make multiplayer games of Quake more playable over the Internet. Its networking code was rewritten, the in-game physics is slightly different, and there are various improvements in the client.

''QuakeWorld'' is also an informal name for multiplayer Quake games played with the QuakeWorld networking code. This term is used in contrast to ''[[NetQuake]]'', which is an informal name for the original Quake engine, or for Quake games played with the same networking code as in the original engine.

Some people prefer to think of QuakeWorld as an entirely separate game from Quake/NetQuake.

==Comparison to NetQuake==
The main enhancement offered by QuakeWorld over NetQuake is completely overhauled TCP/IP support. When QuakeWorld was introduced, it allowed people with dial-up modems to achieve greatly improved responsiveness when playing on servers on the Internet. Modern broadband connections such as cable and DSL also benefit greatly from the improved network handling and game physics.

The original QuakeWorld releases split the client and server into separate programs. Players would only get the client and would use it to connect to a server on some other machine, usually one elsewhere on the Internet.

==Compatibility==
An engine will generally either have NetQuake code or QuakeWorld code, not both.

Quake (NetQuake) clients aren't compatible with QuakeWorld servers, and QuakeWorld clients are compatible with ordinary Quake (NetQuake) servers.

Virtually all multiplayer Quake games on the Internet are QuakeWorld games. So if you want to play online, you need to get a QuakeWorld-compatible engine.

==Releases==
&quot;Official&quot; releases are those distributed by id Software in 1997-1998, for the following platforms:
* 32-bit Windows (at the time, 95/98/NT4, but any Win32 OS will work)
* Linux i386 libc5 (RedHat 4.x, Slackware, et al.)
* Linux i386 glibc (libc6) (RedHat 5.x, et al.)
* Linux Alpha glibc (libc6) (RedHat 5.x, et al.)

The last versions were the following:
* QuakeWorld 2.30, the last official stable release (August 28, 1998), consisting of clients and servers for all supported platforms.
* QuakeWorld 2.33-0005 test release (December 21, 1998), a Win32-only client and server which addressed denial-of-service vulnerabilities, fixed a few minor bugs, and made some minor enhancements.

Official development stopped after the 2.33-0005 test release.

==GLQuakeWorld==
The official QuakeWorld clients were released with two executables. One used software rendering, the other used OpenGL. The latter is GLQuakeWorld.

==Single-player support==
The official versions of QuakeWorld don't support single-player games, but some of the unofficial engines do.

==More info==
* The [http://en.wikipedia.org/wiki/QuakeWorld Wikipedia article on QuakeWorld] goes into much more detail about QuakeWorld.
* The [http://www.quakeworld.net/ QuakeWorld.net] site is the official distribution, news &amp; info site for QuakeWorld.</text>
      <sha1>gwbmavw080rhgaco8j8z2bf0zdz8nzr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1063</id>
      <parentid>1062</parentid>
      <timestamp>2009-07-09T09:16:23Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <minor/>
      <comment>/* Single-player support */ clarification</comment>
      <text xml:space="preserve" bytes="3111">'''QuakeWorld''' is an alternative, official but unsupported Quake engine which id Software released in order to make multiplayer games of Quake more playable over the Internet. Its networking code was rewritten, the in-game physics is slightly different, and there are various improvements in the client.

''QuakeWorld'' is also an informal name for multiplayer Quake games played with the QuakeWorld networking code. This term is used in contrast to ''[[NetQuake]]'', which is an informal name for the original Quake engine, or for Quake games played with the same networking code as in the original engine.

Some people prefer to think of QuakeWorld as an entirely separate game from Quake/NetQuake.

==Comparison to NetQuake==
The main enhancement offered by QuakeWorld over NetQuake is completely overhauled TCP/IP support. When QuakeWorld was introduced, it allowed people with dial-up modems to achieve greatly improved responsiveness when playing on servers on the Internet. Modern broadband connections such as cable and DSL also benefit greatly from the improved network handling and game physics.

The original QuakeWorld releases split the client and server into separate programs. Players would only get the client and would use it to connect to a server on some other machine, usually one elsewhere on the Internet.

==Compatibility==
An engine will generally either have NetQuake code or QuakeWorld code, not both.

Quake (NetQuake) clients aren't compatible with QuakeWorld servers, and QuakeWorld clients are compatible with ordinary Quake (NetQuake) servers.

Virtually all multiplayer Quake games on the Internet are QuakeWorld games. So if you want to play online, you need to get a QuakeWorld-compatible engine.

==Releases==
&quot;Official&quot; releases are those distributed by id Software in 1997-1998, for the following platforms:
* 32-bit Windows (at the time, 95/98/NT4, but any Win32 OS will work)
* Linux i386 libc5 (RedHat 4.x, Slackware, et al.)
* Linux i386 glibc (libc6) (RedHat 5.x, et al.)
* Linux Alpha glibc (libc6) (RedHat 5.x, et al.)

The last versions were the following:
* QuakeWorld 2.30, the last official stable release (August 28, 1998), consisting of clients and servers for all supported platforms.
* QuakeWorld 2.33-0005 test release (December 21, 1998), a Win32-only client and server which addressed denial-of-service vulnerabilities, fixed a few minor bugs, and made some minor enhancements.

Official development stopped after the 2.33-0005 test release.

==GLQuakeWorld==
The official QuakeWorld clients were released with two executables. One used software rendering, the other used OpenGL. The latter is GLQuakeWorld.

==Single-player support==
Since the client and server were separate programs, the official versions of QuakeWorld don't support single-player games, but some of the unofficial engines do.

==More info==
* The [http://en.wikipedia.org/wiki/QuakeWorld Wikipedia article on QuakeWorld] goes into much more detail about QuakeWorld.
* The [http://www.quakeworld.net/ QuakeWorld.net] site is the official distribution, news &amp; info site for QuakeWorld.</text>
      <sha1>g07ivprsr458o3jzxca36vf8s2kkx9h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1089</id>
      <parentid>1063</parentid>
      <timestamp>2009-07-12T07:09:22Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>/* Releases */ +more platforms from quakeworld.net</comment>
      <text xml:space="preserve" bytes="3150">'''QuakeWorld''' is an alternative, official but unsupported Quake engine which id Software released in order to make multiplayer games of Quake more playable over the Internet. Its networking code was rewritten, the in-game physics is slightly different, and there are various improvements in the client.

''QuakeWorld'' is also an informal name for multiplayer Quake games played with the QuakeWorld networking code. This term is used in contrast to ''[[NetQuake]]'', which is an informal name for the original Quake engine, or for Quake games played with the same networking code as in the original engine.

Some people prefer to think of QuakeWorld as an entirely separate game from Quake/NetQuake.

==Comparison to NetQuake==
The main enhancement offered by QuakeWorld over NetQuake is completely overhauled TCP/IP support. When QuakeWorld was introduced, it allowed people with dial-up modems to achieve greatly improved responsiveness when playing on servers on the Internet. Modern broadband connections such as cable and DSL also benefit greatly from the improved network handling and game physics.

The original QuakeWorld releases split the client and server into separate programs. Players would only get the client and would use it to connect to a server on some other machine, usually one elsewhere on the Internet.

==Compatibility==
An engine will generally either have NetQuake code or QuakeWorld code, not both.

Quake (NetQuake) clients aren't compatible with QuakeWorld servers, and QuakeWorld clients are compatible with ordinary Quake (NetQuake) servers.

Virtually all multiplayer Quake games on the Internet are QuakeWorld games. So if you want to play online, you need to get a QuakeWorld-compatible engine.

==Releases==
&quot;Official&quot; releases are those distributed by id Software in 1997-1998, for the following platforms:
* 32-bit Windows (at the time, 95/98/NT4, but any Win32 OS will work)
* Linux 2.0 i386 libc5 (RedHat 4.x, Slackware, et al.)
* Linux 2.0 i386 glibc (libc6) (RedHat 5.x, et al.)
* Linux 2.0 Alpha glibc (libc6) (RedHat 5.x, et al.)
* BSDI 3.0
* Solaris 2.5.1

The last versions were the following:
* QuakeWorld 2.30, the last official stable release (August 28, 1998), consisting of clients and servers for all supported platforms.
* QuakeWorld 2.33-0005 test release (December 21, 1998), a Win32-only client and server which addressed denial-of-service vulnerabilities, fixed a few minor bugs, and made some minor enhancements.

Official development stopped after the 2.33-0005 test release.

==GLQuakeWorld==
The official QuakeWorld clients were released with two executables. One used software rendering, the other used OpenGL. The latter is GLQuakeWorld.

==Single-player support==
Since the client and server were separate programs, the official versions of QuakeWorld don't support single-player games, but some of the unofficial engines do.

==More info==
* The [http://en.wikipedia.org/wiki/QuakeWorld Wikipedia article on QuakeWorld] goes into much more detail about QuakeWorld.
* The [http://www.quakeworld.net/ QuakeWorld.net] site is the official distribution, news &amp; info site for QuakeWorld.</text>
      <sha1>aw4bmqst92g7vp7tubatwta1o6ebh7v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1091</id>
      <parentid>1089</parentid>
      <timestamp>2009-07-15T06:56:11Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <minor/>
      <comment>mention GLQuakeWorld in the intro</comment>
      <text xml:space="preserve" bytes="3186">'''QuakeWorld''' and its companion '''GLQuakeWorld''' are alternative, official but unsupported Quake engines which id Software released in order to make multiplayer games of Quake more playable over the Internet. Its networking code was rewritten, the in-game physics is slightly different, and there are various improvements in the client.

''QuakeWorld'' is also an informal name for multiplayer Quake games played with the QuakeWorld networking code. This term is used in contrast to ''[[NetQuake]]'', which is an informal name for the original Quake engine, or for Quake games played with the same networking code as in the original engine.

Some people prefer to think of QuakeWorld as an entirely separate game from Quake/NetQuake.

==Comparison to NetQuake==
The main enhancement offered by QuakeWorld over NetQuake is completely overhauled TCP/IP support. When QuakeWorld was introduced, it allowed people with dial-up modems to achieve greatly improved responsiveness when playing on servers on the Internet. Modern broadband connections such as cable and DSL also benefit greatly from the improved network handling and game physics.

The original QuakeWorld releases split the client and server into separate programs. Players would only get the client and would use it to connect to a server on some other machine, usually one elsewhere on the Internet.

==Compatibility==
An engine will generally either have NetQuake code or QuakeWorld code, not both.

Quake (NetQuake) clients aren't compatible with QuakeWorld servers, and QuakeWorld clients are compatible with ordinary Quake (NetQuake) servers.

Virtually all multiplayer Quake games on the Internet are QuakeWorld games. So if you want to play online, you need to get a QuakeWorld-compatible engine.

==Releases==
&quot;Official&quot; releases are those distributed by id Software in 1997-1998, for the following platforms:
* 32-bit Windows (at the time, 95/98/NT4, but any Win32 OS will work)
* Linux 2.0 i386 libc5 (RedHat 4.x, Slackware, et al.)
* Linux 2.0 i386 glibc (libc6) (RedHat 5.x, et al.)
* Linux 2.0 Alpha glibc (libc6) (RedHat 5.x, et al.)
* BSDI 3.0
* Solaris 2.5.1

The last versions were the following:
* QuakeWorld 2.30, the last official stable release (August 28, 1998), consisting of clients and servers for all supported platforms.
* QuakeWorld 2.33-0005 test release (December 21, 1998), a Win32-only client and server which addressed denial-of-service vulnerabilities, fixed a few minor bugs, and made some minor enhancements.

Official development stopped after the 2.33-0005 test release.

==GLQuakeWorld==
The official QuakeWorld clients were released with two executables. One used software rendering, the other used OpenGL. The latter is GLQuakeWorld.

==Single-player support==
Since the client and server were separate programs, the official versions of QuakeWorld don't support single-player games, but some of the unofficial engines do.

==More info==
* The [http://en.wikipedia.org/wiki/QuakeWorld Wikipedia article on QuakeWorld] goes into much more detail about QuakeWorld.
* The [http://www.quakeworld.net/ QuakeWorld.net] site is the official distribution, news &amp; info site for QuakeWorld.</text>
      <sha1>8gduh6qbrd8syg37ccc9u2s4pg9a64n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quakeguy</title>
    <ns>0</ns>
    <id>774</id>
    <revision>
      <id>2247</id>
      <timestamp>2013-03-26T14:23:14Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Created page with &quot;[[File:Quakeguy.png|center]]&quot;</comment>
      <text xml:space="preserve" bytes="28">[[File:Quakeguy.png|center]]</text>
      <sha1>e29gbcwzgmc7kd2nl97p4ywc26szy4b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2250</id>
      <parentid>2247</parentid>
      <timestamp>2013-03-26T14:33:33Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="113">[[File:Quakeguy.png|center]]

&lt;div style=&quot;text-align: center;&quot;&gt;
=='''[[Nehahra|I got issues! ISSUES!]]'''==
&lt;div&gt;</text>
      <sha1>m0jj3nt8ik705bmsq0ud0xug7td82zx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2251</id>
      <parentid>2250</parentid>
      <timestamp>2013-03-26T14:34:01Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="109">[[File:Quakeguy.png|center]]

&lt;div style=&quot;text-align: center;&quot;&gt;
'''[[Nehahra|I got issues! ISSUES!]]'''
&lt;div&gt;</text>
      <sha1>mvivqii9yo3z1ktm7q9yvlan0pqlpcv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quore</title>
    <ns>0</ns>
    <id>530</id>
    <revision>
      <id>1264</id>
      <timestamp>2009-09-25T11:17:13Z</timestamp>
      <contributor>
        <ip>193.49.97.126</ip>
      </contributor>
      <comment>New page: {{Infobox Engine |name=Quore |based-on=[[JoeQuake]] |author=[[lxndr]] |first-release=[http://quore.free.fr/quore-0.2.4.tgz here] |newest-release=[http://quore.free.fr/quore-0.3.0.tgz here]...</comment>
      <text xml:space="preserve" bytes="458">{{Infobox Engine
|name=Quore
|based-on=[[JoeQuake]]
|author=[[lxndr]]
|first-release=[http://quore.free.fr/quore-0.2.4.tgz here]
|newest-release=[http://quore.free.fr/quore-0.3.0.tgz here]
|website=[http://quore.free.fr/ here]
}}

An atmospheric Quake engine running on GNU/Linux systems with enhanced graphics, increased limits, configurable HUD and ambiances, different modes for changing game behaviors. More suitable for single player and immersive maps.</text>
      <sha1>e6n0jyig1l7077gkb951xsg1sse0o8t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1265</id>
      <parentid>1264</parentid>
      <timestamp>2009-09-25T11:21:38Z</timestamp>
      <contributor>
        <ip>193.49.97.126</ip>
      </contributor>
      <text xml:space="preserve" bytes="472">{{Infobox Engine
|name=Quore
|based-on=[[JoeQuake]]
|author=[[lxndr]]
|first-release=[http://quore.free.fr/quore-0.2.4.tgz Feb 01 2009]
|newest-release=[http://quore.free.fr/quore-0.3.0.tgz Jun 22 2009]
|website=[http://quore.free.fr/ here]
}}

An atmospheric Quake engine running on GNU/Linux systems with enhanced graphics, increased limits, configurable HUD and ambiances, different modes for changing game behaviors. More suitable for single player and immersive maps.</text>
      <sha1>5yi8gllns1cx3xxocy8ys40dgtckjzu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1266</id>
      <parentid>1265</parentid>
      <timestamp>2009-09-25T11:50:37Z</timestamp>
      <contributor>
        <ip>193.49.97.126</ip>
      </contributor>
      <text xml:space="preserve" bytes="474">{{Infobox Engine
|name=Quore
|based-on=[[JoeQuake]]
|author=[[lxndr]]
|first-release=[http://quore.free.fr/quore-0.2.4.tgz Feb 01 2009]
|newest-release=[http://quore.free.fr/quore-0.3.0.tgz Jun 22 2009]
|website=[http://quore.free.fr/ here]
}}

An atmospheric Quake engine running on GNU/Linux systems with enhanced graphics, increased limits, configurable HUD and ambiances, and different modes for changing the gameplay.

More suitable for singleplayer and immersive maps.</text>
      <sha1>9pmujeu9husfzhtqdlvm8qqu1bgl5sb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1331</id>
      <parentid>1266</parentid>
      <timestamp>2009-09-29T09:13:15Z</timestamp>
      <contributor>
        <ip>193.49.97.126</ip>
      </contributor>
      <text xml:space="preserve" bytes="511">{{Infobox Engine
|name=Quore
|based-on=[[JoeQuake]]
|author=[[lxndr]]
|first-release=[http://quore.free.fr/quore-0.2.4.tgz Feb 01 2009]
|newest-release=[http://quore.free.fr/quore-0.3.0.tgz Jun 22 2009]
|website=[http://quore.free.fr/ here]
}}

An atmospheric Quake engine running on GNU/Linux systems with enhanced graphics, increased limits, configurable HUD and ambiances, and different modes for changing the gameplay.

More suitable for singleplayer and immersive maps.

{{Engines}}
{{GL NetQuake Engines}}</text>
      <sha1>goy19t4gjohne44pbo97rvq5y01yak4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1332</id>
      <parentid>1331</parentid>
      <timestamp>2009-09-29T09:17:52Z</timestamp>
      <contributor>
        <ip>193.49.97.126</ip>
      </contributor>
      <text xml:space="preserve" bytes="520">{{Infobox Engine
|name=Quore
|based-on=[[JoeQuake]]
|author=[[lxndr]]
|first-release=[http://quore.free.fr/quore-0.2.4.tgz Feb 01 2009]
|newest-release=[http://quore.free.fr/quore-0.3.0.tgz Jun 22 2009]
|website=[http://quore.free.fr/ quore.free.fr]
}}

An atmospheric Quake engine running on GNU/Linux systems with enhanced graphics, increased limits, configurable HUD and ambiances, and different modes for changing the gameplay.

More suitable for singleplayer and immersive maps.

{{Engines}}
{{GL NetQuake Engines}}</text>
      <sha1>bq7wqv8sbqom0hge1o0c9lmox7ml2jx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Quotes</title>
    <ns>0</ns>
    <id>806</id>
    <revision>
      <id>2370</id>
      <timestamp>2013-03-28T11:48:13Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Created page with &quot;''[Dhacked] clearly showed that people were interested in more control, so it probably argued for the greater freedom given with quake.'' John Carmack, October 1999. &lt;ref&gt;http...&quot;</comment>
      <text xml:space="preserve" bytes="275">''[Dhacked] clearly showed that people were interested in more control, so it probably argued for the greater freedom given with quake.'' John Carmack, October 1999. &lt;ref&gt;http://slashdot.org/story/99/10/15/1012230/john-carmack-answers&lt;/ref&gt;



== References ==
&lt;references /&gt;</text>
      <sha1>i17xzi0ncr0qthb9pp6xgg4c33cevy0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2371</id>
      <parentid>2370</parentid>
      <timestamp>2013-03-28T12:29:23Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <text xml:space="preserve" bytes="527">''[Dhacked] clearly showed that people were interested in more control, so it probably argued for the greater freedom given with quake.'' John Carmack, October 1999. &lt;ref&gt;http://slashdot.org/story/99/10/15/1012230/john-carmack-answers&lt;/ref&gt;

''(...) I doubt there would have been so much direct Lovecraft influence if I had not been working here.'' Sandy Petersen, some time before Quake's release. &lt;ref&gt;http://web.archive.org/web/19970804050532/http://www.planetquake.com/qref/sandy.html&lt;/ref&gt;

== References ==
&lt;references /&gt;</text>
      <sha1>6xfvbhchmdp1kzkmy4zf7416mfrtrau</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>R aliastransadj</title>
    <ns>0</ns>
    <id>96</id>
    <revision>
      <id>162</id>
      <timestamp>2007-10-30T23:47:33Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=r_aliastransadj |default-value=100 |saved-to-config=no }} Versions: Software engines  This variable effects how entities are clipp...</comment>
      <text xml:space="preserve" bytes="297">{{lowercase-underscores}}{{Infobox Console variable
|name=r_aliastransadj
|default-value=100
|saved-to-config=no
}}
Versions: Software engines

This variable effects how entities are clipped/scaled to adjust for varying screen aspect ratios (?). Visual effect is negligible.

{{Console variables}}</text>
      <sha1>8efk7fum44c3utwvjzzuooz0oxjtcx6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>R aliastransbase</title>
    <ns>0</ns>
    <id>97</id>
    <revision>
      <id>163</id>
      <timestamp>2007-10-30T23:48:22Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=r_aliastransbase |default-value=200 |saved-to-config=no }} Versions: Software engines  This variable effects how entities are clip...</comment>
      <text xml:space="preserve" bytes="298">{{lowercase-underscores}}{{Infobox Console variable
|name=r_aliastransbase
|default-value=200
|saved-to-config=no
}}
Versions: Software engines

This variable effects how entities are clipped/scaled to adjust for varying screen aspect ratios (?). Visual effect is negligible.

{{Console variables}}</text>
      <sha1>h1hkvj9prwl5xgiw67t2v4eqkhfcvjf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>R drawviewmodel</title>
    <ns>0</ns>
    <id>912</id>
    <redirect title="r drawviewmodel" />
    <revision>
      <id>2591</id>
      <timestamp>2013-03-29T14:22:16Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[R drawviewmodel]] to [[r drawviewmodel]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="29">#REDIRECT [[r drawviewmodel]]</text>
      <sha1>sk5frehun1ahajpsbt4jjl44mlnrlfp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>R fullbright</title>
    <ns>0</ns>
    <id>913</id>
    <redirect title="r fullbright" />
    <revision>
      <id>2593</id>
      <timestamp>2013-03-29T14:22:16Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[R fullbright]] to [[r fullbright]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="26">#REDIRECT [[r fullbright]]</text>
      <sha1>n6eb9cwe089g5gjzygs9cyz545ff9gt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>RESOURCE.1</title>
    <ns>0</ns>
    <id>511</id>
    <redirect title="Resource.1" />
    <revision>
      <id>1101</id>
      <timestamp>2009-07-20T02:26:24Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>redirect capitalization variation</comment>
      <text xml:space="preserve" bytes="24">#REDIRECT [[Resource.1]]</text>
      <sha1>5ptyd5jjjzzoqwhy481l5zttdvqeaqi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Random</title>
    <ns>0</ns>
    <id>190</id>
    <revision>
      <id>366</id>
      <timestamp>2008-02-22T19:20:34Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  float '''random'''()  Returns a random floating point number between 0.0 and 1.0.</comment>
      <text xml:space="preserve" bytes="82"> float '''random'''()

Returns a random floating point number between 0.0 and 1.0.</text>
      <sha1>ntk6k9v1ihj6k61tetuliko10m7odge</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Red Armor</title>
    <ns>0</ns>
    <id>414</id>
    <revision>
      <id>701</id>
      <timestamp>2008-05-07T19:57:31Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: This is the best armor in the game. It absorbs about 4/5 of the damage you receive. You get 200 points of red armor, but they will disappear fairly quickly.</comment>
      <text xml:space="preserve" bytes="156">This is the best armor in the game. It absorbs about 4/5 of the damage you receive. You get 200 points of red armor, but they will disappear fairly quickly.</text>
      <sha1>5b1w5gk1f15nq3n6x5no8uhfe8vp8c5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>889</id>
      <parentid>701</parentid>
      <timestamp>2008-06-18T21:53:21Z</timestamp>
      <contributor>
        <ip>65.66.150.198</ip>
      </contributor>
      <text xml:space="preserve" bytes="173">This is the best armor in the game. It absorbs about 4/5 of the damage you receive. You get 200 points of red armor, but they will disappear fairly quickly.

{{Quake items}}</text>
      <sha1>7doibfbq3te39fvelowjhy9fba04e9l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Registercvar</title>
    <ns>0</ns>
    <id>914</id>
    <redirect title="registercvar" />
    <revision>
      <id>2595</id>
      <timestamp>2013-03-29T14:22:16Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Registercvar]] to [[registercvar]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="26">#REDIRECT [[registercvar]]</text>
      <sha1>4f1awhk1usbyhd7xd3tccfpj05ui5nd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Remove</title>
    <ns>0</ns>
    <id>201</id>
    <revision>
      <id>378</id>
      <timestamp>2008-02-22T19:50:34Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  void '''remove'''(entity ''e'')  Removes entity ''e'' from the world.</comment>
      <text xml:space="preserve" bytes="70"> void '''remove'''(entity ''e'')

Removes entity ''e'' from the world.</text>
      <sha1>deutooxzbvp2o0oz2bce942uhip1ate</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Resource.1</title>
    <ns>0</ns>
    <id>510</id>
    <revision>
      <id>1100</id>
      <timestamp>2009-07-20T02:25:26Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>new article about this archive</comment>
      <text xml:space="preserve" bytes="1186">'''''Resource.1''''' is a generic name usually given to the first or only part of a multi-part LZH-encoded archive (that is, an LHA file), which is similar to a ZIP or RAR archive. In relation to Quake, a ''Resource.1'' file comes inside ''quake106.zip'', the official shareware distribution of Quake 1.06. Inside this ''Resource.1'' are the following files:

*''[[QUAKE.EXE]]'' – the DOS Quake engine.
*''QLAUNCH.EXE'' – a DOS-based launcher for ''QUAKE.EXE'' to enable playing over TCP/IP (this was before [[QuakeWorld]] was an option).
*''Q95.BAT'' – a shell script to help invoke ''QLAUNCH.EXE''.
*''CWSDPMI.EXE'', ''GENVXD.DLL'', ''MGENVXD.VXD'', ''PDIPX.COM'', ''QUAKEUDP.DLL'' – support files required by ''QUAKE.EXE'' for memory management &amp; networking.
*''HELP.TXT'', ''LICINFO.TXT'', ''ORDER.TXT'', ''README.TXT'', ''READV106.TXT'', ''SLICNSE.TXT'', ''TECHINFO.TXT'' – documentation.
*''ID1\[[pak0.pak|PAK0.PAK]]'' – maps, models, programs, sounds, skins required to play Episode 1 or to use any other Quake engine.

These files are compressed with the &quot;-lh5-&quot; algorithm, which was common in 1996 but is something not all LHA/LZH decompressors can handle nowadays.</text>
      <sha1>c6fq7w8ewboswnjt2lh9o0r4a7d4bnz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Ring of Shadows</title>
    <ns>0</ns>
    <id>411</id>
    <revision>
      <id>698</id>
      <timestamp>2008-05-07T19:56:41Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: This handy little device makes you completely invisible except for your eyes. It's really quite entertaining to fight against people who have this ring, because a pair of gaping eyeballs f...</comment>
      <text xml:space="preserve" bytes="519">This handy little device makes you completely invisible except for your eyes. It's really quite entertaining to fight against people who have this ring, because a pair of gaping eyeballs flying through a room firing rockets is one of the funniest things you'll ever see. It gives you the ability to sneak up on people, but you are pretty easy to spot once they notice you're there, so be cautious. If you have a powerful weapon, you can take them out before they really notice you, so it won't be too much of a problem.</text>
      <sha1>5w1mc9986xux3dcu29q9m7r4bgvqttm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>881</id>
      <parentid>698</parentid>
      <timestamp>2008-06-18T21:42:45Z</timestamp>
      <contributor>
        <ip>65.66.150.198</ip>
      </contributor>
      <text xml:space="preserve" bytes="536">This handy little device makes you completely invisible except for your eyes. It's really quite entertaining to fight against people who have this ring, because a pair of gaping eyeballs flying through a room firing rockets is one of the funniest things you'll ever see. It gives you the ability to sneak up on people, but you are pretty easy to spot once they notice you're there, so be cautious. If you have a powerful weapon, you can take them out before they really notice you, so it won't be too much of a problem.

{{Quake items}}</text>
      <sha1>8wxeoisld7ffezkhjve2yu1b0zfp4k2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Rint</title>
    <ns>0</ns>
    <id>915</id>
    <redirect title="rint" />
    <revision>
      <id>2597</id>
      <timestamp>2013-03-29T14:22:16Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Rint]] to [[rint]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="18">#REDIRECT [[rint]]</text>
      <sha1>sufuo8ytmet40yw9jwfkxv7f1bk3lor</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Rocket Launcher</title>
    <ns>0</ns>
    <id>401</id>
    <revision>
      <id>682</id>
      <timestamp>2008-05-07T19:46:50Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: Descr == iption ==  An enormous amount of splash damage combined with a fast firing rate makes this weapon extremely hard to avoid. You can carry around 100 rockets, too. In most online ga...</comment>
      <text xml:space="preserve" bytes="1928">Descr
== iption ==

An enormous amount of splash damage combined with a fast firing rate makes this weapon extremely hard to avoid. You can carry around 100 rockets, too. In most online games someone ends up with the &quot;good pack&quot; that has 100 rockets in it, and everyone lucky enough to pick it up usually stays alive for quite awhile. Once you use the rocket launcher, it's not hard to see why.

When using it, always aim for walls, floors, or anything else that happens to be near a player. The splash damage is enough to kill them. If they are in a hall or something you may want to try the direct approach, but the rockets in Quake 1 travel a little slowly and can be avoided if fired from a safe distance. Speaking of safe distances, I cannot stress this next tip enough: if the player is right next to you and you absolutely must pull the trigger, jump right before you fire the rocket into them. If you fire a rocket right into something while jumping, it hurts less. It may not help much, but when you come out of a battle with 5 health you will be glad you did it.

It's a very tough job to defend yourself against the rocket launcher. Because the rockets deal more than 100 damage, one will be enough to kill you if you have no armor - and that one may come with absolutely no warning. The wide splash range makes them very tough to dodge. Your best bet is to orbit the player, as this makes it very hard for him to aim the traveling rockets. Never run away - he'll just hit you in the back and you won't even see it coming. Stay as close to the player as you can so he will hurt himself if he actually does hit you, and don't stop moving until either he's run out of rockets or he becomes interested in someone else. If you have an equal weapon, try to take him out as soon as possible - but do it carefully.

----
'''Effectiveness:''' Excellent*

'''Avoidability:''' Excellent

(*) Not effective against [[Shamblers]]</text>
      <sha1>8jphlh6izhtofhq4o0kto1zut70w5si</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>683</id>
      <parentid>682</parentid>
      <timestamp>2008-05-07T19:47:06Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>/* iption */</comment>
      <text xml:space="preserve" bytes="1933">Descr
== Description ==

An enormous amount of splash damage combined with a fast firing rate makes this weapon extremely hard to avoid. You can carry around 100 rockets, too. In most online games someone ends up with the &quot;good pack&quot; that has 100 rockets in it, and everyone lucky enough to pick it up usually stays alive for quite awhile. Once you use the rocket launcher, it's not hard to see why.

When using it, always aim for walls, floors, or anything else that happens to be near a player. The splash damage is enough to kill them. If they are in a hall or something you may want to try the direct approach, but the rockets in Quake 1 travel a little slowly and can be avoided if fired from a safe distance. Speaking of safe distances, I cannot stress this next tip enough: if the player is right next to you and you absolutely must pull the trigger, jump right before you fire the rocket into them. If you fire a rocket right into something while jumping, it hurts less. It may not help much, but when you come out of a battle with 5 health you will be glad you did it.

It's a very tough job to defend yourself against the rocket launcher. Because the rockets deal more than 100 damage, one will be enough to kill you if you have no armor - and that one may come with absolutely no warning. The wide splash range makes them very tough to dodge. Your best bet is to orbit the player, as this makes it very hard for him to aim the traveling rockets. Never run away - he'll just hit you in the back and you won't even see it coming. Stay as close to the player as you can so he will hurt himself if he actually does hit you, and don't stop moving until either he's run out of rockets or he becomes interested in someone else. If you have an equal weapon, try to take him out as soon as possible - but do it carefully.

----
'''Effectiveness:''' Excellent*

'''Avoidability:''' Excellent

(*) Not effective against [[Shamblers]]</text>
      <sha1>tnfqi9k7kxpw0kkyp1pepokl6opnlis</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>684</id>
      <parentid>683</parentid>
      <timestamp>2008-05-07T19:47:13Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="1927">== Description ==

An enormous amount of splash damage combined with a fast firing rate makes this weapon extremely hard to avoid. You can carry around 100 rockets, too. In most online games someone ends up with the &quot;good pack&quot; that has 100 rockets in it, and everyone lucky enough to pick it up usually stays alive for quite awhile. Once you use the rocket launcher, it's not hard to see why.

When using it, always aim for walls, floors, or anything else that happens to be near a player. The splash damage is enough to kill them. If they are in a hall or something you may want to try the direct approach, but the rockets in Quake 1 travel a little slowly and can be avoided if fired from a safe distance. Speaking of safe distances, I cannot stress this next tip enough: if the player is right next to you and you absolutely must pull the trigger, jump right before you fire the rocket into them. If you fire a rocket right into something while jumping, it hurts less. It may not help much, but when you come out of a battle with 5 health you will be glad you did it.

It's a very tough job to defend yourself against the rocket launcher. Because the rockets deal more than 100 damage, one will be enough to kill you if you have no armor - and that one may come with absolutely no warning. The wide splash range makes them very tough to dodge. Your best bet is to orbit the player, as this makes it very hard for him to aim the traveling rockets. Never run away - he'll just hit you in the back and you won't even see it coming. Stay as close to the player as you can so he will hurt himself if he actually does hit you, and don't stop moving until either he's run out of rockets or he becomes interested in someone else. If you have an equal weapon, try to take him out as soon as possible - but do it carefully.

----
'''Effectiveness:''' Excellent*

'''Avoidability:''' Excellent

(*) Not effective against [[Shamblers]]</text>
      <sha1>lf55udlpyk93e017t3747z6cjg7qui5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>685</id>
      <parentid>684</parentid>
      <timestamp>2008-05-07T19:47:25Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="1930">== Description ==

An enormous amount of splash damage combined with a fast firing rate makes this weapon extremely hard to avoid. You can carry around 100 rockets, too. In most online games someone ends up with the &quot;good pack&quot; that has 100 rockets in it, and everyone lucky enough to pick it up usually stays alive for quite awhile. Once you use the rocket launcher, it's not hard to see why.

When using it, always aim for walls, floors, or anything else that happens to be near a player. The splash damage is enough to kill them. If they are in a hall or something you may want to try the direct approach, but the rockets in Quake 1 travel a little slowly and can be avoided if fired from a safe distance. Speaking of safe distances, I cannot stress this next tip enough: if the player is right next to you and you absolutely must pull the trigger, jump right before you fire the rocket into them. If you fire a rocket right into something while jumping, it hurts less. It may not help much, but when you come out of a battle with 5 health you will be glad you did it.

It's a very tough job to defend yourself against the rocket launcher. Because the rockets deal more than 100 damage, one will be enough to kill you if you have no armor - and that one may come with absolutely no warning. The wide splash range makes them very tough to dodge. Your best bet is to orbit the player, as this makes it very hard for him to aim the traveling rockets. Never run away - he'll just hit you in the back and you won't even see it coming. Stay as close to the player as you can so he will hurt himself if he actually does hit you, and don't stop moving until either he's run out of rockets or he becomes interested in someone else. If you have an equal weapon, try to take him out as soon as possible - but do it carefully.

----
'''Effectiveness:''' Excellent*

'''Avoidability:''' Excellent

(*) Not effective against the [[Shambler]]</text>
      <sha1>tbcziao7301sehjjyur5v6zlyxz6eup</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>688</id>
      <parentid>685</parentid>
      <timestamp>2008-05-07T19:49:54Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="1932">== Description ==

An enormous amount of splash damage combined with a fast firing rate makes this weapon extremely hard to avoid. You can carry around 100 rockets, too. In most online games someone ends up with the &quot;good pack&quot; that has 100 rockets in it, and everyone lucky enough to pick it up usually stays alive for quite awhile. Once you use the rocket launcher, it's not hard to see why.

When using it, always aim for walls, floors, or anything else that happens to be near a player. The splash damage is enough to kill them. If they are in a hall or something you may want to try the direct approach, but the rockets in Quake 1 travel a little slowly and can be avoided if fired from a safe distance. Speaking of safe distances, I cannot stress this next tip enough: if the player is right next to you and you absolutely must pull the trigger, jump right before you fire the rocket into them. If you fire a rocket right into something while jumping, it hurts less. It may not help much, but when you come out of a battle with 5 health you will be glad you did it.

It's a very tough job to defend yourself against the rocket launcher. Because the rockets deal more than 100 damage, one will be enough to kill you if you have no armor - and that one may come with absolutely no warning. The wide splash range makes them very tough to dodge. Your best bet is to orbit the player, as this makes it very hard for him to aim the traveling rockets. Never run away - he'll just hit you in the back and you won't even see it coming. Stay as close to the player as you can so he will hurt himself if he actually does hit you, and don't stop moving until either he's run out of rockets or he becomes interested in someone else. If you have an equal weapon, try to take him out as soon as possible - but do it carefully.

----
'''Effectiveness:''' Excellent*

'''Avoidability:''' Excellent

* Half as effective against the [[Shambler]]</text>
      <sha1>o3dotto33bvjalhi27237crxhh1v6w0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>689</id>
      <parentid>688</parentid>
      <timestamp>2008-05-07T19:50:02Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="1933">== Description ==

An enormous amount of splash damage combined with a fast firing rate makes this weapon extremely hard to avoid. You can carry around 100 rockets, too. In most online games someone ends up with the &quot;good pack&quot; that has 100 rockets in it, and everyone lucky enough to pick it up usually stays alive for quite awhile. Once you use the rocket launcher, it's not hard to see why.

When using it, always aim for walls, floors, or anything else that happens to be near a player. The splash damage is enough to kill them. If they are in a hall or something you may want to try the direct approach, but the rockets in Quake 1 travel a little slowly and can be avoided if fired from a safe distance. Speaking of safe distances, I cannot stress this next tip enough: if the player is right next to you and you absolutely must pull the trigger, jump right before you fire the rocket into them. If you fire a rocket right into something while jumping, it hurts less. It may not help much, but when you come out of a battle with 5 health you will be glad you did it.

It's a very tough job to defend yourself against the rocket launcher. Because the rockets deal more than 100 damage, one will be enough to kill you if you have no armor - and that one may come with absolutely no warning. The wide splash range makes them very tough to dodge. Your best bet is to orbit the player, as this makes it very hard for him to aim the traveling rockets. Never run away - he'll just hit you in the back and you won't even see it coming. Stay as close to the player as you can so he will hurt himself if he actually does hit you, and don't stop moving until either he's run out of rockets or he becomes interested in someone else. If you have an equal weapon, try to take him out as soon as possible - but do it carefully.

----
'''Effectiveness:''' Excellent*

'''Avoidability:''' Excellent

 * Half as effective against the [[Shambler]]</text>
      <sha1>bgllhvs2530jl3zlzy19gsbkny9lby6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>995</id>
      <parentid>689</parentid>
      <timestamp>2009-05-22T08:58:24Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>as the current weapon descriptions were taken from http://euroquake.webs.com/guides2.htm i am getting the old ones from archive.org</comment>
      <text xml:space="preserve" bytes="692">{{Infobox Weapon
|weapon=Rocket Launcher
|ammotype=[[Rockets]]
|ammousage=1 per shot
|shottype=rocket
|dpshot=100+(1-20) directly, up to 120 splash damage
|dpsecond=150
|range=5000 units
|cycletime=0.8s
}}

Rocket Launcher is similar to the [[Grenade Launcher]] however instead of lobbing grenades it shoots rockets straight forward at high velocities and they explode on contact, this is the most used weapon of Quake. You can also perform a rocket jump by aiming down while firing and jumping at the same time.

''&quot;The Rocket Launcher - when a grenade absolutely, positively must be there on time.&quot;''

The [[Shambler]] takes half damage from the rocket launcher.

==See Also==
* [[Weapons]]</text>
      <sha1>df1ybouqc0b7pzotmbjwpun00qb4obe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1312</id>
      <parentid>995</parentid>
      <timestamp>2009-09-27T18:36:16Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="677">{{Infobox Weapon
|weapon=Rocket Launcher
|ammotype=[[Rockets]]
|ammousage=1 per shot
|shottype=rocket
|dpshot=100+(1-20) directly, up to 120 splash damage
|dpsecond=150
|range=5000 units
|cycletime=0.8s
}}

Rocket Launcher is similar to the [[Grenade Launcher]] however instead of lobbing grenades it shoots rockets straight forward at high velocities and they explode on contact, this is the most used weapon of Quake. You can also perform a rocket jump by aiming down while firing and jumping at the same time.

''&quot;The Rocket Launcher - when a grenade absolutely, positively must be there on time.&quot;''

The [[Shambler]] takes half damage from the rocket launcher.

{{Weapons}}</text>
      <sha1>pfs6a32afj55spripshidal09z4t1qv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3047</id>
      <parentid>1312</parentid>
      <timestamp>2013-12-18T01:55:28Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <text xml:space="preserve" bytes="1029">{{Infobox Weapon
|weapon=Rocket Launcher
|image_w=weapon_rocketlauncher.png
|image_v=v_rocketlauncher.png
|manualtext=For when a grenade positively, absolutely, has to be there on time.
|ammotype=[[Rockets]]
|ammousage=1 per shot
|shottype=[[Projectile]]
|dpshot=100 + (1-20) direct hit, up to 120 [[splash damage]]
|dpsecond=150
|range=5000 [[unit]]s
|cycletime=0.8s
|1stappearance = [[E1M8]] (secret level), [[E1M5]]
|obituary1=(Target) rides (attacker)'s rocket.
|obituary2=(Attacker) rips (target) a new one.
|obituary3=(Target) was brutalized/smeared by (attacker)'s quad rocket.
|obituary4=(Target) becomes bored with life.
}}

The '''Rocket Launcher''' is similar to the [[Grenade Launcher]], however instead of lobbing grenades it shoots rockets straight forward at high velocities and they explode on contact. This is the most used weapon of Quake. You can also perform a [[rocket jump]] by aiming down while firing and jumping at the same time.

The [[Shambler]] takes half damage from the rocket launcher.

{{Weapons}}</text>
      <sha1>ishpmc0cngrrkpsjn2wnmyngo3fbwcd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Rotfish</title>
    <ns>0</ns>
    <id>137</id>
    <revision>
      <id>219</id>
      <timestamp>2007-11-02T19:37:24Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: Disgusting little critters who dish it out, but can't take it.  * '''Weapon:''' Teeth * '''Health:''' 25 * '''Treasure:''' Nothing  '''Tips:''' Basically an underwater [[Rottweiler]]. They...</comment>
      <text xml:space="preserve" bytes="417">Disgusting little critters who dish it out, but can't take it.

* '''Weapon:''' Teeth
* '''Health:''' 25
* '''Treasure:''' Nothing

'''Tips:''' Basically an underwater [[Rottweiler]]. They can bite, but you won't be feeling it much. Take them down with a nice smack from your [[Double-Barrelled Shotgun]].

'''Entity name:''' [[monster_fish]]

[http://frikqcc.quakesrc.org/files/fish.gif]

==See Also==
* [[Monsters]]</text>
      <sha1>6agqly07tbqwqcqwxj9lnssd9g097vj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>264</id>
      <parentid>219</parentid>
      <timestamp>2007-11-05T21:59:54Z</timestamp>
      <contributor>
        <ip>151.141.78.60</ip>
      </contributor>
      <text xml:space="preserve" bytes="419">Disgusting little critters who dish it out, but can't take it.

* '''Weapon:''' Teeth
* '''Health:''' 25
* '''Treasure:''' Nothing

'''Tips:''' If they are even a concern, let them get moderately close and let loose with a shot from the [[Double-Barrelled Shotgun]], that will take care of them most likely.

'''Entity name:''' [[monster_fish]]

[http://frikqcc.quakesrc.org/files/fish.gif]

==See Also==
* [[Monsters]]</text>
      <sha1>kk83z9p88pf0ytbksgc13fcexu1ditf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>276</id>
      <parentid>264</parentid>
      <timestamp>2007-11-05T22:16:49Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <text xml:space="preserve" bytes="393">Disgusting little critters who dish it out, but can't take it.

* '''Weapon:''' Teeth
* '''Health:''' 25
* '''Treasure:''' Nothing

'''Tips:''' If they are even a concern, let them get moderately close and kill them with a shot from the [[Double-Barrelled Shotgun]], that will take care of them most likely.

[[Image:fish.gif]]

'''Entity name:''' [[monster_fish]]

==See Also==
* [[Monsters]]</text>
      <sha1>i8u3rfojr2xvvttc6paz606z67hizki</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>733</id>
      <parentid>276</parentid>
      <timestamp>2008-05-07T20:18:23Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="499">Disgusting little critters who dish it out, but can't take it.

* '''Weapon:''' Teeth
* '''Health:''' 25
* '''Treasure:''' Nothing

'''Tips:'''
----
If they are even a concern, let them get moderately close and kill them with a shot from the [[Double-Barrelled Shotgun]], that will take care of them most likely.
*'''Best Weapons:''' Double-Barreled Shotgun
*'''Worst Weapons:''' Grenade Launcher, Rocket Launcher

[[Image:fish.gif]]

'''Entity name:''' [[monster_fish]]

==See Also==
* [[Monsters]]</text>
      <sha1>fwyihulqc5rz9j8rkqvukyr9e0le24d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>844</id>
      <parentid>733</parentid>
      <timestamp>2008-05-17T17:53:42Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="554">{{Infobox Monster
|monstername=Rotfish
|entityname=monster_fish
|monsterhealth=25
|monstermelee=Bite
|monstermissile=n/a
|movetype=
|monsterspeed=
|monsterclass=
}}

[[Image:fish.gif|left]]

If they are even a concern, let them get moderately close and kill them with a shot from the [[Double-Barrelled Shotgun]], that will take care of them most likely.
*'''Best Weapons:''' Double-Barreled Shotgun
*'''Worst Weapons:''' Grenade Launcher, Rocket Launcher

''&quot;Disgusting little critters who dish it out, but can't take it.&quot;''

==See Also==
* [[Monsters]]</text>
      <sha1>05s7vzi3o24umh9vfpwd3n41j2b5jgg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>861</id>
      <parentid>844</parentid>
      <timestamp>2008-05-17T18:52:51Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="575">{{Infobox Monster
|monstername=Rotfish
|entityname=monster_fish
|monsterhealth=25
|monstermelee=Bite
|monstermissile=n/a
|movetype=
|monsterspeed=
|monsterclass=
|monsterdrop=nothing
}}

[[Image:fish.gif|left]]

If they are even a concern, let them get moderately close and kill them with a shot from the [[Double-Barrelled Shotgun]], that will take care of them most likely.
*'''Best Weapons:''' Double-Barreled Shotgun
*'''Worst Weapons:''' Grenade Launcher, Rocket Launcher

''&quot;Disgusting little critters who dish it out, but can't take it.&quot;''

==See Also==
* [[Monsters]]</text>
      <sha1>ovt5euqqybf2o5u25nnonegfjb646m2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>890</id>
      <parentid>861</parentid>
      <timestamp>2008-06-27T23:44:59Z</timestamp>
      <contributor>
        <username>Lord Mrakainus</username>
        <id>13</id>
      </contributor>
      <text xml:space="preserve" bytes="588">{{Infobox Monster
|monstername=Rotfish
|entityname=monster_fish
|monsterhealth=25
|monstermelee=Bite
|monstermissile=n/a
|movetype=
|monsterspeed=
|monsterclass=
|monsterdrop=nothing
}}

[[Image:fish.gif|left]]

If they are even a concern, let them get moderately close and kill them with a shot from the [[Double-Barrelled Shotgun]], that will take care of them most likely.
*'''Best Weapons:''' Double-Barreled Shotgun
*'''Worst Weapons:''' Grenade Launcher, Rocket Launcher, Thunderbolt

''&quot;Disgusting little critters who dish it out, but can't take it.&quot;''

==See Also==
* [[Monsters]]</text>
      <sha1>r2jsfpwznvgvnpdznxnf0d0lynlggzk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>891</id>
      <parentid>890</parentid>
      <timestamp>2008-06-27T23:45:51Z</timestamp>
      <contributor>
        <username>Lord Mrakainus</username>
        <id>13</id>
      </contributor>
      <text xml:space="preserve" bytes="607">{{Infobox Monster
|monstername=Rotfish
|entityname=monster_fish
|monsterhealth=25
|monstermelee=Bite
|monstermissile=n/a
|movetype=
|monsterspeed=
|monsterclass=
|monsterdrop=nothing
}}

[[Image:fish.gif|left]]

If they are even a concern, let them get moderately close and kill them with a shot from the [[Double-Barrelled Shotgun]], that will take care of them most likely.
*'''Best Weapons:''' Double-Barreled Shotgun
*'''Worst Weapons:''' Grenade Launcher, Rocket Launcher, Thunderbolt (while underwater)

''&quot;Disgusting little critters who dish it out, but can't take it.&quot;''

==See Also==
* [[Monsters]]</text>
      <sha1>rzgxeoduazp3mh30933sr4qoqc7m3m8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1246</id>
      <parentid>891</parentid>
      <timestamp>2009-09-25T08:09:01Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="419">{{Infobox Monster
|name=Rotfish
|entity=monster_fish
|model=fish.mdl
|health=25
|attacks=Bite
|drop=nothing
|gameversion=Registered
|
}}
[[Image:fish.gif|left]]
If '''Rotfishes''' are even a concern, let them get moderately close and kill them with a shot from the [[Double-Barrelled Shotgun]], that will take care of them most likely.

''&quot;Disgusting little critters who dish it out, but can't take it.&quot;''

{{Monsters}}</text>
      <sha1>7t2tvjijuuu2xanwgkyp6u8rfs9mk2q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1385</id>
      <parentid>1246</parentid>
      <timestamp>2009-10-08T23:21:59Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="443">{{Infobox Monster
|name=Rotfish
|entity=monster_fish
|model=fish.mdl
|health=25
|attacks=Bite
|drop=nothing
|1stappearance=[[e2m3]]
|gameversion=Registered
|
}}
[[Image:fish.gif|left]]
If '''Rotfishes''' are even a concern, let them get moderately close and kill them with a shot from the [[Double-Barrelled Shotgun]], that will take care of them most likely.

''&quot;Disgusting little critters who dish it out, but can't take it.&quot;''

{{Monsters}}</text>
      <sha1>mh29tswmvbsqqub0cl4x4h7pkf6mjxf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1399</id>
      <parentid>1385</parentid>
      <timestamp>2009-10-08T23:46:57Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="480">{{Infobox Monster
|name=Rotfish
|entity=monster_fish
|model=fish.mdl
|health=25
|attacks=Bite
|drop=nothing
|1stappearance=[[e2m3]]
|gameversion=Registered
|
}}
[[Image:fish.gif|left]]
''&quot;Disgusting little critters who dish it out, but can't take it.&quot;''

If '''Rotfishes''' are even a concern, let them get moderately close and kill them with a shot from the [[Double-Barrelled Shotgun]], that will take care of them most likely.

''&quot;Player was fed to the Rotfish&quot;''

{{Monsters}}</text>
      <sha1>t8hbvg83vh12y6utpa3h3vn0gy9yzx3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1912</id>
      <parentid>1399</parentid>
      <timestamp>2013-03-25T03:29:12Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>fixed image location and file link</comment>
      <text xml:space="preserve" bytes="481">[[Image:Fish.gif|left]]
{{Infobox Monster
|name=Rotfish
|entity=monster_fish
|model=fish.mdl
|health=25
|attacks=Bite
|drop=nothing
|1stappearance=[[e2m3]]
|gameversion=Registered
|
}}

''&quot;Disgusting little critters who dish it out, but can't take it.&quot;''

If '''Rotfishes''' are even a concern, let them get moderately close and kill them with a shot from the [[Double-Barrelled Shotgun]], that will take care of them most likely.

''&quot;Player was fed to the Rotfish&quot;''

{{Monsters}}</text>
      <sha1>8xba5kkbol6hxg5bbt2szi286bu5i4l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2838</id>
      <parentid>1912</parentid>
      <timestamp>2013-04-08T13:52:58Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>updated infobox</comment>
      <text xml:space="preserve" bytes="490">{{Infobox Monster
| name = Rotfish
| image = monster_quake_rotfish.png
| manualtext = Disgusting little critters who dish it out, but can't take it.
| health = 25
| attacks = Bite
| drop = nothing
| 1stappearance = [[e2m3]]
| gameversion = Registered
| deathmessage = Player was fed to the Rotfish
}}

If '''Rotfishes''' are even a concern, let them get moderately close and kill them with a shot from the [[Double-Barrelled Shotgun]], that will take care of them most likely.

{{Monsters}}</text>
      <sha1>rhi221ow8u25lh5ur5fgsk611wcc5hx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2879</id>
      <parentid>2838</parentid>
      <timestamp>2013-04-09T04:28:45Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>added basic entity info</comment>
      <text xml:space="preserve" bytes="2369">{{Infobox Monster
| name = Rotfish
| image = monster_quake_rotfish.png
| manualtext = Disgusting little critters who dish it out, but can't take it.
| health = 25
| attacks = Bite
| drop = nothing
| 1stappearance = [[e2m3]]
| gameversion = Registered
| deathmessage = Player was fed to the Rotfish
}}

If '''Rotfishes''' are even a concern, let them get moderately close and kill them with a shot from the [[Double-Barrelled Shotgun]], that will take care of them most likely.

==Tactics==


&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_fish
| commonname = [[Fish]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 32 x 32 x 48
| quakec = [[fish.qc]]
| precaches =
progs/fish.mdl&lt;br&gt;
fish/death.wav&lt;br&gt;
fish/bite.wav&lt;br&gt;
fish/idle.wav
}}

==Entity information==

'''monster_fish''' is the [[Entity|entity]] for placing '''Fish''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Fish. When triggered, the Fish will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Fish dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Fish dies.
|}

====Spawnflags====
The monster_fish entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Fish will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Fish
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 24) model(&quot;:progs/enforcer.mdl&quot;)
    = monster_fish : &quot;Fish&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_fish (1 0 0) (-16 -16 -24) (16 16 24) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>dxo9egwtzku273k83b00gdis7b9qkio</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2880</id>
      <parentid>2879</parentid>
      <timestamp>2013-04-09T04:29:49Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>changed Fish to Rotfish in entity info</comment>
      <text xml:space="preserve" bytes="2396">{{Infobox Monster
| name = Rotfish
| image = monster_quake_rotfish.png
| manualtext = Disgusting little critters who dish it out, but can't take it.
| health = 25
| attacks = Bite
| drop = nothing
| 1stappearance = [[e2m3]]
| gameversion = Registered
| deathmessage = Player was fed to the Rotfish
}}

If '''Rotfishes''' are even a concern, let them get moderately close and kill them with a shot from the [[Double-Barrelled Shotgun]], that will take care of them most likely.

==Tactics==


&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_fish
| commonname = [[Rotfish]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 32 x 32 x 48
| quakec = [[fish.qc]]
| precaches =
progs/fish.mdl&lt;br&gt;
fish/death.wav&lt;br&gt;
fish/bite.wav&lt;br&gt;
fish/idle.wav
}}

==Entity information==

'''monster_fish''' is the [[Entity|entity]] for placing '''Rotfish''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Rotfish. When triggered, the Rotfish will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Rotfish dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Rotfish dies.
|}

====Spawnflags====
The monster_fish entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Rotfish will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Rotfish
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 24) model(&quot;:progs/enforcer.mdl&quot;)
    = monster_fish : &quot;Rotfish&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_fish (1 0 0) (-16 -16 -24) (16 16 24) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>5gmpbnwr1hfiuwdhznfdwx5owgpht41</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2950</id>
      <parentid>2880</parentid>
      <timestamp>2013-05-04T16:22:11Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2486">{{Infobox Monster
| name = Rotfish
| image = monster_quake_rotfish.png
| manualtext = Disgusting little critters who dish it out, but can't take it.
| health = 25
| gibthresh = -20 (in [[Scourge of Armagon|SoA]] only; cannot be gibbed in vanilla Quake)
| attacks = Bite
| drop = nothing
| 1stappearance = [[e2m3]]
| gameversion = Registered
| deathmessage = Player was fed to the Rotfish
}}

If '''Rotfishes''' are even a concern, let them get moderately close and kill them with a shot from the [[Double-Barrelled Shotgun]], that will take care of them most likely.

==Tactics==


&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_fish
| commonname = [[Rotfish]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 32 x 32 x 48
| quakec = [[fish.qc]]
| precaches =
progs/fish.mdl&lt;br&gt;
fish/death.wav&lt;br&gt;
fish/bite.wav&lt;br&gt;
fish/idle.wav
}}

==Entity information==

'''monster_fish''' is the [[Entity|entity]] for placing '''Rotfish''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Rotfish. When triggered, the Rotfish will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Rotfish dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Rotfish dies.
|}

====Spawnflags====
The monster_fish entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Rotfish will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Rotfish
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 24) model(&quot;:progs/enforcer.mdl&quot;)
    = monster_fish : &quot;Rotfish&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_fish (1 0 0) (-16 -16 -24) (16 16 24) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>b6n9vs1y6rp315necvov5un0mfdx3ws</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3022</id>
      <parentid>2950</parentid>
      <timestamp>2013-11-17T06:31:53Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>added a few notes and moved the tactics into... Tactics.</comment>
      <text xml:space="preserve" bytes="3007">{{Infobox Monster
| name = Rotfish
| image = monster_quake_rotfish.png
| manualtext = Disgusting little critters who dish it out, but can't take it.
| health = 25
| gibthresh = -20 (in [[Scourge of Armagon|SoA]] only; cannot be gibbed in vanilla Quake)
| attacks = Bite
| drop = nothing
| 1stappearance = [[e2m3]]
| gameversion = Registered
| deathmessage = Player was fed to the Rotfish
}}
'''Rotfish''' are slow to medium speed minor monsters that act as a nuisance in bodies of water, most notably in [[e2m3]] and [[e4m4]]. They are not renowned as a meaningful threat and will simply consume a negligent amount of shells to dispose of. Rotfish are erroneously counted twice when assessing the monster population of a level, but only give credit for one kill, resulting in an imperfect Kill score at the level's end if they are present. In rare circumstances a Rotfish's head can be found incorrectly rendered.

==Tactics==
If '''Rotfishes''' are even a concern, let them get moderately close and kill them with a shot from the [[Double-Barrelled Shotgun]], that will take care of them most likely.

&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_fish
| commonname = [[Rotfish]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 32 x 32 x 48
| quakec = [[fish.qc]]
| precaches =
progs/fish.mdl&lt;br&gt;
fish/death.wav&lt;br&gt;
fish/bite.wav&lt;br&gt;
fish/idle.wav
}}

==Entity information==

'''monster_fish''' is the [[Entity|entity]] for placing '''Rotfish''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Rotfish. When triggered, the Rotfish will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Rotfish dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Rotfish dies.
|}

====Spawnflags====
The monster_fish entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Rotfish will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Rotfish
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 24) model(&quot;:progs/enforcer.mdl&quot;)
    = monster_fish : &quot;Rotfish&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_fish (1 0 0) (-16 -16 -24) (16 16 24) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>hwri3x6cvybfms56ougn7idbg2ukndt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Rottweiler</title>
    <ns>0</ns>
    <id>132</id>
    <revision>
      <id>214</id>
      <timestamp>2007-11-02T19:30:44Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: Bad, bad doggie! Play dead! - blam! blam! - yipe! Good dog!  * '''Weapon:''' Teeth * '''Health:''' 25 * '''Treasure:''' Nothing  '''Tips:''' Rottweilers are vicious dogs that use their sha...</comment>
      <text xml:space="preserve" bytes="467">Bad, bad doggie! Play dead! - blam! blam! - yipe! Good dog!

* '''Weapon:''' Teeth
* '''Health:''' 25
* '''Treasure:''' Nothing

'''Tips:''' Rottweilers are vicious dogs that use their sharp teeth to try to rip you apart. Beware - they can leap short distances to do extra damage. For killing them, just use your [[Shotgun]] or [[Double-Barrelled Shotgun]].

'''Entity name:''' [[monster_dog]]

[http://frikqcc.quakesrc.org/files/dog.gif]

==See Also==
* [[Monsters]]</text>
      <sha1>psqn04pk2gl6xhah8evaf9vn17fj1wd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>266</id>
      <parentid>214</parentid>
      <timestamp>2007-11-05T22:08:54Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <text xml:space="preserve" bytes="441">Bad, bad doggie! Play dead! - blam! blam! - yipe! Good dog!

* '''Weapon:''' Teeth
* '''Health:''' 25
* '''Treasure:''' Nothing

'''Tips:''' Rottweilers are vicious dogs that use their sharp teeth to try to rip you apart. Beware - they can leap short distances to do extra damage. For killing them, just use your [[Shotgun]] or [[Double-Barrelled Shotgun]].

[[Image:dog.gif]]

'''Entity name:''' [[monster_dog]]

==See Also==
* [[Monsters]]</text>
      <sha1>ma57hs5ty3ygbblafwmet3ct2xr6515</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>732</id>
      <parentid>266</parentid>
      <timestamp>2008-05-07T20:17:41Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="513">Bad, bad doggie! Play dead! - blam! blam! - yipe! Good dog!

* '''Weapon:''' Teeth
* '''Health:''' 25
* '''Treasure:''' Nothing

'''Tips:'''
----
Rottweilers are vicious dogs that use their sharp teeth to try to rip you apart. Beware - they can leap short distances to do extra damage. For killing them, just use your [[Shotgun]] or [[Double-Barrelled Shotgun]].
*'''Best Weapons:''' Shotgun
*'''Worst Weapons:''' Rocket Launcher

[[Image:dog.gif]]

'''Entity name:''' [[monster_dog]]

==See Also==
* [[Monsters]]</text>
      <sha1>2v54idc7n4kc6tlloh29dknmpbvbg7m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>848</id>
      <parentid>732</parentid>
      <timestamp>2008-05-17T18:02:13Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="572">{{Infobox Monster
|monstername=Rottweiler
|entityname=monster_dog
|monsterhealth=25
|monstermelee=Bite
|monstermissile=Leap
|movetype=
|monsterspeed=
|monsterclass=
}}

[[Image:dog.gif|left]]

Rottweilers are vicious dogs that use their sharp teeth to try to rip you apart. Beware - they can leap short distances to do extra damage. For killing them, just use your [[Shotgun]] or [[Double-Barrelled Shotgun]].
*'''Best Weapons:''' Shotgun
*'''Worst Weapons:''' Rocket Launcher

''&quot;Bad, bad doggie! Play dead! - blam! blam! - yipe! Good dog!&quot;''

==See Also==
* [[Monsters]]</text>
      <sha1>l920pscdnbhbx03w6mcfx2dgp78dalp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>860</id>
      <parentid>848</parentid>
      <timestamp>2008-05-17T18:52:42Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="593">{{Infobox Monster
|monstername=Rottweiler
|entityname=monster_dog
|monsterhealth=25
|monstermelee=Bite
|monstermissile=Leap
|movetype=
|monsterspeed=
|monsterclass=
|monsterdrop=nothing
}}

[[Image:dog.gif|left]]

Rottweilers are vicious dogs that use their sharp teeth to try to rip you apart. Beware - they can leap short distances to do extra damage. For killing them, just use your [[Shotgun]] or [[Double-Barrelled Shotgun]].
*'''Best Weapons:''' Shotgun
*'''Worst Weapons:''' Rocket Launcher

''&quot;Bad, bad doggie! Play dead! - blam! blam! - yipe! Good dog!&quot;''

==See Also==
* [[Monsters]]</text>
      <sha1>sgy4rrg5d3502awrkxj2wqgb6mfexyd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1247</id>
      <parentid>860</parentid>
      <timestamp>2009-09-25T08:09:52Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="493">{{Infobox Monster
|name=Rottweiler
|entity=monster_dog
|model=dog.mdl&lt;br /&gt;h_dog.mdl (head gib)
|health=25
|attacks=Bite, leap
|drop=nothing
|gameversion=Shareware
}}
[[Image:dog.gif|left]]
'''Rottweilers''' are vicious dogs that use their sharp teeth to try to rip you apart. Beware - they can leap short distances to do extra damage. For killing them, just use your [[Shotgun]] or [[Double-Barrelled Shotgun]].

''&quot;Bad, bad doggie! Play dead! - blam! blam! - yipe! Good dog!&quot;''

{{Monsters}}</text>
      <sha1>gwq865lttmyre6mx5ng7ibhd57be8og</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1386</id>
      <parentid>1247</parentid>
      <timestamp>2009-10-08T23:22:19Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="517">{{Infobox Monster
|name=Rottweiler
|entity=monster_dog
|model=dog.mdl&lt;br /&gt;h_dog.mdl (head gib)
|health=25
|attacks=Bite, leap
|drop=nothing
|1stappearance=[[e1m1]]
|gameversion=Shareware
}}
[[Image:dog.gif|left]]
'''Rottweilers''' are vicious dogs that use their sharp teeth to try to rip you apart. Beware - they can leap short distances to do extra damage. For killing them, just use your [[Shotgun]] or [[Double-Barrelled Shotgun]].

''&quot;Bad, bad doggie! Play dead! - blam! blam! - yipe! Good dog!&quot;''

{{Monsters}}</text>
      <sha1>qy67t7vj9f3whkupg1jn92ucjlzrysd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1400</id>
      <parentid>1386</parentid>
      <timestamp>2009-10-08T23:48:05Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="558">{{Infobox Monster
|name=Rottweiler
|entity=monster_dog
|model=dog.mdl&lt;br /&gt;h_dog.mdl (head gib)
|health=25
|attacks=Bite, leap
|drop=nothing
|1stappearance=[[e1m1]]
|gameversion=Shareware
}}
[[Image:dog.gif|left]]
''&quot;Bad, bad doggie! Play dead! - blam! blam! - yipe! Good dog!&quot;''

'''Rottweilers''' are vicious dogs that use their sharp teeth to try to rip you apart. Beware - they can leap short distances to do extra damage. For killing them, just use your [[Shotgun]] or [[Double-Barrelled Shotgun]].

''&quot;Player was mauled by a Rottweiler&quot;''

{{Monsters}}</text>
      <sha1>3txq7hrz0ls2wzjdjv4xrkwlw2dm20x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1911</id>
      <parentid>1400</parentid>
      <timestamp>2013-03-25T03:28:33Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>fixed image location and file link</comment>
      <text xml:space="preserve" bytes="559">[[Image:Dog.gif|left]]
{{Infobox Monster
|name=Rottweiler
|entity=monster_dog
|model=dog.mdl&lt;br /&gt;h_dog.mdl (head gib)
|health=25
|attacks=Bite, leap
|drop=nothing
|1stappearance=[[e1m1]]
|gameversion=Shareware
}}

''&quot;Bad, bad doggie! Play dead! - blam! blam! - yipe! Good dog!&quot;''

'''Rottweilers''' are vicious dogs that use their sharp teeth to try to rip you apart. Beware - they can leap short distances to do extra damage. For killing them, just use your [[Shotgun]] or [[Double-Barrelled Shotgun]].

''&quot;Player was mauled by a Rottweiler&quot;''

{{Monsters}}</text>
      <sha1>jpnhuyf7a7ptt801txujaz3mqr0496u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2839</id>
      <parentid>1911</parentid>
      <timestamp>2013-04-08T13:55:05Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>updated infobox</comment>
      <text xml:space="preserve" bytes="550">{{Infobox Monster
| name = Rottweiler
| image = monster_quake_rottweiler.png
| manualtext = Bad, bad doggie! Play dead! - blam! blam! - yipe! Good dog!
| health = 25
| attacks = Bite, leap
| drop = nothing
| 1stappearance = [[e1m1]]
| gameversion = Shareware
| deathmessage = Player was mauled by a Rottweiler
}}

'''Rottweilers''' are vicious dogs that use their sharp teeth to try to rip you apart. Beware - they can leap short distances to do extra damage. For killing them, just use your [[Shotgun]] or [[Double-Barrelled Shotgun]].

{{Monsters}}</text>
      <sha1>fvy52rz2f34hlopybdmzcjaaaagki5s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2881</id>
      <parentid>2839</parentid>
      <timestamp>2013-04-09T04:33:29Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>added basic entity info</comment>
      <text xml:space="preserve" bytes="2537">{{Infobox Monster
| name = Rottweiler
| image = monster_quake_rottweiler.png
| manualtext = Bad, bad doggie! Play dead! - blam! blam! - yipe! Good dog!
| health = 25
| attacks = Bite, leap
| drop = nothing
| 1stappearance = [[e1m1]]
| gameversion = Shareware
| deathmessage = Player was mauled by a Rottweiler
}}

'''Rottweilers''' are vicious dogs that use their sharp teeth to try to rip you apart. Beware - they can leap short distances to do extra damage. For killing them, just use your [[Shotgun]] or [[Double-Barrelled Shotgun]].

==Tactics==


&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_dog
| commonname = [[Rotweiller]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 64
| quakec = [[dog.qc]]
| precaches =
progs/h_dog.mdl&lt;br&gt;
progs/dog.mdl&lt;br&gt;
dog/dattack1.wav&lt;br&gt;
dog/ddeath.wav&lt;br&gt;
dog/dpain1.wav&lt;br&gt;
dog/dsight.wav&lt;br&gt;
dog/idle.wav
}}

==Entity information==

'''monster_dog''' is the [[Entity|entity]] for placing '''Rotweillers''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Rotweiller. When triggered, the Rotweiller will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Rotweiller dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Rotweiller dies.
|}

====Spawnflags====
The monster_dog entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Rotweiller will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Rotweiller
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-32 -32 -24, 32 32 40) model(&quot;:progs/enforcer.mdl&quot;)
    = monster_dog : &quot;Rotweiller&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_dog (1 0 0) (-32 -32 -24) (32 32 40) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>d5e42ql1uw2s8jab2mlz7c81a4nvjyc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2951</id>
      <parentid>2881</parentid>
      <timestamp>2013-05-04T16:24:06Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2555">{{Infobox Monster
| name = Rottweiler
| image = monster_quake_rottweiler.png
| manualtext = Bad, bad doggie! Play dead! - blam! blam! - yipe! Good dog!
| health = 25
| gibthresh = -35
| attacks = Bite, leap
| drop = nothing
| 1stappearance = [[e1m1]]
| gameversion = Shareware
| deathmessage = Player was mauled by a Rottweiler
}}

'''Rottweilers''' are vicious dogs that use their sharp teeth to try to rip you apart. Beware - they can leap short distances to do extra damage. For killing them, just use your [[Shotgun]] or [[Double-Barrelled Shotgun]].

==Tactics==


&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_dog
| commonname = [[Rotweiller]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 64
| quakec = [[dog.qc]]
| precaches =
progs/h_dog.mdl&lt;br&gt;
progs/dog.mdl&lt;br&gt;
dog/dattack1.wav&lt;br&gt;
dog/ddeath.wav&lt;br&gt;
dog/dpain1.wav&lt;br&gt;
dog/dsight.wav&lt;br&gt;
dog/idle.wav
}}

==Entity information==

'''monster_dog''' is the [[Entity|entity]] for placing '''Rotweillers''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Rotweiller. When triggered, the Rotweiller will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Rotweiller dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Rotweiller dies.
|}

====Spawnflags====
The monster_dog entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Rotweiller will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Rotweiller
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-32 -32 -24, 32 32 40) model(&quot;:progs/enforcer.mdl&quot;)
    = monster_dog : &quot;Rotweiller&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_dog (1 0 0) (-32 -32 -24) (32 32 40) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>ck5fii8uvf7ptss8u0svjvxh7o6mbes</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Saved1</title>
    <ns>0</ns>
    <id>916</id>
    <redirect title="saved1" />
    <revision>
      <id>2599</id>
      <timestamp>2013-03-29T14:22:17Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Saved1]] to [[saved1]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="20">#REDIRECT [[saved1]]</text>
      <sha1>gebmnt5u47uc7yao8ojc62sy2f2b1kl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Saved2</title>
    <ns>0</ns>
    <id>917</id>
    <redirect title="saved2" />
    <revision>
      <id>2601</id>
      <timestamp>2013-03-29T14:22:17Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Saved2]] to [[saved2]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="20">#REDIRECT [[saved2]]</text>
      <sha1>cj8cerrru4sw7e0g586rieiqucd9o6w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Saved3</title>
    <ns>0</ns>
    <id>918</id>
    <redirect title="saved3" />
    <revision>
      <id>2603</id>
      <timestamp>2013-03-29T14:22:17Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Saved3]] to [[saved3]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="20">#REDIRECT [[saved3]]</text>
      <sha1>otopevguvm4fuvdjgo9wwwbno7gcutm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Saved4</title>
    <ns>0</ns>
    <id>919</id>
    <redirect title="saved4" />
    <revision>
      <id>2605</id>
      <timestamp>2013-03-29T14:22:18Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Saved4]] to [[saved4]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="20">#REDIRECT [[saved4]]</text>
      <sha1>0ir6zv8mp4tsy88pt45bg5mbtguhvvw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Savedgamecfg</title>
    <ns>0</ns>
    <id>920</id>
    <redirect title="savedgamecfg" />
    <revision>
      <id>2607</id>
      <timestamp>2013-03-29T14:22:18Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Savedgamecfg]] to [[savedgamecfg]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="26">#REDIRECT [[savedgamecfg]]</text>
      <sha1>ktopkd0hpjhjhdz2u6dtq759ax1566o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Scourge of Armagon</title>
    <ns>0</ns>
    <id>7</id>
    <revision>
      <id>10</id>
      <timestamp>2007-10-30T16:33:57Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: '''Scourge of Armagon''' was [[Quake]]'s first official mission pack. It was developed by Hipnotic Interactive (now called Ritual Entertainment).  If you just have the /hipnotic folder and...</comment>
      <text xml:space="preserve" bytes="575">'''Scourge of Armagon''' was [[Quake]]'s first official mission pack. It was developed by Hipnotic Interactive (now called Ritual Entertainment).

If you just have the /hipnotic folder and no executable or link, you can start it by running Quake with the command line parameter '''-hipnotic'''.

===Additional Monsters===
* [[Gremlin]]
* [[Centroid]]
* [[Armagon]]

===Additional Weapons===
* [[Mjolnir]]
* [[Laser Cannon]]
* [[Proximity Bomb]]

===Additional Powerups===
* [[Empathy Shield]]
* [[Horn of Conjuring]]
* [[The Wet Suit]]

===See Also===
* [[Installing Addons]]</text>
      <sha1>27ykjkp74j1zod98umpgl6qh2cugzb8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1418</id>
      <parentid>10</parentid>
      <timestamp>2009-10-14T18:19:39Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="725">'''Scourge of Armagon''' was [[Quake]]'s first official mission pack. It was developed by Hipnotic Interactive (now called Ritual Entertainment).

If you just have the /hipnotic folder and no executable or link, you can start it by running Quake with the command line parameter '''-hipnotic'''.

===Additional Monsters===
* [[Gremlin]]
* [[Centroid]]
* [[Armagon]]

===Additional Weapons===
* [[Mjolnir]]
* [[Laser Cannon]]
* [[Proximity Bomb]]

===Additional Powerups===
* [[Empathy Shield]]
* [[Horn of Conjuring]]
* [[The Wet Suit]]

===See Also===
* [[Installing Addons]]

----

''This article is currently pending a significant rewrite due to its importance for the wiki, expect the current page to change drastically.''</text>
      <sha1>gdx6s1hbyi90ki2flr88qcj6t2cnrjw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1421</id>
      <parentid>1418</parentid>
      <timestamp>2009-10-19T18:48:03Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>beginnings of a rewrite of the SoA article</comment>
      <text xml:space="preserve" bytes="2906">'''Scourge of Armagon''' was [[Quake]]'s first official mission pack. It was developed by Hipnotic Interactive (now called Ritual Entertainment). It added three new weapons, monsters, and powerups, along with 3 new episodes (though a bit shorter than an id1 episode), a new, more musical, soundtrack by [[Jeehun Hwang]], bobbing water, bullet hole decals, exploding walls and made significant use of rotating brushes.

==Gameplay Flow==
'''Scourge of Armagon''' is divided into three episodes, this division is most notable in the texture themes, as we first see significant presence of base and earthy textures, as the player explores military bases, encountering forcefields, [[Centroid|Centroids]], the [[Wetsuit]], [[Laser Cannon]] and the [[Proximity Bomb]]. This section contains the very memorable experience of being chased down a mine shaft by a large tumbling boulder, which provides an excellent example of the rotating brushes. The episode ends on a more supernatural note, with the player being launched through a pentagram of lightning, and landing at a more traditional Quake exit. The second episode is clearly medieval themed, though it makes definite use of the new white castle theme. This episode introduces [[Gremlin|Gremlins]], the mighty [[Mjolnir]] and the bittersweet [[Empathy Shield]], along with a unique clock entity which can reveal a secret. The final episode blends base monsters and medieval setting with a good dose of the metal texture set, and introduces a floating spike mine (presumably once upon a time a ranged attack for the Gremlin) and casts a much more gothic style over itself, and ultimately concludes with an arena battle against [[Armagon]] himself.

==Innovations==
One of the most recognized innovations of '''Scourge of Armagon''' is the Gremlin, who has the capacity of not only stealing the player's weapons, but using them against him, usually to simultaneously dangerous and amusing effect, making the player's inventory a vulnerable and liquid asset rather than being a strictly positive trait in the game. The presence of the [[Horn of Conjuring]] saw official use of friendly monster AI, though their actual intelligence was in doubt. '''Scourge of Armagon''' also introduced gaming to the &quot;void map&quot; as popularized in Quake 3: Arena, with [[hipdm1|Edge of Oblivion]].

If you just have the /hipnotic folder and no executable or link, you can start it by running Quake with the command line parameter '''-hipnotic'''.

===Additional Monsters===
* [[Gremlin]]
* [[Centroid]]
* [[Armagon]]

===Additional Weapons===
* [[Mjolnir]]
* [[Laser Cannon]]
* [[Proximity Bomb]]

===Additional Powerups===
* [[Empathy Shield]]
* [[Horn of Conjuring]]
* [[The Wet Suit]]

===See Also===
* [[Installing Addons]]

----

''This article is currently pending a significant rewrite due to its importance for the wiki, expect the current page to change drastically.''</text>
      <sha1>nlk21j4us3ad20u9tfyxaaeyn6ib6tt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Scr centertime</title>
    <ns>0</ns>
    <id>921</id>
    <redirect title="scr centertime" />
    <revision>
      <id>2609</id>
      <timestamp>2013-03-29T14:22:18Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Scr centertime]] to [[scr centertime]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="28">#REDIRECT [[scr centertime]]</text>
      <sha1>8ilywmo6ogk99pakt7agzklrmjdyda9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Scr conspeed</title>
    <ns>0</ns>
    <id>922</id>
    <redirect title="scr conspeed" />
    <revision>
      <id>2611</id>
      <timestamp>2013-03-29T14:22:19Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Scr conspeed]] to [[scr conspeed]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="26">#REDIRECT [[scr conspeed]]</text>
      <sha1>oiu7on65po63oma4rzlz187cvlnzktt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Scrag</title>
    <ns>0</ns>
    <id>139</id>
    <revision>
      <id>221</id>
      <timestamp>2007-11-02T19:39:45Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: Floats like a butterfly, stings like a bee. Ugly as hell. They're not real tough, but like to bushwhack you.  * '''Weapon:''' Slime Spit * '''Health:''' 80 * '''Treasure:''' Nothing  '''Ti...</comment>
      <text xml:space="preserve" bytes="749">Floats like a butterfly, stings like a bee. Ugly as hell. They're not real tough, but like to bushwhack you.

* '''Weapon:''' Slime Spit
* '''Health:''' 80
* '''Treasure:''' Nothing

'''Tips:''' Their slime projectiles are easy to dodge, but you'll need lots of room to move and a sharp eye for other Scrags. At long range, use the [[Shotgun]], the [[Nailgun]] the [[Super Nailgun]], or the [[Rocket Launcher]]. At close range, use a [[Double-Barrelled Shotgun]]. At medium range, if you have good aim and are far enough away not to be hurt by the explosion, you can lob a [[Grenade Launcher|Grenade]] at a Scrag for a one-shot kill.

'''Entity name:''' [[monster_wizard]]

[http://frikqcc.quakesrc.org/files/wizard.gif]

==See Also==
* [[Monsters]]</text>
      <sha1>271nyxx059jrbgtwa3m9za6ky8cw7e6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>280</id>
      <parentid>221</parentid>
      <timestamp>2007-11-05T22:18:48Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <text xml:space="preserve" bytes="723">Floats like a butterfly, stings like a bee. Ugly as hell. They're not real tough, but like to bushwhack you.

* '''Weapon:''' Slime Spit
* '''Health:''' 80
* '''Treasure:''' Nothing

'''Tips:''' Their slime projectiles are easy to dodge, but you'll need lots of room to move and a sharp eye for other Scrags. At long range, use the [[Shotgun]], the [[Nailgun]] the [[Super Nailgun]], or the [[Rocket Launcher]]. At close range, use a [[Double-Barrelled Shotgun]]. At medium range, if you have good aim and are far enough away not to be hurt by the explosion, you can lob a [[Grenade Launcher|Grenade]] at a Scrag for a one-shot kill.

[[Image:wizard.gif]]

'''Entity name:''' [[monster_wizard]]

==See Also==
* [[Monsters]]</text>
      <sha1>2p1khlncucotzl71pgo8u9ujoi7h6id</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>849</id>
      <parentid>280</parentid>
      <timestamp>2008-05-17T18:07:34Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="1191">{{Infobox Monster
|monstername=Scrag
|entityname=monster_wizard
|monsterhealth=80
|monstermelee=
|monstermissile=Slime spit
|movetype=
|monsterspeed=
|monsterclass=
}}

[[Image:wizard.gif|left]]

Their slime projectiles are easy to dodge, but you'll need lots of room to move and a sharp eye for other Scrags. At long range, use the [[Shotgun]], the [[Nailgun]] the [[Super Nailgun]], or the [[Rocket Launcher]]. At close range, use a [[Double-Barrelled Shotgun]]. At medium range, if you have good aim and are far enough away not to be hurt by the explosion, you can lob a [[Grenade Launcher|Grenade]] at a Scrag for a one-shot kill.

Scrags possess some cunning beyond the lofty standard set by the other monsters in Quake (*cough*). They are constantly moving side to side (except when attacking), and so manage to dodge many incoming slow-moving projectiles. Also, if you duck behind cover while they are attacking, they may throw an extra shot or two at your last seen location, so you might want to be careful before you pop back out again.

''&quot;Floats like a butterfly, stings like a bee. Ugly as hell. They're not real tough, but like to bushwhack you.&quot;''

==See Also==
* [[Monsters]]</text>
      <sha1>noy6bro6fkt64y1svg6fz7bvzgvpeny</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>859</id>
      <parentid>849</parentid>
      <timestamp>2008-05-17T18:52:34Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1212">{{Infobox Monster
|monstername=Scrag
|entityname=monster_wizard
|monsterhealth=80
|monstermelee=
|monstermissile=Slime spit
|movetype=
|monsterspeed=
|monsterclass=
|monsterdrop=nothing
}}

[[Image:wizard.gif|left]]

Their slime projectiles are easy to dodge, but you'll need lots of room to move and a sharp eye for other Scrags. At long range, use the [[Shotgun]], the [[Nailgun]] the [[Super Nailgun]], or the [[Rocket Launcher]]. At close range, use a [[Double-Barrelled Shotgun]]. At medium range, if you have good aim and are far enough away not to be hurt by the explosion, you can lob a [[Grenade Launcher|Grenade]] at a Scrag for a one-shot kill.

Scrags possess some cunning beyond the lofty standard set by the other monsters in Quake (*cough*). They are constantly moving side to side (except when attacking), and so manage to dodge many incoming slow-moving projectiles. Also, if you duck behind cover while they are attacking, they may throw an extra shot or two at your last seen location, so you might want to be careful before you pop back out again.

''&quot;Floats like a butterfly, stings like a bee. Ugly as hell. They're not real tough, but like to bushwhack you.&quot;''

==See Also==
* [[Monsters]]</text>
      <sha1>8uryeh0kkvj75tov6l4w2x8wjsoyu8s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1248</id>
      <parentid>859</parentid>
      <timestamp>2009-09-25T08:11:18Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="1265">{{Infobox Monster
|name=Scrag
|entity=monster_wizard
|model=wizard.mdl&lt;br /&gt;h_wizard.mdl (head gib)
|health=80
|attacks=Slime spit
|drop=nothing
|gameversion=Shareware
}}
[[Image:wizard.gif|left]]
'''Scrags''' (also known as Wizards) are the only flying monster in standard [[Quake]]. Their slime projectiles are easy to dodge, but you'll need lots of room to move and a sharp eye for other Scrags. At long range, use the [[Shotgun]], the [[Nailgun]] the [[Super Nailgun]], or the [[Rocket Launcher]]. At close range, use a [[Double-Barrelled Shotgun]]. At medium range, if you have good aim and are far enough away not to be hurt by the explosion, you can lob a [[Grenade Launcher|Grenade]] at a Scrag for a one-shot kill.

Scrags possess some cunning beyond the lofty standard set by the other monsters in Quake (*cough*). They are constantly moving side to side (except when attacking), and so manage to dodge many incoming slow-moving projectiles. Also, if you duck behind cover while they are attacking, they may throw an extra shot or two at your last seen location, so you might want to be careful before you pop back out again.

''&quot;Floats like a butterfly, stings like a bee. Ugly as hell. They're not real tough, but like to bushwhack you.&quot;''

{{Monsters}}</text>
      <sha1>sjz7t0880htb6refnzqyynapy02b9u7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1387</id>
      <parentid>1248</parentid>
      <timestamp>2009-10-08T23:23:29Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1289">{{Infobox Monster
|name=Scrag
|entity=monster_wizard
|model=wizard.mdl&lt;br /&gt;h_wizard.mdl (head gib)
|health=80
|attacks=Slime spit
|drop=nothing
|1stappearance=[[e1m2]]
|gameversion=Shareware
}}
[[Image:wizard.gif|left]]
'''Scrags''' (also known as Wizards) are the only flying monster in standard [[Quake]]. Their slime projectiles are easy to dodge, but you'll need lots of room to move and a sharp eye for other Scrags. At long range, use the [[Shotgun]], the [[Nailgun]] the [[Super Nailgun]], or the [[Rocket Launcher]]. At close range, use a [[Double-Barrelled Shotgun]]. At medium range, if you have good aim and are far enough away not to be hurt by the explosion, you can lob a [[Grenade Launcher|Grenade]] at a Scrag for a one-shot kill.

Scrags possess some cunning beyond the lofty standard set by the other monsters in Quake (*cough*). They are constantly moving side to side (except when attacking), and so manage to dodge many incoming slow-moving projectiles. Also, if you duck behind cover while they are attacking, they may throw an extra shot or two at your last seen location, so you might want to be careful before you pop back out again.

''&quot;Floats like a butterfly, stings like a bee. Ugly as hell. They're not real tough, but like to bushwhack you.&quot;''

{{Monsters}}</text>
      <sha1>ppo8dbfca3xdgaqlrjuyk44h6ss24c4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1401</id>
      <parentid>1387</parentid>
      <timestamp>2009-10-08T23:49:06Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1327">{{Infobox Monster
|name=Scrag
|entity=monster_wizard
|model=wizard.mdl&lt;br /&gt;h_wizard.mdl (head gib)
|health=80
|attacks=Slime spit
|drop=nothing
|1stappearance=[[e1m2]]
|gameversion=Shareware
}}
[[Image:wizard.gif|left]]
''&quot;Floats like a butterfly, stings like a bee. Ugly as hell. They're not real tough, but like to bushwhack you.&quot;''

'''Scrags''' (also known as Wizards) are the only flying monster in standard [[Quake]]. Their slime projectiles are easy to dodge, but you'll need lots of room to move and a sharp eye for other Scrags. At long range, use the [[Shotgun]], the [[Nailgun]] the [[Super Nailgun]], or the [[Rocket Launcher]]. At close range, use a [[Double-Barrelled Shotgun]]. At medium range, if you have good aim and are far enough away not to be hurt by the explosion, you can lob a [[Grenade Launcher|Grenade]] at a Scrag for a one-shot kill.

Scrags possess some cunning beyond the lofty standard set by the other monsters in Quake (*cough*). They are constantly moving side to side (except when attacking), and so manage to dodge many incoming slow-moving projectiles. Also, if you duck behind cover while they are attacking, they may throw an extra shot or two at your last seen location, so you might want to be careful before you pop back out again.

''&quot;Player was scragged by a Scrag&quot;''

{{Monsters}}</text>
      <sha1>nyy2ol4ska6cfmt1ubdr5pcyzruatjr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1913</id>
      <parentid>1401</parentid>
      <timestamp>2013-03-25T03:30:04Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>fixed image location and file link</comment>
      <text xml:space="preserve" bytes="1328">[[Image:Wizard.gif|left]]
{{Infobox Monster
|name=Scrag
|entity=monster_wizard
|model=wizard.mdl&lt;br /&gt;h_wizard.mdl (head gib)
|health=80
|attacks=Slime spit
|drop=nothing
|1stappearance=[[e1m2]]
|gameversion=Shareware
}}

''&quot;Floats like a butterfly, stings like a bee. Ugly as hell. They're not real tough, but like to bushwhack you.&quot;''

'''Scrags''' (also known as Wizards) are the only flying monster in standard [[Quake]]. Their slime projectiles are easy to dodge, but you'll need lots of room to move and a sharp eye for other Scrags. At long range, use the [[Shotgun]], the [[Nailgun]] the [[Super Nailgun]], or the [[Rocket Launcher]]. At close range, use a [[Double-Barrelled Shotgun]]. At medium range, if you have good aim and are far enough away not to be hurt by the explosion, you can lob a [[Grenade Launcher|Grenade]] at a Scrag for a one-shot kill.

Scrags possess some cunning beyond the lofty standard set by the other monsters in Quake (*cough*). They are constantly moving side to side (except when attacking), and so manage to dodge many incoming slow-moving projectiles. Also, if you duck behind cover while they are attacking, they may throw an extra shot or two at your last seen location, so you might want to be careful before you pop back out again.

''&quot;Player was scragged by a Scrag&quot;''

{{Monsters}}</text>
      <sha1>cobbregsvlyvb9ltuj9loihwo9iowws</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2840</id>
      <parentid>1913</parentid>
      <timestamp>2013-04-08T13:56:40Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>updated infobox</comment>
      <text xml:space="preserve" bytes="1302">{{Infobox Monster
| name = Scrag
| image = monster_quake_scrag.png
| manualtext = Floats like a butterfly, stings like a bee. Ugly as hell. They're not real tough, but like to bushwhack you.
| health = 80
| attacks = Slime spit
| drop = nothing
| 1stappearance = [[e1m2]]
| gameversion = Shareware
| deathmessage = Player was scragged by a Scrag
}}

'''Scrags''' (also known as Wizards) are the only flying monster in standard [[Quake]]. Their slime projectiles are easy to dodge, but you'll need lots of room to move and a sharp eye for other Scrags. At long range, use the [[Shotgun]], the [[Nailgun]] the [[Super Nailgun]], or the [[Rocket Launcher]]. At close range, use a [[Double-Barrelled Shotgun]]. At medium range, if you have good aim and are far enough away not to be hurt by the explosion, you can lob a [[Grenade Launcher|Grenade]] at a Scrag for a one-shot kill.

Scrags possess some cunning beyond the lofty standard set by the other monsters in Quake (*cough*). They are constantly moving side to side (except when attacking), and so manage to dodge many incoming slow-moving projectiles. Also, if you duck behind cover while they are attacking, they may throw an extra shot or two at your last seen location, so you might want to be careful before you pop back out again.

{{Monsters}}</text>
      <sha1>4x8oni4zzrubn5v53qetyczxf8twc76</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2877</id>
      <parentid>2840</parentid>
      <timestamp>2013-04-09T04:21:22Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>added basic entity info</comment>
      <text xml:space="preserve" bytes="3344">{{Infobox Monster
| name = Scrag
| image = monster_quake_scrag.png
| manualtext = Floats like a butterfly, stings like a bee. Ugly as hell. They're not real tough, but like to bushwhack you.
| health = 80
| attacks = Slime spit
| drop = nothing
| 1stappearance = [[e1m2]]
| gameversion = Shareware
| deathmessage = Player was scragged by a Scrag
}}

'''Scrags''' (also known as Wizards) are the only flying monster in standard [[Quake]]. Their slime projectiles are easy to dodge, but you'll need lots of room to move and a sharp eye for other Scrags. At long range, use the [[Shotgun]], the [[Nailgun]] the [[Super Nailgun]], or the [[Rocket Launcher]]. At close range, use a [[Double-Barrelled Shotgun]]. At medium range, if you have good aim and are far enough away not to be hurt by the explosion, you can lob a [[Grenade Launcher|Grenade]] at a Scrag for a one-shot kill.

Scrags possess some cunning beyond the lofty standard set by the other monsters in Quake (*cough*). They are constantly moving side to side (except when attacking), and so manage to dodge many incoming slow-moving projectiles. Also, if you duck behind cover while they are attacking, they may throw an extra shot or two at your last seen location, so you might want to be careful before you pop back out again.

==Tactics==


&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_wizard
| commonname = [[Scrag]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 32 x 32 x 64
| quakec = [[wizard.qc]]
| precaches =
progs/wizard.mdl&lt;br&gt;
progs/h_wizard.mdl&lt;br&gt;
progs/w_spike.mdl&lt;br&gt;
wizard/hit.wav&lt;br&gt;
wizard/wattack.wav&lt;br&gt;
wizard/wdeath.wav&lt;br&gt;
wizard/widle1.wav&lt;br&gt;
wizard/widle2.wav&lt;br&gt;
wizard/wpain.wav&lt;br&gt;
wizard/wsight.wav
}}

==Entity information==

'''monster_wizard''' is the [[Entity|entity]] for placing '''Scrags''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Scrag. When triggered, the Scrag will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Scrag dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Scrag dies.
|}

====Spawnflags====
The monster_wizard entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Scrag will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Scrag
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model(&quot;:progs/wizard.mdl&quot;)
    = monster_wizard : &quot;Scrag&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_wizard (1 0 0) (-16 -16 -24) (16 16 40) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>i3j15sr86yyptae9lf7heoodryqcjiy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2954</id>
      <parentid>2877</parentid>
      <timestamp>2013-05-04T16:43:23Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="3368">{{Infobox Monster
| name = Scrag
| image = monster_quake_scrag.png
| manualtext = Floats like a butterfly, stings like a bee. Ugly as hell. They're not real tough, but like to bushwhack you.
| health = 80
| gibthresh = -40
| attacks = Slime spit
| drop = nothing
| 1stappearance = [[e1m2]]
| gameversion = Shareware
| deathmessage = Player was scragged by a Scrag
}}

'''Scrags''' (''monster_wizard'' in the [[QC]] code) are the only flying monster in standard [[Quake]]. Their slime projectiles are easy to dodge, but you'll need lots of room to move and a sharp eye for other Scrags. At long range, use the [[Shotgun]], the [[Nailgun]] the [[Super Nailgun]], or the [[Rocket Launcher]]. At close range, use a [[Double-Barrelled Shotgun]]. At medium range, if you have good aim and are far enough away not to be hurt by the explosion, you can lob a [[Grenade Launcher|Grenade]] at a Scrag for a one-shot kill.

Scrags possess some cunning beyond the lofty standard set by the other monsters in Quake. They are constantly moving side to side (except when attacking), and so manage to dodge many incoming slow-moving projectiles. Also, if you duck behind cover while they are attacking, they may throw an extra shot or two at your last seen location, so you might want to be careful before you pop back out again.

==Tactics==


&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_wizard
| commonname = [[Scrag]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 32 x 32 x 64
| quakec = [[wizard.qc]]
| precaches =
progs/wizard.mdl&lt;br&gt;
progs/h_wizard.mdl&lt;br&gt;
progs/w_spike.mdl&lt;br&gt;
wizard/hit.wav&lt;br&gt;
wizard/wattack.wav&lt;br&gt;
wizard/wdeath.wav&lt;br&gt;
wizard/widle1.wav&lt;br&gt;
wizard/widle2.wav&lt;br&gt;
wizard/wpain.wav&lt;br&gt;
wizard/wsight.wav
}}

==Entity information==

'''monster_wizard''' is the [[Entity|entity]] for placing '''Scrags''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Scrag. When triggered, the Scrag will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Scrag dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Scrag dies.
|}

====Spawnflags====
The monster_wizard entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Scrag will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Scrag
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model(&quot;:progs/wizard.mdl&quot;)
    = monster_wizard : &quot;Scrag&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_wizard (1 0 0) (-16 -16 -24) (16 16 40) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>fqpfudc8xsyam9n80z1qx6uetgpczdz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Sensitivity</title>
    <ns>0</ns>
    <id>923</id>
    <redirect title="sensitivity" />
    <revision>
      <id>2613</id>
      <timestamp>2013-03-29T14:22:19Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Sensitivity]] to [[sensitivity]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="25">#REDIRECT [[sensitivity]]</text>
      <sha1>7ufdcsc6ap2hm6oo5cunrlo9a81q101</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Setmodel</title>
    <ns>0</ns>
    <id>207</id>
    <revision>
      <id>388</id>
      <timestamp>2008-02-23T18:35:48Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  void '''setmodel''' (entity ''e'', string ''model'')  ''e'' = entity whose model is to be set  ''model'' = name of the model (example: &quot;progs/soldier.mdl&quot;)  Changes the model associated t...</comment>
      <text xml:space="preserve" bytes="305"> void '''setmodel''' (entity ''e'', string ''model'')

''e'' = entity whose model is to be set

''model'' = name of the model (example: &quot;progs/soldier.mdl&quot;)

Changes the model associated to an entity ''e''. This model should also be declared by [[precache_model]]. Please set e.movetype and e.solid first.</text>
      <sha1>1r5rvwyaaqhedg9zhb8qm4wwd57g83d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Setorigin</title>
    <ns>0</ns>
    <id>206</id>
    <revision>
      <id>387</id>
      <timestamp>2008-02-23T18:33:10Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  void '''setorigin''' (entity ''e'', vector ''position'')  e = entity to be moved  ''position'' = new position for the entity  Moves an entity to a given location. That function is to be u...</comment>
      <text xml:space="preserve" bytes="471"> void '''setorigin''' (entity ''e'', vector ''position'')

e = entity to be moved

''position'' = new position for the entity

Moves an entity to a given location. That function is to be used when spawning an entity or when teleporting it.
This is the only valid way to move an object without using the physics of the world (setting velocity and waiting).
DO NOT change directly e.origin, otherwise internal links would be screwed, and entity clipping would be messed up.</text>
      <sha1>smlsmo56x8mk4skxui59x0b96lx3chu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Setsize</title>
    <ns>0</ns>
    <id>208</id>
    <revision>
      <id>389</id>
      <timestamp>2008-02-23T18:38:10Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  void '''setsize''' (entity ''e'', vector ''min'', vector ''max'')  ''e'' = entity whose bounding box is to be set    ''min'' = minimum, for bounding box (ex: VEC_HULL2_MIN)  ''max'' = max...</comment>
      <text xml:space="preserve" bytes="364"> void '''setsize''' (entity ''e'', vector ''min'', vector ''max'')

''e'' = entity whose bounding box is to be set  

''min'' = minimum, for bounding box (ex: VEC_HULL2_MIN)

''max'' = maximum, for bounding box (ex: VEC_HULL2_MAX)

Sets the size of the entity bounding box, relative to the entity origin. The size box is rotated by the current angle of the entity.</text>
      <sha1>ovw2tskpovfvw9vp8wxvdsyzgfvt284</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Shambler</title>
    <ns>0</ns>
    <id>144</id>
    <revision>
      <id>226</id>
      <timestamp>2007-11-02T19:44:45Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: Even other monsters fear him, so expect a clobbering. He shrugs off explosions. Good luck.  * '''Weapon:''' Claws, Lightning Bolt * '''Health:''' 600 * '''Treasure:''' Nothing  '''Tips:'''...</comment>
      <text xml:space="preserve" bytes="1194">Even other monsters fear him, so expect a clobbering. He shrugs off explosions. Good luck.

* '''Weapon:''' Claws, Lightning Bolt
* '''Health:''' 600
* '''Treasure:''' Nothing

'''Tips:''' Truly a force to be feared. Shamblers have an immense amount of health, and take only half damage from [[Grenade Launcher|Grenades]] and [[Rocket Launcher|Rockets]]. At close range, they use their monstrous claws. At a distance, they can launch an undodgable lightning bolt that you can't run away from. There are two main strategies to kill a Shambler. The easiest is to hide behind something when you see him about to cast a lightning bolt. The harder one, which you will have to use when you have no cover, is to run right up to it, so it tries to hit you with its claws, then back away and hit it while it is swinging its arms. Get close right away, or he'll use his lightning bolt. For weapons, you will want to use either the [[Super Nailgun]] or the [[Thunderbolt]]. If you have a [[Quad Damage]], you can use the [[Double-Barrelled Shotgun]] to gib the Shambler in three shots.

'''Entity name:''' [[monster_shambler]]

[http://frikqcc.quakesrc.org/files/shambler.gif]

==See Also==
* [[Monsters]]</text>
      <sha1>9ged2klk6dv161lwsyz6znyq2p9i7t2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>290</id>
      <parentid>226</parentid>
      <timestamp>2007-11-05T22:28:28Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <text xml:space="preserve" bytes="901">Even other monsters fear him, so expect a clobbering. He shrugs off explosions. Good luck.

* '''Weapon:''' Claws, Lightning Bolt
* '''Health:''' 600
* '''Treasure:''' Nothing

'''Tips:''' Truly a force to be feared. Shamblers have an immense amount of health, and take only half damage from explosions. Shamblers may attack with either their powerful claws or a very accurate lightning attack. Due to the accuracy of the lightning, you will want to stay behind cover and taking pot shots to chip away at his health. If you find yourself without cover, stay close enough so he will prefer his claws, but do not step too far away from his strike or you will risk a lightning attack. [[Thunderbolt]] and the [[Super Nailgun]] are preferred weapons, though the [[Double-Barrelled Shotgun]] can work in a pinch.

[[Image:Shambler.gif]]

'''Entity name:''' [[monster_shambler]]

==See Also==
* [[Monsters]]</text>
      <sha1>hs8fquup6rejxbfhjq5ivi942d5x71s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>740</id>
      <parentid>290</parentid>
      <timestamp>2008-05-08T13:52:54Z</timestamp>
      <contributor>
        <ip>198.151.13.8</ip>
      </contributor>
      <text xml:space="preserve" bytes="1005">Even other monsters fear him, so expect a clobbering. He shrugs off explosions. Good luck.

* '''Weapon:''' Claws, Lightning Bolt
* '''Health:''' 600
* '''Treasure:''' Nothing

'''Tips:'''
----
Truly a force to be feared. Shamblers have an immense amount of health, and take only half damage from explosions. Shamblers may attack with either their powerful claws or a very accurate lightning attack. Due to the accuracy of the lightning, you will want to stay behind cover and taking pot shots to chip away at his health. If you find yourself without cover, stay close enough so he will prefer his claws, but do not step too far away from his strike or you will risk a lightning attack. [[Thunderbolt]] and the [[Super Nailgun]] are preferred weapons, though the [[Double-Barrelled Shotgun]] can work in a pinch.
*'''Best Weapons:''' Nailgun, Super Nailgun
*'''Worst Weapons:''' Grenade Launcher, Rocket Launcher
[[Image:Shambler.gif]]

'''Entity name:''' [[monster_shambler]]

==See Also==
* [[Monsters]]</text>
      <sha1>sk7wygg1pfe9eis83snbyhcqhxxrqp5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>850</id>
      <parentid>740</parentid>
      <timestamp>2008-05-17T18:16:01Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="1312">{{Infobox Monster
|monstername=Shambler
|entityname=monster_shambler
|monsterhealth=600
|monstermelee=Claws
|monstermissile=Lightning bolt
|movetype=
|monsterspeed=
|monsterclass=
}}

[[Image:Shambler.gif|left]]

Truly a force to be feared. A Shambler has an immense amount of health, and takes only half damage from explosions. His pride and joy is his lightning attack, and for good reason: it never misses! Unless you can duck behind cover or retreat beyond the range of the attack, you'll be hit for considerable damage. However, the Shambler's weakness could be his proclivity to use his bare hands when he can. As long as you're within melee range, he will eschew his ranged attack for a good claw swipe or two. So if cover is not available or you're feeling particularly daring, you can run up and initiate his melee attack, then quickly step back to fire shots at him while he is swinging his arms through the air in which you stood a moment before. Then, run back forward before he begins another attack, or he will choose the lightning bolt. Repeat until one of you is dead.

*'''Best Weapons:''' Nailgun, Super Nailgun
*'''Worst Weapons:''' Grenade Launcher, Rocket Launcher

''&quot;Even other monsters fear him, so expect a clobbering. He shrugs off explosions. Good luck.&quot;''

==See Also==
* [[Monsters]]</text>
      <sha1>o6ibxlsval16y5qjo42ssftnbvhyq1w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>858</id>
      <parentid>850</parentid>
      <timestamp>2008-05-17T18:52:26Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1333">{{Infobox Monster
|monstername=Shambler
|entityname=monster_shambler
|monsterhealth=600
|monstermelee=Claws
|monstermissile=Lightning bolt
|movetype=
|monsterspeed=
|monsterclass=
|monsterdrop=nothing
}}

[[Image:Shambler.gif|left]]

Truly a force to be feared. A Shambler has an immense amount of health, and takes only half damage from explosions. His pride and joy is his lightning attack, and for good reason: it never misses! Unless you can duck behind cover or retreat beyond the range of the attack, you'll be hit for considerable damage. However, the Shambler's weakness could be his proclivity to use his bare hands when he can. As long as you're within melee range, he will eschew his ranged attack for a good claw swipe or two. So if cover is not available or you're feeling particularly daring, you can run up and initiate his melee attack, then quickly step back to fire shots at him while he is swinging his arms through the air in which you stood a moment before. Then, run back forward before he begins another attack, or he will choose the lightning bolt. Repeat until one of you is dead.

*'''Best Weapons:''' Nailgun, Super Nailgun
*'''Worst Weapons:''' Grenade Launcher, Rocket Launcher

''&quot;Even other monsters fear him, so expect a clobbering. He shrugs off explosions. Good luck.&quot;''

==See Also==
* [[Monsters]]</text>
      <sha1>kanuo1xirn00o2mdckzaixf0zi2kfyo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1249</id>
      <parentid>858</parentid>
      <timestamp>2009-09-25T08:12:18Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="1214">{{Infobox Monster
|name=Shambler
|entity=monster_shambler
|model=shambler.mdl&lt;br /&gt;h_shams.mdl (head gib)
|health=600
|attacks=Claws, lightning bolt
|drop=nothing
|gameversion=Shareware
}}
[[Image:Shambler.gif|left]]
'''Shamblers''' are truly a force to be feared. They have an immense amount of health, and take only half damage from explosions. His pride and joy is his lightning attack, and for good reason: it never misses! Unless you can duck behind cover or retreat beyond the range of the attack, you'll be hit for considerable damage. However, the Shambler's weakness could be his proclivity to use his bare hands when he can. As long as you're within melee range, he will eschew his ranged attack for a good claw swipe or two. So if cover is not available or you're feeling particularly daring, you can run up and initiate his melee attack, then quickly step back to fire shots at him while he is swinging his arms through the air in which you stood a moment before. Then, run back forward before he begins another attack, or he will choose the lightning bolt. Repeat until one of you is dead.

''&quot;Even other monsters fear him, so expect a clobbering. He shrugs off explosions. Good luck.&quot;''

{{Monsters}}</text>
      <sha1>pi27kdld3u24ag3zsfqq9twrvnmufll</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1319</id>
      <parentid>1249</parentid>
      <timestamp>2009-09-27T18:56:20Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1265">{{Infobox Monster
|name=Shambler
|entity=monster_shambler
|model=shambler.mdl&lt;br /&gt;h_shams.mdl (head gib)
|health=600
|attacks=Claws, lightning bolt
|drop=nothing
|gameversion=Shareware
}}
[[Image:Shambler.png|left|thumb|A Shambler in [[e4m4]] (The Palace of Hate).]]
'''Shamblers''' are truly a force to be feared. They have an immense amount of health, and take only half damage from explosions. His pride and joy is his lightning attack, and for good reason: it never misses! Unless you can duck behind cover or retreat beyond the range of the attack, you'll be hit for considerable damage. However, the Shambler's weakness could be his proclivity to use his bare hands when he can. As long as you're within melee range, he will eschew his ranged attack for a good claw swipe or two. So if cover is not available or you're feeling particularly daring, you can run up and initiate his melee attack, then quickly step back to fire shots at him while he is swinging his arms through the air in which you stood a moment before. Then, run back forward before he begins another attack, or he will choose the lightning bolt. Repeat until one of you is dead.

''&quot;Even other monsters fear him, so expect a clobbering. He shrugs off explosions. Good luck.&quot;''

{{Monsters}}</text>
      <sha1>fgsciobp5v40o1s16hr2714nbykix0x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1388</id>
      <parentid>1319</parentid>
      <timestamp>2009-10-08T23:24:12Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1306">{{Infobox Monster
|name=Shambler
|entity=monster_shambler
|model=shambler.mdl&lt;br /&gt;h_shams.mdl (head gib)
|health=600
|attacks=Claws, lightning bolt
|drop=nothing
|1stappearance=[[e1m5]], [[e1m3]] (Hard)
|gameversion=Shareware
}}
[[Image:Shambler.png|left|thumb|A Shambler in [[e4m4]] (The Palace of Hate).]]
'''Shamblers''' are truly a force to be feared. They have an immense amount of health, and take only half damage from explosions. His pride and joy is his lightning attack, and for good reason: it never misses! Unless you can duck behind cover or retreat beyond the range of the attack, you'll be hit for considerable damage. However, the Shambler's weakness could be his proclivity to use his bare hands when he can. As long as you're within melee range, he will eschew his ranged attack for a good claw swipe or two. So if cover is not available or you're feeling particularly daring, you can run up and initiate his melee attack, then quickly step back to fire shots at him while he is swinging his arms through the air in which you stood a moment before. Then, run back forward before he begins another attack, or he will choose the lightning bolt. Repeat until one of you is dead.

''&quot;Even other monsters fear him, so expect a clobbering. He shrugs off explosions. Good luck.&quot;''

{{Monsters}}</text>
      <sha1>9jvv74gh9oxprzw51uju7t1u4ll59qz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1402</id>
      <parentid>1388</parentid>
      <timestamp>2009-10-08T23:49:46Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1346">{{Infobox Monster
|name=Shambler
|entity=monster_shambler
|model=shambler.mdl&lt;br /&gt;h_shams.mdl (head gib)
|health=600
|attacks=Claws, lightning bolt
|drop=nothing
|1stappearance=[[e1m5]], [[e1m3]] (Hard)
|gameversion=Shareware
}}
[[Image:Shambler.png|left|thumb|A Shambler in [[e4m4]] (The Palace of Hate).]]
''&quot;Even other monsters fear him, so expect a clobbering. He shrugs off explosions. Good luck.&quot;''

'''Shamblers''' are truly a force to be feared. They have an immense amount of health, and take only half damage from explosions. His pride and joy is his lightning attack, and for good reason: it never misses! Unless you can duck behind cover or retreat beyond the range of the attack, you'll be hit for considerable damage. However, the Shambler's weakness could be his proclivity to use his bare hands when he can. As long as you're within melee range, he will eschew his ranged attack for a good claw swipe or two. So if cover is not available or you're feeling particularly daring, you can run up and initiate his melee attack, then quickly step back to fire shots at him while he is swinging his arms through the air in which you stood a moment before. Then, run back forward before he begins another attack, or he will choose the lightning bolt. Repeat until one of you is dead.

''&quot;Player was smashed by a Shambler&quot;''

{{Monsters}}</text>
      <sha1>pykj8j8758f007llcf8f2o504513cy7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2843</id>
      <parentid>1402</parentid>
      <timestamp>2013-04-08T13:59:34Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>updated infobox</comment>
      <text xml:space="preserve" bytes="1388">{{Infobox Monster
| name = Shambler
| image = monster_quake_shambler.png
| manualtext = Even other monsters fear him, so expect a clobbering. He shrugs off explosions. Good luck.
| health = 600
| attacks = Claws, lightning bolt
| drop = nothing
| 1stappearance = [[e1m5]], [[e1m3]] (Hard)
| gameversion = Shareware
| deathmessage = Player was smashed by a Shambler
}}

[[Image:Shambler.png|left|thumb|A Shambler in [[e4m4]] (The Palace of Hate).]]

'''Shamblers''' are truly a force to be feared. They have an immense amount of health, and take only half damage from explosions. His pride and joy is his lightning attack, and for good reason: it never misses! Unless you can duck behind cover or retreat beyond the range of the attack, you'll be hit for considerable damage. However, the Shambler's weakness could be his proclivity to use his bare hands when he can. As long as you're within melee range, he will eschew his ranged attack for a good claw swipe or two. So if cover is not available or you're feeling particularly daring, you can run up and initiate his melee attack, then quickly step back to fire shots at him while he is swinging his arms through the air in which you stood a moment before. Then, run back forward before he begins another attack, or he will choose the lightning bolt. Repeat until one of you is dead.

''&quot;Player was smashed by a Shambler&quot;''

{{Monsters}}</text>
      <sha1>lv0gdbu0clmvwasu2awkjgh8q2c6083</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2861</id>
      <parentid>2843</parentid>
      <timestamp>2013-04-08T15:27:32Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>quickly added rough entity info</comment>
      <text xml:space="preserve" bytes="3509">{{Infobox Monster
| name = Shambler
| image = monster_quake_shambler.png
| manualtext = Even other monsters fear him, so expect a clobbering. He shrugs off explosions. Good luck.
| health = 600
| attacks = Claws, lightning bolt
| drop = nothing
| 1stappearance = [[e1m5]], [[e1m3]] (Hard)
| gameversion = Shareware
| deathmessage = Player was smashed by a Shambler
}}

[[Image:Shambler.png|left|thumb|A Shambler in [[e4m4]] (The Palace of Hate).]]

'''Shamblers''' are truly a force to be feared. They have an immense amount of health, and take only half damage from explosions. His pride and joy is his lightning attack, and for good reason: it never misses! Unless you can duck behind cover or retreat beyond the range of the attack, you'll be hit for considerable damage. However, the Shambler's weakness could be his proclivity to use his bare hands when he can. As long as you're within melee range, he will eschew his ranged attack for a good claw swipe or two. So if cover is not available or you're feeling particularly daring, you can run up and initiate his melee attack, then quickly step back to fire shots at him while he is swinging his arms through the air in which you stood a moment before. Then, run back forward before he begins another attack, or he will choose the lightning bolt. Repeat until one of you is dead.

==Tactics==

&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_shambler
| commonname = [[Shambler]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 88
| quakec = [[shambler.qc]]
| precaches =
progs/shambler.mdl&lt;br&gt;
progs/s_light.mdl&lt;br&gt;
progs/h_shams.mdl&lt;br&gt;
progs/bolt.mdl&lt;br&gt;
shambler/sattck1.wav&lt;br&gt;
shambler/sboom.wav&lt;br&gt;
shambler/sdeath.wav&lt;br&gt;
shambler/shurt2.wav&lt;br&gt;
shambler/sidle.wav&lt;br&gt;
shambler/ssight.wav&lt;br&gt;
shambler/melee1.wav&lt;br&gt;
shambler/melee2.wav&lt;br&gt;
shambler/smack.wav
}}

==Entity information==

'''monster_shambler''' is the [[Entity|entity]] for placing '''Shamblers''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Shambler. When triggered, the Shambler will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Shambler dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Shambler dies.
|}

====Spawnflags====
The monster_army entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Shambler will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Shambler
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-32 -32 -24, 32 32 64) model(&quot;:progs/shambler.mdl&quot;)
    = monster_shambler : &quot;Shambler&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_shambler (1 0 0) (-32 -32 -24) (32 32 64) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>p23g9rkphwe17yy3ib80tdwi1p483jc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2944</id>
      <parentid>2861</parentid>
      <timestamp>2013-05-04T15:45:37Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <minor/>
      <comment>yay gibs</comment>
      <text xml:space="preserve" bytes="3527">{{Infobox Monster
| name = Shambler
| image = monster_quake_shambler.png
| manualtext = Even other monsters fear him, so expect a clobbering. He shrugs off explosions. Good luck.
| health = 600
| gibthresh = -60
| attacks = Claws, lightning bolt
| drop = nothing
| 1stappearance = [[e1m5]], [[e1m3]] (Hard)
| gameversion = Shareware
| deathmessage = Player was smashed by a Shambler
}}

[[Image:Shambler.png|left|thumb|A Shambler in [[e4m4]] (The Palace of Hate).]]

'''Shamblers''' are truly a force to be feared. They have an immense amount of health, and take only half damage from explosions. His pride and joy is his lightning attack, and for good reason: it never misses! Unless you can duck behind cover or retreat beyond the range of the attack, you'll be hit for considerable damage. However, the Shambler's weakness could be his proclivity to use his bare hands when he can. As long as you're within melee range, he will eschew his ranged attack for a good claw swipe or two. So if cover is not available or you're feeling particularly daring, you can run up and initiate his melee attack, then quickly step back to fire shots at him while he is swinging his arms through the air in which you stood a moment before. Then, run back forward before he begins another attack, or he will choose the lightning bolt. Repeat until one of you is dead.

==Tactics==

&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_shambler
| commonname = [[Shambler]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 88
| quakec = [[shambler.qc]]
| precaches =
progs/shambler.mdl&lt;br&gt;
progs/s_light.mdl&lt;br&gt;
progs/h_shams.mdl&lt;br&gt;
progs/bolt.mdl&lt;br&gt;
shambler/sattck1.wav&lt;br&gt;
shambler/sboom.wav&lt;br&gt;
shambler/sdeath.wav&lt;br&gt;
shambler/shurt2.wav&lt;br&gt;
shambler/sidle.wav&lt;br&gt;
shambler/ssight.wav&lt;br&gt;
shambler/melee1.wav&lt;br&gt;
shambler/melee2.wav&lt;br&gt;
shambler/smack.wav
}}

==Entity information==

'''monster_shambler''' is the [[Entity|entity]] for placing '''Shamblers''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Shambler. When triggered, the Shambler will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Shambler dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Shambler dies.
|}

====Spawnflags====
The monster_army entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Shambler will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Shambler
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-32 -32 -24, 32 32 64) model(&quot;:progs/shambler.mdl&quot;)
    = monster_shambler : &quot;Shambler&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_shambler (1 0 0) (-32 -32 -24) (32 32 64) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>sqkt3l669qrl9afsbszfsztgymqmgg9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3002</id>
      <parentid>2944</parentid>
      <timestamp>2013-08-27T19:41:03Z</timestamp>
      <contributor>
        <ip>174.106.183.23</ip>
      </contributor>
      <comment>it said monster_army instead of shambler</comment>
      <text xml:space="preserve" bytes="3531">{{Infobox Monster
| name = Shambler
| image = monster_quake_shambler.png
| manualtext = Even other monsters fear him, so expect a clobbering. He shrugs off explosions. Good luck.
| health = 600
| gibthresh = -60
| attacks = Claws, lightning bolt
| drop = nothing
| 1stappearance = [[e1m5]], [[e1m3]] (Hard)
| gameversion = Shareware
| deathmessage = Player was smashed by a Shambler
}}

[[Image:Shambler.png|left|thumb|A Shambler in [[e4m4]] (The Palace of Hate).]]

'''Shamblers''' are truly a force to be feared. They have an immense amount of health, and take only half damage from explosions. His pride and joy is his lightning attack, and for good reason: it never misses! Unless you can duck behind cover or retreat beyond the range of the attack, you'll be hit for considerable damage. However, the Shambler's weakness could be his proclivity to use his bare hands when he can. As long as you're within melee range, he will eschew his ranged attack for a good claw swipe or two. So if cover is not available or you're feeling particularly daring, you can run up and initiate his melee attack, then quickly step back to fire shots at him while he is swinging his arms through the air in which you stood a moment before. Then, run back forward before he begins another attack, or he will choose the lightning bolt. Repeat until one of you is dead.

==Tactics==

&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_shambler
| commonname = [[Shambler]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 88
| quakec = [[shambler.qc]]
| precaches =
progs/shambler.mdl&lt;br&gt;
progs/s_light.mdl&lt;br&gt;
progs/h_shams.mdl&lt;br&gt;
progs/bolt.mdl&lt;br&gt;
shambler/sattck1.wav&lt;br&gt;
shambler/sboom.wav&lt;br&gt;
shambler/sdeath.wav&lt;br&gt;
shambler/shurt2.wav&lt;br&gt;
shambler/sidle.wav&lt;br&gt;
shambler/ssight.wav&lt;br&gt;
shambler/melee1.wav&lt;br&gt;
shambler/melee2.wav&lt;br&gt;
shambler/smack.wav
}}

==Entity information==

'''monster_shambler''' is the [[Entity|entity]] for placing '''Shamblers''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Shambler. When triggered, the Shambler will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Shambler dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Shambler dies.
|}

====Spawnflags====
The monster_shambler entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Shambler will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Shambler
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-32 -32 -24, 32 32 64) model(&quot;:progs/shambler.mdl&quot;)
    = monster_shambler : &quot;Shambler&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_shambler (1 0 0) (-32 -32 -24) (32 32 64) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>gefnualqj2ik47vmje597fv6r5npc31</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Shotgun</title>
    <ns>0</ns>
    <id>405</id>
    <revision>
      <id>691</id>
      <timestamp>2008-05-07T19:52:01Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page:  == Description ==  The shotgun is a weapon Quake just wouldn't be complete without. Despite the fact that it has fairly low ratings, for a starting weapon it's quite powerful. Regardless ...</comment>
      <text xml:space="preserve" bytes="1674">
== Description ==

The shotgun is a weapon Quake just wouldn't be complete without. Despite the fact that it has fairly low ratings, for a starting weapon it's quite powerful. Regardless of range (within reason), you are able to kill an opponent with relatively few shots. And, since you get 25 shells along with it, you have a fair chance of making a few frags without having to pick up any ammo or another weapon. With so many weapons that are many times better, though, you won't find yourself using it much if you have much else - but it's always a good thing to keep around. Plus, it's free... and we all know you can't beat that.

Using the shotgun is a fairly simple process. It's good for both distance and close range combat. For distances, you should stay relatively still and try your hardest to hit your opponent as many times as possible. Usually it will take awhile for opponents to realize where the shots are coming from, but once they do they may be able to clean you out very quickly, so be ready to move out of the way. At close range, do a lot of jumping while firing it. It is easy for you to hit an opponent while you are jumping around, but it will be quite difficult for him to hit you.

Avoiding the shotgun is easy, if you remember one thing: since the shotgun has a narrow spread, it requires decent aim to use. Because of this, the more you move the harder it will be for your opponent to hit you. There is no specific pattern that helps best in avoiding the gun - just about anything done randomly will work quite effectively. Choose your defense based on whatever weapon you are using.

----
'''Effectiveness:''' Poor

'''Avoidability:''' Poor</text>
      <sha1>le1ylf61v5rso1t4rf2yxx4iazx6vhk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>988</id>
      <parentid>691</parentid>
      <timestamp>2009-05-22T08:42:32Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>as the current weapon descriptions were taken from http://euroquake.webs.com/guides2.htm i am getting the old ones from archive.org</comment>
      <text xml:space="preserve" bytes="604">{{Infobox Weapon
|weapon=Shotgun
|ammotype=[[Shells]]
|ammousage=1 per shot
|shottype=hitscan
|dpshot=24, divided amongst 6 pellets
|dpsecond=48
|range=2048 units
|cycletime=0.5s
}}

The basic weapon, to which all other weapons compare favourably.

You start with this weapon and end with this weapon, and it is never used much. Firing it uses up 1 Shell. You will use it in the base levels, before you find more powerful weapons, and occasionally later on, mostly for hitting monsters at long range when you have run out of (or don't want to waste) [[Nails]] and [[Rockets]].

==See Also==
* [[Weapons]]</text>
      <sha1>d6w5wwt3p4f9x6j93x0zligxa7gl5g9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1294</id>
      <parentid>988</parentid>
      <timestamp>2009-09-27T09:59:24Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="685">{{Infobox Weapon
|weapon=Shotgun
|ammotype=[[Shells]]
|ammousage=1 per shot
|shottype=hitscan
|dpshot=24, divided amongst 6 pellets
|dpsecond=48
|range=2048 units
|cycletime=0.5s
}}
The '''shotgun''' (sometimes referred to as the [[boomstick]]) is the weapon you start with. It is not very powerful but remains useful throughout the singleplayer campaign for hitting monsters (such as [[Scrags]]) at long range, when a slow-moving projectile won't do. For close-range combat its use is completely eclipsed once you pick up the [[Double-Barrelled Shotgun]], which is more efficient in both damage over time and damage per shell used (but has a wider spread).

==See Also==
* [[Weapons]]</text>
      <sha1>oaiyh2av6n3j4horb2a5iijjx65dnbs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1295</id>
      <parentid>1294</parentid>
      <timestamp>2009-09-27T09:59:35Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="685">{{Infobox Weapon
|weapon=Shotgun
|ammotype=[[Shells]]
|ammousage=1 per shot
|shottype=hitscan
|dpshot=24, divided amongst 6 pellets
|dpsecond=48
|range=2048 units
|cycletime=0.5s
}}
The '''shotgun''' (sometimes referred to as the [[boomstick]]) is the weapon you start with. It is not very powerful but remains useful throughout the singleplayer campaign for hitting monsters (such as [[Scrag]]s) at long range, when a slow-moving projectile won't do. For close-range combat its use is completely eclipsed once you pick up the [[Double-Barrelled Shotgun]], which is more efficient in both damage over time and damage per shell used (but has a wider spread).

==See Also==
* [[Weapons]]</text>
      <sha1>55ka3gb9i4yst7wpywyzizdtrpq4bqu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1307</id>
      <parentid>1295</parentid>
      <timestamp>2009-09-27T18:35:49Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="670">{{Infobox Weapon
|weapon=Shotgun
|ammotype=[[Shells]]
|ammousage=1 per shot
|shottype=hitscan
|dpshot=24, divided amongst 6 pellets
|dpsecond=48
|range=2048 units
|cycletime=0.5s
}}
The '''shotgun''' (sometimes referred to as the [[boomstick]]) is the weapon you start with. It is not very powerful but remains useful throughout the singleplayer campaign for hitting monsters (such as [[Scrag]]s) at long range, when a slow-moving projectile won't do. For close-range combat its use is completely eclipsed once you pick up the [[Double-Barrelled Shotgun]], which is more efficient in both damage over time and damage per shell used (but has a wider spread).

{{Weapons}}</text>
      <sha1>ccen4917y6yt2tlp8ajbrfuiwmkfhcl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3042</id>
      <parentid>1307</parentid>
      <timestamp>2013-12-18T00:58:57Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <text xml:space="preserve" bytes="742">{{Infobox Weapon
|weapon=Shotgun
|image_v=v_shotgun.png
|ammotype=[[Shells]]
|ammousage=1 per shot
|shottype=[[Hitscan]]
|dpshot=24, divided amongst 6 pellets
|dpsecond=48
|range=2048 [[unit]]s
|cycletime=0.5s
|1stappearance=Default weapon
|obituary1=(Target) chewed on (attacker)'s boomstick. 
}}

The '''Shotgun''' is the weapon you start with. It is not very powerful but remains useful throughout the singleplayer campaign for hitting monsters (such as [[Scrag]]s) at long range, when a slow-moving projectile won't do. For close-range combat its use is completely eclipsed once you pick up the [[Double-Barrelled Shotgun]], which is more efficient in both damage over time and damage per shell used (but has a wider spread).

{{Weapons}}</text>
      <sha1>dwclydb43905aplsenwcsbrgnhhg8v4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3051</id>
      <parentid>3042</parentid>
      <timestamp>2013-12-18T02:47:40Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <text xml:space="preserve" bytes="812">{{Infobox Weapon
|weapon=Shotgun
|image_v=v_shotgun.png
|manualtext=The basic gun, to which all other guns compare favorably.
|ammotype=[[Shells]]
|ammousage=1 per shot
|shottype=[[Hitscan]]
|dpshot=24, divided amongst 6 pellets
|dpsecond=48
|range=2048 [[unit]]s
|cycletime=0.5s
|1stappearance=Default weapon
|obituary1=(Target) chewed on (attacker)'s boomstick. 
}}

The '''Shotgun''' is the weapon you start with. It is not very powerful but remains useful throughout the singleplayer campaign for hitting monsters (such as [[Scrag]]s) at long range, when a slow-moving projectile won't do. For close-range combat its use is completely eclipsed once you pick up the [[Double-Barrelled Shotgun]], which is more efficient in both damage over time and damage per shell used (but has a wider spread).

{{Weapons}}</text>
      <sha1>2kfnflwg7mx1nu2z9a0dg0hl9s44jvj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Showpause</title>
    <ns>0</ns>
    <id>924</id>
    <redirect title="showpause" />
    <revision>
      <id>2615</id>
      <timestamp>2013-03-29T14:22:19Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Showpause]] to [[showpause]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="23">#REDIRECT [[showpause]]</text>
      <sha1>4oxnrs74ifuzwe80bez69k3b0zaqn0d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Showram</title>
    <ns>0</ns>
    <id>925</id>
    <redirect title="showram" />
    <revision>
      <id>2617</id>
      <timestamp>2013-03-29T14:22:20Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Showram]] to [[showram]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="21">#REDIRECT [[showram]]</text>
      <sha1>8o2824frs2q2i8f6iw3o8ganbwbbnks</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Showturtle</title>
    <ns>0</ns>
    <id>926</id>
    <redirect title="showturtle" />
    <revision>
      <id>2619</id>
      <timestamp>2013-03-29T14:22:20Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Showturtle]] to [[showturtle]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="24">#REDIRECT [[showturtle]]</text>
      <sha1>e0dh7g1y305e66c0w8njy7jd8a5zkja</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Shub-Niggurath</title>
    <ns>0</ns>
    <id>146</id>
    <revision>
      <id>228</id>
      <timestamp>2007-11-02T19:47:01Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: * '''Weapon:''' None * '''Health:''' N/A * '''Treasure:''' None  '''Tips:''' The mighty Shub-Niggurath turns out to be an enormous wad of lard with tentacles. She can't even attack, but wa...</comment>
      <text xml:space="preserve" bytes="823">* '''Weapon:''' None
* '''Health:''' N/A
* '''Treasure:''' None

'''Tips:''' The mighty Shub-Niggurath turns out to be an enormous wad of lard with tentacles. She can't even attack, but watch out -- she has a lot of [[Vore|Vores]] and [[Shambler|Shamblers]] guarding her, and more will spawn in occasionally. To kill her, you need to [[telefrag]] her. See the spikey ball that floats around the level? See the teleporter at the end of the monster- and trap-infested hallway? When you step in the teleporter, you will warp to the location of the spikey ball. Do it when the spikey ball enters Shub-Niggurath, and you'll blow her to pieces. If you do it some other time, you'll most likely fall into the lava.

'''Entity name:''' [[monster_oldone]]

[http://frikqcc.quakesrc.org/files/oldone.gif]

==See Also==
* [[Monsters]]</text>
      <sha1>ko5c1zfrr0w896azcyvn6objjxjsimp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1250</id>
      <parentid>228</parentid>
      <timestamp>2009-09-25T08:13:56Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="829">{{Infobox Monster
|name=Shub-Niggurath
|entity=monster_oldone
|model=oldone.mdl
|health=n/a
|attacks=none
|drop=nothing
|gameversion=Registered
}}
'''Shub-Niggurath''' is the end boss of [[Quake]].

The mighty Shub-Niggurath turns out to be an enormous wad of lard with tentacles. She can't even attack, but watch out -- she has a lot of [[Vore]]s and [[Shambler]]s guarding her, and more will spawn in occasionally. To kill her, you need to [[telefrag]] her. See the spikey ball that floats around the level? See the teleporter at the end of the monster- and trap-infested hallway? When you step in the teleporter, you will warp to the location of the spikey ball. Do it when the spikey ball enters Shub-Niggurath, and you'll blow her to pieces. If you do it some other time, you'll most likely fall into the lava.

{{Monsters}}</text>
      <sha1>cvx30alu2v0dvxcud2fbkw4lt2rfqou</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1389</id>
      <parentid>1250</parentid>
      <timestamp>2009-10-08T23:24:28Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="852">{{Infobox Monster
|name=Shub-Niggurath
|entity=monster_oldone
|model=oldone.mdl
|health=n/a
|attacks=none
|drop=nothing
|1stappearance=[[end]]
|gameversion=Registered
}}
'''Shub-Niggurath''' is the end boss of [[Quake]].

The mighty Shub-Niggurath turns out to be an enormous wad of lard with tentacles. She can't even attack, but watch out -- she has a lot of [[Vore]]s and [[Shambler]]s guarding her, and more will spawn in occasionally. To kill her, you need to [[telefrag]] her. See the spikey ball that floats around the level? See the teleporter at the end of the monster- and trap-infested hallway? When you step in the teleporter, you will warp to the location of the spikey ball. Do it when the spikey ball enters Shub-Niggurath, and you'll blow her to pieces. If you do it some other time, you'll most likely fall into the lava.

{{Monsters}}</text>
      <sha1>7jtfxbd7xwahz5dv6h63dql1see8fqh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2847</id>
      <parentid>1389</parentid>
      <timestamp>2013-04-08T14:05:31Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>updated infobox</comment>
      <text xml:space="preserve" bytes="911">{{Infobox Monster
| name = Shub-Niggurath
| image = monster_quake_shub_niggurath.png
| manualtext = 
| health = N/A
| attacks = None
| drop = Nothing
| 1stappearance = [[end]]
| gameversion = Registered
| deathmessage = None
}}

'''Shub-Niggurath''' is the end boss of [[Quake]].

The mighty Shub-Niggurath turns out to be an enormous wad of lard with tentacles. She can't even attack, but watch out -- she has a lot of [[Vore]]s and [[Shambler]]s guarding her, and more will spawn in occasionally. To kill her, you need to [[telefrag]] her. See the spikey ball that floats around the level? See the teleporter at the end of the monster- and trap-infested hallway? When you step in the teleporter, you will warp to the location of the spikey ball. Do it when the spikey ball enters Shub-Niggurath, and you'll blow her to pieces. If you do it some other time, you'll most likely fall into the lava.

{{Monsters}}</text>
      <sha1>5cbtsi5ss9i2wfzy26xnxyns6tul969</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2884</id>
      <parentid>2847</parentid>
      <timestamp>2013-04-09T04:57:12Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>added basic entity info</comment>
      <text xml:space="preserve" bytes="2622">{{Infobox Monster
| name = Shub-Niggurath
| image = monster_quake_shub_niggurath.png
| manualtext = 
| health = N/A
| attacks = None
| drop = Nothing
| 1stappearance = [[end]]
| gameversion = Registered
| deathmessage = None
}}

'''Shub-Niggurath''' is the end boss of [[Quake]].

The mighty Shub-Niggurath turns out to be an enormous wad of lard with tentacles. She can't even attack, but watch out -- she has a lot of [[Vore]]s and [[Shambler]]s guarding her, and more will spawn in occasionally. To kill her, you need to [[telefrag]] her. See the spikey ball that floats around the level? See the teleporter at the end of the monster- and trap-infested hallway? When you step in the teleporter, you will warp to the location of the spikey ball. Do it when the spikey ball enters Shub-Niggurath, and you'll blow her to pieces. If you do it some other time, you'll most likely fall into the lava.

==Tactics==

&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_oldone
| commonname = [[Shub-Niggurath]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 320 x 256 x 280
| quakec = [[oldone.qc]]
| precaches =
progs/oldone.mdl&lt;br&gt;
boss2/death.wav&lt;br&gt;
boss2/idle.wav&lt;br&gt;
boss2/sight.wav&lt;br&gt;
boss2/pop2.wav
}}

==Entity information==

'''monster_oldone''' is the [[Entity|entity]] for placing '''Shub-Niggurath''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Grunt. When triggered, Shub-Niggurath will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when Shub-Niggurath dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when Shub-Niggurath dies.
|}

====Spawnflags====
The monster_oldone entity supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = Shub-Niggurath
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-160 -128 -24, 160 128 256) model(&quot;:progs/oldone.mdl&quot;)
    = monster_oldone : &quot;Shub-Niggurath&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_oldone (1 0 0) (-160 -128 -24) (160 128 256)
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>tjeg12y3s4yalulhbffw89snese1kor</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2885</id>
      <parentid>2884</parentid>
      <timestamp>2013-04-09T05:00:27Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>/* Keys */  removed The Grunt</comment>
      <text xml:space="preserve" bytes="2627">{{Infobox Monster
| name = Shub-Niggurath
| image = monster_quake_shub_niggurath.png
| manualtext = 
| health = N/A
| attacks = None
| drop = Nothing
| 1stappearance = [[end]]
| gameversion = Registered
| deathmessage = None
}}

'''Shub-Niggurath''' is the end boss of [[Quake]].

The mighty Shub-Niggurath turns out to be an enormous wad of lard with tentacles. She can't even attack, but watch out -- she has a lot of [[Vore]]s and [[Shambler]]s guarding her, and more will spawn in occasionally. To kill her, you need to [[telefrag]] her. See the spikey ball that floats around the level? See the teleporter at the end of the monster- and trap-infested hallway? When you step in the teleporter, you will warp to the location of the spikey ball. Do it when the spikey ball enters Shub-Niggurath, and you'll blow her to pieces. If you do it some other time, you'll most likely fall into the lava.

==Tactics==

&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_oldone
| commonname = [[Shub-Niggurath]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 320 x 256 x 280
| quakec = [[oldone.qc]]
| precaches =
progs/oldone.mdl&lt;br&gt;
boss2/death.wav&lt;br&gt;
boss2/idle.wav&lt;br&gt;
boss2/sight.wav&lt;br&gt;
boss2/pop2.wav
}}

==Entity information==

'''monster_oldone''' is the [[Entity|entity]] for placing '''Shub-Niggurath''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of Shub-Niggurath. When triggered, Shub-Niggurath will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when Shub-Niggurath dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when Shub-Niggurath dies.
|}

====Spawnflags====
The monster_oldone entity supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = Shub-Niggurath
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-160 -128 -24, 160 128 256) model(&quot;:progs/oldone.mdl&quot;)
    = monster_oldone : &quot;Shub-Niggurath&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_oldone (1 0 0) (-160 -128 -24) (160 128 256)
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>czj3xong24b888qv74veva06o47ebc7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2945</id>
      <parentid>2885</parentid>
      <timestamp>2013-05-04T15:55:56Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <minor/>
      <comment>gibs!</comment>
      <text xml:space="preserve" bytes="2760">{{Infobox Monster
| name = Shub-Niggurath
| image = monster_quake_shub_niggurath.png
| manualtext = 
| health = 40000 (regenerates to full if damaged)
| gibthresh = N/A (must be [[telefrag|telefragged]])
| attacks = None
| drop = Nothing
| 1stappearance = [[end]]
| gameversion = Registered
| deathmessage = Player became one with Shub-Niggurath. ''(unused)
}}

'''Shub-Niggurath''' is the end boss of [[Quake]].

The mighty Shub-Niggurath turns out to be an enormous wad of lard with tentacles. She can't even attack, but watch out -- she has a lot of [[Vore]]s and [[Shambler]]s guarding her, and more will spawn in occasionally. To kill her, you need to [[telefrag]] her. See the spikey ball that floats around the level? See the teleporter at the end of the monster- and trap-infested hallway? When you step in the teleporter, you will warp to the location of the spikey ball. Do it when the spikey ball enters Shub-Niggurath, and you'll blow her to pieces. If you do it some other time, you'll most likely fall into the lava.

==Tactics==

&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_oldone
| commonname = [[Shub-Niggurath]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 320 x 256 x 280
| quakec = [[oldone.qc]]
| precaches =
progs/oldone.mdl&lt;br&gt;
boss2/death.wav&lt;br&gt;
boss2/idle.wav&lt;br&gt;
boss2/sight.wav&lt;br&gt;
boss2/pop2.wav
}}

==Entity information==

'''monster_oldone''' is the [[Entity|entity]] for placing '''Shub-Niggurath''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of Shub-Niggurath. When triggered, Shub-Niggurath will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when Shub-Niggurath dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when Shub-Niggurath dies.
|}

====Spawnflags====
The monster_oldone entity supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = Shub-Niggurath
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-160 -128 -24, 160 128 256) model(&quot;:progs/oldone.mdl&quot;)
    = monster_oldone : &quot;Shub-Niggurath&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_oldone (1 0 0) (-160 -128 -24) (160 128 256)
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>1u3qjpjjdexluua1r2jm1mzvp7u3yu0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Singleplayer guide</title>
    <ns>0</ns>
    <id>3</id>
    <revision>
      <id>6</id>
      <timestamp>2007-10-30T16:24:21Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: * [[Singleplayer Maps| Maps]] - Guides through all the levels in Single-Player Quake. * [[Monsters]] - Info and tips on all the monsters you'll face. * [[Weapons]] - Your tools of death. *...</comment>
      <text xml:space="preserve" bytes="315">* [[Singleplayer Maps| Maps]] - Guides through all the levels in Single-Player Quake.
* [[Monsters]] - Info and tips on all the monsters you'll face.
* [[Weapons]] - Your tools of death.
* [[Items]] - Info about the weapons and items you'll find lying around the Quake levels.
* [[Hazards]] - Environmental Hazards.</text>
      <sha1>75rnqjkdci6lh6qbp2mtbzfalx0p17w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>18</id>
      <parentid>6</parentid>
      <timestamp>2007-10-30T16:48:07Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <comment>[[Singleplayer Guide]] moved to [[Singleplayer guide]]</comment>
      <text xml:space="preserve" bytes="315">* [[Singleplayer Maps| Maps]] - Guides through all the levels in Single-Player Quake.
* [[Monsters]] - Info and tips on all the monsters you'll face.
* [[Weapons]] - Your tools of death.
* [[Items]] - Info about the weapons and items you'll find lying around the Quake levels.
* [[Hazards]] - Environmental Hazards.</text>
      <sha1>75rnqjkdci6lh6qbp2mtbzfalx0p17w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1285</id>
      <parentid>18</parentid>
      <timestamp>2009-09-27T08:18:39Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="314">* [[Singleplayer maps|Maps]] - Guides through all the levels in Single-Player Quake.
* [[Monsters]] - Info and tips on all the monsters you'll face.
* [[Weapons]] - Your tools of death.
* [[Items]] - Info about the weapons and items you'll find lying around the Quake levels.
* [[Hazards]] - Environmental Hazards.</text>
      <sha1>m771qt1p15sax5s33rmqgi4uv77iw02</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Singleplayer maps</title>
    <ns>0</ns>
    <id>4</id>
    <revision>
      <id>7</id>
      <timestamp>2007-10-30T16:29:02Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: This page catalogs all the single player levels included with [[Quake]], [[Scourge of Armagon]] and [[Dissolution of Eternity]]. Infos about the author, secrets, etc.  ===[[Quake]] Maps===...</comment>
      <text xml:space="preserve" bytes="3051">This page catalogs all the single player levels included with [[Quake]], [[Scourge of Armagon]] and [[Dissolution of Eternity]]. Infos about the author, secrets, etc.

===[[Quake]] Maps===
* '''[[start]]''' Introduction - [[John Romero]]
* '''[[e1m1]]''' The Slipgate Complex - John Romero
* '''[[e1m2]]''' Castle of the Damned - [[Tim Willits]]
* '''[[e1m3]]''' The Necropolis - Tim Willits
* '''[[e1m4]]''' The Grisly Grotto - Tim Willits
* '''[[e1m5]]''' Gloom Keep - Tim Willits
* '''[[e1m6]]''' The Door to Chthon - [[American McGee]]
* '''[[e1m7]]''' The House of Chthon - American McGee
* '''[[e1m8]]''' Ziggurat Vertigo - American McGee
* '''[[e2m1]]''' The Installation - John Romero
* '''[[e2m2]]''' The Ogre Citadel - John Romero
* '''[[e2m3]]''' The Crypt of Decay - John Romero
* '''[[e2m4]]''' The Ebon Fortress - John Romero
* '''[[e2m5]]''' The Wizard's Manse - John Romero
* '''[[e2m6]]''' The Dismal Oubliette - John Romero
* '''[[e2m7]]''' The Underearth - Tim Willits
* '''[[e3m1]]''' Termination Central - John Romero
* '''[[e3m2]]''' The Vaults of Zin - American McGee
* '''[[e3m3]]''' The Tomb of Terror - American McGee
* '''[[e3m4]]''' Satan's Dark Delight - American McGee
* '''[[e3m5]]''' The Wind Tunnels - Tim Willits
* '''[[e3m6]]''' Chambers of Torment - American McGee &amp; Tim Willits
* '''[[e3m7]]''' The Haunted Halls - American McGee
* '''[[e4m1]]''' The Sewage System - Tim Willits
* '''[[e4m2]]''' The Tower of Despair - [[Sandy Petersen]]
* '''[[e4m3]]''' The Elder God Shrine - Sandy Petersen
* '''[[e4m4]]''' The Palace of Hate - Sandy Petersen
* '''[[e4m5]]''' Hell's Atrium - Sandy Petersen
* '''[[e4m6]]''' The Pain Maze - Sandy Petersen
* '''[[e4m7]]''' Azure Agony - Sandy Petersen
* '''[[e4m8]]''' The Nameless City - Sandy Petersen
* '''[[end]]''' Shub-Niggurath's Pit - John Romero

===[[Scourge of Armagon]] Maps===
* '''[[start (Scourge of Armagon)|start]]''' Command HQ
* '''[[hip1m1]]''' The Pumping Station
* '''[[hip1m2]]''' Storage Facility
* '''[[hip1m3]]''' The Lost Mine
* '''[[hip1m4]]''' Research Facility
* '''[[hip1m5]]''' Military Complex
* '''[[hip2m1]]''' Ancient Realms
* '''[[hip2m2]]''' The Black Cathedral
* '''[[hip2m3]]''' The Catacombs
* '''[[hip2m4]]''' The Crypt
* '''[[hip2m5]]''' Mortum's Keep
* '''[[hip2m6]]''' The Gremlin's Domain
* '''[[hip3m1]]''' Tur Torment
* '''[[hip3m2]]''' Pandemonium
* '''[[hip3m3]]''' Limbo
* '''[[hip3m4]]''' The Gauntlet
* '''[[hipend]]''' Armagon's Lair

===[[Dissolution of Eternity]] Maps===
* '''[[start (Dissolution of Eternity)|start]]''' Introduction
* '''[[r1m1]]''' Deviant's Domain
* '''[[r1m2]]''' Dread Portal
* '''[[r1m3]]''' Judgement Call
* '''[[r1m4]]''' Cave of Death
* '''[[r1m5]]''' Towers of Wrath
* '''[[r1m6]]''' Temple of Pain
* '''[[r1m7]]''' Tomb of the Overlord
* '''[[r2m1]]''' Tempus Fugit
* '''[[r2m2]]''' Elemental Fury I
* '''[[r2m3]]''' Elemental Fury II
* '''[[r2m4]]''' Curse of Osiris
* '''[[r2m5]]''' Wizard's Keep
* '''[[r2m6]]''' Blood Sacrifice
* '''[[r2m7]]''' Last Bastion
* '''[[r2m8]]''' Source of Evil</text>
      <sha1>cbhf52dji9yqjxhrwdxvmyxr4we67xc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1274</id>
      <parentid>7</parentid>
      <timestamp>2009-09-27T00:59:45Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <comment>added a few labels for id1</comment>
      <text xml:space="preserve" bytes="3353">This page catalogs all the single player levels included with [[Quake]], [[Scourge of Armagon]] and [[Dissolution of Eternity]]. Infos about the author, secrets, etc.

==[[Quake]] Maps==
* '''[[start]]''' Introduction - [[John Romero]]
===The Dimension of the Doomed===
''The mystical past comes alive...''
* '''[[e1m1]]''' The Slipgate Complex - John Romero
* '''[[e1m2]]''' Castle of the Damned - [[Tim Willits]]
* '''[[e1m3]]''' The Necropolis - Tim Willits
* '''[[e1m4]]''' The Grisly Grotto - Tim Willits
* '''[[e1m5]]''' Gloom Keep - Tim Willits
* '''[[e1m6]]''' The Door to Chthon - [[American McGee]]
* '''[[e1m7]]''' The House of Chthon - American McGee
* '''[[e1m8]]''' Ziggurat Vertigo - American McGee
===The Realm of Black Magic===
''Ancient castles and strange beasts ahead...''
* '''[[e2m1]]''' The Installation - John Romero
* '''[[e2m2]]''' The Ogre Citadel - John Romero
* '''[[e2m3]]''' The Crypt of Decay - John Romero
* '''[[e2m4]]''' The Ebon Fortress - John Romero
* '''[[e2m5]]''' The Wizard's Manse - John Romero
* '''[[e2m6]]''' The Dismal Oubliette - John Romero
* '''[[e2m7]]''' The Underearth - Tim Willits
===The Netherworld===
''Primal fear in a strange dimension...''
* '''[[e3m1]]''' Termination Central - John Romero
* '''[[e3m2]]''' The Vaults of Zin - American McGee
* '''[[e3m3]]''' The Tomb of Terror - American McGee
* '''[[e3m4]]''' Satan's Dark Delight - American McGee
* '''[[e3m5]]''' The Wind Tunnels - Tim Willits
* '''[[e3m6]]''' Chambers of Torment - American McGee &amp; Tim Willits
* '''[[e3m7]]''' The Haunted Halls - American McGee
* '''[[e4m1]]''' The Sewage System - Tim Willits
===The Elder World===
''Your worst nightmares come true...''
* '''[[e4m2]]''' The Tower of Despair - [[Sandy Petersen]]
* '''[[e4m3]]''' The Elder God Shrine - Sandy Petersen
* '''[[e4m4]]''' The Palace of Hate - Sandy Petersen
* '''[[e4m5]]''' Hell's Atrium - Sandy Petersen
* '''[[e4m6]]''' The Pain Maze - Sandy Petersen
* '''[[e4m7]]''' Azure Agony - Sandy Petersen
* '''[[e4m8]]''' The Nameless City - Sandy Petersen
''Shub-Niggurath awaits you...''
* '''[[end]]''' Shub-Niggurath's Pit - John Romero

==[[Scourge of Armagon]] Maps==
* '''[[start (Scourge of Armagon)|start]]''' Command HQ
* '''[[hip1m1]]''' The Pumping Station
* '''[[hip1m2]]''' Storage Facility
* '''[[hip1m3]]''' The Lost Mine
* '''[[hip1m4]]''' Research Facility
* '''[[hip1m5]]''' Military Complex
* '''[[hip2m1]]''' Ancient Realms
* '''[[hip2m2]]''' The Black Cathedral
* '''[[hip2m3]]''' The Catacombs
* '''[[hip2m4]]''' The Crypt
* '''[[hip2m5]]''' Mortum's Keep
* '''[[hip2m6]]''' The Gremlin's Domain
* '''[[hip3m1]]''' Tur Torment
* '''[[hip3m2]]''' Pandemonium
* '''[[hip3m3]]''' Limbo
* '''[[hip3m4]]''' The Gauntlet
* '''[[hipend]]''' Armagon's Lair

==[[Dissolution of Eternity]] Maps==
* '''[[start (Dissolution of Eternity)|start]]''' Introduction
* '''[[r1m1]]''' Deviant's Domain
* '''[[r1m2]]''' Dread Portal
* '''[[r1m3]]''' Judgement Call
* '''[[r1m4]]''' Cave of Death
* '''[[r1m5]]''' Towers of Wrath
* '''[[r1m6]]''' Temple of Pain
* '''[[r1m7]]''' Tomb of the Overlord
* '''[[r2m1]]''' Tempus Fugit
* '''[[r2m2]]''' Elemental Fury I
* '''[[r2m3]]''' Elemental Fury II
* '''[[r2m4]]''' Curse of Osiris
* '''[[r2m5]]''' Wizard's Keep
* '''[[r2m6]]''' Blood Sacrifice
* '''[[r2m7]]''' Last Bastion
* '''[[r2m8]]''' Source of Evil</text>
      <sha1>fsd62y47orm3a9vhzccfzqyaywd5p7w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1275</id>
      <parentid>1274</parentid>
      <timestamp>2009-09-27T02:09:33Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <comment>/* [[Dissolution of Eternity]] Maps */</comment>
      <text xml:space="preserve" bytes="3403">This page catalogs all the single player levels included with [[Quake]], [[Scourge of Armagon]] and [[Dissolution of Eternity]]. Infos about the author, secrets, etc.

==[[Quake]] Maps==
* '''[[start]]''' Introduction - [[John Romero]]
===The Dimension of the Doomed===
''The mystical past comes alive...''
* '''[[e1m1]]''' The Slipgate Complex - John Romero
* '''[[e1m2]]''' Castle of the Damned - [[Tim Willits]]
* '''[[e1m3]]''' The Necropolis - Tim Willits
* '''[[e1m4]]''' The Grisly Grotto - Tim Willits
* '''[[e1m5]]''' Gloom Keep - Tim Willits
* '''[[e1m6]]''' The Door to Chthon - [[American McGee]]
* '''[[e1m7]]''' The House of Chthon - American McGee
* '''[[e1m8]]''' Ziggurat Vertigo - American McGee
===The Realm of Black Magic===
''Ancient castles and strange beasts ahead...''
* '''[[e2m1]]''' The Installation - John Romero
* '''[[e2m2]]''' The Ogre Citadel - John Romero
* '''[[e2m3]]''' The Crypt of Decay - John Romero
* '''[[e2m4]]''' The Ebon Fortress - John Romero
* '''[[e2m5]]''' The Wizard's Manse - John Romero
* '''[[e2m6]]''' The Dismal Oubliette - John Romero
* '''[[e2m7]]''' The Underearth - Tim Willits
===The Netherworld===
''Primal fear in a strange dimension...''
* '''[[e3m1]]''' Termination Central - John Romero
* '''[[e3m2]]''' The Vaults of Zin - American McGee
* '''[[e3m3]]''' The Tomb of Terror - American McGee
* '''[[e3m4]]''' Satan's Dark Delight - American McGee
* '''[[e3m5]]''' The Wind Tunnels - Tim Willits
* '''[[e3m6]]''' Chambers of Torment - American McGee &amp; Tim Willits
* '''[[e3m7]]''' The Haunted Halls - American McGee
* '''[[e4m1]]''' The Sewage System - Tim Willits
===The Elder World===
''Your worst nightmares come true...''
* '''[[e4m2]]''' The Tower of Despair - [[Sandy Petersen]]
* '''[[e4m3]]''' The Elder God Shrine - Sandy Petersen
* '''[[e4m4]]''' The Palace of Hate - Sandy Petersen
* '''[[e4m5]]''' Hell's Atrium - Sandy Petersen
* '''[[e4m6]]''' The Pain Maze - Sandy Petersen
* '''[[e4m7]]''' Azure Agony - Sandy Petersen
* '''[[e4m8]]''' The Nameless City - Sandy Petersen
''Shub-Niggurath awaits you...''
* '''[[end]]''' Shub-Niggurath's Pit - John Romero

==[[Scourge of Armagon]] Maps==
* '''[[start (Scourge of Armagon)|start]]''' Command HQ
* '''[[hip1m1]]''' The Pumping Station
* '''[[hip1m2]]''' Storage Facility
* '''[[hip1m3]]''' The Lost Mine
* '''[[hip1m4]]''' Research Facility
* '''[[hip1m5]]''' Military Complex
* '''[[hip2m1]]''' Ancient Realms
* '''[[hip2m2]]''' The Black Cathedral
* '''[[hip2m3]]''' The Catacombs
* '''[[hip2m4]]''' The Crypt
* '''[[hip2m5]]''' Mortum's Keep
* '''[[hip2m6]]''' The Gremlin's Domain
* '''[[hip3m1]]''' Tur Torment
* '''[[hip3m2]]''' Pandemonium
* '''[[hip3m3]]''' Limbo
* '''[[hip3m4]]''' The Gauntlet
* '''[[hipend]]''' Armagon's Lair

==[[Dissolution of Eternity]] Maps==
* '''[[start (Dissolution of Eternity)|start]]''' Introduction
===Hell's Fortress===
* '''[[r1m1]]''' Deviant's Domain
* '''[[r1m2]]''' Dread Portal
* '''[[r1m3]]''' Judgement Call
* '''[[r1m4]]''' Cave of Death
* '''[[r1m5]]''' Towers of Wrath
* '''[[r1m6]]''' Temple of Pain
* '''[[r1m7]]''' Tomb of the Overlord
===The Corridors of Time===
* '''[[r2m1]]''' Tempus Fugit
* '''[[r2m2]]''' Elemental Fury I
* '''[[r2m3]]''' Elemental Fury II
* '''[[r2m4]]''' Curse of Osiris
* '''[[r2m5]]''' Wizard's Keep
* '''[[r2m6]]''' Blood Sacrifice
* '''[[r2m7]]''' Last Bastion
* '''[[r2m8]]''' Source of Evil</text>
      <sha1>2hyefst7yndpoy0rxei1gr0szg2rktj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1283</id>
      <parentid>1275</parentid>
      <timestamp>2009-09-27T08:18:05Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>[[Singleplayer Maps]] moved to [[Singleplayer maps]]</comment>
      <text xml:space="preserve" bytes="3403">This page catalogs all the single player levels included with [[Quake]], [[Scourge of Armagon]] and [[Dissolution of Eternity]]. Infos about the author, secrets, etc.

==[[Quake]] Maps==
* '''[[start]]''' Introduction - [[John Romero]]
===The Dimension of the Doomed===
''The mystical past comes alive...''
* '''[[e1m1]]''' The Slipgate Complex - John Romero
* '''[[e1m2]]''' Castle of the Damned - [[Tim Willits]]
* '''[[e1m3]]''' The Necropolis - Tim Willits
* '''[[e1m4]]''' The Grisly Grotto - Tim Willits
* '''[[e1m5]]''' Gloom Keep - Tim Willits
* '''[[e1m6]]''' The Door to Chthon - [[American McGee]]
* '''[[e1m7]]''' The House of Chthon - American McGee
* '''[[e1m8]]''' Ziggurat Vertigo - American McGee
===The Realm of Black Magic===
''Ancient castles and strange beasts ahead...''
* '''[[e2m1]]''' The Installation - John Romero
* '''[[e2m2]]''' The Ogre Citadel - John Romero
* '''[[e2m3]]''' The Crypt of Decay - John Romero
* '''[[e2m4]]''' The Ebon Fortress - John Romero
* '''[[e2m5]]''' The Wizard's Manse - John Romero
* '''[[e2m6]]''' The Dismal Oubliette - John Romero
* '''[[e2m7]]''' The Underearth - Tim Willits
===The Netherworld===
''Primal fear in a strange dimension...''
* '''[[e3m1]]''' Termination Central - John Romero
* '''[[e3m2]]''' The Vaults of Zin - American McGee
* '''[[e3m3]]''' The Tomb of Terror - American McGee
* '''[[e3m4]]''' Satan's Dark Delight - American McGee
* '''[[e3m5]]''' The Wind Tunnels - Tim Willits
* '''[[e3m6]]''' Chambers of Torment - American McGee &amp; Tim Willits
* '''[[e3m7]]''' The Haunted Halls - American McGee
* '''[[e4m1]]''' The Sewage System - Tim Willits
===The Elder World===
''Your worst nightmares come true...''
* '''[[e4m2]]''' The Tower of Despair - [[Sandy Petersen]]
* '''[[e4m3]]''' The Elder God Shrine - Sandy Petersen
* '''[[e4m4]]''' The Palace of Hate - Sandy Petersen
* '''[[e4m5]]''' Hell's Atrium - Sandy Petersen
* '''[[e4m6]]''' The Pain Maze - Sandy Petersen
* '''[[e4m7]]''' Azure Agony - Sandy Petersen
* '''[[e4m8]]''' The Nameless City - Sandy Petersen
''Shub-Niggurath awaits you...''
* '''[[end]]''' Shub-Niggurath's Pit - John Romero

==[[Scourge of Armagon]] Maps==
* '''[[start (Scourge of Armagon)|start]]''' Command HQ
* '''[[hip1m1]]''' The Pumping Station
* '''[[hip1m2]]''' Storage Facility
* '''[[hip1m3]]''' The Lost Mine
* '''[[hip1m4]]''' Research Facility
* '''[[hip1m5]]''' Military Complex
* '''[[hip2m1]]''' Ancient Realms
* '''[[hip2m2]]''' The Black Cathedral
* '''[[hip2m3]]''' The Catacombs
* '''[[hip2m4]]''' The Crypt
* '''[[hip2m5]]''' Mortum's Keep
* '''[[hip2m6]]''' The Gremlin's Domain
* '''[[hip3m1]]''' Tur Torment
* '''[[hip3m2]]''' Pandemonium
* '''[[hip3m3]]''' Limbo
* '''[[hip3m4]]''' The Gauntlet
* '''[[hipend]]''' Armagon's Lair

==[[Dissolution of Eternity]] Maps==
* '''[[start (Dissolution of Eternity)|start]]''' Introduction
===Hell's Fortress===
* '''[[r1m1]]''' Deviant's Domain
* '''[[r1m2]]''' Dread Portal
* '''[[r1m3]]''' Judgement Call
* '''[[r1m4]]''' Cave of Death
* '''[[r1m5]]''' Towers of Wrath
* '''[[r1m6]]''' Temple of Pain
* '''[[r1m7]]''' Tomb of the Overlord
===The Corridors of Time===
* '''[[r2m1]]''' Tempus Fugit
* '''[[r2m2]]''' Elemental Fury I
* '''[[r2m3]]''' Elemental Fury II
* '''[[r2m4]]''' Curse of Osiris
* '''[[r2m5]]''' Wizard's Keep
* '''[[r2m6]]''' Blood Sacrifice
* '''[[r2m7]]''' Last Bastion
* '''[[r2m8]]''' Source of Evil</text>
      <sha1>2hyefst7yndpoy0rxei1gr0szg2rktj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1416</id>
      <parentid>1283</parentid>
      <timestamp>2009-10-14T02:00:32Z</timestamp>
      <contributor>
        <ip>64.13.9.112</ip>
      </contributor>
      <comment>/* The Elder World */  e4m1 somehow got knocked off when i added the episode titles, thanks to Romero for pointing this out</comment>
      <text xml:space="preserve" bytes="3452">This page catalogs all the single player levels included with [[Quake]], [[Scourge of Armagon]] and [[Dissolution of Eternity]]. Infos about the author, secrets, etc.

==[[Quake]] Maps==
* '''[[start]]''' Introduction - [[John Romero]]
===The Dimension of the Doomed===
''The mystical past comes alive...''
* '''[[e1m1]]''' The Slipgate Complex - John Romero
* '''[[e1m2]]''' Castle of the Damned - [[Tim Willits]]
* '''[[e1m3]]''' The Necropolis - Tim Willits
* '''[[e1m4]]''' The Grisly Grotto - Tim Willits
* '''[[e1m5]]''' Gloom Keep - Tim Willits
* '''[[e1m6]]''' The Door to Chthon - [[American McGee]]
* '''[[e1m7]]''' The House of Chthon - American McGee
* '''[[e1m8]]''' Ziggurat Vertigo - American McGee
===The Realm of Black Magic===
''Ancient castles and strange beasts ahead...''
* '''[[e2m1]]''' The Installation - John Romero
* '''[[e2m2]]''' The Ogre Citadel - John Romero
* '''[[e2m3]]''' The Crypt of Decay - John Romero
* '''[[e2m4]]''' The Ebon Fortress - John Romero
* '''[[e2m5]]''' The Wizard's Manse - John Romero
* '''[[e2m6]]''' The Dismal Oubliette - John Romero
* '''[[e2m7]]''' The Underearth - Tim Willits
===The Netherworld===
''Primal fear in a strange dimension...''
* '''[[e3m1]]''' Termination Central - John Romero
* '''[[e3m2]]''' The Vaults of Zin - American McGee
* '''[[e3m3]]''' The Tomb of Terror - American McGee
* '''[[e3m4]]''' Satan's Dark Delight - American McGee
* '''[[e3m5]]''' The Wind Tunnels - Tim Willits
* '''[[e3m6]]''' Chambers of Torment - American McGee &amp; Tim Willits
* '''[[e3m7]]''' The Haunted Halls - American McGee
* '''[[e4m1]]''' The Sewage System - Tim Willits
===The Elder World===
''Your worst nightmares come true...''
* '''[[e4m1]]''' The Sewage System - Tim Willits
* '''[[e4m2]]''' The Tower of Despair - [[Sandy Petersen]]
* '''[[e4m3]]''' The Elder God Shrine - Sandy Petersen
* '''[[e4m4]]''' The Palace of Hate - Sandy Petersen
* '''[[e4m5]]''' Hell's Atrium - Sandy Petersen
* '''[[e4m6]]''' The Pain Maze - Sandy Petersen
* '''[[e4m7]]''' Azure Agony - Sandy Petersen
* '''[[e4m8]]''' The Nameless City - Sandy Petersen
''Shub-Niggurath awaits you...''
* '''[[end]]''' Shub-Niggurath's Pit - John Romero

==[[Scourge of Armagon]] Maps==
* '''[[start (Scourge of Armagon)|start]]''' Command HQ
* '''[[hip1m1]]''' The Pumping Station
* '''[[hip1m2]]''' Storage Facility
* '''[[hip1m3]]''' The Lost Mine
* '''[[hip1m4]]''' Research Facility
* '''[[hip1m5]]''' Military Complex
* '''[[hip2m1]]''' Ancient Realms
* '''[[hip2m2]]''' The Black Cathedral
* '''[[hip2m3]]''' The Catacombs
* '''[[hip2m4]]''' The Crypt
* '''[[hip2m5]]''' Mortum's Keep
* '''[[hip2m6]]''' The Gremlin's Domain
* '''[[hip3m1]]''' Tur Torment
* '''[[hip3m2]]''' Pandemonium
* '''[[hip3m3]]''' Limbo
* '''[[hip3m4]]''' The Gauntlet
* '''[[hipend]]''' Armagon's Lair

==[[Dissolution of Eternity]] Maps==
* '''[[start (Dissolution of Eternity)|start]]''' Introduction
===Hell's Fortress===
* '''[[r1m1]]''' Deviant's Domain
* '''[[r1m2]]''' Dread Portal
* '''[[r1m3]]''' Judgement Call
* '''[[r1m4]]''' Cave of Death
* '''[[r1m5]]''' Towers of Wrath
* '''[[r1m6]]''' Temple of Pain
* '''[[r1m7]]''' Tomb of the Overlord
===The Corridors of Time===
* '''[[r2m1]]''' Tempus Fugit
* '''[[r2m2]]''' Elemental Fury I
* '''[[r2m3]]''' Elemental Fury II
* '''[[r2m4]]''' Curse of Osiris
* '''[[r2m5]]''' Wizard's Keep
* '''[[r2m6]]''' Blood Sacrifice
* '''[[r2m7]]''' Last Bastion
* '''[[r2m8]]''' Source of Evil</text>
      <sha1>a6c9fb2q5x8gkn2cmel4k8x9tilyegu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2268</id>
      <parentid>1416</parentid>
      <timestamp>2013-03-26T15:40:47Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>/* The Netherworld */</comment>
      <text xml:space="preserve" bytes="3404">This page catalogs all the single player levels included with [[Quake]], [[Scourge of Armagon]] and [[Dissolution of Eternity]]. Infos about the author, secrets, etc.

==[[Quake]] Maps==
* '''[[start]]''' Introduction - [[John Romero]]
===The Dimension of the Doomed===
''The mystical past comes alive...''
* '''[[e1m1]]''' The Slipgate Complex - John Romero
* '''[[e1m2]]''' Castle of the Damned - [[Tim Willits]]
* '''[[e1m3]]''' The Necropolis - Tim Willits
* '''[[e1m4]]''' The Grisly Grotto - Tim Willits
* '''[[e1m5]]''' Gloom Keep - Tim Willits
* '''[[e1m6]]''' The Door to Chthon - [[American McGee]]
* '''[[e1m7]]''' The House of Chthon - American McGee
* '''[[e1m8]]''' Ziggurat Vertigo - American McGee
===The Realm of Black Magic===
''Ancient castles and strange beasts ahead...''
* '''[[e2m1]]''' The Installation - John Romero
* '''[[e2m2]]''' The Ogre Citadel - John Romero
* '''[[e2m3]]''' The Crypt of Decay - John Romero
* '''[[e2m4]]''' The Ebon Fortress - John Romero
* '''[[e2m5]]''' The Wizard's Manse - John Romero
* '''[[e2m6]]''' The Dismal Oubliette - John Romero
* '''[[e2m7]]''' The Underearth - Tim Willits
===The Netherworld===
''Primal fear in a strange dimension...''
* '''[[e3m1]]''' Termination Central - John Romero
* '''[[e3m2]]''' The Vaults of Zin - American McGee
* '''[[e3m3]]''' The Tomb of Terror - American McGee
* '''[[e3m4]]''' Satan's Dark Delight - American McGee
* '''[[e3m5]]''' The Wind Tunnels - Tim Willits
* '''[[e3m6]]''' Chambers of Torment - American McGee &amp; Tim Willits
* '''[[e3m7]]''' The Haunted Halls - American McGee

===The Elder World===
''Your worst nightmares come true...''
* '''[[e4m1]]''' The Sewage System - Tim Willits
* '''[[e4m2]]''' The Tower of Despair - [[Sandy Petersen]]
* '''[[e4m3]]''' The Elder God Shrine - Sandy Petersen
* '''[[e4m4]]''' The Palace of Hate - Sandy Petersen
* '''[[e4m5]]''' Hell's Atrium - Sandy Petersen
* '''[[e4m6]]''' The Pain Maze - Sandy Petersen
* '''[[e4m7]]''' Azure Agony - Sandy Petersen
* '''[[e4m8]]''' The Nameless City - Sandy Petersen
''Shub-Niggurath awaits you...''
* '''[[end]]''' Shub-Niggurath's Pit - John Romero

==[[Scourge of Armagon]] Maps==
* '''[[start (Scourge of Armagon)|start]]''' Command HQ
* '''[[hip1m1]]''' The Pumping Station
* '''[[hip1m2]]''' Storage Facility
* '''[[hip1m3]]''' The Lost Mine
* '''[[hip1m4]]''' Research Facility
* '''[[hip1m5]]''' Military Complex
* '''[[hip2m1]]''' Ancient Realms
* '''[[hip2m2]]''' The Black Cathedral
* '''[[hip2m3]]''' The Catacombs
* '''[[hip2m4]]''' The Crypt
* '''[[hip2m5]]''' Mortum's Keep
* '''[[hip2m6]]''' The Gremlin's Domain
* '''[[hip3m1]]''' Tur Torment
* '''[[hip3m2]]''' Pandemonium
* '''[[hip3m3]]''' Limbo
* '''[[hip3m4]]''' The Gauntlet
* '''[[hipend]]''' Armagon's Lair

==[[Dissolution of Eternity]] Maps==
* '''[[start (Dissolution of Eternity)|start]]''' Introduction
===Hell's Fortress===
* '''[[r1m1]]''' Deviant's Domain
* '''[[r1m2]]''' Dread Portal
* '''[[r1m3]]''' Judgement Call
* '''[[r1m4]]''' Cave of Death
* '''[[r1m5]]''' Towers of Wrath
* '''[[r1m6]]''' Temple of Pain
* '''[[r1m7]]''' Tomb of the Overlord
===The Corridors of Time===
* '''[[r2m1]]''' Tempus Fugit
* '''[[r2m2]]''' Elemental Fury I
* '''[[r2m3]]''' Elemental Fury II
* '''[[r2m4]]''' Curse of Osiris
* '''[[r2m5]]''' Wizard's Keep
* '''[[r2m6]]''' Blood Sacrifice
* '''[[r2m7]]''' Last Bastion
* '''[[r2m8]]''' Source of Evil</text>
      <sha1>qjilz36w33euvrlavyezzdvhks9cqcv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Skill</title>
    <ns>0</ns>
    <id>811</id>
    <redirect title="skill" />
    <revision>
      <id>2382</id>
      <timestamp>2013-03-28T14:56:34Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Spirit moved page [[Skill]] to [[skill]]</comment>
      <text xml:space="preserve" bytes="19">#REDIRECT [[skill]]</text>
      <sha1>3xzsage12r8pvp2n9wlm1iw0n9e39x0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Skybox Support</title>
    <ns>0</ns>
    <id>373</id>
    <revision>
      <id>624</id>
      <timestamp>2008-04-14T20:45:14Z</timestamp>
      <contributor>
        <ip>85.134.153.142</ip>
      </contributor>
      <comment>New page: ===Abstract===  This page proposes a standard for implementing Skybox Support in Quake 1 engines.  Please be aware that as the Quake 1 source has been released for a significant number of ...</comment>
      <text xml:space="preserve" bytes="387">===Abstract===

This page proposes a standard for implementing Skybox Support in Quake 1 engines.  Please be aware that as the Quake 1 source has been released for a significant number of years, there are already diverging implementations.  The proposed standard attempts to cover the most commonly used.  Engines which diverge from the standard should be re-engineered to conform to it.</text>
      <sha1>8ist08oydlvkpwn6k3whkw2jbgfwkp6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>625</id>
      <parentid>624</parentid>
      <timestamp>2008-04-14T21:14:41Z</timestamp>
      <contributor>
        <ip>85.134.153.142</ip>
      </contributor>
      <text xml:space="preserve" bytes="3225">===Abstract===

This page proposes a standard for implementing Skybox Support in Quake 1 engines.  Please be aware that as the Quake 1 source has been released for a significant number of years, there are already diverging implementations.  The proposed standard attempts to cover the most commonly used.  Engines which diverge from the standard should be re-engineered to conform to it.

If you feel I've got anything wrong here, feel free to put it right - it is a Wiki, after all!

===Description===

A Skybox consists of 6 image files, representing the 6 faces of a cube, which is then rendered at a far (but fixed) distance from the observer.  See Quake II (and others) for an example.

===Loading a Skybox===

A skybox is loaded using either the &quot;loadsky&quot; console command or directly from the BSP file (by specifying a skybox name in the worldspawn entry).

===The &quot;loadsky&quot; Command===

This command should take one argument: the skybox base name (see &quot;Naming Convention&quot; below).  A Quake filesystem path is not required.  If the skybox loads successfully, it is immediately used to replace the classic Quake sky.  If the skybox load fails, the current skybox (or the classic Quake sky) is retained.  The standard does not specify what happens if only some of the 6 faces fail to load.

===Loading from Worldspawn===

Need some help here!

===Unloading a Skybox===

Issuing the &quot;loadsky&quot; command without any arguments will unload the current skybox and revert to the classic Quake sky.  Engine coders may implement an &quot;unloadsky&quot; command if they wish, but this is not a requirement and should not be relied on.

===Image Formats===

Skyboxes should be provided as either TGA or PNG files.  All 6 faces should be same format (should engines be required to support a possibility that they are different formats?)  The images should be sized so that they are powers of 2: 256 x 256, 512 x 512 or 1024 x 1024 are common sizes.  The 6 faces need not be the same size.

===Naming Convention===

Each Skybox face name is composed of two components: the base name and a suffix indicating which face the image relates to.

The base name should be strictly alphanumeric, and should not contain spaces.  Only the base name is used for loading.

The suffix should be either of &quot;bk&quot; (back face), &quot;ft&quot; (front face), &quot;lf&quot; (left face), &quot;rt&quot; (right face), &quot;up&quot; (up face) or &quot;dn&quot; (down face).

Optionally, there may be an underscore (&quot;_&quot;) between the base name and the suffix.  Engines should be capable of successfully loading a skybox where (1) the underscore is present in the load command and in the name, (2) where the underscore is absent in the load command but present in the name, and (3) where the underscore is absent in both.

===Filesystem===

Skyboxes may be stored in either the native OS filesystem or in a PAK file, and loading from either should be supported in any implementation.  All filesystem references are relative to the base game directory (e.g &quot;ID1&quot;).

A skybox may be loaded from any of &quot;gfx&quot;, &quot;env&quot; or &quot;gfx/env&quot;; implementations should support loading from all 3.  Skyboxes should not be present in &quot;textures&quot; (nor in any subdirectory thereof).

All 6 components of a skybox should be in the same directory.</text>
      <sha1>gml7g25o2sys5cjk1yhfslj3h57kya2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>626</id>
      <parentid>625</parentid>
      <timestamp>2008-04-14T21:15:57Z</timestamp>
      <contributor>
        <ip>85.134.153.142</ip>
      </contributor>
      <comment>/* Naming Convention */</comment>
      <text xml:space="preserve" bytes="3227">===Abstract===

This page proposes a standard for implementing Skybox Support in Quake 1 engines.  Please be aware that as the Quake 1 source has been released for a significant number of years, there are already diverging implementations.  The proposed standard attempts to cover the most commonly used.  Engines which diverge from the standard should be re-engineered to conform to it.

If you feel I've got anything wrong here, feel free to put it right - it is a Wiki, after all!

===Description===

A Skybox consists of 6 image files, representing the 6 faces of a cube, which is then rendered at a far (but fixed) distance from the observer.  See Quake II (and others) for an example.

===Loading a Skybox===

A skybox is loaded using either the &quot;loadsky&quot; console command or directly from the BSP file (by specifying a skybox name in the worldspawn entry).

===The &quot;loadsky&quot; Command===

This command should take one argument: the skybox base name (see &quot;Naming Convention&quot; below).  A Quake filesystem path is not required.  If the skybox loads successfully, it is immediately used to replace the classic Quake sky.  If the skybox load fails, the current skybox (or the classic Quake sky) is retained.  The standard does not specify what happens if only some of the 6 faces fail to load.

===Loading from Worldspawn===

Need some help here!

===Unloading a Skybox===

Issuing the &quot;loadsky&quot; command without any arguments will unload the current skybox and revert to the classic Quake sky.  Engine coders may implement an &quot;unloadsky&quot; command if they wish, but this is not a requirement and should not be relied on.

===Image Formats===

Skyboxes should be provided as either TGA or PNG files.  All 6 faces should be same format (should engines be required to support a possibility that they are different formats?)  The images should be sized so that they are powers of 2: 256 x 256, 512 x 512 or 1024 x 1024 are common sizes.  The 6 faces need not be the same size.

===Naming Convention===

Each Skybox face name is composed of two components: the base name and a suffix indicating which face the image relates to.

The base name should be strictly alphanumeric, and should not contain spaces.  Only the base name is used for loading.

The suffix should be either of &quot;bk&quot; (back face), &quot;ft&quot; (front face), &quot;lf&quot; (left face), &quot;rt&quot; (right face), &quot;up&quot; (up face) or &quot;dn&quot; (down face).

Optionally, there may be an underscore (&quot;_&quot;) between the base name and the suffix.  Engines should be capable of successfully loading a skybox (1) where the underscore is present in both the load command and the name, (2) where the underscore is absent in the load command but present in the name, and (3) where the underscore is absent in both.

===Filesystem===

Skyboxes may be stored in either the native OS filesystem or in a PAK file, and loading from either should be supported in any implementation.  All filesystem references are relative to the base game directory (e.g &quot;ID1&quot;).

A skybox may be loaded from any of &quot;gfx&quot;, &quot;env&quot; or &quot;gfx/env&quot;; implementations should support loading from all 3.  Skyboxes should not be present in &quot;textures&quot; (nor in any subdirectory thereof).

All 6 components of a skybox should be in the same directory.</text>
      <sha1>rv5ojtwn92pgempxkt4xw0ismjpjc4y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Slipgate</title>
    <ns>0</ns>
    <id>365</id>
    <revision>
      <id>598</id>
      <timestamp>2008-04-11T02:54:53Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: A teleportation portal in which one ''&quot;slips&quot;'' from place to place...</comment>
      <text xml:space="preserve" bytes="70">A teleportation portal in which one ''&quot;slips&quot;'' from place to place...</text>
      <sha1>f3nofdazl6o84e28txo9gf5368zacfu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>599</id>
      <parentid>598</parentid>
      <timestamp>2008-04-11T02:55:16Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="77">A teleportation portal device in which one ''&quot;slips&quot;'' from place to place...</text>
      <sha1>563pyw4zom09u5fh1c5nh26pyt5tb0d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Snd mixahead</title>
    <ns>0</ns>
    <id>927</id>
    <redirect title="snd mixahead" />
    <revision>
      <id>2621</id>
      <timestamp>2013-03-29T14:22:21Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Snd mixahead]] to [[snd mixahead]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="26">#REDIRECT [[snd mixahead]]</text>
      <sha1>fm5dz3xletkf8r1xaz4td7p8q7ucp6u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Snd show</title>
    <ns>0</ns>
    <id>928</id>
    <redirect title="snd show" />
    <revision>
      <id>2623</id>
      <timestamp>2013-03-29T14:22:21Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Snd show]] to [[snd show]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="22">#REDIRECT [[snd show]]</text>
      <sha1>pb6hrmjpf3m24v3uhozdbdcppujr88b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Sound</title>
    <ns>0</ns>
    <id>211</id>
    <revision>
      <id>392</id>
      <timestamp>2008-02-23T18:46:15Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  void '''sound''' (entity ''source'', float ''channel'', string ''sample'', float ''volume'', float ''attenuation'')  * ''source'' = entity emitting the sound (ex: self) * ''channel'' = ch...</comment>
      <text xml:space="preserve" bytes="431"> void '''sound''' (entity ''source'', float ''channel'', string ''sample'', float ''volume'', float ''attenuation'')

* ''source'' = entity emitting the sound (ex: self)
* ''channel'' = channel to use for sound 
* ''sample'' = name of the sample WAV file (ex: &quot;ogre/ogdrag.wav&quot;)
* ''volume'' = 0.0 for low volume, 1.0 for maximum volume
* ''attenuation''= attenuation of sound 

The entity emits a sound, on one of it's 8 channels.</text>
      <sha1>jfmruv89vb43uxxre83u5wimwl3oaa2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Spawn</title>
    <ns>0</ns>
    <id>528</id>
    <revision>
      <id>1255</id>
      <timestamp>2009-09-25T08:16:19Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <comment>[[Spawn]] moved to [[Spawn (function)]]</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[Spawn (function)]]</text>
      <sha1>kywnlo9tx6n2xjd6x2wc7jxidbx0ok4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1257</id>
      <parentid>1255</parentid>
      <timestamp>2009-09-25T08:20:07Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="131">'''Spawn''' may refer to:

* [[Spawn (monster)]] (also known as the Tarbaby)
* [[Spawn (function)]] (QuakeC function)

{{disambig}}</text>
      <sha1>lpa9f8rhhsimw86pw8uwyt4q4wtxpo5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Spawn (function)</title>
    <ns>0</ns>
    <id>141</id>
    <revision>
      <id>223</id>
      <timestamp>2007-11-02T19:41:38Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: A merrily bouncing blob as dangerous to kill as to ignore. Blech.  * '''Weapon:''' Themselves * '''Health:''' 80 * '''Treasure:''' Nothing  '''Tips:''' More commonly known as Tarbabies, th...</comment>
      <text xml:space="preserve" bytes="864">A merrily bouncing blob as dangerous to kill as to ignore. Blech.

* '''Weapon:''' Themselves
* '''Health:''' 80
* '''Treasure:''' Nothing

'''Tips:''' More commonly known as Tarbabies, these blue blobs of death are one of the most annoying enemies in Quake. They hop around at superfast speeds, ramming into you to cause damage, and once they start bouncing they don't stop. What's worse is that when you kill them, they explode! These monsters are commonly found in groups of 4-10. But they do have a slight disadvantage. When they first see you, it takes a while for them to take off. Your best bet is using a [[Rocket Launcher]] and good reflexes. It may kill a few of them at once, and when they explode, they might hurt other Spawn as well.

'''Entity name:''' [[monster_tarbaby]]

[http://frikqcc.quakesrc.org/files/tarbaby.gif]

==See Also==
* [[Monsters]]</text>
      <sha1>4tbs8ebrsodet7j18hn2t9k54pje758</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>284</id>
      <parentid>223</parentid>
      <timestamp>2007-11-05T22:21:11Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <text xml:space="preserve" bytes="838">A merrily bouncing blob as dangerous to kill as to ignore. Blech.

* '''Weapon:''' Themselves
* '''Health:''' 80
* '''Treasure:''' Nothing

'''Tips:''' More commonly known as Tarbabies, these blue blobs of death are one of the most annoying enemies in Quake. They hop around at superfast speeds, ramming into you to cause damage, and once they start bouncing they don't stop. What's worse is that when you kill them, they explode! These monsters are commonly found in groups of 4-10. But they do have a slight disadvantage. When they first see you, it takes a while for them to take off. Your best bet is using a [[Rocket Launcher]] and good reflexes. It may kill a few of them at once, and when they explode, they might hurt other Spawn as well.

[[Image:tarbaby.gif]]

'''Entity name:''' [[monster_tarbaby]]

==See Also==
* [[Monsters]]</text>
      <sha1>rp8dlxfto2bg6d20s115ojqjbcpgs4y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>377</id>
      <parentid>284</parentid>
      <timestamp>2008-02-22T19:49:55Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <text xml:space="preserve" bytes="194"> entity '''spawn'''()

returns an empty entity.

Create a new entity, totally empty. You can manually set every field, or just set the origin and call one of the existing entity setup functions.</text>
      <sha1>9hudq9taigi6kc4zholrze7wqn5ea22</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1254</id>
      <parentid>377</parentid>
      <timestamp>2009-09-25T08:16:19Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>[[Spawn]] moved to [[Spawn (function)]]</comment>
      <text xml:space="preserve" bytes="194"> entity '''spawn'''()

returns an empty entity.

Create a new entity, totally empty. You can manually set every field, or just set the origin and call one of the existing entity setup functions.</text>
      <sha1>9hudq9taigi6kc4zholrze7wqn5ea22</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1479</id>
      <parentid>1254</parentid>
      <timestamp>2009-12-11T20:37:16Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="208">{{lowercase}}
 entity '''spawn'''()

returns an empty entity.

Create a new entity, totally empty. You can manually set every field, or just set the origin and call one of the existing entity setup functions.</text>
      <sha1>ce8ciedmh8nkop5z2uw5tq741a3wgcx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Spawn (monster)</title>
    <ns>0</ns>
    <id>428</id>
    <revision>
      <id>721</id>
      <timestamp>2008-05-07T20:11:30Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: THIS CREATURE NEED MORE INFO      * Weapon:      * Health:      * Treasure:   Tips:</comment>
      <text xml:space="preserve" bytes="83">THIS CREATURE NEED MORE INFO

    * Weapon: 
    * Health: 
    * Treasure: 

Tips:</text>
      <sha1>giivn91sz9gvc6d7yr97kcyhuceu9p7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>722</id>
      <parentid>721</parentid>
      <timestamp>2008-05-07T20:11:45Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="71">THIS CREATURE NEED MORE INFO

* Weapon: 
* Health: 
* Treasure: 

Tips:</text>
      <sha1>ifmkric9j1qorxb3pf7k5aendihui1g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>723</id>
      <parentid>722</parentid>
      <timestamp>2008-05-07T20:12:52Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="218">THIS CREATURE NEED MORE INFO

* Weapon: 
* Health: 
* Treasure: 

Tips:

----

== When combating this monster ==

Best Weapons: Double-Barreled Shotgun, Super Nailgun
Worst Weapons: Just about anything else is a waste.</text>
      <sha1>7rwlnsrze7hv4f63ygdxoqh3vp92r6b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>724</id>
      <parentid>723</parentid>
      <timestamp>2008-05-07T20:13:02Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="213">THIS CREATURE NEED MORE INFO

* Weapon: 
* Health: 
* Treasure: 

Tips:


== When combating this monster ==

Best Weapons: Double-Barreled Shotgun, Super Nailgun
Worst Weapons: Just about anything else is a waste.</text>
      <sha1>285nps73wbrc8efk4pnr2pwqikjan5m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>725</id>
      <parentid>724</parentid>
      <timestamp>2008-05-07T20:13:18Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>/* When combating this monster */</comment>
      <text xml:space="preserve" bytes="227">THIS CREATURE NEED MORE INFO

* Weapon: 
* Health: 
* Treasure: 

Tips:


== When combating this monster ==

*'''Best Weapons:''' Double-Barreled Shotgun, Super Nailgun
*'''Worst Weapons:''' Just about anything else is a waste.</text>
      <sha1>e1agojw0no5exxm5g6co3adjd5gnbj9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>726</id>
      <parentid>725</parentid>
      <timestamp>2008-05-07T20:13:45Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="192">THIS CREATURE NEED MORE INFO

* Weapon: 
* Health: 
* Treasure: 

Tips:


*'''Best Weapons:''' Double-Barreled Shotgun, Super Nailgun
*'''Worst Weapons:''' Just about anything else is a waste.</text>
      <sha1>63lmnzps4agmdkcydgreib46q5ko4s2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>727</id>
      <parentid>726</parentid>
      <timestamp>2008-05-07T20:14:27Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="516">THIS CREATURE NEED MORE INFO

* Weapon: 
* Health: 
* Treasure: 

Tips:
They don't take long to kill, so don't fire at them unless you're at a safe distance. When they die, they explode like a rocket - and hurt just as badly. They will come after you pretty quickly, so back up as fast as you can and fire once you know you're safe. Don't bother strafing, as they have to be near you to hurt you.

*'''Best Weapons:''' Double-Barreled Shotgun, Super Nailgun
*'''Worst Weapons:''' Just about anything else is a waste.</text>
      <sha1>5u7zt912ox5mjn1lfvyeby42vsw4ppe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>728</id>
      <parentid>727</parentid>
      <timestamp>2008-05-07T20:14:39Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="528">THIS CREATURE NEED MORE INFO

* Weapon: 
* Health: 
* Treasure: 

'''Tips:'''
----

They don't take long to kill, so don't fire at them unless you're at a safe distance. When they die, they explode like a rocket - and hurt just as badly. They will come after you pretty quickly, so back up as fast as you can and fire once you know you're safe. Don't bother strafing, as they have to be near you to hurt you.

*'''Best Weapons:''' Double-Barreled Shotgun, Super Nailgun
*'''Worst Weapons:''' Just about anything else is a waste.</text>
      <sha1>94jixes06o5daf2gqk2qj3zgs0zp3ls</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>731</id>
      <parentid>728</parentid>
      <timestamp>2008-05-07T20:16:55Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="535">THIS CREATURE NEED MORE INFO

* Weapon: 
* Health: 
* Treasure: Nothing

'''Tips:'''
----

They don't take long to kill, so don't fire at them unless you're at a safe distance. When they die, they explode like a rocket - and hurt just as badly. They will come after you pretty quickly, so back up as fast as you can and fire once you know you're safe. Don't bother strafing, as they have to be near you to hurt you.

*'''Best Weapons:''' Double-Barreled Shotgun, Super Nailgun
*'''Worst Weapons:''' Just about anything else is a waste.</text>
      <sha1>n40e5obwflbwkqa2vg59h73r7okc7gp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>853</id>
      <parentid>731</parentid>
      <timestamp>2008-05-17T18:22:59Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="710">{{Infobox Monster
|monstername=Spawn
|entityname=monster_tarbaby
|monsterhealth=80
|monstermelee=
|monstermissile=Leap
|movetype=
|monsterspeed=
|monsterclass=
}}

They don't take long to kill, so don't fire at them unless you're at a safe distance. When they die, they explode like a rocket - and hurt just as badly. They will come after you pretty quickly, so back up as fast as you can and fire once you know you're safe. Don't bother strafing, as they have to be near you to hurt you.

*'''Best Weapons:''' Double-Barreled Shotgun, Super Nailgun
*'''Worst Weapons:''' Just about anything else is a waste.

''&quot;A merrily bouncing blob as dangerous to kill as to ignore. Blech.&quot;''

==See Also==
* [[Monsters]]</text>
      <sha1>gyd5g9s3de8frt1pdk0i8883xrekb3s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>857</id>
      <parentid>853</parentid>
      <timestamp>2008-05-17T18:52:15Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="731">{{Infobox Monster
|monstername=Spawn
|entityname=monster_tarbaby
|monsterhealth=80
|monstermelee=
|monstermissile=Leap
|movetype=
|monsterspeed=
|monsterclass=
|monsterdrop=nothing
}}

They don't take long to kill, so don't fire at them unless you're at a safe distance. When they die, they explode like a rocket - and hurt just as badly. They will come after you pretty quickly, so back up as fast as you can and fire once you know you're safe. Don't bother strafing, as they have to be near you to hurt you.

*'''Best Weapons:''' Double-Barreled Shotgun, Super Nailgun
*'''Worst Weapons:''' Just about anything else is a waste.

''&quot;A merrily bouncing blob as dangerous to kill as to ignore. Blech.&quot;''

==See Also==
* [[Monsters]]</text>
      <sha1>451kbp5fms5qljut8r3nwhxx8umujy5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1258</id>
      <parentid>857</parentid>
      <timestamp>2009-09-25T08:21:50Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="696">{{Infobox Monster
|name=Spawn
|entity=monster_tarbaby
|model=tarbaby.mdl
|health=80
|attacks=Leap
|drop=nothing
|gameversion=Registered
}}
'''Spawn''' (also known as Tarbabies) are annoying little blue blobs that bounce around, ricochet off walls, and hurt you if they smack into you. They don't take long to kill, so don't fire at them unless you're at a safe distance. When they die, they explode like a rocket - and hurt just as badly. They will come after you pretty quickly, so back up as fast as you can and fire once you know you're safe. Don't bother strafing, as they have to be near you to hurt you.

''&quot;A merrily bouncing blob as dangerous to kill as to ignore. Blech.&quot;''

{{Monsters}}</text>
      <sha1>iomhdzpvz4d1vq9fw3f1iosgl4x2ptd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1390</id>
      <parentid>1258</parentid>
      <timestamp>2009-10-08T23:24:49Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="720">{{Infobox Monster
|name=Spawn
|entity=monster_tarbaby
|model=tarbaby.mdl
|health=80
|attacks=Leap
|drop=nothing
|1stappearance=[[e4m3]]
|gameversion=Registered
}}
'''Spawn''' (also known as Tarbabies) are annoying little blue blobs that bounce around, ricochet off walls, and hurt you if they smack into you. They don't take long to kill, so don't fire at them unless you're at a safe distance. When they die, they explode like a rocket - and hurt just as badly. They will come after you pretty quickly, so back up as fast as you can and fire once you know you're safe. Don't bother strafing, as they have to be near you to hurt you.

''&quot;A merrily bouncing blob as dangerous to kill as to ignore. Blech.&quot;''

{{Monsters}}</text>
      <sha1>pcccecshwjcbyk5jsccz98rxno0b5ek</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1403</id>
      <parentid>1390</parentid>
      <timestamp>2009-10-08T23:50:27Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="756">{{Infobox Monster
|name=Spawn
|entity=monster_tarbaby
|model=tarbaby.mdl
|health=80
|attacks=Leap
|drop=nothing
|1stappearance=[[e4m3]]
|gameversion=Registered
}}
''&quot;A merrily bouncing blob as dangerous to kill as to ignore. Blech.&quot;''

'''Spawn''' (also known as Tarbabies) are annoying little blue blobs that bounce around, ricochet off walls, and hurt you if they smack into you. They don't take long to kill, so don't fire at them unless you're at a safe distance. When they die, they explode like a rocket - and hurt just as badly. They will come after you pretty quickly, so back up as fast as you can and fire once you know you're safe. Don't bother strafing, as they have to be near you to hurt you.

''&quot;Player was slimed by a Spawn&quot;''

{{Monsters}}</text>
      <sha1>ou2b8xs32gs8ndiwzbor8u8c0kwkj3r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1914</id>
      <parentid>1403</parentid>
      <timestamp>2013-03-25T03:31:07Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>fixed image location and file link</comment>
      <text xml:space="preserve" bytes="783">[[Image:Tarbaby.gif|left]]
{{Infobox Monster
|name=Spawn
|entity=monster_tarbaby
|model=tarbaby.mdl
|health=80
|attacks=Leap
|drop=nothing
|1stappearance=[[e4m3]]
|gameversion=Registered
}}
''&quot;A merrily bouncing blob as dangerous to kill as to ignore. Blech.&quot;''

'''Spawn''' (also known as Tarbabies) are annoying little blue blobs that bounce around, ricochet off walls, and hurt you if they smack into you. They don't take long to kill, so don't fire at them unless you're at a safe distance. When they die, they explode like a rocket - and hurt just as badly. They will come after you pretty quickly, so back up as fast as you can and fire once you know you're safe. Don't bother strafing, as they have to be near you to hurt you.

''&quot;Player was slimed by a Spawn&quot;''

{{Monsters}}</text>
      <sha1>dou393f2vuj5j18i2d6a9c63h4yls4i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2844</id>
      <parentid>1914</parentid>
      <timestamp>2013-04-08T14:01:04Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>updated infobox</comment>
      <text xml:space="preserve" bytes="811">[[Image:Tarbaby.gif|left]]
{{Infobox Monster
| name = Spawn
| image = monster_quake_spawn.png
| manualtext = A merrily bouncing blob as dangerous to kill as to ignore. Blech.
| health = 80
| attacks = Leap
| drop = nothing
| 1stappearance = [[e4m3]]
| gameversion = Registered
| deathmessage = Player was slimed by a Spawn
}}

'''Spawn''' (also known as Tarbabies) are annoying little blue blobs that bounce around, ricochet off walls, and hurt you if they smack into you. They don't take long to kill, so don't fire at them unless you're at a safe distance. When they die, they explode like a rocket - and hurt just as badly. They will come after you pretty quickly, so back up as fast as you can and fire once you know you're safe. Don't bother strafing, as they have to be near you to hurt you.

{{Monsters}}</text>
      <sha1>7fdx5lg8c664anvo3s9n905iwc6sra9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2845</id>
      <parentid>2844</parentid>
      <timestamp>2013-04-08T14:01:26Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>removed old image</comment>
      <text xml:space="preserve" bytes="784">{{Infobox Monster
| name = Spawn
| image = monster_quake_spawn.png
| manualtext = A merrily bouncing blob as dangerous to kill as to ignore. Blech.
| health = 80
| attacks = Leap
| drop = nothing
| 1stappearance = [[e4m3]]
| gameversion = Registered
| deathmessage = Player was slimed by a Spawn
}}

'''Spawn''' (also known as Tarbabies) are annoying little blue blobs that bounce around, ricochet off walls, and hurt you if they smack into you. They don't take long to kill, so don't fire at them unless you're at a safe distance. When they die, they explode like a rocket - and hurt just as badly. They will come after you pretty quickly, so back up as fast as you can and fire once you know you're safe. Don't bother strafing, as they have to be near you to hurt you.

{{Monsters}}</text>
      <sha1>i5b9d2m4hv5ji6nwnc0lcsjzcgunzex</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2878</id>
      <parentid>2845</parentid>
      <timestamp>2013-04-09T04:24:57Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>added basic entity info</comment>
      <text xml:space="preserve" bytes="2715">{{Infobox Monster
| name = Spawn
| image = monster_quake_spawn.png
| manualtext = A merrily bouncing blob as dangerous to kill as to ignore. Blech.
| health = 80
| attacks = Leap
| drop = nothing
| 1stappearance = [[e4m3]]
| gameversion = Registered
| deathmessage = Player was slimed by a Spawn
}}

'''Spawn''' (also known as Tarbabies) are annoying little blue blobs that bounce around, ricochet off walls, and hurt you if they smack into you. They don't take long to kill, so don't fire at them unless you're at a safe distance. When they die, they explode like a rocket - and hurt just as badly. They will come after you pretty quickly, so back up as fast as you can and fire once you know you're safe. Don't bother strafing, as they have to be near you to hurt you.

==Tactics==


&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_tarbaby
| commonname = [[Spawn]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 32 x 32 x 64
| quakec = [[tarbaby.qc]]
| precaches =
progs/tarbaby.mdl&lt;br&gt;
blob/death1.wav&lt;br&gt;
blob/hit1.wav&lt;br&gt;
blob/land1.wav&lt;br&gt;
blob/sight1.wav
}}

==Entity information==

'''monster_tarbaby''' is the [[Entity|entity]] for placing '''Spawn''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Spawn. When triggered, the Spawn will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Spawn dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Spawn dies.
|}

====Spawnflags====
The monster_tarbaby entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Spawn will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Spawn
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model(&quot;:progs/enforcer.mdl&quot;)
    = monster_tarbaby : &quot;Spawn&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_tarbaby (1 0 0) (-16 -16 -24) (16 16 40) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>9pdby8eddlt44fc8xg1ojz5mrp8vuy5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2946</id>
      <parentid>2878</parentid>
      <timestamp>2013-05-04T15:58:53Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <minor/>
      <comment>heeby-gibbies</comment>
      <text xml:space="preserve" bytes="2750">{{Infobox Monster
| name = Spawn
| image = monster_quake_spawn.png
| manualtext = A merrily bouncing blob as dangerous to kill as to ignore. Blech.
| health = 80
| gibthresh = N/A
| attacks = Leap
| drop = nothing
| 1stappearance = [[e4m3]]
| gameversion = Registered
| deathmessage = Player was slimed by a Spawn
}}

'''Spawn''' (also known as ''Tarbabies'' or ''blobs'') are annoying little blue blobs that bounce around, ricochet off walls, and hurt you if they smack into you. They don't take long to kill, so don't fire at them unless you're at a safe distance. When they die, they explode like a rocket - and hurt just as badly. They will come after you pretty quickly, so back up as fast as you can and fire once you know you're safe. Don't bother strafing, as they have to be near you to hurt you.

==Tactics==


&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_tarbaby
| commonname = [[Spawn]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 32 x 32 x 64
| quakec = [[tarbaby.qc]]
| precaches =
progs/tarbaby.mdl&lt;br&gt;
blob/death1.wav&lt;br&gt;
blob/hit1.wav&lt;br&gt;
blob/land1.wav&lt;br&gt;
blob/sight1.wav
}}

==Entity information==

'''monster_tarbaby''' is the [[Entity|entity]] for placing '''Spawn''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Spawn. When triggered, the Spawn will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Spawn dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Spawn dies.
|}

====Spawnflags====
The monster_tarbaby entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Spawn will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Spawn
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model(&quot;:progs/enforcer.mdl&quot;)
    = monster_tarbaby : &quot;Spawn&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_tarbaby (1 0 0) (-16 -16 -24) (16 16 40) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>kukqhkjpegyr0pcxvmpvujvfy49696u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Speedrunning</title>
    <ns>0</ns>
    <id>598</id>
    <revision>
      <id>1628</id>
      <timestamp>2010-08-18T20:02:28Z</timestamp>
      <contributor>
        <ip>99.246.130.206</ip>
      </contributor>
      <comment>ya fuck mac</comment>
      <text xml:space="preserve" bytes="8">fuck you</text>
      <sha1>jmdcd6147dohcjaf9tnewbepwxupi8l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1636</id>
      <parentid>1628</parentid>
      <timestamp>2010-09-09T00:19:01Z</timestamp>
      <contributor>
        <ip>159.153.4.50</ip>
      </contributor>
      <comment>Removing all content from page</comment>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2755</id>
      <parentid>1636</parentid>
      <timestamp>2013-04-05T16:43:28Z</timestamp>
      <contributor>
        <username>Deqer</username>
        <id>42</id>
      </contributor>
      <text xml:space="preserve" bytes="103">See: [http://en.wikipedia.org/wiki/Speedrun]
Also, see: [http://en.wikipedia.org/wiki/Quake_done_Quick]</text>
      <sha1>t39ak3nyu677rfub6eap2dbt9ysi8lh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2756</id>
      <parentid>2755</parentid>
      <timestamp>2013-04-05T16:44:30Z</timestamp>
      <contributor>
        <username>Deqer</username>
        <id>42</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="100">See: http://en.wikipedia.org/wiki/Speedrun

Also, see: http://en.wikipedia.org/wiki/Quake_done_Quick</text>
      <sha1>h2n2uczxpotfmtgd916dn1kwfpoo1hk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Sprint</title>
    <ns>0</ns>
    <id>217</id>
    <revision>
      <id>398</id>
      <timestamp>2008-02-23T19:08:46Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  void '''sprint''' (entity ''client'', string ''text'')  * ''client'' = player that is to receive the message * ''text'' = text of the message  Sends a message to a player.  It is, essenti...</comment>
      <text xml:space="preserve" bytes="351"> void '''sprint''' (entity ''client'', string ''text'')

* ''client'' = player that is to receive the message
* ''text'' = text of the message

Sends a message to a player.

It is, essentially, a MSG_ONE SVC_PRINT.

Here is an example:

 sprint(self, self.netname);

Like [[bprint]] the function can be overloaded to support several string parameters.</text>
      <sha1>tvynskajgpnxt3ei70myjadfxesguod</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Start</title>
    <ns>0</ns>
    <id>544</id>
    <revision>
      <id>1323</id>
      <timestamp>2009-09-27T19:31:33Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <comment>New page: {{Infobox singleplayer map |title=Introduction |author=[[John Romero]] |monsters=0 / 0 / 0 |secrets=0 |worldtype=0 (Medieval) |secretlevel=No |secretexit=No |rune=No }}</comment>
      <text xml:space="preserve" bytes="168">{{Infobox singleplayer map
|title=Introduction
|author=[[John Romero]]
|monsters=0 / 0 / 0
|secrets=0
|worldtype=0 (Medieval)
|secretlevel=No
|secretexit=No
|rune=No
}}</text>
      <sha1>7nvwrgixbog8r4skdtcb2vly7a6dmr5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1326</id>
      <parentid>1323</parentid>
      <timestamp>2009-09-28T22:34:08Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>added a bunch of stuff, will add deathmatch details later</comment>
      <text xml:space="preserve" bytes="4831">{{Infobox singleplayer map
|title=Introduction
|author=[[John Romero]]
|monsters=0 / 0 / 0
|secrets=0
|worldtype=0 (Medieval)
|secretlevel=No
|secretexit=No
|rune=No
}}
Start marks the beginning of Quake, it is the first level in a single player game, and the default map for the multiplayer as well. It opens with the Quake moniker bearing down over the player and is characterized by the three hallways the player can take to choose their difficulty setting, a unique feature of Quake, where other titles typically go for menu level options for difficulty. After the difficulty selection you have the episode selection, with each episode hall reflecting an aspect of the episode itself.

==Skill Selection==
The skill selection is from left to right, Easy, Normal, and Hard. Easy is characterized by blue water, a flat floor, and the only detail being a stained glass window. Normal however is over muddy water, with a sloping floor, and gargoyle textures creating a more imposing atmosphere. Hard requires the player to jump across broken ground over lava, while crucified zombies hang amidst spikes above; this scenario can actually prove deadly, as not only can you fall into the lava, but a lavaball periodically leaps up and may catch you, knocking you into the lava. Yes, you can die while selecting the difficulty in Quake. Each skill hallway messages via a [[trigger_multiple]] &quot;This hallway selects&quot; difficulty &quot;skill.&quot;, and the framework of the teleporter at the end also bears the name of the difficulty.

==Episode Selection==
Each episode has its own hallway, each with a [[slipgate]] at the end, and they are ordered from left to right. The individual episode hallways message the player with the name of the episode, and a brief summary of it, such as &quot;Your worst nightmares come true&quot;, and the geometry and textures help emphasize this.
===Episode 1===
* The Dimension of the Doomed ''The mystical past comes alive...''
Decorated in a base theme, and the shortest hallway, it leads to a slipgate which takes you to [[e1m1]], the beginning of the shareware episode. It is the only hallway that does not have a moving barrier, based upon registration restrictions. This episode contains the rune of earth magic.
===Episode 2===
* The Realm of Black Magic ''Ancient castles and strange beasts ahead...''
Decorated in an azure medieval theme, the player must pass through double doors with dragon carvings, which require the game be registered to open, allowing access to [[e2m1]]. This episode contains the rune of black magic.
===Episode 3===
* The Netherworld ''Primal fear in a strange dimension...''
Decorated in a metal bolts and shingles theme, the player walks over an almost lattice work styled bridge, over lava while lavaballs arc up almost touching the exposed sky. At the end of the hallway is a series of metal bars which open for the registered player, granting access to [[e3m1]]. This episode contains the rune of hell magic.
===Episode 4===
* The Elder World ''Your worst nightmares come true...''
Decorated in old carved stone, wooden beams and rusted metal, the player steps into a pool which has a surface bottom as well, as the player drops down into a pit, usually taking falling damage. He may then proceed forward to a staircase, adorned with crucified zombies, though access is blocked by large metal bars which raise vertically depending on registration status. The slipgate at the peak leads to [[e4m1]]. If the player wishes to return to the episode selection hall, they may backtrack to find a teleporter to that location. This episode contains the rune of elder magic.

==Rune Checks==
Start is a unique map in that it has two start locations for singleplayer, and it performs an inventory check on load. If the player has any runes, they start in the episode selection area, and the episode where they acquired the runes is now blocked off by a runic tablet. Once they have all four runes, when they return to start, they will find the central floor has opened up to reveal stone steps leading down into a torch lit cavern, and a drop into a slipgate to [[Shub-Niggurath's Pit|end]], with a message of &quot;''Shub-Niggurath awaits you...''&quot;

==Nightmare Skill==
There is an unofficial secret in start in the form of the Nightmare skill. This can be reached in the Episode 4 hallway. When you step into the water pool, swim back until you're up against the wall, when you fall through the bottom surface, you will land on a wooden beam which wraps around three fourths of the room. Follow it to the left into a tunnel. You will see a texture of the skins of faces stretched over a flame, shoot it for a cryptic message regarding the [[Well of Wishes]]. At the end of the hallway which turns to the left you will find a teleporter with a lava texture, which will select Nightmare difficulty.</text>
      <sha1>sjh82yu5bzvfumpttktk49i5i6rehwu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1329</id>
      <parentid>1326</parentid>
      <timestamp>2009-09-29T05:04:21Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>added basic multiplayer data using new template box for mp</comment>
      <text xml:space="preserve" bytes="5159">{{Infobox singleplayer map
|title=Introduction
|author=[[John Romero]]
|monsters=0 / 0 / 0
|secrets=0
|worldtype=0 (Medieval)
|secretlevel=No
|secretexit=No
|rune=No
}}
{{Infobox multiplayer map
|title=Introduction (multiplayer)
|author=[[John Romero]]
|style=Medieval, mixed
|rocketlaunchers=1
|lightningguns=1
|grenadelaunchers=1
|supernailguns=1
|nailguns=1
|supershotguns=1
|redarmors=1
|yellowarmors=1
|greenarmors=0
|quaddamages=1
|megahealth=1
|pentagrams=0
|ringsofshadow=0
|biosuits=0
}}
Start marks the beginning of Quake, it is the first level in a single player game, and the default map for the multiplayer as well. It opens with the Quake moniker bearing down over the player and is characterized by the three hallways the player can take to choose their difficulty setting, a unique feature of Quake, where other titles typically go for menu level options for difficulty. After the difficulty selection you have the episode selection, with each episode hall reflecting an aspect of the episode itself.

==Skill Selection==
The skill selection is from left to right, Easy, Normal, and Hard. Easy is characterized by blue water, a flat floor, and the only detail being a stained glass window. Normal however is over muddy water, with a sloping floor, and gargoyle textures creating a more imposing atmosphere. Hard requires the player to jump across broken ground over lava, while crucified zombies hang amidst spikes above; this scenario can actually prove deadly, as not only can you fall into the lava, but a lavaball periodically leaps up and may catch you, knocking you into the lava. Yes, you can die while selecting the difficulty in Quake. Each skill hallway messages via a [[trigger_multiple]] &quot;This hallway selects&quot; difficulty &quot;skill.&quot;, and the framework of the teleporter at the end also bears the name of the difficulty.

==Episode Selection==
Each episode has its own hallway, each with a [[slipgate]] at the end, and they are ordered from left to right. The individual episode hallways message the player with the name of the episode, and a brief summary of it, such as &quot;Your worst nightmares come true&quot;, and the geometry and textures help emphasize this.
===Episode 1===
* The Dimension of the Doomed ''The mystical past comes alive...''
Decorated in a base theme, and the shortest hallway, it leads to a slipgate which takes you to [[e1m1]], the beginning of the shareware episode. It is the only hallway that does not have a moving barrier, based upon registration restrictions. This episode contains the rune of earth magic.
===Episode 2===
* The Realm of Black Magic ''Ancient castles and strange beasts ahead...''
Decorated in an azure medieval theme, the player must pass through double doors with dragon carvings, which require the game be registered to open, allowing access to [[e2m1]]. This episode contains the rune of black magic.
===Episode 3===
* The Netherworld ''Primal fear in a strange dimension...''
Decorated in a metal bolts and shingles theme, the player walks over an almost lattice work styled bridge, over lava while lavaballs arc up almost touching the exposed sky. At the end of the hallway is a series of metal bars which open for the registered player, granting access to [[e3m1]]. This episode contains the rune of hell magic.
===Episode 4===
* The Elder World ''Your worst nightmares come true...''
Decorated in old carved stone, wooden beams and rusted metal, the player steps into a pool which has a surface bottom as well, as the player drops down into a pit, usually taking falling damage. He may then proceed forward to a staircase, adorned with crucified zombies, though access is blocked by large metal bars which raise vertically depending on registration status. The slipgate at the peak leads to [[e4m1]]. If the player wishes to return to the episode selection hall, they may backtrack to find a teleporter to that location. This episode contains the rune of elder magic.

==Rune Checks==
Start is a unique map in that it has two start locations for singleplayer, and it performs an inventory check on load. If the player has any runes, they start in the episode selection area, and the episode where they acquired the runes is now blocked off by a runic tablet. Once they have all four runes, when they return to start, they will find the central floor has opened up to reveal stone steps leading down into a torch lit cavern, and a drop into a slipgate to [[Shub-Niggurath's Pit|end]], with a message of &quot;''Shub-Niggurath awaits you...''&quot;

==Nightmare Skill==
There is an unofficial secret in start in the form of the Nightmare skill. This can be reached in the Episode 4 hallway. When you step into the water pool, swim back until you're up against the wall, when you fall through the bottom surface, you will land on a wooden beam which wraps around three fourths of the room. Follow it to the left into a tunnel. You will see a texture of the skins of faces stretched over a flame, shoot it for a cryptic message regarding the [[Well of Wishes]]. At the end of the hallway which turns to the left you will find a teleporter with a lava texture, which will select Nightmare difficulty.</text>
      <sha1>t118np12jp0vb3s3td8ewknvpa7llq0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1333</id>
      <parentid>1329</parentid>
      <timestamp>2009-09-29T16:21:41Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>added some detail on the multiplayer behavior of the map</comment>
      <text xml:space="preserve" bytes="6170">{{Infobox singleplayer map
|title=Introduction
|author=[[John Romero]]
|monsters=0 / 0 / 0
|secrets=0
|worldtype=0 (Medieval)
|secretlevel=No
|secretexit=No
|rune=No
}}
{{Infobox multiplayer map
|title=Introduction (multiplayer)
|author=[[John Romero]]
|style=Medieval, mixed
|rocketlaunchers=1
|lightningguns=1
|grenadelaunchers=1
|supernailguns=1
|nailguns=1
|supershotguns=1
|redarmors=1
|yellowarmors=1
|greenarmors=0
|quaddamages=1
|megahealth=1
|pentagrams=0
|ringsofshadow=0
|biosuits=0
}}
Start marks the beginning of Quake, it is the first level in a single player game, and the default map for the multiplayer as well. It opens with the Quake moniker bearing down over the player and is characterized by the three hallways the player can take to choose their difficulty setting, a unique feature of Quake, where other titles typically go for menu level options for difficulty. After the difficulty selection you have the episode selection, with each episode hall reflecting an aspect of the episode itself.

==Skill Selection==
The skill selection is from left to right, Easy, Normal, and Hard. Easy is characterized by blue water, a flat floor, and the only detail being a stained glass window. Normal however is over muddy water, with a sloping floor, and gargoyle textures creating a more imposing atmosphere. Hard requires the player to jump across broken ground over lava, while crucified zombies hang amidst spikes above; this scenario can actually prove deadly, as not only can you fall into the lava, but a lavaball periodically leaps up and may catch you, knocking you into the lava. Yes, you can die while selecting the difficulty in Quake. Each skill hallway messages via a [[trigger_multiple]] &quot;This hallway selects&quot; difficulty &quot;skill.&quot;, and the framework of the teleporter at the end also bears the name of the difficulty.

==Episode Selection==
Each episode has its own hallway, each with a [[slipgate]] at the end, and they are ordered from left to right. The individual episode hallways message the player with the name of the episode, and a brief summary of it, such as &quot;Your worst nightmares come true&quot;, and the geometry and textures help emphasize this.
===Episode 1===
* The Dimension of the Doomed ''The mystical past comes alive...''
Decorated in a base theme, and the shortest hallway, it leads to a slipgate which takes you to [[e1m1]], the beginning of the shareware episode. It is the only hallway that does not have a moving barrier, based upon registration restrictions. This episode contains the rune of earth magic.
===Episode 2===
* The Realm of Black Magic ''Ancient castles and strange beasts ahead...''
Decorated in an azure medieval theme, the player must pass through double doors with dragon carvings, which require the game be registered to open, allowing access to [[e2m1]]. This episode contains the rune of black magic.
===Episode 3===
* The Netherworld ''Primal fear in a strange dimension...''
Decorated in a metal bolts and shingles theme, the player walks over an almost lattice work styled bridge, over lava while lavaballs arc up almost touching the exposed sky. At the end of the hallway is a series of metal bars which open for the registered player, granting access to [[e3m1]]. This episode contains the rune of hell magic.
===Episode 4===
* The Elder World ''Your worst nightmares come true...''
Decorated in old carved stone, wooden beams and rusted metal, the player steps into a pool which has a surface bottom as well, as the player drops down into a pit, usually taking falling damage. He may then proceed forward to a staircase, adorned with crucified zombies, though access is blocked by large metal bars which raise vertically depending on registration status. The slipgate at the peak leads to [[e4m1]]. If the player wishes to return to the episode selection hall, they may backtrack to find a teleporter to that location. This episode contains the rune of elder magic.

==Rune Checks==
Start is a unique map in that it has two start locations for singleplayer, and it performs an inventory check on load. If the player has any runes, they start in the episode selection area, and the episode where they acquired the runes is now blocked off by a runic tablet. Once they have all four runes, when they return to start, they will find the central floor has opened up to reveal stone steps leading down into a torch lit cavern, and a drop into a slipgate to [[Shub-Niggurath's Pit|end]], with a message of &quot;''Shub-Niggurath awaits you...''&quot;

==Nightmare Skill==
There is an unofficial secret in start in the form of the Nightmare skill. This can be reached in the Episode 4 hallway. When you step into the water pool, swim back until you're up against the wall, when you fall through the bottom surface, you will land on a wooden beam which wraps around three fourths of the room. Follow it to the left into a tunnel. You will see a texture of the skins of faces stretched over a flame, shoot it for a cryptic message regarding the [[Well of Wishes]]. At the end of the hallway which turns to the left you will find a teleporter with a lava texture, which will select Nightmare difficulty.

==Multiplayer==
Multiplayer on Introduction is unique in the separation of items, so as to keep any one place from being mildly sufficient, but rather making each place excel at one thing. First off, aside from the megahealth, all health pickups are located in the skill selection, along with the nailgun. All other weapons are found in the episode selections, with episode 1 containing the super shotgun, episode 2 has the grenade launcher, some ammo and a yellow armor, episode 3 has both a rocket launcher and lightning gun with ammo, but no armor, and episode 4 has the super nail gun, red armor, and the nightmare skill select takes you to the (sealed off) cave to Shub-Niggurath's Pit, where you can find a quad damage and megahealth, and a teleporter back to the skill select. This manages to create a fair amount of flow through for what would be an otherwise dead ending multiplayer map. All exits are blocked off with risers, that can be jumped over, but is sufficient to prevent accidental exiting.</text>
      <sha1>7mzn6hen0qrvsa5ycycpwh7324kzaeh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1362</id>
      <parentid>1333</parentid>
      <timestamp>2009-10-01T16:32:44Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <comment>/* Skill Selection */</comment>
      <text xml:space="preserve" bytes="6296">{{Infobox singleplayer map
|title=Introduction
|author=[[John Romero]]
|monsters=0 / 0 / 0
|secrets=0
|worldtype=0 (Medieval)
|secretlevel=No
|secretexit=No
|rune=No
}}
{{Infobox multiplayer map
|title=Introduction (multiplayer)
|author=[[John Romero]]
|style=Medieval, mixed
|rocketlaunchers=1
|lightningguns=1
|grenadelaunchers=1
|supernailguns=1
|nailguns=1
|supershotguns=1
|redarmors=1
|yellowarmors=1
|greenarmors=0
|quaddamages=1
|megahealth=1
|pentagrams=0
|ringsofshadow=0
|biosuits=0
}}
Start marks the beginning of Quake, it is the first level in a single player game, and the default map for the multiplayer as well. It opens with the Quake moniker bearing down over the player and is characterized by the three hallways the player can take to choose their difficulty setting, a unique feature of Quake, where other titles typically go for menu level options for difficulty. After the difficulty selection you have the episode selection, with each episode hall reflecting an aspect of the episode itself.

==Skill Selection==
[[Image:Start_1.jpg|left|thumb|The first thing you see in Quake, the skill select. Image courtesy of Spirit @ quaddicted.com]]The skill selection is from left to right, Easy, Normal, and Hard. Easy is characterized by blue water, a flat floor, and the only detail being a stained glass window. Normal however is over muddy water, with a sloping floor, and gargoyle textures creating a more imposing atmosphere. Hard requires the player to jump across broken ground over lava, while crucified zombies hang amidst spikes above; this scenario can actually prove deadly, as not only can you fall into the lava, but a lavaball periodically leaps up and may catch you, knocking you into the lava. Yes, you can die while selecting the difficulty in Quake. Each skill hallway messages via a [[trigger_multiple]] &quot;This hallway selects&quot; difficulty &quot;skill.&quot;, and the framework of the teleporter at the end also bears the name of the difficulty.

==Episode Selection==
Each episode has its own hallway, each with a [[slipgate]] at the end, and they are ordered from left to right. The individual episode hallways message the player with the name of the episode, and a brief summary of it, such as &quot;Your worst nightmares come true&quot;, and the geometry and textures help emphasize this.
===Episode 1===
* The Dimension of the Doomed ''The mystical past comes alive...''
Decorated in a base theme, and the shortest hallway, it leads to a slipgate which takes you to [[e1m1]], the beginning of the shareware episode. It is the only hallway that does not have a moving barrier, based upon registration restrictions. This episode contains the rune of earth magic.
===Episode 2===
* The Realm of Black Magic ''Ancient castles and strange beasts ahead...''
Decorated in an azure medieval theme, the player must pass through double doors with dragon carvings, which require the game be registered to open, allowing access to [[e2m1]]. This episode contains the rune of black magic.
===Episode 3===
* The Netherworld ''Primal fear in a strange dimension...''
Decorated in a metal bolts and shingles theme, the player walks over an almost lattice work styled bridge, over lava while lavaballs arc up almost touching the exposed sky. At the end of the hallway is a series of metal bars which open for the registered player, granting access to [[e3m1]]. This episode contains the rune of hell magic.
===Episode 4===
* The Elder World ''Your worst nightmares come true...''
Decorated in old carved stone, wooden beams and rusted metal, the player steps into a pool which has a surface bottom as well, as the player drops down into a pit, usually taking falling damage. He may then proceed forward to a staircase, adorned with crucified zombies, though access is blocked by large metal bars which raise vertically depending on registration status. The slipgate at the peak leads to [[e4m1]]. If the player wishes to return to the episode selection hall, they may backtrack to find a teleporter to that location. This episode contains the rune of elder magic.

==Rune Checks==
Start is a unique map in that it has two start locations for singleplayer, and it performs an inventory check on load. If the player has any runes, they start in the episode selection area, and the episode where they acquired the runes is now blocked off by a runic tablet. Once they have all four runes, when they return to start, they will find the central floor has opened up to reveal stone steps leading down into a torch lit cavern, and a drop into a slipgate to [[Shub-Niggurath's Pit|end]], with a message of &quot;''Shub-Niggurath awaits you...''&quot;

==Nightmare Skill==
There is an unofficial secret in start in the form of the Nightmare skill. This can be reached in the Episode 4 hallway. When you step into the water pool, swim back until you're up against the wall, when you fall through the bottom surface, you will land on a wooden beam which wraps around three fourths of the room. Follow it to the left into a tunnel. You will see a texture of the skins of faces stretched over a flame, shoot it for a cryptic message regarding the [[Well of Wishes]]. At the end of the hallway which turns to the left you will find a teleporter with a lava texture, which will select Nightmare difficulty.

==Multiplayer==
Multiplayer on Introduction is unique in the separation of items, so as to keep any one place from being mildly sufficient, but rather making each place excel at one thing. First off, aside from the megahealth, all health pickups are located in the skill selection, along with the nailgun. All other weapons are found in the episode selections, with episode 1 containing the super shotgun, episode 2 has the grenade launcher, some ammo and a yellow armor, episode 3 has both a rocket launcher and lightning gun with ammo, but no armor, and episode 4 has the super nail gun, red armor, and the nightmare skill select takes you to the (sealed off) cave to Shub-Niggurath's Pit, where you can find a quad damage and megahealth, and a teleporter back to the skill select. This manages to create a fair amount of flow through for what would be an otherwise dead ending multiplayer map. All exits are blocked off with risers, that can be jumped over, but is sufficient to prevent accidental exiting.</text>
      <sha1>6w03qak9hs1pd0ggk445ioz6raqj0b4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1363</id>
      <parentid>1362</parentid>
      <timestamp>2009-10-01T16:34:52Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="6298">[[Image:Start_1.jpg|left|thumb|The first thing you see in Quake, the skill select. Image courtesy of Spirit @ quaddicted.com]]
{{Infobox singleplayer map
|title=Introduction
|author=[[John Romero]]
|monsters=0 / 0 / 0
|secrets=0
|worldtype=0 (Medieval)
|secretlevel=No
|secretexit=No
|rune=No
}}
{{Infobox multiplayer map
|title=Introduction (multiplayer)
|author=[[John Romero]]
|style=Medieval, mixed
|rocketlaunchers=1
|lightningguns=1
|grenadelaunchers=1
|supernailguns=1
|nailguns=1
|supershotguns=1
|redarmors=1
|yellowarmors=1
|greenarmors=0
|quaddamages=1
|megahealth=1
|pentagrams=0
|ringsofshadow=0
|biosuits=0
}}
Start marks the beginning of Quake, it is the first level in a single player game, and the default map for the multiplayer as well. It opens with the Quake moniker bearing down over the player and is characterized by the three hallways the player can take to choose their difficulty setting, a unique feature of Quake, where other titles typically go for menu level options for difficulty. After the difficulty selection you have the episode selection, with each episode hall reflecting an aspect of the episode itself.

==Skill Selection==
The skill selection is from left to right, Easy, Normal, and Hard. Easy is characterized by blue water, a flat floor, and the only detail being a stained glass window. Normal however is over muddy water, with a sloping floor, and gargoyle textures creating a more imposing atmosphere. Hard requires the player to jump across broken ground over lava, while crucified zombies hang amidst spikes above; this scenario can actually prove deadly, as not only can you fall into the lava, but a lavaball periodically leaps up and may catch you, knocking you into the lava. Yes, you can die while selecting the difficulty in Quake. Each skill hallway messages via a [[trigger_multiple]] &quot;This hallway selects&quot; difficulty &quot;skill.&quot;, and the framework of the teleporter at the end also bears the name of the difficulty.


==Episode Selection==
Each episode has its own hallway, each with a [[slipgate]] at the end, and they are ordered from left to right. The individual episode hallways message the player with the name of the episode, and a brief summary of it, such as &quot;Your worst nightmares come true&quot;, and the geometry and textures help emphasize this.
===Episode 1===
* The Dimension of the Doomed ''The mystical past comes alive...''
Decorated in a base theme, and the shortest hallway, it leads to a slipgate which takes you to [[e1m1]], the beginning of the shareware episode. It is the only hallway that does not have a moving barrier, based upon registration restrictions. This episode contains the rune of earth magic.
===Episode 2===
* The Realm of Black Magic ''Ancient castles and strange beasts ahead...''
Decorated in an azure medieval theme, the player must pass through double doors with dragon carvings, which require the game be registered to open, allowing access to [[e2m1]]. This episode contains the rune of black magic.
===Episode 3===
* The Netherworld ''Primal fear in a strange dimension...''
Decorated in a metal bolts and shingles theme, the player walks over an almost lattice work styled bridge, over lava while lavaballs arc up almost touching the exposed sky. At the end of the hallway is a series of metal bars which open for the registered player, granting access to [[e3m1]]. This episode contains the rune of hell magic.
===Episode 4===
* The Elder World ''Your worst nightmares come true...''
Decorated in old carved stone, wooden beams and rusted metal, the player steps into a pool which has a surface bottom as well, as the player drops down into a pit, usually taking falling damage. He may then proceed forward to a staircase, adorned with crucified zombies, though access is blocked by large metal bars which raise vertically depending on registration status. The slipgate at the peak leads to [[e4m1]]. If the player wishes to return to the episode selection hall, they may backtrack to find a teleporter to that location. This episode contains the rune of elder magic.

==Rune Checks==
Start is a unique map in that it has two start locations for singleplayer, and it performs an inventory check on load. If the player has any runes, they start in the episode selection area, and the episode where they acquired the runes is now blocked off by a runic tablet. Once they have all four runes, when they return to start, they will find the central floor has opened up to reveal stone steps leading down into a torch lit cavern, and a drop into a slipgate to [[Shub-Niggurath's Pit|end]], with a message of &quot;''Shub-Niggurath awaits you...''&quot;

==Nightmare Skill==
There is an unofficial secret in start in the form of the Nightmare skill. This can be reached in the Episode 4 hallway. When you step into the water pool, swim back until you're up against the wall, when you fall through the bottom surface, you will land on a wooden beam which wraps around three fourths of the room. Follow it to the left into a tunnel. You will see a texture of the skins of faces stretched over a flame, shoot it for a cryptic message regarding the [[Well of Wishes]]. At the end of the hallway which turns to the left you will find a teleporter with a lava texture, which will select Nightmare difficulty.

==Multiplayer==
Multiplayer on Introduction is unique in the separation of items, so as to keep any one place from being mildly sufficient, but rather making each place excel at one thing. First off, aside from the megahealth, all health pickups are located in the skill selection, along with the nailgun. All other weapons are found in the episode selections, with episode 1 containing the super shotgun, episode 2 has the grenade launcher, some ammo and a yellow armor, episode 3 has both a rocket launcher and lightning gun with ammo, but no armor, and episode 4 has the super nail gun, red armor, and the nightmare skill select takes you to the (sealed off) cave to Shub-Niggurath's Pit, where you can find a quad damage and megahealth, and a teleporter back to the skill select. This manages to create a fair amount of flow through for what would be an otherwise dead ending multiplayer map. All exits are blocked off with risers, that can be jumped over, but is sufficient to prevent accidental exiting.</text>
      <sha1>4yfyg94uqq4pruu33f2txbd68yewxv1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1364</id>
      <parentid>1363</parentid>
      <timestamp>2009-10-01T16:36:32Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="6256">[[Image:Start_1.jpg|left|thumb|The first thing you see in Quake, the skill select.]]
{{Infobox singleplayer map
|title=Introduction
|author=[[John Romero]]
|monsters=0 / 0 / 0
|secrets=0
|worldtype=0 (Medieval)
|secretlevel=No
|secretexit=No
|rune=No
}}
{{Infobox multiplayer map
|title=Introduction (multiplayer)
|author=[[John Romero]]
|style=Medieval, mixed
|rocketlaunchers=1
|lightningguns=1
|grenadelaunchers=1
|supernailguns=1
|nailguns=1
|supershotguns=1
|redarmors=1
|yellowarmors=1
|greenarmors=0
|quaddamages=1
|megahealth=1
|pentagrams=0
|ringsofshadow=0
|biosuits=0
}}
Start marks the beginning of Quake, it is the first level in a single player game, and the default map for the multiplayer as well. It opens with the Quake moniker bearing down over the player and is characterized by the three hallways the player can take to choose their difficulty setting, a unique feature of Quake, where other titles typically go for menu level options for difficulty. After the difficulty selection you have the episode selection, with each episode hall reflecting an aspect of the episode itself.

==Skill Selection==
The skill selection is from left to right, Easy, Normal, and Hard. Easy is characterized by blue water, a flat floor, and the only detail being a stained glass window. Normal however is over muddy water, with a sloping floor, and gargoyle textures creating a more imposing atmosphere. Hard requires the player to jump across broken ground over lava, while crucified zombies hang amidst spikes above; this scenario can actually prove deadly, as not only can you fall into the lava, but a lavaball periodically leaps up and may catch you, knocking you into the lava. Yes, you can die while selecting the difficulty in Quake. Each skill hallway messages via a [[trigger_multiple]] &quot;This hallway selects&quot; difficulty &quot;skill.&quot;, and the framework of the teleporter at the end also bears the name of the difficulty.


==Episode Selection==
Each episode has its own hallway, each with a [[slipgate]] at the end, and they are ordered from left to right. The individual episode hallways message the player with the name of the episode, and a brief summary of it, such as &quot;Your worst nightmares come true&quot;, and the geometry and textures help emphasize this.
===Episode 1===
* The Dimension of the Doomed ''The mystical past comes alive...''
Decorated in a base theme, and the shortest hallway, it leads to a slipgate which takes you to [[e1m1]], the beginning of the shareware episode. It is the only hallway that does not have a moving barrier, based upon registration restrictions. This episode contains the rune of earth magic.
===Episode 2===
* The Realm of Black Magic ''Ancient castles and strange beasts ahead...''
Decorated in an azure medieval theme, the player must pass through double doors with dragon carvings, which require the game be registered to open, allowing access to [[e2m1]]. This episode contains the rune of black magic.
===Episode 3===
* The Netherworld ''Primal fear in a strange dimension...''
Decorated in a metal bolts and shingles theme, the player walks over an almost lattice work styled bridge, over lava while lavaballs arc up almost touching the exposed sky. At the end of the hallway is a series of metal bars which open for the registered player, granting access to [[e3m1]]. This episode contains the rune of hell magic.
===Episode 4===
* The Elder World ''Your worst nightmares come true...''
Decorated in old carved stone, wooden beams and rusted metal, the player steps into a pool which has a surface bottom as well, as the player drops down into a pit, usually taking falling damage. He may then proceed forward to a staircase, adorned with crucified zombies, though access is blocked by large metal bars which raise vertically depending on registration status. The slipgate at the peak leads to [[e4m1]]. If the player wishes to return to the episode selection hall, they may backtrack to find a teleporter to that location. This episode contains the rune of elder magic.

==Rune Checks==
Start is a unique map in that it has two start locations for singleplayer, and it performs an inventory check on load. If the player has any runes, they start in the episode selection area, and the episode where they acquired the runes is now blocked off by a runic tablet. Once they have all four runes, when they return to start, they will find the central floor has opened up to reveal stone steps leading down into a torch lit cavern, and a drop into a slipgate to [[Shub-Niggurath's Pit|end]], with a message of &quot;''Shub-Niggurath awaits you...''&quot;

==Nightmare Skill==
There is an unofficial secret in start in the form of the Nightmare skill. This can be reached in the Episode 4 hallway. When you step into the water pool, swim back until you're up against the wall, when you fall through the bottom surface, you will land on a wooden beam which wraps around three fourths of the room. Follow it to the left into a tunnel. You will see a texture of the skins of faces stretched over a flame, shoot it for a cryptic message regarding the [[Well of Wishes]]. At the end of the hallway which turns to the left you will find a teleporter with a lava texture, which will select Nightmare difficulty.

==Multiplayer==
Multiplayer on Introduction is unique in the separation of items, so as to keep any one place from being mildly sufficient, but rather making each place excel at one thing. First off, aside from the megahealth, all health pickups are located in the skill selection, along with the nailgun. All other weapons are found in the episode selections, with episode 1 containing the super shotgun, episode 2 has the grenade launcher, some ammo and a yellow armor, episode 3 has both a rocket launcher and lightning gun with ammo, but no armor, and episode 4 has the super nail gun, red armor, and the nightmare skill select takes you to the (sealed off) cave to Shub-Niggurath's Pit, where you can find a quad damage and megahealth, and a teleporter back to the skill select. This manages to create a fair amount of flow through for what would be an otherwise dead ending multiplayer map. All exits are blocked off with risers, that can be jumped over, but is sufficient to prevent accidental exiting.</text>
      <sha1>t024yjckkwmz3bo3phjdg6m1posjfy8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1367</id>
      <parentid>1364</parentid>
      <timestamp>2009-10-01T16:42:50Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="6528">[[Image:Start_1.jpg|left|thumb|The first thing you see in Quake, the skill select.]]
{{Infobox singleplayer map
|title=Introduction
|author=[[John Romero]]
|monsters=0 / 0 / 0
|secrets=0
|worldtype=0 (Medieval)
|secretlevel=No
|secretexit=No
|rune=No
}}
{{Infobox multiplayer map
|title=Introduction (multiplayer)
|author=[[John Romero]]
|style=Medieval, mixed
|rocketlaunchers=1
|lightningguns=1
|grenadelaunchers=1
|supernailguns=1
|nailguns=1
|supershotguns=1
|redarmors=1
|yellowarmors=1
|greenarmors=0
|quaddamages=1
|megahealth=1
|pentagrams=0
|ringsofshadow=0
|biosuits=0
}}
Start marks the beginning of Quake, it is the first level in a single player game, and the default map for the multiplayer as well. It opens with the Quake moniker bearing down over the player and is characterized by the three hallways the player can take to choose their difficulty setting, a unique feature of Quake, where other titles typically go for menu level options for difficulty. After the difficulty selection you have the episode selection, with each episode hall reflecting an aspect of the episode itself.

==Skill Selection==
The skill selection is from left to right, Easy, Normal, and Hard. Easy is characterized by blue water, a flat floor, and the only detail being a stained glass window. Normal however is over muddy water, with a sloping floor, and gargoyle textures creating a more imposing atmosphere. Hard requires the player to jump across broken ground over lava, while crucified zombies hang amidst spikes above; this scenario can actually prove deadly, as not only can you fall into the lava, but a lavaball periodically leaps up and may catch you, knocking you into the lava. Yes, you can die while selecting the difficulty in Quake. Each skill hallway messages via a [[trigger_multiple]] &quot;This hallway selects&quot; difficulty &quot;skill.&quot;, and the framework of the teleporter at the end also bears the name of the difficulty.


==Episode Selection==
[[Image:Start_2.jpg|left|thumb|The episode selection area of introduction, showing the first three halls.]]
Each episode has its own hallway, each with a [[slipgate]] at the end, and they are ordered from left to right. The individual episode hallways message the player with the name of the episode, and a brief summary of it, such as &quot;Your worst nightmares come true&quot;, and the geometry and textures help emphasize this.
===Episode 1===
* The Dimension of the Doomed ''The mystical past comes alive...''
Decorated in a base theme, and the shortest hallway, it leads to a slipgate which takes you to [[e1m1]], the beginning of the shareware episode. It is the only hallway that does not have a moving barrier, based upon registration restrictions. This episode contains the rune of earth magic.
===Episode 2===
* The Realm of Black Magic ''Ancient castles and strange beasts ahead...''
Decorated in an azure medieval theme, the player must pass through double doors with dragon carvings, which require the game be registered to open, allowing access to [[e2m1]]. This episode contains the rune of black magic.
===Episode 3===
* The Netherworld ''Primal fear in a strange dimension...''
Decorated in a metal bolts and shingles theme, the player walks over an almost lattice work styled bridge, over lava while lavaballs arc up almost touching the exposed sky. At the end of the hallway is a series of metal bars which open for the registered player, granting access to [[e3m1]]. This episode contains the rune of hell magic.
===Episode 4===
* The Elder World ''Your worst nightmares come true...''
Decorated in old carved stone, wooden beams and rusted metal, the player steps into a pool which has a surface bottom as well, as the player drops down into a pit, usually taking falling damage. He may then proceed forward to a staircase, adorned with crucified zombies, though access is blocked by large metal bars which raise vertically depending on registration status. The slipgate at the peak leads to [[e4m1]]. If the player wishes to return to the episode selection hall, they may backtrack to find a teleporter to that location. This episode contains the rune of elder magic.

==Rune Checks==
Start is a unique map in that it has two start locations for singleplayer, and it performs an inventory check on load. If the player has any runes, they start in the episode selection area, and the episode where they acquired the runes is now blocked off by a runic tablet. Once they have all four runes, when they return to start, they will find the central floor has opened up to reveal stone steps leading down into a torch lit cavern, and a drop into a slipgate to [[Shub-Niggurath's Pit|end]], with a message of &quot;''Shub-Niggurath awaits you...''&quot;

[[Image:Start_3.jpg|right|thumb|The episode 4 selection area with the bars closed, and a glimpse of the Nightmare skill hall. Note the suspended pool of water.]]
==Nightmare Skill==

There is an unofficial secret in start in the form of the Nightmare skill. This can be reached in the Episode 4 hallway. When you step into the water pool, swim back until you're up against the wall, when you fall through the bottom surface, you will land on a wooden beam which wraps around three fourths of the room. Follow it to the left into a tunnel. You will see a texture of the skins of faces stretched over a flame, shoot it for a cryptic message regarding the [[Well of Wishes]]. At the end of the hallway which turns to the left you will find a teleporter with a lava texture, which will select Nightmare difficulty.


==Multiplayer==
Multiplayer on Introduction is unique in the separation of items, so as to keep any one place from being mildly sufficient, but rather making each place excel at one thing. First off, aside from the megahealth, all health pickups are located in the skill selection, along with the nailgun. All other weapons are found in the episode selections, with episode 1 containing the super shotgun, episode 2 has the grenade launcher, some ammo and a yellow armor, episode 3 has both a rocket launcher and lightning gun with ammo, but no armor, and episode 4 has the super nail gun, red armor, and the nightmare skill select takes you to the (sealed off) cave to Shub-Niggurath's Pit, where you can find a quad damage and megahealth, and a teleporter back to the skill select. This manages to create a fair amount of flow through for what would be an otherwise dead ending multiplayer map. All exits are blocked off with risers, that can be jumped over, but is sufficient to prevent accidental exiting.</text>
      <sha1>adwzcydsarzbk3cj470z1xa5hlv90mj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1414</id>
      <parentid>1367</parentid>
      <timestamp>2009-10-10T19:47:31Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="6279">[[Image:Start_1.jpg|left|thumb|The first thing you see in Quake, the skill select.]]
{{Infobox singleplayer map
|title=Introduction
|author=[[John Romero]]
|monsters=0 / 0 / 0
|secrets=0
|worldtype=0 (Medieval)
|secretlevel=No
|secretexit=No
|previouslevel=None
|nextlevel=[[e1m1]], [[e2m1]], [[e3m1]], [[e4m1]], [[end]]
|rune=No
}}
Start marks the beginning of Quake, it is the first level in a single player game, and the default map for the multiplayer as well. It opens with the Quake moniker bearing down over the player and is characterized by the three hallways the player can take to choose their difficulty setting, a unique feature of Quake, where other titles typically go for menu level options for difficulty. After the difficulty selection you have the episode selection, with each episode hall reflecting an aspect of the episode itself.

==Skill Selection==
The skill selection is from left to right, Easy, Normal, and Hard. Easy is characterized by blue water, a flat floor, and the only detail being a stained glass window. Normal however is over muddy water, with a sloping floor, and gargoyle textures creating a more imposing atmosphere. Hard requires the player to jump across broken ground over lava, while crucified zombies hang amidst spikes above; this scenario can actually prove deadly, as not only can you fall into the lava, but a lavaball periodically leaps up and may catch you, knocking you into the lava. Yes, you can die while selecting the difficulty in Quake. Each skill hallway messages via a [[trigger_multiple]] &quot;This hallway selects&quot; difficulty &quot;skill.&quot;, and the framework of the teleporter at the end also bears the name of the difficulty.


==Episode Selection==
[[Image:Start_2.jpg|left|thumb|The episode selection area of introduction, showing the first three halls.]]
Each episode has its own hallway, each with a [[slipgate]] at the end, and they are ordered from left to right. The individual episode hallways message the player with the name of the episode, and a brief summary of it, such as &quot;Your worst nightmares come true&quot;, and the geometry and textures help emphasize this.
===Episode 1===
* The Dimension of the Doomed ''The mystical past comes alive...''
Decorated in a base theme, and the shortest hallway, it leads to a slipgate which takes you to [[e1m1]], the beginning of the shareware episode. It is the only hallway that does not have a moving barrier, based upon registration restrictions. This episode contains the rune of earth magic.
===Episode 2===
* The Realm of Black Magic ''Ancient castles and strange beasts ahead...''
Decorated in an azure medieval theme, the player must pass through double doors with dragon carvings, which require the game be registered to open, allowing access to [[e2m1]]. This episode contains the rune of black magic.
===Episode 3===
* The Netherworld ''Primal fear in a strange dimension...''
Decorated in a metal bolts and shingles theme, the player walks over an almost lattice work styled bridge, over lava while lavaballs arc up almost touching the exposed sky. At the end of the hallway is a series of metal bars which open for the registered player, granting access to [[e3m1]]. This episode contains the rune of hell magic.
===Episode 4===
* The Elder World ''Your worst nightmares come true...''
Decorated in old carved stone, wooden beams and rusted metal, the player steps into a pool which has a surface bottom as well, as the player drops down into a pit, usually taking falling damage. He may then proceed forward to a staircase, adorned with crucified zombies, though access is blocked by large metal bars which raise vertically depending on registration status. The slipgate at the peak leads to [[e4m1]]. If the player wishes to return to the episode selection hall, they may backtrack to find a teleporter to that location. This episode contains the rune of elder magic.

==Rune Checks==
Start is a unique map in that it has two start locations for singleplayer, and it performs an inventory check on load. If the player has any runes, they start in the episode selection area, and the episode where they acquired the runes is now blocked off by a runic tablet. Once they have all four runes, when they return to start, they will find the central floor has opened up to reveal stone steps leading down into a torch lit cavern, and a drop into a slipgate to [[Shub-Niggurath's Pit|end]], with a message of &quot;''Shub-Niggurath awaits you...''&quot;

[[Image:Start_3.jpg|right|thumb|The episode 4 selection area with the bars closed, and a glimpse of the Nightmare skill hall. Note the suspended pool of water.]]
==Nightmare Skill==

There is an unofficial secret in start in the form of the Nightmare skill. This can be reached in the Episode 4 hallway. When you step into the water pool, swim back until you're up against the wall, when you fall through the bottom surface, you will land on a wooden beam which wraps around three fourths of the room. Follow it to the left into a tunnel. You will see a texture of the skins of faces stretched over a flame, shoot it for a cryptic message regarding the [[Well of Wishes]]. At the end of the hallway which turns to the left you will find a teleporter with a lava texture, which will select Nightmare difficulty.


==Multiplayer==
Multiplayer on Introduction is unique in the separation of items, so as to keep any one place from being mildly sufficient, but rather making each place excel at one thing. First off, aside from the megahealth, all health pickups are located in the skill selection, along with the nailgun. All other weapons are found in the episode selections, with episode 1 containing the super shotgun, episode 2 has the grenade launcher, some ammo and a yellow armor, episode 3 has both a rocket launcher and lightning gun with ammo, but no armor, and episode 4 has the super nail gun, red armor, and the nightmare skill select takes you to the (sealed off) cave to Shub-Niggurath's Pit, where you can find a quad damage and megahealth, and a teleporter back to the skill select. This manages to create a fair amount of flow through for what would be an otherwise dead ending multiplayer map. All exits are blocked off with risers, that can be jumped over, but is sufficient to prevent accidental exiting.</text>
      <sha1>stqau5260ii3nq38s4h47vz8ncm7a6s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>String</title>
    <ns>0</ns>
    <id>929</id>
    <redirect title="string" />
    <revision>
      <id>2625</id>
      <timestamp>2013-03-29T14:22:21Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[String]] to [[string]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="20">#REDIRECT [[string]]</text>
      <sha1>tkn1g14w217o1ed8k8466izljrd91sv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Stuffcmd</title>
    <ns>0</ns>
    <id>215</id>
    <revision>
      <id>396</id>
      <timestamp>2008-02-23T18:56:49Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  void '''stuffcmd''' (entity ''client'', string ''text'')  * ''client'' = player that is to receive the command * ''text'' = text of the command, ended by \
 (newline).  Sends a command to...</comment>
      <text xml:space="preserve" bytes="327"> void '''stuffcmd''' (entity ''client'', string ''text'')

* ''client'' = player that is to receive the command
* ''text'' = text of the command, ended by \
 (newline).

Sends a command to a given player, as if it had been typed on the player's console.

The command actually generates a reliable SVC_STUFFTEXT network message.</text>
      <sha1>r469mc3us3npjsgvn4ngw0k2d8yq9x0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Super Nailgun</title>
    <ns>0</ns>
    <id>402</id>
    <revision>
      <id>686</id>
      <timestamp>2008-05-07T19:48:16Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page:  == Description ==  Ouch. This one uses twice as many nails, but it also dishes out twice the damage. 18 health is stolen with each little spike. It fires off just as fast as the nailgun, ...</comment>
      <text xml:space="preserve" bytes="1451">
== Description ==

Ouch. This one uses twice as many nails, but it also dishes out twice the damage. 18 health is stolen with each little spike. It fires off just as fast as the nailgun, but it only fires one stream of nails instead of two alternating streams. This makes it a little bit harder to use, but with the extra damage it's worth the risk.

Strafing doesn't help you a whole lot with this weapon, mostly because you won't have that much ammo to waste. Jumping really doesn't help a lot either, again because a lot of nails will end up flying over someone's head. Your best bet is to keep running and simply look back and forth while firing. This is the best way to spread the nails without wasting too much ammo. For the most part, you're going to have to get a good lock on someone at a fairly close range to make this weapon truly effective.

Defense for this weapon is very much like that of the nailgun, except that little mistakes will cost a lot more. Try to make them run out of ammo, but this time never stop jumping and strafing - don't even try to orbit them unless you're stuck being in close range. Once their nails run out - and it won't take long - they have also lost the use of their standard nailgun, so you have a fair chance of being able to kill them. Again, if you have a really good weapon, just let them have it without trying to make them run out of ammo.

----
'''Effectiveness:''' Good

'''Avoidability:''' Average</text>
      <sha1>pn0aayxhqqbtge0123jjiv0tk239brc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>993</id>
      <parentid>686</parentid>
      <timestamp>2009-05-22T08:55:05Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>as the current weapon descriptions were taken from http://euroquake.webs.com/guides2.htm i am getting the old ones from archive.org</comment>
      <text xml:space="preserve" bytes="846">{{Infobox Weapon
|weapon=Super Nailgun
|ammotype=[[Nails]]
|ammousage=2 per shot
|shottype=projectile
|dpshot=18
|dpsecond=90
|range=6000 units
|cycletime=0.2s
}}

An upgraded [[Nailgun]] with four-barrels instead of the two-barrels, however it eats up ammo like popcorn. Although it fires nails at the same rate as the nailgun, the nails themselves do double the amount of damage. The Super Nailgun was probably going to fire regular nails twice as fast as the Nailgun, but that many entities would have choked the server ([[TeamFortress]] nailguns fire even fewer, more damaging nails). The difference in negligible - either way you have a rapid-fire weapon of Doom!

Note: Is very effective with [[Quad Damage]] doing 72 damage per nail!

Once the Super Nailgun is picked the regular Nailgun is pretty much useless.

==See Also==
* [[Weapons]]</text>
      <sha1>np86vnod9fixi6rnapzmwyoavfdy0he</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1297</id>
      <parentid>993</parentid>
      <timestamp>2009-09-27T10:03:00Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <comment>meh, this whole thing is pretty badly written but i'm feeling lazy</comment>
      <text xml:space="preserve" bytes="853">{{Infobox Weapon
|weapon=Super Nailgun
|ammotype=[[Nails]]
|ammousage=2 per shot
|shottype=projectile
|dpshot=18
|dpsecond=90
|range=6000 units
|cycletime=0.2s
}}
The '''Super Nailgun''' (also known as the Perforator) is an upgraded [[Nailgun]] with four barrels instead of two. Although it fires nails at the same rate as the nailgun, the nails themselves do double the amount of damage. The Super Nailgun was probably going to fire regular nails twice as fast as the Nailgun, but that many entities would have choked the server ([[TeamFortress]] nailguns fire even fewer, more damaging nails). The difference in negligible - either way you have a rapid-fire weapon of Doom!

Note: Is very effective with [[Quad Damage]] doing 72 damage per nail!

Once the Super Nailgun is picked the regular Nailgun is pretty much useless.

==See Also==
* [[Weapons]]</text>
      <sha1>14eij3hiqpt1iufoshmm7rntrcxb93s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1310</id>
      <parentid>1297</parentid>
      <timestamp>2009-09-27T18:36:06Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="838">{{Infobox Weapon
|weapon=Super Nailgun
|ammotype=[[Nails]]
|ammousage=2 per shot
|shottype=projectile
|dpshot=18
|dpsecond=90
|range=6000 units
|cycletime=0.2s
}}
The '''Super Nailgun''' (also known as the Perforator) is an upgraded [[Nailgun]] with four barrels instead of two. Although it fires nails at the same rate as the nailgun, the nails themselves do double the amount of damage. The Super Nailgun was probably going to fire regular nails twice as fast as the Nailgun, but that many entities would have choked the server ([[TeamFortress]] nailguns fire even fewer, more damaging nails). The difference in negligible - either way you have a rapid-fire weapon of Doom!

Note: Is very effective with [[Quad Damage]] doing 72 damage per nail!

Once the Super Nailgun is picked the regular Nailgun is pretty much useless.

{{Weapons}}</text>
      <sha1>mbv7zihirvvfleq5suph6lpuzwwkw62</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3045</id>
      <parentid>1310</parentid>
      <timestamp>2013-12-18T01:22:15Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <text xml:space="preserve" bytes="1067">{{Infobox Weapon
|weapon=Super Nailgun
|image_w=weapon_supernailgun.png
|image_v=v_supernailgun.png
|manualtext=The great equalizer. Four cyclic barrels that hose out spikes like crazy. Pro: foes drop like flies. Con: eats ammo like popcorn.
|ammotype=[[Nails]]
|ammousage=2 per shot
|shottype=[[Projectile]]
|dpshot=18
|dpsecond=90
|range=6000 [[unit]]s
|cycletime=0.2s
|1stappearance = [[E1M4]]
|obituary1=(Target) was punctured by (attacker).
}}

The '''Super Nailgun''' (also known as the '''Perforator''') is an upgraded [[Nailgun]] with four barrels instead of two. Although it fires nails at the same rate as the nailgun, the nails themselves do double the amount of damage. The Super Nailgun was probably going to fire regular nails twice as fast as the Nailgun, but that many entities would have choked the server ([[Team Fortress]] nailguns fire even fewer, more damaging nails). The difference in negligible - either way you have a rapid-fire weapon of doom.

The Super Nailgun is very effective with [[Quad Damage]], doing 72 damage per nail.

{{Weapons}}</text>
      <sha1>67boxj32o8ivq7qxjwjk9mdbx1xxaib</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Super Shotgun</title>
    <ns>0</ns>
    <id>564</id>
    <redirect title="Double-Barrelled Shotgun" />
    <revision>
      <id>1472</id>
      <timestamp>2009-12-09T11:09:23Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>Redirecting to [[Double-Barrelled Shotgun]]</comment>
      <text xml:space="preserve" bytes="38">#redirect [[Double-Barrelled Shotgun]]</text>
      <sha1>c4ef6gg6nrww5db0xvl9w53kbyo0wfn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Sv aim</title>
    <ns>0</ns>
    <id>111</id>
    <revision>
      <id>183</id>
      <timestamp>2007-10-31T00:23:15Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=sv_aim |default-value=see below |saved-to-config=no }} sv_aim adjust the amount of &quot;autoaim&quot;. Autoaim is a feature that is more &quot;g...</comment>
      <text xml:space="preserve" bytes="541">{{lowercase-underscores}}{{Infobox Console variable
|name=sv_aim
|default-value=see below
|saved-to-config=no
}}
sv_aim adjust the amount of &quot;autoaim&quot;. Autoaim is a feature that is more &quot;generous&quot; in single-player. It makes vertical aiming a lot easier, especially for those who do not use the mouse. The lower sv_aim is, the more &quot;generous&quot; Quake is (it will do some vertical aiming for you). If you want to turn autoaim off completely, set sv_aim to any value higher than 1.

Default: 0.93 (NetQuake), 2 (QuakeWorld)

{{Console variables}}</text>
      <sha1>c95f64s9cq49z69ebnahki0hr8fjq5c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Sv gravity</title>
    <ns>0</ns>
    <id>110</id>
    <revision>
      <id>182</id>
      <timestamp>2007-10-31T00:21:51Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=sv_gravity |default-value=800 |saved-to-config=no }} sv_gravity is a console variable that sets the amount of gravity in the curre...</comment>
      <text xml:space="preserve" bytes="889">{{lowercase-underscores}}{{Infobox Console variable
|name=sv_gravity
|default-value=800
|saved-to-config=no
}}
sv_gravity is a console variable that sets the amount of gravity in the current game. The Default is &quot;800&quot;, which is the regular Quake gravity we're all used to.

However, if you remember [[e1m8]] (Ziggurat Vertigo), you will remember that that level had extremely low gravity. The fact is that the QuakeC code sets &quot;sv_gravity&quot; to &quot;100&quot; when E1M8 is detected.

Since 800 is normal gravity, 100 is low, and 1000 is a little higher than normal. You can put it so high that you won't be able to jump, and you can set it to &quot;1&quot; to annoy people. &quot;0&quot; is no gravity, which means once you jump or fall off a ledge, there's probably no coming back. You can also set sv_gravity in the negative to make gravity push upwards (too bad you can't jump off the ceiling!)

{{Console variables}}</text>
      <sha1>2laq32gc9kz6uwikwrcj9lwr098y1p4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Sv nostep</title>
    <ns>0</ns>
    <id>930</id>
    <redirect title="sv nostep" />
    <revision>
      <id>2627</id>
      <timestamp>2013-03-29T14:22:22Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Sv nostep]] to [[sv nostep]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="23">#REDIRECT [[sv nostep]]</text>
      <sha1>snq2c15cojxt9qpscptgtozy15sabcx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Sys ticrate</title>
    <ns>0</ns>
    <id>931</id>
    <redirect title="sys ticrate" />
    <revision>
      <id>2629</id>
      <timestamp>2013-03-29T14:22:22Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Sys ticrate]] to [[sys ticrate]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="25">#REDIRECT [[sys ticrate]]</text>
      <sha1>te1wkdfxknf1ufcnjqlxlx7o2gs1tgh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>System fields</title>
    <ns>0</ns>
    <id>67</id>
    <revision>
      <id>106</id>
      <timestamp>2007-10-30T21:32:37Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: These are the fields Quake requires to run. Most have special meaning to the engine. All [[fields]] before the definition &quot;void [[end_sys_fields]];&quot; (in defs.qc) are system fields. If any ...</comment>
      <text xml:space="preserve" bytes="2909">These are the fields Quake requires to run. Most have special meaning to the engine.
All [[fields]] before the definition &quot;void [[end_sys_fields]];&quot; (in defs.qc) are system fields. If any are changed or added, the engine must be rebuilt with the progdefs.h file produced by [[QCC]] after compilation. See [[FrikQCC]] warning [[Q208]].

* .float [[modelindex|.modelindex]];
* .vector [[absmin|.absmin]];
* .vector [[absmax|.absmax]];
* .float [[ltime|.ltime]];
* .float [[movetype|.movetype]];
* .float [[solid|.solid]];
* .vector [[origin|.origin]];
* .vector [[oldorigin|.oldorigin]];
* .vector [[velocity|.velocity]];
* .vector [[angles|.angles]];
* .vector [[avelocity|.avelocity]];
* .vector [[punchangle|.punchangle]];
* .string [[classname|.classname]];
* .string [[model|.model]];
* .float [[frame|.frame]];
* .float [[skin|.skin]];
* .float [[effects|.effects]];
* .vector [[mins|.mins]];
* .vector [[maxs|.maxs]];
* .vector [[size|.size]];
* .void() [[touch|.touch]];
* .void() [[use|.use]];
* .void() [[think|.think]];
* .void() [[blocked|.blocked]];
* .float [[nextthink|.nextthink]];
* .entity [[groundentity|.groundentity]];
* .float [[health|.health]];
* .float [[frags|.frags]];
* .float [[weapon|.weapon]];
* .string [[weaponmodel|.weaponmodel]];
* .float [[weaponframe|.weaponframe]];
* .float [[currentammo|.currentammo]];
* .float [[ammo_shells|.ammo_shells]];
* .float [[ammo_nails|.ammo_nails]];
* .float [[ammo_rockets|.ammo_rockets]];
* .float [[ammo_cells|.ammo_cells]];
* .float [[items|.items]];
* .float [[takedamage|.takedamage]];
* .entity [[chain|.chain]];
* .float [[deadflag|.deadflag]];
* .vector [[view_ofs|.view_ofs]];
* .float [[button0|.button0]];
* .float [[button1|.button1]];
* .float [[button2|.button2]];
* .float [[impulse|.impulse]];
* .float [[fixangle|.fixangle]];
* .vector [[v_angle|.v_angle]];
* .float [[idealpitch|.idealpitch]];
* .string [[netname|.netname]];
* .entity [[enemy|.enemy]];
* .float [[flags|.flags]];
* .float [[colormap|.colormap]];
* .float [[team|.team]];
* .float [[max_health|.max_health]];
* .float [[teleport_time|.teleport_time]];
* .float [[armortype|.armortype]];
* .float [[armorvalue|.armorvalue]];
* .float [[waterlevel|.waterlevel]];
* .float [[watertype|.watertype]];
* .float [[ideal_yaw|.ideal_yaw]];
* .float [[yaw_speed|.yaw_speed]];
* .entity [[aiment|.aiment]];
* .entity [[goalentity|.goalentity]];
* .float [[spawnflags|.spawnflags]];
* .string [[target|.target]];
* .string [[targetname|.targetname]];
* .float [[dmg_take|.dmg_take]];
* .float [[dmg_save|.dmg_save]];
* .entity [[dmg_inflictor|.dmg_inflictor]];
* .entity [[owner|.owner]];
* .vector [[movedir|.movedir]];
* .string [[message|.message]];
* .float [[sounds|.sounds]];
* .string [[noise|.noise]];
* .string [[noise1|.noise1]];
* .string [[noise2|.noise2]];
* .string [[noise3|.noise3]];

===[[QuakeWorld]] fields===

* .float [[lastruntime|.lastruntime]];</text>
      <sha1>5ok4p07pywhta0z5r1bqwvee5rc80lh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>107</id>
      <parentid>106</parentid>
      <timestamp>2007-10-30T21:34:20Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2909">These are the fields Quake requires to run. Most have special meaning to the engine.
All [[fields]] before the definition &quot;void [[end_sys_fields]];&quot; (in defs.qc) are system fields. If any are changed or added, the engine must be rebuilt with the progdefs.h file produced by [[QCC]] after compilation. See [[FrikQCC]] warning [[Q208]].

* .float [[.modelindex|modelindex]];
* .vector [[.absmin|absmin]];
* .vector [[.absmax|absmax]];
* .float [[.ltime|ltime]];
* .float [[.movetype|movetype]];
* .float [[.solid|solid]];
* .vector [[.origin|origin]];
* .vector [[.oldorigin|oldorigin]];
* .vector [[.velocity|velocity]];
* .vector [[.angles|angles]];
* .vector [[.avelocity|avelocity]];
* .vector [[.punchangle|punchangle]];
* .string [[.classname|classname]];
* .string [[.model|model]];
* .float [[.frame|frame]];
* .float [[.skin|skin]];
* .float [[.effects|effects]];
* .vector [[.mins|mins]];
* .vector [[.maxs|maxs]];
* .vector [[.size|size]];
* .void() [[.touch|touch]];
* .void() [[.use|use]];
* .void() [[.think|think]];
* .void() [[.blocked|blocked]];
* .float [[.nextthink|nextthink]];
* .entity [[.groundentity|groundentity]];
* .float [[.health|health]];
* .float [[.frags|frags]];
* .float [[.weapon|weapon]];
* .string [[.weaponmodel|weaponmodel]];
* .float [[.weaponframe|weaponframe]];
* .float [[.currentammo|currentammo]];
* .float [[.ammo_shells|ammo_shells]];
* .float [[.ammo_nails|ammo_nails]];
* .float [[.ammo_rockets|ammo_rockets]];
* .float [[.ammo_cells|ammo_cells]];
* .float [[.items|items]];
* .float [[.takedamage|takedamage]];
* .entity [[.chain|chain]];
* .float [[.deadflag|deadflag]];
* .vector [[.view_ofs|view_ofs]];
* .float [[.button0|button0]];
* .float [[.button1|button1]];
* .float [[.button2|button2]];
* .float [[.impulse|impulse]];
* .float [[.fixangle|fixangle]];
* .vector [[.v_angle|v_angle]];
* .float [[.idealpitch|idealpitch]];
* .string [[.netname|netname]];
* .entity [[.enemy|enemy]];
* .float [[.flags|flags]];
* .float [[.colormap|colormap]];
* .float [[.team|team]];
* .float [[.max_health|max_health]];
* .float [[.teleport_time|teleport_time]];
* .float [[.armortype|armortype]];
* .float [[.armorvalue|armorvalue]];
* .float [[.waterlevel|waterlevel]];
* .float [[.watertype|watertype]];
* .float [[.ideal_yaw|ideal_yaw]];
* .float [[.yaw_speed|yaw_speed]];
* .entity [[.aiment|aiment]];
* .entity [[.goalentity|goalentity]];
* .float [[.spawnflags|spawnflags]];
* .string [[.target|target]];
* .string [[.targetname|targetname]];
* .float [[.dmg_take|dmg_take]];
* .float [[.dmg_save|dmg_save]];
* .entity [[.dmg_inflictor|dmg_inflictor]];
* .entity [[.owner|owner]];
* .vector [[.movedir|movedir]];
* .string [[.message|message]];
* .float [[.sounds|sounds]];
* .string [[.noise|noise]];
* .string [[.noise1|noise1]];
* .string [[.noise2|noise2]];
* .string [[.noise3|noise3]];

===[[QuakeWorld]] fields===

* .float [[.lastruntime|lastruntime]];</text>
      <sha1>sxacdlrdxrkcqga25ia5fu1wxg0hdpw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>System globals</title>
    <ns>0</ns>
    <id>66</id>
    <revision>
      <id>105</id>
      <timestamp>2007-10-30T21:31:55Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: These are the globals and functions Quake requires to run. Most have special meaning to the engine. All variables before the definition &quot;void [[end_sys_globals]];&quot; (in defs.qc) are system ...</comment>
      <text xml:space="preserve" bytes="2063">These are the globals and functions Quake requires to run. Most have special meaning to the engine.
All variables before the definition &quot;void [[end_sys_globals]];&quot; (in defs.qc) are system globals. If any are changed or added, the engine must be rebuilt with the progdefs.h file produced by [[QCC]] after compilation. See [[FrikQCC]] warning [[Q208]].

* [[entity]] [[self]];
* [[entity]] [[other]];
* [[entity]] [[world]];
* [[float]] [[time]];
* [[float]] [[frametime]];
* [[float]] [[force_retouch]];
* [[string]] [[mapname]];
* [[float]] [[deathmatch|deathmatch global]];
* [[float]] [[coop|coop global]];
* [[float]] [[teamplay|teamplay global]];
* [[float]] [[serverflags]];
* [[float]] [[total_secrets]];
* [[float]] [[total_monsters]];
* [[float]] [[found_secrets]];
* [[float]] [[killed_monsters]];
* [[float]] [[parm1]];
* [[float]] [[parm2]];
* [[float]] [[parm3]];
* [[float]] [[parm4]];
* [[float]] [[parm5]];
* [[float]] [[parm6]];
* [[float]] [[parm7]];
* [[float]] [[parm8]];
* [[float]] [[parm9]];
* [[float]] [[parm10]];
* [[float]] [[parm11]];
* [[float]] [[parm12]];
* [[float]] [[parm13]];
* [[float]] [[parm14]];
* [[float]] [[parm15]];
* [[float]] [[parm16]];
* [[vector]] [[v_forward]];
* [[vector]] [[v_up]];
* [[vector]] [[v_right]];
* [[float]] [[trace_allsolid]];
* [[float]] [[trace_startsolid]];
* [[float]] [[trace_fraction]];
* [[vector]] [[trace_endpos]];
* [[vector]] [[trace_plane_normal]];
* [[float]] [[trace_plane_dist]];
* [[entity]] [[trace_ent]];
* [[float]] [[trace_inopen]];
* [[float]] [[trace_inwater]];
* [[entity]] [[msg_entity]];

===Required Prog Functions===

* [[void]]() [[main]];
* [[void]]() [[StartFrame]];
* [[void]]() [[PlayerPreThink]];
* [[void]]() [[PlayerPostThink]];
* [[void]]() [[ClientKill]];
* [[void]]() [[ClientConnect]];
* [[void]]() [[PutClientInServer]];
* [[void]]() [[ClientDisconnect]];
* [[void]]() [[SetNewParms]];
* [[void]]() [[SetChangeParms]];

===Markers===

* [[void]] [[end_sys_globals]];
* [[void]] [[end_sys_fields]];

===[[QuakeWorld]] System Globals===
* [[entity]] [[newmis]];</text>
      <sha1>jwv6d18ib0xnagsk0nw8ponnblel7iq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>TENEBRAE GFX DLIGHTS</title>
    <ns>0</ns>
    <id>346</id>
    <revision>
      <id>554</id>
      <timestamp>2008-02-29T12:12:39Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Fields: &lt;pre&gt; .float light_lev; // Radius (does not affect brightness), typical value 350 .vector color;    // Color (does not affect radius), typical value '1 1 1'                   // (b...</comment>
      <text xml:space="preserve" bytes="1687">Fields:
&lt;pre&gt;
.float light_lev; // Radius (does not affect brightness), typical value 350
.vector color;    // Color (does not affect radius), typical value '1 1 1'
                  // (bright white), can be up to '255 255 255' (nuclear blast)
.float style;     // Light style (like normal light entities, flickering torches or
                  // switchable, etc)
.float pflags;    // Flags (see PFLAGS_ constants)
.vector angles;   // Orientation of the light
.float skin;      // Cubemap filter number, can be 1-255 (0 is assumed to be none,
                  // and tenebrae only allows 16-255), this selects a projective light
                  // filter, a value of 1 loads cubemaps/1posx.tga and cubemaps/1negx.tga
                  // and posy, negy, posz, and negz, similar to skybox but some sides
                  // need to be rotated or flipped
&lt;/pre&gt;

Constants:
&lt;pre&gt;
float PFLAGS_NOSHADOW = 1; // light does not cast shadows
float PFLAGS_CORONA = 2; // light has a corona flare
float PFLAGS_FULLDYNAMIC = 128; // light enable (without this set no light is produced!)
&lt;/pre&gt;

More powerful dynamic light settings

Warning: it is best not to use cubemaps on a light entity that has a model, as using a skin number that a model does not have will cause issues in glquake, and produce warnings in darkplaces (use developer 1 to see them).

Changes compared to tenebrae (because they're too 'leet' for standards):

* EF_FULLDYNAMIC effects flag replaced by PFLAGS_FULLDYNAMIC flag (EF_FULLDYNAMIC conflicts with EF_NODRAW)

Note: networking should send entities with PFLAGS_FULLDYNAMIC set even if they have no model (lights in general do not have a model, nor should they)</text>
      <sha1>aivtu94t7no6h914cedfqburwpk5hqx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>555</id>
      <parentid>554</parentid>
      <timestamp>2008-02-29T12:12:54Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="1644">Fields:
&lt;pre&gt;
.float light_lev; // Radius (does not affect brightness), typical value 350
.vector color;    // Color (does not affect radius), typical value '1 1 1'
                  // (bright white), can be up to '255 255 255' (nuclear blast)
.float style;     // Light style (like normal light entities, flickering torches or
                  // switchable, etc)
.float pflags;    // Flags (see PFLAGS_ constants)
.vector angles;   // Orientation of the light
.float skin;      // Cubemap filter number, can be 1-255 (0 is assumed to be none,
                  // and tenebrae only allows 16-255), this selects a projective light
                  // filter, a value of 1 loads cubemaps/1posx.tga and cubemaps/1negx.tga
                  // and posy, negy, posz, and negz, similar to skybox but some sides
                  // need to be rotated or flipped
&lt;/pre&gt;

Constants:
&lt;pre&gt;
float PFLAGS_NOSHADOW = 1; // light does not cast shadows
float PFLAGS_CORONA = 2; // light has a corona flare
float PFLAGS_FULLDYNAMIC = 128; // light enable (without this set no light is produced!)
&lt;/pre&gt;

More powerful dynamic light settings

Warning: it is best not to use cubemaps on a light entity that has a model, as using a skin number that a model does not have will cause issues in glquake, and produce warnings in darkplaces (use developer 1 to see them).

Changes compared to tenebrae:

* EF_FULLDYNAMIC effects flag replaced by PFLAGS_FULLDYNAMIC flag (EF_FULLDYNAMIC conflicts with EF_NODRAW)

Note: networking should send entities with PFLAGS_FULLDYNAMIC set even if they have no model (lights in general do not have a model, nor should they)</text>
      <sha1>rzofeetqbgnxk5e0brozpenkmqtfuog</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>TW SV STEPCONTROLS</title>
    <ns>0</ns>
    <id>347</id>
    <revision>
      <id>556</id>
      <timestamp>2008-02-29T12:13:36Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: Cvars: &lt;pre&gt; sv_jumpstep (0/1, default 1) sv_stepheight (default 18) &lt;/pre&gt;  sv_jumpstep allows stepping up onto stairs while airborn, sv_stepheight controls how high a single step can be.</comment>
      <text xml:space="preserve" bytes="188">Cvars:
&lt;pre&gt;
sv_jumpstep (0/1, default 1)
sv_stepheight (default 18)
&lt;/pre&gt;

sv_jumpstep allows stepping up onto stairs while airborn, sv_stepheight controls how high a single step can be.</text>
      <sha1>1b7vntw986z7f3osw3cqkwl4dd6p49p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:-bpp</title>
    <ns>1</ns>
    <id>498</id>
    <revision>
      <id>1030</id>
      <timestamp>2009-06-10T10:12:54Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>New page: I guess DirectX engines have it too, could someone verify and add the info? Also screenshots showing typical 16 bit patterns vs 32 bit eye cancy would be great. ~~~~</comment>
      <text xml:space="preserve" bytes="209">I guess DirectX engines have it too, could someone verify and add the info? Also screenshots showing typical 16 bit patterns vs 32 bit eye cancy would be great. [[User:Spirit|Spirit]] 05:12, 10 June 2009 (CDT)</text>
      <sha1>rn999lac8et8g2b78xts15v6br6uh8w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:EXT CSQC</title>
    <ns>1</ns>
    <id>180</id>
    <revision>
      <id>306</id>
      <timestamp>2008-01-17T16:11:40Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: I'm currently building and I'm likely to chop and change the sections around a bit as I figure out a good way to order the information ~~~~</comment>
      <text xml:space="preserve" bytes="188">I'm currently building and I'm likely to chop and change the sections around a bit as I figure out a good way to order the information [[User:KrimZon|KrimZon]] 10:11, 17 January 2008 (CST)</text>
      <sha1>lhsdofak57y441sqfbeovp4ov3flgi1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>355</id>
      <parentid>306</parentid>
      <timestamp>2008-02-10T12:28:31Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="381">I'm currently building and I'm likely to chop and change the sections around a bit as I figure out a good way to order the information [[User:KrimZon|KrimZon]] 10:11, 17 January 2008 (CST)
I've now got the layout pretty much sorted, the final few sections still need filling in and people can change/add sections if neccessary [[User:KrimZon|KrimZon]] 06:28, 10 February 2008 (CST)</text>
      <sha1>1n5uiab6d2ig19327baszoff7pivy5p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>356</id>
      <parentid>355</parentid>
      <timestamp>2008-02-10T12:28:44Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <text xml:space="preserve" bytes="382">I'm currently building and I'm likely to chop and change the sections around a bit as I figure out a good way to order the information [[User:KrimZon|KrimZon]] 10:11, 17 January 2008 (CST)

I've now got the layout pretty much sorted, the final few sections still need filling in and people can change/add sections if neccessary [[User:KrimZon|KrimZon]] 06:28, 10 February 2008 (CST)</text>
      <sha1>0rfq94998lhm3jjaq5pmt5gzo3zhsti</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>562</id>
      <parentid>356</parentid>
      <timestamp>2008-03-10T18:36:33Z</timestamp>
      <contributor>
        <ip>79.77.100.204</ip>
      </contributor>
      <text xml:space="preserve" bytes="389">I'm currently building and I'm likely to chop and change the sections around a bit as I figure out a good way to order the information [[User:KrimZon|KrimZon]] 10:11, 17 January 2008 (CST)

I've now got the layout pretty much sorted, the final few sections still need filling in and people can change/add sections if neccessary [[User:KrimZon|KrimZon]] 06:28, 10 February 2008 (CST)

-----</text>
      <sha1>4qvllhbgb0lxiebfp1vwql8p2rtdhl1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>565</id>
      <parentid>562</parentid>
      <timestamp>2008-03-14T19:27:31Z</timestamp>
      <contributor>
        <ip>79.69.19.41</ip>
      </contributor>
      <text xml:space="preserve" bytes="572">I'm currently building and I'm likely to chop and change the sections around a bit as I figure out a good way to order the information [[User:KrimZon|KrimZon]] 10:11, 17 January 2008 (CST)

I've now got the layout pretty much sorted, the final few sections still need filling in and people can change/add sections if neccessary [[User:KrimZon|KrimZon]] 06:28, 10 February 2008 (CST)

Note: WriteEntity -&gt; ReadShort - should there also be a ReadEntityNumber alias for this builtin, or a new builtin just in case some engines want to support more than 65535 entities?

-----</text>
      <sha1>pw056kd52v20szbkxkqiinn9cb1t9iu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:EXT CSQC System Globals Fields and Builtins List</title>
    <ns>1</ns>
    <id>181</id>
    <revision>
      <id>313</id>
      <timestamp>2008-01-17T16:51:09Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>New page: TODO: Make the function names into links, as per the Builtin Function List. ~~~~</comment>
      <text xml:space="preserve" bytes="129">TODO: Make the function names into links, as per the Builtin Function List. [[User:KrimZon|KrimZon]] 10:51, 17 January 2008 (CST)</text>
      <sha1>njurxl4rq7l7ljga2f005xgaqn2quh6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>318</id>
      <parentid>313</parentid>
      <timestamp>2008-01-17T17:28:23Z</timestamp>
      <contributor>
        <username>KrimZon</username>
        <id>5</id>
      </contributor>
      <comment>Removing all content from page</comment>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:Engine Limits</title>
    <ns>1</ns>
    <id>521</id>
    <revision>
      <id>1198</id>
      <timestamp>2009-09-24T17:50:55Z</timestamp>
      <contributor>
        <ip>89.19.67.48</ip>
      </contributor>
      <comment>format determined hardcoded limits</comment>
      <text xml:space="preserve" bytes="271">(mh sez:) - should we identify which limits are a result of e.g. the Q1 BSP format.  I'm thinking stuff like faces and marksurfaces, where there is a limit of 64k owing to the use of unsigned shorts in the BSP, and increasing this limit would require a BSP format change.</text>
      <sha1>ly07707p33einktdqkcq122tys6grel</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1205</id>
      <parentid>1198</parentid>
      <timestamp>2009-09-24T19:45:31Z</timestamp>
      <contributor>
        <ip>69.59.212.88</ip>
      </contributor>
      <text xml:space="preserve" bytes="1138">(mh sez:) - should we identify which limits are a result of e.g. the Q1 BSP format.  I'm thinking stuff like faces and marksurfaces, where there is a limit of 64k owing to the use of unsigned shorts in the BSP, and increasing this limit would require a BSP format change.

(lordhavoc sez:) - yes I think we should, perhaps by putting F in the entries where they are hitting format limits, for example 65530 F being the hard limit for clipnodes (however Quake used signed shorts to interpret this, limiting it to 32768), darkplaces interprets anything over the numclipnodes as being a contents value (so with 6 standard contents values that exist in BSP files...  65536-6 = 65530).  Network limits are another matter, because I could say 255 F but a protocol upgrade could increase that (by sending larger colormap values on entities, and increasing the space in the signon message for maxclients), similarly the Q1 protocol does not support more than 8192 entities without changes to the sound encoding, so the fact darkplaces supports 32768 required changes in protocol.  I think we should stick to only labeling format details this way.</text>
      <sha1>rw8wghtih3008oyhb9c1unl1jre6ab3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1210</id>
      <parentid>1205</parentid>
      <timestamp>2009-09-24T21:50:46Z</timestamp>
      <contributor>
        <username>Mh</username>
        <id>20</id>
      </contributor>
      <text xml:space="preserve" bytes="1400">(mh sez:) - should we identify which limits are a result of e.g. the Q1 BSP format.  I'm thinking stuff like faces and marksurfaces, where there is a limit of 64k owing to the use of unsigned shorts in the BSP, and increasing this limit would require a BSP format change.

(lordhavoc sez:) - yes I think we should, perhaps by putting F in the entries where they are hitting format limits, for example 65530 F being the hard limit for clipnodes (however Quake used signed shorts to interpret this, limiting it to 32768), darkplaces interprets anything over the numclipnodes as being a contents value (so with 6 standard contents values that exist in BSP files...  65536-6 = 65530).  Network limits are another matter, because I could say 255 F but a protocol upgrade could increase that (by sending larger colormap values on entities, and increasing the space in the signon message for maxclients), similarly the Q1 protocol does not support more than 8192 entities without changes to the sound encoding, so the fact darkplaces supports 32768 required changes in protocol.  I think we should stick to only labeling format details this way.

(mh) Probably easier if we stick to protocol 15 as a baseline and flag any increase that implies a protocol change (it would also help to prevent people from blindly increasing such a limit by alerting them to the fact that there are consequences of doing so).</text>
      <sha1>3m8igw7ks37tj8g64sqec787ly144q7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1270</id>
      <parentid>1210</parentid>
      <timestamp>2009-09-26T09:42:51Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="1955">(mh sez:) - should we identify which limits are a result of e.g. the Q1 BSP format.  I'm thinking stuff like faces and marksurfaces, where there is a limit of 64k owing to the use of unsigned shorts in the BSP, and increasing this limit would require a BSP format change.

(lordhavoc sez:) - yes I think we should, perhaps by putting F in the entries where they are hitting format limits, for example 65530 F being the hard limit for clipnodes (however Quake used signed shorts to interpret this, limiting it to 32768), darkplaces interprets anything over the numclipnodes as being a contents value (so with 6 standard contents values that exist in BSP files...  65536-6 = 65530).  Network limits are another matter, because I could say 255 F but a protocol upgrade could increase that (by sending larger colormap values on entities, and increasing the space in the signon message for maxclients), similarly the Q1 protocol does not support more than 8192 entities without changes to the sound encoding, so the fact darkplaces supports 32768 required changes in protocol.  I think we should stick to only labeling format details this way.

(mh) Probably easier if we stick to protocol 15 as a baseline and flag any increase that implies a protocol change (it would also help to prevent people from blindly increasing such a limit by alerting them to the fact that there are consequences of doing so).

(metlslime says)
- might be better with a row for each limit and a column for each engine
- should we be explicit about the differences between winquake and glquake (i.e. not just saying 256/512 but saying 256(win)/512(gl) or something?)
- recommend using asterisks in the traditional way, to indicate footnotes: i.e. *depends on heapsize **limited by bsp format ***requires new protocol etc. and avoid a general &quot;please see readme&quot; when we can give a specific note instead.
- the categories seem pretty arbitrary, i'll try to suggest better ones later.</text>
      <sha1>hrb43mvpq3u050xu3bw21m0rcry035s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1271</id>
      <parentid>1270</parentid>
      <timestamp>2009-09-26T09:43:12Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="1955">(mh sez:) - should we identify which limits are a result of e.g. the Q1 BSP format.  I'm thinking stuff like faces and marksurfaces, where there is a limit of 64k owing to the use of unsigned shorts in the BSP, and increasing this limit would require a BSP format change.

(lordhavoc sez:) - yes I think we should, perhaps by putting F in the entries where they are hitting format limits, for example 65530 F being the hard limit for clipnodes (however Quake used signed shorts to interpret this, limiting it to 32768), darkplaces interprets anything over the numclipnodes as being a contents value (so with 6 standard contents values that exist in BSP files...  65536-6 = 65530).  Network limits are another matter, because I could say 255 F but a protocol upgrade could increase that (by sending larger colormap values on entities, and increasing the space in the signon message for maxclients), similarly the Q1 protocol does not support more than 8192 entities without changes to the sound encoding, so the fact darkplaces supports 32768 required changes in protocol.  I think we should stick to only labeling format details this way.

(mh) Probably easier if we stick to protocol 15 as a baseline and flag any increase that implies a protocol change (it would also help to prevent people from blindly increasing such a limit by alerting them to the fact that there are consequences of doing so).

(metlslime says)
* might be better with a row for each limit and a column for each engine
* should we be explicit about the differences between winquake and glquake (i.e. not just saying 256/512 but saying 256(win)/512(gl) or something?)
* recommend using asterisks in the traditional way, to indicate footnotes: i.e. *depends on heapsize **limited by bsp format ***requires new protocol etc. and avoid a general &quot;please see readme&quot; when we can give a specific note instead.
* the categories seem pretty arbitrary, i'll try to suggest better ones later.</text>
      <sha1>eiwds0j7oz2s1924g5g66kr6yu7f5bx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1272</id>
      <parentid>1271</parentid>
      <timestamp>2009-09-26T15:51:39Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2269">(mh sez:) - should we identify which limits are a result of e.g. the Q1 BSP format.  I'm thinking stuff like faces and marksurfaces, where there is a limit of 64k owing to the use of unsigned shorts in the BSP, and increasing this limit would require a BSP format change.

:(lordhavoc sez:) - yes I think we should, perhaps by putting F in the entries where they are hitting format limits, for example 65530 F being the hard limit for clipnodes (however Quake used signed shorts to interpret this, limiting it to 32768), darkplaces interprets anything over the numclipnodes as being a contents value (so with 6 standard contents values that exist in BSP files...  65536-6 = 65530).  Network limits are another matter, because I could say 255 F but a protocol upgrade could increase that (by sending larger colormap values on entities, and increasing the space in the signon message for maxclients), similarly the Q1 protocol does not support more than 8192 entities without changes to the sound encoding, so the fact darkplaces supports 32768 required changes in protocol.  I think we should stick to only labeling format details this way.

::(mh) Probably easier if we stick to protocol 15 as a baseline and flag any increase that implies a protocol change (it would also help to prevent people from blindly increasing such a limit by alerting them to the fact that there are consequences of doing so).
-----
(metlslime says)
* might be better with a row for each limit and a column for each engine
* should we be explicit about the differences between winquake and glquake (i.e. not just saying 256/512 but saying 256(win)/512(gl) or something?)
* recommend using asterisks in the traditional way, to indicate footnotes: i.e. *depends on heapsize **limited by bsp format ***requires new protocol etc. and avoid a general &quot;please see readme&quot; when we can give a specific note instead.
* the categories seem pretty arbitrary, i'll try to suggest better ones later.

:(spirit says)
:For footnotes there is a nice wiki way to do them: http://en.wikipedia.org/wiki/Wikipedia:Footnotes

:You can append your username by writing 3-4 tildes by the way. Also rather use the + sign at the top, discussion is easier that way. [[User:Spirit|Spirit]] 10:51, 26 September 2009 (CDT)</text>
      <sha1>pn3pnpkggu77ibvetduhj0rjp5zmm1e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1342</id>
      <parentid>1272</parentid>
      <timestamp>2009-09-30T17:43:09Z</timestamp>
      <contributor>
        <username>Baker</username>
        <id>22</id>
      </contributor>
      <text xml:space="preserve" bytes="2819">(mh sez:) - should we identify which limits are a result of e.g. the Q1 BSP format.  I'm thinking stuff like faces and marksurfaces, where there is a limit of 64k owing to the use of unsigned shorts in the BSP, and increasing this limit would require a BSP format change.

:(lordhavoc sez:) - yes I think we should, perhaps by putting F in the entries where they are hitting format limits, for example 65530 F being the hard limit for clipnodes (however Quake used signed shorts to interpret this, limiting it to 32768), darkplaces interprets anything over the numclipnodes as being a contents value (so with 6 standard contents values that exist in BSP files...  65536-6 = 65530).  Network limits are another matter, because I could say 255 F but a protocol upgrade could increase that (by sending larger colormap values on entities, and increasing the space in the signon message for maxclients), similarly the Q1 protocol does not support more than 8192 entities without changes to the sound encoding, so the fact darkplaces supports 32768 required changes in protocol.  I think we should stick to only labeling format details this way.

::(mh) Probably easier if we stick to protocol 15 as a baseline and flag any increase that implies a protocol change (it would also help to prevent people from blindly increasing such a limit by alerting them to the fact that there are consequences of doing so).
-----
(metlslime says)
* might be better with a row for each limit and a column for each engine
* should we be explicit about the differences between winquake and glquake (i.e. not just saying 256/512 but saying 256(win)/512(gl) or something?)
* recommend using asterisks in the traditional way, to indicate footnotes: i.e. *depends on heapsize **limited by bsp format ***requires new protocol etc. and avoid a general &quot;please see readme&quot; when we can give a specific note instead.
* the categories seem pretty arbitrary, i'll try to suggest better ones later.

:(spirit says)
:For footnotes there is a nice wiki way to do them: http://en.wikipedia.org/wiki/Wikipedia:Footnotes

:You can append your username by writing 3-4 tildes by the way. Also rather use the + sign at the top, discussion is easier that way. [[User:Spirit|Spirit]] 10:51, 26 September 2009 (CDT)

-----

Baker:

Certain limits are important for some models to work and in WinQuake for the maps to render well.  The default Quake zone allocation is terrible and should be at least 1 MB.  For most of the rest of the limits except for edicts, isn't it really just breaking Quake compatibility?  Like how half the engines demos can't even be played in any other engine or how most of these engines can't connect to each other on a LAN with their default protocol.  It does seem that DirectQ should be able to play aguirReQuake demos and vice versa.</text>
      <sha1>d3b4qtna8ticbil4yx1153mxql00759</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1343</id>
      <parentid>1342</parentid>
      <timestamp>2009-09-30T17:43:57Z</timestamp>
      <contributor>
        <username>Baker</username>
        <id>22</id>
      </contributor>
      <text xml:space="preserve" bytes="2857">(mh sez:) - should we identify which limits are a result of e.g. the Q1 BSP format.  I'm thinking stuff like faces and marksurfaces, where there is a limit of 64k owing to the use of unsigned shorts in the BSP, and increasing this limit would require a BSP format change.

:(lordhavoc sez:) - yes I think we should, perhaps by putting F in the entries where they are hitting format limits, for example 65530 F being the hard limit for clipnodes (however Quake used signed shorts to interpret this, limiting it to 32768), darkplaces interprets anything over the numclipnodes as being a contents value (so with 6 standard contents values that exist in BSP files...  65536-6 = 65530).  Network limits are another matter, because I could say 255 F but a protocol upgrade could increase that (by sending larger colormap values on entities, and increasing the space in the signon message for maxclients), similarly the Q1 protocol does not support more than 8192 entities without changes to the sound encoding, so the fact darkplaces supports 32768 required changes in protocol.  I think we should stick to only labeling format details this way.

::(mh) Probably easier if we stick to protocol 15 as a baseline and flag any increase that implies a protocol change (it would also help to prevent people from blindly increasing such a limit by alerting them to the fact that there are consequences of doing so).
-----
(metlslime says)
* might be better with a row for each limit and a column for each engine
* should we be explicit about the differences between winquake and glquake (i.e. not just saying 256/512 but saying 256(win)/512(gl) or something?)
* recommend using asterisks in the traditional way, to indicate footnotes: i.e. *depends on heapsize **limited by bsp format ***requires new protocol etc. and avoid a general &quot;please see readme&quot; when we can give a specific note instead.
* the categories seem pretty arbitrary, i'll try to suggest better ones later.

:(spirit says)
:For footnotes there is a nice wiki way to do them: http://en.wikipedia.org/wiki/Wikipedia:Footnotes

:You can append your username by writing 3-4 tildes by the way. Also rather use the + sign at the top, discussion is easier that way. [[User:Spirit|Spirit]] 10:51, 26 September 2009 (CDT)

-----

Baker:

Certain limits are important for some models to work and in WinQuake for the maps to render well.  The default Quake zone allocation is terrible and should be at least 1 MB.  For most of the rest of the limits except for edicts and the texture/OpenGL type of limits, isn't it really just breaking Quake compatibility?  Like how half the engines demos can't even be played in any other engine or how most of these engines can't connect to each other on a LAN with their default protocol.  It does seem that DirectQ should be able to play aguirReQuake demos and vice versa.</text>
      <sha1>633gd93jkq570vwixjiujkkzb7yim5c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1344</id>
      <parentid>1343</parentid>
      <timestamp>2009-09-30T17:44:35Z</timestamp>
      <contributor>
        <username>Baker</username>
        <id>22</id>
      </contributor>
      <text xml:space="preserve" bytes="2910">(mh sez:) - should we identify which limits are a result of e.g. the Q1 BSP format.  I'm thinking stuff like faces and marksurfaces, where there is a limit of 64k owing to the use of unsigned shorts in the BSP, and increasing this limit would require a BSP format change.

:(lordhavoc sez:) - yes I think we should, perhaps by putting F in the entries where they are hitting format limits, for example 65530 F being the hard limit for clipnodes (however Quake used signed shorts to interpret this, limiting it to 32768), darkplaces interprets anything over the numclipnodes as being a contents value (so with 6 standard contents values that exist in BSP files...  65536-6 = 65530).  Network limits are another matter, because I could say 255 F but a protocol upgrade could increase that (by sending larger colormap values on entities, and increasing the space in the signon message for maxclients), similarly the Q1 protocol does not support more than 8192 entities without changes to the sound encoding, so the fact darkplaces supports 32768 required changes in protocol.  I think we should stick to only labeling format details this way.

::(mh) Probably easier if we stick to protocol 15 as a baseline and flag any increase that implies a protocol change (it would also help to prevent people from blindly increasing such a limit by alerting them to the fact that there are consequences of doing so).
-----
(metlslime says)
* might be better with a row for each limit and a column for each engine
* should we be explicit about the differences between winquake and glquake (i.e. not just saying 256/512 but saying 256(win)/512(gl) or something?)
* recommend using asterisks in the traditional way, to indicate footnotes: i.e. *depends on heapsize **limited by bsp format ***requires new protocol etc. and avoid a general &quot;please see readme&quot; when we can give a specific note instead.
* the categories seem pretty arbitrary, i'll try to suggest better ones later.

:(spirit says)
:For footnotes there is a nice wiki way to do them: http://en.wikipedia.org/wiki/Wikipedia:Footnotes

:You can append your username by writing 3-4 tildes by the way. Also rather use the + sign at the top, discussion is easier that way. [[User:Spirit|Spirit]] 10:51, 26 September 2009 (CDT)

-----

Baker:

Certain limits are important for some models to work and in WinQuake for the maps to render well.  The default Quake zone allocation is terrible and should be at least 1 MB.  For most of the rest of the limits except for edicts and the texture/OpenGL type of limits, isn't it really just breaking Quake compatibility?  Like how half the engines demos can't even be played in any other engine or how most of these engines can't connect to each other on a LAN with their default protocol.  It does seem that DirectQ should be able to play aguirReQuake demos and vice versa.  Slightly lobbying against &quot;Tower of Babel&quot; problem.</text>
      <sha1>29ww6xlm5vfxf9i2po6ayb2b1db7nvj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1345</id>
      <parentid>1344</parentid>
      <timestamp>2009-09-30T18:20:39Z</timestamp>
      <contributor>
        <username>Baker</username>
        <id>22</id>
      </contributor>
      <text xml:space="preserve" bytes="3056">(mh sez:) - should we identify which limits are a result of e.g. the Q1 BSP format.  I'm thinking stuff like faces and marksurfaces, where there is a limit of 64k owing to the use of unsigned shorts in the BSP, and increasing this limit would require a BSP format change.

:(lordhavoc sez:) - yes I think we should, perhaps by putting F in the entries where they are hitting format limits, for example 65530 F being the hard limit for clipnodes (however Quake used signed shorts to interpret this, limiting it to 32768), darkplaces interprets anything over the numclipnodes as being a contents value (so with 6 standard contents values that exist in BSP files...  65536-6 = 65530).  Network limits are another matter, because I could say 255 F but a protocol upgrade could increase that (by sending larger colormap values on entities, and increasing the space in the signon message for maxclients), similarly the Q1 protocol does not support more than 8192 entities without changes to the sound encoding, so the fact darkplaces supports 32768 required changes in protocol.  I think we should stick to only labeling format details this way.

::(mh) Probably easier if we stick to protocol 15 as a baseline and flag any increase that implies a protocol change (it would also help to prevent people from blindly increasing such a limit by alerting them to the fact that there are consequences of doing so).
-----
(metlslime says)
* might be better with a row for each limit and a column for each engine
* should we be explicit about the differences between winquake and glquake (i.e. not just saying 256/512 but saying 256(win)/512(gl) or something?)
* recommend using asterisks in the traditional way, to indicate footnotes: i.e. *depends on heapsize **limited by bsp format ***requires new protocol etc. and avoid a general &quot;please see readme&quot; when we can give a specific note instead.
* the categories seem pretty arbitrary, i'll try to suggest better ones later.

:(spirit says)
:For footnotes there is a nice wiki way to do them: http://en.wikipedia.org/wiki/Wikipedia:Footnotes

:You can append your username by writing 3-4 tildes by the way. Also rather use the + sign at the top, discussion is easier that way. [[User:Spirit|Spirit]] 10:51, 26 September 2009 (CDT)

-----

Baker:

Certain limits are important for some models to work and in WinQuake for the maps to render well.  The default Quake zone allocation is terrible and should be at least 1 MB.  For most of the rest of the limits except for edicts and the texture/OpenGL type of limits, isn't it really just breaking Quake compatibility?  Like how half the engines demos can't even be played in any other engine or how most of these engines can't connect to each other on a LAN with their default protocol.  It does seem that DirectQ should be able to play aguirReQuake demos and vice versa.  Slightly lobbying against &quot;Tower of Babel&quot; problem.

By the way, DarkPlaces completely removed Efrags ages ago so really the correct answer is &quot;N/A&quot;.  ZQuake, likewise, does not use Efrags nor FTE.</text>
      <sha1>tvcl1lq5h36aprnriekukjko6f6jjk3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1425</id>
      <parentid>1345</parentid>
      <timestamp>2009-10-21T20:08:08Z</timestamp>
      <contributor>
        <username>Mh</username>
        <id>20</id>
      </contributor>
      <text xml:space="preserve" bytes="3554">(mh sez:) - should we identify which limits are a result of e.g. the Q1 BSP format.  I'm thinking stuff like faces and marksurfaces, where there is a limit of 64k owing to the use of unsigned shorts in the BSP, and increasing this limit would require a BSP format change.

:(lordhavoc sez:) - yes I think we should, perhaps by putting F in the entries where they are hitting format limits, for example 65530 F being the hard limit for clipnodes (however Quake used signed shorts to interpret this, limiting it to 32768), darkplaces interprets anything over the numclipnodes as being a contents value (so with 6 standard contents values that exist in BSP files...  65536-6 = 65530).  Network limits are another matter, because I could say 255 F but a protocol upgrade could increase that (by sending larger colormap values on entities, and increasing the space in the signon message for maxclients), similarly the Q1 protocol does not support more than 8192 entities without changes to the sound encoding, so the fact darkplaces supports 32768 required changes in protocol.  I think we should stick to only labeling format details this way.

::(mh) Probably easier if we stick to protocol 15 as a baseline and flag any increase that implies a protocol change (it would also help to prevent people from blindly increasing such a limit by alerting them to the fact that there are consequences of doing so).
-----
(metlslime says)
* might be better with a row for each limit and a column for each engine
* should we be explicit about the differences between winquake and glquake (i.e. not just saying 256/512 but saying 256(win)/512(gl) or something?)
* recommend using asterisks in the traditional way, to indicate footnotes: i.e. *depends on heapsize **limited by bsp format ***requires new protocol etc. and avoid a general &quot;please see readme&quot; when we can give a specific note instead.
* the categories seem pretty arbitrary, i'll try to suggest better ones later.

:(spirit says)
:For footnotes there is a nice wiki way to do them: http://en.wikipedia.org/wiki/Wikipedia:Footnotes

:You can append your username by writing 3-4 tildes by the way. Also rather use the + sign at the top, discussion is easier that way. [[User:Spirit|Spirit]] 10:51, 26 September 2009 (CDT)

-----

Baker:

Certain limits are important for some models to work and in WinQuake for the maps to render well.  The default Quake zone allocation is terrible and should be at least 1 MB.  For most of the rest of the limits except for edicts and the texture/OpenGL type of limits, isn't it really just breaking Quake compatibility?  Like how half the engines demos can't even be played in any other engine or how most of these engines can't connect to each other on a LAN with their default protocol.  It does seem that DirectQ should be able to play aguirReQuake demos and vice versa.  Slightly lobbying against &quot;Tower of Babel&quot; problem.

By the way, DarkPlaces completely removed Efrags ages ago so really the correct answer is &quot;N/A&quot;.  ZQuake, likewise, does not use Efrags nor FTE.

(mh) - yeah, DirectQ can play aguirReQuake demos quite well as it supports the same protocol.  You can also use the sv_protocol 15 command in both DirectQ and aguirReQuake to switch back to a compatible protocol for generating demos that are usable in other engines, as well as if you want to use either engine as a server.  Also, both engines let the server fully control the protocol, so they can quite happily connect to any protocol 15 server without any jiggerypokery required by the player.</text>
      <sha1>0qui782t0uohfdazef29s3qujzbhanr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1426</id>
      <parentid>1425</parentid>
      <timestamp>2009-10-21T20:09:42Z</timestamp>
      <contributor>
        <username>Mh</username>
        <id>20</id>
      </contributor>
      <text xml:space="preserve" bytes="3562">(mh sez:) - should we identify which limits are a result of e.g. the Q1 BSP format.  I'm thinking stuff like faces and marksurfaces, where there is a limit of 64k owing to the use of unsigned shorts in the BSP, and increasing this limit would require a BSP format change.

:(lordhavoc sez:) - yes I think we should, perhaps by putting F in the entries where they are hitting format limits, for example 65530 F being the hard limit for clipnodes (however Quake used signed shorts to interpret this, limiting it to 32768), darkplaces interprets anything over the numclipnodes as being a contents value (so with 6 standard contents values that exist in BSP files...  65536-6 = 65530).  Network limits are another matter, because I could say 255 F but a protocol upgrade could increase that (by sending larger colormap values on entities, and increasing the space in the signon message for maxclients), similarly the Q1 protocol does not support more than 8192 entities without changes to the sound encoding, so the fact darkplaces supports 32768 required changes in protocol.  I think we should stick to only labeling format details this way.

::(mh) Probably easier if we stick to protocol 15 as a baseline and flag any increase that implies a protocol change (it would also help to prevent people from blindly increasing such a limit by alerting them to the fact that there are consequences of doing so).
-----
(metlslime says)
* might be better with a row for each limit and a column for each engine
* should we be explicit about the differences between winquake and glquake (i.e. not just saying 256/512 but saying 256(win)/512(gl) or something?)
* recommend using asterisks in the traditional way, to indicate footnotes: i.e. *depends on heapsize **limited by bsp format ***requires new protocol etc. and avoid a general &quot;please see readme&quot; when we can give a specific note instead.
* the categories seem pretty arbitrary, i'll try to suggest better ones later.

:(spirit says)
:For footnotes there is a nice wiki way to do them: http://en.wikipedia.org/wiki/Wikipedia:Footnotes

:You can append your username by writing 3-4 tildes by the way. Also rather use the + sign at the top, discussion is easier that way. [[User:Spirit|Spirit]] 10:51, 26 September 2009 (CDT)

-----

Baker:

Certain limits are important for some models to work and in WinQuake for the maps to render well.  The default Quake zone allocation is terrible and should be at least 1 MB.  For most of the rest of the limits except for edicts and the texture/OpenGL type of limits, isn't it really just breaking Quake compatibility?  Like how half the engines demos can't even be played in any other engine or how most of these engines can't connect to each other on a LAN with their default protocol.  It does seem that DirectQ should be able to play aguirReQuake demos and vice versa.  Slightly lobbying against &quot;Tower of Babel&quot; problem.

By the way, DarkPlaces completely removed Efrags ages ago so really the correct answer is &quot;N/A&quot;.  ZQuake, likewise, does not use Efrags nor FTE.

-----

(mh) - yeah, DirectQ can play aguirReQuake demos quite well as it supports the same protocols.  You can also use the sv_protocol 15 command in both DirectQ and aguirReQuake to switch back to a compatible protocol for generating demos that are usable in other engines, as well as if you want to use either engine as a server.  Also, both engines let the server fully control the protocol, so they can quite happily connect to any protocol 15 server without any jiggerypokery required by the player.</text>
      <sha1>oac08e2fd5h342p2xkxouzrfgoapald</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1505</id>
      <parentid>1426</parentid>
      <timestamp>2010-01-08T10:38:44Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <text xml:space="preserve" bytes="3808">(mh sez:) - should we identify which limits are a result of e.g. the Q1 BSP format.  I'm thinking stuff like faces and marksurfaces, where there is a limit of 64k owing to the use of unsigned shorts in the BSP, and increasing this limit would require a BSP format change.

:(lordhavoc sez:) - yes I think we should, perhaps by putting F in the entries where they are hitting format limits, for example 65530 F being the hard limit for clipnodes (however Quake used signed shorts to interpret this, limiting it to 32768), darkplaces interprets anything over the numclipnodes as being a contents value (so with 6 standard contents values that exist in BSP files...  65536-6 = 65530).  Network limits are another matter, because I could say 255 F but a protocol upgrade could increase that (by sending larger colormap values on entities, and increasing the space in the signon message for maxclients), similarly the Q1 protocol does not support more than 8192 entities without changes to the sound encoding, so the fact darkplaces supports 32768 required changes in protocol.  I think we should stick to only labeling format details this way.

::(mh) Probably easier if we stick to protocol 15 as a baseline and flag any increase that implies a protocol change (it would also help to prevent people from blindly increasing such a limit by alerting them to the fact that there are consequences of doing so).
-----
(metlslime says)
* might be better with a row for each limit and a column for each engine
* should we be explicit about the differences between winquake and glquake (i.e. not just saying 256/512 but saying 256(win)/512(gl) or something?)
* recommend using asterisks in the traditional way, to indicate footnotes: i.e. *depends on heapsize **limited by bsp format ***requires new protocol etc. and avoid a general &quot;please see readme&quot; when we can give a specific note instead.
* the categories seem pretty arbitrary, i'll try to suggest better ones later.

:(spirit says)
:For footnotes there is a nice wiki way to do them: http://en.wikipedia.org/wiki/Wikipedia:Footnotes

:You can append your username by writing 3-4 tildes by the way. Also rather use the + sign at the top, discussion is easier that way. [[User:Spirit|Spirit]] 10:51, 26 September 2009 (CDT)

-----

Baker:

Certain limits are important for some models to work and in WinQuake for the maps to render well.  The default Quake zone allocation is terrible and should be at least 1 MB.  For most of the rest of the limits except for edicts and the texture/OpenGL type of limits, isn't it really just breaking Quake compatibility?  Like how half the engines demos can't even be played in any other engine or how most of these engines can't connect to each other on a LAN with their default protocol.  It does seem that DirectQ should be able to play aguirReQuake demos and vice versa.  Slightly lobbying against &quot;Tower of Babel&quot; problem.

By the way, DarkPlaces completely removed Efrags ages ago so really the correct answer is &quot;N/A&quot;.  ZQuake, likewise, does not use Efrags nor FTE.

-----

(mh) - yeah, DirectQ can play aguirReQuake demos quite well as it supports the same protocols.  You can also use the sv_protocol 15 command in both DirectQ and aguirReQuake to switch back to a compatible protocol for generating demos that are usable in other engines, as well as if you want to use either engine as a server.  Also, both engines let the server fully control the protocol, so they can quite happily connect to any protocol 15 server without any jiggerypokery required by the player.

negke: Just wanted to point out that &quot;aguirReQuake&quot; isn't a good name, because hardly anyone outside Func/Inside3d knows BJP by this nick. &quot;Bengt Jardrup's enhanced engines,&quot; while being overly long, seems more appropriate for a wider audience.</text>
      <sha1>tb2g4peproswlhukatsmxqsemkcafmu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1559</id>
      <parentid>1505</parentid>
      <timestamp>2010-01-18T10:56:59Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="4029">(mh sez:) - should we identify which limits are a result of e.g. the Q1 BSP format.  I'm thinking stuff like faces and marksurfaces, where there is a limit of 64k owing to the use of unsigned shorts in the BSP, and increasing this limit would require a BSP format change.

:(lordhavoc sez:) - yes I think we should, perhaps by putting F in the entries where they are hitting format limits, for example 65530 F being the hard limit for clipnodes (however Quake used signed shorts to interpret this, limiting it to 32768), darkplaces interprets anything over the numclipnodes as being a contents value (so with 6 standard contents values that exist in BSP files...  65536-6 = 65530).  Network limits are another matter, because I could say 255 F but a protocol upgrade could increase that (by sending larger colormap values on entities, and increasing the space in the signon message for maxclients), similarly the Q1 protocol does not support more than 8192 entities without changes to the sound encoding, so the fact darkplaces supports 32768 required changes in protocol.  I think we should stick to only labeling format details this way.

::(mh) Probably easier if we stick to protocol 15 as a baseline and flag any increase that implies a protocol change (it would also help to prevent people from blindly increasing such a limit by alerting them to the fact that there are consequences of doing so).
-----
(metlslime says)
* might be better with a row for each limit and a column for each engine
* should we be explicit about the differences between winquake and glquake (i.e. not just saying 256/512 but saying 256(win)/512(gl) or something?)
* recommend using asterisks in the traditional way, to indicate footnotes: i.e. *depends on heapsize **limited by bsp format ***requires new protocol etc. and avoid a general &quot;please see readme&quot; when we can give a specific note instead.
* the categories seem pretty arbitrary, i'll try to suggest better ones later.

:(spirit says)
:For footnotes there is a nice wiki way to do them: http://en.wikipedia.org/wiki/Wikipedia:Footnotes

:You can append your username by writing 3-4 tildes by the way. Also rather use the + sign at the top, discussion is easier that way. [[User:Spirit|Spirit]] 10:51, 26 September 2009 (CDT)

-----

Baker:

Certain limits are important for some models to work and in WinQuake for the maps to render well.  The default Quake zone allocation is terrible and should be at least 1 MB.  For most of the rest of the limits except for edicts and the texture/OpenGL type of limits, isn't it really just breaking Quake compatibility?  Like how half the engines demos can't even be played in any other engine or how most of these engines can't connect to each other on a LAN with their default protocol.  It does seem that DirectQ should be able to play aguirReQuake demos and vice versa.  Slightly lobbying against &quot;Tower of Babel&quot; problem.

By the way, DarkPlaces completely removed Efrags ages ago so really the correct answer is &quot;N/A&quot;.  ZQuake, likewise, does not use Efrags nor FTE.

-----

(mh) - yeah, DirectQ can play aguirReQuake demos quite well as it supports the same protocols.  You can also use the sv_protocol 15 command in both DirectQ and aguirReQuake to switch back to a compatible protocol for generating demos that are usable in other engines, as well as if you want to use either engine as a server.  Also, both engines let the server fully control the protocol, so they can quite happily connect to any protocol 15 server without any jiggerypokery required by the player.

:actually as i recall, even with sv_protocol 15, aguirRe's engines will send nehahra-style U_TRANS data for entities with alpha, which will crash a stock engine. [[User:Metlslime|Metlslime]] 04:56, 18 January 2010 (CST)

negke: Just wanted to point out that &quot;aguirReQuake&quot; isn't a good name, because hardly anyone outside Func/Inside3d knows BJP by this nick. &quot;Bengt Jardrup's enhanced engines,&quot; while being overly long, seems more appropriate for a wider audience.</text>
      <sha1>5c04qi0utqqmkz19m6b2q5ssqb066w8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:Engines</title>
    <ns>1</ns>
    <id>456</id>
    <revision>
      <id>827</id>
      <timestamp>2008-05-14T23:56:53Z</timestamp>
      <contributor>
        <ip>74.76.3.9</ip>
      </contributor>
      <comment>New page: This should be a page describing what engines are, how they differ from mods and how to install and use them. Save the promotional listing for automatic wiki categorization.</comment>
      <text xml:space="preserve" bytes="173">This should be a page describing what engines are, how they differ from mods and how to install and use them. Save the promotional listing for automatic wiki categorization.</text>
      <sha1>azyrvuapvtnwxlqer8ocavha8xgcqyj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1267</id>
      <parentid>827</parentid>
      <timestamp>2009-09-25T13:39:41Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <text xml:space="preserve" bytes="498">This should be a page describing what engines are, how they differ from mods and how to install and use them. Save the promotional listing for automatic wiki categorization.
----
* If someone feels like using (the good parts of) http://www.quaddicted.com/engines/engine_comparison.html for this wiki, maybe an engine feature comparison chart similar to the [[Engine Limits]], please go ahead. GFDL is very fine with me, no need for attribution. [[User:Spirit|Spirit]] 08:39, 25 September 2009 (CDT)</text>
      <sha1>5s3vam8ugs276867113t3azo1zi3mhh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1268</id>
      <parentid>1267</parentid>
      <timestamp>2009-09-25T16:53:37Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="738">This should be a page describing what engines are, how they differ from mods and how to install and use them. Save the promotional listing for automatic wiki categorization.
----
* If someone feels like using (the good parts of) http://www.quaddicted.com/engines/engine_comparison.html for this wiki, maybe an engine feature comparison chart similar to the [[Engine Limits]], please go ahead. GFDL is very fine with me, no need for attribution. [[User:Spirit|Spirit]] 08:39, 25 September 2009 (CDT)
** Maybe, but I think your data may be out of date or biased... Marcher on Darkplaces for me runs at 250 fps when viewing the large outdoor scene at the beginning (and 600+ fps elsewhere) --[[User:Sajt|Sajt]] 11:53, 25 September 2009 (CDT)</text>
      <sha1>90cj67tjw1t3v7qutrqfph84t296z7f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1269</id>
      <parentid>1268</parentid>
      <timestamp>2009-09-26T08:15:17Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <text xml:space="preserve" bytes="1213">This should be a page describing what engines are, how they differ from mods and how to install and use them. Save the promotional listing for automatic wiki categorization.
----
* If someone feels like using (the good parts of) http://www.quaddicted.com/engines/engine_comparison.html for this wiki, maybe an engine feature comparison chart similar to the [[Engine Limits]], please go ahead. GFDL is very fine with me, no need for attribution. [[User:Spirit|Spirit]] 08:39, 25 September 2009 (CDT)
** Maybe, but I think your data may be out of date or biased... Marcher on Darkplaces for me runs at 250 fps when viewing the large outdoor scene at the beginning (and 600+ fps elsewhere) --[[User:Sajt|Sajt]] 11:53, 25 September 2009 (CDT)
*** Oh, I meant the actual information about features. And only as part of a base, it obviously focuses on SP. It definitely is out of date for some engines. The tested DP is 2 years old now, it was the stable release back then. The performance on marcher seems to highly depend on hardware, it runs decent now but I still got a drop to ~30fps when first getting out to the open (~90fps after a while, so it's all fine). [[User:Spirit|Spirit]] 03:15, 26 September 2009 (CDT)</text>
      <sha1>d37nzawlkq0d4acfkis0vzmafzkabih</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:Entity guide</title>
    <ns>1</ns>
    <id>575</id>
    <revision>
      <id>1497</id>
      <timestamp>2009-12-21T11:08:32Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>New page: Added information for some entities. I also included models, sounds and bbox sizes, although on second thought this informations seems somewhat redundant in a non-coding (and non-hacking) ...</comment>
      <text xml:space="preserve" bytes="350">Added information for some entities. I also included models, sounds and bbox sizes, although on second thought this informations seems somewhat redundant in a non-coding (and non-hacking) context. Except maybe the bbox information. The spawnflags (easy, normal, hard, deathmatch) may fit here, but since they are the same for all entities, maybe not.</text>
      <sha1>617xk9fbi1zejjen50ndvpcnk2rz7vh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2210</id>
      <parentid>1497</parentid>
      <timestamp>2013-03-26T10:56:18Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <text xml:space="preserve" bytes="872">Added information for some entities. I also included models, sounds and bbox sizes, although on second thought this informations seems somewhat redundant in a non-coding (and non-hacking) context. Except maybe the bbox information. The spawnflags (easy, normal, hard, deathmatch) may fit here, but since they are the same for all entities, maybe not. --negke
-----
I think it would be great to have both pages for the technical entity names (eg [[item_artifact_super_damage]]) and the in-game item/monster titles (eg [[Quad Damage]]). The entity page would have technical information, how to implement it as a content creator. The item page would have details on how to use as player, screenshot, maybe trivia etc. Some pages already exist. Of course both pages would be cross-linked. Thoughts? [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 10:56, 26 March 2013 (UTC)</text>
      <sha1>hmn2q69fuzwlobuazefxbjabacnaimc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2213</id>
      <parentid>2210</parentid>
      <timestamp>2013-03-26T12:15:48Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="1163">Added information for some entities. I also included models, sounds and bbox sizes, although on second thought this informations seems somewhat redundant in a non-coding (and non-hacking) context. Except maybe the bbox information. The spawnflags (easy, normal, hard, deathmatch) may fit here, but since they are the same for all entities, maybe not. --negke
-----
I think it would be great to have both pages for the technical entity names (eg [[item_artifact_super_damage]]) and the in-game item/monster titles (eg [[Quad Damage]]). The entity page would have technical information, how to implement it as a content creator. The item page would have details on how to use as player, screenshot, maybe trivia etc. Some pages already exist. Of course both pages would be cross-linked. Thoughts? [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 10:56, 26 March 2013 (UTC)
: We were talking about this on #qc after I put up the [[func_door]] page (it needs some re-work to match other entities now). I agree that having a general page and a separate technical page would be ideal. --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 12:15, 26 March 2013 (UTC)</text>
      <sha1>605sf2bu986r86qpxm1piyevnxdacc7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:Getting Started</title>
    <ns>1</ns>
    <id>494</id>
    <revision>
      <id>1024</id>
      <timestamp>2009-06-10T09:46:11Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>New page: Hey, let's please keep this stricly non-development and very newbie friendly. I am not sure the Map Sources belong here (I think they don't). ~~~~</comment>
      <text xml:space="preserve" bytes="190">Hey, let's please keep this stricly non-development and very newbie friendly. I am not sure the Map Sources belong here (I think they don't). [[User:Spirit|Spirit]] 04:46, 10 June 2009 (CDT)</text>
      <sha1>012294e0gzyy4wjb8auk8x654qzi4qm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:Getting Started Modding</title>
    <ns>1</ns>
    <id>1071</id>
    <revision>
      <id>3217</id>
      <timestamp>2014-01-02T14:23:11Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Created page with &quot;this page was getting spammed, protecting it seemed not to work when it was non-existent so I wrote this text.--~~~~&quot;</comment>
      <text xml:space="preserve" bytes="190">this page was getting spammed, protecting it seemed not to work when it was non-existent so I wrote this text.--[[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 14:23, 2 January 2014 (UTC)</text>
      <sha1>gnhkjho2wu82rb6ou94nn2udwtjcl1n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3218</id>
      <parentid>3217</parentid>
      <timestamp>2014-01-02T14:23:18Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Talk:Getting Started Modding]]&quot;: Excessive spamming (‎[edit=sysop] (indefinite) ‎[move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="190">this page was getting spammed, protecting it seemed not to work when it was non-existent so I wrote this text.--[[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 14:23, 2 January 2014 (UTC)</text>
      <sha1>gnhkjho2wu82rb6ou94nn2udwtjcl1n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:Installing Addons</title>
    <ns>1</ns>
    <id>535</id>
    <revision>
      <id>1279</id>
      <timestamp>2009-09-27T08:13:10Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <comment>New page: .</comment>
      <text xml:space="preserve" bytes="1">.</text>
      <sha1>6t9fg2gmch401ldtk8m7pyzz632ixbb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1280</id>
      <parentid>1279</parentid>
      <timestamp>2009-09-27T08:13:18Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[Talk:Installing Addons]]&quot; [edit=autoconfirmed:move=autoconfirmed]</comment>
      <text xml:space="preserve" bytes="1">.</text>
      <sha1>6t9fg2gmch401ldtk8m7pyzz632ixbb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:List of console variables</title>
    <ns>1</ns>
    <id>376</id>
    <revision>
      <id>630</id>
      <timestamp>2008-04-16T15:03:46Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: ..I was just wondering if all these cvars where stock Dos, Win, QW, or some other engine cvars mixed in say from darkplaces? I think that would be important to make note of and keep cvars ...</comment>
      <text xml:space="preserve" bytes="340">..I was just wondering if all these cvars where stock Dos, Win, QW, or some other engine cvars mixed in say from darkplaces? I think that would be important to make note of and keep cvars only in used in certain engines seperate from stock ones used in all engines. No? It would be newbie friendly for those who don't know the difference...</text>
      <sha1>mhens36cyydei7tozcb7oex76gequy7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>631</id>
      <parentid>630</parentid>
      <timestamp>2008-04-16T15:05:08Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="398">..I was just wondering if all these cvars where stock Dos, Win, QW, or some other engine cvars mixed in say from darkplaces? I think that would be important to make note of and keep cvars only in used in certain engines seperate from stock ones used in all engines. No? It would be &lt;i&gt;&quot;newbie&quot;&lt;/i&gt; friendly for those who don't know the difference...

--[[User:XaGe|XaGe]] 10:05, 16 April 2008 (CDT)</text>
      <sha1>77byiw45zgiqdqyrnosqkthz3ogak8i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>632</id>
      <parentid>631</parentid>
      <timestamp>2008-04-16T15:07:16Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="418">..I was just wondering if all these [[cvars]] where stock Dos, Win, QW, or some other engine [[cvars]] mixed in say from [[darkplaces]]? I think that would be important to make note of and keep [[cvars]] only in used in certain engines separate from stock ones used in all engines. No? It would be &lt;i&gt;&quot;[[newbie]]&quot;&lt;/i&gt; friendly for those who don't know the difference...

--[[User:XaGe|XaGe]] 10:05, 16 April 2008 (CDT)</text>
      <sha1>c8k4fciye21kmgsmnteqqde55e5e3jr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:Main P</title>
    <ns>1</ns>
    <id>632</id>
    <revision>
      <id>1862</id>
      <timestamp>2013-03-25T00:54:16Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>Created page with &quot;Nothing links here and it seems this is a pre-import page that's probably not required anymore. It probably doesn't hurt to leave it, but deleting it would keep it simple too....&quot;</comment>
      <text xml:space="preserve" bytes="258">Nothing links here and it seems this is a pre-import page that's probably not required anymore. It probably doesn't hurt to leave it, but deleting it would keep it simple too. --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 00:54, 25 March 2013 (UTC)</text>
      <sha1>rkf51eh5ovzwaeuqolctwb7hxcg7abz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:Main Page</title>
    <ns>1</ns>
    <id>164</id>
    <revision>
      <id>261</id>
      <timestamp>2007-11-03T22:58:57Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>New page: Someone with more wikifu arrange this page to have multiple columns of info per row? Its a long frontpage with not a whole lot past the very left side. I'm looking at you Sajt, since I jus...</comment>
      <text xml:space="preserve" bytes="434">Someone with more wikifu arrange this page to have multiple columns of info per row? Its a long frontpage with not a whole lot past the very left side. I'm looking at you Sajt, since I just tried to mimic the frontpage wiki of another project and things looked a little... crazy. Just looks kind of silly right now having so much dead space in the middle and the right side. --[[User:Scar3crow|Scar3crow]] 17:58, 3 November 2007 (CDT)</text>
      <sha1>ad7f2vwolquj3se32wg4aiw169qg9hp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>262</id>
      <parentid>261</parentid>
      <timestamp>2007-11-04T22:51:19Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="663">Someone with more wikifu arrange this page to have multiple columns of info per row? Its a long frontpage with not a whole lot past the very left side. I'm looking at you Sajt, since I just tried to mimic the frontpage wiki of another project and things looked a little... crazy. Just looks kind of silly right now having so much dead space in the middle and the right side. --[[User:Scar3crow|Scar3crow]] 17:58, 3 November 2007 (CDT)
: Yup. I'm going to worry about that once the old stuff is moved. As it is now, it's easier to easily remove or add things, so we can finalize what should be on the main page...  --[[User:Sajt|Sajt]] 16:51, 4 November 2007 (CST)</text>
      <sha1>budl32wgy6joylecp65o53lv1c5tgk8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>940</id>
      <parentid>262</parentid>
      <timestamp>2008-11-12T11:52:01Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="1242">Someone with more wikifu arrange this page to have multiple columns of info per row? Its a long frontpage with not a whole lot past the very left side. I'm looking at you Sajt, since I just tried to mimic the frontpage wiki of another project and things looked a little... crazy. Just looks kind of silly right now having so much dead space in the middle and the right side. --[[User:Scar3crow|Scar3crow]] 17:58, 3 November 2007 (CDT)
: Yup. I'm going to worry about that once the old stuff is moved. As it is now, it's easier to easily remove or add things, so we can finalize what should be on the main page...  --[[User:Sajt|Sajt]] 16:51, 4 November 2007 (CST)

===Organization===
I just created what I think is a pretty decent skeleton for the site, using links on the front page.  

* Anything in parenthesis are just comments that we should remove eventually.  
* The two-level-deep bullet list is about as detailed as I think we should get, any additional levels of detail should only be sublinks on the front pages of the appropriate category.
* Engine Development needs a few more children, I just wasn't sure what additional categories were important enough to list here.
--[[User:Metlslime|Metlslime]] 05:52, 12 November 2008 (CST)</text>
      <sha1>n8af7cza8ki58fqxe1ckzd6bj36kcu7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>960</id>
      <parentid>940</parentid>
      <timestamp>2008-11-14T08:49:24Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>/* Organization */</comment>
      <text xml:space="preserve" bytes="1411">Someone with more wikifu arrange this page to have multiple columns of info per row? Its a long frontpage with not a whole lot past the very left side. I'm looking at you Sajt, since I just tried to mimic the frontpage wiki of another project and things looked a little... crazy. Just looks kind of silly right now having so much dead space in the middle and the right side. --[[User:Scar3crow|Scar3crow]] 17:58, 3 November 2007 (CDT)
: Yup. I'm going to worry about that once the old stuff is moved. As it is now, it's easier to easily remove or add things, so we can finalize what should be on the main page...  --[[User:Sajt|Sajt]] 16:51, 4 November 2007 (CST)

===Organization===
I just created what I think is a pretty decent skeleton for the site, using links on the front page.  

* Anything in parenthesis are just comments that we should remove eventually.  
* The two-level-deep bullet list is about as detailed as I think we should get, any additional levels of detail should only be sublinks on the front pages of the appropriate category.
* Engine Development needs a few more children, I just wasn't sure what additional categories were important enough to list here.
--[[User:Metlslime|Metlslime]] 05:52, 12 November 2008 (CST)

Okay, it's all in a table now, and I used the quakesrc.org TOC as a guide for rearranging some categories.
--[[User:Metlslime|Metlslime]] 02:49, 14 November 2008 (CST)</text>
      <sha1>d8bxek8q0hh20h3dujcj3h363gmeq89</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1032</id>
      <parentid>960</parentid>
      <timestamp>2009-06-11T04:00:58Z</timestamp>
      <contributor>
        <ip>61.244.124.24</ip>
      </contributor>
      <comment>New section: [[Talk:Main Page#http://anime.goodnanoav.com|http://anime.goodnanoav.com]]</comment>
      <text xml:space="preserve" bytes="1537">Someone with more wikifu arrange this page to have multiple columns of info per row? Its a long frontpage with not a whole lot past the very left side. I'm looking at you Sajt, since I just tried to mimic the frontpage wiki of another project and things looked a little... crazy. Just looks kind of silly right now having so much dead space in the middle and the right side. --[[User:Scar3crow|Scar3crow]] 17:58, 3 November 2007 (CDT)
: Yup. I'm going to worry about that once the old stuff is moved. As it is now, it's easier to easily remove or add things, so we can finalize what should be on the main page...  --[[User:Sajt|Sajt]] 16:51, 4 November 2007 (CST)

===Organization===
I just created what I think is a pretty decent skeleton for the site, using links on the front page.  

* Anything in parenthesis are just comments that we should remove eventually.  
* The two-level-deep bullet list is about as detailed as I think we should get, any additional levels of detail should only be sublinks on the front pages of the appropriate category.
* Engine Development needs a few more children, I just wasn't sure what additional categories were important enough to list here.
--[[User:Metlslime|Metlslime]] 05:52, 12 November 2008 (CST)

Okay, it's all in a table now, and I used the quakesrc.org TOC as a guide for rearranging some categories.
--[[User:Metlslime|Metlslime]] 02:49, 14 November 2008 (CST)

== http://anime.goodnanoav.com ==

Need more info about Visionary manga ? You are welcome here http://anime.goodnanoav.com .</text>
      <sha1>hsfuxg6uwls9zbwhoo3yz863dswskle</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1033</id>
      <parentid>1032</parentid>
      <timestamp>2009-06-12T10:05:57Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>/* http://anime.goodnanoav.com */</comment>
      <text xml:space="preserve" bytes="1411">Someone with more wikifu arrange this page to have multiple columns of info per row? Its a long frontpage with not a whole lot past the very left side. I'm looking at you Sajt, since I just tried to mimic the frontpage wiki of another project and things looked a little... crazy. Just looks kind of silly right now having so much dead space in the middle and the right side. --[[User:Scar3crow|Scar3crow]] 17:58, 3 November 2007 (CDT)
: Yup. I'm going to worry about that once the old stuff is moved. As it is now, it's easier to easily remove or add things, so we can finalize what should be on the main page...  --[[User:Sajt|Sajt]] 16:51, 4 November 2007 (CST)

===Organization===
I just created what I think is a pretty decent skeleton for the site, using links on the front page.  

* Anything in parenthesis are just comments that we should remove eventually.  
* The two-level-deep bullet list is about as detailed as I think we should get, any additional levels of detail should only be sublinks on the front pages of the appropriate category.
* Engine Development needs a few more children, I just wasn't sure what additional categories were important enough to list here.
--[[User:Metlslime|Metlslime]] 05:52, 12 November 2008 (CST)

Okay, it's all in a table now, and I used the quakesrc.org TOC as a guide for rearranging some categories.
--[[User:Metlslime|Metlslime]] 02:49, 14 November 2008 (CST)</text>
      <sha1>d8bxek8q0hh20h3dujcj3h363gmeq89</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1034</id>
      <parentid>1033</parentid>
      <timestamp>2009-06-13T16:35:28Z</timestamp>
      <contributor>
        <ip>190.202.107.117</ip>
      </contributor>
      <comment>New section: [[Talk:Main Page#http://attorney.goodnanoav.com/|http://attorney.goodnanoav.com/]]</comment>
      <text xml:space="preserve" bytes="1602">Someone with more wikifu arrange this page to have multiple columns of info per row? Its a long frontpage with not a whole lot past the very left side. I'm looking at you Sajt, since I just tried to mimic the frontpage wiki of another project and things looked a little... crazy. Just looks kind of silly right now having so much dead space in the middle and the right side. --[[User:Scar3crow|Scar3crow]] 17:58, 3 November 2007 (CDT)
: Yup. I'm going to worry about that once the old stuff is moved. As it is now, it's easier to easily remove or add things, so we can finalize what should be on the main page...  --[[User:Sajt|Sajt]] 16:51, 4 November 2007 (CST)

===Organization===
I just created what I think is a pretty decent skeleton for the site, using links on the front page.  

* Anything in parenthesis are just comments that we should remove eventually.  
* The two-level-deep bullet list is about as detailed as I think we should get, any additional levels of detail should only be sublinks on the front pages of the appropriate category.
* Engine Development needs a few more children, I just wasn't sure what additional categories were important enough to list here.
--[[User:Metlslime|Metlslime]] 05:52, 12 November 2008 (CST)

Okay, it's all in a table now, and I used the quakesrc.org TOC as a guide for rearranging some categories.
--[[User:Metlslime|Metlslime]] 02:49, 14 November 2008 (CST)

== http://attorney.goodnanoav.com/ ==

Best reviews of the day about AttorneySuffolk county district attorney, Attorney client privileges and Attorney finder http://attorney.goodnanoav.com/</text>
      <sha1>72fc6qi0zttmmedp63jksz78ebldieg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1035</id>
      <parentid>1034</parentid>
      <timestamp>2009-06-15T12:15:15Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Undo revision 1034 by [[Special:Contributions/190.202.107.117|190.202.107.117]] ([[User talk:190.202.107.117|Talk]])</comment>
      <text xml:space="preserve" bytes="1411">Someone with more wikifu arrange this page to have multiple columns of info per row? Its a long frontpage with not a whole lot past the very left side. I'm looking at you Sajt, since I just tried to mimic the frontpage wiki of another project and things looked a little... crazy. Just looks kind of silly right now having so much dead space in the middle and the right side. --[[User:Scar3crow|Scar3crow]] 17:58, 3 November 2007 (CDT)
: Yup. I'm going to worry about that once the old stuff is moved. As it is now, it's easier to easily remove or add things, so we can finalize what should be on the main page...  --[[User:Sajt|Sajt]] 16:51, 4 November 2007 (CST)

===Organization===
I just created what I think is a pretty decent skeleton for the site, using links on the front page.  

* Anything in parenthesis are just comments that we should remove eventually.  
* The two-level-deep bullet list is about as detailed as I think we should get, any additional levels of detail should only be sublinks on the front pages of the appropriate category.
* Engine Development needs a few more children, I just wasn't sure what additional categories were important enough to list here.
--[[User:Metlslime|Metlslime]] 05:52, 12 November 2008 (CST)

Okay, it's all in a table now, and I used the quakesrc.org TOC as a guide for rearranging some categories.
--[[User:Metlslime|Metlslime]] 02:49, 14 November 2008 (CST)</text>
      <sha1>d8bxek8q0hh20h3dujcj3h363gmeq89</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1127</id>
      <parentid>1035</parentid>
      <timestamp>2009-08-29T20:37:27Z</timestamp>
      <contributor>
        <ip>91.64.167.67</ip>
      </contributor>
      <comment>New section: [[Talk:Main Page#Livesex Girls vor der Sexcam|Livesex Girls vor der Sexcam]]</comment>
      <text xml:space="preserve" bytes="2216">Someone with more wikifu arrange this page to have multiple columns of info per row? Its a long frontpage with not a whole lot past the very left side. I'm looking at you Sajt, since I just tried to mimic the frontpage wiki of another project and things looked a little... crazy. Just looks kind of silly right now having so much dead space in the middle and the right side. --[[User:Scar3crow|Scar3crow]] 17:58, 3 November 2007 (CDT)
: Yup. I'm going to worry about that once the old stuff is moved. As it is now, it's easier to easily remove or add things, so we can finalize what should be on the main page...  --[[User:Sajt|Sajt]] 16:51, 4 November 2007 (CST)

===Organization===
I just created what I think is a pretty decent skeleton for the site, using links on the front page.  

* Anything in parenthesis are just comments that we should remove eventually.  
* The two-level-deep bullet list is about as detailed as I think we should get, any additional levels of detail should only be sublinks on the front pages of the appropriate category.
* Engine Development needs a few more children, I just wasn't sure what additional categories were important enough to list here.
--[[User:Metlslime|Metlslime]] 05:52, 12 November 2008 (CST)

Okay, it's all in a table now, and I used the quakesrc.org TOC as a guide for rearranging some categories.
--[[User:Metlslime|Metlslime]] 02:49, 14 November 2008 (CST)

== Livesex Girls vor der Sexcam ==

Hier sind  die geilen und hemmungslosen Girls die den&lt;b&gt; &lt;a href=http://www.sexcamamateure.net&gt;Livesex&lt;/a&gt;&lt;/b&gt; privat von zu hause zeigen.
Geil und hemmungslos treiben Sie es dabei mit Dir vor der Webcam und Du bestimmst einfach ob Du nur die geilen
Titten sehen moechtest, oder die schoen rasierte Muschi , oder ob Du sogar knallharten&lt;a href=http://www.sexcamamateure.net&gt; &lt;b&gt;Sex&lt;/b&gt;&lt;/a&gt; mit der Frau erleben willst.
Hier ist das Portal wo private Sexgirls alles zeigen was Du moechtest, Anonym und absolute Amateure. Geile Action
mit den Girls die Dir beim Livesex von zu Hause aus auch noch den letzten Tropfen rausholen, geniesse die&lt;a href=http://www.sexcamamateure.net&gt; &lt;b&gt;Sexcam&lt;/b&gt;&lt;/a&gt; Girls nun ganz privat.
Viel Spass und vor allem ein geiles Abaenteuer!!!</text>
      <sha1>edbzp1knlzmwbvthiveh2gtm5zevf2o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1129</id>
      <parentid>1127</parentid>
      <timestamp>2009-09-01T00:44:11Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>Undo revision 1127 by [[Special:Contributions/91.64.167.67|91.64.167.67]] ([[User talk:91.64.167.67|Talk]])</comment>
      <text xml:space="preserve" bytes="1411">Someone with more wikifu arrange this page to have multiple columns of info per row? Its a long frontpage with not a whole lot past the very left side. I'm looking at you Sajt, since I just tried to mimic the frontpage wiki of another project and things looked a little... crazy. Just looks kind of silly right now having so much dead space in the middle and the right side. --[[User:Scar3crow|Scar3crow]] 17:58, 3 November 2007 (CDT)
: Yup. I'm going to worry about that once the old stuff is moved. As it is now, it's easier to easily remove or add things, so we can finalize what should be on the main page...  --[[User:Sajt|Sajt]] 16:51, 4 November 2007 (CST)

===Organization===
I just created what I think is a pretty decent skeleton for the site, using links on the front page.  

* Anything in parenthesis are just comments that we should remove eventually.  
* The two-level-deep bullet list is about as detailed as I think we should get, any additional levels of detail should only be sublinks on the front pages of the appropriate category.
* Engine Development needs a few more children, I just wasn't sure what additional categories were important enough to list here.
--[[User:Metlslime|Metlslime]] 05:52, 12 November 2008 (CST)

Okay, it's all in a table now, and I used the quakesrc.org TOC as a guide for rearranging some categories.
--[[User:Metlslime|Metlslime]] 02:49, 14 November 2008 (CST)</text>
      <sha1>d8bxek8q0hh20h3dujcj3h363gmeq89</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1136</id>
      <parentid>1129</parentid>
      <timestamp>2009-09-07T02:31:12Z</timestamp>
      <contributor>
        <ip>98.124.176.104</ip>
      </contributor>
      <comment>New section: [[Talk:Main Page#Don't hesitate|Don't hesitate]]</comment>
      <text xml:space="preserve" bytes="1767">Someone with more wikifu arrange this page to have multiple columns of info per row? Its a long frontpage with not a whole lot past the very left side. I'm looking at you Sajt, since I just tried to mimic the frontpage wiki of another project and things looked a little... crazy. Just looks kind of silly right now having so much dead space in the middle and the right side. --[[User:Scar3crow|Scar3crow]] 17:58, 3 November 2007 (CDT)
: Yup. I'm going to worry about that once the old stuff is moved. As it is now, it's easier to easily remove or add things, so we can finalize what should be on the main page...  --[[User:Sajt|Sajt]] 16:51, 4 November 2007 (CST)

===Organization===
I just created what I think is a pretty decent skeleton for the site, using links on the front page.  

* Anything in parenthesis are just comments that we should remove eventually.  
* The two-level-deep bullet list is about as detailed as I think we should get, any additional levels of detail should only be sublinks on the front pages of the appropriate category.
* Engine Development needs a few more children, I just wasn't sure what additional categories were important enough to list here.
--[[User:Metlslime|Metlslime]] 05:52, 12 November 2008 (CST)

Okay, it's all in a table now, and I used the quakesrc.org TOC as a guide for rearranging some categories.
--[[User:Metlslime|Metlslime]] 02:49, 14 November 2008 (CST)

== Don't hesitate ==

every dofuser needs &lt;a href=http://www.bawwgt.com&gt;dofus kamas&lt;/a&gt;, but most of them can't find a good &lt;a href=http://www.bawwgt.com&gt;cheap dofus kamas&lt;/a&gt; provider, so it's a problem is they want to &lt;a href=http://www.bawwgt.com&gt;buy cheap dofus kamas&lt;/a&gt;.now bawwgt will be your best choice on &lt;a href=http://www.bawwgt.com&gt;dofus&lt;/a&gt;</text>
      <sha1>d4zvvt1re873289kpr9bpwjtylqk0xc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1139</id>
      <parentid>1136</parentid>
      <timestamp>2009-09-08T05:35:38Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>removed spam</comment>
      <text xml:space="preserve" bytes="1411">Someone with more wikifu arrange this page to have multiple columns of info per row? Its a long frontpage with not a whole lot past the very left side. I'm looking at you Sajt, since I just tried to mimic the frontpage wiki of another project and things looked a little... crazy. Just looks kind of silly right now having so much dead space in the middle and the right side. --[[User:Scar3crow|Scar3crow]] 17:58, 3 November 2007 (CDT)
: Yup. I'm going to worry about that once the old stuff is moved. As it is now, it's easier to easily remove or add things, so we can finalize what should be on the main page...  --[[User:Sajt|Sajt]] 16:51, 4 November 2007 (CST)

===Organization===
I just created what I think is a pretty decent skeleton for the site, using links on the front page.  

* Anything in parenthesis are just comments that we should remove eventually.  
* The two-level-deep bullet list is about as detailed as I think we should get, any additional levels of detail should only be sublinks on the front pages of the appropriate category.
* Engine Development needs a few more children, I just wasn't sure what additional categories were important enough to list here.
--[[User:Metlslime|Metlslime]] 05:52, 12 November 2008 (CST)

Okay, it's all in a table now, and I used the quakesrc.org TOC as a guide for rearranging some categories.
--[[User:Metlslime|Metlslime]] 02:49, 14 November 2008 (CST)</text>
      <sha1>d8bxek8q0hh20h3dujcj3h363gmeq89</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1142</id>
      <parentid>1139</parentid>
      <timestamp>2009-09-11T07:17:30Z</timestamp>
      <contributor>
        <ip>98.124.176.104</ip>
      </contributor>
      <comment>New section: [[Talk:Main Page#Don't hesitate|Don't hesitate]]</comment>
      <text xml:space="preserve" bytes="1767">Someone with more wikifu arrange this page to have multiple columns of info per row? Its a long frontpage with not a whole lot past the very left side. I'm looking at you Sajt, since I just tried to mimic the frontpage wiki of another project and things looked a little... crazy. Just looks kind of silly right now having so much dead space in the middle and the right side. --[[User:Scar3crow|Scar3crow]] 17:58, 3 November 2007 (CDT)
: Yup. I'm going to worry about that once the old stuff is moved. As it is now, it's easier to easily remove or add things, so we can finalize what should be on the main page...  --[[User:Sajt|Sajt]] 16:51, 4 November 2007 (CST)

===Organization===
I just created what I think is a pretty decent skeleton for the site, using links on the front page.  

* Anything in parenthesis are just comments that we should remove eventually.  
* The two-level-deep bullet list is about as detailed as I think we should get, any additional levels of detail should only be sublinks on the front pages of the appropriate category.
* Engine Development needs a few more children, I just wasn't sure what additional categories were important enough to list here.
--[[User:Metlslime|Metlslime]] 05:52, 12 November 2008 (CST)

Okay, it's all in a table now, and I used the quakesrc.org TOC as a guide for rearranging some categories.
--[[User:Metlslime|Metlslime]] 02:49, 14 November 2008 (CST)

== Don't hesitate ==

every dofuser needs &lt;a href=http://www.bawwgt.com&gt;dofus kamas&lt;/a&gt;, but most of them can't find a good &lt;a href=http://www.bawwgt.com&gt;cheap dofus kamas&lt;/a&gt; provider, so it's a problem is they want to &lt;a href=http://www.bawwgt.com&gt;buy cheap dofus kamas&lt;/a&gt;.now bawwgt will be your best choice on &lt;a href=http://www.bawwgt.com&gt;dofus&lt;/a&gt;</text>
      <sha1>d4zvvt1re873289kpr9bpwjtylqk0xc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1143</id>
      <parentid>1142</parentid>
      <timestamp>2009-09-12T05:34:37Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>Undo revision 1142 by [[Special:Contributions/98.124.176.104|98.124.176.104]] ([[User talk:98.124.176.104|Talk]])</comment>
      <text xml:space="preserve" bytes="1411">Someone with more wikifu arrange this page to have multiple columns of info per row? Its a long frontpage with not a whole lot past the very left side. I'm looking at you Sajt, since I just tried to mimic the frontpage wiki of another project and things looked a little... crazy. Just looks kind of silly right now having so much dead space in the middle and the right side. --[[User:Scar3crow|Scar3crow]] 17:58, 3 November 2007 (CDT)
: Yup. I'm going to worry about that once the old stuff is moved. As it is now, it's easier to easily remove or add things, so we can finalize what should be on the main page...  --[[User:Sajt|Sajt]] 16:51, 4 November 2007 (CST)

===Organization===
I just created what I think is a pretty decent skeleton for the site, using links on the front page.  

* Anything in parenthesis are just comments that we should remove eventually.  
* The two-level-deep bullet list is about as detailed as I think we should get, any additional levels of detail should only be sublinks on the front pages of the appropriate category.
* Engine Development needs a few more children, I just wasn't sure what additional categories were important enough to list here.
--[[User:Metlslime|Metlslime]] 05:52, 12 November 2008 (CST)

Okay, it's all in a table now, and I used the quakesrc.org TOC as a guide for rearranging some categories.
--[[User:Metlslime|Metlslime]] 02:49, 14 November 2008 (CST)</text>
      <sha1>d8bxek8q0hh20h3dujcj3h363gmeq89</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1375</id>
      <parentid>1143</parentid>
      <timestamp>2009-10-08T15:20:34Z</timestamp>
      <contributor>
        <ip>204.124.182.42</ip>
      </contributor>
      <comment>New section: [[Talk:Main Page#Barack Obama’s Inaugural Address|Barack Obama’s Inaugural Address]]</comment>
      <text xml:space="preserve" bytes="1892">Someone with more wikifu arrange this page to have multiple columns of info per row? Its a long frontpage with not a whole lot past the very left side. I'm looking at you Sajt, since I just tried to mimic the frontpage wiki of another project and things looked a little... crazy. Just looks kind of silly right now having so much dead space in the middle and the right side. --[[User:Scar3crow|Scar3crow]] 17:58, 3 November 2007 (CDT)
: Yup. I'm going to worry about that once the old stuff is moved. As it is now, it's easier to easily remove or add things, so we can finalize what should be on the main page...  --[[User:Sajt|Sajt]] 16:51, 4 November 2007 (CST)

===Organization===
I just created what I think is a pretty decent skeleton for the site, using links on the front page.  

* Anything in parenthesis are just comments that we should remove eventually.  
* The two-level-deep bullet list is about as detailed as I think we should get, any additional levels of detail should only be sublinks on the front pages of the appropriate category.
* Engine Development needs a few more children, I just wasn't sure what additional categories were important enough to list here.
--[[User:Metlslime|Metlslime]] 05:52, 12 November 2008 (CST)

Okay, it's all in a table now, and I used the quakesrc.org TOC as a guide for rearranging some categories.
--[[User:Metlslime|Metlslime]] 02:49, 14 November 2008 (CST)

== Barack Obama’s Inaugural Address ==

I stand here today humbled by the task before &lt;a href=http://www.bawwgt.com&gt;dofus kamas&lt;/a&gt;, grateful for the trust you have bestowed, mindful of the sacrifices borne by our &lt;a href=http://www.bawwgt.com&gt;cheap dofus kamas&lt;/a&gt;. I thank President &lt;a href=http://www.bawwgt.com&gt;dofus&lt;/a&gt; for his service to &lt;a href=http://www.bawwgt.com&gt;buy dofus kamas&lt;/a&gt;, as well as the generosity and cooperation he has shown throughout this transition.</text>
      <sha1>hzny4irhpgjvxdyo5mspjwnqc6iv6rw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1376</id>
      <parentid>1375</parentid>
      <timestamp>2009-10-08T23:12:02Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <comment>removing spam</comment>
      <text xml:space="preserve" bytes="1411">Someone with more wikifu arrange this page to have multiple columns of info per row? Its a long frontpage with not a whole lot past the very left side. I'm looking at you Sajt, since I just tried to mimic the frontpage wiki of another project and things looked a little... crazy. Just looks kind of silly right now having so much dead space in the middle and the right side. --[[User:Scar3crow|Scar3crow]] 17:58, 3 November 2007 (CDT)
: Yup. I'm going to worry about that once the old stuff is moved. As it is now, it's easier to easily remove or add things, so we can finalize what should be on the main page...  --[[User:Sajt|Sajt]] 16:51, 4 November 2007 (CST)

===Organization===
I just created what I think is a pretty decent skeleton for the site, using links on the front page.  

* Anything in parenthesis are just comments that we should remove eventually.  
* The two-level-deep bullet list is about as detailed as I think we should get, any additional levels of detail should only be sublinks on the front pages of the appropriate category.
* Engine Development needs a few more children, I just wasn't sure what additional categories were important enough to list here.
--[[User:Metlslime|Metlslime]] 05:52, 12 November 2008 (CST)

Okay, it's all in a table now, and I used the quakesrc.org TOC as a guide for rearranging some categories.
--[[User:Metlslime|Metlslime]] 02:49, 14 November 2008 (CST)</text>
      <sha1>d8bxek8q0hh20h3dujcj3h363gmeq89</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1563</id>
      <parentid>1376</parentid>
      <timestamp>2010-02-01T10:22:22Z</timestamp>
      <contributor>
        <ip>204.124.182.42</ip>
      </contributor>
      <comment>New section: [[Talk:Main Page#New found!|New found!]]</comment>
      <text xml:space="preserve" bytes="2061">Someone with more wikifu arrange this page to have multiple columns of info per row? Its a long frontpage with not a whole lot past the very left side. I'm looking at you Sajt, since I just tried to mimic the frontpage wiki of another project and things looked a little... crazy. Just looks kind of silly right now having so much dead space in the middle and the right side. --[[User:Scar3crow|Scar3crow]] 17:58, 3 November 2007 (CDT)
: Yup. I'm going to worry about that once the old stuff is moved. As it is now, it's easier to easily remove or add things, so we can finalize what should be on the main page...  --[[User:Sajt|Sajt]] 16:51, 4 November 2007 (CST)

===Organization===
I just created what I think is a pretty decent skeleton for the site, using links on the front page.  

* Anything in parenthesis are just comments that we should remove eventually.  
* The two-level-deep bullet list is about as detailed as I think we should get, any additional levels of detail should only be sublinks on the front pages of the appropriate category.
* Engine Development needs a few more children, I just wasn't sure what additional categories were important enough to list here.
--[[User:Metlslime|Metlslime]] 05:52, 12 November 2008 (CST)

Okay, it's all in a table now, and I used the quakesrc.org TOC as a guide for rearranging some categories.
--[[User:Metlslime|Metlslime]] 02:49, 14 November 2008 (CST)

== New found! ==

Dofus est un &lt;a href=http://www.bawwgt.com/fr&gt;dofus kamas&lt;/a&gt;, le joueur incarne un ou plusieurs personnages. On y retrouve une multitude &lt;a href=http://www.bawwgt.com/fr&gt;acheter des dofus kamas&lt;/a&gt; et d'¨¦quipements en tout genre, une vingtaine de m¨¦tiers diff¨¦rents et plus d'une centaine de monstres r¨¦partis en diff¨¦rentes zones sur les 10 000 &lt;a href=http://www.bawwgt.com/fr&gt;dofus kamas pas cher&lt;/a&gt; (portions de carte, sur lesquelles l'on se d¨¦place d'ailleurs comme sur une carte) formant l'univers de &lt;a href=http://www.bawwgt.com/fr&gt;achat dofus kamas&lt;/a&gt;, dont 99% ne sont accessibles qu'aux abonn¨¦s.</text>
      <sha1>fk8by3q1oz25qwoh92329fxxqelognc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1564</id>
      <parentid>1563</parentid>
      <timestamp>2010-02-01T15:00:39Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Undo revision 1563 by [[Special:Contributions/204.124.182.42|204.124.182.42]] ([[User talk:204.124.182.42|Talk]]) Removed spam</comment>
      <text xml:space="preserve" bytes="1411">Someone with more wikifu arrange this page to have multiple columns of info per row? Its a long frontpage with not a whole lot past the very left side. I'm looking at you Sajt, since I just tried to mimic the frontpage wiki of another project and things looked a little... crazy. Just looks kind of silly right now having so much dead space in the middle and the right side. --[[User:Scar3crow|Scar3crow]] 17:58, 3 November 2007 (CDT)
: Yup. I'm going to worry about that once the old stuff is moved. As it is now, it's easier to easily remove or add things, so we can finalize what should be on the main page...  --[[User:Sajt|Sajt]] 16:51, 4 November 2007 (CST)

===Organization===
I just created what I think is a pretty decent skeleton for the site, using links on the front page.  

* Anything in parenthesis are just comments that we should remove eventually.  
* The two-level-deep bullet list is about as detailed as I think we should get, any additional levels of detail should only be sublinks on the front pages of the appropriate category.
* Engine Development needs a few more children, I just wasn't sure what additional categories were important enough to list here.
--[[User:Metlslime|Metlslime]] 05:52, 12 November 2008 (CST)

Okay, it's all in a table now, and I used the quakesrc.org TOC as a guide for rearranging some categories.
--[[User:Metlslime|Metlslime]] 02:49, 14 November 2008 (CST)</text>
      <sha1>d8bxek8q0hh20h3dujcj3h363gmeq89</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1633</id>
      <parentid>1564</parentid>
      <timestamp>2010-09-07T04:52:28Z</timestamp>
      <contributor>
        <ip>76.191.115.2</ip>
      </contributor>
      <comment>New section: [[Talk:Main Page#mszdrx|mszdrx]]</comment>
      <text xml:space="preserve" bytes="1506">Someone with more wikifu arrange this page to have multiple columns of info per row? Its a long frontpage with not a whole lot past the very left side. I'm looking at you Sajt, since I just tried to mimic the frontpage wiki of another project and things looked a little... crazy. Just looks kind of silly right now having so much dead space in the middle and the right side. --[[User:Scar3crow|Scar3crow]] 17:58, 3 November 2007 (CDT)
: Yup. I'm going to worry about that once the old stuff is moved. As it is now, it's easier to easily remove or add things, so we can finalize what should be on the main page...  --[[User:Sajt|Sajt]] 16:51, 4 November 2007 (CST)

===Organization===
I just created what I think is a pretty decent skeleton for the site, using links on the front page.  

* Anything in parenthesis are just comments that we should remove eventually.  
* The two-level-deep bullet list is about as detailed as I think we should get, any additional levels of detail should only be sublinks on the front pages of the appropriate category.
* Engine Development needs a few more children, I just wasn't sure what additional categories were important enough to list here.
--[[User:Metlslime|Metlslime]] 05:52, 12 November 2008 (CST)

Okay, it's all in a table now, and I used the quakesrc.org TOC as a guide for rearranging some categories.
--[[User:Metlslime|Metlslime]] 02:49, 14 November 2008 (CST)

== mszdrx ==

kryiqvnsxhuyipwdswkuy. http://www.acnetreatment2k.com/ - acne treatment
 lqyjsz</text>
      <sha1>fi330gr3zvatlmv0mkxq05reaktvx9p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1635</id>
      <parentid>1633</parentid>
      <timestamp>2010-09-09T00:18:35Z</timestamp>
      <contributor>
        <ip>159.153.4.50</ip>
      </contributor>
      <text xml:space="preserve" bytes="1411">Someone with more wikifu arrange this page to have multiple columns of info per row? Its a long frontpage with not a whole lot past the very left side. I'm looking at you Sajt, since I just tried to mimic the frontpage wiki of another project and things looked a little... crazy. Just looks kind of silly right now having so much dead space in the middle and the right side. --[[User:Scar3crow|Scar3crow]] 17:58, 3 November 2007 (CDT)
: Yup. I'm going to worry about that once the old stuff is moved. As it is now, it's easier to easily remove or add things, so we can finalize what should be on the main page...  --[[User:Sajt|Sajt]] 16:51, 4 November 2007 (CST)

===Organization===
I just created what I think is a pretty decent skeleton for the site, using links on the front page.  

* Anything in parenthesis are just comments that we should remove eventually.  
* The two-level-deep bullet list is about as detailed as I think we should get, any additional levels of detail should only be sublinks on the front pages of the appropriate category.
* Engine Development needs a few more children, I just wasn't sure what additional categories were important enough to list here.
--[[User:Metlslime|Metlslime]] 05:52, 12 November 2008 (CST)

Okay, it's all in a table now, and I used the quakesrc.org TOC as a guide for rearranging some categories.
--[[User:Metlslime|Metlslime]] 02:49, 14 November 2008 (CST)</text>
      <sha1>d8bxek8q0hh20h3dujcj3h363gmeq89</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1672</id>
      <parentid>1635</parentid>
      <timestamp>2011-05-20T10:43:37Z</timestamp>
      <contributor>
        <ip>64.223.160.205</ip>
      </contributor>
      <comment>New section: [[Talk:Main Page#QuakeDev Closing|QuakeDev Closing]]</comment>
      <text xml:space="preserve" bytes="1509">Someone with more wikifu arrange this page to have multiple columns of info per row? Its a long frontpage with not a whole lot past the very left side. I'm looking at you Sajt, since I just tried to mimic the frontpage wiki of another project and things looked a little... crazy. Just looks kind of silly right now having so much dead space in the middle and the right side. --[[User:Scar3crow|Scar3crow]] 17:58, 3 November 2007 (CDT)
: Yup. I'm going to worry about that once the old stuff is moved. As it is now, it's easier to easily remove or add things, so we can finalize what should be on the main page...  --[[User:Sajt|Sajt]] 16:51, 4 November 2007 (CST)

===Organization===
I just created what I think is a pretty decent skeleton for the site, using links on the front page.  

* Anything in parenthesis are just comments that we should remove eventually.  
* The two-level-deep bullet list is about as detailed as I think we should get, any additional levels of detail should only be sublinks on the front pages of the appropriate category.
* Engine Development needs a few more children, I just wasn't sure what additional categories were important enough to list here.
--[[User:Metlslime|Metlslime]] 05:52, 12 November 2008 (CST)

Okay, it's all in a table now, and I used the quakesrc.org TOC as a guide for rearranging some categories.
--[[User:Metlslime|Metlslime]] 02:49, 14 November 2008 (CST)

== QuakeDev Closing ==

Given that QuakeDev is soon to be no more, where is the wiki moving too?</text>
      <sha1>d0w0jo9xt6p5lwqhgheui4vpawhhz9r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1673</id>
      <parentid>1672</parentid>
      <timestamp>2011-05-20T10:44:34Z</timestamp>
      <contributor>
        <username>Karatorian</username>
        <id>25</id>
      </contributor>
      <minor/>
      <comment>/* QuakeDev Closing */</comment>
      <text xml:space="preserve" bytes="1568">Someone with more wikifu arrange this page to have multiple columns of info per row? Its a long frontpage with not a whole lot past the very left side. I'm looking at you Sajt, since I just tried to mimic the frontpage wiki of another project and things looked a little... crazy. Just looks kind of silly right now having so much dead space in the middle and the right side. --[[User:Scar3crow|Scar3crow]] 17:58, 3 November 2007 (CDT)
: Yup. I'm going to worry about that once the old stuff is moved. As it is now, it's easier to easily remove or add things, so we can finalize what should be on the main page...  --[[User:Sajt|Sajt]] 16:51, 4 November 2007 (CST)

===Organization===
I just created what I think is a pretty decent skeleton for the site, using links on the front page.  

* Anything in parenthesis are just comments that we should remove eventually.  
* The two-level-deep bullet list is about as detailed as I think we should get, any additional levels of detail should only be sublinks on the front pages of the appropriate category.
* Engine Development needs a few more children, I just wasn't sure what additional categories were important enough to list here.
--[[User:Metlslime|Metlslime]] 05:52, 12 November 2008 (CST)

Okay, it's all in a table now, and I used the quakesrc.org TOC as a guide for rearranging some categories.
--[[User:Metlslime|Metlslime]] 02:49, 14 November 2008 (CST)

== QuakeDev Closing ==

Given that QuakeDev is soon to be no more, where is the wiki moving too?
-- [[User:Karatorian|Karatorian]] 05:44, 20 May 2011 (CDT)</text>
      <sha1>a7unb8kvwscz4ck0fh3wb8nv56ucrmr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1674</id>
      <parentid>1673</parentid>
      <timestamp>2011-05-20T10:44:49Z</timestamp>
      <contributor>
        <username>Karatorian</username>
        <id>25</id>
      </contributor>
      <minor/>
      <comment>/* QuakeDev Closing */</comment>
      <text xml:space="preserve" bytes="1567">Someone with more wikifu arrange this page to have multiple columns of info per row? Its a long frontpage with not a whole lot past the very left side. I'm looking at you Sajt, since I just tried to mimic the frontpage wiki of another project and things looked a little... crazy. Just looks kind of silly right now having so much dead space in the middle and the right side. --[[User:Scar3crow|Scar3crow]] 17:58, 3 November 2007 (CDT)
: Yup. I'm going to worry about that once the old stuff is moved. As it is now, it's easier to easily remove or add things, so we can finalize what should be on the main page...  --[[User:Sajt|Sajt]] 16:51, 4 November 2007 (CST)

===Organization===
I just created what I think is a pretty decent skeleton for the site, using links on the front page.  

* Anything in parenthesis are just comments that we should remove eventually.  
* The two-level-deep bullet list is about as detailed as I think we should get, any additional levels of detail should only be sublinks on the front pages of the appropriate category.
* Engine Development needs a few more children, I just wasn't sure what additional categories were important enough to list here.
--[[User:Metlslime|Metlslime]] 05:52, 12 November 2008 (CST)

Okay, it's all in a table now, and I used the quakesrc.org TOC as a guide for rearranging some categories.
--[[User:Metlslime|Metlslime]] 02:49, 14 November 2008 (CST)

== QuakeDev Closing ==

Given that QuakeDev is soon to be no more, where is the wiki moving to?
-- [[User:Karatorian|Karatorian]] 05:44, 20 May 2011 (CDT)</text>
      <sha1>h67e3is1ova1f83w5gemr43waqt77vx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1675</id>
      <parentid>1674</parentid>
      <timestamp>2011-05-28T00:27:22Z</timestamp>
      <contributor>
        <ip>91.224.160.3</ip>
      </contributor>
      <comment>New section: [[Talk:Main Page#Contract out sand labels bona fide virus been.|Contract out sand labels bona fide virus been.]]</comment>
      <text xml:space="preserve" bytes="1717">Someone with more wikifu arrange this page to have multiple columns of info per row? Its a long frontpage with not a whole lot past the very left side. I'm looking at you Sajt, since I just tried to mimic the frontpage wiki of another project and things looked a little... crazy. Just looks kind of silly right now having so much dead space in the middle and the right side. --[[User:Scar3crow|Scar3crow]] 17:58, 3 November 2007 (CDT)
: Yup. I'm going to worry about that once the old stuff is moved. As it is now, it's easier to easily remove or add things, so we can finalize what should be on the main page...  --[[User:Sajt|Sajt]] 16:51, 4 November 2007 (CST)

===Organization===
I just created what I think is a pretty decent skeleton for the site, using links on the front page.  

* Anything in parenthesis are just comments that we should remove eventually.  
* The two-level-deep bullet list is about as detailed as I think we should get, any additional levels of detail should only be sublinks on the front pages of the appropriate category.
* Engine Development needs a few more children, I just wasn't sure what additional categories were important enough to list here.
--[[User:Metlslime|Metlslime]] 05:52, 12 November 2008 (CST)

Okay, it's all in a table now, and I used the quakesrc.org TOC as a guide for rearranging some categories.
--[[User:Metlslime|Metlslime]] 02:49, 14 November 2008 (CST)

== QuakeDev Closing ==

Given that QuakeDev is soon to be no more, where is the wiki moving to?
-- [[User:Karatorian|Karatorian]] 05:44, 20 May 2011 (CDT)

== Contract out sand labels bona fide virus been. ==

Look at this - don't is substantial &lt;a href=http://fjgih.co.cc/&gt;site&lt;/a&gt;? I hold so.  
hdt6dsj</text>
      <sha1>4swszel1l5kd981lk0a28ede69li68a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3207</id>
      <parentid>1675</parentid>
      <timestamp>2013-12-28T15:56:07Z</timestamp>
      <contributor>
        <username>Zombieghost</username>
        <id>54</id>
      </contributor>
      <comment>/* Can't see anything except in edit mode */ new section</comment>
      <text xml:space="preserve" bytes="3494">Someone with more wikifu arrange this page to have multiple columns of info per row? Its a long frontpage with not a whole lot past the very left side. I'm looking at you Sajt, since I just tried to mimic the frontpage wiki of another project and things looked a little... crazy. Just looks kind of silly right now having so much dead space in the middle and the right side. --[[User:Scar3crow|Scar3crow]] 17:58, 3 November 2007 (CDT)
: Yup. I'm going to worry about that once the old stuff is moved. As it is now, it's easier to easily remove or add things, so we can finalize what should be on the main page...  --[[User:Sajt|Sajt]] 16:51, 4 November 2007 (CST)

===Organization===
I just created what I think is a pretty decent skeleton for the site, using links on the front page.  

* Anything in parenthesis are just comments that we should remove eventually.  
* The two-level-deep bullet list is about as detailed as I think we should get, any additional levels of detail should only be sublinks on the front pages of the appropriate category.
* Engine Development needs a few more children, I just wasn't sure what additional categories were important enough to list here.
--[[User:Metlslime|Metlslime]] 05:52, 12 November 2008 (CST)

Okay, it's all in a table now, and I used the quakesrc.org TOC as a guide for rearranging some categories.
--[[User:Metlslime|Metlslime]] 02:49, 14 November 2008 (CST)

== QuakeDev Closing ==

Given that QuakeDev is soon to be no more, where is the wiki moving to?
-- [[User:Karatorian|Karatorian]] 05:44, 20 May 2011 (CDT)

== Contract out sand labels bona fide virus been. ==

Look at this - don't is substantial &lt;a href=http://fjgih.co.cc/&gt;site&lt;/a&gt;? I hold so.  
hdt6dsj

== Can't see anything except in edit mode ==

I have tried Google Chrome and Firefox and neither seems to be able to render the page text on this wiki.  Clicking &quot;Edit this page&quot; shows the source, but the text is not displayed at all on the actual Page view.  All the page formatting and the title look okay, but the body is not there.

Viewing the HTML source of the page reveals that the text of the page body is not contained within the source.  Instead, it only contains this:

&lt;nowiki&gt;
					&amp;lt;!-- ARTICLE --&gt;

				&amp;lt;article id=&quot;article&quot; aria-role=main aria-labeledby=&quot;firstHeading&quot;&gt;
					&amp;lt;a name=&quot;top&quot; id=&quot;top&quot;&gt;&amp;lt;/a&gt;
															&amp;lt;h1 id=&quot;firstHeading&quot; class=&quot;firstHeading&quot; aria-level=&quot;1&quot;&gt;Main Page&amp;lt;/h1&gt;					&amp;lt;div id=&quot;bodyContent&quot; class=&quot;body_content&quot;&gt;
						&amp;lt;h2 id=&quot;siteSub&quot;&gt;From Quake Wiki&amp;lt;/h2&gt;
																								
						&amp;lt;!-- start content --&gt;
&amp;lt;div id=&quot;mw-content-text&quot; lang=&quot;en&quot; dir=&quot;ltr&quot; class=&quot;mw-content-ltr&quot;&gt;
&amp;lt;!-- 
NewPP limit report
Preprocessor visited node count: 2/1000000
Preprocessor generated node count: 8/1000000
Post-expand include size: 0/2097152 bytes
Template argument size: 0/2097152 bytes
Highest expansion depth: 2/40
Expensive parser function count: 0/100
--&gt;

&amp;lt;!-- Saved in parser cache with key quakewiki:pcache:idhash:1-0!*!*!*!*!*!* and timestamp 20131228030306 --&gt;
&amp;lt;/div&gt;&amp;lt;div class=&quot;printfooter&quot;&gt;
Retrieved from &quot;&amp;lt;a href=&quot;http://quakewiki.org/w/index.php?title=Main_Page&amp;amp;amp;oldid=3003&quot;&gt;http://quakewiki.org/w/index.php?title=Main_Page&amp;amp;amp;oldid=3003&amp;lt;/a&gt;&quot;&amp;lt;/div&gt;
&amp;lt;div id='catlinks' class='catlinks catlinks-allhidden'&gt;&amp;lt;/div&gt;						&amp;lt;!-- end content --&gt;
												&amp;lt;div class=&quot;visualClear&quot;&gt;&amp;lt;/div&gt;
					&amp;lt;/div&gt;

				&amp;lt;/article&gt;
				&amp;lt;!-- /ARTICLE --&gt;
&lt;/nowiki&gt;</text>
      <sha1>c3ovht5lthzw9k04aku875ug1n12rrl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:Map based hacks</title>
    <ns>1</ns>
    <id>827</id>
    <revision>
      <id>2426</id>
      <timestamp>2013-03-28T16:46:12Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>Created page with &quot;Should this page be purely about tricks that involve using info_notnull and calling various functions in the qc for different effects? Or should we also include other tricks s...&quot;</comment>
      <text xml:space="preserve" bytes="332">Should this page be purely about tricks that involve using info_notnull and calling various functions in the qc for different effects? Or should we also include other tricks such as getting something to float in the air by using a temporary platform that is killed at startup? There are probably quite a lot of tricks of both types.</text>
      <sha1>hu40b54tfvuhpp9s9lpdyih5vjvmp97</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:Mapping tools</title>
    <ns>1</ns>
    <id>734</id>
    <revision>
      <id>2085</id>
      <timestamp>2013-03-25T15:38:15Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>adding a todo</comment>
      <text xml:space="preserve" bytes="149">{{todo|user=[[Hectate]]|todo=The list of editors would look and function better as a table that detailed things like OS, engine compatibility, etc.}}</text>
      <sha1>ihd6haeig8i6fg7fgskuuglxn3obmw6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2222</id>
      <parentid>2085</parentid>
      <timestamp>2013-03-26T13:06:56Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>Blanked the page</comment>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:Monsters</title>
    <ns>1</ns>
    <id>470</id>
    <revision>
      <id>922</id>
      <timestamp>2008-09-01T15:18:33Z</timestamp>
      <contributor>
        <ip>70.161.252.148</ip>
      </contributor>
      <comment>Just a reminder....</comment>
      <text xml:space="preserve" bytes="47">You forgot the mummy for DOE monster list. -Pat</text>
      <sha1>b7mp8gsheyjryqi9tg4iv7v1yxicf99</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:Multiplayer Maps</title>
    <ns>1</ns>
    <id>538</id>
    <redirect title="Talk:Multiplayer maps" />
    <revision>
      <id>1290</id>
      <timestamp>2009-09-27T08:19:15Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <comment>[[Talk:Multiplayer Maps]] moved to [[Talk:Multiplayer maps]]</comment>
      <text xml:space="preserve" bytes="35">#REDIRECT [[Talk:Multiplayer maps]]</text>
      <sha1>ith6f6qea84sb8cdse7h5idwr64d5u1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:Multiplayer maps</title>
    <ns>1</ns>
    <id>533</id>
    <revision>
      <id>1277</id>
      <timestamp>2009-09-27T03:02:53Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>New page: A few notes, I am not 100% on the credit of the id1 dm maps. I found some lists online stating Willits was responsible for dm1, but my memory seems to say otherwise. dm1 as it stands is ce...</comment>
      <text xml:space="preserve" bytes="621">A few notes, I am not 100% on the credit of the id1 dm maps. I found some lists online stating Willits was responsible for dm1, but my memory seems to say otherwise. dm1 as it stands is certainly more in keeping with Petersen's style, but I am not holding hard to that perspective. I do not know who created the DoE ctf map, but I did take the liberty of pointing the link to ctf1 (rogue) instead of just ctf1, as I suspect that could be reasonably reserved for McKinley's Bases in Threewave CTF, a vastly more popular map in Quake than Division of Change is. --[[User:Scar3crow|Scar3crow]] 22:02, 26 September 2009 (CDT)</text>
      <sha1>azbs6iw4xheuziiyj7l1vrn5xpngy9x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1282</id>
      <parentid>1277</parentid>
      <timestamp>2009-09-27T08:16:23Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="735">A few notes, I am not 100% on the credit of the id1 dm maps. I found some lists online stating Willits was responsible for dm1, but my memory seems to say otherwise. dm1 as it stands is certainly more in keeping with Petersen's style, but I am not holding hard to that perspective. I do not know who created the DoE ctf map, but I did take the liberty of pointing the link to ctf1 (rogue) instead of just ctf1, as I suspect that could be reasonably reserved for McKinley's Bases in Threewave CTF, a vastly more popular map in Quake than Division of Change is. --[[User:Scar3crow|Scar3crow]] 22:02, 26 September 2009 (CDT)
:dm1 was done by Tim Willits according to Quake's manual.txt. --[[User:Sajt|Sajt]] 03:16, 27 September 2009 (CDT)</text>
      <sha1>ebnk89gj8uz1zdq86v5y4pbdbhk09g6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1289</id>
      <parentid>1282</parentid>
      <timestamp>2009-09-27T08:19:15Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>[[Talk:Multiplayer Maps]] moved to [[Talk:Multiplayer maps]]</comment>
      <text xml:space="preserve" bytes="735">A few notes, I am not 100% on the credit of the id1 dm maps. I found some lists online stating Willits was responsible for dm1, but my memory seems to say otherwise. dm1 as it stands is certainly more in keeping with Petersen's style, but I am not holding hard to that perspective. I do not know who created the DoE ctf map, but I did take the liberty of pointing the link to ctf1 (rogue) instead of just ctf1, as I suspect that could be reasonably reserved for McKinley's Bases in Threewave CTF, a vastly more popular map in Quake than Division of Change is. --[[User:Scar3crow|Scar3crow]] 22:02, 26 September 2009 (CDT)
:dm1 was done by Tim Willits according to Quake's manual.txt. --[[User:Sajt|Sajt]] 03:16, 27 September 2009 (CDT)</text>
      <sha1>ebnk89gj8uz1zdq86v5y4pbdbhk09g6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:Pak0.pak</title>
    <ns>1</ns>
    <id>771</id>
    <revision>
      <id>2243</id>
      <timestamp>2013-03-26T14:12:31Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>Created page with &quot;== PAK content list(s) == Nice job on the list generation, Spirit! Question for you though - what do you think about putting multiple lists like this on the page and making th...&quot;</comment>
      <text xml:space="preserve" bytes="662">== PAK content list(s) ==
Nice job on the list generation, Spirit! Question for you though - what do you think about putting multiple lists like this on the page and making the tables for them collapsed by default? Since you noted that different releases have different contents it could be a valuable resource but collapsing the tables by default would make it easier to view the individual one desired by a user. Alternatively, we could do that as a separate page as &quot;List of Contents of Pak0.pak&quot; or something and make this a more general page about the file itself. Opinions? --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 14:12, 26 March 2013 (UTC)</text>
      <sha1>fq3l9i7nxh2lhanbdejan3tlrrhjo31</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2252</id>
      <parentid>2243</parentid>
      <timestamp>2013-03-26T14:44:10Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>/* PAK content list(s) */</comment>
      <text xml:space="preserve" bytes="835">== PAK content list(s) ==
Nice job on the list generation, Spirit! Question for you though - what do you think about putting multiple lists like this on the page and making the tables for them collapsed by default? Since you noted that different releases have different contents it could be a valuable resource but collapsing the tables by default would make it easier to view the individual one desired by a user. Alternatively, we could do that as a separate page as &quot;List of Contents of Pak0.pak&quot; or something and make this a more general page about the file itself. Opinions? --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 14:12, 26 March 2013 (UTC)
: Sounds great! I did not know about collapsible things, that sounds very useful in this case. [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 14:44, 26 March 2013 (UTC)</text>
      <sha1>pplqsbug7kypgbfyg0zxcblf6q28ufs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2363</id>
      <parentid>2252</parentid>
      <timestamp>2013-03-27T21:01:03Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>Collapsible Tables not working...?</comment>
      <text xml:space="preserve" bytes="1287">== PAK content list(s) ==
Nice job on the list generation, Spirit! Question for you though - what do you think about putting multiple lists like this on the page and making the tables for them collapsed by default? Since you noted that different releases have different contents it could be a valuable resource but collapsing the tables by default would make it easier to view the individual one desired by a user. Alternatively, we could do that as a separate page as &quot;List of Contents of Pak0.pak&quot; or something and make this a more general page about the file itself. Opinions? --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 14:12, 26 March 2013 (UTC)
: Sounds great! I did not know about collapsible things, that sounds very useful in this case. [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 14:44, 26 March 2013 (UTC)
:: I saw that you'd commented that you couldn't get the collapsible tables to work. I wonder if it has something to do with some of the things mentioned at the following two links; [http://en.wikipedia.org/wiki/Help_talk:Collapsing#Dependency_with_collapsible_tables] and [http://en.wikipedia.org/wiki/Help_talk:Collapsing#MediaWiki:Common.js_and_MediaWiki:Common.css] --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 21:01, 27 March 2013 (UTC)</text>
      <sha1>d80pjpa72q27o9jdcnykhr8l7jfxbvx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:QSB</title>
    <ns>1</ns>
    <id>596</id>
    <revision>
      <id>1615</id>
      <timestamp>2010-07-19T05:05:32Z</timestamp>
      <contributor>
        <ip>89.27.228.255</ip>
      </contributor>
      <comment>New page: MAX_CHANNELS of 512 is too low, maps with a lot of custom abient sounds break this - raise to 1024 - gb</comment>
      <text xml:space="preserve" bytes="103">MAX_CHANNELS of 512 is too low, maps with a lot of custom abient sounds break this - raise to 1024 - gb</text>
      <sha1>5lm3qv3eye0yfoo2eccgmrex195k16c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1616</id>
      <parentid>1615</parentid>
      <timestamp>2010-07-19T05:11:52Z</timestamp>
      <contributor>
        <ip>89.27.228.255</ip>
      </contributor>
      <text xml:space="preserve" bytes="238">MAX_CHANNELS of 512 is too low, maps with a lot of custom abient sounds break this - raise to 1024 - gb

Also, support for the Quake 2 model format seems totally superfluous - who, or which realistic project, needs that if I may ask? - gb</text>
      <sha1>nhzgvrdjb6poy6mx030w0awlitprcdw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:Quake Expo</title>
    <ns>1</ns>
    <id>462</id>
    <revision>
      <id>873</id>
      <timestamp>2008-05-27T03:15:06Z</timestamp>
      <contributor>
        <username>Jehar</username>
        <id>12</id>
      </contributor>
      <comment>New page: I'm not going to publically broadcast this yet, as it's still extremely infantile. However, once it's robust enough to be useful, expect near spam-quantity flinging of this page near and f...</comment>
      <text xml:space="preserve" bytes="191">I'm not going to publically broadcast this yet, as it's still extremely infantile. However, once it's robust enough to be useful, expect near spam-quantity flinging of this page near and far.</text>
      <sha1>tbdkumdibvau1lvcfs5s44oqh4q4jyq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>874</id>
      <parentid>873</parentid>
      <timestamp>2008-05-27T03:15:20Z</timestamp>
      <contributor>
        <username>Jehar</username>
        <id>12</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="237">I'm not going to publically broadcast this yet, as it's still extremely infantile. However, once it's robust enough to be useful, expect near spam-quantity flinging of this page near and far. [[User:Jehar|Jehar]] 22:15, 26 May 2008 (CDT)</text>
      <sha1>cawxs5zfbm7zrj84hebzpb7oi79f66f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:Quake QuakeC source</title>
    <ns>1</ns>
    <id>1075</id>
    <revision>
      <id>3240</id>
      <timestamp>2014-06-19T17:34:24Z</timestamp>
      <contributor>
        <ip>192.168.4.107</ip>
      </contributor>
      <comment>Created page with &quot;The front page says 1.01, but the actual code is 1.06. There is a difference between those, in that the 1.01 is GPL and 1.06 is not. The license should be mentioned.  GB&quot;</comment>
      <text xml:space="preserve" bytes="169">The front page says 1.01, but the actual code is 1.06. There is a difference between those, in that the 1.01 is GPL and 1.06 is not. The license should be mentioned.

GB</text>
      <sha1>rwuq0i47iuv142fxpi9p0jlgimydgof</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3241</id>
      <parentid>3240</parentid>
      <timestamp>2014-06-19T17:41:31Z</timestamp>
      <contributor>
        <ip>192.168.4.107</ip>
      </contributor>
      <text xml:space="preserve" bytes="311">The front page says 1.01, but the actual code is 1.06. There is a difference between those, in that the 1.01 is GPL and 1.06 is not. The license should be mentioned.

GB

BTW, the list of QC 1.01 files is incomplete, the correct list is here https://github.com/id-Software/Quake-Tools/tree/master/qcc/v101qc

GB</text>
      <sha1>2h5hmyz3hd8ikiiz2kirfeelee2wraa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:Quake palette</title>
    <ns>1</ns>
    <id>951</id>
    <revision>
      <id>2687</id>
      <timestamp>2013-03-30T11:26:42Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>endianness</comment>
      <text xml:space="preserve" bytes="317">== Endianness? ==
The first bytes in my copy are &quot;0000 0f00 0f0f&quot;. These are index 0: 00 00 00, index 1: 0f 0f 0f. So I guess it is in &quot;16 bit per word&quot; and &quot;little endian&quot;? Could someone with a clue check and add that to the page? Thanks! [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 11:26, 30 March 2013 (UTC)</text>
      <sha1>r54h9tntzd5m5zyidp46oaj0x4u9xb1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:Quake story</title>
    <ns>1</ns>
    <id>1067</id>
    <revision>
      <id>3089</id>
      <timestamp>2013-12-22T20:00:19Z</timestamp>
      <contributor>
        <ip>120.37.206.165</ip>
      </contributor>
      <comment>Online fashion brand, genuine low cost value, high excellent assure, ideal service a great deal more material, please visit</comment>
      <text xml:space="preserve" bytes="1900">Sustaining the status quo, inaction, irrespective of the volatility of your king of all the things below control, displaying impressive grace domineering life. Like &quot;name shield&quot; brand guys embodied the identical calm unruly style with exquisite workmanship, personalized style mens beautiful interpretation of urban results one of a kind charm. Khaki pants are alot more standard style, simple and elegant, cotton fabric breathable, soft and comfortable. If a black coat using a vibrant, cool black mens determination to bring out the right challenging demeanor. Featured mink collar, more noble excellent, walk inside the streets, and quickly develop into a special landscape. &quot;Name Shield&quot; brand guys with the most straight forward technique to present male style. England plaid knit cardigan, showing the all-natural sunlight handsome and totally free and effortless feeling. Sleeves and lower confining the use of the most widely used dark gray, exactly the same colour with a scarf, warm lightly although adding an easy-going atmosphere, persons have a lot more affinity. Dark brown corduroy trousers, excellent legs modified form of repair. Lace pointed footwear style character, out inside the workplace, the distinctive qualities to become able to attract lots of females inside the workplace. &quot;Name Shield&quot; brand men easily demonstrate the success of urban males Thatcher. Conventional suits exquisite workmanship and fabrics, dark blue hue to black, the way more fashionable, better in a position to bring out the mens domineering style. &quot;Name Shield&quot; brand men all utilizing the finest fabrics, money approach, in the well-known Italian designer tailoring, and each highlight the exquisite taste, the ideal man to show the results of your king of your city. Shield brand name mens Merchants Web site: http://vip.china-ef.com/web/zhaojiamd/

 
 
http://www.tn61.com/plus/view.php?aid=91078</text>
      <sha1>rcj4ll4nzluem5lkh7c1xtwh0jjeqt0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:QuakeC</title>
    <ns>1</ns>
    <id>601</id>
    <revision>
      <id>1676</id>
      <timestamp>2011-05-30T20:32:40Z</timestamp>
      <contributor>
        <ip>109.230.251.121</ip>
      </contributor>
      <comment>get facebook fans  t 1 f</comment>
      <text xml:space="preserve" bytes="907">buy facebook fans
get facebook fans
buy facebook likes
how to get facebook likes
get facebook likes
  
http://galwayfilipinos.com/forum/index.php?action=profile;u=396283
http://forums.proprizes.com/index.php?action=profile;u=6539
http://humanack.com/forum/index.php?action=profile;u=5830
http://forums.vend123.com/member.php?u=4390
http://amlspoa.org/amlspoa-forum/index.php?action=profile;u=131625
  
  
buy facebook likes  &lt;a href=&quot;http://j1studios.com/forum/index.php?action=profile;u=96865&quot;&gt;  
buy facebook fans&lt;/a&gt; get facebook likes get facebook fans   
i have kaspersky internet security 2010 and i was thinking about getting kaspersky antivirus 2010.will it make my computer slow or do i just need kaspersky internet security 2010.   
_________________  
buy facebook likes &lt;a href=http://idevspot.com/forum/index.php?action=profile;u=15254&gt;get facebook fans&lt;/a&gt; get facebook likes buy facebook fans</text>
      <sha1>ikqcc9piftv2bvfzgams7602o0kse3q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:QuakeC basics</title>
    <ns>1</ns>
    <id>561</id>
    <revision>
      <id>1458</id>
      <timestamp>2009-11-23T07:22:42Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>New page: note: this seems like overkill to have so many pages with each page giving a single paragraph of information.  Perhaps we should consolidate a bit, unless we expect more information to be ...</comment>
      <text xml:space="preserve" bytes="267">note: this seems like overkill to have so many pages with each page giving a single paragraph of information.  Perhaps we should consolidate a bit, unless we expect more information to be added to each topic. [[User:Metlslime|Metlslime]] 01:22, 23 November 2009 (CST)</text>
      <sha1>1haw4brkottr3nptaqvipuh3p22zt6h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:Shambler</title>
    <ns>1</ns>
    <id>1053</id>
    <revision>
      <id>3020</id>
      <timestamp>2013-11-06T23:45:20Z</timestamp>
      <contributor>
        <ip>203.27.24.88</ip>
      </contributor>
      <comment>Created page with &quot;A awsome monster you can get a pet shamber on scourge of Aragon expansion pack for quake and you can be the shambler on a mod for quake.&quot;</comment>
      <text xml:space="preserve" bytes="136">A awsome monster you can get a pet shamber on scourge of Aragon expansion pack for quake and you can be the shambler on a mod for quake.</text>
      <sha1>qm7p89pkhdy2bhqk47vhoit9au1231j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:Test:Vore</title>
    <ns>1</ns>
    <id>1003</id>
    <revision>
      <id>2803</id>
      <timestamp>2013-04-07T13:23:59Z</timestamp>
      <contributor>
        <ip>178.70.213.83</ip>
      </contributor>
      <comment>Created page with &quot;its actually T_RadiusDamage(40), so its effectively below 40 suaully around 32&quot;</comment>
      <text xml:space="preserve" bytes="78">its actually T_RadiusDamage(40), so its effectively below 40 suaully around 32</text>
      <sha1>nzvqnnzrezyjhtuiudhqe7a3101iz0v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2811</id>
      <parentid>2803</parentid>
      <timestamp>2013-04-07T16:45:14Z</timestamp>
      <contributor>
        <ip>178.70.213.83</ip>
      </contributor>
      <text xml:space="preserve" bytes="78">its actually T_RadiusDamage(40), so its effectively below 40 usually around 32</text>
      <sha1>0worzq9jx5hqzklr3c5hateis5pei8z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:Vore</title>
    <ns>1</ns>
    <id>1047</id>
    <revision>
      <id>3009</id>
      <timestamp>2013-09-18T12:53:59Z</timestamp>
      <contributor>
        <ip>216.244.65.147</ip>
      </contributor>
      <comment>A few on and secure the air jordans 13 method</comment>
      <text xml:space="preserve" bytes="793">Jordan Brand on trade October listing has been exposed. Four kinds of unclouded color Jordan SC - 2 is a highlight of October, iterative endangerment ahead of Jordan Trunner LX 11 is also training series, in the cold-hearted autumn is that unified at one's desire be your bag? You should dream twice! Simple angry more like lines on the boundary of the shoe Draught Jordan Retro III is quite good.
After a party of versions and name AJ series when one pleases be a perfect dusky processing such a style, is a serious work. AJ series has been make known aside the practicable sex of the sneakers, to establish a in holy matrimony of tennis shoes before the standards of the ingenious arts and crafts became the latest code of conduct. Kicks Lab already announced the throw of the shoes details.</text>
      <sha1>94x7lcacjt6lbc3qaylzrkh9eel0y4k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Talk:func door secret</title>
    <ns>1</ns>
    <id>1025</id>
    <revision>
      <id>2915</id>
      <timestamp>2013-04-10T23:10:10Z</timestamp>
      <contributor>
        <username>FifthElephant</username>
        <id>49</id>
      </contributor>
      <comment>Created page with &quot;I feel like the information from http://www.raven-games.com/vintage/h2entities/door_sec.htm needs to be harvested, I'm not exactly sure of the formatting so I haven't put it u...&quot;</comment>
      <text xml:space="preserve" bytes="1063">I feel like the information from http://www.raven-games.com/vintage/h2entities/door_sec.htm needs to be harvested, I'm not exactly sure of the formatting so I haven't put it up myself.
Particularly useful are the t_width and t_length keys which enable you to control the distance the brush moves per each move.

Flags:
&quot;open_once&quot;
 stays open when triggered
&quot;1st_left&quot;
 1st move is left of arrow
&quot;1st_down&quot;
 1st move is down from arrow
&quot;no_shoot&quot;
 only opened by trigger
&quot;always_shoot&quot;
 even if targeted, keep shootable

Keys:
&quot;target&quot;
 all matching targets will be used
&quot;killtarget&quot;
 all matching entities will be 
 removed
&quot;wait&quot;
 # of seconds before coming back
&quot;delay&quot;
 waits # seconds before firing
 its targets
&quot;t_width&quot;
 override Width to move back
 (or height if going down)
&quot;t_length&quot;
 override Length to move sideways
&quot;dmg&quot;
 damage to inflict when blocked
 (2 default)
&quot;message&quot;
 prints message when touched

If a secret door has a targetname,
it will only be opened by it's button
or trigger, not by damage.

&quot;sounds&quot;
 1 = medieval
 2 = metal
 3 = base</text>
      <sha1>epmtnn3p12z5neih28y4eraghrlaxv5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2916</id>
      <parentid>2915</parentid>
      <timestamp>2013-04-12T22:01:03Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="2267">I feel like the information from http://www.raven-games.com/vintage/h2entities/door_sec.htm needs to be harvested, I'm not exactly sure of the formatting so I haven't put it up myself.
Particularly useful are the t_width and t_length keys which enable you to control the distance the brush moves per each move.

Flags:
&quot;open_once&quot;
 stays open when triggered
&quot;1st_left&quot;
 1st move is left of arrow
&quot;1st_down&quot;
 1st move is down from arrow
&quot;no_shoot&quot;
 only opened by trigger
&quot;always_shoot&quot;
 even if targeted, keep shootable

Keys:
&quot;target&quot;
 all matching targets will be used
&quot;killtarget&quot;
 all matching entities will be 
 removed
&quot;wait&quot;
 # of seconds before coming back
&quot;delay&quot;
 waits # seconds before firing
 its targets
&quot;t_width&quot;
 override Width to move back
 (or height if going down)
&quot;t_length&quot;
 override Length to move sideways
&quot;dmg&quot;
 damage to inflict when blocked
 (2 default)
&quot;message&quot;
 prints message when touched

If a secret door has a targetname,
it will only be opened by it's button
or trigger, not by damage.

&quot;sounds&quot;
 1 = medieval
 2 = metal
 3 = base
: I think, in this case, it comes down to relevance and scope. I can't speak for Spirit's intentions (please let us know) but as the Quake Wiki I personally feel like the goal is to keep the wiki relevant to Quake 1, it's engines, mods, and features. If the wiki were to expand to include Hexen 2, we risk polluting pages with non-Quake 1 information which makes it less valuable and more difficult to use for finding Quake 1-specific information. Granted, there is some degree of relevance for games created with the Quake engine (of which there are many) but that also significantly expands the scope. Personally, if additional games such as Hexen 2 were to be added to the wiki, it would better suit the organizational needs to categorize everything into different namespaces. For example, article Q1:func_door would be different from H2:func_door (or the H2 article could include the Q1 article inline with additional information given also) to prevent the insertion of information not relevant to a particular game. But I think, personally, that expanding beyond Q1 is not in the current best interests of the wiki. --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 22:01, 12 April 2013 (UTC)</text>
      <sha1>0640x721vsvc34hzdmh7zjrwlug5nno</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2918</id>
      <parentid>2916</parentid>
      <timestamp>2013-04-13T13:19:39Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <text xml:space="preserve" bytes="2643">I feel like the information from http://www.raven-games.com/vintage/h2entities/door_sec.htm needs to be harvested, I'm not exactly sure of the formatting so I haven't put it up myself.
Particularly useful are the t_width and t_length keys which enable you to control the distance the brush moves per each move.

Flags:
&quot;open_once&quot;
 stays open when triggered
&quot;1st_left&quot;
 1st move is left of arrow
&quot;1st_down&quot;
 1st move is down from arrow
&quot;no_shoot&quot;
 only opened by trigger
&quot;always_shoot&quot;
 even if targeted, keep shootable

Keys:
&quot;target&quot;
 all matching targets will be used
&quot;killtarget&quot;
 all matching entities will be 
 removed
&quot;wait&quot;
 # of seconds before coming back
&quot;delay&quot;
 waits # seconds before firing
 its targets
&quot;t_width&quot;
 override Width to move back
 (or height if going down)
&quot;t_length&quot;
 override Length to move sideways
&quot;dmg&quot;
 damage to inflict when blocked
 (2 default)
&quot;message&quot;
 prints message when touched

If a secret door has a targetname,
it will only be opened by it's button
or trigger, not by damage.

&quot;sounds&quot;
 1 = medieval
 2 = metal
 3 = base
: I think, in this case, it comes down to relevance and scope. I can't speak for Spirit's intentions (please let us know) but as the Quake Wiki I personally feel like the goal is to keep the wiki relevant to Quake 1, it's engines, mods, and features. If the wiki were to expand to include Hexen 2, we risk polluting pages with non-Quake 1 information which makes it less valuable and more difficult to use for finding Quake 1-specific information. Granted, there is some degree of relevance for games created with the Quake engine (of which there are many) but that also significantly expands the scope. Personally, if additional games such as Hexen 2 were to be added to the wiki, it would better suit the organizational needs to categorize everything into different namespaces. For example, article Q1:func_door would be different from H2:func_door (or the H2 article could include the Q1 article inline with additional information given also) to prevent the insertion of information not relevant to a particular game. But I think, personally, that expanding beyond Q1 is not in the current best interests of the wiki. --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 22:01, 12 April 2013 (UTC)

This is not about adding Hexen 2 entities - these particular bits of information are also relevant to Quake and they just happen to be on a H2 page (same entity). Having said that, we don't need that page for reference since it's all in the .def files as well, and we'd want to write all the stuff ourselves anyway once we've settled on a proper template for brush entities.</text>
      <sha1>8osebrhguzkuo9lad2l7ucdbgocdzgq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Teamplay</title>
    <ns>0</ns>
    <id>932</id>
    <redirect title="teamplay" />
    <revision>
      <id>2631</id>
      <timestamp>2013-03-29T14:22:22Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Teamplay]] to [[teamplay]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="22">#REDIRECT [[teamplay]]</text>
      <sha1>s34lgbo93680k1q8839889dgya0e8hq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Tei</title>
    <ns>0</ns>
    <id>362</id>
    <revision>
      <id>593</id>
      <timestamp>2008-04-11T02:45:26Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: A very talented creator of all things quake coded! :-D ..He has created his own Quake engine along with many creative mods...</comment>
      <text xml:space="preserve" bytes="125">A very talented creator of all things quake coded! :-D ..He has created his own Quake engine along with many creative mods...</text>
      <sha1>576g0e1zzlercqdgfv67crot6tlzzst</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Telefrag</title>
    <ns>0</ns>
    <id>430</id>
    <revision>
      <id>743</id>
      <timestamp>2008-05-08T13:56:20Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: When a player teleports within another entity, like a creature or another player.  Doing so immediately [[gib]]s that entity.  This is the only way to dispatch [[Shub-Nizzarath.]]</comment>
      <text xml:space="preserve" bytes="179">When a player teleports within another entity, like a creature or another player.

Doing so immediately [[gib]]s that entity.

This is the only way to dispatch [[Shub-Nizzarath.]]</text>
      <sha1>8nrb7bx0w95xobazquoogb6lbuang78</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>744</id>
      <parentid>743</parentid>
      <timestamp>2008-05-08T13:56:57Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="217">When a player teleports within another entity, like a creature or another player.

Doing so immediately [[gib]]s that entity.

This is the only way to dispatch the final boss of the original Quake: [[Shub-Niggurath]].</text>
      <sha1>m7fh4lpfymckept9s93hlxa9kqouk0w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>773</id>
      <parentid>744</parentid>
      <timestamp>2008-05-08T19:08:46Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <text xml:space="preserve" bytes="328">When a player teleports within another entity, like a creature or another player.

Doing so immediately [[gib]]s that entity.

This is the only way to dispatch the final boss of the original Quake: [[Shub-Niggurath]].

If you are using a [[Pentagram of Protection]], the player who attempted to telefrag you will be telefragged.</text>
      <sha1>9zt5uozu7qf8n78n8fkmjwhx3reqx1i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2961</id>
      <parentid>773</parentid>
      <timestamp>2013-05-05T16:53:46Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <text xml:space="preserve" bytes="2059">In Quake, a special kind of ''frag'' (or kill) may occur when a [[player]] or [[monster]] entity [[teleport]]s while its teleport destination is being occupied by another creature or player. Depending on several circumstances, such a collision usually results in a [[gib|very messy death]] for one or both its participants.

==Characteristics==
Normally, For player-player and monster-monster telefrags, the initial occupant of the destination spot is killed. On the other hand, monsters are explicitly forbidden to telefrag the player and will explode themselves instead. Players with some knowledge of teleport setups in a map can exploit this technique; an example would be the final room of [[e1m3]].

The [[Pentagram of Protection]] artifact also protects its wearer from telefrags and kills any offenders. However, there is no special handling for the case when the teleporting player also has the pentagram, resulting in players being stuck together and unable to move. This had been fixed in [[QuakeWorld]] to result in a mutual telefrag.

Sometimes, some telefragging may occur during &quot;multiple monsters teleporting in&quot; ambushes (e.g. because of [[trigger]]s firing too early or improperly constructed trigger [[relay]]s). This can be seen in some stock maps, a quite graphic example is the blue key room on [[e4m8]].

Telefrag is the only way to dispatch the final boss of the original Quake: [[Shub-Niggurath]].

==Technical==
Telefragging is implemented via the [[QuakeC]], in [[triggers.qc]]. Each teleporting entity makes a call for [[spawn_tdeath]] upon successful teleporting. This spawns a special trigger which exists for 0.2 seconds and then removes itself. While it is active, any entity that happens to touch it (except for its [[owner]], which is set to the teleporting entity) wil be damaged for a hefty 50000 (''[[T_Damage]] (other, self, self, 50000)''), thus resulting in a [[gib]] death (and an appropriate [[ClientObituary|obituary]] message for the telefragged player) for pretty much anyone in the game except [[Shub-Niggurath]].</text>
      <sha1>4g4ek8kf4na385y8s6cs82j1h5jpu3f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Telejano</title>
    <ns>0</ns>
    <id>149</id>
    <revision>
      <id>232</id>
      <timestamp>2007-11-02T20:06:24Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{Infobox Engine |name=Telejano |author=[[Tei]] |based-on=[[TomazQuake]] |first-release=? |newest-release=[http://telejano.berlios.de/ v8.01] |website=[http://telejano.berlios.de/ here] }}</comment>
      <text xml:space="preserve" bytes="188">{{Infobox Engine
|name=Telejano
|author=[[Tei]]
|based-on=[[TomazQuake]]
|first-release=?
|newest-release=[http://telejano.berlios.de/ v8.01]
|website=[http://telejano.berlios.de/ here]
}}</text>
      <sha1>p5m2oc81prqfnl7ycygo8dgxkyru8x5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>236</id>
      <parentid>232</parentid>
      <timestamp>2007-11-02T20:08:55Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="201">{{Infobox Engine
|name=Telejano
|author=[[Tei]]
|based-on=[[TomazQuake]]
|first-release=?
|newest-release=[http://telejano.berlios.de/ v8.01]
|website=[http://telejano.berlios.de/ here]
}}

{{Engines}}</text>
      <sha1>qmngek09p8d3z0hycjz9war4hz5m26n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Temp1</title>
    <ns>0</ns>
    <id>933</id>
    <redirect title="temp1" />
    <revision>
      <id>2633</id>
      <timestamp>2013-03-29T14:22:22Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Temp1]] to [[temp1]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="19">#REDIRECT [[temp1]]</text>
      <sha1>csfux82w6pt2lfq382nql0d189d6g61</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template talk:Infobox singleplayer map</title>
    <ns>11</ns>
    <id>770</id>
    <revision>
      <id>2209</id>
      <timestamp>2013-03-26T10:50:38Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Created page with &quot;I too noticed some margin (on the outside around the table) is necessary as eg on [[e1m1]] the text gets too close to it. I think we should do that globally for all tables. I'...&quot;</comment>
      <text xml:space="preserve" bytes="373">I too noticed some margin (on the outside around the table) is necessary as eg on [[e1m1]] the text gets too close to it. I think we should do that globally for all tables. I'll forward it to Starbuck. You adding padding but meant margin, right? I always have to google which is which myself. :) [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 10:50, 26 March 2013 (UTC)</text>
      <sha1>i8v9imqfeajtf0xjsyuw50k2exo7y9e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2212</id>
      <parentid>2209</parentid>
      <timestamp>2013-03-26T12:00:48Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>/* Will this leave a message in the right place? */ new section</comment>
      <text xml:space="preserve" bytes="872">I too noticed some margin (on the outside around the table) is necessary as eg on [[e1m1]] the text gets too close to it. I think we should do that globally for all tables. I'll forward it to Starbuck. You adding padding but meant margin, right? I always have to google which is which myself. :) [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 10:50, 26 March 2013 (UTC)

== Will this leave a message in the right place? ==

I guess I did mean margin ;) I wanted to add padding around the outside. I also want to clean up the table and avoid using the standard wikitable class, since we should make our own. I hope starbuck comes up with some nice clean table layouts for map/thing information boxes and also a good layout for entity key/value tables. I can try again later, but it looks like SB is making good progress with the design, so I'll leave it to him for now.</text>
      <sha1>a4q3nvhwcjnlu0vgs8qfmaf6ofq3dl7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2239</id>
      <parentid>2212</parentid>
      <timestamp>2013-03-26T13:45:43Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <text xml:space="preserve" bytes="1043">I too noticed some margin (on the outside around the table) is necessary as eg on [[e1m1]] the text gets too close to it. I think we should do that globally for all tables. I'll forward it to Starbuck. You adding padding but meant margin, right? I always have to google which is which myself. :) [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 10:50, 26 March 2013 (UTC)

:I guess I did mean margin ;) I wanted to add padding around the outside. I also want to clean up the table and avoid using the standard wikitable class, since we should make our own. I hope starbuck comes up with some nice clean table layouts for map/thing information boxes and also a good layout for entity key/value tables. I can try again later, but it looks like SB is making good progress with the design, so I'll leave it to him for now. (than)

:: I am not sure if Starbuck will want to style tables. You can use colons for indentation on discussion pages. And four tildes to sign: [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 13:45, 26 March 2013 (UTC)</text>
      <sha1>rsm1y54lxsr8wg4ud630ohokqlju1gm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Console</title>
    <ns>10</ns>
    <id>75</id>
    <revision>
      <id>123</id>
      <timestamp>2007-10-30T21:56:43Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {| style=&quot;margin:2em auto; clear:both;text-align:center;&quot; align=center class=&quot;toccolours&quot; |align=center bgcolor=#6699CC|'''&lt;font color=&quot;white&quot;&gt;[[Console]]&lt;/font&gt;''' |- |style=&quot;font-size:90...</comment>
      <text xml:space="preserve" bytes="258">{| style=&quot;margin:2em auto; clear:both;text-align:center;&quot; align=center class=&quot;toccolours&quot;
|align=center bgcolor=#6699CC|'''&lt;font color=&quot;white&quot;&gt;[[Console]]&lt;/font&gt;'''
|-
|style=&quot;font-size:90%;&quot;|[[List of console variables]] | [[List of console commands]]
|-
|}</text>
      <sha1>ep701xzq9d5fi4me3dl43t8by98mrj4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Console commands</title>
    <ns>10</ns>
    <id>62</id>
    <revision>
      <id>101</id>
      <timestamp>2007-10-30T19:58:23Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: &lt;includeonly&gt;[[Category:Console commands]]&lt;/includeonly&gt; &lt;noinclude&gt;''Note: This template will categorize articles that include it into [[:Category:Console commands]].''&lt;/noinclude&gt;</comment>
      <text xml:space="preserve" bytes="181">&lt;includeonly&gt;[[Category:Console commands]]&lt;/includeonly&gt;
&lt;noinclude&gt;''Note: This template will categorize articles that include it into [[:Category:Console commands]].''&lt;/noinclude&gt;</text>
      <sha1>fbjvyvva0pd6hksnqvyxxl9d64qidkp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Console variables</title>
    <ns>10</ns>
    <id>58</id>
    <revision>
      <id>91</id>
      <timestamp>2007-10-30T19:56:05Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: &lt;includeonly&gt;[[:Category:Console variables]]&lt;/includeonly&gt; &lt;noinclude&gt;''Note: This template will categorize articles that include it into [[:Category:Console variables]].''&lt;/noinclude&gt;</comment>
      <text xml:space="preserve" bytes="184">&lt;includeonly&gt;[[:Category:Console variables]]&lt;/includeonly&gt;
&lt;noinclude&gt;''Note: This template will categorize articles that include it into [[:Category:Console variables]].''&lt;/noinclude&gt;</text>
      <sha1>ili60fj42s6guen8y6oc54kggslzlyz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>93</id>
      <parentid>91</parentid>
      <timestamp>2007-10-30T19:56:33Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="183">&lt;includeonly&gt;[[Category:Console variables]]&lt;/includeonly&gt;
&lt;noinclude&gt;''Note: This template will categorize articles that include it into [[:Category:Console variables]].''&lt;/noinclude&gt;</text>
      <sha1>pq0wqneorzhal785bepwkz0pfgl9p1p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>122</id>
      <parentid>93</parentid>
      <timestamp>2007-10-30T21:56:14Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="195">{{Console}}
&lt;includeonly&gt;[[Category:Console variables]]&lt;/includeonly&gt;
&lt;noinclude&gt;''Note: This template will categorize articles that include it into [[:Category:Console variables]].''&lt;/noinclude&gt;</text>
      <sha1>rtozjrgbeh5mpblhqtv4wm7u2i4u504</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>124</id>
      <parentid>122</parentid>
      <timestamp>2007-10-30T21:57:46Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="193">{{Console}}&lt;includeonly&gt;[[Category:Console variables]]&lt;/includeonly&gt;&lt;noinclude&gt;''Note: This template will categorize articles that include it into [[:Category:Console variables]].''&lt;/noinclude&gt;</text>
      <sha1>i5va6t3u3cv0f06utolvrdhr7397wj4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Derivative Games</title>
    <ns>10</ns>
    <id>445</id>
    <revision>
      <id>782</id>
      <timestamp>2008-05-08T19:42:41Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <comment>New page: &lt;includeonly&gt;[[Category:Derivative Games]]&lt;/includeonly&gt; &lt;noinclude&gt;''Note: This template will categorize articles that include it into [[:Category:Derivative Games]].''&lt;/noinclude&gt;</comment>
      <text xml:space="preserve" bytes="181">&lt;includeonly&gt;[[Category:Derivative Games]]&lt;/includeonly&gt;
&lt;noinclude&gt;''Note: This template will categorize articles that include it into [[:Category:Derivative Games]].''&lt;/noinclude&gt;</text>
      <sha1>bwzxtpbotclu4x677wf8ap1ofbh1wlw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Disambig</title>
    <ns>10</ns>
    <id>529</id>
    <revision>
      <id>1256</id>
      <timestamp>2009-09-25T08:19:59Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <comment>New page: &lt;div style=&quot;margin-left:20pt&quot;&gt;''This disambiguation page lists articles associated with the same title.''&lt;/div&gt; &lt;includeonly&gt;[[Category:Disambiguation pages]]&lt;/includeonly&gt;</comment>
      <text xml:space="preserve" bytes="172">&lt;div style=&quot;margin-left:20pt&quot;&gt;''This disambiguation page lists articles associated with the same title.''&lt;/div&gt;
&lt;includeonly&gt;[[Category:Disambiguation pages]]&lt;/includeonly&gt;</text>
      <sha1>aeyw2sjmdutt2dy2jfn31mshbvibep7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Engines</title>
    <ns>10</ns>
    <id>150</id>
    <revision>
      <id>234</id>
      <timestamp>2007-11-02T20:08:26Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: &lt;includeonly&gt;[[Category:Engines]]&lt;/includeonly&gt; &lt;noinclude&gt;''Note: This template will categorize articles that include it into [[:Category:Engines]].''&lt;/noinclude&gt;</comment>
      <text xml:space="preserve" bytes="163">&lt;includeonly&gt;[[Category:Engines]]&lt;/includeonly&gt;
&lt;noinclude&gt;''Note: This template will categorize articles that include it into [[:Category:Engines]].''&lt;/noinclude&gt;</text>
      <sha1>tb4mab5pxd3nwxc4ze2gfspjst6zpjq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:GL NetQuake Engines</title>
    <ns>10</ns>
    <id>379</id>
    <revision>
      <id>637</id>
      <timestamp>2008-04-21T20:38:22Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <comment>New page: These are engines that are either GL-only or have a GL client, and supports the original NetQuake protocol.</comment>
      <text xml:space="preserve" bytes="107">These are engines that are either GL-only or have a GL client, and supports the original NetQuake protocol.</text>
      <sha1>7p81hf5bmbnw5jh5v1u6826g32amq3u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>639</id>
      <parentid>637</parentid>
      <timestamp>2008-04-21T20:39:54Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <text xml:space="preserve" bytes="187">&lt;includeonly&gt;[[Category:GL NetQuake Engines]]&lt;/includeonly&gt;
&lt;noinclude&gt;''Note: This template will categorize articles that include it into [[:Category:GL NetQuake Engines]].''&lt;/noinclude&gt;</text>
      <sha1>svmjjfdmq4anrgv37xr5ki58mfdi9a8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:GL QuakeWorld Engines</title>
    <ns>10</ns>
    <id>380</id>
    <revision>
      <id>638</id>
      <timestamp>2008-04-21T20:38:56Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <comment>New page: These are engines that are GL-only or have a GL client, that supports the QuakeWorld protocol.</comment>
      <text xml:space="preserve" bytes="94">These are engines that are GL-only or have a GL client, that supports the QuakeWorld protocol.</text>
      <sha1>hq8nkyzo50sm61vcxnbltzm2byh5eu1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>640</id>
      <parentid>638</parentid>
      <timestamp>2008-04-21T20:40:24Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <text xml:space="preserve" bytes="191">&lt;includeonly&gt;[[Category:GL QuakeWorld Engines]]&lt;/includeonly&gt;
&lt;noinclude&gt;''Note: This template will categorize articles that include it into [[:Category:GL QuakeWorld Engines]].''&lt;/noinclude&gt;</text>
      <sha1>gn264olr0tpu3rhv2wodusxbp9h3l5l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Infobox</title>
    <ns>10</ns>
    <id>659</id>
    <revision>
      <id>1970</id>
      <timestamp>2013-03-25T09:33:07Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>added infobox directly from wikipedia. Don't be surprised if it doesn't work.</comment>
      <text xml:space="preserve" bytes="26866">{{#ifeq:{{{child|}}}|yes||&lt;table class=&quot;infobox {{{bodyclass|}}}&quot; cellspacing=&quot;3&quot; style=&quot;border-spacing: 3px; width:22em; {{{bodystyle|}}}&quot;&gt;&lt;!--
 Caption
--&gt;{{#if:{{{title|}}}|&lt;caption class=&quot;{{{titleclass|}}}&quot; style=&quot;{{{titlestyle|}}}&quot;&gt;{{{title}}}&lt;/caption&gt;}}&lt;!--
 Header
--&gt;{{#if:{{{above|}}}|&lt;tr&gt;&lt;th colspan=&quot;2&quot; class=&quot;{{{aboveclass|}}}&quot; style=&quot;text-align:center; font-size:125%; font-weight:bold; {{{abovestyle|}}}&quot;&gt;{{{above}}}&lt;/th&gt;&lt;/tr&gt;}}
}}{{#ifeq:{{{child|}}}|yes|{{#if:{{{title|}}}|'''{{{title}}}'''}}}}&lt;!--
 Subheader1
--&gt;{{#if:{{{subheader|{{{subheader1|}}}}}}|{{Infobox/row
 |data={{{subheader|{{{subheader1|}}}}}}
 |datastyle={{{subheaderstyle|{{{subheaderstyle1|}}}}}}
 |class={{{subheaderclass|}}}
 |rowclass={{{subheaderrowclass|{{{subheaderrowclass1|}}}}}}
}} }}&lt;!--
 Subheader2
--&gt;{{#if:{{{subheader2|}}}|{{Infobox/row
 |data={{{subheader2}}}
 |datastyle={{{subheaderstyle|{{{subheaderstyle2|}}}}}}
 |class={{{subheaderclass|}}}
 |rowclass={{{subheaderrowclass2|}}}
}} }}&lt;!--
 Image1
--&gt;{{#if:{{{image|{{{image1|}}}}}}|{{Infobox/row
 |data={{{image|{{{image1}}} }}}{{#if:{{{caption|{{{caption1|}}}}}}|&lt;br /&gt;&lt;span style=&quot;{{{captionstyle|}}}&quot;&gt;{{{caption|{{{caption1}}}}}}&lt;/span&gt;}}
 |datastyle={{{imagestyle|}}}
 |class={{{imageclass|}}}
 |rowclass={{{imagerowclass1|}}}
}} }}&lt;!--
 Image2
--&gt;{{#if:{{{image2|}}}|{{Infobox/row
 |data={{{image2}}}{{#if:{{{caption2|}}}|&lt;br /&gt;&lt;span style=&quot;{{{captionstyle|}}}&quot;&gt;{{{caption2}}}&lt;/span&gt;}}
 |datastyle={{{imagestyle|}}}
 |class={{{imageclass|}}}
 |rowclass={{{imagerowclass2|}}}
}} }}&lt;!--
 Image3
--&gt;{{#if:{{{image3|}}}|{{Infobox/row
 |data={{{image3}}}{{#if:{{{caption3|}}}|&lt;br /&gt;&lt;span style=&quot;{{{captionstyle|}}}&quot;&gt;{{{caption3}}}&lt;/span&gt;}}
 |datastyle={{{imagestyle|}}}
 |class={{{imageclass|}}}
 |rowclass={{{imagerowclass3|}}}
}} }}&lt;!--
--&gt;{{Infobox/row
 |header={{{header1|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label1|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data1|}}}     |datastyle={{{datastyle|}}}
 |class={{{class1|}}}   |rowclass={{{rowclass1|}}}
}}{{Infobox/row
 |header={{{header2|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label2|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data2|}}}     |datastyle={{{datastyle|}}}
 |class={{{class2|}}}   |rowclass={{{rowclass2|}}}
}}{{Infobox/row
 |header={{{header3|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label3|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data3|}}}     |datastyle={{{datastyle|}}}
 |class={{{class3|}}}   |rowclass={{{rowclass3|}}}
}}{{Infobox/row
 |header={{{header4|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label4|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data4|}}}     |datastyle={{{datastyle|}}}
 |class={{{class4|}}}   |rowclass={{{rowclass4|}}}
}}{{Infobox/row
 |header={{{header5|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label5|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data5|}}}     |datastyle={{{datastyle|}}}
 |class={{{class5|}}}   |rowclass={{{rowclass5|}}}
}}{{Infobox/row
 |header={{{header6|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label6|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data6|}}}     |datastyle={{{datastyle|}}}
 |class={{{class6|}}}   |rowclass={{{rowclass6|}}}
}}{{Infobox/row
 |header={{{header7|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label7|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data7|}}}     |datastyle={{{datastyle|}}}
 |class={{{class7|}}}   |rowclass={{{rowclass7|}}}
}}{{Infobox/row
 |header={{{header8|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label8|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data8|}}}     |datastyle={{{datastyle|}}}
 |class={{{class8|}}}   |rowclass={{{rowclass8|}}}
}}{{Infobox/row
 |header={{{header9|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label9|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data9|}}}     |datastyle={{{datastyle|}}}
 |class={{{class9|}}}   |rowclass={{{rowclass9|}}}
}}{{Infobox/row
 |header={{{header10|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label10|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data10|}}}     |datastyle={{{datastyle|}}}
 |class={{{class10|}}}   |rowclass={{{rowclass10|}}}
}}{{Infobox/row
 |header={{{header11|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label11|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data11|}}}     |datastyle={{{datastyle|}}}
 |class={{{class11|}}}   |rowclass={{{rowclass11|}}}
}}{{Infobox/row
 |header={{{header12|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label12|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data12|}}}     |datastyle={{{datastyle|}}}
 |class={{{class12|}}}   |rowclass={{{rowclass12|}}}
}}{{Infobox/row
 |header={{{header13|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label13|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data13|}}}     |datastyle={{{datastyle|}}}
 |class={{{class13|}}}   |rowclass={{{rowclass13|}}}
}}{{Infobox/row
 |header={{{header14|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label14|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data14|}}}     |datastyle={{{datastyle|}}}
 |class={{{class14|}}}   |rowclass={{{rowclass14|}}}
}}{{Infobox/row
 |header={{{header15|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label15|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data15|}}}     |datastyle={{{datastyle|}}}
 |class={{{class15|}}}   |rowclass={{{rowclass15|}}}
}}{{Infobox/row
 |header={{{header16|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label16|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data16|}}}     |datastyle={{{datastyle|}}}
 |class={{{class16|}}}   |rowclass={{{rowclass16|}}}
}}{{Infobox/row
 |header={{{header17|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label17|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data17|}}}     |datastyle={{{datastyle|}}}
 |class={{{class17|}}}   |rowclass={{{rowclass17|}}}
}}{{Infobox/row
 |header={{{header18|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label18|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data18|}}}     |datastyle={{{datastyle|}}}
 |class={{{class18|}}}   |rowclass={{{rowclass18|}}}
}}{{Infobox/row
 |header={{{header19|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label19|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data19|}}}     |datastyle={{{datastyle|}}}
 |class={{{class19|}}}   |rowclass={{{rowclass19|}}}
}}{{Infobox/row
 |header={{{header20|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label20|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data20|}}}     |datastyle={{{datastyle|}}}
 |class={{{class20|}}}   |rowclass={{{rowclass20|}}}
}}{{Infobox/row
 |header={{{header21|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label21|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data21|}}}     |datastyle={{{datastyle|}}}
 |class={{{class21|}}}   |rowclass={{{rowclass21|}}}
}}{{Infobox/row
 |header={{{header22|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label22|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data22|}}}     |datastyle={{{datastyle|}}}
 |class={{{class22|}}}   |rowclass={{{rowclass22|}}}
}}{{Infobox/row
 |header={{{header23|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label23|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data23|}}}     |datastyle={{{datastyle|}}}
 |class={{{class23|}}}   |rowclass={{{rowclass23|}}}
}}{{Infobox/row
 |header={{{header24|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label24|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data24|}}}     |datastyle={{{datastyle|}}}
 |class={{{class24|}}}   |rowclass={{{rowclass24|}}}
}}{{Infobox/row
 |header={{{header25|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label25|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data25|}}}     |datastyle={{{datastyle|}}}
 |class={{{class25|}}}   |rowclass={{{rowclass25|}}}
}}{{Infobox/row
 |header={{{header26|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label26|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data26|}}}     |datastyle={{{datastyle|}}}
 |class={{{class26|}}}   |rowclass={{{rowclass26|}}}
}}{{Infobox/row
 |header={{{header27|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label27|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data27|}}}     |datastyle={{{datastyle|}}}
 |class={{{class27|}}}   |rowclass={{{rowclass27|}}}
}}{{Infobox/row
 |header={{{header28|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label28|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data28|}}}     |datastyle={{{datastyle|}}}
 |class={{{class28|}}}   |rowclass={{{rowclass28|}}}
}}{{Infobox/row
 |header={{{header29|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label29|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data29|}}}     |datastyle={{{datastyle|}}}
 |class={{{class29|}}}   |rowclass={{{rowclass29|}}}
}}{{Infobox/row
 |header={{{header30|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label30|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data30|}}}     |datastyle={{{datastyle|}}}
 |class={{{class30|}}}   |rowclass={{{rowclass30|}}}
}}{{Infobox/row
 |header={{{header31|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label31|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data31|}}}     |datastyle={{{datastyle|}}}
 |class={{{class31|}}}   |rowclass={{{rowclass31|}}}
}}{{Infobox/row
 |header={{{header32|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label32|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data32|}}}     |datastyle={{{datastyle|}}}
 |class={{{class32|}}}   |rowclass={{{rowclass32|}}}
}}{{Infobox/row
 |header={{{header33|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label33|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data33|}}}     |datastyle={{{datastyle|}}}
 |class={{{class33|}}}   |rowclass={{{rowclass33|}}}
}}{{Infobox/row
 |header={{{header34|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label34|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data34|}}}     |datastyle={{{datastyle|}}}
 |class={{{class34|}}}   |rowclass={{{rowclass34|}}}
}}{{Infobox/row
 |header={{{header35|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label35|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data35|}}}     |datastyle={{{datastyle|}}}
 |class={{{class35|}}}   |rowclass={{{rowclass35|}}}
}}{{Infobox/row
 |header={{{header36|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label36|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data36|}}}     |datastyle={{{datastyle|}}}
 |class={{{class36|}}}   |rowclass={{{rowclass36|}}}
}}{{Infobox/row
 |header={{{header37|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label37|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data37|}}}     |datastyle={{{datastyle|}}}
 |class={{{class37|}}}   |rowclass={{{rowclass37|}}}
}}{{Infobox/row
 |header={{{header38|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label38|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data38|}}}     |datastyle={{{datastyle|}}}
 |class={{{class38|}}}   |rowclass={{{rowclass38|}}}
}}{{Infobox/row
 |header={{{header39|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label39|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data39|}}}     |datastyle={{{datastyle|}}}
 |class={{{class39|}}}   |rowclass={{{rowclass39|}}}
}}{{Infobox/row
 |header={{{header40|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label40|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data40|}}}     |datastyle={{{datastyle|}}}
 |class={{{class40|}}}   |rowclass={{{rowclass40|}}}
}}{{Infobox/row
 |header={{{header41|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label41|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data41|}}}     |datastyle={{{datastyle|}}}
 |class={{{class41|}}}   |rowclass={{{rowclass41|}}}
}}{{Infobox/row
 |header={{{header42|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label42|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data42|}}}     |datastyle={{{datastyle|}}}
 |class={{{class42|}}}   |rowclass={{{rowclass42|}}}
}}{{Infobox/row
 |header={{{header43|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label43|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data43|}}}     |datastyle={{{datastyle|}}}
 |class={{{class43|}}}   |rowclass={{{rowclass43|}}}
}}{{Infobox/row
 |header={{{header44|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label44|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data44|}}}     |datastyle={{{datastyle|}}}
 |class={{{class44|}}}   |rowclass={{{rowclass44|}}}
}}{{Infobox/row
 |header={{{header45|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label45|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data45|}}}     |datastyle={{{datastyle|}}}
 |class={{{class45|}}}   |rowclass={{{rowclass45|}}}
}}{{Infobox/row
 |header={{{header46|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label46|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data46|}}}     |datastyle={{{datastyle|}}}
 |class={{{class46|}}}   |rowclass={{{rowclass46|}}}
}}{{Infobox/row
 |header={{{header47|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label47|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data47|}}}     |datastyle={{{datastyle|}}}
 |class={{{class47|}}}   |rowclass={{{rowclass47|}}}
}}{{Infobox/row
 |header={{{header48|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label48|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data48|}}}     |datastyle={{{datastyle|}}}
 |class={{{class48|}}}   |rowclass={{{rowclass48|}}}
}}{{Infobox/row
 |header={{{header49|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label49|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data49|}}}     |datastyle={{{datastyle|}}}
 |class={{{class49|}}}   |rowclass={{{rowclass49|}}}
}}{{Infobox/row
 |header={{{header50|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label50|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data50|}}}     |datastyle={{{datastyle|}}}
 |class={{{class50|}}}   |rowclass={{{rowclass50|}}}
}}{{Infobox/row
 |header={{{header51|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label51|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data51|}}}     |datastyle={{{datastyle|}}}
 |class={{{class51|}}}   |rowclass={{{rowclass51|}}}
}}{{Infobox/row
 |header={{{header52|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label52|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data52|}}}     |datastyle={{{datastyle|}}}
 |class={{{class52|}}}   |rowclass={{{rowclass52|}}}
}}{{Infobox/row
 |header={{{header53|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label53|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data53|}}}     |datastyle={{{datastyle|}}}
 |class={{{class53|}}}   |rowclass={{{rowclass53|}}}
}}{{Infobox/row
 |header={{{header54|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label54|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data54|}}}     |datastyle={{{datastyle|}}}
 |class={{{class54|}}}   |rowclass={{{rowclass54|}}}
}}{{Infobox/row
 |header={{{header55|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label55|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data55|}}}     |datastyle={{{datastyle|}}}
 |class={{{class55|}}}   |rowclass={{{rowclass55|}}}
}}{{Infobox/row
 |header={{{header56|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label56|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data56|}}}     |datastyle={{{datastyle|}}}
 |class={{{class56|}}}   |rowclass={{{rowclass56|}}}
}}{{Infobox/row
 |header={{{header57|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label57|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data57|}}}     |datastyle={{{datastyle|}}}
 |class={{{class57|}}}   |rowclass={{{rowclass57|}}}
}}{{Infobox/row
 |header={{{header58|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label58|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data58|}}}     |datastyle={{{datastyle|}}}
 |class={{{class58|}}}   |rowclass={{{rowclass58|}}}
}}{{Infobox/row
 |header={{{header59|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label59|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data59|}}}     |datastyle={{{datastyle|}}}
 |class={{{class59|}}}   |rowclass={{{rowclass59|}}}
}}{{Infobox/row
 |header={{{header60|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label60|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data60|}}}     |datastyle={{{datastyle|}}}
 |class={{{class60|}}}   |rowclass={{{rowclass60|}}}
}}{{Infobox/row
 |header={{{header61|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label61|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data61|}}}     |datastyle={{{datastyle|}}}
 |class={{{class61|}}}   |rowclass={{{rowclass61|}}}
}}{{Infobox/row
 |header={{{header62|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label62|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data62|}}}     |datastyle={{{datastyle|}}}
 |class={{{class62|}}}   |rowclass={{{rowclass62|}}}
}}{{Infobox/row
 |header={{{header63|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label63|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data63|}}}     |datastyle={{{datastyle|}}}
 |class={{{class63|}}}   |rowclass={{{rowclass63|}}}
}}{{Infobox/row
 |header={{{header64|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label64|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data64|}}}     |datastyle={{{datastyle|}}}
 |class={{{class64|}}}   |rowclass={{{rowclass64|}}}
}}{{Infobox/row
 |header={{{header65|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label65|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data65|}}}     |datastyle={{{datastyle|}}}
 |class={{{class65|}}}   |rowclass={{{rowclass65|}}}
}}{{Infobox/row
 |header={{{header66|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label66|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data66|}}}     |datastyle={{{datastyle|}}}
 |class={{{class66|}}}   |rowclass={{{rowclass66|}}}
}}{{Infobox/row
 |header={{{header67|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label67|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data67|}}}     |datastyle={{{datastyle|}}}
 |class={{{class67|}}}   |rowclass={{{rowclass67|}}}
}}{{Infobox/row
 |header={{{header68|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label68|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data68|}}}     |datastyle={{{datastyle|}}}
 |class={{{class68|}}}   |rowclass={{{rowclass68|}}}
}}{{Infobox/row
 |header={{{header69|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label69|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data69|}}}     |datastyle={{{datastyle|}}}
 |class={{{class69|}}}   |rowclass={{{rowclass69|}}}
}}{{Infobox/row
 |header={{{header70|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label70|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data70|}}}     |datastyle={{{datastyle|}}}
 |class={{{class70|}}}   |rowclass={{{rowclass70|}}}
}}{{Infobox/row
 |header={{{header71|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label71|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data71|}}}     |datastyle={{{datastyle|}}}
 |class={{{class71|}}}   |rowclass={{{rowclass71|}}}
}}{{Infobox/row
 |header={{{header72|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label72|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data72|}}}     |datastyle={{{datastyle|}}}
 |class={{{class72|}}}   |rowclass={{{rowclass72|}}}
}}{{Infobox/row
 |header={{{header73|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label73|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data73|}}}     |datastyle={{{datastyle|}}}
 |class={{{class73|}}}   |rowclass={{{rowclass73|}}}
}}{{Infobox/row
 |header={{{header74|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label74|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data74|}}}     |datastyle={{{datastyle|}}}
 |class={{{class74|}}}   |rowclass={{{rowclass74|}}}
}}{{Infobox/row
 |header={{{header75|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label75|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data75|}}}     |datastyle={{{datastyle|}}}
 |class={{{class75|}}}   |rowclass={{{rowclass75|}}}
}}{{Infobox/row
 |header={{{header76|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label76|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data76|}}}     |datastyle={{{datastyle|}}}
 |class={{{class76|}}}   |rowclass={{{rowclass76|}}}
}}{{Infobox/row
 |header={{{header77|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label77|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data77|}}}     |datastyle={{{datastyle|}}}
 |class={{{class77|}}}   |rowclass={{{rowclass77|}}}
}}{{Infobox/row
 |header={{{header78|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label78|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data78|}}}     |datastyle={{{datastyle|}}}
 |class={{{class78|}}}   |rowclass={{{rowclass78|}}}
}}{{Infobox/row
 |header={{{header79|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label79|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data79|}}}     |datastyle={{{datastyle|}}}
 |class={{{class79|}}}   |rowclass={{{rowclass79|}}}
}}{{Infobox/row
 |header={{{header80|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label80|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data80|}}}     |datastyle={{{datastyle|}}}
 |class={{{class80|}}}   |rowclass={{{rowclass80|}}}
}}{{Infobox/row
 |header={{{header81|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label81|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data81|}}}     |datastyle={{{datastyle|}}}
 |class={{{class81|}}}   |rowclass={{{rowclass81|}}}
}}{{Infobox/row
 |header={{{header82|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label82|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data82|}}}     |datastyle={{{datastyle|}}}
 |class={{{class82|}}}   |rowclass={{{rowclass82|}}}
}}{{Infobox/row
 |header={{{header83|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label83|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data83|}}}     |datastyle={{{datastyle|}}}
 |class={{{class83|}}}   |rowclass={{{rowclass83|}}}
}}{{Infobox/row
 |header={{{header84|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label84|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data84|}}}     |datastyle={{{datastyle|}}}
 |class={{{class84|}}}   |rowclass={{{rowclass84|}}}
}}{{Infobox/row
 |header={{{header85|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label85|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data85|}}}     |datastyle={{{datastyle|}}}
 |class={{{class85|}}}   |rowclass={{{rowclass85|}}}
}}{{Infobox/row
 |header={{{header86|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label86|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data86|}}}     |datastyle={{{datastyle|}}}
 |class={{{class86|}}}   |rowclass={{{rowclass86|}}}
}}{{Infobox/row
 |header={{{header87|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label87|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data87|}}}     |datastyle={{{datastyle|}}}
 |class={{{class87|}}}   |rowclass={{{rowclass87|}}}
}}{{Infobox/row
 |header={{{header88|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label88|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data88|}}}     |datastyle={{{datastyle|}}}
 |class={{{class88|}}}   |rowclass={{{rowclass88|}}}
}}{{Infobox/row
 |header={{{header89|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label89|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data89|}}}     |datastyle={{{datastyle|}}}
 |class={{{class89|}}}   |rowclass={{{rowclass89|}}}
}}{{Infobox/row
 |header={{{header90|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label90|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data90|}}}     |datastyle={{{datastyle|}}}
 |class={{{class90|}}}   |rowclass={{{rowclass90|}}}
}}{{Infobox/row
 |header={{{header91|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label91|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data91|}}}     |datastyle={{{datastyle|}}}
 |class={{{class91|}}}   |rowclass={{{rowclass91|}}}
}}{{Infobox/row
 |header={{{header92|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label92|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data92|}}}     |datastyle={{{datastyle|}}}
 |class={{{class92|}}}   |rowclass={{{rowclass92|}}}
}}{{Infobox/row
 |header={{{header93|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label93|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data93|}}}     |datastyle={{{datastyle|}}}
 |class={{{class93|}}}   |rowclass={{{rowclass93|}}}
}}{{Infobox/row
 |header={{{header94|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label94|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data94|}}}     |datastyle={{{datastyle|}}}
 |class={{{class94|}}}   |rowclass={{{rowclass94|}}}
}}{{Infobox/row
 |header={{{header95|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label95|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data95|}}}     |datastyle={{{datastyle|}}}
 |class={{{class95|}}}   |rowclass={{{rowclass95|}}}
}}{{Infobox/row
 |header={{{header96|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label96|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data96|}}}     |datastyle={{{datastyle|}}}
 |class={{{class96|}}}   |rowclass={{{rowclass96|}}}
}}{{Infobox/row
 |header={{{header97|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label97|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data97|}}}     |datastyle={{{datastyle|}}}
 |class={{{class97|}}}   |rowclass={{{rowclass97|}}}
}}{{Infobox/row
 |header={{{header98|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label98|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data98|}}}     |datastyle={{{datastyle|}}}
 |class={{{class98|}}}   |rowclass={{{rowclass98|}}}
}}{{Infobox/row
 |header={{{header99|}}} |headerstyle={{{headerstyle|}}}
 |label={{{label99|}}}   |labelstyle={{{labelstyle|}}}
 |data={{{data99|}}}     |datastyle={{{datastyle|}}}
 |class={{{class99|}}}   |rowclass={{{rowclass99|}}}
}}&lt;!-- Below
--&gt;{{#if:{{{below|}}}|&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;{{{belowclass|}}}&quot; style=&quot;text-align:center; {{{belowstyle|}}}&quot;&gt;
{{{below}}}
&lt;/td&gt;&lt;/tr&gt;}}&lt;!--
 Navbar
--&gt;{{#if:{{{name|}}}|&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align:right&quot;&gt;{{navbar|{{{name}}}|mini=1}}&lt;/td&gt;&lt;/tr&gt;}}
{{#ifeq:{{{child|}}}|yes||&lt;/table&gt;}}{{#switch:{{lc:{{{italic title|¬}}}}}
 |¬|no       = &lt;!-- no italic title --&gt;
 ||force|yes = {{italic title|force={{#ifeq:{{lc:{{{italic title|}}}}}|force|true}}}}
}}&lt;includeonly&gt;{{#ifeq:{{{decat|}}}|yes||{{#if:{{{data1|}}}{{{data2|}}}{{{data3|}}}{{{data4|}}}{{{data5|}}}{{{data6|}}}{{{data7|}}}{{{data8|}}}{{{data9|}}}{{{data10|}}}{{{data11|}}}{{{data12|}}}{{{data13|}}}{{{data14|}}}{{{data15|}}}{{{data16|}}}{{{data17|}}}{{{data18|}}}{{{data19|}}}{{{data20|}}}{{{data21|}}}{{{data22|}}}{{{data23|}}}{{{data24|}}}{{{data25|}}}{{{data26|}}}{{{data27|}}}{{{data28|}}}{{{data29|}}}{{{data30|}}}{{{data31|}}}{{{data32|}}}{{{data33|}}}{{{data34|}}}{{{data35|}}}{{{data36|}}}{{{data37|}}}{{{data38|}}}{{{data39|}}}{{{data40|}}}{{{data41|}}}{{{data42|}}}{{{data43|}}}{{{data44|}}}{{{data45|}}}{{{data46|}}}{{{data47|}}}{{{data48|}}}{{{data49|}}}{{{data50|}}}{{{data51|}}}{{{data52|}}}{{{data53|}}}{{{data54|}}}{{{data55|}}}{{{data56|}}}{{{data57|}}}{{{data58|}}}{{{data59|}}}{{{data60|}}}{{{data61|}}}{{{data62|}}}{{{data63|}}}{{{data64|}}}{{{data65|}}}{{{data66|}}}{{{data67|}}}{{{data68|}}}{{{data69|}}}{{{data70|}}}{{{data71|}}}{{{data72|}}}{{{data73|}}}{{{data74|}}}{{{data75|}}}{{{data76|}}}{{{data77|}}}{{{data78|}}}{{{data79|}}}{{{data80|}}}{{{data81|}}}{{{data82|}}}{{{data83|}}}{{{data84|}}}{{{data85|}}}{{{data86|}}}{{{data87|}}}{{{data88|}}}{{{data89|}}}{{{data90|}}}{{{data91|}}}{{{data92|}}}{{{data93|}}}{{{data94|}}}{{{data95|}}}{{{data96|}}}{{{data97|}}}{{{data98|}}}{{{data99|}}}||{{namespace detect|main=[[category:articles which use infobox templates with no data rows]]}}}}}}&lt;/includeonly&gt;&lt;noinclude&gt;{{documentation}}&lt;/noinclude&gt;</text>
      <sha1>dwizlsjyagk4ojtravpg0onxyu9svle</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Infobox Console variable</title>
    <ns>10</ns>
    <id>72</id>
    <revision>
      <id>114</id>
      <timestamp>2007-10-30T21:48:20Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: __NOTOC__ {| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot; |+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{name}}}''' |- |'''Default:''' || {{{default-value}}} |- |'''Saved to ...</comment>
      <text xml:space="preserve" bytes="226">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{name}}}'''
|-
|'''Default:''' || {{{default-value}}}
|-
|'''Saved to CFG:''' || {{{saved-to-config}}}
|-
|}</text>
      <sha1>t7yuq9ghz82kqidimn54igm6afmn8sv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>116</id>
      <parentid>114</parentid>
      <timestamp>2007-10-30T21:52:24Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="232">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{name}}}'''
|-
|'''Default value:''' || {{{default-value}}}
|-
|'''Saved to CFG:''' || {{{saved-to-config}}}
|-
|}</text>
      <sha1>fimvopbgme4pns6skzw2s753lvk8mdq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>118</id>
      <parentid>116</parentid>
      <timestamp>2007-10-30T21:53:13Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="239">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{name}}}'''
|-
|'''Default value:''' || {{{default-value}}}
|-
|'''Saved to config.cfg:''' || {{{saved-to-config}}}
|-
|}</text>
      <sha1>cb7ryc17b8hdf2v4c7d25bp48sy0c56</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>138</id>
      <parentid>118</parentid>
      <timestamp>2007-10-30T22:35:40Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="241">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{name}}}'''
|-
|'''Default value:''' || &quot;{{{default-value}}}&quot;
|-
|'''Saved to config.cfg:''' || {{{saved-to-config}}}
|-
|}</text>
      <sha1>kqsisv7e9zb1b3m68w3zbh3ca54ods2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Infobox Engine</title>
    <ns>10</ns>
    <id>147</id>
    <revision>
      <id>229</id>
      <timestamp>2007-11-02T19:53:34Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: __NOTOC__ {| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot; |+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{name}}}''' |- |'''Author:''' || {{{author}}} |- |'''Based on:''' || {...</comment>
      <text xml:space="preserve" bytes="341">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{name}}}'''
|-
|'''Author:''' || {{{author}}}
|-
|'''Based on:''' || {{{based-on}}}
|-
|'''First release:''' || {{{first-release}}}
|-
|'''Newest release:''' || {{{newest-release}}}
|-
|'''Website:''' || {{{website}}}
|-
|}</text>
      <sha1>tdrlq3yvxyy6vrnpyee1hy5sp6fo6zj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Infobox Mod</title>
    <ns>10</ns>
    <id>449</id>
    <revision>
      <id>786</id>
      <timestamp>2008-05-08T22:01:25Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <comment>New page: __NOTOC__ {| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot; |+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{name}}}''' |- |'''Author:''' || {{{author}}} |- |'''Target engine:'''...</comment>
      <text xml:space="preserve" bytes="344">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{name}}}'''
|-
|'''Author:''' || {{{author}}}
|-
|'''Target engine:''' || {{{engine}}}
|-
|'''First release:''' || {{{first-release}}}
|-
|'''Newest release:''' || {{{newest-release}}}
|-
|'''Website:''' || {{{website}}}
|-
|}</text>
      <sha1>br1r2gj3kxx9o6qkd6s5n6jfdvvm13s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Infobox Monster</title>
    <ns>10</ns>
    <id>451</id>
    <revision>
      <id>795</id>
      <timestamp>2008-05-09T16:38:55Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>New page: __NOTOC__ {| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot; |+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{monstername}}}''' |- |'''Entity:''' || {{{entityname}}} |- |'''Health...</comment>
      <text xml:space="preserve" bytes="419">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{monstername}}}'''
|-
|'''Entity:''' || {{{entityname}}}
|-
|'''Health:''' || {{{monsterhealth}}}
|-
|'''Melee:''' || {{{monstermelee}}}
|-
|'''Missile:''' || {{{monstermissile}}}
|-
|'''Movetype:''' || {{{movetype}}}
|-
|'''Speed:''' || {{{monsterspeed}}}
|-
|'''Class:''' || {{{monsterclass}}}
|-
|}</text>
      <sha1>qvjvq6rqr7tgyw5ezq3tj227jfig9er</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>854</id>
      <parentid>795</parentid>
      <timestamp>2008-05-17T18:51:33Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="456">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{monstername}}}'''
|-
|'''Entity:''' || {{{entityname}}}
|-
|'''Health:''' || {{{monsterhealth}}}
|-
|'''Melee:''' || {{{monstermelee}}}
|-
|'''Missile:''' || {{{monstermissile}}}
|-
|'''Movetype:''' || {{{movetype}}}
|-
|'''Speed:''' || {{{monsterspeed}}}
|-
|'''Class:''' || {{{monsterclass}}}
|-
|'''Drop:''' || {{{monsterdrop}}}
|-
|}</text>
      <sha1>dv7xdztxh7ze91ljffukryebqx5jbsl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1229</id>
      <parentid>854</parentid>
      <timestamp>2009-09-25T07:39:14Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <comment>slimmed down, added model</comment>
      <text xml:space="preserve" bytes="333">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{name}}}'''
|-
|'''Entity:''' || [[{{{entity}}}]]
|-
|style=&quot;padding-bottom:12px&quot;|'''Model:''' || {{{model}}}
|-
|'''Health:''' || {{{health}}}
|-
|'''Attacks:''' || {{{attacks}}}
|-
|'''Drop:''' || {{{drop}}}
|-
|}</text>
      <sha1>t7see339rh2t2af02i2unv6uds5nrns</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1233</id>
      <parentid>1229</parentid>
      <timestamp>2009-09-25T07:52:43Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="554">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{name}}}'''
|-
|'''Entity''' || [[{{{entity}}}]]
|-
|'''Model''' || {{{model}}}
|-
|'''Health''' || {{{health}}}
|-
|'''Attacks''' || {{{attacks}}}
|-
|'''Drop''' || {{{drop}}}
|-
|'''Registered'''† || {{{shareware}}}
|-
|colspan=&quot;2&quot; style=&quot;border-top:1px solid #888;font-size:7pt&quot;|†Whether the monster appears in the registered version of Quake. The data for registered-only monsters resides in pak1.pak rather than pak0.pak.
|-
|}</text>
      <sha1>l635qj1yurnnbhedb0v165zw1pkg794</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1235</id>
      <parentid>1233</parentid>
      <timestamp>2009-09-25T07:54:48Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="536">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 20em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{name}}}'''
|-
|'''Entity''' || [[{{{entity}}}]]
|-
|'''Model''' || {{{model}}}
|-
|'''Health''' || {{{health}}}
|-
|'''Attacks''' || {{{attacks}}}
|-
|'''Drop''' || {{{drop}}}
|-
|'''Game version'''† || {{{gameversion}}}
|-
|colspan=&quot;2&quot; style=&quot;border-top:1px solid #888;font-size:7pt&quot;|† The data files for monsters that appear only in the registered version of Quake reside in pak1.pak rather than pak0.pak.
|-
|}</text>
      <sha1>buk3r98tmr0wf49thznxb6hgrusj1hs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1241</id>
      <parentid>1235</parentid>
      <timestamp>2009-09-25T07:56:26Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="536">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 21em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{name}}}'''
|-
|'''Entity''' || [[{{{entity}}}]]
|-
|'''Model''' || {{{model}}}
|-
|'''Health''' || {{{health}}}
|-
|'''Attacks''' || {{{attacks}}}
|-
|'''Drop''' || {{{drop}}}
|-
|'''Game version'''† || {{{gameversion}}}
|-
|colspan=&quot;2&quot; style=&quot;border-top:1px solid #888;font-size:7pt&quot;|† The data files for monsters that appear only in the registered version of Quake reside in pak1.pak rather than pak0.pak.
|-
|}</text>
      <sha1>brfblofiyhydikx46fwpz6g4xwtx5uk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1377</id>
      <parentid>1241</parentid>
      <timestamp>2009-10-08T23:18:22Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <comment>added 1st appearance row</comment>
      <text xml:space="preserve" bytes="584">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 21em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{name}}}'''
|-
|'''Entity''' || [[{{{entity}}}]]
|-
|'''Model''' || {{{model}}}
|-
|'''Health''' || {{{health}}}
|-
|'''Attacks''' || {{{attacks}}}
|-
|'''Drop''' || {{{drop}}}
|-
|'''1st Appearance''' || {{{1stappearance}}}
|-
|'''Game version'''† || {{{gameversion}}}
|-
|colspan=&quot;2&quot; style=&quot;border-top:1px solid #888;font-size:7pt&quot;|† The data files for monsters that appear only in the registered version of Quake reside in pak1.pak rather than pak0.pak.
|-
|}</text>
      <sha1>0l6tvx9v67hm17rutnwg5vwhxm2pfr2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1477</id>
      <parentid>1377</parentid>
      <timestamp>2009-12-11T20:35:23Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <comment>moving stuff more relevant to players to the top</comment>
      <text xml:space="preserve" bytes="584">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 21em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{name}}}'''
|-
|'''Health''' || {{{health}}}
|-
|'''Attacks''' || {{{attacks}}}
|-
|'''Drop''' || {{{drop}}}
|-
|'''1st Appearance''' || {{{1stappearance}}}
|-
|'''Entity''' || [[{{{entity}}}]]
|-
|'''Model''' || {{{model}}}
|-
|'''Game version'''† || {{{gameversion}}}
|-
|colspan=&quot;2&quot; style=&quot;border-top:1px solid #888;font-size:7pt&quot;|† The data files for monsters that appear only in the registered version of Quake reside in pak1.pak rather than pak0.pak.
|-
|}</text>
      <sha1>5wk9z2orpktgrjacxd3h2ui1u5c902q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1478</id>
      <parentid>1477</parentid>
      <timestamp>2009-12-11T20:36:06Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="584">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 21em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{name}}}'''
|-
|'''Health''' || {{{health}}}
|-
|'''Attacks''' || {{{attacks}}}
|-
|'''Drop''' || {{{drop}}}
|-
|'''1st appearance''' || {{{1stappearance}}}
|-
|'''Entity''' || [[{{{entity}}}]]
|-
|'''Model''' || {{{model}}}
|-
|'''Game version'''† || {{{gameversion}}}
|-
|colspan=&quot;2&quot; style=&quot;border-top:1px solid #888;font-size:7pt&quot;|† The data files for monsters that appear only in the registered version of Quake reside in pak1.pak rather than pak0.pak.
|-
|}</text>
      <sha1>ilujvudzeacv3syy9d9g9mrzupvtlmk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2781</id>
      <parentid>1478</parentid>
      <timestamp>2013-04-07T09:14:19Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>testing new monster infobox</comment>
      <text xml:space="preserve" bytes="717">{| class=&quot;wikitable&quot; width=&quot;320&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{monster_name}}}'''
|-
|
{|
| colspan=&quot;2&quot; |
{{#if: {{{image}}} | [[file:{{{image}}}|thumb|center|320px|alt={{{monster_name}}}]] }}
|-
| width=&quot;120&quot; |'''Health'''
| {{{health}}}
|-
|'''Attacks'''
| {{{attacks}}}
|-
|'''Drop''' 
| {{{drop}}}
|-
|'''1st appearance'''
| {{{1stappearance}}}
|-
|'''Entity'''
| [[{{{entity}}}]]
|-
|'''Model'''
| {{{model}}}
|-
|'''Game version'''†
| {{{gameversion}}}
|-
| colspan=&quot;2&quot; style=&quot;border-top:1px solid #888;font-size:7pt&quot; |† The data files for monsters that appear only in the registered version of Quake reside in pak1.pak rather than pak0.pak.
|-
|}
|}</text>
      <sha1>8al4yi5duipd79gezpmqcc74eh2j1pu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2783</id>
      <parentid>2781</parentid>
      <timestamp>2013-04-07T09:16:52Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>removed if</comment>
      <text xml:space="preserve" bytes="693">{| class=&quot;wikitable&quot; width=&quot;320&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{monster_name}}}'''
|-
|
{|
| colspan=&quot;2&quot; |
[[file:{{{image}}}|thumb|center|320px|alt={{{monster_name}}}]]
|-
| width=&quot;120&quot; |'''Health'''
| {{{health}}}
|-
|'''Attacks'''
| {{{attacks}}}
|-
|'''Drop''' 
| {{{drop}}}
|-
|'''1st appearance'''
| {{{1stappearance}}}
|-
|'''Entity'''
| [[{{{entity}}}]]
|-
|'''Model'''
| {{{model}}}
|-
|'''Game version'''†
| {{{gameversion}}}
|-
| colspan=&quot;2&quot; style=&quot;border-top:1px solid #888;font-size:7pt&quot; |† The data files for monsters that appear only in the registered version of Quake reside in pak1.pak rather than pak0.pak.
|-
|}
|}</text>
      <sha1>jfslfggpd4x4cg1czce686ngaq4khcs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2785</id>
      <parentid>2783</parentid>
      <timestamp>2013-04-07T09:18:14Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>fixed name</comment>
      <text xml:space="preserve" bytes="677">{| class=&quot;wikitable&quot; width=&quot;320&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{name}}}'''
|-
|
{|
| colspan=&quot;2&quot; |
[[file:{{{image}}}|thumb|center|320px|alt={{{name}}}]]
|-
| width=&quot;120&quot; |'''Health'''
| {{{health}}}
|-
|'''Attacks'''
| {{{attacks}}}
|-
|'''Drop''' 
| {{{drop}}}
|-
|'''1st appearance'''
| {{{1stappearance}}}
|-
|'''Entity'''
| [[{{{entity}}}]]
|-
|'''Model'''
| {{{model}}}
|-
|'''Game version'''†
| {{{gameversion}}}
|-
| colspan=&quot;2&quot; style=&quot;border-top:1px solid #888;font-size:7pt&quot; |† The data files for monsters that appear only in the registered version of Quake reside in pak1.pak rather than pak0.pak.
|-
|}
|}</text>
      <sha1>jeotny8cvl383ln3mc7w7xk4sb25f6r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2788</id>
      <parentid>2785</parentid>
      <timestamp>2013-04-07T09:33:55Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>removed entity and model, as they are already in the entity information box</comment>
      <text xml:space="preserve" bytes="611">{| class=&quot;wikitable&quot; width=&quot;320&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{name}}}'''
|-
|
{|
| colspan=&quot;2&quot; |
[[file:{{{image}}}|thumb|center|320px|alt={{{name}}}]]
|-
| width=&quot;120&quot; |'''Health'''
| {{{health}}}
|-
|'''Attacks'''
| {{{attacks}}}
|-
|'''Drop''' 
| {{{drop}}}
|-
|'''1st appearance'''
| {{{1stappearance}}}
|-
|'''Game version'''†
| {{{gameversion}}}
|-
| colspan=&quot;2&quot; style=&quot;border-top:1px solid #888;font-size:7pt&quot; |† The data files for monsters that appear only in the registered version of Quake reside in pak1.pak rather than pak0.pak.
|-
|}
|}</text>
      <sha1>j7vhglqv382sudydi7ktlo9qc3cg0mz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2790</id>
      <parentid>2788</parentid>
      <timestamp>2013-04-07T10:02:34Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>added manual text and death message</comment>
      <text xml:space="preserve" bytes="702">{| class=&quot;wikitable&quot; width=&quot;320&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{name}}}'''
|-
|
{|
| colspan=&quot;2&quot; |
&lt;center&gt;
{{{manualtext}}}&lt;br&gt;
[[file:{{{image}}}|thumb|center|250px|alt={{{name}}}]]
&lt;/center&gt;
|-
| width=&quot;120&quot; | '''Health'''
| {{{health}}}
|-
| '''Attacks'''
| {{{attacks}}}
|-
| '''Drop''' 
| {{{drop}}}
|-
| '''Death message'''
| {{{deathmessage}}}
|-
| '''1st appearance'''
| {{{1stappearance}}}
|-
| '''Game version'''†
| {{{gameversion}}}
|-
| colspan=&quot;2&quot; style=&quot;border-top:1px solid #888;font-size:7pt&quot; |† The data files for monsters that appear only in the registered version of Quake reside in pak1.pak rather than pak0.pak.
|-
|}
|}</text>
      <sha1>o5cazm8b9hyvsfv3xdxmash99a0itfz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2791</id>
      <parentid>2790</parentid>
      <timestamp>2013-04-07T10:07:30Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>testing</comment>
      <text xml:space="preserve" bytes="710">{| class=&quot;wikitable&quot; width=&quot;320&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{name}}}'''
|-
|
{|
| colspan=&quot;2&quot; |
&lt;center&gt;
[[file:{{{image}}}|thumb|center|250px|alt={{{name}}}]]&lt;br&gt;
''{{{manualtext}}}''
&lt;/center&gt;
|-
| width=&quot;120&quot; | '''Health'''
| {{{health}}}
|-
| '''Attacks'''
| {{{attacks}}}
|-
| '''Drop''' 
| {{{drop}}}
|-
| '''Death message'''
| ''{{{deathmessage}}}''
|-
| '''1st appearance'''
| {{{1stappearance}}}
|-
| '''Game version'''†
| {{{gameversion}}}
|-
| colspan=&quot;2&quot; style=&quot;border-top:1px solid #888;font-size:7pt&quot; |† The data files for monsters that appear only in the registered version of Quake reside in pak1.pak rather than pak0.pak.
|-
|}
|}</text>
      <sha1>nhkf0mlw4z2gx8pfoj4jw9e3r45wd5u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2792</id>
      <parentid>2791</parentid>
      <timestamp>2013-04-07T10:09:14Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>still testing</comment>
      <text xml:space="preserve" bytes="710">{| class=&quot;wikitable&quot; width=&quot;300&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{name}}}'''
|-
|
{|
| colspan=&quot;2&quot; |
&lt;center&gt;
''{{{manualtext}}}''&lt;br&gt;
[[file:{{{image}}}|thumb|center|300px|alt={{{name}}}]]
&lt;/center&gt;
|-
| width=&quot;120&quot; | '''Health'''
| {{{health}}}
|-
| '''Attacks'''
| {{{attacks}}}
|-
| '''Drop''' 
| {{{drop}}}
|-
| '''1st appearance'''
| {{{1stappearance}}}
|-
| '''Game version'''†
| {{{gameversion}}}
|-
| '''Death message'''
| ''{{{deathmessage}}}''
|-
| colspan=&quot;2&quot; style=&quot;border-top:1px solid #888;font-size:7pt&quot; |† The data files for monsters that appear only in the registered version of Quake reside in pak1.pak rather than pak0.pak.
|-
|}
|}</text>
      <sha1>mrzu3d908vstpnhv20lfel6q5g8k4vo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2793</id>
      <parentid>2792</parentid>
      <timestamp>2013-04-07T10:12:47Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>still testing</comment>
      <text xml:space="preserve" bytes="706">{| class=&quot;wikitable&quot; width=&quot;300&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{name}}}'''
|-
|
{|
| colspan=&quot;2&quot; |
&lt;center&gt;
[[file:{{{image}}}|thumb|center|300px|alt={{{name}}}|''{{{manualtext}}}'']]
&lt;/center&gt;
|-
| width=&quot;120&quot; | '''Health'''
| {{{health}}}
|-
| '''Attacks'''
| {{{attacks}}}
|-
| '''Drop''' 
| {{{drop}}}
|-
| '''1st appearance'''
| {{{1stappearance}}}
|-
| '''Game version'''†
| {{{gameversion}}}
|-
| '''Death message'''
| ''{{{deathmessage}}}''
|-
| colspan=&quot;2&quot; style=&quot;border-top:1px solid #888;font-size:7pt&quot; |† The data files for monsters that appear only in the registered version of Quake reside in pak1.pak rather than pak0.pak.
|-
|}
|}</text>
      <sha1>96qm3g01f7yhgm9bmcpdx9jozx7rfkw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2794</id>
      <parentid>2793</parentid>
      <timestamp>2013-04-07T10:13:33Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>grr</comment>
      <text xml:space="preserve" bytes="706">{| class=&quot;wikitable&quot; width=&quot;300&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{name}}}'''
|-
|
{|
| colspan=&quot;2&quot; |
&lt;center&gt;
[[file:{{{image}}}|thumb|center|300px|alt={{{name}}}]]
''{{{manualtext}}}''
&lt;/center&gt;
|-
| width=&quot;120&quot; | '''Health'''
| {{{health}}}
|-
| '''Attacks'''
| {{{attacks}}}
|-
| '''Drop''' 
| {{{drop}}}
|-
| '''1st appearance'''
| {{{1stappearance}}}
|-
| '''Game version'''†
| {{{gameversion}}}
|-
| '''Death message'''
| ''{{{deathmessage}}}''
|-
| colspan=&quot;2&quot; style=&quot;border-top:1px solid #888;font-size:7pt&quot; |† The data files for monsters that appear only in the registered version of Quake reside in pak1.pak rather than pak0.pak.
|-
|}
|}</text>
      <sha1>765n0kslgnzti3iay72pfz80ao73osd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2797</id>
      <parentid>2794</parentid>
      <timestamp>2013-04-07T10:37:17Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>Added quotation marks to manual text</comment>
      <text xml:space="preserve" bytes="708">{| class=&quot;wikitable&quot; width=&quot;300&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{name}}}'''
|-
|
{|
| colspan=&quot;2&quot; |
&lt;center&gt;
[[file:{{{image}}}|thumb|center|300px|alt={{{name}}}]]
''&quot;{{{manualtext}}}&quot;''
&lt;/center&gt;
|-
| width=&quot;120&quot; | '''Health'''
| {{{health}}}
|-
| '''Attacks'''
| {{{attacks}}}
|-
| '''Drop''' 
| {{{drop}}}
|-
| '''1st appearance'''
| {{{1stappearance}}}
|-
| '''Game version'''†
| {{{gameversion}}}
|-
| '''Death message'''
| ''{{{deathmessage}}}''
|-
| colspan=&quot;2&quot; style=&quot;border-top:1px solid #888;font-size:7pt&quot; |† The data files for monsters that appear only in the registered version of Quake reside in pak1.pak rather than pak0.pak.
|-
|}
|}</text>
      <sha1>r859k7f7enotyzhh8su1ozr50mq1s5i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2799</id>
      <parentid>2797</parentid>
      <timestamp>2013-04-07T10:55:26Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>testing manual text if (probably won't work!)</comment>
      <text xml:space="preserve" bytes="737">{| class=&quot;wikitable&quot; width=&quot;300&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{name}}}'''
|-
|
{|
| colspan=&quot;2&quot; |
&lt;center&gt;
[[file:{{{image}}}|thumb|center|300px|alt={{{name}}}]]
{{if#: {{{manualtext}}} | ''&quot;{{{manualtext}}}&quot;'' }}
&lt;/center&gt;
|-
| width=&quot;120&quot; | '''Health'''
| {{{health}}}
|-
| '''Attacks'''
| {{{attacks}}}
|-
| '''Drop''' 
| {{{drop}}}
|-
| '''1st appearance'''
| {{{1stappearance}}}
|-
| '''Game version'''†
| {{{gameversion}}}
|-
| '''Death message'''
| ''{{{deathmessage}}}''
|-
| colspan=&quot;2&quot; style=&quot;border-top:1px solid #888;font-size:7pt&quot; |† The data files for monsters that appear only in the registered version of Quake reside in pak1.pak rather than pak0.pak.
|-
|}
|}</text>
      <sha1>egplxy4qjg6jks7iq4wcrswz69nbcxb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2800</id>
      <parentid>2799</parentid>
      <timestamp>2013-04-07T10:55:57Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>tweaking if</comment>
      <text xml:space="preserve" bytes="737">{| class=&quot;wikitable&quot; width=&quot;300&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{name}}}'''
|-
|
{|
| colspan=&quot;2&quot; |
&lt;center&gt;
[[file:{{{image}}}|thumb|center|300px|alt={{{name}}}]]
{{#if: {{{manualtext}}} | ''&quot;{{{manualtext}}}&quot;'' }}
&lt;/center&gt;
|-
| width=&quot;120&quot; | '''Health'''
| {{{health}}}
|-
| '''Attacks'''
| {{{attacks}}}
|-
| '''Drop''' 
| {{{drop}}}
|-
| '''1st appearance'''
| {{{1stappearance}}}
|-
| '''Game version'''†
| {{{gameversion}}}
|-
| '''Death message'''
| ''{{{deathmessage}}}''
|-
| colspan=&quot;2&quot; style=&quot;border-top:1px solid #888;font-size:7pt&quot; |† The data files for monsters that appear only in the registered version of Quake reside in pak1.pak rather than pak0.pak.
|-
|}
|}</text>
      <sha1>rftuoy8dl6q8rtl6ppguxy2cfyzvwkp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2855</id>
      <parentid>2800</parentid>
      <timestamp>2013-04-08T14:55:08Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>fixed if</comment>
      <text xml:space="preserve" bytes="738">{| class=&quot;wikitable&quot; width=&quot;300&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{name}}}'''
|-
|
{|
| colspan=&quot;2&quot; |
&lt;center&gt;
[[file:{{{image}}}|thumb|center|300px|alt={{{name}}}]]
{{#if: {{{manualtext|}}} | ''&quot;{{{manualtext}}}&quot;'' }}
&lt;/center&gt;
|-
| width=&quot;120&quot; | '''Health'''
| {{{health}}}
|-
| '''Attacks'''
| {{{attacks}}}
|-
| '''Drop''' 
| {{{drop}}}
|-
| '''1st appearance'''
| {{{1stappearance}}}
|-
| '''Game version'''†
| {{{gameversion}}}
|-
| '''Death message'''
| ''{{{deathmessage}}}''
|-
| colspan=&quot;2&quot; style=&quot;border-top:1px solid #888;font-size:7pt&quot; |† The data files for monsters that appear only in the registered version of Quake reside in pak1.pak rather than pak0.pak.
|-
|}
|}</text>
      <sha1>7mjzpsfos6yjay0xpcgcfyd8jq8jlqe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2937</id>
      <parentid>2855</parentid>
      <timestamp>2013-05-04T15:08:19Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <comment>added gib threshold entry</comment>
      <text xml:space="preserve" bytes="785">{| class=&quot;wikitable&quot; width=&quot;300&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{name}}}'''
|-
|
{|
| colspan=&quot;2&quot; |
&lt;center&gt;
[[file:{{{image}}}|thumb|center|300px|alt={{{name}}}]]
{{#if: {{{manualtext|}}} | ''&quot;{{{manualtext}}}&quot;'' }}
&lt;/center&gt;
|-
| width=&quot;120&quot; | '''Health'''
| {{{health}}}
|-
| '''[[Gib]] threshold'''
| {{{gibthresh}}}
|-
| '''Attacks'''
| {{{attacks}}}
|-
| '''Drop''' 
| {{{drop}}}
|-
| '''1st appearance'''
| {{{1stappearance}}}
|-
| '''Game version'''†
| {{{gameversion}}}
|-
| '''Death message'''
| ''{{{deathmessage}}}''
|-
| colspan=&quot;2&quot; style=&quot;border-top:1px solid #888;font-size:7pt&quot; |† The data files for monsters that appear only in the registered version of Quake reside in pak1.pak rather than pak0.pak.
|-
|}
|}</text>
      <sha1>g6nypgawh59ohlkvnnlla6jjiszje5s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Infobox Network Protocol</title>
    <ns>10</ns>
    <id>559</id>
    <revision>
      <id>1445</id>
      <timestamp>2009-11-16T01:43:46Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>New page: __NOTOC__ {| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot; |+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{name}}}''' |- |'''Version:''' || {{{version}}} |- |'''Base:''' || {{{...</comment>
      <text xml:space="preserve" bytes="270">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{name}}}'''
|-
|'''Version:''' || {{{version}}}
|-
|'''Base:''' || {{{base}}}
|-
|'''Clients:''' || {{{clients}}}
|-
|'''Servers:''' || {{{servers}}}
|}</text>
      <sha1>73ies02waamfai5chy4y2kdyqww3oni</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1447</id>
      <parentid>1445</parentid>
      <timestamp>2009-11-16T01:46:37Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="260">{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{name}}}'''
|-
|'''Version:''' || {{{version}}}
|-
|'''Base:''' || {{{base}}}
|-
|'''Clients:''' || {{{clients}}}
|-
|'''Servers:''' || {{{servers}}}
|}</text>
      <sha1>743uhvr90p0c644cbm13mxysppd78d0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Infobox Project</title>
    <ns>10</ns>
    <id>382</id>
    <revision>
      <id>647</id>
      <timestamp>2008-04-21T20:57:14Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <comment>New page: __NOTOC__ {| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot; |+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{name}}}''' |- |'''Author:''' || {{{author}}} |- |'''License:''' || {{...</comment>
      <text xml:space="preserve" bytes="340">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{name}}}'''
|-
|'''Author:''' || {{{author}}}
|-
|'''License:''' || {{{based-on}}}
|-
|'''First release:''' || {{{first-release}}}
|-
|'''Newest release:''' || {{{newest-release}}}
|-
|'''Website:''' || {{{website}}}
|-
|}</text>
      <sha1>3a85958dqu3qd8zj8as8b8kho9egqww</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>649</id>
      <parentid>647</parentid>
      <timestamp>2008-04-21T20:58:45Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <text xml:space="preserve" bytes="373">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{name}}}'''
|-
|'''Author:''' || {{{author}}}
|-
|'''License:''' || {{{license}}}
|-
|'''Engine:''' || {{{engine}}}
|-
|'''First release:''' || {{{first-release}}}
|-
|'''Newest release:''' || {{{newest-release}}}
|-
|'''Website:''' || {{{website}}}
|-
|}</text>
      <sha1>361c9yx9f1hnsenaerxvk9tu8qjzyrx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Infobox Weapon</title>
    <ns>10</ns>
    <id>484</id>
    <revision>
      <id>986</id>
      <timestamp>2009-05-22T08:37:06Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>created</comment>
      <text xml:space="preserve" bytes="437">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{weapon}}}'''
|-
|'''Ammunition type:''' || {{{ammotype}}}
|-
|'''Ammunition usage:''' || {{{ammousage}}}
|-
|'''Shot type:''' || {{{shottype}}}
|-
|'''Damage per shot:''' || {{{dpshot}}}
|-
|'''Damage per second (max):''' || {{{dpsecond}}}
|-
|'''Range:''' || {{{range}}}
|-
|'''Cycle Time:''' || {{{cycletime}}}
|-
|}</text>
      <sha1>e2fairabtb5tpd2euyihchfqk0lqwug</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3025</id>
      <parentid>986</parentid>
      <timestamp>2013-12-17T02:31:31Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <comment>reworked the template to include more info and to look consistent with others; any feedback is welcome.</comment>
      <text xml:space="preserve" bytes="758">{| class=&quot;wikitable&quot; width=&quot;300&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{name}}}'''
|-
|
{|
| colspan=&quot;2&quot; |
&lt;center&gt;
[[file:{{{image_w}}}|thumb|center|300px|alt={{{name}}}]]
[[file:{{{image_v}}}|thumb|center|300px|alt={{{name}}}]]
{{#if: {{{manualtext|}}} | ''&quot;{{{manualtext}}}&quot;'' }}
&lt;/center&gt;
|-
| width=&quot;120&quot; | '''Ammunition type'''
| {{{ammotype}}}
|-
| '''Ammunition usage:'''
| {{{ammousage}}}
|-
| '''Shot type:'''
| {{{shottype}}}
|-
| '''Damage per shot:''' 
| {{{dpshot}}}
|-
| '''Damage per second (max):'''
| {{{dpsecond}}}
|-
| '''Range:'''
| {{{range}}}
|-
| '''Cycle Time:'''
| {{{cycletime}}}
|-
| '''First appearance:'''
| {{{1stappearance}}}
|-
| '''Obituaries:'''
| ''{{{obituary}}}''
|-
|}
|}</text>
      <sha1>sbkgmd7352lya029guefr50ay6yba5p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3026</id>
      <parentid>3025</parentid>
      <timestamp>2013-12-17T02:32:22Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="760">{| class=&quot;wikitable&quot; width=&quot;300&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{weapon}}}'''
|-
|
{|
| colspan=&quot;2&quot; |
&lt;center&gt;
[[file:{{{image_w}}}|thumb|center|300px|alt={{{name}}}]]
[[file:{{{image_v}}}|thumb|center|300px|alt={{{name}}}]]
{{#if: {{{manualtext|}}} | ''&quot;{{{manualtext}}}&quot;'' }}
&lt;/center&gt;
|-
| width=&quot;120&quot; | '''Ammunition type'''
| {{{ammotype}}}
|-
| '''Ammunition usage:'''
| {{{ammousage}}}
|-
| '''Shot type:'''
| {{{shottype}}}
|-
| '''Damage per shot:''' 
| {{{dpshot}}}
|-
| '''Damage per second (max):'''
| {{{dpsecond}}}
|-
| '''Range:'''
| {{{range}}}
|-
| '''Cycle Time:'''
| {{{cycletime}}}
|-
| '''First appearance:'''
| {{{1stappearance}}}
|-
| '''Obituaries:'''
| ''{{{obituary}}}''
|-
|}
|}</text>
      <sha1>h8xopa1ysbo3y4wcp3x2c6b6zmchncj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3027</id>
      <parentid>3026</parentid>
      <timestamp>2013-12-17T02:42:44Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <minor/>
      <comment>for several obits</comment>
      <text xml:space="preserve" bytes="926">{| class=&quot;wikitable&quot; width=&quot;300&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{weapon}}}'''
|-
|
{|
| colspan=&quot;2&quot; |
&lt;center&gt;
[[file:{{{image_w}}}|thumb|center|300px|alt={{{name}}}]]
[[file:{{{image_v}}}|thumb|center|300px|alt={{{name}}}]]
{{#if: {{{manualtext|}}} | ''&quot;{{{manualtext}}}&quot;'' }}
&lt;/center&gt;
|-
| width=&quot;120&quot; | '''Ammunition type'''
| {{{ammotype}}}
|-
| '''Ammunition usage:'''
| {{{ammousage}}}
|-
| '''Shot type:'''
| {{{shottype}}}
|-
| '''Damage per shot:''' 
| {{{dpshot}}}
|-
| '''Damage per second (max):'''
| {{{dpsecond}}}
|-
| '''Range:'''
| {{{range}}}
|-
| '''Cycle Time:'''
| {{{cycletime}}}
|-
| '''First appearance:'''
| {{{1stappearance}}}
|-
| '''Obituaries:'''
| ''{{{obituary1}}}''
|-
{{#if: {{{obituary2|}}} | || ''{{{obituary2}}}'' }}
|-
{{#if: {{{obituary3|}}} | || ''{{{obituary3}}}'' }}
|-
{{#if: {{{obituary4|}}} | || ''{{{obituary4}}}'' }}
|-
|}
|}</text>
      <sha1>4zsguu802xwau4anqbi4u3upbqm94q0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3028</id>
      <parentid>3027</parentid>
      <timestamp>2013-12-17T02:45:32Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="923">{| class=&quot;wikitable&quot; width=&quot;300&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{weapon}}}'''
|-
|
{|
| colspan=&quot;2&quot; |
&lt;center&gt;
[[file:{{{image_w}}}|thumb|center|300px|alt={{{name}}}]]
[[file:{{{image_v}}}|thumb|center|300px|alt={{{name}}}]]
{{#if: {{{manualtext|}}} | ''&quot;{{{manualtext}}}&quot;'' }}
&lt;/center&gt;
|-
| width=&quot;120&quot; | '''Ammunition type'''
| {{{ammotype}}}
|-
| '''Ammunition usage:'''
| {{{ammousage}}}
|-
| '''Shot type:'''
| {{{shottype}}}
|-
| '''Damage per shot:''' 
| {{{dpshot}}}
|-
| '''Damage per second (max):'''
| {{{dpsecond}}}
|-
| '''Range:'''
| {{{range}}}
|-
| '''Cycle Time:'''
| {{{cycletime}}}
|-
| '''First appearance:'''
| {{{1stappearance}}}
|-
| '''Obituaries:'''
| ''{{{obituary1}}}''
|-
{{#if: {{{obituary2|}}} | || ''{{{obituary2}}}'' |-}}
{{#if: {{{obituary3|}}} | || ''{{{obituary3}}}'' |-}}
{{#if: {{{obituary4|}}} | || ''{{{obituary4}}}'' |-}}
|}
|}</text>
      <sha1>epol6efm4qg2r1936y5gg8x0a6tw0pi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3029</id>
      <parentid>3028</parentid>
      <timestamp>2013-12-17T02:46:45Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="920">{| class=&quot;wikitable&quot; width=&quot;300&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{weapon}}}'''
|-
|
{|
| colspan=&quot;2&quot; |
&lt;center&gt;
[[file:{{{image_w}}}|thumb|center|300px|alt={{{name}}}]]
[[file:{{{image_v}}}|thumb|center|300px|alt={{{name}}}]]
{{#if: {{{manualtext|}}} | ''&quot;{{{manualtext}}}&quot;'' }}
&lt;/center&gt;
|-
| width=&quot;120&quot; | '''Ammunition type'''
| {{{ammotype}}}
|-
| '''Ammunition usage:'''
| {{{ammousage}}}
|-
| '''Shot type:'''
| {{{shottype}}}
|-
| '''Damage per shot:''' 
| {{{dpshot}}}
|-
| '''Damage per second (max):'''
| {{{dpsecond}}}
|-
| '''Range:'''
| {{{range}}}
|-
| '''Cycle Time:'''
| {{{cycletime}}}
|-
| '''First appearance:'''
| {{{1stappearance}}}
|-
| '''Obituaries:'''
| ''{{{obituary1}}}''
|-
{{#if: {{{obituary2|}}} | | ''{{{obituary2}}}'' |-}}
{{#if: {{{obituary3|}}} | | ''{{{obituary3}}}'' |-}}
{{#if: {{{obituary4|}}} | | ''{{{obituary4}}}'' |-}}
|}
|}</text>
      <sha1>h661h5717tf736tbxlek0whmjha89v3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3030</id>
      <parentid>3029</parentid>
      <timestamp>2013-12-17T02:49:20Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="926">{| class=&quot;wikitable&quot; width=&quot;300&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{weapon}}}'''
|-
|
{|
| colspan=&quot;2&quot; |
&lt;center&gt;
[[file:{{{image_w}}}|thumb|center|300px|alt={{{name}}}]]
[[file:{{{image_v}}}|thumb|center|300px|alt={{{name}}}]]
{{#if: {{{manualtext|}}} | ''&quot;{{{manualtext}}}&quot;'' }}
&lt;/center&gt;
|-
| width=&quot;120&quot; | '''Ammunition type'''
| {{{ammotype}}}
|-
| '''Ammunition usage:'''
| {{{ammousage}}}
|-
| '''Shot type:'''
| {{{shottype}}}
|-
| '''Damage per shot:''' 
| {{{dpshot}}}
|-
| '''Damage per second (max):'''
| {{{dpsecond}}}
|-
| '''Range:'''
| {{{range}}}
|-
| '''Cycle Time:'''
| {{{cycletime}}}
|-
| '''First appearance:'''
| {{{1stappearance}}}
|-
| '''Obituaries:'''
| ''{{{obituary1}}}''
|-
{{#if: {{{obituary2|}}} | || ''{{{obituary2}}}'' }}
|-
{{#if: {{{obituary3|}}} | || ''{{{obituary3}}}'' }}
|-
{{#if: {{{obituary4|}}} | || ''{{{obituary4}}}'' }}
|-
|}
|}</text>
      <sha1>4zsguu802xwau4anqbi4u3upbqm94q0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3031</id>
      <parentid>3030</parentid>
      <timestamp>2013-12-17T02:51:54Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="932">{| class=&quot;wikitable&quot; width=&quot;300&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{weapon}}}'''
|-
|
{|
| colspan=&quot;2&quot; |
&lt;center&gt;
[[file:{{{image_w}}}|thumb|center|300px|alt={{{name}}}]]
[[file:{{{image_v}}}|thumb|center|300px|alt={{{name}}}]]
{{#if: {{{manualtext|}}} | ''&quot;{{{manualtext}}}&quot;'' }}
&lt;/center&gt;
|-
| width=&quot;120&quot; | '''Ammunition type'''
| {{{ammotype}}}
|-
| '''Ammunition usage:'''
| {{{ammousage}}}
|-
| '''Shot type:'''
| {{{shottype}}}
|-
| '''Damage per shot:''' 
| {{{dpshot}}}
|-
| '''Damage per second (max):'''
| {{{dpsecond}}}
|-
| '''Range:'''
| {{{range}}}
|-
| '''Cycle Time:'''
| {{{cycletime}}}
|-
| '''First appearance:'''
| {{{1stappearance}}}
|-
| '''Obituaries:'''
| ''{{{obituary1}}}''
|-
{{#if: {{{obituary2|}}} | | || ''{{{obituary2}}}'' }}
|-
{{#if: {{{obituary3|}}} | | || ''{{{obituary3}}}'' }}
|-
{{#if: {{{obituary4|}}} | | || ''{{{obituary4}}}'' }}
|-
|}
|}</text>
      <sha1>3ynu5ouvfu71ozft0eb4y1qf2ywazl4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3032</id>
      <parentid>3031</parentid>
      <timestamp>2013-12-17T03:36:13Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <comment>i'm sorry i am a moron</comment>
      <text xml:space="preserve" bytes="1001">{| class=&quot;wikitable&quot; width=&quot;300&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{weapon}}}'''
|-
|
{|
| colspan=&quot;2&quot; |
&lt;center&gt;
[[file:{{{image_w}}}|thumb|center|300px|alt={{{name}}}]]
[[file:{{{image_v}}}|thumb|center|300px|alt={{{name}}}]]
{{#if: {{{manualtext|}}} | ''&quot;{{{manualtext}}}&quot;'' }}
&lt;/center&gt;
|-
| width=&quot;120&quot; | '''Ammunition type'''
| {{{ammotype}}}
|-
| '''Ammunition usage:'''
| {{{ammousage}}}
|-
| '''Shot type:'''
| {{{shottype}}}
|-
| '''Damage per shot:''' 
| {{{dpshot}}}
|-
| '''Damage per second (max):'''
| {{{dpsecond}}}
|-
| '''Range:'''
| {{{range}}}
|-
| '''Cycle Time:'''
| {{{cycletime}}}
|-
| '''First appearance:'''
| {{{1stappearance}}}
|-
| '''Obituaries:'''
| ''{{{obituary1}}}''
|-
{{#if: {{{obituary2|}}} | &lt;tr&gt;&lt;td&gt;&lt;/td&gt; &lt;td&gt;''{{{obituary2}}}''&lt;/td&gt;&lt;/tr&gt; | }}
{{#if: {{{obituary3|}}} | &lt;tr&gt;&lt;td&gt;&lt;/td&gt; &lt;td&gt;''{{{obituary3}}}''&lt;/td&gt;&lt;/tr&gt; | }}
{{#if: {{{obituary4|}}} | &lt;tr&gt;&lt;td&gt;&lt;/td&gt; &lt;td&gt;''{{{obituary4}}}''&lt;/td&gt;&lt;/tr&gt; | }}
|-
|}
|}</text>
      <sha1>77p7fetqwrdwg8wpiivf0age3hznupz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3033</id>
      <parentid>3032</parentid>
      <timestamp>2013-12-17T03:43:32Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1054">{| class=&quot;wikitable&quot; width=&quot;300&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{weapon}}}'''
|-
|
{|
| colspan=&quot;2&quot; |
&lt;center&gt;
[[file:{{{image_w}}}|thumb|center|300px|alt={{{name}}}]]
[[file:{{{image_v}}}|thumb|center|300px|alt={{{name}}}]]
{{#if: {{{manualtext|}}} | ''&quot;{{{manualtext}}}&quot;'' }}
&lt;/center&gt;
|-
| width=&quot;120&quot; | '''Ammunition type'''
| {{{ammotype}}}
|-
| '''Ammunition usage:'''
| {{{ammousage}}}
|-
| '''Shot type:'''
| {{{shottype}}}
|-
| '''Damage per shot:''' 
| {{{dpshot}}}
|-
| '''Damage per second (max):'''
| {{{dpsecond}}}
|-
| '''Range:'''
| {{{range}}}
|-
| '''Cycle Time:'''
| {{{cycletime}}}
|-
| '''First appearance:'''
| {{{1stappearance}}}
|-
| '''Obituaries:'''
| ''{{{obituary1}}}''
|-
{{#if: {{{obituary2|}}} | &lt;tr&gt;&lt;td&gt;&lt;/td&gt; &lt;td&gt;''{{{obituary2}}}''&lt;/td&gt;&lt;/tr&gt; | }}
{{#if: {{{obituary3|}}} | &lt;tr&gt;&lt;td&gt;&lt;/td&gt; &lt;td&gt;''{{{obituary3}}}''&lt;/td&gt;&lt;/tr&gt; | }}
{{#if: {{{obituary4|}}} | &lt;tr&gt;&lt;td&gt;&lt;/td&gt; &lt;td&gt;''{{{obituary4}}}''&lt;/td&gt;&lt;/tr&gt; | }}
|}
|}

{{Infobox Weapon|obituary1=dsfsdf|obituary2=asdasdas}}</text>
      <sha1>t8z788c8dhd4z20hi4wgsp2h849o9km</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3034</id>
      <parentid>3033</parentid>
      <timestamp>2013-12-17T03:43:44Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="998">{| class=&quot;wikitable&quot; width=&quot;300&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{weapon}}}'''
|-
|
{|
| colspan=&quot;2&quot; |
&lt;center&gt;
[[file:{{{image_w}}}|thumb|center|300px|alt={{{name}}}]]
[[file:{{{image_v}}}|thumb|center|300px|alt={{{name}}}]]
{{#if: {{{manualtext|}}} | ''&quot;{{{manualtext}}}&quot;'' }}
&lt;/center&gt;
|-
| width=&quot;120&quot; | '''Ammunition type'''
| {{{ammotype}}}
|-
| '''Ammunition usage:'''
| {{{ammousage}}}
|-
| '''Shot type:'''
| {{{shottype}}}
|-
| '''Damage per shot:''' 
| {{{dpshot}}}
|-
| '''Damage per second (max):'''
| {{{dpsecond}}}
|-
| '''Range:'''
| {{{range}}}
|-
| '''Cycle Time:'''
| {{{cycletime}}}
|-
| '''First appearance:'''
| {{{1stappearance}}}
|-
| '''Obituaries:'''
| ''{{{obituary1}}}''
|-
{{#if: {{{obituary2|}}} | &lt;tr&gt;&lt;td&gt;&lt;/td&gt; &lt;td&gt;''{{{obituary2}}}''&lt;/td&gt;&lt;/tr&gt; | }}
{{#if: {{{obituary3|}}} | &lt;tr&gt;&lt;td&gt;&lt;/td&gt; &lt;td&gt;''{{{obituary3}}}''&lt;/td&gt;&lt;/tr&gt; | }}
{{#if: {{{obituary4|}}} | &lt;tr&gt;&lt;td&gt;&lt;/td&gt; &lt;td&gt;''{{{obituary4}}}''&lt;/td&gt;&lt;/tr&gt; | }}
|}
|}</text>
      <sha1>e5afjk9kh6g7antjgoh22c5ryo9weug</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3035</id>
      <parentid>3034</parentid>
      <timestamp>2013-12-17T04:04:13Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1025">{| class=&quot;wikitable&quot; width=&quot;300&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{weapon}}}'''
|-
|
{|
| colspan=&quot;2&quot; |
&lt;center&gt;
[[file:{{{image_w}}}|thumb|center|300px|alt={{{name}}}]]
[[file:{{{image_v}}}|thumb|center|300px|alt={{{name}}}]]
{{#if: {{{manualtext|}}} | ''&quot;{{{manualtext}}}&quot;'' }}
&lt;/center&gt;
|-
| width=&quot;120&quot; | '''Ammunition type'''
| {{{ammotype}}}
|-
| '''Ammunition usage:'''
| {{{ammousage}}}
|-
| '''Shot type:'''
| {{{shottype}}}
|-
| '''Damage per shot:''' 
| {{{dpshot}}}
|-
| '''Damage per second (max):'''
| {{{dpsecond}}}
|-
| '''Range:'''
| {{{range}}}
|-
| '''Cycle Time:'''
| {{{cycletime}}}
|-
| '''First appearance:'''
| {{{1stappearance}}}
|-
| '''Obituaries:'''
| ''{{{obituary1}}}''
|-
{{#if: {{{obituary2|}}} | &lt;tr&gt;&lt;td&gt;&lt;/td&gt; &lt;td&gt;''{{{obituary2}}}''&lt;/td&gt;&lt;/tr&gt; | &lt;tr&gt;&lt;/tr&gt;}}
{{#if: {{{obituary3|}}} | &lt;tr&gt;&lt;td&gt;&lt;/td&gt; &lt;td&gt;''{{{obituary3}}}''&lt;/td&gt;&lt;/tr&gt; | &lt;tr&gt;&lt;/tr&gt;}}
{{#if: {{{obituary4|}}} | &lt;tr&gt;&lt;td&gt;&lt;/td&gt; &lt;td&gt;''{{{obituary4}}}''&lt;/td&gt;&lt;/tr&gt; | &lt;tr&gt;&lt;/tr&gt;}}
|}
|}</text>
      <sha1>lfbd4njymf2vyvfg8duni2k4t6w9dzf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3036</id>
      <parentid>3035</parentid>
      <timestamp>2013-12-17T04:20:35Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="983">{| class=&quot;wikitable&quot; width=&quot;300&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{weapon}}}'''
|-
|
{|
| colspan=&quot;2&quot; |
&lt;center&gt;
[[file:{{{image_w}}}|thumb|center|300px|alt={{{name}}}]]
[[file:{{{image_v}}}|thumb|center|300px|alt={{{name}}}]]
{{#if: {{{manualtext|}}} | ''&quot;{{{manualtext}}}&quot;'' }}
&lt;/center&gt;
|-
| width=&quot;120&quot; | '''Ammunition type'''
| {{{ammotype}}}
|-
| '''Ammunition usage:'''
| {{{ammousage}}}
|-
| '''Shot type:'''
| {{{shottype}}}
|-
| '''Damage per shot:''' 
| {{{dpshot}}}
|-
| '''Damage per second (max):'''
| {{{dpsecond}}}
|-
| '''Range:'''
| {{{range}}}
|-
| '''Cycle Time:'''
| {{{cycletime}}}
|-
| '''First appearance:'''
| {{{1stappearance}}}
|-
| '''Obituaries:'''
| ''{{{obituary1}}}''
|-
|{{#if: {{{obituary2|}}} | &lt;td&gt;&lt;/td&gt; &lt;td&gt;''{{{obituary2}}}''&lt;/td&gt; | }}
|-
|{{#if: {{{obituary3|}}} | &lt;td&gt;&lt;/td&gt; &lt;td&gt;''{{{obituary3}}}''&lt;/td&gt; | }}
|-
|{{#if: {{{obituary4|}}} | &lt;td&gt;&lt;/td&gt; &lt;td&gt;''{{{obituary4}}}''&lt;/td&gt; | }}
|-
|}
|}</text>
      <sha1>5bywzoorwdl3jv1n2nlmxkmhqedlscp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3037</id>
      <parentid>3036</parentid>
      <timestamp>2013-12-17T04:25:39Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <comment>it doesn't seem to work in any way</comment>
      <text xml:space="preserve" bytes="1006">{| class=&quot;wikitable&quot; width=&quot;300&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{weapon}}}'''
|-
|
{|
| colspan=&quot;2&quot; |
&lt;center&gt;
[[file:{{{image_w}}}|thumb|center|300px|alt={{{name}}}]]
[[file:{{{image_v}}}|thumb|center|300px|alt={{{name}}}]]
{{#if: {{{manualtext|}}} | ''&quot;{{{manualtext}}}&quot;'' }}
&lt;/center&gt;
|-
| width=&quot;120&quot; | '''Ammunition type'''
| {{{ammotype}}}
|-
| '''Ammunition usage:'''
| {{{ammousage}}}
|-
| '''Shot type:'''
| {{{shottype}}}
|-
| '''Damage per shot:''' 
| {{{dpshot}}}
|-
| '''Damage per second (max):'''
| {{{dpsecond}}}
|-
| '''Range:'''
| {{{range}}}
|-
| '''Cycle Time:'''
| {{{cycletime}}}
|-
| '''First appearance:'''
| {{{1stappearance}}}
|-
| '''Obituaries:'''
| ''{{{obituary1}}}''
|- {{#if: {{{obituary2|}}} | | style=&quot;display: none;&quot; }}
| || ''{{{obituary2}}}''
|- {{#if: {{{obituary3|}}} | | style=&quot;display: none;&quot; }}
| || ''{{{obituary3}}}''
|- {{#if: {{{obituary4|}}} | | style=&quot;display: none;&quot;}}
| || ''{{{obituary4}}}''
|-
|}
|}</text>
      <sha1>nq38msdkuz89xjp9af0qqh50647ywer</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3050</id>
      <parentid>3037</parentid>
      <timestamp>2013-12-18T02:46:08Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <comment>if we don't have a worldmodel pic, don't show it</comment>
      <text xml:space="preserve" bytes="1077">{| class=&quot;wikitable&quot; width=&quot;300&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; | '''{{{weapon}}}'''
|-
|
{|
| colspan=&quot;2&quot; {{#if: {{{image_w|}}} | | style=&quot;display: none;&quot; }} |
[[file:{{{image_w}}}|thumb|center|300px|alt={{{name}}}]]
|-
| colspan=&quot;2&quot; |
&lt;center&gt;
[[file:{{{image_v}}}|thumb|center|300px|alt={{{name}}}]]
{{#if: {{{manualtext|}}} | ''&quot;{{{manualtext}}}&quot;'' }}
&lt;/center&gt;
|-
| width=&quot;120&quot; | '''Ammunition type'''
| {{{ammotype}}}
|-
| '''Ammunition usage:'''
| {{{ammousage}}}
|-
| '''Shot type:'''
| {{{shottype}}}
|-
| '''Damage per shot:''' 
| {{{dpshot}}}
|-
| '''Damage per second (max):'''
| {{{dpsecond}}}
|-
| '''Range:'''
| {{{range}}}
|-
| '''Cycle Time:'''
| {{{cycletime}}}
|-
| '''First appearance:'''
| {{{1stappearance}}}
|-
| '''Obituaries:'''
| ''{{{obituary1}}}''
|- {{#if: {{{obituary2|}}} | | style=&quot;display: none;&quot; }}
| || ''{{{obituary2}}}''
|- {{#if: {{{obituary3|}}} | | style=&quot;display: none;&quot; }}
| || ''{{{obituary3}}}''
|- {{#if: {{{obituary4|}}} | | style=&quot;display: none;&quot;}}
| || ''{{{obituary4}}}''
|-
|}
|}</text>
      <sha1>2i34n9wgf1kgspeonv8k8w8t7dogx16</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Infobox entity</title>
    <ns>10</ns>
    <id>849</id>
    <revision>
      <id>2467</id>
      <timestamp>2013-03-29T10:50:55Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>just adding a starter page for the entity infobox. Not totally thought it out yet...</comment>
      <text xml:space="preserve" bytes="443">{| class=&quot;wikitable&quot;


|}

&lt;!-- NOTES
Things to add to the table:
classname | name used by Quake and mapping tools, e.g. monster_shalrath
(common name) | name used commonly, e.g. Vore
[optional: image] | an image of the entity. Not always appropriate
entity type | point or solid/brush entity
entity class | e.g. light, monster, func, item...
quake-C file | link to the Quake-C page
precaches | a list of all files precached by this entity
--&gt;</text>
      <sha1>npbzl0dqsd8jw2dxu4scu1128lbpck6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2488</id>
      <parentid>2467</parentid>
      <timestamp>2013-03-29T11:35:17Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>saved test only (not properly templated! not ready for use yet!)</comment>
      <text xml:space="preserve" bytes="1403">{| class=&quot;wikitable&quot; style=&quot;float:right; margin:4px&quot;
! '''monster_shalrath'''&lt;br&gt;&lt;center&gt;([[Vore]])&lt;/center&gt;
|-
| [[File:Shalrath.gif|thumb|center|320px]]
|-
|
{|
| width=&quot;80&quot; | '''Entity type'''
| point
|-
| '''Entity class'''
| monster
|-
| '''Size'''
| 64 x 64 x 72
|-
| '''Quake-C'''
| [[shalrath.qc]]
|-
| valign=&quot;top&quot; | '''Precaches'''
| 
* progs/shalrath.mdl
* progs/h_shal.mdl
* progs/v_spike.mdl
* shalrath/attack.wav
* shalrath/attack2.wav
* shalrath/death.wav
* shalrath/idle.wav
* shalrath/pain.wav
* shalrath/sight.wav
|}
|}

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

&lt;!-- NOTES
Things to add to the table:
classname | name used by Quake and mapping tools, e.g. monster_shalrath
(common name) | name used commonly, e.g. Vore
[optional: image] | an image of the entity. Not always appropriate
entity type | point or solid/brush entity
entity class | e.g. light, monster, func, item...
quake-C file | link to the Quake-C page
precaches | a list of all files precached by this entity
--&gt;</text>
      <sha1>d3uu4mxssb82dtn8yf70anmvspsipng</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2489</id>
      <parentid>2488</parentid>
      <timestamp>2013-03-29T11:38:49Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>removed image because it took up too much space</comment>
      <text xml:space="preserve" bytes="1357">{| class=&quot;wikitable&quot; style=&quot;float:right; margin:4px&quot;
! '''monster_shalrath'''&lt;br&gt;&lt;center&gt;([[Vore]])&lt;/center&gt;
|-
|
{|
| width=&quot;90&quot; | '''Entity type'''
| point
|-
| '''Entity class'''
| monster
|-
| '''Size'''
| 64 x 64 x 72
|-
| '''Quake-C'''
| [[shalrath.qc]]
|-
| valign=&quot;top&quot; | '''Precaches'''
| 
* progs/shalrath.mdl
* progs/h_shal.mdl
* progs/v_spike.mdl
* shalrath/attack.wav
* shalrath/attack2.wav
* shalrath/death.wav
* shalrath/idle.wav
* shalrath/pain.wav
* shalrath/sight.wav
|}
|}

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

&lt;!-- NOTES
Things to add to the table:
classname | name used by Quake and mapping tools, e.g. monster_shalrath
(common name) | name used commonly, e.g. Vore
[optional: image] | an image of the entity. Not always appropriate
entity type | point or solid/brush entity
entity class | e.g. light, monster, func, item...
quake-C file | link to the Quake-C page
precaches | a list of all files precached by this entity
--&gt;</text>
      <sha1>o258py0qpobccqhtnt3pn47dsr0976d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2492</id>
      <parentid>2489</parentid>
      <timestamp>2013-03-29T12:25:38Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>templated (make sure to remove the commented shite!)</comment>
      <text xml:space="preserve" bytes="1762">{| class=&quot;wikitable&quot; style=&quot;float:right; margin:4px&quot;
!
'''{{{classname}}}'''
{{#if: {{{commonname}}} | &lt;br&gt;&lt;center&gt;({{{commonname}}})&lt;/center&gt; }}
|-
|
{|
| width=&quot;90&quot; | '''Entity type'''
| {{{type}}}
|-
| '''Entity class'''
| {{{class}}}
|-
| '''Dimensions'''
| {{{dimensions}}}
|-
| '''Quake-C'''
| [[{{{quakec}}}]]
|-
| valign=&quot;top&quot; | '''Precaches'''
| {{{precaches}}}
|}
|}

&lt;!-- TEST! REMOVE THIS!
&lt;br&gt;


{| class=&quot;wikitable&quot; style=&quot;float:right; margin:4px&quot;
! '''monster_shalrath'''&lt;br&gt;&lt;center&gt;([[Vore]])&lt;/center&gt;
|-
|
{|
| width=&quot;90&quot; | '''Entity type'''
| point
|-
| '''Entity class'''
| monster
|-
| '''Size'''
| 64 x 64 x 72
|-
| '''Quake-C'''
| [[shalrath.qc]]
|-
| valign=&quot;top&quot; | '''Precaches'''
| 
* progs/shalrath.mdl
* progs/h_shal.mdl
* progs/v_spike.mdl
* shalrath/attack.wav
* shalrath/attack2.wav
* shalrath/death.wav
* shalrath/idle.wav
* shalrath/pain.wav
* shalrath/sight.wav
|}
|}

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

 NOTES
Things to add to the table:
classname | name used by Quake and mapping tools, e.g. monster_shalrath
(common name) | name used commonly, e.g. Vore
[optional: image] | an image of the entity. Not always appropriate
entity type | point or solid/brush entity
entity class | e.g. light, monster, func, item...
quake-C file | link to the Quake-C page
precaches | a list of all files precached by this entity
--&gt;</text>
      <sha1>audr60dp25rzhjua6uesnimin38fpd6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2493</id>
      <parentid>2492</parentid>
      <timestamp>2013-03-29T12:28:18Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>Than moved page [[Template:Infobox Entity]] to [[Template:Infobox entity]] without leaving a redirect: FUCK WIKI CAPITALISATION STANDARDS</comment>
      <text xml:space="preserve" bytes="1762">{| class=&quot;wikitable&quot; style=&quot;float:right; margin:4px&quot;
!
'''{{{classname}}}'''
{{#if: {{{commonname}}} | &lt;br&gt;&lt;center&gt;({{{commonname}}})&lt;/center&gt; }}
|-
|
{|
| width=&quot;90&quot; | '''Entity type'''
| {{{type}}}
|-
| '''Entity class'''
| {{{class}}}
|-
| '''Dimensions'''
| {{{dimensions}}}
|-
| '''Quake-C'''
| [[{{{quakec}}}]]
|-
| valign=&quot;top&quot; | '''Precaches'''
| {{{precaches}}}
|}
|}

&lt;!-- TEST! REMOVE THIS!
&lt;br&gt;


{| class=&quot;wikitable&quot; style=&quot;float:right; margin:4px&quot;
! '''monster_shalrath'''&lt;br&gt;&lt;center&gt;([[Vore]])&lt;/center&gt;
|-
|
{|
| width=&quot;90&quot; | '''Entity type'''
| point
|-
| '''Entity class'''
| monster
|-
| '''Size'''
| 64 x 64 x 72
|-
| '''Quake-C'''
| [[shalrath.qc]]
|-
| valign=&quot;top&quot; | '''Precaches'''
| 
* progs/shalrath.mdl
* progs/h_shal.mdl
* progs/v_spike.mdl
* shalrath/attack.wav
* shalrath/attack2.wav
* shalrath/death.wav
* shalrath/idle.wav
* shalrath/pain.wav
* shalrath/sight.wav
|}
|}

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

 NOTES
Things to add to the table:
classname | name used by Quake and mapping tools, e.g. monster_shalrath
(common name) | name used commonly, e.g. Vore
[optional: image] | an image of the entity. Not always appropriate
entity type | point or solid/brush entity
entity class | e.g. light, monster, func, item...
quake-C file | link to the Quake-C page
precaches | a list of all files precached by this entity
--&gt;</text>
      <sha1>audr60dp25rzhjua6uesnimin38fpd6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2494</id>
      <parentid>2493</parentid>
      <timestamp>2013-03-29T12:51:38Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>removed auto qc link</comment>
      <text xml:space="preserve" bytes="1758">{| class=&quot;wikitable&quot; style=&quot;float:right; margin:4px&quot;
!
'''{{{classname}}}'''
{{#if: {{{commonname}}} | &lt;br&gt;&lt;center&gt;({{{commonname}}})&lt;/center&gt; }}
|-
|
{|
| width=&quot;90&quot; | '''Entity type'''
| {{{type}}}
|-
| '''Entity class'''
| {{{class}}}
|-
| '''Dimensions'''
| {{{dimensions}}}
|-
| '''Quake-C'''
| {{{quakec}}}
|-
| valign=&quot;top&quot; | '''Precaches'''
| {{{precaches}}}
|}
|}

&lt;!-- TEST! REMOVE THIS!
&lt;br&gt;


{| class=&quot;wikitable&quot; style=&quot;float:right; margin:4px&quot;
! '''monster_shalrath'''&lt;br&gt;&lt;center&gt;([[Vore]])&lt;/center&gt;
|-
|
{|
| width=&quot;90&quot; | '''Entity type'''
| point
|-
| '''Entity class'''
| monster
|-
| '''Size'''
| 64 x 64 x 72
|-
| '''Quake-C'''
| [[shalrath.qc]]
|-
| valign=&quot;top&quot; | '''Precaches'''
| 
* progs/shalrath.mdl
* progs/h_shal.mdl
* progs/v_spike.mdl
* shalrath/attack.wav
* shalrath/attack2.wav
* shalrath/death.wav
* shalrath/idle.wav
* shalrath/pain.wav
* shalrath/sight.wav
|}
|}

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

 NOTES
Things to add to the table:
classname | name used by Quake and mapping tools, e.g. monster_shalrath
(common name) | name used commonly, e.g. Vore
[optional: image] | an image of the entity. Not always appropriate
entity type | point or solid/brush entity
entity class | e.g. light, monster, func, item...
quake-C file | link to the Quake-C page
precaches | a list of all files precached by this entity
--&gt;</text>
      <sha1>m988i9cgmhaofti4vmtkbavkgttuawp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2496</id>
      <parentid>2494</parentid>
      <timestamp>2013-03-29T12:56:00Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>removed comment crap</comment>
      <text xml:space="preserve" bytes="372">{| class=&quot;wikitable&quot; style=&quot;float:right; margin:4px&quot;
!
'''{{{classname}}}'''
{{#if: {{{commonname}}} | &lt;br&gt;&lt;center&gt;({{{commonname}}})&lt;/center&gt; }}
|-
|
{|
| width=&quot;90&quot; | '''Entity type'''
| {{{type}}}
|-
| '''Entity class'''
| {{{class}}}
|-
| '''Dimensions'''
| {{{dimensions}}}
|-
| '''Quake-C'''
| {{{quakec}}}
|-
| valign=&quot;top&quot; | '''Precaches'''
| {{{precaches}}}
|}
|}</text>
      <sha1>64igqwbpeatjro5txdre2yl01r14dxi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2668</id>
      <parentid>2496</parentid>
      <timestamp>2013-03-29T14:37:30Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>fixed line break</comment>
      <text xml:space="preserve" bytes="371">{| class=&quot;wikitable&quot; style=&quot;float:right; margin:4px&quot;
!
'''{{{classname}}}'''{{#if: {{{commonname}}} | &lt;br&gt;&lt;center&gt;({{{commonname}}})&lt;/center&gt; }}
|-
|
{|
| width=&quot;90&quot; | '''Entity type'''
| {{{type}}}
|-
| '''Entity class'''
| {{{class}}}
|-
| '''Dimensions'''
| {{{dimensions}}}
|-
| '''Quake-C'''
| {{{quakec}}}
|-
| valign=&quot;top&quot; | '''Precaches'''
| {{{precaches}}}
|}
|}</text>
      <sha1>t8l1hctlgzoprjlisw9w5jaidq1m7cr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2765</id>
      <parentid>2668</parentid>
      <timestamp>2013-04-06T10:39:51Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>trying to get the list to display properly</comment>
      <text xml:space="preserve" bytes="380">{| class=&quot;wikitable&quot; style=&quot;float:right; margin:4px&quot;
!
'''{{{classname}}}'''{{#if: {{{commonname}}} | &lt;br&gt;&lt;center&gt;({{{commonname}}})&lt;/center&gt; }}
|-
|
{|
| width=&quot;90&quot; | '''Entity type'''
| {{{type}}}
|-
| '''Entity class'''
| {{{class}}}
|-
| '''Dimensions'''
| {{{dimensions}}}
|-
| '''Quake-C'''
| {{{quakec}}}
|-
| valign=&quot;top&quot; | '''Precaches'''
| &lt;ul&gt;{{{precaches}}}&lt;/ul&gt;
|}
|}</text>
      <sha1>8gvhe7a0tqv5lx0soh2t76ys1omsin1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2766</id>
      <parentid>2765</parentid>
      <timestamp>2013-04-06T10:42:41Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>fuck wiki markup. ditching the list</comment>
      <text xml:space="preserve" bytes="371">{| class=&quot;wikitable&quot; style=&quot;float:right; margin:4px&quot;
!
'''{{{classname}}}'''{{#if: {{{commonname}}} | &lt;br&gt;&lt;center&gt;({{{commonname}}})&lt;/center&gt; }}
|-
|
{|
| width=&quot;90&quot; | '''Entity type'''
| {{{type}}}
|-
| '''Entity class'''
| {{{class}}}
|-
| '''Dimensions'''
| {{{dimensions}}}
|-
| '''Quake-C'''
| {{{quakec}}}
|-
| valign=&quot;top&quot; | '''Precaches'''
| {{{precaches}}}
|}
|}</text>
      <sha1>t8l1hctlgzoprjlisw9w5jaidq1m7cr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Infobox map</title>
    <ns>10</ns>
    <id>950</id>
    <revision>
      <id>2672</id>
      <timestamp>2013-03-29T16:09:59Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>testing &quot;improved&quot; template</comment>
      <text xml:space="preserve" bytes="656">{| class=&quot;wikitable&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; |'''{{{title}}}'''
|-
|
{|
| colspan=&quot;2&quot; | [[file:{{{image}}}|thumb|center|320px|alt={{{filename}}} - {{{title}}}]]
|-
| width=&quot;100px&quot; |'''Filename''' || {{{filename}}}
|-
|'''Author'''
| {{{author}}}
|-
| ! valign=&quot;top&quot; | '''Supported modes'''
| 
{{#if: {{{modesp}}} | [[Single-player]]&lt;br&gt;}}
{{#if: {{{modecoop}}} | [[Coop]]&lt;br&gt;}}
{{#if: {{{modedm}}} | [[Deathmatch]]}}
|-
{{#if: {{{modesp}}} |
|'''[[Monsters]]'''
| {{{monsters}}}
|-
|'''[[Secrets]]'''
| {{{secrets}}}
}}
|-
{{#if: {{{cdtrack}}} |
|'''[[Soundtrack|CD Track]]'''
| {{{cdtrack}}}
}}
|}
|}</text>
      <sha1>fy5v9e9h0c0ozz1j32ttc6bvfoplcww</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2673</id>
      <parentid>2672</parentid>
      <timestamp>2013-03-29T16:28:00Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>test</comment>
      <text xml:space="preserve" bytes="725">{| class=&quot;wikitable&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; |'''{{{title}}}'''
|-
|
{|
| colspan=&quot;2&quot; | [[file:{{{image}}}|thumb|center|320px|alt={{{filename}}} - {{{title}}}]]
|-
| width=&quot;100px&quot; |'''Filename''' || {{{filename}}}
|-
|'''Author'''
| {{{author}}}
|-
| ! valign=&quot;top&quot; | '''Supported modes'''
| 
{{#if: {{{modesp}}} | [[Single-player]]&lt;br&gt;}}
{{#if: {{{modecoop}}} | [[Coop]]&lt;br&gt;}}
{{#if: {{{modedm}}} | [[Deathmatch]]}}
|-
| {{#if: {{{modesp}}}
| &lt;tr&gt;&lt;td&gt;'''[[Monsters]]'''&lt;/td&gt;&lt;td&gt;{{{monsters}}}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;'''[[Secrets]]'''&lt;/td&gt;&lt;td&gt;{{{secrets}}}&lt;/td&gt;&lt;/tr&gt; }}
|-
| {{#if: {{{cdtrack}}}
| &lt;tr&gt;&lt;td&gt;'''[[Soundtrack|CD Track]]'''&lt;/td&gt;&lt;td&gt;{{{cdtrack}}}&lt;/td&gt;&lt;/tr&gt; }}
|}
|}</text>
      <sha1>fqukfwrh9g595215w8b7c0zh0t96hx3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2674</id>
      <parentid>2673</parentid>
      <timestamp>2013-03-29T16:39:50Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>test</comment>
      <text xml:space="preserve" bytes="697">{| class=&quot;wikitable&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; |'''{{{title}}}'''
|-
|
{|
| colspan=&quot;2&quot; | [[file:{{{image}}}|thumb|center|320px|alt={{{filename}}} - {{{title}}}]]
|-
| width=&quot;100px&quot; |'''Filename'''
| {{{filename}}}
|-
|'''Author'''
| {{{author}}}
|-
| ! valign=&quot;top&quot; | '''Supported modes'''
| 
{{#if: {{{modesp}}} | [[Single-player]]&lt;br&gt;}}
{{#if: {{{modecoop}}} | [[Coop]]&lt;br&gt;}}
{{#if: {{{modedm}}} | [[Deathmatch]]}}

{{#if: {{{modesp}}} |
{{|}}-
{{|}} '''[[Monsters]]'''
{{|}} {{{monsters}}}
{{|}}-
{{|}} '''[[Secrets]]'''
{{|}} {{{secrets}}} }}

{{#if: {{{cdtrack}}} |
{{|}}-
{{|}} '''[[Soundtrack|CD Track]]'''
{{|}} {{{cdtrack}}} }}

|}
|}</text>
      <sha1>3qlcemzt9idk4vwnm3gl57yq1wdpbv8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2675</id>
      <parentid>2674</parentid>
      <timestamp>2013-03-29T16:43:23Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>This might just work...</comment>
      <text xml:space="preserve" bytes="765">{| class=&quot;wikitable&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; |'''{{{title}}}'''
|-
|
{|
| colspan=&quot;2&quot; | [[file:{{{image}}}|thumb|center|320px|alt={{{filename}}} - {{{title}}}]]
|-
| width=&quot;100px&quot; |'''Filename'''
| {{{filename}}}
|-
|'''Author'''
| {{{author}}}
|-
| ! valign=&quot;top&quot; | '''Supported modes'''
| 
{{#if: {{{modesp}}} | [[Single-player]]&lt;br&gt;}}
{{#if: {{{modecoop}}} | [[Coop]]&lt;br&gt;}}
{{#if: {{{modedm}}} | [[Deathmatch]]}}
|-
| {{#if: {{{monsters}}} | '''[[Monsters]]''' }}
| {{#if: {{{monsters}}} | {{{monsters}}} }}
|-
| {{#if: {{{secrets}}} | '''[[Secrets]]''' }}
| {{#if: {{{secrets}}} | {{{secrets}}} }}
|-
| {{#if: {{{cdtrack}}} | '''[[Soundtrack|CD Track]]''' }}
| {{#if: {{{cdtrack}}} | {{{cdtrack}}} }}
|}
|}</text>
      <sha1>p7n6z4kjntbg96kr7ukirrx1ccruc43</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2676</id>
      <parentid>2675</parentid>
      <timestamp>2013-03-29T16:51:48Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>no good. Might get it working one day.</comment>
      <text xml:space="preserve" bytes="976">: HELP! I want to hide rows of the table if the information doesn't exist, but I can't get it working. I've tried basically everything on this page: http://en.wikipedia.org/wiki/Wikipedia:Conditional_tables

{| class=&quot;wikitable&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; |'''{{{title}}}'''
|-
|
{|
| colspan=&quot;2&quot; | [[file:{{{image}}}|thumb|center|320px|alt={{{filename}}} - {{{title}}}]]
|-
| width=&quot;100px&quot; |'''Filename'''
| {{{filename}}}
|-
|'''Author'''
| {{{author}}}
|-
| ! valign=&quot;top&quot; | '''Supported modes'''
| 
{{#if: {{{modesp}}} | [[Single-player]]&lt;br&gt; }}
{{#if: {{{modecoop}}} | [[Coop]]&lt;br&gt; }}
{{#if: {{{modedm}}} | [[Deathmatch]] }}
|-
| {{#if: {{{monsters}}} | '''[[Monsters]]''' }}
| {{#if: {{{monsters}}} | {{{monsters}}} }}
|-
| {{#if: {{{secrets}}} | '''[[Secrets]]''' }}
| {{#if: {{{secrets}}} | {{{secrets}}} }}
|-
| {{#if: {{{cdtrack}}} | '''[[Soundtrack|CD Track]]''' }}
| {{#if: {{{cdtrack}}} | {{{cdtrack}}} }}
|}
|}</text>
      <sha1>k2obzb5ltezbbfww5pnwrc68lp8zr7w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Infobox multiplayer map</title>
    <ns>10</ns>
    <id>546</id>
    <revision>
      <id>1327</id>
      <timestamp>2009-09-29T04:55:17Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>New page: __NOTOC__ {| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot; |+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{title}}}''' |- |'''Author:''' || {{{author}}} |- |'''Style:''' || {{{...</comment>
      <text xml:space="preserve" bytes="840">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{title}}}'''
|-
|'''Author:''' || {{{author}}}
|-
|'''Style:''' || {{{style}}}
|-
|
|-
|
|-
|'''Rocket Launchers:''' || {{{rocketlaunchers}}}
|-
|'''Lightning Guns:''' || {{{lightningguns}}}
|-
|'''Grenade Launchers:''' || {{{grenadelaunchers}}}
|-
|'''Super Nail Guns:''' || {{{supernailguns}}}
|-
|'''Nailguns:''' || {{{nailguns}}}
|-
|'''Super Shotguns:''' || {{{supershotguns}}}
|-
|
|-
|
|-
|'''Red Armors:''' || {{{redarmors}}}
|-
|'''Yellow Armors:''' || {{{yellowarmors}}}
|-
|'''Green Armors:''' || {{{greenarmors}}}
|-
|
|-
|
|-
|
|-
|'''Quad Damages:''' || {{{quaddamages}}}
|-
|'''Pentagrams:''' || {{{pentagrams}}}
|-
|'''Rings of Shadow:''' || {{{ringsofshadow}}}
|-
|'''Bio-Suits:''' || {{{biosuits}}}
|-
|}</text>
      <sha1>q7irhs1r6ld3jczi03hmaftlj2mvenk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1328</id>
      <parentid>1327</parentid>
      <timestamp>2009-09-29T05:03:36Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="883">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{title}}}'''
|-
|'''Author:''' || {{{author}}}
|-
|'''Style:''' || {{{style}}}
|-
|
|-
|
|-
|'''Rocket Launchers:''' || {{{rocketlaunchers}}}
|-
|'''Lightning Guns:''' || {{{lightningguns}}}
|-
|'''Grenade Launchers:''' || {{{grenadelaunchers}}}
|-
|'''Super Nail Guns:''' || {{{supernailguns}}}
|-
|'''Nailguns:''' || {{{nailguns}}}
|-
|'''Super Shotguns:''' || {{{supershotguns}}}
|-
|
|-
|
|-
|'''Red Armors:''' || {{{redarmors}}}
|-
|'''Yellow Armors:''' || {{{yellowarmors}}}
|-
|'''Green Armors:''' || {{{greenarmors}}}
|-
|
|-
|
|-
|
|-
|'''Quad Damages:''' || {{{quaddamages}}}
|-
|'''Mega Health:''' || {{{megahealth}}}
|-
|'''Pentagrams:''' || {{{pentagrams}}}
|-
|'''Rings of Shadow:''' || {{{ringsofshadow}}}
|-
|'''Bio-Suits:''' || {{{biosuits}}}
|-
|}</text>
      <sha1>rtprwmfz97tmhjujzb1rnr13cqf2o7b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Infobox singleplayer map</title>
    <ns>10</ns>
    <id>543</id>
    <revision>
      <id>1320</id>
      <timestamp>2009-09-27T19:24:05Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <comment>New page: __NOTOC__ {| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot; |+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{spmap}}}''' |- |'''Monsters:''' || {{{monsters}}} |- |'''Secrets:''' ...</comment>
      <text xml:space="preserve" bytes="403">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{spmap}}}'''
|-
|'''Monsters:''' || {{{monsters}}}
|-
|'''Secrets:''' || {{{secrets}}}
|-
|'''World type:''' || {{{worldtype}}}
|-
|'''Author:''' || {{{author}}}
|-
|'''Secret level:''' || {{{secretlevel}}}
|-
|'''Secret exit:''' || {{{secretexit}}}
|-
|'''Rune:''' || {{{rune}}}
|-
|}</text>
      <sha1>rlake669zaq3fdzwfjkaykto5ywnc4x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1321</id>
      <parentid>1320</parentid>
      <timestamp>2009-09-27T19:27:23Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="403">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{spmap}}}'''
|-
|'''Author:''' || {{{author}}}
|-
|'''Monsters:''' || {{{monsters}}}
|-
|'''Secrets:''' || {{{secrets}}}
|-
|'''World type:''' || {{{worldtype}}}
|-
|'''Secret level:''' || {{{secretlevel}}}
|-
|'''Secret exit:''' || {{{secretexit}}}
|-
|'''Rune:''' || {{{rune}}}
|-
|}</text>
      <sha1>7wvkkc155ljdfz5vp5woj41j1ji5viu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1322</id>
      <parentid>1321</parentid>
      <timestamp>2009-09-27T19:29:26Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <text xml:space="preserve" bytes="403">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{title}}}'''
|-
|'''Author:''' || {{{author}}}
|-
|'''Monsters:''' || {{{monsters}}}
|-
|'''Secrets:''' || {{{secrets}}}
|-
|'''World type:''' || {{{worldtype}}}
|-
|'''Secret level:''' || {{{secretlevel}}}
|-
|'''Secret exit:''' || {{{secretexit}}}
|-
|'''Rune:''' || {{{rune}}}
|-
|}</text>
      <sha1>2nj3g9ls69cr2mg8o1qj2tigh6534y4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1412</id>
      <parentid>1322</parentid>
      <timestamp>2009-10-10T19:44:49Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="490">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{title}}}'''
|-
|'''Author:''' || {{{author}}}
|-
|'''Monsters:''' || {{{monsters}}}
|-
|'''Secrets:''' || {{{secrets}}}
|-
|'''World type:''' || {{{worldtype}}}
|-
|'''Secret level:''' || {{{secretlevel}}}
|-
|'''Secret exit:''' || {{{secretexit}}}
|-
|'''Previous Level:''' || {{{previouslevel}}}
|-
|'''Next Level:''' || {{{nextlevel}}}
|-
|'''Rune:''' || {{{rune}}}
|}</text>
      <sha1>4g8bi8sn776c4si2cfte75vdxsa7q45</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1971</id>
      <parentid>1412</parentid>
      <timestamp>2013-03-25T09:49:57Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="536">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{title}}}'''
|-
|{{#if:{{{image|}}}|[[file:{{{image}}}]]}}
|-
|'''Author:''' || {{{author}}}
|-
|'''Monsters:''' || {{{monsters}}}
|-
|'''Secrets:''' || {{{secrets}}}
|-
|'''World type:''' || {{{worldtype}}}
|-
|'''Secret level:''' || {{{secretlevel}}}
|-
|'''Secret exit:''' || {{{secretexit}}}
|-
|'''Previous Level:''' || {{{previouslevel}}}
|-
|'''Next Level:''' || {{{nextlevel}}}
|-
|'''Rune:''' || {{{rune}}}
|}</text>
      <sha1>f59o3hy001ot5dv4y615bzyi2wn9bel</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1972</id>
      <parentid>1971</parentid>
      <timestamp>2013-03-25T09:53:10Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>tweaking image (need to save in order to test. ARGH. fuck wiki)</comment>
      <text xml:space="preserve" bytes="549">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{title}}}'''
|-
|{{#if:{{{image|}}}|[[file:{{{image}}}|thumb|center]]}}
|-
|'''Author:''' || {{{author}}}
|-
|'''Monsters:''' || {{{monsters}}}
|-
|'''Secrets:''' || {{{secrets}}}
|-
|'''World type:''' || {{{worldtype}}}
|-
|'''Secret level:''' || {{{secretlevel}}}
|-
|'''Secret exit:''' || {{{secretexit}}}
|-
|'''Previous Level:''' || {{{previouslevel}}}
|-
|'''Next Level:''' || {{{nextlevel}}}
|-
|'''Rune:''' || {{{rune}}}
|}</text>
      <sha1>8szeihcb0z1g9dgavaryawypkgc5hjw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1973</id>
      <parentid>1972</parentid>
      <timestamp>2013-03-25T09:58:07Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>made image span two columns</comment>
      <text xml:space="preserve" bytes="575">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%; border: 1px&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{title}}}'''
|-
| colspan=&quot;2&quot; | {{#if:{{{image|}}}|[[file:{{{image}}}|thumb|center]]
|-
|'''Author:''' || {{{author}}}
|-
|'''Monsters:''' || {{{monsters}}}
|-
|'''Secrets:''' || {{{secrets}}}
|-
|'''World type:''' || {{{worldtype}}}
|-
|'''Secret level:''' || {{{secretlevel}}}
|-
|'''Secret exit:''' || {{{secretexit}}}
|-
|'''Previous Level:''' || {{{previouslevel}}}
|-
|'''Next Level:''' || {{{nextlevel}}}
|-
|'''Rune:''' || {{{rune}}}
|}</text>
      <sha1>cw5wjwkt1kdonl4g4n87s2yftr097tx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1974</id>
      <parentid>1973</parentid>
      <timestamp>2013-03-25T09:58:45Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>fixed if problem</comment>
      <text xml:space="preserve" bytes="577">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%; border: 1px&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{title}}}'''
|-
| colspan=&quot;2&quot; | {{#if:{{{image|}}}|[[file:{{{image}}}|thumb|center]]}}
|-
|'''Author:''' || {{{author}}}
|-
|'''Monsters:''' || {{{monsters}}}
|-
|'''Secrets:''' || {{{secrets}}}
|-
|'''World type:''' || {{{worldtype}}}
|-
|'''Secret level:''' || {{{secretlevel}}}
|-
|'''Secret exit:''' || {{{secretexit}}}
|-
|'''Previous Level:''' || {{{previouslevel}}}
|-
|'''Next Level:''' || {{{nextlevel}}}
|-
|'''Rune:''' || {{{rune}}}
|}</text>
      <sha1>jfn27ilhvejmb23ilqgg5wrp0473oxz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1975</id>
      <parentid>1974</parentid>
      <timestamp>2013-03-25T10:00:29Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>ARGH!</comment>
      <text xml:space="preserve" bytes="556">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%; border: 1px&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{title}}}'''
|-
| colspan=&quot;2&quot; | [[file:{{{image}}}|thumb|center]]
|-
|'''Author:''' || {{{author}}}
|-
|'''Monsters:''' || {{{monsters}}}
|-
|'''Secrets:''' || {{{secrets}}}
|-
|'''World type:''' || {{{worldtype}}}
|-
|'''Secret level:''' || {{{secretlevel}}}
|-
|'''Secret exit:''' || {{{secretexit}}}
|-
|'''Previous Level:''' || {{{previouslevel}}}
|-
|'''Next Level:''' || {{{nextlevel}}}
|-
|'''Rune:''' || {{{rune}}}
|}</text>
      <sha1>nl7waekx16lfpqj8wdahtjjl1duupuu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1976</id>
      <parentid>1975</parentid>
      <timestamp>2013-03-25T10:10:20Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>removed some information</comment>
      <text xml:space="preserve" bytes="414">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%; border: 1px&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{title}}}'''
|-
| colspan=&quot;2&quot; | [[file:{{{image}}}|thumb|center|alt={{{filename}}} - {{{title}}}]]
|-
|'''Filename:''' || {{{filename}}}
|-
|'''Author:''' || {{{author}}}
|-
|'''Monsters:''' || {{{monsters}}}
|-
|'''Secrets:''' || {{{secrets}}}
|-
|'''CD Track''' || {{{cdtrack}}}
|}</text>
      <sha1>nay2umbhzm16embkji1i6b3gsfim46f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1977</id>
      <parentid>1976</parentid>
      <timestamp>2013-03-25T10:12:22Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>trying to specify width</comment>
      <text xml:space="preserve" bytes="420">__NOTOC__
{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%; border: 1px&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{title}}}'''
|-
| colspan=&quot;2&quot; | [[file:{{{image}}}|thumb|center|320px|alt={{{filename}}} - {{{title}}}]]
|-
|'''Filename:''' || {{{filename}}}
|-
|'''Author:''' || {{{author}}}
|-
|'''Monsters:''' || {{{monsters}}}
|-
|'''Secrets:''' || {{{secrets}}}
|-
|'''CD Track''' || {{{cdtrack}}}
|}</text>
      <sha1>e03z0x30a20le171h8ll5a7yqd5lgh2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1978</id>
      <parentid>1977</parentid>
      <timestamp>2013-03-25T10:14:31Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>Trying to get better alt text</comment>
      <text xml:space="preserve" bytes="407">{| class=&quot;infobox&quot; style=&quot;width: 23em; font-size: 90%; border: 1px&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{title}}}'''
|-
| colspan=&quot;2&quot; | [[file:{{{image}}}|thumb|center|320px|{{{filename}}} - {{{title}}}]]
|-
|'''Filename:''' || {{{filename}}}
|-
|'''Author:''' || {{{author}}}
|-
|'''Monsters:''' || {{{monsters}}}
|-
|'''Secrets:''' || {{{secrets}}}
|-
|'''CD Track:''' || {{{cdtrack}}}
|}</text>
      <sha1>llst876vhlz2m7irej12ldn7rfwzf2m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1979</id>
      <parentid>1978</parentid>
      <timestamp>2013-03-25T10:17:54Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>testing style</comment>
      <text xml:space="preserve" bytes="382">{| style=&quot;font-size: 90%; border: 1px&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{title}}}'''
|-
| colspan=&quot;2&quot; | [[file:{{{image}}}|thumb|center|320px|alt={{{filename}}} - {{{title}}}]]
|-
|'''Filename:''' || {{{filename}}}
|-
|'''Author:''' || {{{author}}}
|-
|'''Monsters:''' || {{{monsters}}}
|-
|'''Secrets:''' || {{{secrets}}}
|-
|'''CD Track:''' || {{{cdtrack}}}
|}</text>
      <sha1>12bybaw5jdrg5mh43i9ul2qzefmgfec</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1980</id>
      <parentid>1979</parentid>
      <timestamp>2013-03-25T10:19:01Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="400">{| class=&quot;wikitable&quot; style=&quot;font-size: 90%; border: 1px&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{title}}}'''
|-
| colspan=&quot;2&quot; | [[file:{{{image}}}|thumb|center|320px|alt={{{filename}}} - {{{title}}}]]
|-
|'''Filename:''' || {{{filename}}}
|-
|'''Author:''' || {{{author}}}
|-
|'''Monsters:''' || {{{monsters}}}
|-
|'''Secrets:''' || {{{secrets}}}
|-
|'''CD Track:''' || {{{cdtrack}}}
|}</text>
      <sha1>gy26dn7ekaczxy2vmwg36ezltne683b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1981</id>
      <parentid>1980</parentid>
      <timestamp>2013-03-25T10:21:14Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>grrrrr</comment>
      <text xml:space="preserve" bytes="414">{| class=&quot;wikitable&quot; style=&quot;font-size: 90%; border: 1px&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{title}}}'''
|-
| colspan=&quot;2&quot; | [[file:{{{image}}}|thumb|center|320px|alt={{{filename}}} - {{{title}}}]]
|-
! width=&quot;33%&quot; |'''Filename:''' || {{{filename}}}
|-
|'''Author:''' || {{{author}}}
|-
|'''Monsters:''' || {{{monsters}}}
|-
|'''Secrets:''' || {{{secrets}}}
|-
|'''CD Track:''' || {{{cdtrack}}}
|}</text>
      <sha1>6afhx07cwc8qzv5geu7y9aaefirkies</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1982</id>
      <parentid>1981</parentid>
      <timestamp>2013-03-25T10:21:54Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>getting sick of this testing shit</comment>
      <text xml:space="preserve" bytes="416">{| class=&quot;wikitable&quot; style=&quot;font-size: 90%; border: 1px&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{title}}}'''
|-
| colspan=&quot;2&quot; | [[file:{{{image}}}|thumb|center|320px|alt={{{filename}}} - {{{title}}}]]
|-
! width=&quot;100px&quot; |'''Filename:''' || {{{filename}}}
|-
|'''Author:''' || {{{author}}}
|-
|'''Monsters:''' || {{{monsters}}}
|-
|'''Secrets:''' || {{{secrets}}}
|-
|'''CD Track:''' || {{{cdtrack}}}
|}</text>
      <sha1>tvnr4yf3gxqljat61hwvr27ow24539w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1983</id>
      <parentid>1982</parentid>
      <timestamp>2013-03-25T10:24:00Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>fuck wiki markup in the arse!</comment>
      <text xml:space="preserve" bytes="416">{| class=&quot;wikitable&quot; style=&quot;font-size: 90%; border: 1px&quot;
|+ style=&quot;font-size: larger; margin-left: 1em;&quot;|'''{{{title}}}'''
|-
! colspan=&quot;2&quot; | [[file:{{{image}}}|thumb|center|320px|alt={{{filename}}} - {{{title}}}]]
|-
| width=&quot;100px&quot; |'''Filename:''' || {{{filename}}}
|-
|'''Author:''' || {{{author}}}
|-
|'''Monsters:''' || {{{monsters}}}
|-
|'''Secrets:''' || {{{secrets}}}
|-
|'''CD Track:''' || {{{cdtrack}}}
|}</text>
      <sha1>eyc8f791keyx1jmuo722e407ztu1hu1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1984</id>
      <parentid>1983</parentid>
      <timestamp>2013-03-25T10:25:19Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>I think this will work</comment>
      <text xml:space="preserve" bytes="430">{| class=&quot;wikitable&quot; style=&quot;font-size: 90%; border: 1px&quot;
! colspan = &quot;2&quot; style=&quot;font-size: larger; margin-left: 1em;&quot; |'''{{{title}}}'''
|-
| colspan=&quot;2&quot; | [[file:{{{image}}}|thumb|center|320px|alt={{{filename}}} - {{{title}}}]]
|-
| width=&quot;100px&quot; |'''Filename:''' || {{{filename}}}
|-
|'''Author:''' || {{{author}}}
|-
|'''Monsters:''' || {{{monsters}}}
|-
|'''Secrets:''' || {{{secrets}}}
|-
|'''CD Track:''' || {{{cdtrack}}}
|}</text>
      <sha1>o7fc92lsqrbu9ix8q3xjveposc1an4m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2065</id>
      <parentid>1984</parentid>
      <timestamp>2013-03-25T12:55:17Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>made the table float to the right of the page so that text added underneath in the markup will wrap the table</comment>
      <text xml:space="preserve" bytes="441">{| class=&quot;wikitable&quot; style=&quot;float:right; font-size:90%; border:1px&quot;
! colspan = &quot;2&quot; style=&quot;font-size: larger; margin-left: 1em;&quot; |'''{{{title}}}'''
|-
| colspan=&quot;2&quot; | [[file:{{{image}}}|thumb|center|320px|alt={{{filename}}} - {{{title}}}]]
|-
| width=&quot;100px&quot; |'''Filename:''' || {{{filename}}}
|-
|'''Author:''' || {{{author}}}
|-
|'''Monsters:''' || {{{monsters}}}
|-
|'''Secrets:''' || {{{secrets}}}
|-
|'''CD Track:''' || {{{cdtrack}}}
|}</text>
      <sha1>7zm41r1qft24cew2gseequtrt78hpzi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2067</id>
      <parentid>2065</parentid>
      <timestamp>2013-03-25T13:13:37Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>added wiki links</comment>
      <text xml:space="preserve" bytes="464">{| class=&quot;wikitable&quot; style=&quot;float:right; font-size:90%; border:1px&quot;
! colspan = &quot;2&quot; style=&quot;font-size: larger; margin-left: 1em;&quot; |'''{{{title}}}'''
|-
| colspan=&quot;2&quot; | [[file:{{{image}}}|thumb|center|320px|alt={{{filename}}} - {{{title}}}]]
|-
| width=&quot;100px&quot; |'''Filename:''' || {{{filename}}}
|-
|'''Author:''' || {{{author}}}
|-
|'''[[Monsters]]:''' || {{{monsters}}}
|-
|'''[[Secrets]]:''' || {{{secrets}}}
|-
|'''[[Soundtrack|CD Track]]:''' || {{{cdtrack}}}
|}</text>
      <sha1>qhr8h9cmgyvddot4b0zmw7adfbllhlb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2187</id>
      <parentid>2067</parentid>
      <timestamp>2013-03-26T04:20:04Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>testing padding on template</comment>
      <text xml:space="preserve" bytes="499">&lt;div style=&quot;padding:4px&quot;&gt;

{| class=&quot;wikitable&quot; style=&quot;float:right; font-size:90%; border:1px&quot;
! colspan = &quot;2&quot; style=&quot;font-size: larger; margin-left: 1em;&quot; |'''{{{title}}}'''
|-
| colspan=&quot;2&quot; | [[file:{{{image}}}|thumb|center|320px|alt={{{filename}}} - {{{title}}}]]
|-
| width=&quot;100px&quot; |'''Filename:''' || {{{filename}}}
|-
|'''Author:''' || {{{author}}}
|-
|'''[[Monsters]]:''' || {{{monsters}}}
|-
|'''[[Secrets]]:''' || {{{secrets}}}
|-
|'''[[Soundtrack|CD Track]]:''' || {{{cdtrack}}}
|}

&lt;/div&gt;</text>
      <sha1>7lc0n8g8wolnt1rwuy89erwu21xg25q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2189</id>
      <parentid>2187</parentid>
      <timestamp>2013-03-26T04:21:06Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>reverting previous version because the padding didn't work. ffs.</comment>
      <text xml:space="preserve" bytes="464">{| class=&quot;wikitable&quot; style=&quot;float:right; font-size:90%; border:1px&quot;
! colspan = &quot;2&quot; style=&quot;font-size: larger; margin-left: 1em;&quot; |'''{{{title}}}'''
|-
| colspan=&quot;2&quot; | [[file:{{{image}}}|thumb|center|320px|alt={{{filename}}} - {{{title}}}]]
|-
| width=&quot;100px&quot; |'''Filename:''' || {{{filename}}}
|-
|'''Author:''' || {{{author}}}
|-
|'''[[Monsters]]:''' || {{{monsters}}}
|-
|'''[[Secrets]]:''' || {{{secrets}}}
|-
|'''[[Soundtrack|CD Track]]:''' || {{{cdtrack}}}
|}</text>
      <sha1>qhr8h9cmgyvddot4b0zmw7adfbllhlb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2237</id>
      <parentid>2189</parentid>
      <timestamp>2013-03-26T13:40:22Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>added a margin around the table (I think...)</comment>
      <text xml:space="preserve" bytes="449">{| class=&quot;wikitable&quot; style=&quot;float:right; margin:4px&quot;
! colspan = &quot;2&quot; style=&quot;font-size: larger; margin-left: 1em;&quot; |'''{{{title}}}'''
|-
| colspan=&quot;2&quot; | [[file:{{{image}}}|thumb|center|320px|alt={{{filename}}} - {{{title}}}]]
|-
| width=&quot;100px&quot; |'''Filename:''' || {{{filename}}}
|-
|'''Author:''' || {{{author}}}
|-
|'''[[Monsters]]:''' || {{{monsters}}}
|-
|'''[[Secrets]]:''' || {{{secrets}}}
|-
|'''[[Soundtrack|CD Track]]:''' || {{{cdtrack}}}
|}</text>
      <sha1>s7s5b51j42ktad2wtn09mi9ty9w34cs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2238</id>
      <parentid>2237</parentid>
      <timestamp>2013-03-26T13:41:02Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>increased margin</comment>
      <text xml:space="preserve" bytes="449">{| class=&quot;wikitable&quot; style=&quot;float:right; margin:8px&quot;
! colspan = &quot;2&quot; style=&quot;font-size: larger; margin-left: 1em;&quot; |'''{{{title}}}'''
|-
| colspan=&quot;2&quot; | [[file:{{{image}}}|thumb|center|320px|alt={{{filename}}} - {{{title}}}]]
|-
| width=&quot;100px&quot; |'''Filename:''' || {{{filename}}}
|-
|'''Author:''' || {{{author}}}
|-
|'''[[Monsters]]:''' || {{{monsters}}}
|-
|'''[[Secrets]]:''' || {{{secrets}}}
|-
|'''[[Soundtrack|CD Track]]:''' || {{{cdtrack}}}
|}</text>
      <sha1>g1w194abdxhm3bago2rlxoe2856ppih</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2490</id>
      <parentid>2238</parentid>
      <timestamp>2013-03-29T12:00:02Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>got rid of nasty borders via... nesting. We can do it without for sure, but I don't know how. Starbuck??</comment>
      <text xml:space="preserve" bytes="439">{| class=&quot;wikitable&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; |'''{{{title}}}'''
|-
|
{|
| colspan=&quot;2&quot; | [[file:{{{image}}}|thumb|center|320px|alt={{{filename}}} - {{{title}}}]]
|-
| width=&quot;100px&quot; |'''Filename:''' || {{{filename}}}
|-
|'''Author:'''
| {{{author}}}
|-
|'''[[Monsters]]:'''
| {{{monsters}}}
|-
|'''[[Secrets]]:'''
| {{{secrets}}}
|-
|'''[[Soundtrack|CD Track]]:'''
| {{{cdtrack}}}
|}
|}</text>
      <sha1>lxqnhj19nnsdso813i7t3efvwyk4dr1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2849</id>
      <parentid>2490</parentid>
      <timestamp>2013-04-08T14:22:32Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>removed colons and reduced width to 300. removed links also, since they looked shit</comment>
      <text xml:space="preserve" bytes="420">{| class=&quot;wikitable&quot; width=&quot;300&quot; style=&quot;float:right; margin:8px&quot;
! style=&quot;font-size: larger; margin-left: 1em;&quot; |'''{{{title}}}'''
|-
|
{|
| colspan=&quot;2&quot; | [[file:{{{image}}}|thumb|center|300px|alt={{{filename}}} - {{{title}}}]]
|-
| width=&quot;90&quot; |'''Filename''' || {{{filename}}}
|-
|'''Author'''
| {{{author}}}
|-
|'''Monsters'''
| {{{monsters}}}
|-
|'''Secrets'''
| {{{secrets}}}
|-
|'''CD Track'''
| {{{cdtrack}}}
|}
|}</text>
      <sha1>kima0s8winp1d7smbphwiwmzqax9sf4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Infobox singleplayer map entities</title>
    <ns>10</ns>
    <id>551</id>
    <revision>
      <id>1368</id>
      <timestamp>2009-10-03T04:53:02Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>large table of info for singleplayer maps, use one per difficulty setting per map</comment>
      <text xml:space="preserve" bytes="2292">__NOTOC__
{| class=&quot;wikitable&quot; style=&quot;width: 69em; font-size: 90%&quot;
|+ style=&quot;font-size: larger;&quot;|'''{{{difficulty}}}'''
|-
|'''[[Grunt|Grunts]]:''' || {{{grunts}}}
|'''[[Rottweiler|Rottweilers]]:''' || {{{rottweilers}}}
|'''[[Ogre|Ogres]]:''' || {{{ogres}}}
|'''[[Knight|Knights]]:''' || {{{knights}}}
|'''[[Scrag|Scrags]]:''' || {{{scrags}}}
|'''[[Zombie|Zombies]]:''' || {{{zombies}}}
|'''[[Fiend|Fiends]]:''' || {{{fiends}}}
|'''[[Shambler|Shamblers]]:''' || {{{shamblers}}}
|-
|'''[[Enforcer|Enforcers]]:''' || {{{enforcers}}}
|'''[[Death Knight|Death Knights]]:''' || {{{deathknights}}}
|'''[[Rotfish]]:''' || {{{rotfish}}}
|'''[[Spawn (monster)|Spawn]]:''' || {{{spawn}}}
|'''[[Vore|Vores]]:''' || {{{vores}}}
|-
|'''[[Double-Barrelled Shotgun|Double-Barreled Shotguns]]:''' || {{{supershotguns}}}
|'''[[Nailgun|Nailguns]]:''' || {{{nailguns}}}
|'''[[Super Nailgun|Super Nailguns]]:''' || {{{supernailguns}}}
|'''[[Grenade Launcher|Grenade Launchers]]:''' || {{{grenadelaunchers}}}
|'''[[Rocket Launcher|Rocket Launchers]]:''' || {{{rocketlaunchers}}}
|'''[[Thunderbolt|Thunderbolts]]:''' || {{{lightningguns}}}
|-
|'''[[Shells|Small Shells]]:''' || {{{shells20}}}
|'''[[Shells|Large Shells]]:''' || {{{shells40}}}
|'''[[Nails|Small Nails]]:''' || {{{nails25}}}
|'''[[Nails|Large Nails]]:''' || {{{nails50}}}
|'''[[Rockets|Small Rockets]]:''' || {{{rockets5}}}
|'''[[Rockets|Large Rockets]]:''' || {{{rockets10}}}
|'''[[Cells|Small Cells]]:''' || {{{cells6}}}
|'''[[Cells|Large Cells]]:''' || {{{cells12}}}
|-
|'''[[Health|Rotten Health]]:''' || {{{rottenhealth}}}
|'''[[Health|Health Packs]]:''' || {{{healthpacks}}}
|'''[[Megahealth]]:''' || {{{megahealths}}}
|-
|'''[[Armor|Green Armor]]:''' || {{{greenarmors}}}
|'''[[Armor|Yellow Armor]]:''' || {{{yellowarmors}}}
|'''[[Armor|Red Armor]]:''' || {{{redarmors}}}
|-
|'''[[Quad Damage|Quad Damages]]:''' || {{{quaddamages}}}
|'''[[Pentagram of Protection|Pentagrams of Protection]]:''' || {{{pentagrams}}}
|'''[[Ring of Shadow|Rings of Shadow]]:''' || {{{ringsofshadow}}}
|'''[[Biosuit|Biosuits]]:''' || {{{biosuits}}}
|-
|'''[[Keys|Silver Keys]]:''' || {{{silverkeys}}}
|'''[[Keys|Gold Keys]]:''' || {{{goldkeys}}}
|'''[[Slipgate|Slipgates]]:''' || {{{slipgates}}}
|'''[[trap_spikeshooter|Trap Shooters]]:''' || {{{trapshooters}}}
|}</text>
      <sha1>rylt3ce27wj61cdkfhdvly08ikj949d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1369</id>
      <parentid>1368</parentid>
      <timestamp>2009-10-03T05:03:10Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2356">__NOTOC__
{| class=&quot;wikitable&quot; style=&quot;width: 69em; font-size: 90%&quot;
|+ style=&quot;font-size: larger;&quot;|'''{{{difficulty}}}'''
|-
|'''[[Grunt|Grunts]]:''' || {{{grunts}}}
|'''[[Rottweiler|Rottweilers]]:''' || {{{rottweilers}}}
|'''[[Ogre|Ogres]]:''' || {{{ogres}}}
|'''[[Knight|Knights]]:''' || {{{knights}}}
|'''[[Scrag|Scrags]]:''' || {{{scrags}}}
|'''[[Zombie|Zombies]]:''' || {{{zombies}}}
|'''[[Fiend|Fiends]]:''' || {{{fiends}}}
|'''[[Shambler|Shamblers]]:''' || {{{shamblers}}}
|-
|'''[[Enforcer|Enforcers]]:''' || {{{enforcers}}}
|'''[[Death Knight|Death Knights]]:''' || {{{deathknights}}}
|'''[[Rotfish]]:''' || {{{rotfish}}}
|'''[[Spawn (monster)|Spawn]]:''' || {{{spawn}}}
|'''[[Vore|Vores]]:''' || {{{vores}}}
|
|
|
|-
|'''[[Double-Barrelled Shotgun|Double-Barreled Shotguns]]:''' || {{{supershotguns}}}
|'''[[Nailgun|Nailguns]]:''' || {{{nailguns}}}
|'''[[Super Nailgun|Super Nailguns]]:''' || {{{supernailguns}}}
|'''[[Grenade Launcher|Grenade Launchers]]:''' || {{{grenadelaunchers}}}
|'''[[Rocket Launcher|Rocket Launchers]]:''' || {{{rocketlaunchers}}}
|'''[[Thunderbolt|Thunderbolts]]:''' || {{{lightningguns}}}
|
|
|
|-
|'''[[Shells|Small Shells]]:''' || {{{shells20}}}
|'''[[Shells|Large Shells]]:''' || {{{shells40}}}
|'''[[Nails|Small Nails]]:''' || {{{nails25}}}
|'''[[Nails|Large Nails]]:''' || {{{nails50}}}
|'''[[Rockets|Small Rockets]]:''' || {{{rockets5}}}
|'''[[Rockets|Large Rockets]]:''' || {{{rockets10}}}
|'''[[Cells|Small Cells]]:''' || {{{cells6}}}
|'''[[Cells|Large Cells]]:''' || {{{cells12}}}
|-
|'''[[Health|Rotten Health]]:''' || {{{rottenhealth}}}
|'''[[Health|Health Packs]]:''' || {{{healthpacks}}}
|'''[[Megahealth]]:''' || {{{megahealths}}}
|
|
|
|
|
|
|
|-
|'''[[Armor|Green Armor]]:''' || {{{greenarmors}}}
|'''[[Armor|Yellow Armor]]:''' || {{{yellowarmors}}}
|'''[[Armor|Red Armor]]:''' || {{{redarmors}}}
|
|
|
|
|
|
|
|-
|'''[[Quad Damage|Quad Damages]]:''' || {{{quaddamages}}}
|'''[[Pentagram of Protection|Pentagrams of Protection]]:''' || {{{pentagrams}}}
|'''[[Ring of Shadow|Rings of Shadow]]:''' || {{{ringsofshadow}}}
|'''[[Biosuit|Biosuits]]:''' || {{{biosuits}}}
|
|
|
|
|
|
|-
|'''[[Keys|Silver Keys]]:''' || {{{silverkeys}}}
|'''[[Keys|Gold Keys]]:''' || {{{goldkeys}}}
|'''[[Slipgate|Slipgates]]:''' || {{{slipgates}}}
|'''[[trap_spikeshooter|Trap Shooters]]:''' || {{{trapshooters}}}
|
|
|
|
|
|
|}</text>
      <sha1>ag3m9zrxim1olncjmpx68roxhjfv3ot</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1371</id>
      <parentid>1369</parentid>
      <timestamp>2009-10-03T05:37:24Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <comment>htmlized, to see if it works better</comment>
      <text xml:space="preserve" bytes="2562">__NOTOC__
{| style=&quot;width: 69em; font-size: 90%&quot;
|+ style=&quot;font-size: larger;&quot;|'''{{{difficulty}}}'''
|-
&lt;table&gt;
&lt;tr&gt;
&lt;td&gt;'''[[Grunt|Grunts]]:''' {{{grunts}}}&lt;/td&gt;
&lt;td&gt;'''[[Rottweiler|Rottweilers]]:''' {{{rottweilers}}}&lt;/td&gt;
&lt;td&gt;'''[[Ogre|Ogres]]:''' {{{ogres}}}&lt;/td&gt;
&lt;td&gt;'''[[Knight|Knights]]:''' {{{knights}}}&lt;/td&gt;
&lt;td&gt;'''[[Scrag|Scrags]]:''' {{{scrags}}}&lt;/td&gt;
&lt;td&gt;'''[[Zombie|Zombies]]:''' {{{zombies}}}&lt;/td&gt;
&lt;td&gt;'''[[Fiend|Fiends]]:''' {{{fiends}}}&lt;/td&gt;
&lt;td&gt;'''[[Shambler|Shamblers]]:''' {{{shamblers}}}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'''[[Enforcer|Enforcers]]:''' {{{enforcers}}}&lt;/td&gt;
&lt;td&gt;'''[[Death Knight|Death Knights]]:''' {{{deathknights}}}&lt;/td&gt;
&lt;td&gt;'''[[Rotfish]]:''' {{{rotfish}}}&lt;/td&gt;
&lt;td&gt;'''[[Spawn (monster)|Spawn]]:''' {{{spawn}}}&lt;/td&gt;
&lt;td&gt;'''[[Vore|Vores]]:''' {{{vores}}}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'''[[Double-Barrelled Shotgun|Double-Barreled Shotguns]]:''' {{{supershotguns}}}&lt;/td&gt;
&lt;td&gt;'''[[Nailgun|Nailguns]]:''' {{{nailguns}}}&lt;/td&gt;
&lt;td&gt;'''[[Super Nailgun|Super Nailguns]]:''' {{{supernailguns}}}&lt;/td&gt;
&lt;td&gt;'''[[Grenade Launcher|Grenade Launchers]]:''' {{{grenadelaunchers}}}&lt;/td&gt;
&lt;td&gt;'''[[Rocket Launcher|Rocket Launchers]]:''' {{{rocketlaunchers}}}&lt;/td&gt;
&lt;td&gt;'''[[Thunderbolt|Thunderbolts]]:''' {{{lightningguns}}}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'''[[Shells|Small Shells]]:''' {{{shells20}}}&lt;/td&gt;
&lt;td&gt;'''[[Shells|Large Shells]]:''' {{{shells40}}}&lt;/td&gt;
&lt;td&gt;'''[[Nails|Small Nails]]:''' {{{nails25}}}&lt;/td&gt;
&lt;td&gt;'''[[Nails|Large Nails]]:''' {{{nails50}}}&lt;/td&gt;
&lt;td&gt;'''[[Rockets|Small Rockets]]:''' {{{rockets5}}}&lt;/td&gt;
&lt;td&gt;'''[[Rockets|Large Rockets]]:''' {{{rockets10}}}&lt;/td&gt;
&lt;td&gt;'''[[Cells|Small Cells]]:''' {{{cells6}}}&lt;/td&gt;
&lt;td&gt;'''[[Cells|Large Cells]]:''' {{{cells12}}}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'''[[Health|Rotten Health]]:''' {{{rottenhealth}}}&lt;/td&gt;
&lt;td&gt;'''[[Health|Health Packs]]:''' {{{healthpacks}}}&lt;/td&gt;
&lt;td&gt;'''[[Megahealth]]:''' {{{megahealths}}}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'''[[Armor|Green Armor]]:''' {{{greenarmors}}}&lt;/td&gt;
&lt;td&gt;'''[[Armor|Yellow Armor]]:''' {{{yellowarmors}}}&lt;/td&gt;
&lt;td&gt;'''[[Armor|Red Armor]]:''' {{{redarmors}}}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'''[[Quad Damage|Quad Damages]]:''' {{{quaddamages}}}&lt;/td&gt;
&lt;td&gt;'''[[Pentagram of Protection|Pentagrams of Protection]]:''' {{{pentagrams}}}&lt;/td&gt;
&lt;td&gt;'''[[Ring of Shadow|Rings of Shadow]]:''' {{{ringsofshadow}}}&lt;/td&gt;
&lt;td&gt;'''[[Biosuit|Biosuits]]:''' {{{biosuits}}}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'''[[Keys|Silver Keys]]:''' {{{silverkeys}}}&lt;/td&gt;
&lt;td&gt;'''[[Keys|Gold Keys]]:''' {{{goldkeys}}}&lt;/td&gt;
&lt;td&gt;'''[[Slipgate|Slipgates]]:''' {{{slipgates}}}&lt;/td&gt;
&lt;td&gt;'''[[trap_spikeshooter|Trap Shooters]]:''' {{{trapshooters}}}&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
|}</text>
      <sha1>ma5f0sdnyy106k44md05pmepaf34pl9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1372</id>
      <parentid>1371</parentid>
      <timestamp>2009-10-03T05:48:44Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <comment>more minor touch ups</comment>
      <text xml:space="preserve" bytes="2995">__NOTOC__
{| style=&quot;width: 69em; font-size: 90%&quot;
|+ style=&quot;font-size: larger;&quot;|'''{{{difficulty}}}'''
|-
&lt;table&gt;
&lt;tr&gt;
&lt;td colspan=&quot;8&quot;&gt;&lt;center&gt;&lt;i&gt;Shareware Monsters&lt;/i&gt;&lt;/center&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'''[[Grunt|Grunts]]:''' {{{grunts}}}&lt;/td&gt;
&lt;td&gt;'''[[Rottweiler|Rottweilers]]:''' {{{rottweilers}}}&lt;/td&gt;
&lt;td&gt;'''[[Ogre|Ogres]]:''' {{{ogres}}}&lt;/td&gt;
&lt;td&gt;'''[[Knight|Knights]]:''' {{{knights}}}&lt;/td&gt;
&lt;td&gt;'''[[Scrag|Scrags]]:''' {{{scrags}}}&lt;/td&gt;
&lt;td&gt;'''[[Zombie|Zombies]]:''' {{{zombies}}}&lt;/td&gt;
&lt;td&gt;'''[[Fiend|Fiends]]:''' {{{fiends}}}&lt;/td&gt;
&lt;td&gt;'''[[Shambler|Shamblers]]:''' {{{shamblers}}}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;8&quot;&gt;&lt;center&gt;&lt;i&gt;Registered Monsters&lt;/i&gt;&lt;/center&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'''[[Enforcer|Enforcers]]:''' {{{enforcers}}}&lt;/td&gt;
&lt;td&gt;'''[[Death Knight|Death Knights]]:''' {{{deathknights}}}&lt;/td&gt;
&lt;td&gt;'''[[Rotfish]]:''' {{{rotfish}}}&lt;/td&gt;
&lt;td&gt;'''[[Spawn (monster)|Spawn]]:''' {{{spawn}}}&lt;/td&gt;
&lt;td&gt;'''[[Vore|Vores]]:''' {{{vores}}}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;8&quot;&gt;&lt;center&gt;&lt;i&gt;Weapons and Ammo&lt;/i&gt;&lt;/center&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'''[[Double-Barrelled Shotgun|Double-Barreled Shotguns]]:''' {{{supershotguns}}}&lt;/td&gt;
&lt;td&gt;'''[[Nailgun|Nailguns]]:''' {{{nailguns}}}&lt;/td&gt;
&lt;td&gt;'''[[Super Nailgun|Super Nailguns]]:''' {{{supernailguns}}}&lt;/td&gt;
&lt;td&gt;'''[[Grenade Launcher|Grenade Launchers]]:''' {{{grenadelaunchers}}}&lt;/td&gt;
&lt;td&gt;'''[[Rocket Launcher|Rocket Launchers]]:''' {{{rocketlaunchers}}}&lt;/td&gt;
&lt;td&gt;'''[[Thunderbolt|Thunderbolts]]:''' {{{lightningguns}}}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'''[[Shells|Small Shells]]:''' {{{shells20}}}&lt;/td&gt;
&lt;td&gt;'''[[Shells|Large Shells]]:''' {{{shells40}}}&lt;/td&gt;
&lt;td&gt;'''[[Nails|Small Nails]]:''' {{{nails25}}}&lt;/td&gt;
&lt;td&gt;'''[[Nails|Large Nails]]:''' {{{nails50}}}&lt;/td&gt;
&lt;td&gt;'''[[Rockets|Small Rockets]]:''' {{{rockets5}}}&lt;/td&gt;
&lt;td&gt;'''[[Rockets|Large Rockets]]:''' {{{rockets10}}}&lt;/td&gt;
&lt;td&gt;'''[[Cells|Small Cells]]:''' {{{cells6}}}&lt;/td&gt;
&lt;td&gt;'''[[Cells|Large Cells]]:''' {{{cells12}}}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;8&quot;&gt;&lt;center&gt;&lt;i&gt;Health and Armor&lt;/i&gt;&lt;/center&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'''[[Health|Rotten Health]]:''' {{{rottenhealth}}}&lt;/td&gt;
&lt;td&gt;'''[[Health|Health Packs]]:''' {{{healthpacks}}}&lt;/td&gt;
&lt;td&gt;'''[[Megahealth]]:''' {{{megahealths}}}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'''[[Armor|Green Armor]]:''' {{{greenarmors}}}&lt;/td&gt;
&lt;td&gt;'''[[Armor|Yellow Armor]]:''' {{{yellowarmors}}}&lt;/td&gt;
&lt;td&gt;'''[[Armor|Red Armor]]:''' {{{redarmors}}}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;8&quot;&gt;&lt;center&gt;&lt;i&gt;Power-Ups&lt;/i&gt;&lt;/center&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'''[[Quad Damage|Quad Damages]]:''' {{{quaddamages}}}&lt;/td&gt;
&lt;td&gt;'''[[Pentagram of Protection|Pentagrams of Protection]]:''' {{{pentagrams}}}&lt;/td&gt;
&lt;td&gt;'''[[Ring of Shadow|Rings of Shadow]]:''' {{{ringsofshadow}}}&lt;/td&gt;
&lt;td&gt;'''[[Biosuit|Biosuits]]:''' {{{biosuits}}}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;8&quot;&gt;&lt;center&gt;&lt;i&gt;Other Details&lt;/i&gt;&lt;/center&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'''[[Keys|Silver Keys]]:''' {{{silverkeys}}}&lt;/td&gt;
&lt;td&gt;'''[[Keys|Gold Keys]]:''' {{{goldkeys}}}&lt;/td&gt;
&lt;td&gt;'''[[Slipgate|Slipgates]]:''' {{{slipgates}}}&lt;/td&gt;
&lt;td&gt;'''[[trap_spikeshooter|Trap Shooters]]:''' {{{trapshooters}}}&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
|}</text>
      <sha1>igv69c2v6sznnynmsnsy5mws2lo119x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1373</id>
      <parentid>1372</parentid>
      <timestamp>2009-10-03T05:59:00Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="3010">__NOTOC__
{| style=&quot;width: 69em; font-size: 90%&quot;
|+ style=&quot;font-size: larger;&quot;|'''{{{difficulty}}}'''
|-
&lt;table bgcolor=&quot;gray&quot;&gt;
&lt;tr&gt;
&lt;td colspan=&quot;8&quot;&gt;&lt;center&gt;&lt;i&gt;Shareware Monsters&lt;/i&gt;&lt;/center&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'''[[Grunt|Grunts]]:''' {{{grunts}}}&lt;/td&gt;
&lt;td&gt;'''[[Rottweiler|Rottweilers]]:''' {{{rottweilers}}}&lt;/td&gt;
&lt;td&gt;'''[[Ogre|Ogres]]:''' {{{ogres}}}&lt;/td&gt;
&lt;td&gt;'''[[Knight|Knights]]:''' {{{knights}}}&lt;/td&gt;
&lt;td&gt;'''[[Scrag|Scrags]]:''' {{{scrags}}}&lt;/td&gt;
&lt;td&gt;'''[[Zombie|Zombies]]:''' {{{zombies}}}&lt;/td&gt;
&lt;td&gt;'''[[Fiend|Fiends]]:''' {{{fiends}}}&lt;/td&gt;
&lt;td&gt;'''[[Shambler|Shamblers]]:''' {{{shamblers}}}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;8&quot;&gt;&lt;center&gt;&lt;i&gt;Registered Monsters&lt;/i&gt;&lt;/center&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'''[[Enforcer|Enforcers]]:''' {{{enforcers}}}&lt;/td&gt;
&lt;td&gt;'''[[Death Knight|Death Knights]]:''' {{{deathknights}}}&lt;/td&gt;
&lt;td&gt;'''[[Rotfish]]:''' {{{rotfish}}}&lt;/td&gt;
&lt;td&gt;'''[[Spawn (monster)|Spawn]]:''' {{{spawn}}}&lt;/td&gt;
&lt;td&gt;'''[[Vore|Vores]]:''' {{{vores}}}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;8&quot;&gt;&lt;center&gt;&lt;i&gt;Weapons and Ammo&lt;/i&gt;&lt;/center&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'''[[Double-Barrelled Shotgun|Double-Barreled Shotguns]]:''' {{{supershotguns}}}&lt;/td&gt;
&lt;td&gt;'''[[Nailgun|Nailguns]]:''' {{{nailguns}}}&lt;/td&gt;
&lt;td&gt;'''[[Super Nailgun|Super Nailguns]]:''' {{{supernailguns}}}&lt;/td&gt;
&lt;td&gt;'''[[Grenade Launcher|Grenade Launchers]]:''' {{{grenadelaunchers}}}&lt;/td&gt;
&lt;td&gt;'''[[Rocket Launcher|Rocket Launchers]]:''' {{{rocketlaunchers}}}&lt;/td&gt;
&lt;td&gt;'''[[Thunderbolt|Thunderbolts]]:''' {{{lightningguns}}}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'''[[Shells|Small Shells]]:''' {{{shells20}}}&lt;/td&gt;
&lt;td&gt;'''[[Shells|Large Shells]]:''' {{{shells40}}}&lt;/td&gt;
&lt;td&gt;'''[[Nails|Small Nails]]:''' {{{nails25}}}&lt;/td&gt;
&lt;td&gt;'''[[Nails|Large Nails]]:''' {{{nails50}}}&lt;/td&gt;
&lt;td&gt;'''[[Rockets|Small Rockets]]:''' {{{rockets5}}}&lt;/td&gt;
&lt;td&gt;'''[[Rockets|Large Rockets]]:''' {{{rockets10}}}&lt;/td&gt;
&lt;td&gt;'''[[Cells|Small Cells]]:''' {{{cells6}}}&lt;/td&gt;
&lt;td&gt;'''[[Cells|Large Cells]]:''' {{{cells12}}}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;8&quot;&gt;&lt;center&gt;&lt;i&gt;Health and Armor&lt;/i&gt;&lt;/center&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'''[[Health|Rotten Health]]:''' {{{rottenhealth}}}&lt;/td&gt;
&lt;td&gt;'''[[Health|Health Packs]]:''' {{{healthpacks}}}&lt;/td&gt;
&lt;td&gt;'''[[Megahealth]]:''' {{{megahealths}}}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'''[[Armor|Green Armor]]:''' {{{greenarmors}}}&lt;/td&gt;
&lt;td&gt;'''[[Armor|Yellow Armor]]:''' {{{yellowarmors}}}&lt;/td&gt;
&lt;td&gt;'''[[Armor|Red Armor]]:''' {{{redarmors}}}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;8&quot;&gt;&lt;center&gt;&lt;i&gt;Power-Ups&lt;/i&gt;&lt;/center&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'''[[Quad Damage|Quad Damages]]:''' {{{quaddamages}}}&lt;/td&gt;
&lt;td&gt;'''[[Pentagram of Protection|Pentagrams of Protection]]:''' {{{pentagrams}}}&lt;/td&gt;
&lt;td&gt;'''[[Ring of Shadow|Rings of Shadow]]:''' {{{ringsofshadow}}}&lt;/td&gt;
&lt;td&gt;'''[[Biosuit|Biosuits]]:''' {{{biosuits}}}&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;8&quot;&gt;&lt;center&gt;&lt;i&gt;Other Details&lt;/i&gt;&lt;/center&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;'''[[Keys|Silver Keys]]:''' {{{silverkeys}}}&lt;/td&gt;
&lt;td&gt;'''[[Keys|Gold Keys]]:''' {{{goldkeys}}}&lt;/td&gt;
&lt;td&gt;'''[[Slipgate|Slipgates]]:''' {{{slipgates}}}&lt;/td&gt;
&lt;td&gt;'''[[trap_spikeshooter|Trap Shooters]]:''' {{{trapshooters}}}&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
|}</text>
      <sha1>5r0ocrsmx5fr4hmtehkdav0wlqnyijv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Lowercase</title>
    <ns>10</ns>
    <id>52</id>
    <revision>
      <id>65</id>
      <timestamp>2007-10-30T18:45:19Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{DISPLAYTITLE:{{#if:{{NAMESPACE}}|{{NAMESPACE}}:|}}{{lcfirst:{{PAGENAME}}}}}}</comment>
      <text xml:space="preserve" bytes="78">{{DISPLAYTITLE:{{#if:{{NAMESPACE}}|{{NAMESPACE}}:|}}{{lcfirst:{{PAGENAME}}}}}}</text>
      <sha1>6mzvz0v5n0dj5391pt6xy4m20o6efta</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>72</id>
      <parentid>65</parentid>
      <timestamp>2007-10-30T19:27:31Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="450">{{DISPLAYTITLE:{{lcfirst:{{PAGENAME}}}}}}&lt;noinclude&gt;

Wikipedia uses this...
&lt;nowiki&gt;{{DISPLAYTITLE:{{#if:{{NAMESPACE}}|{{NAMESPACE}}:|}}{{lcfirst:{{PAGENAME}}}}}}&lt;/nowiki&gt;

But that doesn't work. Maybe this MediaWiki version is too old (it's only the latest stable release).

Presumably that allows a page using a namespace, such as 'Category:eBay', to use lowercase properly (instead of doing 'category:EBay' or something?). Whatever.

&lt;/noinclude&gt;</text>
      <sha1>p1ogrr5ia5gfeiddkrixjtn3nr3c8dv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>73</id>
      <parentid>72</parentid>
      <timestamp>2007-10-30T19:28:31Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="446">{{DISPLAYTITLE:{{lcfirst:{{PAGENAME}}}}}}&lt;noinclude&gt;Wikipedia uses this...
&lt;nowiki&gt;{{DISPLAYTITLE:{{#if:{{NAMESPACE}}|{{NAMESPACE}}:|}}{{lcfirst:{{PAGENAME}}}}}}&lt;/nowiki&gt;

But that doesn't work. Maybe this MediaWiki version is too old (it's only the latest stable release).

Presumably that allows a page using a namespace, such as 'Category:eBay', to use lowercase properly (instead of doing 'category:EBay' or something?). Whatever.&lt;/noinclude&gt;</text>
      <sha1>h2d7m31qdzfv97r1886hl533190qwb9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>82</id>
      <parentid>73</parentid>
      <timestamp>2007-10-30T19:42:39Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="570">{{DISPLAYTITLE:{{lcfirst:{{PAGENAME}}}}}}
[[Category:Wrong title templates]]&lt;noinclude&gt;
Used for article titles that should begin in a lowercase letter.

===Technical note===
Wikipedia uses this...
&lt;nowiki&gt;{{DISPLAYTITLE:{{#if:{{NAMESPACE}}|{{NAMESPACE}}:|}}{{lcfirst:{{PAGENAME}}}}}}&lt;/nowiki&gt;

But that doesn't work. Maybe this MediaWiki version is too old (it's only the latest stable release).

Presumably that allows a page using a namespace, such as 'Category:eBay', to use lowercase properly (instead of doing 'category:EBay' or something?). Whatever.
&lt;/noinclude&gt;</text>
      <sha1>o12dh13dgzufizqn13vgqr26y0tdqy0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>86</id>
      <parentid>82</parentid>
      <timestamp>2007-10-30T19:45:20Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="571">{{DISPLAYTITLE:{{lcfirst:{{PAGENAME}}}}}}&lt;noinclude&gt;
Used for article titles that should begin in a lowercase letter.

===Technical note===
Wikipedia uses this...
&lt;nowiki&gt;{{DISPLAYTITLE:{{#if:{{NAMESPACE}}|{{NAMESPACE}}:|}}{{lcfirst:{{PAGENAME}}}}}}&lt;/nowiki&gt;

But that doesn't work. Maybe this MediaWiki version is too old (it's only the latest stable release).

Presumably that allows a page using a namespace, such as 'Category:eBay', to use lowercase properly (instead of doing 'category:EBay' or something?). Whatever.

[[Category:Wrong title templates]]
&lt;/noinclude&gt;</text>
      <sha1>fs6mn0hxd2q1j5p73o97es339tb0720</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Lowercase-underscores</title>
    <ns>10</ns>
    <id>57</id>
    <revision>
      <id>80</id>
      <timestamp>2007-10-30T19:39:28Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{DISPLAYTITLE:{{lcfirst:{{PAGENAMEE}}}}}}&lt;noinclude&gt; Used for titles that start with a lowercase letter, and all spaces are to be treated as underscores.  Generally useful for [[console v...</comment>
      <text xml:space="preserve" bytes="366">{{DISPLAYTITLE:{{lcfirst:{{PAGENAMEE}}}}}}&lt;noinclude&gt;
Used for titles that start with a lowercase letter, and all spaces are to be treated as underscores.

Generally useful for [[console variables]], e.g. [[_snd_mixahead]].

===See Also===
* [[Template:underscore-lowercase-underscores]], for cvars that start with an underscore (e.g. [[_snd_mixahead]])
&lt;/noinclude&gt;</text>
      <sha1>tub2qa7cndd3e4sj9uvjjbik5nunrc7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>83</id>
      <parentid>80</parentid>
      <timestamp>2007-10-30T19:43:14Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="402">{{DISPLAYTITLE:{{lcfirst:{{PAGENAMEE}}}}}}
[[Category:Wrong title templates]]
&lt;noinclude&gt;
Used for titles that start with a lowercase letter, and all spaces are to be treated as underscores.

Generally useful for [[console variables]], e.g. [[_snd_mixahead]].

===See Also===
* [[Template:underscore-lowercase-underscores]], for cvars that start with an underscore (e.g. [[_snd_mixahead]])
&lt;/noinclude&gt;</text>
      <sha1>4slsbh1b5z0mglk0yvu4fuq6xoqqouv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>84</id>
      <parentid>83</parentid>
      <timestamp>2007-10-30T19:44:20Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="401">{{DISPLAYTITLE:{{lcfirst:{{PAGENAMEE}}}}}}
[[Category:Wrong title templates]]&lt;noinclude&gt;
Used for titles that start with a lowercase letter, and all spaces are to be treated as underscores.

Generally useful for [[console variables]], e.g. [[_snd_mixahead]].

===See Also===
* [[Template:underscore-lowercase-underscores]], for cvars that start with an underscore (e.g. [[_snd_mixahead]])
&lt;/noinclude&gt;</text>
      <sha1>644xbvpxemy5yzkdwcxrmrdrzxajg3x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>87</id>
      <parentid>84</parentid>
      <timestamp>2007-10-30T19:45:34Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="402">{{DISPLAYTITLE:{{lcfirst:{{PAGENAMEE}}}}}}&lt;noinclude&gt;
Used for titles that start with a lowercase letter, and all spaces are to be treated as underscores.

Generally useful for [[console variables]], e.g. [[_snd_mixahead]].

===See Also===
* [[Template:underscore-lowercase-underscores]], for cvars that start with an underscore (e.g. [[_snd_mixahead]])

[[Category:Wrong title templates]]
&lt;/noinclude&gt;</text>
      <sha1>5jrfr0eg09408gw2ogdqyfr4ftpt2wm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Main</title>
    <ns>10</ns>
    <id>563</id>
    <revision>
      <id>1470</id>
      <timestamp>2009-12-09T09:47:58Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>New page: &lt;div class=&quot;boilerplate&quot; id=&quot;mainarticle&quot;&gt; ''Main article: [[{{{1}}}]]'' &lt;/div&gt;</comment>
      <text xml:space="preserve" bytes="79">&lt;div class=&quot;boilerplate&quot; id=&quot;mainarticle&quot;&gt;
''Main article: [[{{{1}}}]]''
&lt;/div&gt;</text>
      <sha1>6i6g0djy5a6in652473qi81dvtncyw8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Mode spawnflags</title>
    <ns>10</ns>
    <id>948</id>
    <revision>
      <id>2662</id>
      <timestamp>2013-03-29T14:22:26Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>A small template for adding common spawnflags without duplicating the table to each page</comment>
      <text xml:space="preserve" bytes="407">{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
! width=&quot;50&quot; | Flag 
! width=&quot;150&quot; | Common Name 
! Description
|-
| 256
| Not on Easy
| {{{entity}}} will not spawn on Easy difficulty.
|-
| 512
| Not on Normal
| {{{entity}}} will not spawn on Normal difficulty.
|-
| 1024
| Not on Hard
| {{{entity}}} will not spawn on Hard difficulty.
|-
| 2048
| Not in Deathmatch
| {{{entity}}} will not spawn in Deathmatch mode.
|}</text>
      <sha1>4a7t33iktczexb2emrws0kskgl4hijr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Monsters</title>
    <ns>10</ns>
    <id>527</id>
    <revision>
      <id>1228</id>
      <timestamp>2009-09-25T07:35:56Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <comment>New page: {| style=&quot;margin:2em auto; clear:both;text-align:center;&quot; class=&quot;toccolours&quot; |align=center bgcolor=#6699CC|'''[[Monsters]] from [[Quake]]''' |- |[[Chthon]] | [[Death Knight]] | [[Enforcer]...</comment>
      <text xml:space="preserve" bytes="524">{| style=&quot;margin:2em auto; clear:both;text-align:center;&quot; class=&quot;toccolours&quot;
|align=center bgcolor=#6699CC|'''[[Monsters]] from [[Quake]]'''
|-
|[[Chthon]] | [[Death Knight]] | [[Enforcer]] | [[Fiend]] | [[Grunt]] | [[Knight]] | [[Ogre]] | [[Rotfish]] | [[Rottweiler]] | [[Scrag]] | [[Shambler]] | [[Shub-Niggurath]] | [[Spawn]] | [[Vore]] | [[Zombie]]
|-
|}
&lt;includeonly&gt;[[Category:Monsters]]&lt;/includeonly&gt;
&lt;noinclude&gt;''Note: This template will categorize articles that include it into [[:Category:Monsters]].''&lt;/noinclude&gt;</text>
      <sha1>gt77wpsgabkymzef282kaij4cmaqn2v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1259</id>
      <parentid>1228</parentid>
      <timestamp>2009-09-25T08:22:05Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="540">{| style=&quot;margin:2em auto; clear:both;text-align:center;&quot; class=&quot;toccolours&quot;
|align=center bgcolor=#6699CC|'''[[Monsters]] from [[Quake]]'''
|-
|[[Chthon]] | [[Death Knight]] | [[Enforcer]] | [[Fiend]] | [[Grunt]] | [[Knight]] | [[Ogre]] | [[Rotfish]] | [[Rottweiler]] | [[Scrag]] | [[Shambler]] | [[Shub-Niggurath]] | [[Spawn (monster)|Spawn]] | [[Vore]] | [[Zombie]]
|-
|}
&lt;includeonly&gt;[[Category:Monsters]]&lt;/includeonly&gt;
&lt;noinclude&gt;''Note: This template will categorize articles that include it into [[:Category:Monsters]].''&lt;/noinclude&gt;</text>
      <sha1>mbt9ni7pc6mqayjct2ermtchnjmtqzm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Quake items</title>
    <ns>10</ns>
    <id>463</id>
    <revision>
      <id>882</id>
      <timestamp>2008-06-18T21:49:08Z</timestamp>
      <contributor>
        <ip>65.66.150.198</ip>
      </contributor>
      <comment>New page: {| class=&quot;bottomtemplate&quot; align=&quot;center&quot; |- ! class=&quot;bottomtemphead&quot; | Items in Quake |- |class=&quot;bottomtemptext&quot; align=&quot;center&quot; | [[Health]] | [[Ammo Boxes]] | [[Mega-Health]] | [[Quad Dam...</comment>
      <text xml:space="preserve" bytes="315">{| class=&quot;bottomtemplate&quot; align=&quot;center&quot;
|-
! class=&quot;bottomtemphead&quot; | Items in Quake
|-
|class=&quot;bottomtemptext&quot; align=&quot;center&quot; | [[Health]] | [[Ammo Boxes]] | [[Mega-Health]] | [[Quad Damage]] | [[Biosuit]] | [[Pentagram of Protection]] | [[Ring of Shadows]] | [[Green Armor]] | [[Yellow Armor]] | [[Red Armor]]
|}</text>
      <sha1>l72tavtvyily8ti8ztoitiy3l6adot9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Underscore-lowercase-underscores</title>
    <ns>10</ns>
    <id>56</id>
    <revision>
      <id>77</id>
      <timestamp>2007-10-30T19:37:59Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{DISPLAYTITLE:_{{lcfirst:{{PAGENAMEE}}}}}}&lt;noinclude&gt; Used for titles that start with an underscore, followed by a lowercase letter, and all further spaces are to be treated as underscore...</comment>
      <text xml:space="preserve" bytes="272">{{DISPLAYTITLE:_{{lcfirst:{{PAGENAMEE}}}}}}&lt;noinclude&gt;
Used for titles that start with an underscore, followed by a lowercase letter, and all further spaces are to be treated as underscores.

Generally useful for [[console variables]], e.g. [[_snd_mixahead]].
&lt;/noinclude&gt;</text>
      <sha1>k40pmu8jvchji5skk4har6fhbgjakpf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>81</id>
      <parentid>77</parentid>
      <timestamp>2007-10-30T19:39:57Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="372">{{DISPLAYTITLE:_{{lcfirst:{{PAGENAMEE}}}}}}&lt;noinclude&gt;
Used for titles that start with an underscore, followed by a lowercase letter, and all further spaces are to be treated as underscores.

Generally useful for [[console variables]], e.g. [[_snd_mixahead]].

===See Also===
* [[Template:lowercase-underscores]], for cvars that don't start with an underscore
&lt;/noinclude&gt;</text>
      <sha1>b6ebkt15yjewskzulqcm0euywjig22f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>85</id>
      <parentid>81</parentid>
      <timestamp>2007-10-30T19:44:45Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="407">{{DISPLAYTITLE:_{{lcfirst:{{PAGENAMEE}}}}}}
[[Category:Wrong title templates]]&lt;noinclude&gt;
Used for titles that start with an underscore, followed by a lowercase letter, and all further spaces are to be treated as underscores.

Generally useful for [[console variables]], e.g. [[_snd_mixahead]].

===See Also===
* [[Template:lowercase-underscores]], for cvars that don't start with an underscore
&lt;/noinclude&gt;</text>
      <sha1>0iuyvd509a8fkauhkajw940kglihb7a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>88</id>
      <parentid>85</parentid>
      <timestamp>2007-10-30T19:45:41Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="408">{{DISPLAYTITLE:_{{lcfirst:{{PAGENAMEE}}}}}}&lt;noinclude&gt;
Used for titles that start with an underscore, followed by a lowercase letter, and all further spaces are to be treated as underscores.

Generally useful for [[console variables]], e.g. [[_snd_mixahead]].

===See Also===
* [[Template:lowercase-underscores]], for cvars that don't start with an underscore

[[Category:Wrong title templates]]
&lt;/noinclude&gt;</text>
      <sha1>j4foe00w3xdyrxf3qiyqgeln9n6a0gl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:Weapons</title>
    <ns>10</ns>
    <id>541</id>
    <revision>
      <id>1305</id>
      <timestamp>2009-09-27T18:35:30Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <comment>New page: {| style=&quot;margin:2em auto; clear:both;text-align:center;&quot; class=&quot;toccolours&quot; |align=center bgcolor=#6699CC|'''[[Weapons]] from [[Quake]]''' |- |[[Axe]] | [[Shotgun]] | [[Double-Barrelled S...</comment>
      <text xml:space="preserve" bytes="463">{| style=&quot;margin:2em auto; clear:both;text-align:center;&quot; class=&quot;toccolours&quot;
|align=center bgcolor=#6699CC|'''[[Weapons]] from [[Quake]]'''
|-
|[[Axe]] | [[Shotgun]] | [[Double-Barrelled Shotgun]] | [[Nailgun]] | [[Super Nailgun]] | [[Grenade Launcher]] | [[Rocket Launcher]] | [[Thunderbolt]]
|-
|}
&lt;includeonly&gt;[[Category:Weapons]]&lt;/includeonly&gt;
&lt;noinclude&gt;''Note: This template will categorize articles that include it into [[:Category:Weapons]].''&lt;/noinclude&gt;</text>
      <sha1>qq9pn25r595ulded7uqhyi7yecy9nxg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:deletion</title>
    <ns>10</ns>
    <id>828</id>
    <revision>
      <id>2440</id>
      <timestamp>2013-03-28T20:58:24Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>new template</comment>
      <text xml:space="preserve" bytes="798">&lt;includeonly&gt;[[Category:Article deletion requests]]&lt;/includeonly&gt;
{| style=&quot;border-top:2px solid #FF0000; border-right:2px solid red; border-bottom:2px solid red; border-left:2px solid red; background:yellow;&quot;
|'''This page has been requested for deletion by {{{1|unspecified user}}}
|}

&lt;noinclude&gt;
''The below text is not part of the template''

This template will automatically add the page it is inserted on to the [[:Category:Article deletion requests]] category. Mods and admins are encouraged to peruse the category and follow through where appropriate.
To use it, insert &lt;nowiki&gt;{{deletion|reason for deletion}}&lt;/nowiki&gt; into an article or page that you would like to have deleted. It is preferable for the template to be used at the top of a page, so it can be easily located.
&lt;/noinclude&gt;</text>
      <sha1>7gcs6v43iyypf0oc20q5fqj6ryo8py2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:file map</title>
    <ns>10</ns>
    <id>1021</id>
    <revision>
      <id>2851</id>
      <timestamp>2013-04-08T14:44:58Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created a template to use for links to map files on Quaddicted that can be altered later</comment>
      <text xml:space="preserve" bytes="66">[http://www.quaddicted.com/filebase/{{{file}}}.zip {{{file}}}.zip]</text>
      <sha1>it15lldhu51c039626n15k5au6b2o8z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2852</id>
      <parentid>2851</parentid>
      <timestamp>2013-04-08T14:47:16Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>trying to use if to allow link text to be something other than filename</comment>
      <text xml:space="preserve" bytes="102">[http://www.quaddicted.com/filebase/{{{file}}}.zip {{#if: {{{text}}} | {{{text}}} | {{{file}}}.zip }}]</text>
      <sha1>oleq6d6bwkqyj58iemwll2s68xszml1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2853</id>
      <parentid>2852</parentid>
      <timestamp>2013-04-08T14:52:44Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>fixed?</comment>
      <text xml:space="preserve" bytes="103">[http://www.quaddicted.com/filebase/{{{file}}}.zip {{#if: {{{text|}}} | {{{text}}} | {{{file}}}.zip }}]</text>
      <sha1>henssippq7h3tjiaqbow29coih23s8n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:lowercase</title>
    <ns>10</ns>
    <id>635</id>
    <revision>
      <id>1866</id>
      <timestamp>2013-03-25T01:12:33Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>creating lowercase template</comment>
      <text xml:space="preserve" bytes="295">&lt;span&gt;{{DISPLAYTITLE:{{#if:{{NAMESPACE}}|{{NAMESPACE}}:|}}{{lcfirst:{{PAGENAME}}}}}}&lt;/span&gt;&lt;noinclude&gt;
This page is a template that corrects articles where the first letter of the article should be displayed in lower case. These two sentences are not included and will not be shown.
&lt;/noinclude&gt;</text>
      <sha1>2iam11zbcrls2wem1wrirnh4sfnjvii</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1867</id>
      <parentid>1866</parentid>
      <timestamp>2013-03-25T01:15:22Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="393">&lt;span&gt;{{DISPLAYTITLE:{{#if:{{NAMESPACE}}|{{NAMESPACE}}:|}}{{lcfirst:{{PAGENAME}}}}}}&lt;/span&gt;&lt;noinclude&gt;
This page is a template that corrects articles where the first letter of the article should be displayed in lower case. Despite functioning on Wikipedia this way, it is not currently functioning properly here. Note, these three sentences are not included and will not be shown.
&lt;/noinclude&gt;</text>
      <sha1>qf3o7yj56iqop1jtqexy6j7u2cv7mac</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:map information</title>
    <ns>10</ns>
    <id>658</id>
    <revision>
      <id>1969</id>
      <timestamp>2013-03-25T09:31:39Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>testing info box for level information</comment>
      <text xml:space="preserve" bytes="777">{{Infobox
| italic title = {{{italic title|&lt;noinclude&gt;no&lt;/noinclude&gt;}}}
| bodyclass    = vevent
| bodystyle    = font-size: 90%;
| labelstyle   = white-space: nowrap;
| aboveclass   = summary
| abovestyle   = font-size: 110%; font-style: italic
| above        = {{{name|&lt;includeonly&gt;{{PAGENAME}}&lt;/includeonly&gt;}}}
| image        = {{#if:{{{image|}}}|[[file:{{{image}}}|{{px|{{{image_size|{{{image size|}}}}}}|frameless}}|alt={{{alt|}}}|{{#ifeq:{{{border|{{{Border|}}}}}}|yes|border}}]]}}
| captionstyle = font-size: 95%; line-height: 1.5em
| caption      = {{{caption|}}}

| class1       = description

| label1       = Author
| data1        = {{{author|}}}

| label2       = Filename
| data2        = {{{filename|}}}

| label3       = Included in
| data3        = {{{mod|}}}
}}</text>
      <sha1>r7z9ck7bkcwfd4x2sxvb1jm6iqvff34</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Template:todo</title>
    <ns>10</ns>
    <id>732</id>
    <revision>
      <id>2080</id>
      <timestamp>2013-03-25T15:29:08Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>Created a new To-Do template</comment>
      <text xml:space="preserve" bytes="986">[[Category:ToDo items]]
{| class=&quot;wikitable&quot;
|+[[{{PAGENAME}}]]
|{{{user|Unspecified user}}} added a To-Do; {{{todo|unspecified work}}}.
|}

&lt;noinclude&gt;
''The following contents will not be displayed as part of the template.''

This template should be used in an article's Talk page rather than the article itself to keep the articles looking cleaner, particularly if you don't know when you'll be getting back to the article to actually do the item. It could use some better formatting if someone wants to work on it. Adding this to a talk page will include the talk page in the [[:Category:ToDo items]] for referencing.

To use the template, type &lt;nowiki&gt;{{ToDo}}&lt;/nowiki&gt; into an edit box. You can optionally pass these additional parameters in the following format: &lt;nowiki&gt;{{ToDo|user=[[User:Username]]|todo=The thing you want to remember to do}}&lt;/nowiki&gt;.
* user : Indicate who added the template or expects to address the item
* todo : Indicate what needs to be done
&lt;/noinclude&gt;</text>
      <sha1>ctzpzh8voeshnpucwltumzw61m7zcr4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2082</id>
      <parentid>2080</parentid>
      <timestamp>2013-03-25T15:30:37Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>Hectate moved page [[Template:ToDo]] to [[Template:todo]]: using lowercase for templates for ease of use</comment>
      <text xml:space="preserve" bytes="986">[[Category:ToDo items]]
{| class=&quot;wikitable&quot;
|+[[{{PAGENAME}}]]
|{{{user|Unspecified user}}} added a To-Do; {{{todo|unspecified work}}}.
|}

&lt;noinclude&gt;
''The following contents will not be displayed as part of the template.''

This template should be used in an article's Talk page rather than the article itself to keep the articles looking cleaner, particularly if you don't know when you'll be getting back to the article to actually do the item. It could use some better formatting if someone wants to work on it. Adding this to a talk page will include the talk page in the [[:Category:ToDo items]] for referencing.

To use the template, type &lt;nowiki&gt;{{ToDo}}&lt;/nowiki&gt; into an edit box. You can optionally pass these additional parameters in the following format: &lt;nowiki&gt;{{ToDo|user=[[User:Username]]|todo=The thing you want to remember to do}}&lt;/nowiki&gt;.
* user : Indicate who added the template or expects to address the item
* todo : Indicate what needs to be done
&lt;/noinclude&gt;</text>
      <sha1>ctzpzh8voeshnpucwltumzw61m7zcr4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2086</id>
      <parentid>2082</parentid>
      <timestamp>2013-03-25T15:38:53Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="992">[[Category:ToDo items]]
{| class=&quot;wikitable&quot;
|+[[{{PAGENAME}}]]
|{{{user|Unspecified user}}} added a To-Do; '''{{{todo|unspecified work}}}.'''
|}

&lt;noinclude&gt;
''The following contents will not be displayed as part of the template.''

This template should be used in an article's Talk page rather than the article itself to keep the articles looking cleaner, particularly if you don't know when you'll be getting back to the article to actually do the item. It could use some better formatting if someone wants to work on it. Adding this to a talk page will include the talk page in the [[:Category:ToDo items]] for referencing.

To use the template, type &lt;nowiki&gt;{{ToDo}}&lt;/nowiki&gt; into an edit box. You can optionally pass these additional parameters in the following format: &lt;nowiki&gt;{{ToDo|user=[[User:Username]]|todo=The thing you want to remember to do}}&lt;/nowiki&gt;.
* user : Indicate who added the template or expects to address the item
* todo : Indicate what needs to be done
&lt;/noinclude&gt;</text>
      <sha1>oatbc3b7w7gupfjj8puzopzd5ddhvjd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2217</id>
      <parentid>2086</parentid>
      <timestamp>2013-03-26T13:02:14Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="973">[[Category:ToDo items]]
{| class=&quot;wikitable&quot;
|{{{user|Unspecified user}}} added a To-Do; '''{{{todo|unspecified work}}}.'''
|}

&lt;noinclude&gt;
''The following contents will not be displayed as part of the template.''

This template should be used in an article's Talk page rather than the article itself to keep the articles looking cleaner, particularly if you don't know when you'll be getting back to the article to actually do the item. It could use some better formatting if someone wants to work on it. Adding this to a talk page will include the talk page in the [[:Category:ToDo items]] for referencing.

To use the template, type &lt;nowiki&gt;{{ToDo}}&lt;/nowiki&gt; into an edit box. You can optionally pass these additional parameters in the following format: &lt;nowiki&gt;{{ToDo|user=[[User:Username]]|todo=The thing you want to remember to do}}&lt;/nowiki&gt;.
* user : Indicate who added the template or expects to address the item
* todo : Indicate what needs to be done
&lt;/noinclude&gt;</text>
      <sha1>tpz2jaqbojx18ymfa3ljsyv7y8lpe34</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2221</id>
      <parentid>2217</parentid>
      <timestamp>2013-03-26T13:06:32Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="679">[[Category:ToDo items]]
{| class=&quot;wikitable&quot;
|{{{user|Unspecified user}}} added a To-Do; '''{{{todo|unspecified work}}}.'''
|}

&lt;noinclude&gt;
''The following contents will not be displayed as part of the template.''

Adding this to an article will include the article in the [[:Category:ToDo items]] for referencing.

To use the template, type &lt;nowiki&gt;{{ToDo}}&lt;/nowiki&gt; into an edit box. You can optionally pass these additional parameters in the following format: &lt;nowiki&gt;{{ToDo|user=[[User:Username]]|todo=The thing you want to remember to do}}&lt;/nowiki&gt;.
* user : Indicate who added the template or expects to address the item
* todo : Indicate what needs to be done
&lt;/noinclude&gt;</text>
      <sha1>870sedgry499o3s513plu953zlsc1lc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2233</id>
      <parentid>2221</parentid>
      <timestamp>2013-03-26T13:28:01Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>noticed a slight formatting error when this template was used on a page - fixed</comment>
      <text xml:space="preserve" bytes="677">[[Category:ToDo items]]
{| class=&quot;wikitable&quot;
|{{{user|Unspecified user}}} added a To-Do; '''{{{todo|unspecified work}}}.'''
|}&lt;noinclude&gt;
''The following contents will not be displayed as part of the template.''

Adding this to an article will include the article in the [[:Category:ToDo items]] for referencing.

To use the template, type &lt;nowiki&gt;{{ToDo}}&lt;/nowiki&gt; into an edit box. You can optionally pass these additional parameters in the following format: &lt;nowiki&gt;{{ToDo|user=[[User:Username]]|todo=The thing you want to remember to do}}&lt;/nowiki&gt;.
* user : Indicate who added the template or expects to address the item
* todo : Indicate what needs to be done
&lt;/noinclude&gt;</text>
      <sha1>npwwafn403h7s7mreilvpxe7k8hjrc4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2442</id>
      <parentid>2233</parentid>
      <timestamp>2013-03-28T21:00:36Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>used &lt;includeonly&gt; correctly here</comment>
      <text xml:space="preserve" bytes="704">&lt;includeonly&gt;[[Category:ToDo items]]&lt;/includeonly&gt;
{| class=&quot;wikitable&quot;
|{{{user|Unspecified user}}} added a To-Do; '''{{{todo|unspecified work}}}.'''
|}&lt;noinclude&gt;
''The following contents will not be displayed as part of the template.''

Adding this to an article will include the article in the [[:Category:ToDo items]] for referencing.

To use the template, type &lt;nowiki&gt;{{ToDo}}&lt;/nowiki&gt; into an edit box. You can optionally pass these additional parameters in the following format: &lt;nowiki&gt;{{ToDo|user=[[User:Username]]|todo=The thing you want to remember to do}}&lt;/nowiki&gt;.
* user : Indicate who added the template or expects to address the item
* todo : Indicate what needs to be done
&lt;/noinclude&gt;</text>
      <sha1>hz622swzkmutnp3aavpcl36ygxuqyv0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Temporary entity messages</title>
    <ns>0</ns>
    <id>48</id>
    <revision>
      <id>58</id>
      <timestamp>2007-10-30T18:14:17Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: FIXME (description)  To use a temporary entity effect, you have to send the [[SVC_TEMPENTITY]] network message. For example:   [[WriteByte]] ([[MSG_BROADCAST]], [[TE_GUNSHOT]]);  Then writ...</comment>
      <text xml:space="preserve" bytes="2449">FIXME (description)

To use a temporary entity effect, you have to send the [[SVC_TEMPENTITY]] network message. For example:

 [[WriteByte]] ([[MSG_BROADCAST]], [[TE_GUNSHOT]]);

Then write what you need to for the specific effect.

{|style=&quot;border:1px solid #000000&quot;
|-
|style=&quot;align:center&quot;| '''Name'''
|style=&quot;align:center&quot;| '''Supported By'''
|-
| [[TE_SPIKE]] = 0;                || All Engines
|-
| [[TE_SUPERSPIKE]] = 1;           || All Engines
|-
| [[TE_GUNSHOT]] = 2;              || All Engines
|-
| [[TE_EXPLOSION]] = 3;            || All Engines
|-
| [[TE_TAREXPLOSION]] = 4;         || All Engines
|-
| [[TE_LIGHTNING1]] = 5;           || All Engines
|-
| [[TE_LIGHTNING2]] = 6;           || All Engines
|-
| [[TE_WIZSPIKE]] = 7;             || All Engines
|-
| [[TE_KNIGHTSPIKE]] = 8;          || All Engines
|-
| [[TE_LIGHTNING3]] = 9;           || All Engines
|-
| [[TE_LAVASPLASH]] = 10;          || All Engines
|-
| [[TE_TELEPORT]] = 11;            || All Engines
|-
| [[TE_EXPLOSION2]] = 12;          || All Engines above and including DOS Quake 1.08
|-
| [[TE_BEAM]] = 13;                || All Engines above and including DOS Quake 1.08
|-
| [[TE_SNOW]] = 14;                || [[TomazQuake]]
|-
| [[TE_RAIN]] = 15;                || [[TomazQuake]]
|-
| [[TE_PLASMA]] = 16;              || [[TomazQuake]]
|-
| [[TE_RAILTRAIL]] = 17;           || [[TomazQuake]]
|-
| [[TE_BLOOD]] = 50;               || [[DarkPlaces]]
|-
| [[TE_SPARK]] = 51;               || [[DarkPlaces]]
|-
| [[TE_BLOODSHOWER]] = 52;         || [[DarkPlaces]]
|-
| [[TE_EXPLOSIONRGB]] = 53;        || [[DarkPlaces]]
|-
| [[TE_PARTICLECUBE]] = 54;        || [[DarkPlaces]]
|-
| [[TE_PARTICLERAIN]] = 55;        || [[DarkPlaces]]
|-
| [[TE_PARTICLESNOW]] = 56;        || [[DarkPlaces]]
|-
| [[TE_GUNSHOTQUAD]] = 57;         || [[DarkPlaces]]
|-
| [[TE_SPIKEQUAD]] = 58;           || [[DarkPlaces]]
|-
| [[TE_SUPERSPIKEQUAD]] = 59;      || [[DarkPlaces]]
|-
| [[TE_EXPLOSIONQUAD]] = 70;       || [[DarkPlaces]]
|-
| [[TE_SMALLFLASH]] = 71;          || [[DarkPlaces]]
|-
| [[TE_CUSTOMFLASH]] = 72;         || [[DarkPlaces]]
|-
| [[TE_FLAMEJET]] = 74;            || [[DarkPlaces]]
|-
| [[TE_PLASMABURN]] = 75;          || [[DarkPlaces]]
|-
| [[TE_TEI_G3]] = 76;              || [[DarkPlaces]]
|-
| [[TE_TEI_SMOKE]] = 77;           || [[DarkPlaces]]
|-
| [[TE_TEI_BIGEXPLOSION]] = 78;    || [[DarkPlaces]]
|-
| [[TE_TEI_PLASMAHIT]] = 79;       || [[DarkPlaces]]
|-</text>
      <sha1>i1x8jakqeklhrtwvxz20eltvta9n2u8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>60</id>
      <parentid>58</parentid>
      <timestamp>2007-10-30T18:17:00Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2452">FIXME (description)

To use a temporary entity effect, you have to send the [[SVC_TEMPENTITY]] network message. For example:

 [[WriteByte]] ([[MSG_BROADCAST]], [[TE_GUNSHOT]]);

Then write what you need to for the specific effect.

{|style=&quot;border:1px solid #000000&quot;
|-
|style=&quot;align:center&quot;| '''Name'''
|style=&quot;align:center&quot;| '''Supported By'''
|-
| [[TE_SPIKE]] = 0;                || All Engines
|-
| [[TE_SUPERSPIKE]] = 1;           || All Engines
|-
| [[TE_GUNSHOT]] = 2;              || All Engines
|-
| [[TE_EXPLOSION]] = 3;            || All Engines
|-
| [[TE_TAREXPLOSION]] = 4;         || All Engines
|-
| [[TE_LIGHTNING1]] = 5;           || All Engines
|-
| [[TE_LIGHTNING2]] = 6;           || All Engines
|-
| [[TE_WIZSPIKE]] = 7;             || All Engines
|-
| [[TE_KNIGHTSPIKE]] = 8;          || All Engines
|-
| [[TE_LIGHTNING3]] = 9;           || All Engines
|-
| [[TE_LAVASPLASH]] = 10;          || All Engines
|-
| [[TE_TELEPORT]] = 11;            || All Engines
|-
| [[TE_EXPLOSION2]] = 12;          || All Engines above and including DOS Quake 1.08
|-
| [[TE_BEAM]] = 13;                || All Engines above and including DOS Quake 1.08
|-
| [[TE_SNOW]] = 14;                || [[TomazQuake]]
|-
| [[TE_RAIN]] = 15;                || [[TomazQuake]]
|-
| [[TE_PLASMA]] = 16;              || [[TomazQuake]]
|-
| [[TE_RAILTRAIL]] = 17;           || [[TomazQuake]]
|-
| [[TE_BLOOD]] = 50;               || [[DarkPlaces]]
|-
| [[TE_SPARK]] = 51;               || [[DarkPlaces]]
|-
| [[TE_BLOODSHOWER]] = 52;         || [[DarkPlaces]]
|-
| [[TE_EXPLOSIONRGB]] = 53;        || [[DarkPlaces]]
|-
| [[TE_PARTICLECUBE]] = 54;        || [[DarkPlaces]]
|-
| [[TE_PARTICLERAIN]] = 55;        || [[DarkPlaces]]
|-
| [[TE_PARTICLESNOW]] = 56;        || [[DarkPlaces]]
|-
| [[TE_GUNSHOTQUAD]] = 57;         || [[DarkPlaces]]
|-
| [[TE_SPIKEQUAD]] = 58;           || [[DarkPlaces]]
|-
| [[TE_SUPERSPIKEQUAD]] = 59;      || [[DarkPlaces]]
|-
| [[TE_EXPLOSIONQUAD]] = 70;       || [[DarkPlaces]]
|-
| [[TE_SMALLFLASH]] = 71;          || [[DarkPlaces]]
|-
| [[TE_CUSTOMFLASH]] = 72;         || [[DarkPlaces]]
|-
| [[TE_FLAMEJET]] = 74;            || [[DarkPlaces]]
|-
| [[TE_PLASMABURN]] = 75;          || [[DarkPlaces]]
|-
| [[TE_TEI_G3]] = 76;              || [[DarkPlaces]]
|-
| [[TE_TEI_SMOKE]] = 77;           || [[DarkPlaces]]
|-
| [[TE_TEI_BIGEXPLOSION]] = 78;    || [[DarkPlaces]]
|-
| [[TE_TEI_PLASMAHIT]] = 79;       || [[DarkPlaces]]
|-
|}</text>
      <sha1>it74di005qrz7v62ylh1wpiurgry9cj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1850</id>
      <parentid>60</parentid>
      <timestamp>2013-03-25T00:30:52Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="2476">FIXME (description)

To use a temporary entity effect, you have to send the [[SVC_TEMPENTITY]] network message. For example:

 [[WriteByte]] ([[MSG_BROADCAST]], [[TE_GUNSHOT]]);

Then write what you need to for the specific effect.

{|style=&quot;border:1px solid #000000&quot;
|-
|style=&quot;align:center&quot;| '''Name'''
|style=&quot;align:center&quot;| '''Supported By'''
|-
| [[TE_SPIKE]] = 0;                || All Engines
|-
| [[TE_SUPERSPIKE]] = 1;           || All Engines
|-
| [[TE_GUNSHOT]] = 2;              || All Engines
|-
| [[TE_EXPLOSION]] = 3;            || All Engines
|-
| [[TE_TAREXPLOSION]] = 4;         || All Engines
|-
| [[TE_LIGHTNING1]] = 5;           || All Engines
|-
| [[TE_LIGHTNING2]] = 6;           || All Engines
|-
| [[TE_WIZSPIKE]] = 7;             || All Engines
|-
| [[TE_KNIGHTSPIKE]] = 8;          || All Engines
|-
| [[TE_LIGHTNING3]] = 9;           || All Engines
|-
| [[TE_LAVASPLASH]] = 10;          || All Engines
|-
| [[TE_TELEPORT]] = 11;            || All Engines
|-
| [[TE_EXPLOSION2]] = 12;          || All Engines above and including DOS Quake 1.08
|-
| [[TE_BEAM]] = 13;                || All Engines above and including DOS Quake 1.08
|-
| [[TE_SNOW]] = 14;                || [[TomazQuake]]
|-
| [[TE_RAIN]] = 15;                || [[TomazQuake]]
|-
| [[TE_PLASMA]] = 16;              || [[TomazQuake]]
|-
| [[TE_RAILTRAIL]] = 17;           || [[TomazQuake]]
|-
| [[TE_BLOOD]] = 50;               || [[DarkPlaces]]
|-
| [[TE_SPARK]] = 51;               || [[DarkPlaces]]
|-
| [[TE_BLOODSHOWER]] = 52;         || [[DarkPlaces]]
|-
| [[TE_EXPLOSIONRGB]] = 53;        || [[DarkPlaces]]
|-
| [[TE_PARTICLECUBE]] = 54;        || [[DarkPlaces]]
|-
| [[TE_PARTICLERAIN]] = 55;        || [[DarkPlaces]]
|-
| [[TE_PARTICLESNOW]] = 56;        || [[DarkPlaces]]
|-
| [[TE_GUNSHOTQUAD]] = 57;         || [[DarkPlaces]]
|-
| [[TE_SPIKEQUAD]] = 58;           || [[DarkPlaces]]
|-
| [[TE_SUPERSPIKEQUAD]] = 59;      || [[DarkPlaces]]
|-
| [[TE_EXPLOSIONQUAD]] = 70;       || [[DarkPlaces]]
|-
| [[TE_SMALLFLASH]] = 71;          || [[DarkPlaces]]
|-
| [[TE_CUSTOMFLASH]] = 72;         || [[DarkPlaces]]
|-
| [[TE_FLAMEJET]] = 74;            || [[DarkPlaces]]
|-
| [[TE_PLASMABURN]] = 75;          || [[DarkPlaces]]
|-
| [[TE_TEI_G3]] = 76;              || [[DarkPlaces]]
|-
| [[TE_TEI_SMOKE]] = 77;           || [[DarkPlaces]]
|-
| [[TE_TEI_BIGEXPLOSION]] = 78;    || [[DarkPlaces]]
|-
| [[TE_TEI_PLASMAHIT]] = 79;       || [[DarkPlaces]]
|-
|}
[[Category:DarkPlaces]]</text>
      <sha1>7786aokxtcmrsof36epgmnwg68wl672</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Tenebrae</title>
    <ns>0</ns>
    <id>152</id>
    <revision>
      <id>239</id>
      <timestamp>2007-11-02T20:16:09Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{Infobox Engine |name=Tenebrae |author=Penta |based-on=[[GLQuake]] |first-release=? |newest-release=? |website=[http://tenebrae.sourceforge.net/ here] }}  {{Engines}}</comment>
      <text xml:space="preserve" bytes="167">{{Infobox Engine
|name=Tenebrae
|author=Penta
|based-on=[[GLQuake]]
|first-release=?
|newest-release=?
|website=[http://tenebrae.sourceforge.net/ here]
}}

{{Engines}}</text>
      <sha1>rv3zpfn7t2vmflkr7dw6qtmv3qora0a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Test:Hacks</title>
    <ns>0</ns>
    <id>1004</id>
    <revision>
      <id>2804</id>
      <timestamp>2013-04-07T13:36:07Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>Created page with &quot;This page is for testing ideas about how to explain [[Map based hacks]] more concisely and clearly.  ===Triggerable explosion=== This simple hack allows the creation of a trig...&quot;</comment>
      <text xml:space="preserve" bytes="715">This page is for testing ideas about how to explain [[Map based hacks]] more concisely and clearly.

===Triggerable explosion===
This simple hack allows the creation of a triggerable explosion effect.
{| class=&quot;wikitable&quot; width=&quot;300&quot;
|-
! colspan=&quot;2&quot; | info_notnull (point)
|-
| width=&quot;90&quot; | '''targetname'''
| [''any name'']
|-
| '''use'''
| OgreGrenadeExplode
|}

'''Notes'''&lt;br&gt;
* The following values can be used in place of OgreGrenadeExplode in the use field:
** tbaby_die2 - Blue spawn death explosion
** barrel_explode - Exploding box explosion (very powerful)
** OgreGrenadeExplode - Ogre grenade explosion
* The info_notnull is removed after the effect has played so the effect can only be triggered once.</text>
      <sha1>66qhhvuea4qm61k9e2uh8izrysgfixn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2806</id>
      <parentid>2804</parentid>
      <timestamp>2013-04-07T13:42:16Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="663">This page is for testing ideas about how to explain [[Map based hacks]] more concisely and clearly.

===Triggerable explosion===
This simple hack allows the creation of a triggerable explosion effect.
{| class=&quot;wikitable&quot; width=&quot;300&quot;
|-
! colspan=&quot;2&quot; | info_notnull (point)
|-
| '''use'''
| OgreGrenadeExplode
|}

'''Notes'''&lt;br&gt;
* The following values can be used in place of OgreGrenadeExplode in the use field:
** tbaby_die2 - Blue spawn death explosion
** barrel_explode - Exploding box explosion (very powerful)
** OgreGrenadeExplode - Ogre grenade explosion
* The info_notnull is removed after the effect has played so the effect can only be triggered once.</text>
      <sha1>hecv1rckp8h991nivhjcbi5wr2c8090</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Test:Vore</title>
    <ns>0</ns>
    <id>999</id>
    <revision>
      <id>2779</id>
      <timestamp>2013-04-07T08:56:27Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>creating as test for combined monster entity info</comment>
      <text xml:space="preserve" bytes="4450">{{DISPLAYTITLE:Vore}}

&lt;!--
Page structure:

Page Title:
+image
+infobox monster
+user manual description
+description
+tactics when fighting
&gt;&gt;category monsters&lt;&lt;
--
Entity:
+infobox entity
+placement tips
+attributes
  -keys
  -spawnflags
+definition
&gt;&gt;category entities&lt;&lt;
--&gt;

[[Image:Shalrath.gif|left]]
{{Infobox Monster
|name=Vore
|entity=monster_shalrath
|model=shalrath.mdl&lt;br /&gt;h_shal.mdl (head gib)
|health=400
|attacks=Homing firepod(~30 dmg)
|drop=nothing
|1stappearance=[[e2m6]]
|gameversion=Registered
}}

''&quot;A spideresque hybrid horror. Keep your eye on the firepod he hurls.&quot;''

'''Vores''' (also known as Shalraths) are very tough opponents that attack with homing explosive pods that deal about ~30 damage (but extra damage vs [[Zombie|Zombies]] gibbing them). When a Vore throws one, run. Fortunately, the firepods don't fly quite as fast as you can run (unless you play on Nightmare difficulty). Get around a sharp corner, which the pods have difficulty maneuvering around. To kill a Vore you will generally have to find cover and get behind it whenever a firepod is hurled at you, popping out regularly to wear the Vore down.

Another useful tactic is to lure the homing pods into another monster, causing the offended monster to [[monster infighting|fight]] the Vore while you watch. Note that Vores projectiles don't explode on himself. If you are bored, and have enough room, you can run in circles as the Vore throws more and more firepods. Once you have half a dozen or so of these things flying after you, lure them into someone for an extra painful explosion. These tactics are especially useful in certain user-made maps where ammo is scarce.

''&quot;Player was exploded by a Vore&quot;''

==Entity information==

{{Infobox_entity
| classname = monster_shalrath
| commonname = [[Vore]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 72
| quakec = [[shalrath.qc]]
| precaches =
progs/shalrath.mdl&lt;br&gt;
progs/h_shal.mdl&lt;br&gt;
progs/v_spike.mdl&lt;br&gt;
shalrath/attack.wav&lt;br&gt;
shalrath/attack2.wav&lt;br&gt;
shalrath/death.wav&lt;br&gt;
shalrath/idle.wav&lt;br&gt;
shalrath/pain.wav&lt;br&gt;
shalrath/sight.wav&lt;br&gt;
}}

'''monster_shalrath''' is the entity for placing [[Vore|Vores]] in a level.

===Usage===
Vores are best placed where there is not too much easy cover, so that the player has to move around, or even run away to avoid getting hit by the homing bombs the Vore fires. Giving the player too much cover can make Vores boring to fight, as the player can safely take potshots without ever really having to worry about Voreballs hitting them.

Vores actually work quite well in open areas with little cover, as it forces the player to run from the Voreballs, and can lead them to drawing the Voreballs into other enemies to create [[Monster_infighting|monster infighting]] situations.

===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Vore. When triggered, the Vore will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Vore dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Vore dies.
|}

====Spawnflags====
The monster_vore entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Vore will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Vore
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-32 -32 -24, 32 32 48) model(&quot;:progs/shalrath.mdl&quot;)
    = monster_shalrath : &quot;Vore&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_shalrath (1 0 0) (-32 -32 -24) (32 32 48) AMBUSH
Vore (Shalrath), 400 health points.

Flags:
&quot;ambush&quot; -  the monster will only wake up on really seeing the player,
            not another monster getting angry
*/
&lt;/pre&gt;

[[Category:Quake entities]]</text>
      <sha1>6kdgob6906qdj8wakryjfbfof74qyj8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2789</id>
      <parentid>2779</parentid>
      <timestamp>2013-04-07T09:55:48Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>trying a combined monster info + entity info format</comment>
      <text xml:space="preserve" bytes="5064">{{DISPLAYTITLE:Vore}}

{{Infobox Monster
| image = Shalrath.gif
| name = Vore
| health = 400
| attacks = Homing firepod (~30 dmg)
| drop = nothing
| 1stappearance = [[e2m6]]
| gameversion = Registered
}}


''&quot;A spideresque hybrid horror. Keep your eye on the firepod he hurls.&quot;''

==Overview==
A '''Vore''' (also known as a Shalrath) is one of the toughest regular enemies the player will encounter in Quake. It is a three-legged monster that moves very slowly, but throws spiked bombs that home in on the player's position, making them often one of the trickiest enemies to deal with, especially in combination with other enemies.

The homing firepods (more commonly known as Voreballs) that are thrown by the vore can follow the player around quite sharp corners when close enough, and do not explode until they collide with something. This can make them very tricky for a player to shake, especially on [[Nightmare difficulty]], where they are fired more frequently and move faster than on lower skill levels.

==Tactics==
Because of the danger posed by Voreballs, fighting Vores in large open spaces, or where the player is exposed but cannot easily move around (such as on a ledge) is not usually done. Many players deal with Vores from a position that provides cover and enables them to shoot at the Vore, then duck into cover until the Voreball explodes before re-emerging to continue their attack and wear the Vore down.

When fighting Vores in an open space, Voreballs will tend to accumulate in a trail behind a constantly moving player. Voreballs that are following the player can be used against other enemies quite easily, and by simply moving behind another enemy so that it is blocking the path of the Voreball, the player can start [[monster infighting]] to save both ammunition and time.

Since Voreballs will home toward the player gradually, they will often fly around obstacles that are otherwise blocking their path to the player when following very close behind. The best way to safely dispose of closely trailing Voreballs is usually to move quickly around a series of sharp corners, or run in a circle around a pillar or other obstacle. However, if the Voreball gets too close, it can become impossible to avoid in a conventional manner.

==Death message==
''&quot;Player was exploded by a Vore&quot;''

----

==Entity information==

{{Infobox_entity
| classname = monster_shalrath
| commonname = [[Vore]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 72
| quakec = [[shalrath.qc]]
| precaches =
progs/shalrath.mdl&lt;br&gt;
progs/h_shal.mdl&lt;br&gt;
progs/v_spike.mdl&lt;br&gt;
shalrath/attack.wav&lt;br&gt;
shalrath/attack2.wav&lt;br&gt;
shalrath/death.wav&lt;br&gt;
shalrath/idle.wav&lt;br&gt;
shalrath/pain.wav&lt;br&gt;
shalrath/sight.wav&lt;br&gt;
}}

'''monster_shalrath''' is the entity for placing [[Vore|Vores]] in a level.

===Usage===
Vores are best placed where there is not too much easy cover, so that the player has to move around, or even run away to avoid getting hit by the homing bombs the Vore fires. Giving the player too much cover can make Vores boring to fight, as the player can safely take potshots without ever really having to worry about Voreballs hitting them.

Vores actually work quite well in open areas with little cover, as it forces the player to run from the Voreballs, and can lead them to drawing the Voreballs into other enemies to create [[Monster_infighting|monster infighting]] situations.

===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Vore. When triggered, the Vore will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Vore dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Vore dies.
|}

====Spawnflags====
The monster_vore entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Vore will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Vore
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-32 -32 -24, 32 32 48) model(&quot;:progs/shalrath.mdl&quot;)
    = monster_shalrath : &quot;Vore&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_shalrath (1 0 0) (-32 -32 -24) (32 32 48) AMBUSH
Vore (Shalrath), 400 health points.

Flags:
&quot;ambush&quot; -  the monster will only wake up on really seeing the player,
            not another monster getting angry
*/
&lt;/pre&gt;

[[Category:Quake entities]]</text>
      <sha1>n1cl7dosrcur0mzj32xpsmbpqrku3rj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2795</id>
      <parentid>2789</parentid>
      <timestamp>2013-04-07T10:15:47Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>rearranged a bit</comment>
      <text xml:space="preserve" bytes="5064">{{DISPLAYTITLE:Vore}}

{{Infobox Monster
| image = Shalrath.gif
| name = Vore
| health = 400
| attacks = Homing firepod (~30 dmg)
| drop = nothing
| 1stappearance = [[e2m6]]
| gameversion = Registered
| manualtext = A spideresque hybrid horror. Keep your eye on the firepod he hurls.
| deathmessage = Player was exploded by a Vore
}}

The '''Vore''' (also known as a Shalrath) is one of the toughest regular enemies the player will encounter in Quake. It is a three-legged monster that moves very slowly, but throws spiked bombs that home in on the player's position, making them often one of the trickiest enemies to deal with, especially in combination with other enemies.

The homing firepods (more commonly known as Voreballs) that are thrown by the vore can follow the player around quite sharp corners when close enough, and do not explode until they collide with something. This can make them very tricky for a player to shake, especially on [[Nightmare difficulty]], where they are fired more frequently and move faster than on lower skill levels.

==Tactics==
Because of the danger posed by Voreballs, fighting Vores in large open spaces, or where the player is exposed but cannot easily move around (such as on a ledge) is not usually done. Many players deal with Vores from a position that provides cover and enables them to shoot at the Vore, then duck into cover until the Voreball explodes before re-emerging to continue their attack and wear the Vore down.

When fighting Vores in an open space, Voreballs will tend to accumulate in a trail behind a constantly moving player. Voreballs that are following the player can be used against other enemies quite easily, and by simply moving behind another enemy so that it is blocking the path of the Voreball, the player can start [[monster infighting]] to save both ammunition and time.

Since Voreballs will home toward the player gradually, they will often fly around obstacles that are otherwise blocking their path to the player when following very close behind. The best way to safely dispose of closely trailing Voreballs is usually to move quickly around a series of sharp corners, or run in a circle around a pillar or other obstacle. However, if the Voreball gets too close, it can become impossible to avoid in a conventional manner.

&lt;br&gt;
----
&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_shalrath
| commonname = [[Vore]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 72
| quakec = [[shalrath.qc]]
| precaches =
progs/shalrath.mdl&lt;br&gt;
progs/h_shal.mdl&lt;br&gt;
progs/v_spike.mdl&lt;br&gt;
shalrath/attack.wav&lt;br&gt;
shalrath/attack2.wav&lt;br&gt;
shalrath/death.wav&lt;br&gt;
shalrath/idle.wav&lt;br&gt;
shalrath/pain.wav&lt;br&gt;
shalrath/sight.wav&lt;br&gt;
}}

==Entity information==

'''monster_shalrath''' is the entity for placing '''Vores''' in a level.

===Usage===
Vores are best placed where there is not too much easy cover, so that the player has to move around, or even run away to avoid getting hit by the homing bombs the Vore fires. Giving the player too much cover can make Vores boring to fight, as the player can safely take potshots without ever really having to worry about Voreballs hitting them.

Vores actually work quite well in open areas with little cover, as it forces the player to run from the Voreballs, and can lead them to drawing the Voreballs into other enemies to create [[Monster_infighting|monster infighting]] situations.

===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Vore. When triggered, the Vore will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Vore dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Vore dies.
|}

====Spawnflags====
The monster_vore entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Vore will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Vore
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-32 -32 -24, 32 32 48) model(&quot;:progs/shalrath.mdl&quot;)
    = monster_shalrath : &quot;Vore&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_shalrath (1 0 0) (-32 -32 -24) (32 32 48) AMBUSH
Vore (Shalrath), 400 health points.

Flags:
&quot;ambush&quot; -  the monster will only wake up on really seeing the player,
            not another monster getting angry
*/
&lt;/pre&gt;

[[Category:Quake entities]]</text>
      <sha1>g6uiudfy5eyafx81ktdgb4cqy84srac</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2796</id>
      <parentid>2795</parentid>
      <timestamp>2013-04-07T10:34:13Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>added a bit more info (zombie related etc.)</comment>
      <text xml:space="preserve" bytes="5977">{{DISPLAYTITLE:Vore}}

{{Infobox Monster
| image = Shalrath.gif
| name = Vore
| health = 400
| attacks = Homing firepod (40 dmg)
| drop = nothing
| 1stappearance = [[e2m6]]
| gameversion = Registered
| manualtext = A spideresque hybrid horror. Keep your eye on the firepod he hurls.
| deathmessage = Player was exploded by a Vore
}}

The '''Vore''' (also known as a Shalrath) is one of the toughest regular enemies the player will encounter in Quake. It is a three-legged monster that moves very slowly, but throws spiked bombs that home in on the player's position, making them often one of the trickiest enemies to deal with, especially in combination with other enemies.

The homing firepods (more commonly known as Voreballs) that are thrown by the vore can follow the player around quite sharp corners when close enough, and do not explode until they collide with something. This can make them very tricky for a player to shake, especially on [[Nightmare difficulty]], where they are fired more frequently and move faster than on lower skill levels.

==Tactics==
Because of the danger posed by Voreballs, fighting Vores in large open spaces, or where the player is exposed but cannot easily move around (such as on a ledge) is not usually done. Many players deal with Vores from a position that provides cover and enables them to shoot at the Vore, then duck into cover until the Voreball explodes before re-emerging to continue their attack and wear the Vore down.

When fighting Vores in an open space, Voreballs will tend to accumulate in a trail behind a constantly moving player. Voreballs that are following the player can be used against other enemies quite easily, and by simply moving behind another enemy so that it is blocking the path of the Voreball, the player can start [[monster infighting]] to save both ammunition and time.

Since Voreballs will home toward the player gradually, they will often fly around obstacles that are otherwise blocking their path to the player when following very close behind. The best way to safely dispose of closely trailing Voreballs is usually to move quickly around a series of sharp corners, or run in a circle around a pillar or other obstacle. However, if the Voreball gets too close, it can become impossible to avoid in a conventional manner.

==Relationship with other monsters==
Because Vores fire projectiles, and especially because these projectiles can be directed somewhat by crafty players, Vores often get into fights with other monsters. If the vore attracts the attention of multiple monsters, its slow speed often leads to it being killed by even weaker enemies such as [[Scrag|Scrags]].

One particular thing to note about the Vore is that it is one of the few monsters capable of gibbing a [[Zombie]]. This is enabled by a special case in the Voreball code that causes them to inflict extra damage to Zombies - 110 points of damage versus the standard 40 points.

&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_shalrath
| commonname = [[Vore]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 72
| quakec = [[shalrath.qc]]
| precaches =
progs/shalrath.mdl&lt;br&gt;
progs/h_shal.mdl&lt;br&gt;
progs/v_spike.mdl&lt;br&gt;
shalrath/attack.wav&lt;br&gt;
shalrath/attack2.wav&lt;br&gt;
shalrath/death.wav&lt;br&gt;
shalrath/idle.wav&lt;br&gt;
shalrath/pain.wav&lt;br&gt;
shalrath/sight.wav&lt;br&gt;
}}

==Entity information==

'''monster_shalrath''' is the [[Entity|entity]] for placing '''Vores''' in a level.

===Usage===
Vores are best placed where there is not too much easy cover, so that the player has to move around, or even run away to avoid getting hit by the homing bombs the Vore fires. Giving the player too much cover can make Vores boring to fight, as the player can safely take potshots without ever really having to worry about Voreballs hitting them.

Vores actually work quite well in open areas with little cover, as it forces the player to run from the Voreballs, and can lead them to drawing the Voreballs into other enemies to create [[Monster_infighting|monster infighting]] situations.

Using Vores in areas with cover can work if there are multiple Vores, making it difficult for the player to hide completely out of sight from ''all'' the Vores at any one time. Adding other monsters at ground level to keep the player from standing in cover also works well.

===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Vore. When triggered, the Vore will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Vore dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Vore dies.
|}

====Spawnflags====
The monster_vore entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Vore will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Vore
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-32 -32 -24, 32 32 48) model(&quot;:progs/shalrath.mdl&quot;)
    = monster_shalrath : &quot;Vore&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_shalrath (1 0 0) (-32 -32 -24) (32 32 48) AMBUSH
Vore (Shalrath), 400 health points.

Flags:
&quot;ambush&quot; -  the monster will only wake up on really seeing the player,
            not another monster getting angry
*/
&lt;/pre&gt;

[[Category:Quake entities]]</text>
      <sha1>mywnjohgll4xx1odte3b46mell4qjdz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2798</id>
      <parentid>2796</parentid>
      <timestamp>2013-04-07T10:44:51Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>testing multiple category membership</comment>
      <text xml:space="preserve" bytes="5998">{{DISPLAYTITLE:Vore}}

{{Infobox Monster
| image = Shalrath.gif
| name = Vore
| health = 400
| attacks = Homing firepod (40 dmg)
| drop = nothing
| 1stappearance = [[e2m6]]
| gameversion = Registered
| manualtext = A spideresque hybrid horror. Keep your eye on the firepod he hurls.
| deathmessage = Player was exploded by a Vore
}}

The '''Vore''' (also known as a Shalrath) is one of the toughest regular enemies the player will encounter in Quake. It is a three-legged monster that moves very slowly, but throws spiked bombs that home in on the player's position, making them often one of the trickiest enemies to deal with, especially in combination with other enemies.

The homing firepods (more commonly known as Voreballs) that are thrown by the vore can follow the player around quite sharp corners when close enough, and do not explode until they collide with something. This can make them very tricky for a player to shake, especially on [[Nightmare difficulty]], where they are fired more frequently and move faster than on lower skill levels.

==Tactics==
Because of the danger posed by Voreballs, fighting Vores in large open spaces, or where the player is exposed but cannot easily move around (such as on a ledge) is not usually done. Many players deal with Vores from a position that provides cover and enables them to shoot at the Vore, then duck into cover until the Voreball explodes before re-emerging to continue their attack and wear the Vore down.

When fighting Vores in an open space, Voreballs will tend to accumulate in a trail behind a constantly moving player. Voreballs that are following the player can be used against other enemies quite easily, and by simply moving behind another enemy so that it is blocking the path of the Voreball, the player can start [[monster infighting]] to save both ammunition and time.

Since Voreballs will home toward the player gradually, they will often fly around obstacles that are otherwise blocking their path to the player when following very close behind. The best way to safely dispose of closely trailing Voreballs is usually to move quickly around a series of sharp corners, or run in a circle around a pillar or other obstacle. However, if the Voreball gets too close, it can become impossible to avoid in a conventional manner.

==Relationship with other monsters==
Because Vores fire projectiles, and especially because these projectiles can be directed somewhat by crafty players, Vores often get into fights with other monsters. If the vore attracts the attention of multiple monsters, its slow speed often leads to it being killed by even weaker enemies such as [[Scrag|Scrags]].

One particular thing to note about the Vore is that it is one of the few monsters capable of gibbing a [[Zombie]]. This is enabled by a special case in the Voreball code that causes them to inflict extra damage to Zombies - 110 points of damage versus the standard 40 points.

&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_shalrath
| commonname = [[Vore]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 72
| quakec = [[shalrath.qc]]
| precaches =
progs/shalrath.mdl&lt;br&gt;
progs/h_shal.mdl&lt;br&gt;
progs/v_spike.mdl&lt;br&gt;
shalrath/attack.wav&lt;br&gt;
shalrath/attack2.wav&lt;br&gt;
shalrath/death.wav&lt;br&gt;
shalrath/idle.wav&lt;br&gt;
shalrath/pain.wav&lt;br&gt;
shalrath/sight.wav&lt;br&gt;
}}

==Entity information==

'''monster_shalrath''' is the [[Entity|entity]] for placing '''Vores''' in a level.

===Usage===
Vores are best placed where there is not too much easy cover, so that the player has to move around, or even run away to avoid getting hit by the homing bombs the Vore fires. Giving the player too much cover can make Vores boring to fight, as the player can safely take potshots without ever really having to worry about Voreballs hitting them.

Vores actually work quite well in open areas with little cover, as it forces the player to run from the Voreballs, and can lead them to drawing the Voreballs into other enemies to create [[Monster_infighting|monster infighting]] situations.

Using Vores in areas with cover can work if there are multiple Vores, making it difficult for the player to hide completely out of sight from ''all'' the Vores at any one time. Adding other monsters at ground level to keep the player from standing in cover also works well.

===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Vore. When triggered, the Vore will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Vore dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Vore dies.
|}

====Spawnflags====
The monster_vore entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Vore will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Vore
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-32 -32 -24, 32 32 48) model(&quot;:progs/shalrath.mdl&quot;)
    = monster_shalrath : &quot;Vore&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_shalrath (1 0 0) (-32 -32 -24) (32 32 48) AMBUSH
Vore (Shalrath), 400 health points.

Flags:
&quot;ambush&quot; -  the monster will only wake up on really seeing the player,
            not another monster getting angry
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>s2rvsowqqj1w91e760h4nmtqlpplap6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2807</id>
      <parentid>2798</parentid>
      <timestamp>2013-04-07T13:56:16Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>changed damage amount to reflect the realities of playing the game</comment>
      <text xml:space="preserve" bytes="5999">{{DISPLAYTITLE:Vore}}

{{Infobox Monster
| image = Shalrath.gif
| name = Vore
| health = 400
| attacks = Homing firepod (~30 dmg)
| drop = nothing
| 1stappearance = [[e2m6]]
| gameversion = Registered
| manualtext = A spideresque hybrid horror. Keep your eye on the firepod he hurls.
| deathmessage = Player was exploded by a Vore
}}

The '''Vore''' (also known as a Shalrath) is one of the toughest regular enemies the player will encounter in Quake. It is a three-legged monster that moves very slowly, but throws spiked bombs that home in on the player's position, making them often one of the trickiest enemies to deal with, especially in combination with other enemies.

The homing firepods (more commonly known as Voreballs) that are thrown by the vore can follow the player around quite sharp corners when close enough, and do not explode until they collide with something. This can make them very tricky for a player to shake, especially on [[Nightmare difficulty]], where they are fired more frequently and move faster than on lower skill levels.

==Tactics==
Because of the danger posed by Voreballs, fighting Vores in large open spaces, or where the player is exposed but cannot easily move around (such as on a ledge) is not usually done. Many players deal with Vores from a position that provides cover and enables them to shoot at the Vore, then duck into cover until the Voreball explodes before re-emerging to continue their attack and wear the Vore down.

When fighting Vores in an open space, Voreballs will tend to accumulate in a trail behind a constantly moving player. Voreballs that are following the player can be used against other enemies quite easily, and by simply moving behind another enemy so that it is blocking the path of the Voreball, the player can start [[monster infighting]] to save both ammunition and time.

Since Voreballs will home toward the player gradually, they will often fly around obstacles that are otherwise blocking their path to the player when following very close behind. The best way to safely dispose of closely trailing Voreballs is usually to move quickly around a series of sharp corners, or run in a circle around a pillar or other obstacle. However, if the Voreball gets too close, it can become impossible to avoid in a conventional manner.

==Relationship with other monsters==
Because Vores fire projectiles, and especially because these projectiles can be directed somewhat by crafty players, Vores often get into fights with other monsters. If the vore attracts the attention of multiple monsters, its slow speed often leads to it being killed by even weaker enemies such as [[Scrag|Scrags]].

One particular thing to note about the Vore is that it is one of the few monsters capable of gibbing a [[Zombie]]. This is enabled by a special case in the Voreball code that causes them to inflict extra damage to Zombies - 110 points of damage versus the standard 40 points.

&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_shalrath
| commonname = [[Vore]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 72
| quakec = [[shalrath.qc]]
| precaches =
progs/shalrath.mdl&lt;br&gt;
progs/h_shal.mdl&lt;br&gt;
progs/v_spike.mdl&lt;br&gt;
shalrath/attack.wav&lt;br&gt;
shalrath/attack2.wav&lt;br&gt;
shalrath/death.wav&lt;br&gt;
shalrath/idle.wav&lt;br&gt;
shalrath/pain.wav&lt;br&gt;
shalrath/sight.wav&lt;br&gt;
}}

==Entity information==

'''monster_shalrath''' is the [[Entity|entity]] for placing '''Vores''' in a level.

===Usage===
Vores are best placed where there is not too much easy cover, so that the player has to move around, or even run away to avoid getting hit by the homing bombs the Vore fires. Giving the player too much cover can make Vores boring to fight, as the player can safely take potshots without ever really having to worry about Voreballs hitting them.

Vores actually work quite well in open areas with little cover, as it forces the player to run from the Voreballs, and can lead them to drawing the Voreballs into other enemies to create [[Monster_infighting|monster infighting]] situations.

Using Vores in areas with cover can work if there are multiple Vores, making it difficult for the player to hide completely out of sight from ''all'' the Vores at any one time. Adding other monsters at ground level to keep the player from standing in cover also works well.

===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Vore. When triggered, the Vore will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Vore dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Vore dies.
|}

====Spawnflags====
The monster_vore entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Vore will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Vore
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-32 -32 -24, 32 32 48) model(&quot;:progs/shalrath.mdl&quot;)
    = monster_shalrath : &quot;Vore&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_shalrath (1 0 0) (-32 -32 -24) (32 32 48) AMBUSH
Vore (Shalrath), 400 health points.

Flags:
&quot;ambush&quot; -  the monster will only wake up on really seeing the player,
            not another monster getting angry
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>lof0cvqvq0e7jfxbmnntwkrb60q79ng</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2808</id>
      <parentid>2807</parentid>
      <timestamp>2013-04-07T14:21:01Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>added a little info related to doing tricks with voreballs</comment>
      <text xml:space="preserve" bytes="6307">{{DISPLAYTITLE:Vore}}

{{Infobox Monster
| image = Shalrath.gif
| name = Vore
| health = 400
| attacks = Homing firepod (~30 dmg)
| drop = nothing
| 1stappearance = [[e2m6]]
| gameversion = Registered
| manualtext = A spideresque hybrid horror. Keep your eye on the firepod he hurls.
| deathmessage = Player was exploded by a Vore
}}

The '''Vore''' (also known as a Shalrath) is one of the toughest regular enemies the player will encounter in Quake. It is a three-legged monster that moves very slowly, but throws spiked bombs that home in on the player's position, making them often one of the trickiest enemies to deal with, especially in combination with other enemies.

The homing firepods (more commonly known as Voreballs) that are thrown by the vore can follow the player around quite sharp corners when close enough, and do not explode until they collide with something. This can make them very tricky for a player to shake, especially on [[Nightmare difficulty]], where they are fired more frequently and move faster than on lower skill levels.

==Tactics==
Because of the danger posed by Voreballs, fighting Vores in large open spaces, or where the player is exposed but cannot easily move around (such as on a ledge) is not usually done. Many players deal with Vores from a position that provides cover and enables them to shoot at the Vore, then duck into cover until the Voreball explodes before re-emerging to continue their attack and wear the Vore down.

When fighting Vores in an open space, Voreballs will tend to accumulate in a trail behind a constantly moving player. Voreballs that are following the player can be used against other enemies quite easily, and by simply moving behind another enemy so that it is blocking the path of the Voreball, the player can start [[monster infighting]] to save both ammunition and time.

Since Voreballs will home toward the player gradually, they will often fly around obstacles that are otherwise blocking their path to the player when following very close behind. The best way to safely dispose of closely trailing Voreballs is usually to move quickly around a series of sharp corners, or run in a circle around a pillar or other obstacle. However, if the Voreball gets too close, it can become impossible to avoid in a conventional manner.

==Relationship with other monsters==
Because Vores fire projectiles, and especially because these projectiles can be directed somewhat by crafty players, Vores often get into fights with other monsters. If the vore attracts the attention of multiple monsters, its slow speed often leads to it being killed by even weaker enemies such as [[Scrag|Scrags]].

One particular thing to note about the Vore is that it is one of the few monsters capable of gibbing a [[Zombie]]. This is enabled by a special case in the Voreball code that causes them to inflict extra damage to Zombies - 110 points of damage versus the standard 40 points.

==Tricks==
Because Voreballs follow the player, they can be quite easy to use as a propellant for doing tricks. Since it is possible to run in circles and accumulate trailing Voreballs, it is possible to do Voreball jumps using more than one Voreball at a time, allowing a skilled player to jump extremely high.

&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_shalrath
| commonname = [[Vore]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 72
| quakec = [[shalrath.qc]]
| precaches =
progs/shalrath.mdl&lt;br&gt;
progs/h_shal.mdl&lt;br&gt;
progs/v_spike.mdl&lt;br&gt;
shalrath/attack.wav&lt;br&gt;
shalrath/attack2.wav&lt;br&gt;
shalrath/death.wav&lt;br&gt;
shalrath/idle.wav&lt;br&gt;
shalrath/pain.wav&lt;br&gt;
shalrath/sight.wav&lt;br&gt;
}}

==Entity information==

'''monster_shalrath''' is the [[Entity|entity]] for placing '''Vores''' in a level.

===Usage===
Vores are best placed where there is not too much easy cover, so that the player has to move around, or even run away to avoid getting hit by the homing bombs the Vore fires. Giving the player too much cover can make Vores boring to fight, as the player can safely take potshots without ever really having to worry about Voreballs hitting them.

Vores actually work quite well in open areas with little cover, as it forces the player to run from the Voreballs, and can lead them to drawing the Voreballs into other enemies to create [[Monster_infighting|monster infighting]] situations.

Using Vores in areas with cover can work if there are multiple Vores, making it difficult for the player to hide completely out of sight from ''all'' the Vores at any one time. Adding other monsters at ground level to keep the player from standing in cover also works well.

===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Vore. When triggered, the Vore will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Vore dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Vore dies.
|}

====Spawnflags====
The monster_vore entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Vore will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Vore
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-32 -32 -24, 32 32 48) model(&quot;:progs/shalrath.mdl&quot;)
    = monster_shalrath : &quot;Vore&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_shalrath (1 0 0) (-32 -32 -24) (32 32 48) AMBUSH
Vore (Shalrath), 400 health points.

Flags:
&quot;ambush&quot; -  the monster will only wake up on really seeing the player,
            not another monster getting angry
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>5d52memm6fmgmfx9d381mj03ilemkap</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>TexMex</title>
    <ns>0</ns>
    <id>805</id>
    <revision>
      <id>2368</id>
      <timestamp>2013-03-28T04:57:09Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>added</comment>
      <text xml:space="preserve" bytes="419">TexMex is a Quake texture [[Texture_Wad|Wad]] editing program created by Mike Jackman. In addition to Quake texture Wads, TexMex also supports the texture formats of several other games, such as Quake II, Daikatana and Half-Life, and can modify the textures stored in Quake [[Quake_BSP_Format|.bsp files]] directly.

==External Links==
[https://www.quaddicted.com/files/tools/texmex_34_portable.7z TexMex download link]</text>
      <sha1>py233kepprle3f7j4tlrot2nf1agcge</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2369</id>
      <parentid>2368</parentid>
      <timestamp>2013-03-28T04:57:59Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>added link to Mike Jackman...</comment>
      <text xml:space="preserve" bytes="423">TexMex is a Quake texture [[Texture_Wad|Wad]] editing program created by [[Mike Jackman]]. In addition to Quake texture Wads, TexMex also supports the texture formats of several other games, such as Quake II, Daikatana and Half-Life, and can modify the textures stored in Quake [[Quake_BSP_Format|.bsp files]] directly.

==External Links==
[https://www.quaddicted.com/files/tools/texmex_34_portable.7z TexMex download link]</text>
      <sha1>bjdrm76f5j9y3fer68crziqt2vedwzs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Texture Wad</title>
    <ns>0</ns>
    <id>644</id>
    <revision>
      <id>1895</id>
      <timestamp>2013-03-25T02:41:11Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <comment>created .wad page and added content</comment>
      <text xml:space="preserve" bytes="903">'''.Wad'''

A .wad is best described as a stand alone software container that holds several [[textures]] at once (up to 800?). It's primary function is to be used during the map making and compiling process. The term &quot;Wad&quot; comes from it's software extension (eg: Id_Base.wad).

There are several variations of .wad files. For example a Doom level is also called a .wad file. There are also .wad files that perform the same function as a Quake .wad but are in different formats for different games, that are not compatible with the Quake standard. For example Half-Life (whose game engine is based upon the Quake game engine) also uses the extension of .wad.

There are many free software tools available to create and\or manage wad files that will extract the textures inside the original game and put them in a proper Quake .wad file.

There are also many pre-made .wad files available on the internet.</text>
      <sha1>3s4k93zreh3aj4sdsts8hx3rb87ap01</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2248</id>
      <parentid>1895</parentid>
      <timestamp>2013-03-26T14:23:24Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>added todo item</comment>
      <text xml:space="preserve" bytes="1055">'''.Wad'''

A .wad is best described as a stand alone software container that holds several [[textures]] at once (up to 800?). It's primary function is to be used during the map making and compiling process. The term &quot;Wad&quot; comes from it's software extension (eg: Id_Base.wad).

There are several variations of .wad files. For example a Doom level is also called a .wad file. There are also .wad files that perform the same function as a Quake .wad but are in different formats for different games, that are not compatible with the Quake standard. For example Half-Life (whose game engine is based upon the Quake game engine) also uses the extension of .wad.

There are many free software tools available to create and\or manage wad files that will extract the textures inside the original game and put them in a proper Quake .wad file.

There are also many pre-made .wad files available on the internet.
{{todo|user=[[Hectate]]|todo=Detail out some of the free tools available for .wad editing, and places to find pre-made .wad files as mentioned above.}}</text>
      <sha1>mdcfhpa3tnqmx99dhfzbgv4qxlnvbmm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2290</id>
      <parentid>2248</parentid>
      <timestamp>2013-03-26T17:59:29Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <minor/>
      <comment>Scampie moved page [[.wad]] to [[Texture Wad]]: .wad is an ugly name for this article</comment>
      <text xml:space="preserve" bytes="1055">'''.Wad'''

A .wad is best described as a stand alone software container that holds several [[textures]] at once (up to 800?). It's primary function is to be used during the map making and compiling process. The term &quot;Wad&quot; comes from it's software extension (eg: Id_Base.wad).

There are several variations of .wad files. For example a Doom level is also called a .wad file. There are also .wad files that perform the same function as a Quake .wad but are in different formats for different games, that are not compatible with the Quake standard. For example Half-Life (whose game engine is based upon the Quake game engine) also uses the extension of .wad.

There are many free software tools available to create and\or manage wad files that will extract the textures inside the original game and put them in a proper Quake .wad file.

There are also many pre-made .wad files available on the internet.
{{todo|user=[[Hectate]]|todo=Detail out some of the free tools available for .wad editing, and places to find pre-made .wad files as mentioned above.}}</text>
      <sha1>mdcfhpa3tnqmx99dhfzbgv4qxlnvbmm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2424</id>
      <parentid>2290</parentid>
      <timestamp>2013-03-28T16:37:41Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1064">'''.Wad'''

A .wad is best described as a stand alone software container that holds several [[Textures|textures]] at once (up to 800?). It's primary function is to be used during the map making and compiling process. The term &quot;Wad&quot; comes from it's software extension (eg: Id_Base.wad).

There are several variations of .wad files. For example a Doom level is also called a .wad file. There are also .wad files that perform the same function as a Quake .wad but are in different formats for different games, that are not compatible with the Quake standard. For example Half-Life (whose game engine is based upon the Quake game engine) also uses the extension of .wad.

There are many free software tools available to create and\or manage wad files that will extract the textures inside the original game and put them in a proper Quake .wad file.

There are also many pre-made .wad files available on the internet.
{{todo|user=[[Hectate]]|todo=Detail out some of the free tools available for .wad editing, and places to find pre-made .wad files as mentioned above.}}</text>
      <sha1>2lfldcdj25mgjmktu7f36tjkzqca0pb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2432</id>
      <parentid>2424</parentid>
      <timestamp>2013-03-28T18:45:16Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="1103">'''.Wad'''

A .wad is best described as a stand alone software container that holds several [[Textures|textures]] at once (up to 800?). It's primary function is to be used during the map making and compiling process. The term &quot;Wad&quot; comes from it's software extension (eg: Id_Base.wad).

There are several variations of .wad files. For example a Doom level is also called a .wad file. There are also .wad files that perform the same function as a Quake .wad but are in different formats for different games, that are not compatible with the Quake standard. For example Half-Life (whose game engine is based upon the Quake game engine) also uses the extension of .wad.

There are many free software tools available to create and\or manage wad files that will extract the textures inside the original game and put them in a proper Quake .wad file. One of the most popular is [[TexMex]].

There are also many pre-made .wad files available on the internet.
{{todo|user=[[Hectate]]|todo=Detail out some of the free tools available for .wad editing, and places to find pre-made .wad files as mentioned above.}}</text>
      <sha1>kgn6y182nkvaq25ok2zkcd3foyquadu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2995</id>
      <parentid>2432</parentid>
      <timestamp>2013-07-02T10:14:09Z</timestamp>
      <contributor>
        <ip>110.148.133.64</ip>
      </contributor>
      <comment>added a link to spirit's .wad archive</comment>
      <text xml:space="preserve" bytes="1233">'''.Wad'''

A .wad is best described as a stand alone software container that holds several [[Textures|textures]] at once (up to 800?). It's primary function is to be used during the map making and compiling process. The term &quot;Wad&quot; comes from it's software extension (eg: Id_Base.wad).

There are several variations of .wad files. For example a Doom level is also called a .wad file. There are also .wad files that perform the same function as a Quake .wad but are in different formats for different games, that are not compatible with the Quake standard. For example Half-Life (whose game engine is based upon the Quake game engine) also uses the extension of .wad.

There are many free software tools available to create and\or manage wad files that will extract the textures inside the original game and put them in a proper Quake .wad file. One of the most popular is [[TexMex]].

There are also many pre-made .wad files available on the internet.

'''Links'''

[http://www.quaddicted.com/files/wads/ quaddicted.com/files/wads]   -  exaustive collection of pre-made .wad files

{{todo|user=[[Hectate]]|todo=Detail out some of the free tools available for .wad editing, and places to find pre-made .wad files as mentioned above.}}</text>
      <sha1>qy9zdcuk2aemzrqwqrcv16wkpovdxj5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Textures</title>
    <ns>0</ns>
    <id>18</id>
    <revision>
      <id>24</id>
      <timestamp>2007-10-30T16:52:27Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: ===See Also=== * http://wiki.quakesrc.org/index.php/Textures</comment>
      <text xml:space="preserve" bytes="60">===See Also===
* http://wiki.quakesrc.org/index.php/Textures</text>
      <sha1>fh1ngf6u7b44mrt6w9fouot6f8rbdsq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>341</id>
      <parentid>24</parentid>
      <timestamp>2008-01-25T19:18:59Z</timestamp>
      <contributor>
        <ip>128.2.216.22</ip>
      </contributor>
      <text xml:space="preserve" bytes="146">===See Also===
* http://wiki.quakesrc.org/index.php/Textures


Texture .wad files that are used in quake mapping go under the quake/id1 directory.</text>
      <sha1>c5v60e0emqufp18rkuvevluhk7cabum</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2293</id>
      <parentid>341</parentid>
      <timestamp>2013-03-26T18:09:13Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="338">[[File:Textures.png|thumb]]
Textures in Quake are 256 color images used in [[Quake maps]]. Their dimensions are required to be a power of 2, commonly 64x64 or 128x128. Textures are stored directly within [[Quake_BSP_Format|.bsp files]] when used by Quake, or extracted, collected, and used in [[Texure Wad|.wad files]] by level designers.</text>
      <sha1>korm4ew6v6pfji5ex5tfsutb16xkx9o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2294</id>
      <parentid>2293</parentid>
      <timestamp>2013-03-26T18:09:44Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="363">[[File:Textures.png|thumb|Some of Quake's Textures]]
Textures in Quake are 256 color images used in [[Quake maps]]. Their dimensions are required to be a power of 2, commonly 64x64 or 128x128. Textures are stored directly within [[Quake_BSP_Format|.bsp files]] when used by Quake, or extracted, collected, and used in [[Texure Wad|.wad files]] by level designers.</text>
      <sha1>8yj0szd7qmtibniq03865fmx7nd0dgg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2295</id>
      <parentid>2294</parentid>
      <timestamp>2013-03-26T18:10:32Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="364">[[File:Textures.png|thumb|Some of Quake's Textures]]
Textures in Quake are 256 color images used in [[Quake maps]]. Their dimensions are required to be a power of 2, commonly 64x64 or 128x128. Textures are stored directly within [[Quake_BSP_Format|.bsp files]] when used by Quake, or extracted, collected, and used in [[Texture_Wad|.wad files]] by level designers.</text>
      <sha1>0qsi2vtxlbixa2nt3t1on1n958ssos4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2297</id>
      <parentid>2295</parentid>
      <timestamp>2013-03-26T18:14:26Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="382">[[File:Textures.png|thumb|Some of Quake's Textures]]
Textures in Quake are [[Quake_palette|256 color]] images used in [[Quake maps]]. Their dimensions are required to be a power of 2, commonly 64x64 or 128x128. Textures are stored directly within [[Quake_BSP_Format|.bsp files]] when used by Quake, or extracted, collected, and used in [[Texture_Wad|.wad files]] by level designers.</text>
      <sha1>g7z75t8d0i64e6h3u6gtzha45s2cnny</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2305</id>
      <parentid>2297</parentid>
      <timestamp>2013-03-26T19:26:57Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="3829">[[File:Textures.png|thumb|Some of Quake's Textures]]
Textures in Quake are [[Quake_palette|256 color]] images used in [[Quake maps]]. Each texture has a name of no more than 15 characters. Their dimensions are required to be a [http://en.wikipedia.org/wiki/Power_of_two power of 2], commonly 64x64 or 128x128. Textures are stored directly within [[Quake_BSP_Format|.bsp files]] when used by Quake, or extracted, collected, and used in [[Texture_Wad|.wad files]] by level designers.

=Special Textures=
There are several special textures in Quake, which have properties defined either by the [[QBSP]] compiler, or by the game [[Engines|engine]].

==Clip==
[[File:texture_clip.png|center]]
Clip is a special texture, named &quot;clip&quot;, which is invisible, yet blocks player and monster movement. Brushes must be fully textured with clip, and clip brushes do not seal the world from [[leaks]]. Clip does not block weapon fire. Clip is commonly used to prevent the player from getting stuck on architectural details.

==Liquids==
[[File:texture_liquid.png|center]]
Liquids are textures whose name is proceeded by the character &quot;*&quot;. By default, this means they are water in Quake, and will animate as such, and if compiled with the option &quot;-transwater&quot; will be translucent and not block [[Vis]].

A liquid with a name which starts with &quot;*slime&quot; will be damaging slime, and a liquid with a name starting with &quot;*lava&quot; will be even deadlier lava. When compiled by vis, liquids will play an automatic ambient sound. Beware that most versions of vis won't create sound for water liquids which do not begin with the name &quot;*water&quot;. Some modern vis programs allow you to turn off the creation of automatic ambient sounds.

==Skies==
[[File:texture_sky.png|center]]
Skies are textures whose name which start with the word &quot;sky&quot;, and must be of dimensions 256x128. The texture is treated as 2 128x128 textures, the right section used as a backdrop, and the left section used as an overlay with it's black pixels transparent. Skies are displayed animated and full-bright, and impede player and monster movement, and 'swallow' weapon fire.

==Animated textures==
[[File:texture_animate.png|center]]
Simple animated textures with up to 10 frames can be used in Quake. Their name must begin with the character &quot;+&quot; and a number between 0-9. Quake will display a sequence beginning at &quot;+0&quot;, &quot;+1&quot;, etc, up to the highest number, and then loop back to &quot;+0&quot;.

Animated textures may also switch to an alternate sequence if applied to some brush entities, such as [[func_wall]], [[func_door]], and [[func_button]]. When one of these entities is textured with an animated texture and is triggered, it will switch to an alternate sequence if it exists. These must be named the same as the original animated textures, except use &quot;+a&quot;, &quot;+b&quot;, up to &quot;+j&quot;. You are not limited by the number of frames in the original animation, but you must begin at &quot;+a&quot;.

An example of this is the button texture used in the base maps of Quake. &quot;+0basebtn&quot; and &quot;+1basebtn&quot; blink a red texture, and when the func_button is used, it swaps to &quot;+abasebtn&quot;.

==Skip==
[[File:texture_skip.png|center]]
Skip is a '''nonstandard''' special texture, used by modern QBSP compilers, but does not have any function in the stock Quake compilers as released by [[ID Software]]. Skip is a texture much like clip in that it is invisible, but skip's use is to remove an entire face from ever rendering. The removed face remains solid, and will block player and monster movement, as well as block weapon fire. In general, this is of little use on solid geometery, as Quake performs backside culling, but can be used on brush entities or &quot;hacks&quot; like windows to hide unwanted faces.



(much of this article was rewritten from http://www.celephais.net/stuff/texturefaq.htm , I'll ask permission later)</text>
      <sha1>ntsijyvclty5yvbj5xd8dwritkl0iq0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2306</id>
      <parentid>2305</parentid>
      <timestamp>2013-03-26T19:30:13Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Skies */</comment>
      <text xml:space="preserve" bytes="3833">[[File:Textures.png|thumb|Some of Quake's Textures]]
Textures in Quake are [[Quake_palette|256 color]] images used in [[Quake maps]]. Each texture has a name of no more than 15 characters. Their dimensions are required to be a [http://en.wikipedia.org/wiki/Power_of_two power of 2], commonly 64x64 or 128x128. Textures are stored directly within [[Quake_BSP_Format|.bsp files]] when used by Quake, or extracted, collected, and used in [[Texture_Wad|.wad files]] by level designers.

=Special Textures=
There are several special textures in Quake, which have properties defined either by the [[QBSP]] compiler, or by the game [[Engines|engine]].

==Clip==
[[File:texture_clip.png|center]]
Clip is a special texture, named &quot;clip&quot;, which is invisible, yet blocks player and monster movement. Brushes must be fully textured with clip, and clip brushes do not seal the world from [[leaks]]. Clip does not block weapon fire. Clip is commonly used to prevent the player from getting stuck on architectural details.

==Liquids==
[[File:texture_liquid.png|center]]
Liquids are textures whose name is proceeded by the character &quot;*&quot;. By default, this means they are water in Quake, and will animate as such, and if compiled with the option &quot;-transwater&quot; will be translucent and not block [[Vis]].

A liquid with a name which starts with &quot;*slime&quot; will be damaging slime, and a liquid with a name starting with &quot;*lava&quot; will be even deadlier lava. When compiled by vis, liquids will play an automatic ambient sound. Beware that most versions of vis won't create sound for water liquids which do not begin with the name &quot;*water&quot;. Some modern vis programs allow you to turn off the creation of automatic ambient sounds.

==Skies==
[[File:texture_sky.png|center]]
Skies are textures whose name which start with the word &quot;sky&quot;, and must be of dimensions 256x128. The texture is treated like two 128x128 textures, the right section used as a backdrop, and the left section used as an overlay with it's black pixels transparent. Skies are displayed animated and full-bright, and impede player and monster movement, and 'swallow' weapon fire.

==Animated textures==
[[File:texture_animate.png|center]]
Simple animated textures with up to 10 frames can be used in Quake. Their name must begin with the character &quot;+&quot; and a number between 0-9. Quake will display a sequence beginning at &quot;+0&quot;, &quot;+1&quot;, etc, up to the highest number, and then loop back to &quot;+0&quot;.

Animated textures may also switch to an alternate sequence if applied to some brush entities, such as [[func_wall]], [[func_door]], and [[func_button]]. When one of these entities is textured with an animated texture and is triggered, it will switch to an alternate sequence if it exists. These must be named the same as the original animated textures, except use &quot;+a&quot;, &quot;+b&quot;, up to &quot;+j&quot;. You are not limited by the number of frames in the original animation, but you must begin at &quot;+a&quot;.

An example of this is the button texture used in the base maps of Quake. &quot;+0basebtn&quot; and &quot;+1basebtn&quot; blink a red texture, and when the func_button is used, it swaps to &quot;+abasebtn&quot;.

==Skip==
[[File:texture_skip.png|center]]
Skip is a '''nonstandard''' special texture, used by modern QBSP compilers, but does not have any function in the stock Quake compilers as released by [[ID Software]]. Skip is a texture much like clip in that it is invisible, but skip's use is to remove an entire face from ever rendering. The removed face remains solid, and will block player and monster movement, as well as block weapon fire. In general, this is of little use on solid geometery, as Quake performs backside culling, but can be used on brush entities or &quot;hacks&quot; like windows to hide unwanted faces.



(much of this article was rewritten from http://www.celephais.net/stuff/texturefaq.htm , I'll ask permission later)</text>
      <sha1>94dp49qsbyfs9xnlafpob2elzlf6oe6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2307</id>
      <parentid>2306</parentid>
      <timestamp>2013-03-26T19:32:42Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Liquids */</comment>
      <text xml:space="preserve" bytes="3862">[[File:Textures.png|thumb|Some of Quake's Textures]]
Textures in Quake are [[Quake_palette|256 color]] images used in [[Quake maps]]. Each texture has a name of no more than 15 characters. Their dimensions are required to be a [http://en.wikipedia.org/wiki/Power_of_two power of 2], commonly 64x64 or 128x128. Textures are stored directly within [[Quake_BSP_Format|.bsp files]] when used by Quake, or extracted, collected, and used in [[Texture_Wad|.wad files]] by level designers.

=Special Textures=
There are several special textures in Quake, which have properties defined either by the [[QBSP]] compiler, or by the game [[Engines|engine]].

==Clip==
[[File:texture_clip.png|center]]
Clip is a special texture, named &quot;clip&quot;, which is invisible, yet blocks player and monster movement. Brushes must be fully textured with clip, and clip brushes do not seal the world from [[leaks]]. Clip does not block weapon fire. Clip is commonly used to prevent the player from getting stuck on architectural details.

==Liquids==
[[File:texture_liquid.png|center]]
Liquids are textures whose name is proceeded by the character &quot;*&quot;. By default, this means they are water in Quake and you may [[swim]] in them, and will animate as such, and if compiled with the option &quot;-transwater&quot; will be translucent and not block [[Vis]].

A liquid with a name which starts with &quot;*slime&quot; will be damaging slime, and a liquid with a name starting with &quot;*lava&quot; will be even deadlier lava. When compiled by vis, liquids will play an automatic ambient sound. Beware that most versions of vis won't create sound for water liquids which do not begin with the name &quot;*water&quot;. Some modern vis programs allow you to turn off the creation of automatic ambient sounds.

==Skies==
[[File:texture_sky.png|center]]
Skies are textures whose name which start with the word &quot;sky&quot;, and must be of dimensions 256x128. The texture is treated like two 128x128 textures, the right section used as a backdrop, and the left section used as an overlay with it's black pixels transparent. Skies are displayed animated and full-bright, and impede player and monster movement, and 'swallow' weapon fire.

==Animated textures==
[[File:texture_animate.png|center]]
Simple animated textures with up to 10 frames can be used in Quake. Their name must begin with the character &quot;+&quot; and a number between 0-9. Quake will display a sequence beginning at &quot;+0&quot;, &quot;+1&quot;, etc, up to the highest number, and then loop back to &quot;+0&quot;.

Animated textures may also switch to an alternate sequence if applied to some brush entities, such as [[func_wall]], [[func_door]], and [[func_button]]. When one of these entities is textured with an animated texture and is triggered, it will switch to an alternate sequence if it exists. These must be named the same as the original animated textures, except use &quot;+a&quot;, &quot;+b&quot;, up to &quot;+j&quot;. You are not limited by the number of frames in the original animation, but you must begin at &quot;+a&quot;.

An example of this is the button texture used in the base maps of Quake. &quot;+0basebtn&quot; and &quot;+1basebtn&quot; blink a red texture, and when the func_button is used, it swaps to &quot;+abasebtn&quot;.

==Skip==
[[File:texture_skip.png|center]]
Skip is a '''nonstandard''' special texture, used by modern QBSP compilers, but does not have any function in the stock Quake compilers as released by [[ID Software]]. Skip is a texture much like clip in that it is invisible, but skip's use is to remove an entire face from ever rendering. The removed face remains solid, and will block player and monster movement, as well as block weapon fire. In general, this is of little use on solid geometery, as Quake performs backside culling, but can be used on brush entities or &quot;hacks&quot; like windows to hide unwanted faces.



(much of this article was rewritten from http://www.celephais.net/stuff/texturefaq.htm , I'll ask permission later)</text>
      <sha1>fl5jsfc5reyfg0u34544s49a7ry2woi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2308</id>
      <parentid>2307</parentid>
      <timestamp>2013-03-26T19:33:17Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Liquids */</comment>
      <text xml:space="preserve" bytes="3869">[[File:Textures.png|thumb|Some of Quake's Textures]]
Textures in Quake are [[Quake_palette|256 color]] images used in [[Quake maps]]. Each texture has a name of no more than 15 characters. Their dimensions are required to be a [http://en.wikipedia.org/wiki/Power_of_two power of 2], commonly 64x64 or 128x128. Textures are stored directly within [[Quake_BSP_Format|.bsp files]] when used by Quake, or extracted, collected, and used in [[Texture_Wad|.wad files]] by level designers.

=Special Textures=
There are several special textures in Quake, which have properties defined either by the [[QBSP]] compiler, or by the game [[Engines|engine]].

==Clip==
[[File:texture_clip.png|center]]
Clip is a special texture, named &quot;clip&quot;, which is invisible, yet blocks player and monster movement. Brushes must be fully textured with clip, and clip brushes do not seal the world from [[leaks]]. Clip does not block weapon fire. Clip is commonly used to prevent the player from getting stuck on architectural details.

==Liquids==
[[File:texture_liquid.png|center]]
Liquids are textures whose name is proceeded by the character &quot;*&quot;. By default, this means they are water in Quake and you may [[swim]] in them. Their surface will also animate, and if compiled with the option &quot;-transwater&quot; will be translucent and not block [[Vis]].

A liquid with a name which starts with &quot;*slime&quot; will be damaging slime, and a liquid with a name starting with &quot;*lava&quot; will be even deadlier lava. When compiled by vis, liquids will play an automatic ambient sound. Beware that most versions of vis won't create sound for water liquids which do not begin with the name &quot;*water&quot;. Some modern vis programs allow you to turn off the creation of automatic ambient sounds.

==Skies==
[[File:texture_sky.png|center]]
Skies are textures whose name which start with the word &quot;sky&quot;, and must be of dimensions 256x128. The texture is treated like two 128x128 textures, the right section used as a backdrop, and the left section used as an overlay with it's black pixels transparent. Skies are displayed animated and full-bright, and impede player and monster movement, and 'swallow' weapon fire.

==Animated textures==
[[File:texture_animate.png|center]]
Simple animated textures with up to 10 frames can be used in Quake. Their name must begin with the character &quot;+&quot; and a number between 0-9. Quake will display a sequence beginning at &quot;+0&quot;, &quot;+1&quot;, etc, up to the highest number, and then loop back to &quot;+0&quot;.

Animated textures may also switch to an alternate sequence if applied to some brush entities, such as [[func_wall]], [[func_door]], and [[func_button]]. When one of these entities is textured with an animated texture and is triggered, it will switch to an alternate sequence if it exists. These must be named the same as the original animated textures, except use &quot;+a&quot;, &quot;+b&quot;, up to &quot;+j&quot;. You are not limited by the number of frames in the original animation, but you must begin at &quot;+a&quot;.

An example of this is the button texture used in the base maps of Quake. &quot;+0basebtn&quot; and &quot;+1basebtn&quot; blink a red texture, and when the func_button is used, it swaps to &quot;+abasebtn&quot;.

==Skip==
[[File:texture_skip.png|center]]
Skip is a '''nonstandard''' special texture, used by modern QBSP compilers, but does not have any function in the stock Quake compilers as released by [[ID Software]]. Skip is a texture much like clip in that it is invisible, but skip's use is to remove an entire face from ever rendering. The removed face remains solid, and will block player and monster movement, as well as block weapon fire. In general, this is of little use on solid geometery, as Quake performs backside culling, but can be used on brush entities or &quot;hacks&quot; like windows to hide unwanted faces.



(much of this article was rewritten from http://www.celephais.net/stuff/texturefaq.htm , I'll ask permission later)</text>
      <sha1>av7k0i7jj7rbynezjpn3gddh7obbnu8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2309</id>
      <parentid>2308</parentid>
      <timestamp>2013-03-26T19:44:43Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Skies */</comment>
      <text xml:space="preserve" bytes="3906">[[File:Textures.png|thumb|Some of Quake's Textures]]
Textures in Quake are [[Quake_palette|256 color]] images used in [[Quake maps]]. Each texture has a name of no more than 15 characters. Their dimensions are required to be a [http://en.wikipedia.org/wiki/Power_of_two power of 2], commonly 64x64 or 128x128. Textures are stored directly within [[Quake_BSP_Format|.bsp files]] when used by Quake, or extracted, collected, and used in [[Texture_Wad|.wad files]] by level designers.

=Special Textures=
There are several special textures in Quake, which have properties defined either by the [[QBSP]] compiler, or by the game [[Engines|engine]].

==Clip==
[[File:texture_clip.png|center]]
Clip is a special texture, named &quot;clip&quot;, which is invisible, yet blocks player and monster movement. Brushes must be fully textured with clip, and clip brushes do not seal the world from [[leaks]]. Clip does not block weapon fire. Clip is commonly used to prevent the player from getting stuck on architectural details.

==Liquids==
[[File:texture_liquid.png|center]]
Liquids are textures whose name is proceeded by the character &quot;*&quot;. By default, this means they are water in Quake and you may [[swim]] in them. Their surface will also animate, and if compiled with the option &quot;-transwater&quot; will be translucent and not block [[Vis]].

A liquid with a name which starts with &quot;*slime&quot; will be damaging slime, and a liquid with a name starting with &quot;*lava&quot; will be even deadlier lava. When compiled by vis, liquids will play an automatic ambient sound. Beware that most versions of vis won't create sound for water liquids which do not begin with the name &quot;*water&quot;. Some modern vis programs allow you to turn off the creation of automatic ambient sounds.

==Skies==
[[File:texture_sky.png|center]]
Skies are textures whose name which start with the word &quot;sky&quot;, and must be of dimensions 256x128. The texture is treated like two 128x128 textures, the right section used as a backdrop, and the left section used as an overlay with it's black pixels transparent. Skies are displayed animated and full-bright, block player and monster movement, and 'swallow' weapon fire. Sky brushes do seal the world from leaks.

==Animated textures==
[[File:texture_animate.png|center]]
Simple animated textures with up to 10 frames can be used in Quake. Their name must begin with the character &quot;+&quot; and a number between 0-9. Quake will display a sequence beginning at &quot;+0&quot;, &quot;+1&quot;, etc, up to the highest number, and then loop back to &quot;+0&quot;.

Animated textures may also switch to an alternate sequence if applied to some brush entities, such as [[func_wall]], [[func_door]], and [[func_button]]. When one of these entities is textured with an animated texture and is triggered, it will switch to an alternate sequence if it exists. These must be named the same as the original animated textures, except use &quot;+a&quot;, &quot;+b&quot;, up to &quot;+j&quot;. You are not limited by the number of frames in the original animation, but you must begin at &quot;+a&quot;.

An example of this is the button texture used in the base maps of Quake. &quot;+0basebtn&quot; and &quot;+1basebtn&quot; blink a red texture, and when the func_button is used, it swaps to &quot;+abasebtn&quot;.

==Skip==
[[File:texture_skip.png|center]]
Skip is a '''nonstandard''' special texture, used by modern QBSP compilers, but does not have any function in the stock Quake compilers as released by [[ID Software]]. Skip is a texture much like clip in that it is invisible, but skip's use is to remove an entire face from ever rendering. The removed face remains solid, and will block player and monster movement, as well as block weapon fire. In general, this is of little use on solid geometery, as Quake performs backside culling, but can be used on brush entities or &quot;hacks&quot; like windows to hide unwanted faces.



(much of this article was rewritten from http://www.celephais.net/stuff/texturefaq.htm , I'll ask permission later)</text>
      <sha1>qrgu9nzm4zoa50de4mfdcb2721adk7c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2310</id>
      <parentid>2309</parentid>
      <timestamp>2013-03-26T19:48:36Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Skip */</comment>
      <text xml:space="preserve" bytes="4030">[[File:Textures.png|thumb|Some of Quake's Textures]]
Textures in Quake are [[Quake_palette|256 color]] images used in [[Quake maps]]. Each texture has a name of no more than 15 characters. Their dimensions are required to be a [http://en.wikipedia.org/wiki/Power_of_two power of 2], commonly 64x64 or 128x128. Textures are stored directly within [[Quake_BSP_Format|.bsp files]] when used by Quake, or extracted, collected, and used in [[Texture_Wad|.wad files]] by level designers.

=Special Textures=
There are several special textures in Quake, which have properties defined either by the [[QBSP]] compiler, or by the game [[Engines|engine]].

==Clip==
[[File:texture_clip.png|center]]
Clip is a special texture, named &quot;clip&quot;, which is invisible, yet blocks player and monster movement. Brushes must be fully textured with clip, and clip brushes do not seal the world from [[leaks]]. Clip does not block weapon fire. Clip is commonly used to prevent the player from getting stuck on architectural details.

==Liquids==
[[File:texture_liquid.png|center]]
Liquids are textures whose name is proceeded by the character &quot;*&quot;. By default, this means they are water in Quake and you may [[swim]] in them. Their surface will also animate, and if compiled with the option &quot;-transwater&quot; will be translucent and not block [[Vis]].

A liquid with a name which starts with &quot;*slime&quot; will be damaging slime, and a liquid with a name starting with &quot;*lava&quot; will be even deadlier lava. When compiled by vis, liquids will play an automatic ambient sound. Beware that most versions of vis won't create sound for water liquids which do not begin with the name &quot;*water&quot;. Some modern vis programs allow you to turn off the creation of automatic ambient sounds.

==Skies==
[[File:texture_sky.png|center]]
Skies are textures whose name which start with the word &quot;sky&quot;, and must be of dimensions 256x128. The texture is treated like two 128x128 textures, the right section used as a backdrop, and the left section used as an overlay with it's black pixels transparent. Skies are displayed animated and full-bright, block player and monster movement, and 'swallow' weapon fire. Sky brushes do seal the world from leaks.

==Animated textures==
[[File:texture_animate.png|center]]
Simple animated textures with up to 10 frames can be used in Quake. Their name must begin with the character &quot;+&quot; and a number between 0-9. Quake will display a sequence beginning at &quot;+0&quot;, &quot;+1&quot;, etc, up to the highest number, and then loop back to &quot;+0&quot;.

Animated textures may also switch to an alternate sequence if applied to some brush entities, such as [[func_wall]], [[func_door]], and [[func_button]]. When one of these entities is textured with an animated texture and is triggered, it will switch to an alternate sequence if it exists. These must be named the same as the original animated textures, except use &quot;+a&quot;, &quot;+b&quot;, up to &quot;+j&quot;. You are not limited by the number of frames in the original animation, but you must begin at &quot;+a&quot;.

An example of this is the button texture used in the base maps of Quake. &quot;+0basebtn&quot; and &quot;+1basebtn&quot; blink a red texture, and when the func_button is used, it swaps to &quot;+abasebtn&quot;.

==Skip==
[[File:texture_skip.png|center]]
Skip is a '''nonstandard''' special texture, used by modern QBSP compilers, but does not have any function in the stock Quake compilers as released by [[ID Software]]. Skip is a texture much like clip in that it is invisible, but skip's use is to remove an entire face from ever rendering, and a brush does not have to be fully textured in skip. The removed face remains solid, and will block player and monster movement, as well as block weapon fire. In general, this is of little use on solid geometery, as Quake performs backside culling, but can be used on brush entities or &quot;hacks&quot; like windows to hide unwanted faces. A &quot;*waterskip&quot; texture exists as well, for use with liquid brushes.



(much of this article was rewritten from http://www.celephais.net/stuff/texturefaq.htm , I'll ask permission later)</text>
      <sha1>2pzuwuqlauq1megssniqhl6qp5e4tri</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2311</id>
      <parentid>2310</parentid>
      <timestamp>2013-03-26T19:50:30Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Liquids */</comment>
      <text xml:space="preserve" bytes="4121">[[File:Textures.png|thumb|Some of Quake's Textures]]
Textures in Quake are [[Quake_palette|256 color]] images used in [[Quake maps]]. Each texture has a name of no more than 15 characters. Their dimensions are required to be a [http://en.wikipedia.org/wiki/Power_of_two power of 2], commonly 64x64 or 128x128. Textures are stored directly within [[Quake_BSP_Format|.bsp files]] when used by Quake, or extracted, collected, and used in [[Texture_Wad|.wad files]] by level designers.

=Special Textures=
There are several special textures in Quake, which have properties defined either by the [[QBSP]] compiler, or by the game [[Engines|engine]].

==Clip==
[[File:texture_clip.png|center]]
Clip is a special texture, named &quot;clip&quot;, which is invisible, yet blocks player and monster movement. Brushes must be fully textured with clip, and clip brushes do not seal the world from [[leaks]]. Clip does not block weapon fire. Clip is commonly used to prevent the player from getting stuck on architectural details.

==Liquids==
[[File:texture_liquid.png|center]]
Liquids are textures whose name is proceeded by the character &quot;*&quot;. By default, this means they are water in Quake and you may [[swim]] in them. All faces of a brush must be of only liquid textures, and they may not touch Sky textures. Their surface will also animate, and if compiled with the option &quot;-transwater&quot; will be translucent and not block [[Vis]].

A liquid with a name which starts with &quot;*slime&quot; will be damaging slime, and a liquid with a name starting with &quot;*lava&quot; will be even deadlier lava. When compiled by vis, liquids will play an automatic ambient sound. Beware that most versions of vis won't create sound for water liquids which do not begin with the name &quot;*water&quot;. Some modern vis programs allow you to turn off the creation of automatic ambient sounds.

==Skies==
[[File:texture_sky.png|center]]
Skies are textures whose name which start with the word &quot;sky&quot;, and must be of dimensions 256x128. The texture is treated like two 128x128 textures, the right section used as a backdrop, and the left section used as an overlay with it's black pixels transparent. Skies are displayed animated and full-bright, block player and monster movement, and 'swallow' weapon fire. Sky brushes do seal the world from leaks.

==Animated textures==
[[File:texture_animate.png|center]]
Simple animated textures with up to 10 frames can be used in Quake. Their name must begin with the character &quot;+&quot; and a number between 0-9. Quake will display a sequence beginning at &quot;+0&quot;, &quot;+1&quot;, etc, up to the highest number, and then loop back to &quot;+0&quot;.

Animated textures may also switch to an alternate sequence if applied to some brush entities, such as [[func_wall]], [[func_door]], and [[func_button]]. When one of these entities is textured with an animated texture and is triggered, it will switch to an alternate sequence if it exists. These must be named the same as the original animated textures, except use &quot;+a&quot;, &quot;+b&quot;, up to &quot;+j&quot;. You are not limited by the number of frames in the original animation, but you must begin at &quot;+a&quot;.

An example of this is the button texture used in the base maps of Quake. &quot;+0basebtn&quot; and &quot;+1basebtn&quot; blink a red texture, and when the func_button is used, it swaps to &quot;+abasebtn&quot;.

==Skip==
[[File:texture_skip.png|center]]
Skip is a '''nonstandard''' special texture, used by modern QBSP compilers, but does not have any function in the stock Quake compilers as released by [[ID Software]]. Skip is a texture much like clip in that it is invisible, but skip's use is to remove an entire face from ever rendering, and a brush does not have to be fully textured in skip. The removed face remains solid, and will block player and monster movement, as well as block weapon fire. In general, this is of little use on solid geometery, as Quake performs backside culling, but can be used on brush entities or &quot;hacks&quot; like windows to hide unwanted faces. A &quot;*waterskip&quot; texture exists as well, for use with liquid brushes.



(much of this article was rewritten from http://www.celephais.net/stuff/texturefaq.htm , I'll ask permission later)</text>
      <sha1>kl81qtkw6ai42lwsjeg1m7eirolkdip</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2312</id>
      <parentid>2311</parentid>
      <timestamp>2013-03-26T19:51:05Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Liquids */</comment>
      <text xml:space="preserve" bytes="4132">[[File:Textures.png|thumb|Some of Quake's Textures]]
Textures in Quake are [[Quake_palette|256 color]] images used in [[Quake maps]]. Each texture has a name of no more than 15 characters. Their dimensions are required to be a [http://en.wikipedia.org/wiki/Power_of_two power of 2], commonly 64x64 or 128x128. Textures are stored directly within [[Quake_BSP_Format|.bsp files]] when used by Quake, or extracted, collected, and used in [[Texture_Wad|.wad files]] by level designers.

=Special Textures=
There are several special textures in Quake, which have properties defined either by the [[QBSP]] compiler, or by the game [[Engines|engine]].

==Clip==
[[File:texture_clip.png|center]]
Clip is a special texture, named &quot;clip&quot;, which is invisible, yet blocks player and monster movement. Brushes must be fully textured with clip, and clip brushes do not seal the world from [[leaks]]. Clip does not block weapon fire. Clip is commonly used to prevent the player from getting stuck on architectural details.

==Liquids==
[[File:texture_liquid.png|center]]
Liquids are textures whose name is proceeded by the character &quot;*&quot;. By default, this means they are water in Quake and you may [[swim]] in them. All faces of a brush must be of a single type of liquid texture, and they may not touch Sky textures. Their surface will also animate, and if compiled with the option &quot;-transwater&quot; will be translucent and not block [[Vis]].

A liquid with a name which starts with &quot;*slime&quot; will be damaging slime, and a liquid with a name starting with &quot;*lava&quot; will be even deadlier lava. When compiled by vis, liquids will play an automatic ambient sound. Beware that most versions of vis won't create sound for water liquids which do not begin with the name &quot;*water&quot;. Some modern vis programs allow you to turn off the creation of automatic ambient sounds.

==Skies==
[[File:texture_sky.png|center]]
Skies are textures whose name which start with the word &quot;sky&quot;, and must be of dimensions 256x128. The texture is treated like two 128x128 textures, the right section used as a backdrop, and the left section used as an overlay with it's black pixels transparent. Skies are displayed animated and full-bright, block player and monster movement, and 'swallow' weapon fire. Sky brushes do seal the world from leaks.

==Animated textures==
[[File:texture_animate.png|center]]
Simple animated textures with up to 10 frames can be used in Quake. Their name must begin with the character &quot;+&quot; and a number between 0-9. Quake will display a sequence beginning at &quot;+0&quot;, &quot;+1&quot;, etc, up to the highest number, and then loop back to &quot;+0&quot;.

Animated textures may also switch to an alternate sequence if applied to some brush entities, such as [[func_wall]], [[func_door]], and [[func_button]]. When one of these entities is textured with an animated texture and is triggered, it will switch to an alternate sequence if it exists. These must be named the same as the original animated textures, except use &quot;+a&quot;, &quot;+b&quot;, up to &quot;+j&quot;. You are not limited by the number of frames in the original animation, but you must begin at &quot;+a&quot;.

An example of this is the button texture used in the base maps of Quake. &quot;+0basebtn&quot; and &quot;+1basebtn&quot; blink a red texture, and when the func_button is used, it swaps to &quot;+abasebtn&quot;.

==Skip==
[[File:texture_skip.png|center]]
Skip is a '''nonstandard''' special texture, used by modern QBSP compilers, but does not have any function in the stock Quake compilers as released by [[ID Software]]. Skip is a texture much like clip in that it is invisible, but skip's use is to remove an entire face from ever rendering, and a brush does not have to be fully textured in skip. The removed face remains solid, and will block player and monster movement, as well as block weapon fire. In general, this is of little use on solid geometery, as Quake performs backside culling, but can be used on brush entities or &quot;hacks&quot; like windows to hide unwanted faces. A &quot;*waterskip&quot; texture exists as well, for use with liquid brushes.



(much of this article was rewritten from http://www.celephais.net/stuff/texturefaq.htm , I'll ask permission later)</text>
      <sha1>nxf55hej4oiwmra8zp9n9m0as1xso94</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2314</id>
      <parentid>2312</parentid>
      <timestamp>2013-03-26T20:00:31Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>/* Liquids */</comment>
      <text xml:space="preserve" bytes="4146">[[File:Textures.png|thumb|Some of Quake's Textures]]
Textures in Quake are [[Quake_palette|256 color]] images used in [[Quake maps]]. Each texture has a name of no more than 15 characters. Their dimensions are required to be a [http://en.wikipedia.org/wiki/Power_of_two power of 2], commonly 64x64 or 128x128. Textures are stored directly within [[Quake_BSP_Format|.bsp files]] when used by Quake, or extracted, collected, and used in [[Texture_Wad|.wad files]] by level designers.

=Special Textures=
There are several special textures in Quake, which have properties defined either by the [[QBSP]] compiler, or by the game [[Engines|engine]].

==Clip==
[[File:texture_clip.png|center]]
Clip is a special texture, named &quot;clip&quot;, which is invisible, yet blocks player and monster movement. Brushes must be fully textured with clip, and clip brushes do not seal the world from [[leaks]]. Clip does not block weapon fire. Clip is commonly used to prevent the player from getting stuck on architectural details.

==Liquids==
[[File:texture_liquid.png|center]]
Liquids are textures whose name is proceeded by the character &quot;*&quot;. By default, this means they are water in Quake and you may [[swim]] in them. All faces of a brush must be of a single type of liquid texture, and they may not touch Sky textures. Their surface will also animate, and if compiled with the option &quot;-transwater&quot; will be translucent and not block [[Vis]].

A liquid with a name which starts with &quot;*slime&quot; will be damaging slime, and a liquid with a name starting with &quot;*lava&quot; will be even deadlier lava. When compiled by vis, liquids will play an automatic ambient sound. Beware that most versions of vis won't create sound for water liquids which do not begin with the name &quot;*water&quot; or &quot;*04water&quot;. Some modern vis programs allow you to turn off the creation of automatic ambient sounds.

==Skies==
[[File:texture_sky.png|center]]
Skies are textures whose name which start with the word &quot;sky&quot;, and must be of dimensions 256x128. The texture is treated like two 128x128 textures, the right section used as a backdrop, and the left section used as an overlay with it's black pixels transparent. Skies are displayed animated and full-bright, block player and monster movement, and 'swallow' weapon fire. Sky brushes do seal the world from leaks.

==Animated textures==
[[File:texture_animate.png|center]]
Simple animated textures with up to 10 frames can be used in Quake. Their name must begin with the character &quot;+&quot; and a number between 0-9. Quake will display a sequence beginning at &quot;+0&quot;, &quot;+1&quot;, etc, up to the highest number, and then loop back to &quot;+0&quot;.

Animated textures may also switch to an alternate sequence if applied to some brush entities, such as [[func_wall]], [[func_door]], and [[func_button]]. When one of these entities is textured with an animated texture and is triggered, it will switch to an alternate sequence if it exists. These must be named the same as the original animated textures, except use &quot;+a&quot;, &quot;+b&quot;, up to &quot;+j&quot;. You are not limited by the number of frames in the original animation, but you must begin at &quot;+a&quot;.

An example of this is the button texture used in the base maps of Quake. &quot;+0basebtn&quot; and &quot;+1basebtn&quot; blink a red texture, and when the func_button is used, it swaps to &quot;+abasebtn&quot;.

==Skip==
[[File:texture_skip.png|center]]
Skip is a '''nonstandard''' special texture, used by modern QBSP compilers, but does not have any function in the stock Quake compilers as released by [[ID Software]]. Skip is a texture much like clip in that it is invisible, but skip's use is to remove an entire face from ever rendering, and a brush does not have to be fully textured in skip. The removed face remains solid, and will block player and monster movement, as well as block weapon fire. In general, this is of little use on solid geometery, as Quake performs backside culling, but can be used on brush entities or &quot;hacks&quot; like windows to hide unwanted faces. A &quot;*waterskip&quot; texture exists as well, for use with liquid brushes.



(much of this article was rewritten from http://www.celephais.net/stuff/texturefaq.htm , I'll ask permission later)</text>
      <sha1>bejagviclgrrx68eq33mdfweucc1xqz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2315</id>
      <parentid>2314</parentid>
      <timestamp>2013-03-26T20:01:45Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="4118">[[File:Textures.png|thumb|Some of Quake's Textures]]
Textures in Quake are [[Quake_palette|256 color]] images used in [[Quake maps]]. Each texture has a name of no more than 15 characters. Their dimensions are required to be a [http://en.wikipedia.org/wiki/Power_of_two power of 2], commonly 64x64 or 128x128. Textures are stored directly within [[Quake_BSP_Format|.bsp files]] when used by Quake, or extracted, collected, and used in [[Texture_Wad|.wad files]] by level designers.

=Special Textures=
There are several special textures in Quake, which have properties defined either by the [[QBSP]] compiler, or by the game [[Engines|engine]].

==Clip==
[[File:texture_clip.png|center]]
Clip is a special texture, named &quot;clip&quot;, which is invisible, yet blocks player and monster movement. Brushes must be fully textured with clip, and clip brushes do not seal the world from [[leaks]]. Clip does not block weapon fire. Clip is commonly used to prevent the player from getting stuck on architectural details.

==Liquids==
[[File:texture_liquid.png|center]]
Liquids are textures whose name is proceeded by the character &quot;*&quot;. By default, this means they are water in Quake and you may [[swim]] in them. All faces of a brush must be of a single type of liquid texture, and they may not touch Sky textures. Their surface will also animate, and if compiled with the option &quot;-transwater&quot; will be translucent and not block [[Vis]].

A liquid with a name which starts with &quot;*slime&quot; will be damaging slime, and a liquid with a name starting with &quot;*lava&quot; will be even deadlier lava. When compiled by vis, liquids will play an automatic ambient sound. Beware that most versions of vis won't create sound for water liquids which do not begin with the name &quot;*water&quot; or &quot;*04water&quot;. Some modern vis programs allow you to turn off the creation of automatic ambient sounds.

==Skies==
[[File:texture_sky.png|center]]
Skies are textures whose name which start with the word &quot;sky&quot;, and must be of dimensions 256x128. The texture is treated like two 128x128 textures, the right section used as a backdrop, and the left section used as an overlay with it's black pixels transparent. Skies are displayed animated and full-bright, block player and monster movement, and 'swallow' weapon fire. Sky brushes do seal the world from leaks.

==Animated textures==
[[File:texture_animate.png|center]]
Simple animated textures with up to 10 frames can be used in Quake. Their name must begin with the character &quot;+&quot; and a number between 0-9. Quake will display a sequence beginning at &quot;+0&quot;, &quot;+1&quot;, etc, up to the highest number, and then loop back to &quot;+0&quot;.

Animated textures may also switch to an alternate sequence if applied to some brush entities, such as [[func_wall]], [[func_door]], and [[func_button]]. When one of these entities is textured with an animated texture and is triggered, it will switch to an alternate sequence if it exists. These must be named the same as the original animated textures, except use &quot;+a&quot;, &quot;+b&quot;, up to &quot;+j&quot;. You are not limited by the number of frames in the original animation, but you must begin at &quot;+a&quot;.

An example of this is the button texture used in the base maps of Quake. &quot;+0basebtn&quot; and &quot;+1basebtn&quot; blink a red texture, and when the func_button is used, it swaps to &quot;+abasebtn&quot;.

==Skip==
[[File:texture_skip.png|center]]
Skip is a '''nonstandard''' special texture, used by modern QBSP compilers, but does not have any function in the stock Quake compilers as released by [[ID Software]]. Skip is a texture much like clip in that it is invisible, but skip's use is to remove an entire face from ever rendering, and a brush does not have to be fully textured in skip. The removed face remains solid, and will block player and monster movement, as well as block weapon fire. In general, this is of little use on solid geometery, as Quake performs backside culling, but can be used on brush entities or &quot;hacks&quot; like windows to hide unwanted faces. A &quot;*waterskip&quot; texture exists as well, for use with liquid brushes.



(much of this article was rewritten from http://www.celephais.net/stuff/texturefaq.htm)</text>
      <sha1>m67uogxl7i1pg33ad80r9obv7zr2spm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2321</id>
      <parentid>2315</parentid>
      <timestamp>2013-03-26T21:48:19Z</timestamp>
      <contributor>
        <ip>80.217.79.210</ip>
      </contributor>
      <text xml:space="preserve" bytes="4117">[[File:Textures.png|thumb|Some of Quake's Textures]]
Textures in Quake are [[Quake_palette|256 color]] images used in [[Quake maps]]. Each texture has a name of no more than 15 characters. Their dimensions are required to be a [http://en.wikipedia.org/wiki/Power_of_two power of 2], commonly 64x64 or 128x128. Textures are stored directly within [[Quake_BSP_Format|.bsp files]] when used by Quake, or extracted, collected, and used in [[Texture_Wad|.wad files]] by level designers.

=Special Textures=
There are several special textures in Quake, which have properties defined either by the [[QBSP]] compiler, or by the game [[Engines|engine]].

==Clip==
[[File:texture_clip.png|center]]
Clip is a special texture, named &quot;clip&quot;, which is invisible, yet blocks player and monster movement. Brushes must be fully textured with clip, and clip brushes do not seal the world from [[leaks]]. Clip does not block weapon fire. Clip is commonly used to prevent the player from getting stuck on architectural details.

==Liquids==
[[File:texture_liquid.png|center]]
Liquids are textures whose name is proceeded by the character &quot;*&quot;. By default, this means they are water in Quake and you may [[swim]] in them. All faces of a brush must be of a single type of liquid texture, and they may not touch Sky textures. Their surface will also animate, and if compiled with the option &quot;-transwater&quot; will be translucent and not block [[Vis]].

A liquid with a name which starts with &quot;*slime&quot; will be damaging slime, and a liquid with a name starting with &quot;*lava&quot; will be even deadlier lava. When compiled by vis, liquids will play an automatic ambient sound. Beware that most versions of vis won't create sound for water liquids which do not begin with the name &quot;*water&quot; or &quot;*04water&quot;. Some modern vis programs allow you to turn off the creation of automatic ambient sounds.

==Skies==
[[File:texture_sky.png|center]]
Skies are textures whose name which start with the word &quot;sky&quot;, and must be of dimensions 256x128. The texture is treated like two 128x128 textures, the right section used as a backdrop, and the left section used as an overlay with its black pixels transparent. Skies are displayed animated and full-bright, block player and monster movement, and 'swallow' weapon fire. Sky brushes do seal the world from leaks.

==Animated textures==
[[File:texture_animate.png|center]]
Simple animated textures with up to 10 frames can be used in Quake. Their name must begin with the character &quot;+&quot; and a number between 0-9. Quake will display a sequence beginning at &quot;+0&quot;, &quot;+1&quot;, etc, up to the highest number, and then loop back to &quot;+0&quot;.

Animated textures may also switch to an alternate sequence if applied to some brush entities, such as [[func_wall]], [[func_door]], and [[func_button]]. When one of these entities is textured with an animated texture and is triggered, it will switch to an alternate sequence if it exists. These must be named the same as the original animated textures, except use &quot;+a&quot;, &quot;+b&quot;, up to &quot;+j&quot;. You are not limited by the number of frames in the original animation, but you must begin at &quot;+a&quot;.

An example of this is the button texture used in the base maps of Quake. &quot;+0basebtn&quot; and &quot;+1basebtn&quot; blink a red texture, and when the func_button is used, it swaps to &quot;+abasebtn&quot;.

==Skip==
[[File:texture_skip.png|center]]
Skip is a '''nonstandard''' special texture, used by modern QBSP compilers, but does not have any function in the stock Quake compilers as released by [[ID Software]]. Skip is a texture much like clip in that it is invisible, but skip's use is to remove an entire face from ever rendering, and a brush does not have to be fully textured in skip. The removed face remains solid, and will block player and monster movement, as well as block weapon fire. In general, this is of little use on solid geometery, as Quake performs backside culling, but can be used on brush entities or &quot;hacks&quot; like windows to hide unwanted faces. A &quot;*waterskip&quot; texture exists as well, for use with liquid brushes.



(much of this article was rewritten from http://www.celephais.net/stuff/texturefaq.htm)</text>
      <sha1>kb5ou5ov1p3rf0zzjvlthz4gbmwkksy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2425</id>
      <parentid>2321</parentid>
      <timestamp>2013-03-28T16:39:06Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="4152">[[File:Textures.png|thumb|Some of Quake's Textures]]
Textures in Quake are [[Quake_palette|256 color]] images used in [[Quake maps]]. Each texture has a name of no more than 15 characters. Their dimensions are required to be a [http://en.wikipedia.org/wiki/Power_of_two power of 2] in most OpenGL [[Engines|engines]], commonly 64x64 or 128x128. Textures are stored directly within [[Quake_BSP_Format|.bsp files]] when used by Quake, or extracted, collected, and used in [[Texture_Wad|.wad files]] by level designers.

=Special Textures=
There are several special textures in Quake, which have properties defined either by the [[QBSP]] compiler, or by the game [[Engines|engine]].

==Clip==
[[File:texture_clip.png|center]]
Clip is a special texture, named &quot;clip&quot;, which is invisible, yet blocks player and monster movement. Brushes must be fully textured with clip, and clip brushes do not seal the world from [[leaks]]. Clip does not block weapon fire. Clip is commonly used to prevent the player from getting stuck on architectural details.

==Liquids==
[[File:texture_liquid.png|center]]
Liquids are textures whose name is proceeded by the character &quot;*&quot;. By default, this means they are water in Quake and you may [[swim]] in them. All faces of a brush must be of a single type of liquid texture, and they may not touch Sky textures. Their surface will also animate, and if compiled with the option &quot;-transwater&quot; will be translucent and not block [[Vis]].

A liquid with a name which starts with &quot;*slime&quot; will be damaging slime, and a liquid with a name starting with &quot;*lava&quot; will be even deadlier lava. When compiled by vis, liquids will play an automatic ambient sound. Beware that most versions of vis won't create sound for water liquids which do not begin with the name &quot;*water&quot; or &quot;*04water&quot;. Some modern vis programs allow you to turn off the creation of automatic ambient sounds.

==Skies==
[[File:texture_sky.png|center]]
Skies are textures whose name which start with the word &quot;sky&quot;, and must be of dimensions 256x128. The texture is treated like two 128x128 textures, the right section used as a backdrop, and the left section used as an overlay with its black pixels transparent. Skies are displayed animated and full-bright, block player and monster movement, and 'swallow' weapon fire. Sky brushes do seal the world from leaks.

==Animated textures==
[[File:texture_animate.png|center]]
Simple animated textures with up to 10 frames can be used in Quake. Their name must begin with the character &quot;+&quot; and a number between 0-9. Quake will display a sequence beginning at &quot;+0&quot;, &quot;+1&quot;, etc, up to the highest number, and then loop back to &quot;+0&quot;.

Animated textures may also switch to an alternate sequence if applied to some brush entities, such as [[func_wall]], [[func_door]], and [[func_button]]. When one of these entities is textured with an animated texture and is triggered, it will switch to an alternate sequence if it exists. These must be named the same as the original animated textures, except use &quot;+a&quot;, &quot;+b&quot;, up to &quot;+j&quot;. You are not limited by the number of frames in the original animation, but you must begin at &quot;+a&quot;.

An example of this is the button texture used in the base maps of Quake. &quot;+0basebtn&quot; and &quot;+1basebtn&quot; blink a red texture, and when the func_button is used, it swaps to &quot;+abasebtn&quot;.

==Skip==
[[File:texture_skip.png|center]]
Skip is a '''nonstandard''' special texture, used by modern QBSP compilers, but does not have any function in the stock Quake compilers as released by [[ID Software]]. Skip is a texture much like clip in that it is invisible, but skip's use is to remove an entire face from ever rendering, and a brush does not have to be fully textured in skip. The removed face remains solid, and will block player and monster movement, as well as block weapon fire. In general, this is of little use on solid geometery, as Quake performs backside culling, but can be used on brush entities or &quot;hacks&quot; like windows to hide unwanted faces. A &quot;*waterskip&quot; texture exists as well, for use with liquid brushes.



(much of this article was rewritten from http://www.celephais.net/stuff/texturefaq.htm)</text>
      <sha1>4jf1nifw7cy00j498zqxeune1jtvq2a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2694</id>
      <parentid>2425</parentid>
      <timestamp>2013-03-30T14:37:02Z</timestamp>
      <contributor>
        <ip>178.70.205.134</ip>
      </contributor>
      <text xml:space="preserve" bytes="4267">[[File:Textures.png|thumb|Some of Quake's Textures]]
Textures in Quake are [[Quake_palette|256 color]] images used in [[Quake maps]]. Each texture has a name of no more than 15 characters. Their dimensions are required to be a [http://en.wikipedia.org/wiki/Power_of_two power of 2] in most OpenGL [[Engines|engines]], commonly 64x64 or 128x128. Textures are stored directly within [[Quake_BSP_Format|.bsp files]] when used by Quake, or extracted, collected, and used in [[Texture_Wad|.wad files]] by level designers.
To edit .wad files, extract textures from .bsp or convert images use [http://quakeone.com/files/getfile/22 TexMex]

=Special Textures=
There are several special textures in Quake, which have properties defined either by the [[QBSP]] compiler, or by the game [[Engines|engine]].

==Clip==
[[File:texture_clip.png|center]]
Clip is a special texture, named &quot;clip&quot;, which is invisible, yet blocks player and monster movement. Brushes must be fully textured with clip, and clip brushes do not seal the world from [[leaks]]. Clip does not block weapon fire. Clip is commonly used to prevent the player from getting stuck on architectural details.

==Liquids==
[[File:texture_liquid.png|center]]
Liquids are textures whose name is proceeded by the character &quot;*&quot;. By default, this means they are water in Quake and you may [[swim]] in them. All faces of a brush must be of a single type of liquid texture, and they may not touch Sky textures. Their surface will also animate, and if compiled with the option &quot;-transwater&quot; will be translucent and not block [[Vis]].

A liquid with a name which starts with &quot;*slime&quot; will be damaging slime, and a liquid with a name starting with &quot;*lava&quot; will be even deadlier lava. When compiled by vis, liquids will play an automatic ambient sound. Beware that most versions of vis won't create sound for water liquids which do not begin with the name &quot;*water&quot; or &quot;*04water&quot;. Some modern vis programs allow you to turn off the creation of automatic ambient sounds.

==Skies==
[[File:texture_sky.png|center]]
Skies are textures whose name which start with the word &quot;sky&quot;, and must be of dimensions 256x128. The texture is treated like two 128x128 textures, the right section used as a backdrop, and the left section used as an overlay with its black pixels transparent. Skies are displayed animated and full-bright, block player and monster movement, and 'swallow' weapon fire. Sky brushes do seal the world from leaks.

==Animated textures==
[[File:texture_animate.png|center]]
Simple animated textures with up to 10 frames can be used in Quake. Their name must begin with the character &quot;+&quot; and a number between 0-9. Quake will display a sequence beginning at &quot;+0&quot;, &quot;+1&quot;, etc, up to the highest number, and then loop back to &quot;+0&quot;.

Animated textures may also switch to an alternate sequence if applied to some brush entities, such as [[func_wall]], [[func_door]], and [[func_button]]. When one of these entities is textured with an animated texture and is triggered, it will switch to an alternate sequence if it exists. These must be named the same as the original animated textures, except use &quot;+a&quot;, &quot;+b&quot;, up to &quot;+j&quot;. You are not limited by the number of frames in the original animation, but you must begin at &quot;+a&quot;.

An example of this is the button texture used in the base maps of Quake. &quot;+0basebtn&quot; and &quot;+1basebtn&quot; blink a red texture, and when the func_button is used, it swaps to &quot;+abasebtn&quot;.

==Skip==
[[File:texture_skip.png|center]]
Skip is a '''nonstandard''' special texture, used by modern QBSP compilers, but does not have any function in the stock Quake compilers as released by [[ID Software]]. Skip is a texture much like clip in that it is invisible, but skip's use is to remove an entire face from ever rendering, and a brush does not have to be fully textured in skip. The removed face remains solid, and will block player and monster movement, as well as block weapon fire. In general, this is of little use on solid geometery, as Quake performs backside culling, but can be used on brush entities or &quot;hacks&quot; like windows to hide unwanted faces. A &quot;*waterskip&quot; texture exists as well, for use with liquid brushes.



(much of this article was rewritten from http://www.celephais.net/stuff/texturefaq.htm)</text>
      <sha1>914sk4qrou4n84z60ial2083avdmf49</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2695</id>
      <parentid>2694</parentid>
      <timestamp>2013-03-30T14:37:41Z</timestamp>
      <contributor>
        <ip>178.70.205.134</ip>
      </contributor>
      <text xml:space="preserve" bytes="4268">[[File:Textures.png|thumb|Some of Quake's Textures]]
Textures in Quake are [[Quake_palette|256 color]] images used in [[Quake maps]]. Each texture has a name of no more than 15 characters. Their dimensions are required to be a [http://en.wikipedia.org/wiki/Power_of_two power of 2] in most OpenGL [[Engines|engines]], commonly 64x64 or 128x128. Textures are stored directly within [[Quake_BSP_Format|.bsp files]] when used by Quake, or extracted, collected, and used in [[Texture_Wad|.wad files]] by level designers.

To edit .wad files, extract textures from .bsp or convert images use [http://quakeone.com/files/getfile/22 TexMex]

=Special Textures=
There are several special textures in Quake, which have properties defined either by the [[QBSP]] compiler, or by the game [[Engines|engine]].

==Clip==
[[File:texture_clip.png|center]]
Clip is a special texture, named &quot;clip&quot;, which is invisible, yet blocks player and monster movement. Brushes must be fully textured with clip, and clip brushes do not seal the world from [[leaks]]. Clip does not block weapon fire. Clip is commonly used to prevent the player from getting stuck on architectural details.

==Liquids==
[[File:texture_liquid.png|center]]
Liquids are textures whose name is proceeded by the character &quot;*&quot;. By default, this means they are water in Quake and you may [[swim]] in them. All faces of a brush must be of a single type of liquid texture, and they may not touch Sky textures. Their surface will also animate, and if compiled with the option &quot;-transwater&quot; will be translucent and not block [[Vis]].

A liquid with a name which starts with &quot;*slime&quot; will be damaging slime, and a liquid with a name starting with &quot;*lava&quot; will be even deadlier lava. When compiled by vis, liquids will play an automatic ambient sound. Beware that most versions of vis won't create sound for water liquids which do not begin with the name &quot;*water&quot; or &quot;*04water&quot;. Some modern vis programs allow you to turn off the creation of automatic ambient sounds.

==Skies==
[[File:texture_sky.png|center]]
Skies are textures whose name which start with the word &quot;sky&quot;, and must be of dimensions 256x128. The texture is treated like two 128x128 textures, the right section used as a backdrop, and the left section used as an overlay with its black pixels transparent. Skies are displayed animated and full-bright, block player and monster movement, and 'swallow' weapon fire. Sky brushes do seal the world from leaks.

==Animated textures==
[[File:texture_animate.png|center]]
Simple animated textures with up to 10 frames can be used in Quake. Their name must begin with the character &quot;+&quot; and a number between 0-9. Quake will display a sequence beginning at &quot;+0&quot;, &quot;+1&quot;, etc, up to the highest number, and then loop back to &quot;+0&quot;.

Animated textures may also switch to an alternate sequence if applied to some brush entities, such as [[func_wall]], [[func_door]], and [[func_button]]. When one of these entities is textured with an animated texture and is triggered, it will switch to an alternate sequence if it exists. These must be named the same as the original animated textures, except use &quot;+a&quot;, &quot;+b&quot;, up to &quot;+j&quot;. You are not limited by the number of frames in the original animation, but you must begin at &quot;+a&quot;.

An example of this is the button texture used in the base maps of Quake. &quot;+0basebtn&quot; and &quot;+1basebtn&quot; blink a red texture, and when the func_button is used, it swaps to &quot;+abasebtn&quot;.

==Skip==
[[File:texture_skip.png|center]]
Skip is a '''nonstandard''' special texture, used by modern QBSP compilers, but does not have any function in the stock Quake compilers as released by [[ID Software]]. Skip is a texture much like clip in that it is invisible, but skip's use is to remove an entire face from ever rendering, and a brush does not have to be fully textured in skip. The removed face remains solid, and will block player and monster movement, as well as block weapon fire. In general, this is of little use on solid geometery, as Quake performs backside culling, but can be used on brush entities or &quot;hacks&quot; like windows to hide unwanted faces. A &quot;*waterskip&quot; texture exists as well, for use with liquid brushes.



(much of this article was rewritten from http://www.celephais.net/stuff/texturefaq.htm)</text>
      <sha1>9yqenmydw2so5l1untgydux0t0ubrdm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Thunderbolt</title>
    <ns>0</ns>
    <id>403</id>
    <revision>
      <id>687</id>
      <timestamp>2008-05-07T19:49:21Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page:  == Description ==  The thunderbolt is really only hindered by the fact that it doesn't work at long range (and the little issue involving H2O). Other than this, it is one heck of a powerf...</comment>
      <text xml:space="preserve" bytes="1882">
== Description ==

The thunderbolt is really only hindered by the fact that it doesn't work at long range (and the little issue involving H2O). Other than this, it is one heck of a powerful weapon. When Quaded, it will gib a player with a red armor and 250 health in no time at all. On top of all this, it doesn't even cause damage to its user. The only problem is that it uses cells at a very fast rate, so ammo conservation is critical.

Stay closer to the player so you have a better chance of hitting him. Turn from side to side if he's moving a lot. If he's staying still, you won't have much to worry about. He'll be dead in a couple seconds once you get a steady lock on him. Try jumping and aiming at the player's head - this works pretty well for avoiding his attacks and confusing him. It actually impairs your opponents vision if you aim the bolt at their eyes, as the model gets in the way. Obviously, it would be best to avoid water. Unless, of course, there happens to be more than one player going for a swim. In fact - if you become good enough at calculating damage - it's possible for you to discharge without dying as long as you have enough health and armor, and a small enough number of cells. The half-damage rule applies to cells as well as rockets, so you can kill someone else and still survive. Just make sure you don't have too much juice...

To defend yourself, you need to run, jump, and strafe. That's your only chance. Even then, you may be killed. If your weapon is weak, try your hardest to avoid the shaft long enough for the other player to run out of ammo, and then let him have it. If you have a powerful weapon, try avoiding the shaft but also be a little careless and try to hit him. Unless you have a powerful weapon, you'll probably die, so make your peace while you still can.

----
'''Effectiveness:''' Excellent

'''Avoidability:''' Good</text>
      <sha1>9mkxi2e8s22gf90jchhfrnki6inanmv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>996</id>
      <parentid>687</parentid>
      <timestamp>2009-05-22T09:00:16Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>as the current weapon descriptions were taken from http://euroquake.webs.com/guides2.htm i am getting the old ones from archive.org</comment>
      <text xml:space="preserve" bytes="571">{{Infobox Weapon
|weapon=Thunderbolt
|ammotype=[[Cells]]
|ammousage=1 per shot
|shottype=hitscan
|dpshot=30
|dpsecond=300
|range=600 units
|cycletime=0.1s
}}

The Lightning gun, ''Thunderbolt'' or ''Shaft'' is only available in the registered version of quake. It fires a short-ranged bolt of lightning similar to the [[Shambler]]'s attack. Don't fire it under water, or it will explode, killing you and anyone else in the water nearby. (Unless, of course, you have the [[Pentagram of Protection]]. Try it on [[dm3]] sometime. It's great fun.)

==See Also==
* [[Weapons]]</text>
      <sha1>qyc2bfv8a78s05e0kkj13zyrjmb5ie0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1000</id>
      <parentid>996</parentid>
      <timestamp>2009-05-23T08:00:25Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="788">{{Infobox Weapon
|weapon=Thunderbolt
|ammotype=[[Cells]]
|ammousage=1 per shot
|shottype=hitscan
|dpshot=30
|dpsecond=300
|range=600 units
|cycletime=0.1s
}}

The Lightning gun, ''Thunderbolt'' or ''Shaft'' is only available in the registered version of quake. It fires a short-ranged bolt of lightning similar to the [[Shambler]]'s attack. Don't fire it under water, or it will explode, killing you and anyone else in the water nearby. (Unless, of course, you have the [[Pentagram of Protection]]. Try it on [[dm3]] sometime. It's great fun.)

Note: the thunderbolt underwater effect does damage in a radius around the player, and doesn't actually check to see if targets are also underwater, so you can actually kill people out of the water with this attack.

==See Also==
* [[Weapons]]</text>
      <sha1>snozcggjlg4l2jdiex7fjhfi9rwldih</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1313</id>
      <parentid>1000</parentid>
      <timestamp>2009-09-27T18:36:21Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="773">{{Infobox Weapon
|weapon=Thunderbolt
|ammotype=[[Cells]]
|ammousage=1 per shot
|shottype=hitscan
|dpshot=30
|dpsecond=300
|range=600 units
|cycletime=0.1s
}}

The Lightning gun, ''Thunderbolt'' or ''Shaft'' is only available in the registered version of quake. It fires a short-ranged bolt of lightning similar to the [[Shambler]]'s attack. Don't fire it under water, or it will explode, killing you and anyone else in the water nearby. (Unless, of course, you have the [[Pentagram of Protection]]. Try it on [[dm3]] sometime. It's great fun.)

Note: the thunderbolt underwater effect does damage in a radius around the player, and doesn't actually check to see if targets are also underwater, so you can actually kill people out of the water with this attack.

{{Weapons}}</text>
      <sha1>48otsvp8bn9wgrb5vp4nxryhe20hxzw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3038</id>
      <parentid>1313</parentid>
      <timestamp>2013-12-17T04:31:23Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <comment>damage values were wrong</comment>
      <text xml:space="preserve" bytes="1188">{{Infobox Weapon
|weapon=Thunderbolt
|image_w=weapon_thunderbolt.png
|image_v=v_thunderbolt.png
|manualtext=Try it. You'll like it. Use the same technique as watering your rosebush.
|ammotype=[[Cells]]
|ammousage=1 per shot
|shottype=[[Hitscan]]
|dpshot=30
|dpsecond=150
|range=600 [[unit]]s
|cycletime=0.2 s
|obituary1=(Target) accepts (attacker)'s shaft.
|obituary2=(Target) accepts (attacker)'s discharge.
}}

The '''Lightning Gun''', also known as '''Thunderbolt''' or '''Shaft''' is only available in the registered version of Quake. It fires a short-ranged bolt of lightning similar to the [[Shambler]]'s attack. Don't fire it under water, or it will explode, killing you and anyone else nearby. (Unless, of course, you have the [[Pentagram of Protection]]. Try it on [[dm3]] sometime. It's great fun.)

=Notes=
Note: the thunderbolt underwater discharge works like an ordinary explosion, calling [[T_RadiusDamage]] with 35 times the player's current [[cell]] ammo as a radius. Therefore, as it doesn't actually check to see if targets are also underwater, it will also affect targets out of the water as long as the [[traceline|line of sight]] to them is unobstructed.

{{Weapons}}</text>
      <sha1>6vq4ep1narxbxp270yv7wl0ie2v41ek</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3040</id>
      <parentid>3038</parentid>
      <timestamp>2013-12-18T00:44:57Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <text xml:space="preserve" bytes="1316">{{Infobox Weapon
|weapon=Thunderbolt
|image_w=weapon_thunderbolt.png
|image_v=v_thunderbolt.png
|manualtext=Try it. You'll like it. Use the same technique as watering your rosebush.
|ammotype=[[Cells]]
|ammousage=1 per shot
|shottype=[[Hitscan]]
|dpshot=30
|dpsecond=150
|range=600 [[unit]]s
|cycletime=0.2 s
|1stappearance = [[E2M5]]
|obituary1=(Target) accepts (attacker)'s shaft.
|obituary2=(Target) accepts (attacker)'s discharge.
}}

The '''Lightning Gun''', also known as '''Thunderbolt''' or '''Shaft''' is only available in the registered version of Quake. It fires a short-ranged bolt of lightning similar to the [[Shambler]]'s attack. Don't fire it under water, or it will explode, killing you and anyone else nearby, unless, of course, you have the [[Pentagram of Protection]].

=Notes=
*The thunderbolt underwater discharge works like an ordinary explosion, calling [[T_RadiusDamage]] with 35 times the player's current [[cell]] ammo as a radius. Therefore, as it doesn't actually checks to see if targets are also underwater, it will also affect targets out of the water as long as the [[traceline|line of sight]] to them is unobstructed.
*Thunderbolt [[QuakeC]] implementation contains some dead code which apparently was supposed to send [[deathmatch]] opponents flying on successful hit.

{{Weapons}}</text>
      <sha1>so1743yc4wb3ukzuosnoypb45rvo11o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3048</id>
      <parentid>3040</parentid>
      <timestamp>2013-12-18T01:57:50Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <text xml:space="preserve" bytes="1370">{{Infobox Weapon
|weapon=Thunderbolt
|image_w=weapon_thunderbolt.png
|image_v=v_thunderbolt.png
|manualtext=Try it. You'll like it. Use the same technique as watering your rosebush.
|ammotype=[[Cells]]
|ammousage=1 per shot
|shottype=[[Hitscan]]
|dpshot=30
|dpsecond=150
|range=600 [[unit]]s
|cycletime=0.2 s
|1stappearance = [[E2M5]]
|obituary1=(Target) accepts (attacker)'s shaft.
|obituary2=(Target) accepts (attacker)'s discharge.
|obituary3=(Target) discharges into water/slime/lava.
}}

The '''Lightning Gun''', also known as '''Thunderbolt''' or '''Shaft''' is only available in the registered version of Quake. It fires a short-ranged bolt of lightning similar to the [[Shambler]]'s attack. Don't fire it under water, or it will explode, killing you and anyone else nearby, unless, of course, you have the [[Pentagram of Protection]].

=Notes=
*The thunderbolt underwater discharge works like an ordinary explosion, calling [[T_RadiusDamage]] with 35 times the player's current [[cell]] ammo as a radius. Therefore, as it doesn't actually checks to see if targets are also underwater, it will also affect targets out of the water as long as the [[traceline|line of sight]] to them is unobstructed.
*Thunderbolt [[QuakeC]] implementation contains some dead code which apparently was supposed to send [[deathmatch]] opponents flying on successful hit.

{{Weapons}}</text>
      <sha1>f6pehteff3ncqfeub6dis1imxrova1a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Timelimit</title>
    <ns>0</ns>
    <id>934</id>
    <redirect title="timelimit" />
    <revision>
      <id>2635</id>
      <timestamp>2013-03-29T14:22:23Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Timelimit]] to [[timelimit]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="23">#REDIRECT [[timelimit]]</text>
      <sha1>1eoz3s21ffxkqfy1h50n160tcwpcwyn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>TomazQuake</title>
    <ns>0</ns>
    <id>148</id>
    <revision>
      <id>231</id>
      <timestamp>2007-11-02T20:04:35Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{Infobox Engine |name=TomazQuake |author=[[Tomaz]] |based-on=[[GLQuake]] |first-release=? |newest-release=1.48 |website=[http://tomaz.quakesrc.org/q/dl_misc.php here] }}</comment>
      <text xml:space="preserve" bytes="170">{{Infobox Engine
|name=TomazQuake
|author=[[Tomaz]]
|based-on=[[GLQuake]]
|first-release=?
|newest-release=1.48
|website=[http://tomaz.quakesrc.org/q/dl_misc.php here]
}}</text>
      <sha1>p018qwwxvqvkno1vaq5jfp7gsm5f180</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>233</id>
      <parentid>231</parentid>
      <timestamp>2007-11-02T20:07:22Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="183">{{Infobox Engine
|name=TomazQuake
|author=[[Tomaz]]
|based-on=[[GLQuake]]
|first-release=?
|newest-release=1.48
|website=[http://tomaz.quakesrc.org/q/dl_misc.php here]
}}

{{Engines}}</text>
      <sha1>5b87n6zc7lapmb5v6rt1xric7tijhpu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3229</id>
      <parentid>233</parentid>
      <timestamp>2014-04-07T13:24:17Z</timestamp>
      <contributor>
        <ip>85.89.73.250</ip>
      </contributor>
      <text xml:space="preserve" bytes="170">{{Infobox Engine
|name=TomazQuake
|author=[[Tomaz]]
|based-on=[[GLQuake]]
|first-release=?
|newest-release=1.48
|website=[http://tomaz.snowcold.met/ here]
}}

{{Engines}}</text>
      <sha1>mtw882mdha78j2penh5addmctngy5y1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3230</id>
      <parentid>3229</parentid>
      <timestamp>2014-04-07T13:24:42Z</timestamp>
      <contributor>
        <ip>85.89.73.250</ip>
      </contributor>
      <text xml:space="preserve" bytes="170">{{Infobox Engine
|name=TomazQuake
|author=[[Tomaz]]
|based-on=[[GLQuake]]
|first-release=?
|newest-release=1.48
|website=[http://tomaz.snowcold.net/ here]
}}

{{Engines}}</text>
      <sha1>0dvmqdb3rbr1abxyddymawewtljyj80</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3231</id>
      <parentid>3230</parentid>
      <timestamp>2014-04-07T13:25:02Z</timestamp>
      <contributor>
        <ip>85.89.73.250</ip>
      </contributor>
      <text xml:space="preserve" bytes="171">{{Infobox Engine
|name=TomazQuake
|author=[[Tomaz]]
|based-on=[[GLQuake]]
|first-release=?
|newest-release=1.481
|website=[http://tomaz.snowcold.net/ here]
}}

{{Engines}}</text>
      <sha1>9d24o1vuxmoxsp1romjk90ma95o9dnu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Traceline</title>
    <ns>0</ns>
    <id>202</id>
    <revision>
      <id>379</id>
      <timestamp>2008-02-22T19:56:06Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  '''traceline'''(vector ''v1'', vector ''v2'', float ''nomonsters'', entity ''forent'')  ''v1'' = start of line  ''v2'' = end of line  ''nomonster'' = if TRUE, then see through other monst...</comment>
      <text xml:space="preserve" bytes="1241"> '''traceline'''(vector ''v1'', vector ''v2'', float ''nomonsters'', entity ''forent'')

''v1'' = start of line

''v2'' = end of line

''nomonster'' = if TRUE, then see through other monsters, else FALSE.

''forent'' = ignore this entity, it's owner, and it's owned entities. if forent = world, then ignore no entity.

Trace a line of sight, possibly ignoring monsters, and possibly ignoring the entity forent (usually, forent = self). This function is used very often, tracing and shot targeting. Traces are blocked by bounding boxes and exact bsp entities. Returns the results in the global variables:

float trace_allsolid;
  // never used
float trace_startsolid;
  // never used
float trace_fraction;
  // fraction (percent) of the line that was traced, before
  // an obstacle was hit. Equal to 1 if no obstacle were found.
vector trace_endpos; 
  // point where line ended or met an obstacle.
vector trace_plane_normal;
  // direction vector of trace (?)
float  trace_plane_dist;  
  // distance to impact along direction vector (?)
entity trace_ent;      
  // entity hit by the line
float  trace_inopen;
  // boolean, true if line went through non-water area.
float  trace_inwater;
  // boolean, true if line went through water area.</text>
      <sha1>7grb90p6f897ywfjuy5rzvpl637ku3l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Traceoff</title>
    <ns>0</ns>
    <id>935</id>
    <redirect title="traceoff" />
    <revision>
      <id>2637</id>
      <timestamp>2013-03-29T14:22:23Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Traceoff]] to [[traceoff]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="22">#REDIRECT [[traceoff]]</text>
      <sha1>ithnot0scaplwoxchx5zlpwxesepcu5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Traceon</title>
    <ns>0</ns>
    <id>936</id>
    <redirect title="traceon" />
    <revision>
      <id>2639</id>
      <timestamp>2013-03-29T14:22:23Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Traceon]] to [[traceon]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="21">#REDIRECT [[traceon]]</text>
      <sha1>gidvjsxle0cq6edhgdgd1bksut2vuzp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>TrenchBroom</title>
    <ns>0</ns>
    <id>790</id>
    <revision>
      <id>2323</id>
      <timestamp>2013-03-26T22:40:24Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Created page with &quot;Trenchbroom is a recent level editor for Quake programmed and maintained by [[SleepwalkR]]. It uses a single 3D view with no 2D views, and boosts some very handy vertex manipu...&quot;</comment>
      <text xml:space="preserve" bytes="231">Trenchbroom is a recent level editor for Quake programmed and maintained by [[SleepwalkR]]. It uses a single 3D view with no 2D views, and boosts some very handy vertex manipulation.  [http://kristianduske.com/trenchbroom/ Website]</text>
      <sha1>hk3ezwwzp6tzaotdbtk6pxct5nxxtjh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2327</id>
      <parentid>2323</parentid>
      <timestamp>2013-03-26T22:43:16Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <minor/>
      <comment>Scampie moved page [[Trenchbroom]] to [[TrenchBroom]]: TrenchBroom is properly rendered with both a capital T and a capital B</comment>
      <text xml:space="preserve" bytes="231">Trenchbroom is a recent level editor for Quake programmed and maintained by [[SleepwalkR]]. It uses a single 3D view with no 2D views, and boosts some very handy vertex manipulation.  [http://kristianduske.com/trenchbroom/ Website]</text>
      <sha1>hk3ezwwzp6tzaotdbtk6pxct5nxxtjh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2333</id>
      <parentid>2327</parentid>
      <timestamp>2013-03-26T22:59:50Z</timestamp>
      <contributor>
        <username>Text Fish</username>
        <id>36</id>
      </contributor>
      <text xml:space="preserve" bytes="371">Trenchbroom is a recent level editor for Quake programmed and maintained by [[SleepwalkR]]. It uses a single 3D view with no 2D views, and boosts some very handy vertex manipulation.  [http://kristianduske.com/trenchbroom/ Website]

See [[Getting_Started_Mapping]] for a beginners guide to using Trenchbroom, that also covers a lot of the basics of general Quake mapping.</text>
      <sha1>ro2brfmy8dtujepy5se173i803ifwpg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2334</id>
      <parentid>2333</parentid>
      <timestamp>2013-03-26T23:16:36Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="371">Trenchbroom is a recent level editor for Quake programmed and maintained by [[SleepwalkR]]. It uses a single 3D view with no 2D views, and boasts some very handy vertex manipulation.  [http://kristianduske.com/trenchbroom/ Website]

See [[Getting_Started_Mapping]] for a beginners guide to using Trenchbroom, that also covers a lot of the basics of general Quake mapping.</text>
      <sha1>7xoq0olrt9vlef8akzlnx76ce5kcm3x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Trenchbroom</title>
    <ns>0</ns>
    <id>791</id>
    <redirect title="TrenchBroom" />
    <revision>
      <id>2328</id>
      <timestamp>2013-03-26T22:43:16Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Scampie moved page [[Trenchbroom]] to [[TrenchBroom]]: TrenchBroom is properly rendered with both a capital T and a capital B</comment>
      <text xml:space="preserve" bytes="25">#REDIRECT [[TrenchBroom]]</text>
      <sha1>aboqxotne1h5dpfdqm9wfdaxtrnv8g6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Trick Jumps</title>
    <ns>0</ns>
    <id>562</id>
    <revision>
      <id>1469</id>
      <timestamp>2009-12-09T09:35:38Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>New page: '''Trick Jumps''' are maneuvers that allow you to achieve a speed, height, or distance beyond what is usually possible with the physics of Quake.  In general these 'features' were not inte...</comment>
      <text xml:space="preserve" bytes="3079">'''Trick Jumps''' are maneuvers that allow you to achieve a speed, height, or distance beyond what is usually possible with the physics of Quake.  In general these 'features' were not intended by the designers at [[id Software]], though there is some evidence that at least some of them were known to the designers during development.

===Ramp Jump===
A ramp jump is one of the easiest trick jumps to accomplish.  Simply run up a ramp and jump just before reaching the top.  The upward velocity of your jump is actually added to whatever upward velocity you had while running up the ramp, resulting in extra height.

===Strafe Jump===
A strafe jump can be used for two purposes -- first, to extend the distance of a jump, and second, to jump to an area that could not be reached without bending the jump around some obstacle. The jump is accomplished by running and jumping at an angle to your actual goal, then using a strafe key and the forward key at the same time, while turning your view to steer the course of the jump.  A good use of this is to jump across the lava from the [[Rocket Launcher]] room to the [[Super Shotgun]] room in [[DM2]].

===Rocket Jump===
Simply have a Rocket Launcher, armor is favored, aim down, jump, then fire a rocket under to propel yourself a bit more. It is used very often, even I (CheapAlert) use it even when I have 10 health (And I die) :P

===Grenade Jump===
A grenade jump uses the same principle as a rocket jump, except that you have to stand/run over the grenade and jump just as it explodes.  The timing required to do this correctly will take some practice.

===Grenade plus Rocket Jump===
Ensure that you have the grenade launcher, rocket launcher, at least 2 rockets and adequate armour and health before starting, the more of each the better. Select the grenade launcher and fire a grenade aiming to land on a particular spot (the launch position), one way to do this is to fire vertically in to the air as soon as you have fired the grenade switch to the Rocket Launcher and at the point that the grenade lands for it's second bounce move the launch position and fire a rocket directly at the ground. If you time it right, i.e. so that the rocket hits the ground at the same point that grenade explodes you should find that you are able to jump significantly higher/lomger than with just the Rocket Jump. The disadvantage is that it requires more ammo/weapons, usually takes longer to perform, which can be problematic during battles, and does more damage to your player. If you do this with the '10 health' left scenario as I (Mr.Burns) often do you will usually end up in an embarrassing crumple on the floor with your opponents standing around openly giggling

===Monster-assisted Jumps===
[[Vore|Voreballs]] and [[Ogre]] grenades are obvious alternatives to using your own explosives to get a boost.  However, '''any''' enemy attack that damages you will also give you a physical push away from the source of the damage.  The relative position of the monster determines whether this push is upwards, outwards, or downwards.</text>
      <sha1>p7u9jeh5clykzy8kbwzccna836e3v6y</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2745</id>
      <parentid>1469</parentid>
      <timestamp>2013-04-01T18:13:38Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>easy grenade jump</comment>
      <text xml:space="preserve" bytes="3225">'''Trick Jumps''' are maneuvers that allow you to achieve a speed, height, or distance beyond what is usually possible with the physics of Quake.  In general these 'features' were not intended by the designers at [[id Software]], though there is some evidence that at least some of them were known to the designers during development.

===Ramp Jump===
A ramp jump is one of the easiest trick jumps to accomplish.  Simply run up a ramp and jump just before reaching the top.  The upward velocity of your jump is actually added to whatever upward velocity you had while running up the ramp, resulting in extra height.

===Strafe Jump===
A strafe jump can be used for two purposes -- first, to extend the distance of a jump, and second, to jump to an area that could not be reached without bending the jump around some obstacle. The jump is accomplished by running and jumping at an angle to your actual goal, then using a strafe key and the forward key at the same time, while turning your view to steer the course of the jump.  A good use of this is to jump across the lava from the [[Rocket Launcher]] room to the [[Super Shotgun]] room in [[DM2]].

===Rocket Jump===
Simply have a Rocket Launcher, armor is favored, aim down, jump, then fire a rocket under to propel yourself a bit more.

===Grenade Jump===
A grenade jump uses the same principle as a rocket jump, except that you have to stand/run over the grenade and jump just as it explodes.  The timing required to do this correctly will take some practice. If the floor below you is flat and you are in no rush, an easy timing trick is to shoot the grenade straight upwards. The grenade will fall down exactly at your position and bounce. It will explode when it hits the ground the second time.

===Grenade plus Rocket Jump===
Ensure that you have the grenade launcher, rocket launcher, at least 2 rockets and adequate armor and health before starting, the more of each the better. Select the grenade launcher and fire a grenade aiming to land on a particular spot (the launch position), one way to do this is to fire vertically in to the air as soon as you have fired the grenade switch to the Rocket Launcher and at the point that the grenade lands for it's second bounce move the launch position and fire a rocket directly at the ground. If you time it right, i.e. so that the rocket hits the ground at the same point that grenade explodes you should find that you are able to jump significantly higher/lomger than with just the Rocket Jump. The disadvantage is that it requires more ammo/weapons, usually takes longer to perform, which can be problematic during battles, and does more damage to your player. If you do this with the '10 health' left scenario as I (Mr.Burns) often do you will usually end up in an embarrassing crumple on the floor with your opponents standing around openly giggling

===Monster-assisted Jumps===
[[Vore|Voreballs]] and [[Ogre]] grenades are obvious alternatives to using your own explosives to get a boost.  However, '''any''' enemy attack that damages you will also give you a physical push away from the source of the damage.  The relative position of the monster determines whether this push is upwards, outwards, or downwards.</text>
      <sha1>bqutu7qj07sfolhzzc51ulxs6wwgsae</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Trigger changelevel</title>
    <ns>0</ns>
    <id>937</id>
    <redirect title="trigger changelevel" />
    <revision>
      <id>2641</id>
      <timestamp>2013-03-29T14:22:24Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Trigger changelevel]] to [[trigger changelevel]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="33">#REDIRECT [[trigger changelevel]]</text>
      <sha1>39icppfqlpkf5qoe7xyj46o170ieivo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Trigger hurt</title>
    <ns>0</ns>
    <id>938</id>
    <redirect title="trigger hurt" />
    <revision>
      <id>2643</id>
      <timestamp>2013-03-29T14:22:24Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Trigger hurt]] to [[trigger hurt]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="26">#REDIRECT [[trigger hurt]]</text>
      <sha1>bb53zu9peimmyqfk8986ukblj1aaqpx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Trigger multiple</title>
    <ns>0</ns>
    <id>939</id>
    <redirect title="trigger multiple" />
    <revision>
      <id>2645</id>
      <timestamp>2013-03-29T14:22:24Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Trigger multiple]] to [[trigger multiple]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[trigger multiple]]</text>
      <sha1>fw24d1t21seteoqo4nps38mwnwh7lrm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Trigger push</title>
    <ns>0</ns>
    <id>940</id>
    <redirect title="trigger push" />
    <revision>
      <id>2647</id>
      <timestamp>2013-03-29T14:22:25Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Trigger push]] to [[trigger push]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="26">#REDIRECT [[trigger push]]</text>
      <sha1>pkzwuoa1e9sxlncovs6lqoqts7sisho</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Urban Mercenary</title>
    <ns>0</ns>
    <id>444</id>
    <revision>
      <id>779</id>
      <timestamp>2008-05-08T19:25:25Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <comment>New page: {{Infobox Project |name=Urban Mercenary |author=Moshpit Studios |license=Proprietary |engine=[[GLQuake]]  |first-release=2001 |newest-release=2001 |website= }}  Urban Mercenary is one of t...</comment>
      <text xml:space="preserve" bytes="782">{{Infobox Project
|name=Urban Mercenary
|author=Moshpit Studios
|license=Proprietary
|engine=[[GLQuake]] 
|first-release=2001
|newest-release=2001
|website=
}}

Urban Mercenary is one of the first multiplayer games where you earned actual money for fragging online. Offline training bots are provided.

== Engine modifications ==
The engine provides basic 8-bit texture support and a new particle system. There is no model interpolation. There is also more effects with the familiar glow cone effect.  There is also a point-and-click mouse driven menu interface.

== Lack of source ==
Although there are GNU GPL v2 notices provided with the game, the source code for the engine was never made available. The QC progs source however is available with the game.


{{Derivative Games}}</text>
      <sha1>s4aaxewgkplygwk4wmcb9t0ejkgsffe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>User talk:Deqer</title>
    <ns>3</ns>
    <id>987</id>
    <revision>
      <id>2752</id>
      <timestamp>2013-04-05T16:37:39Z</timestamp>
      <contributor>
        <username>Deqer</username>
        <id>42</id>
      </contributor>
      <comment>Created page with &quot;This is the talk page.  You can leave a message on it.&quot;</comment>
      <text xml:space="preserve" bytes="54">This is the talk page.  You can leave a message on it.</text>
      <sha1>bgcf70rsoyctiji7srevx9jp894c06w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2753</id>
      <parentid>2752</parentid>
      <timestamp>2013-04-05T16:38:15Z</timestamp>
      <contributor>
        <username>Deqer</username>
        <id>42</id>
      </contributor>
      <comment>/* First message. */ new section</comment>
      <text xml:space="preserve" bytes="121">This is the talk page.  You can leave a message on it.

== First message. ==

This is the first message of the Talk page.</text>
      <sha1>cm5e3wmd09msb0gymr6rr0yfl7y5mmc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>User talk:Hectate</title>
    <ns>3</ns>
    <id>652</id>
    <revision>
      <id>1945</id>
      <timestamp>2013-03-25T05:00:37Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>/* func_door */ new section</comment>
      <text xml:space="preserve" bytes="599">== func_door ==

I think what you did is a good start but we need to come up with a stronger formatting style to use with all entities. I haven't really thought about this yet, but I'm going to try doing the func_button and see if I can format it a little clearer. Also, I think we should have the spawnflags value of each flag as a reference for anyone that might need it.

By the way, I discovered that you can use {{DISPLAYTITLE:func_door}} to get the correct formatting for entity names. It might be worth creating a template to do it for all entities:
http://en.wikipedia.org/wiki/Help:Template</text>
      <sha1>mmh8yeudd07a8g84vecu441zj3fm3ej</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2073</id>
      <parentid>1945</parentid>
      <timestamp>2013-03-25T14:46:30Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>reply</comment>
      <text xml:space="preserve" bytes="1052">== func_door ==

I think what you did is a good start but we need to come up with a stronger formatting style to use with all entities. I haven't really thought about this yet, but I'm going to try doing the func_button and see if I can format it a little clearer. Also, I think we should have the spawnflags value of each flag as a reference for anyone that might need it.

By the way, I discovered that you can use &lt;nowiki&gt;{{DISPLAYTITLE:func_door}}&lt;/nowiki&gt; to get the correct formatting for entity names. It might be worth creating a template to do it for all entities:
http://en.wikipedia.org/wiki/Help:Template
:A template should be possible, I'll look into it when I get a chance. I agree that the formatting could be better as well. The initial edit was more to get a full set of the data in there so we could try out different formats as well. I wonder if a table would help organize the different points (description, key, value, common FGD name, etc) better. --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 14:46, 25 March 2013 (UTC)</text>
      <sha1>grxlyjngwk0us6wb82d7c0lv6scnvh1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2081</id>
      <parentid>2073</parentid>
      <timestamp>2013-03-25T15:30:05Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="1116">{{todo|user=[[User:Hectate]]|todo=Test out the To-Do template}}
== func_door ==

I think what you did is a good start but we need to come up with a stronger formatting style to use with all entities. I haven't really thought about this yet, but I'm going to try doing the func_button and see if I can format it a little clearer. Also, I think we should have the spawnflags value of each flag as a reference for anyone that might need it.

By the way, I discovered that you can use &lt;nowiki&gt;{{DISPLAYTITLE:func_door}}&lt;/nowiki&gt; to get the correct formatting for entity names. It might be worth creating a template to do it for all entities:
http://en.wikipedia.org/wiki/Help:Template
:A template should be possible, I'll look into it when I get a chance. I agree that the formatting could be better as well. The initial edit was more to get a full set of the data in there so we could try out different formats as well. I wonder if a table would help organize the different points (description, key, value, common FGD name, etc) better. --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 14:46, 25 March 2013 (UTC)</text>
      <sha1>fjlechxyjzwl2z0nuzcdhf4tq2rlyfi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2099</id>
      <parentid>2081</parentid>
      <timestamp>2013-03-25T16:48:59Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="1291">{{todo|user=[[User:Hectate]]|todo=Test out the To-Do template}}
{{todo|todo=How does it look with more than one, or with a missing user parameter?}}
{{todo|user=Hectate|todo=Research how to make multiple todos show up as a single table.}}
== func_door ==

I think what you did is a good start but we need to come up with a stronger formatting style to use with all entities. I haven't really thought about this yet, but I'm going to try doing the func_button and see if I can format it a little clearer. Also, I think we should have the spawnflags value of each flag as a reference for anyone that might need it.

By the way, I discovered that you can use &lt;nowiki&gt;{{DISPLAYTITLE:func_door}}&lt;/nowiki&gt; to get the correct formatting for entity names. It might be worth creating a template to do it for all entities:
http://en.wikipedia.org/wiki/Help:Template
:A template should be possible, I'll look into it when I get a chance. I agree that the formatting could be better as well. The initial edit was more to get a full set of the data in there so we could try out different formats as well. I wonder if a table would help organize the different points (description, key, value, common FGD name, etc) better. --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 14:46, 25 March 2013 (UTC)</text>
      <sha1>dyd968j2s7vrh2ggj6wfw1d91nncmz3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2366</id>
      <parentid>2099</parentid>
      <timestamp>2013-03-27T21:40:19Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>removing templates that I tested with...</comment>
      <text xml:space="preserve" bytes="1052">== func_door ==

I think what you did is a good start but we need to come up with a stronger formatting style to use with all entities. I haven't really thought about this yet, but I'm going to try doing the func_button and see if I can format it a little clearer. Also, I think we should have the spawnflags value of each flag as a reference for anyone that might need it.

By the way, I discovered that you can use &lt;nowiki&gt;{{DISPLAYTITLE:func_door}}&lt;/nowiki&gt; to get the correct formatting for entity names. It might be worth creating a template to do it for all entities:
http://en.wikipedia.org/wiki/Help:Template
:A template should be possible, I'll look into it when I get a chance. I agree that the formatting could be better as well. The initial edit was more to get a full set of the data in there so we could try out different formats as well. I wonder if a table would help organize the different points (description, key, value, common FGD name, etc) better. --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 14:46, 25 March 2013 (UTC)</text>
      <sha1>grxlyjngwk0us6wb82d7c0lv6scnvh1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2441</id>
      <parentid>2366</parentid>
      <timestamp>2013-03-28T20:59:21Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>template test</comment>
      <text xml:space="preserve" bytes="1100">{{deletion|testing template, do not delete :)}}
== func_door ==

I think what you did is a good start but we need to come up with a stronger formatting style to use with all entities. I haven't really thought about this yet, but I'm going to try doing the func_button and see if I can format it a little clearer. Also, I think we should have the spawnflags value of each flag as a reference for anyone that might need it.

By the way, I discovered that you can use &lt;nowiki&gt;{{DISPLAYTITLE:func_door}}&lt;/nowiki&gt; to get the correct formatting for entity names. It might be worth creating a template to do it for all entities:
http://en.wikipedia.org/wiki/Help:Template
:A template should be possible, I'll look into it when I get a chance. I agree that the formatting could be better as well. The initial edit was more to get a full set of the data in there so we could try out different formats as well. I wonder if a table would help organize the different points (description, key, value, common FGD name, etc) better. --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 14:46, 25 March 2013 (UTC)</text>
      <sha1>2ub0dmr7st1lrthk7yp2qyyzbplltba</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2444</id>
      <parentid>2441</parentid>
      <timestamp>2013-03-28T21:03:34Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>removed template I was testing</comment>
      <text xml:space="preserve" bytes="1052">== func_door ==

I think what you did is a good start but we need to come up with a stronger formatting style to use with all entities. I haven't really thought about this yet, but I'm going to try doing the func_button and see if I can format it a little clearer. Also, I think we should have the spawnflags value of each flag as a reference for anyone that might need it.

By the way, I discovered that you can use &lt;nowiki&gt;{{DISPLAYTITLE:func_door}}&lt;/nowiki&gt; to get the correct formatting for entity names. It might be worth creating a template to do it for all entities:
http://en.wikipedia.org/wiki/Help:Template
:A template should be possible, I'll look into it when I get a chance. I agree that the formatting could be better as well. The initial edit was more to get a full set of the data in there so we could try out different formats as well. I wonder if a table would help organize the different points (description, key, value, common FGD name, etc) better. --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 14:46, 25 March 2013 (UTC)</text>
      <sha1>grxlyjngwk0us6wb82d7c0lv6scnvh1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>User talk:Karatorian</title>
    <ns>3</ns>
    <id>1070</id>
    <revision>
      <id>3215</id>
      <timestamp>2014-01-02T14:22:51Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Created page with &quot;this page was getting spammed, protecting it seemed not to work when it was non-existent so I wrote this text. --~~~~&quot;</comment>
      <text xml:space="preserve" bytes="191">this page was getting spammed, protecting it seemed not to work when it was non-existent so I wrote this text. --[[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 14:22, 2 January 2014 (UTC)</text>
      <sha1>gso9ex0nezg53zcamwlhiok3q0pggxd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3216</id>
      <parentid>3215</parentid>
      <timestamp>2014-01-02T14:22:58Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[User talk:Karatorian]]&quot;: Excessive spamming (‎[edit=sysop] (indefinite) ‎[move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="191">this page was getting spammed, protecting it seemed not to work when it was non-existent so I wrote this text. --[[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 14:22, 2 January 2014 (UTC)</text>
      <sha1>gso9ex0nezg53zcamwlhiok3q0pggxd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>User talk:Necros</title>
    <ns>3</ns>
    <id>825</id>
    <revision>
      <id>2413</id>
      <timestamp>2013-03-28T15:06:34Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Created page with &quot;Hoi, I noticed that some of the QuakeC stuff you added was already existing in the Wiki but in &quot;First character in uppercase&quot; mode. Eg [[Bprint]] or [[Find]]. Sorry about that...&quot;</comment>
      <text xml:space="preserve" bytes="392">Hoi, I noticed that some of the QuakeC stuff you added was already existing in the Wiki but in &quot;First character in uppercase&quot; mode. Eg [[Bprint]] or [[Find]]. Sorry about that confusion. It would be ace if you could merge them. I made you &quot;administrator&quot; so now you can move and delete (I think) pages too. Cheers! [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 15:06, 28 March 2013 (UTC)</text>
      <sha1>848q12t5yld8g6hic5uaaido0afj3jp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2415</id>
      <parentid>2413</parentid>
      <timestamp>2013-03-28T15:09:39Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <text xml:space="preserve" bytes="572">Hoi, I noticed that some of the QuakeC stuff you added was already existing in the Wiki but in &quot;First character in uppercase&quot; mode. Eg [[Bprint]] or [[Find]]. Sorry about that confusion. It would be ace if you could merge them. I made you &quot;administrator&quot; so now you can move and delete (I think) pages too. Cheers! [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 15:06, 28 March 2013 (UTC)
: Oh and of course the way you did it is what I consider best. The actual case of them, lowercase! :) [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 15:09, 28 March 2013 (UTC)</text>
      <sha1>d5pzqyj5tgsmmx194r1xae6oc3hlalm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2501</id>
      <parentid>2415</parentid>
      <timestamp>2013-03-29T14:18:36Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="744">Hoi, I noticed that some of the QuakeC stuff you added was already existing in the Wiki but in &quot;First character in uppercase&quot; mode. Eg [[Bprint]] or [[Find]]. Sorry about that confusion. It would be ace if you could merge them. I made you &quot;administrator&quot; so now you can move and delete (I think) pages too. Cheers! [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 15:06, 28 March 2013 (UTC)
: Oh and of course the way you did it is what I consider best. The actual case of them, lowercase! :) [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 15:09, 28 March 2013 (UTC)
: Spirit, on func you said you'd try to convert the old ones, but don't bother.  It's easier to redo them properly, otherwise I'll have to check them first before editing.</text>
      <sha1>lqm7gdxq4lvj1umb1vey8lf2jcrk887</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2664</id>
      <parentid>2501</parentid>
      <timestamp>2013-03-29T14:33:54Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <text xml:space="preserve" bytes="2267">Hoi, I noticed that some of the QuakeC stuff you added was already existing in the Wiki but in &quot;First character in uppercase&quot; mode. Eg [[Bprint]] or [[Find]]. Sorry about that confusion. It would be ace if you could merge them. I made you &quot;administrator&quot; so now you can move and delete (I think) pages too. Cheers! [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 15:06, 28 March 2013 (UTC)
: Oh and of course the way you did it is what I consider best. The actual case of them, lowercase! :) [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 15:09, 28 March 2013 (UTC)
:: Spirit, on func you said you'd try to convert the old ones, but don't bother.  It's easier to redo them properly, otherwise I'll have to check them first before editing.
::: Haha, I did not catch that. 3 minutes later the script ran. :) I'll just dump the list of conflicts here, than might fix some of &quot;his&quot; too I guess. [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 14:33, 29 March 2013 (UTC)

These are page moves the script attempted but failed with because the target page already exists, please try to merge them then remove them from the list. [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 14:33, 29 March 2013 (UTC)
* [[Bprint]] --&gt; [[bprint]]
* [[Break]] --&gt; [[break]]
* [[Checkclient]] --&gt; [[checkclient]]
* [[Droptofloor]] --&gt; [[droptofloor]]
* [[E1m1]] --&gt; [[e1m1]]
* [[Find]] --&gt; [[find]]
* [[Ftos]] --&gt; [[ftos]]
* [[Info null]] --&gt; [[info null]]
* [[Info player coop]] --&gt; [[info player coop]]
* [[Info player deathmatch]] --&gt; [[info player deathmatch]]
* [[Info player start2]] --&gt; [[info player start2]]
* [[Info player start]] --&gt; [[info player start]]
* [[Makevectors]] --&gt; [[makevectors]]
* [[Normalize]] --&gt; [[normalize]]
* [[Objerror]] --&gt; [[objerror]]
* [[Precache model]] --&gt; [[precache model]]
* [[Precache sound]] --&gt; [[precache sound]]
* [[Random]] --&gt; [[random]]
* [[Remove]] --&gt; [[remove]]
* [[Setmodel]] --&gt; [[setmodel]]
* [[Setorigin]] --&gt; [[setorigin]]
* [[Setsize]] --&gt; [[setsize]]
* [[Sound]] --&gt; [[sound]]
* [[Sprint]] --&gt; [[sprint]]
* [[Stuffcmd]] --&gt; [[stuffcmd]]
* [[Traceline]] --&gt; [[traceline]]
* [[Vectoyaw]] --&gt; [[vectoyaw]]
* [[Vlen]] --&gt; [[vlen]]
* [[Vtos]] --&gt; [[vtos]]
* [[Walkmove]] --&gt; [[walkmove]]
* [[Worldspawn]] --&gt; [[worldspawn]]</text>
      <sha1>rn86ldy3p89rkiqgmtrzgjd354t2sh2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2667</id>
      <parentid>2664</parentid>
      <timestamp>2013-03-29T14:36:26Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <text xml:space="preserve" bytes="2327">Hoi, I noticed that some of the QuakeC stuff you added was already existing in the Wiki but in &quot;First character in uppercase&quot; mode. Eg [[Bprint]] or [[Find]]. Sorry about that confusion. It would be ace if you could merge them. I made you &quot;administrator&quot; so now you can move and delete (I think) pages too. Cheers! [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 15:06, 28 March 2013 (UTC)
: Oh and of course the way you did it is what I consider best. The actual case of them, lowercase! :) [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 15:09, 28 March 2013 (UTC)
:: Spirit, on func you said you'd try to convert the old ones, but don't bother.  It's easier to redo them properly, otherwise I'll have to check them first before editing.
::: Haha, I did not catch that. 3 minutes later the script ran. :) I'll just dump the list of conflicts here, than might fix some of &quot;his&quot; too I guess. [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 14:33, 29 March 2013 (UTC)

These are page moves the script attempted but failed with because the target page already exists, please try to merge them then remove them from the list. Or of course just delete them if you think yours is better! [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 14:33, 29 March 2013 (UTC)
* [[Bprint]] --&gt; [[bprint]]
* [[Break]] --&gt; [[break]]
* [[Checkclient]] --&gt; [[checkclient]]
* [[Droptofloor]] --&gt; [[droptofloor]]
* [[E1m1]] --&gt; [[e1m1]]
* [[Find]] --&gt; [[find]]
* [[Ftos]] --&gt; [[ftos]]
* [[Info null]] --&gt; [[info null]]
* [[Info player coop]] --&gt; [[info player coop]]
* [[Info player deathmatch]] --&gt; [[info player deathmatch]]
* [[Info player start2]] --&gt; [[info player start2]]
* [[Info player start]] --&gt; [[info player start]]
* [[Makevectors]] --&gt; [[makevectors]]
* [[Normalize]] --&gt; [[normalize]]
* [[Objerror]] --&gt; [[objerror]]
* [[Precache model]] --&gt; [[precache model]]
* [[Precache sound]] --&gt; [[precache sound]]
* [[Random]] --&gt; [[random]]
* [[Remove]] --&gt; [[remove]]
* [[Setmodel]] --&gt; [[setmodel]]
* [[Setorigin]] --&gt; [[setorigin]]
* [[Setsize]] --&gt; [[setsize]]
* [[Sound]] --&gt; [[sound]]
* [[Sprint]] --&gt; [[sprint]]
* [[Stuffcmd]] --&gt; [[stuffcmd]]
* [[Traceline]] --&gt; [[traceline]]
* [[Vectoyaw]] --&gt; [[vectoyaw]]
* [[Vlen]] --&gt; [[vlen]]
* [[Vtos]] --&gt; [[vtos]]
* [[Walkmove]] --&gt; [[walkmove]]
* [[Worldspawn]] --&gt; [[worldspawn]]</text>
      <sha1>j9hh0a3t149ftwfcwavqryb23v53eqt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>User talk:Negke</title>
    <ns>3</ns>
    <id>985</id>
    <revision>
      <id>2744</id>
      <timestamp>2013-03-31T21:35:14Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Created page with &quot;Hoi, would be great if you could use more descriptive filenames in the future. Eg &quot;Large box of cells&quot; instead of &quot;cells1.gif&quot; or something like that. ~~~~&quot;</comment>
      <text xml:space="preserve" bytes="228">Hoi, would be great if you could use more descriptive filenames in the future. Eg &quot;Large box of cells&quot; instead of &quot;cells1.gif&quot; or something like that. [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 21:35, 31 March 2013 (UTC)</text>
      <sha1>ers2opemncnpyyyoiybjq3u8j4wfzjv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>User talk:Scampie</title>
    <ns>3</ns>
    <id>743</id>
    <revision>
      <id>2126</id>
      <timestamp>2013-03-25T23:11:11Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>png</comment>
      <text xml:space="preserve" bytes="201">Use PNG for tool screenshots, you goof! You can minimise the files with pngcrush or optipng or just leave them as they are. [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 23:11, 25 March 2013 (UTC)</text>
      <sha1>oeu28kfjogelovwjbgn0nus1xvxalx1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2133</id>
      <parentid>2126</parentid>
      <timestamp>2013-03-25T23:45:05Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="224">Use PNG for tool screenshots, you goof! You can minimise the files with pngcrush or optipng or just leave them as they are. [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 23:11, 25 March 2013 (UTC)

siiiiiiiigh. fine 9_9</text>
      <sha1>7vjgxfy23n4f7yhmozc3mo7sylpyzx4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2134</id>
      <parentid>2133</parentid>
      <timestamp>2013-03-25T23:45:16Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="307">Use PNG for tool screenshots, you goof! You can minimise the files with pngcrush or optipng or just leave them as they are. [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 23:11, 25 March 2013 (UTC)

siiiiiiiigh. fine 9_9 --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 23:45, 25 March 2013 (UTC)</text>
      <sha1>s6i1vbj2p0ah291xac3k7z54wgnz15i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2207</id>
      <parentid>2134</parentid>
      <timestamp>2013-03-26T10:03:19Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <text xml:space="preserve" bytes="392">Use PNG for tool screenshots, you goof! You can minimise the files with pngcrush or optipng or just leave them as they are. [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 23:11, 25 March 2013 (UTC)

:siiiiiiiigh. fine 9_9 --[[User:Scampie|Scampie]] ([[User talk:Scampie|talk]]) 23:45, 25 March 2013 (UTC)
:: &lt;3 [[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 10:03, 26 March 2013 (UTC)</text>
      <sha1>hjvwc4eqjoc8sara2u2j1gq1hn8rmrh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>User talk:Scar3crow</title>
    <ns>3</ns>
    <id>1038</id>
    <revision>
      <id>2969</id>
      <timestamp>2013-05-25T07:03:26Z</timestamp>
      <contributor>
        <ip>176.31.181.186</ip>
      </contributor>
      <comment>Is C collect palace indelicate does behavior provoke controversy by acid  Ether  a surname 0</comment>
      <text xml:space="preserve" bytes="2453">
Is C collect palace indelicate does behavior provoke controversy by acid: ? Ether  a surname? 
Is C collect palace indelicate does behavior provoke controversy by acid: ? Ether  a surname? 
 Www.7m.cn On December 7, 2012 origin: Netease sports
 The it may be said of handkerchief Er much palace yesterday is star-spangled, SpainNational sports large award is issued personally by princess, bo Sike won optimal coach award, enlighten - Sidifanuo won sports development and promotion award, limelight is the strongest nevertheless should belong toRoyal MadridStarKelisidiyanuo - Luonaerduo, because he acquired year,be not just athlete of player of optimal Latin America award, more because an anxious became bad &quot; Gao Fushuai &quot; chewing gum. 
 Chewing chewing gum is one of C Luo Zhong's much interests, when leisurePortugueseThe person still has demonstrated the consummate skill of bump chewing gum on training field, also be chewing gum nevertheless let his Paerduo yesterday &lt;a href=&quot;UR&quot;L&gt;Cheap Nike Shox&lt;/a&gt; palace is very awkward, from what enter palace that removes C collect to be in momently keep chewing chewing gum, no matter be,talk with the person laugh, still wait award prize, till rank when, just a staff member reminds him, chewing gum must be spat before receiving award, will be pair of royalty members otherwise is big irreverent. 
 Right now Kelisidiyanuo just has some of Fang Xing that be like a dream, but the place that chewing gum can not spit however beside him, situation is urgent under, the C that have no alternative collect had improved to carry pair of camera and crowd on the back personally only, extend left hand to cover Pull in your ears! , in the trouser pocket that spit chewing gum quickly and puts it into oneself, he did not think of all these is patted by camera place however apparently. 
 After the C Luo Sui that resolved chewing gum trouble had received year large award gladly from inside princess hand, accept as a souvenir of happy group photo of Nuo of law of He Disi the base of a fruit, but chewing gum magic of the Portuguese was broadcasted 6 times by TV now however complete Spain, spread everywhere to a whole world through the network, &quot; Ma Ka signs up for &quot; netizens speak say: &quot;The little tricks of C collect turns children behavior into the guideline &quot; , &quot;Good-paying person should spend bit of Qian Quxue to learn formal lesson &quot; , &quot;Spit with its will still be inferior to pharynx really &quot; .</text>
      <sha1>j6hmhwm10teuivlipxmk1w2evgafiy6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2970</id>
      <parentid>2969</parentid>
      <timestamp>2013-05-25T10:24:24Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>spam</comment>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>User talk:Spirit</title>
    <ns>3</ns>
    <id>1026</id>
    <revision>
      <id>2917</id>
      <timestamp>2013-04-12T22:03:35Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>Created page with &quot;==QuakeWiki scope== FYI: [[Talk:func_door_secret]] : some input would be useful. --~~~~&quot;</comment>
      <text xml:space="preserve" bytes="163">==QuakeWiki scope==
FYI: [[Talk:func_door_secret]] : some input would be useful. --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 22:03, 12 April 2013 (UTC)</text>
      <sha1>4n23bauuxvgkj4gcms7dfpx793xteh5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>User talk:XaGe</title>
    <ns>3</ns>
    <id>162</id>
    <revision>
      <id>258</id>
      <timestamp>2007-11-03T22:26:55Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: My talk... heh.. =p</comment>
      <text xml:space="preserve" bytes="19">My talk... heh.. =p</text>
      <sha1>pozynpfnt4kqfb4tz75lm1ibukkxy99</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>User:Deqer</title>
    <ns>2</ns>
    <id>988</id>
    <revision>
      <id>2754</id>
      <timestamp>2013-04-05T16:39:23Z</timestamp>
      <contributor>
        <username>Deqer</username>
        <id>42</id>
      </contributor>
      <comment>Created page with &quot;This is the user page, which probably would contains information about the user.&quot;</comment>
      <text xml:space="preserve" bytes="80">This is the user page, which probably would contains information about the user.</text>
      <sha1>mcba1qd6k69ltoz10or3wjveyrfn6ef</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>User:Hectate</title>
    <ns>2</ns>
    <id>804</id>
    <revision>
      <id>2365</id>
      <timestamp>2013-03-27T21:39:31Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>Whoami?</comment>
      <text xml:space="preserve" bytes="941">Greetings! You've reached the user page of Hectate. I'm a mapper, modder, and general game development enthusiast (at least at a hobby level, hah). I generally use [[DarkPlaces]], if that's of interest to you.

----

Feel free to leave me a message on my [[User talk:Hectate|User Talk]] page if you want to immediately draw my attention to something.

You can also find me on the following forums, albeit as a silent participant most of the time.
* [http://forums.inside3d.com/memberlist.php?mode=viewprofile&amp;u=3737&amp;sid=29a2c09c3871c41011191c4770988432 Inside3D]
* [http://quakeone.com/members/hectate/ QuakeOne]

Finally, if I'm online and active it's likely that you'll find me in the #qc IRC channel on the irc.anynet.org server(s).


----

Separate from classic games like Quake, I also enjoy making my own 2D games using [http://www.stencyl.com Stencyl] and you can [http://www.stencyl.com/users/index/380 find me on those forums also].</text>
      <sha1>8514i4u3fcbr7p11zj8z7xq4nst0w8x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>User:Idontknowthisguy</title>
    <ns>2</ns>
    <id>491</id>
    <revision>
      <id>1015</id>
      <timestamp>2009-06-05T06:00:39Z</timestamp>
      <contributor>
        <username>Idontknowthisguy</username>
        <id>17</id>
      </contributor>
      <comment>This is a launch pad for the pages I'm creating while they are under my account. Added the first link to get started.</comment>
      <text xml:space="preserve" bytes="34">[[idontknowthisguy:Hacking Quake]]</text>
      <sha1>lcwvu1zzqv0zv9lfndx49uoxjyl5ov0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>User:Karatorian</title>
    <ns>2</ns>
    <id>1068</id>
    <revision>
      <id>3211</id>
      <timestamp>2014-01-02T09:48:57Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Created page with &quot;this page was getting spammed, protecting it seemed not to work when it was non-existent so I wrote this text. --~~~~&quot;</comment>
      <text xml:space="preserve" bytes="191">this page was getting spammed, protecting it seemed not to work when it was non-existent so I wrote this text. --[[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 09:48, 2 January 2014 (UTC)</text>
      <sha1>8qhmvc110odnfn8vusg81c44spvitq3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3212</id>
      <parentid>3211</parentid>
      <timestamp>2014-01-02T09:49:31Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[User:Karatorian]]&quot;: Excessive spamming (‎[edit=sysop] (indefinite) ‎[move=sysop] (indefinite))</comment>
      <text xml:space="preserve" bytes="191">this page was getting spammed, protecting it seemed not to work when it was non-existent so I wrote this text. --[[User:Spirit|Spirit]] ([[User talk:Spirit|talk]]) 09:48, 2 January 2014 (UTC)</text>
      <sha1>8qhmvc110odnfn8vusg81c44spvitq3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>User:Leilei</title>
    <ns>2</ns>
    <id>447</id>
    <revision>
      <id>784</id>
      <timestamp>2008-05-08T21:57:52Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <comment>New page: Hi I've been playing Quake for 12 years  == Current Quake-derived Projects == -[[Versus 1997]] (Prequel of [[Versus]])  -[[Versus 1998]] (Second prequel of [[Versus]])  -[[Neat Guns]]  -[[...</comment>
      <text xml:space="preserve" bytes="355">Hi I've been playing Quake for 12 years

== Current Quake-derived Projects ==
-[[Versus 1997]] (Prequel of [[Versus]])

-[[Versus 1998]] (Second prequel of [[Versus]])

-[[Neat Guns]]

-[[Fired Guns]]

-[[OQPlus]]

-[[UntitledH2Project]]

-[[XDFort]]


== Current non-Quake Projects ==
-[http://openarena.ws OpenArena]

-[http://openarena.ws/fsfps Dave3D]</text>
      <sha1>is0dl3cpzuu9zbil421aqpmeqxcuxcx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>User:Metlslime</title>
    <ns>2</ns>
    <id>1039</id>
    <revision>
      <id>2978</id>
      <timestamp>2013-05-30T14:52:36Z</timestamp>
      <contributor>
        <ip>142.0.136.29</ip>
      </contributor>
      <comment>jyrxg</comment>
      <text xml:space="preserve" bytes="2847">There were yet another untamed upturn onward that will broken throughout.
With all the eucalyptus woods as being a milestone, they tried out to function to the idea by simply plummeting sideways resistant to the wave, moving challenging while captivated from that along with operating the actual while the idea shifted to the target. They ended up being within just just one or two foot in the woods every time a immediate, operating run maintained your ex considerably prior the idea. They was battling seriously for the time, and then lost the battle along with enable herself always be swept coupled. They ended up being your spearhead of an hurtling iron wedge while the idea collided which has a muscle size opting the alternative route. Your result made your ex all-around. Because a pair of allows terrain versus the other, they ended up being made all the time, as being a feed involving millstones. This specific didn鈥檛 end until eventually they grew to be system of the opposite drive. Your force carried on to raise until eventually they imagined they ought to fail. They ended up being little by little staying forced in the air flow. Though comfort pertaining to the breaking ribs may be received by simply carrying on with to elevate, they fought against to hold the foot in a tree. Certainly not having the capacity to effect ended up being a more serious discomfort when compared with staying maintained in reverse.
There were yet another run, quicker on this occasion, along with they observed herself in a very useless location the place that the force ended up being a lesser amount of along with identical. They grew to be attentive to a horrible ache throughout the quit knee, only earlier mentioned your foot, along with tried out to function the idea right more at ease situation. They couldn鈥檛 convert the system, nevertheless went about getting the go all-around. An incredibly thin son, donning a new Developed Nation hat, got the rear wedged versus the neck. Your ache carried on growing along with the total knee up to your groin throbbed. They last but not least acquired the quit supply no cost along with needed a corner in the boy鈥檚 guitar neck throughout the kiddy hands. They turned while challenging while they may. Your son did start to bounce around throughout the outfits. They were able to straighten the shoulder, by simply moving at the rear of your boy鈥檚 go, so convert halfway all-around along with no cost the knee. Your ache didn鈥檛 expand a lesser amount of.
one particular route after which it inside complete opposite. They retained moving along with smacking out and about with the men and women all-around your ex, looking to deal with inside route they ended up being planning. Staying maintained in reverse scared your ex.

 
 
 
 
 
 
 
 
 
 
________________________________</text>
      <sha1>d5azu8c5xjt6rhxvz9ad0lryl9ww04v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2980</id>
      <parentid>2978</parentid>
      <timestamp>2013-05-30T17:13:41Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>removed spam</comment>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>User:QuakeWiki</title>
    <ns>2</ns>
    <id>129</id>
    <revision>
      <id>205</id>
      <timestamp>2007-10-31T02:34:40Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: The admin account here. Controlled by me, [[User:Sajt|Sajt]], since I set this thing up. So far, I've been using this account to copy over stuff from the [http://wiki.quakesrc.org old wiki...</comment>
      <text xml:space="preserve" bytes="262">The admin account here. Controlled by me, [[User:Sajt|Sajt]], since I set this thing up. So far, I've been using this account to copy over stuff from the [http://wiki.quakesrc.org old wiki]. Original contributions I will do with my [[User:Sajt|regular account]].</text>
      <sha1>1rttln8ry3nknxza2k13shwikikh5oj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2069</id>
      <parentid>205</parentid>
      <timestamp>2013-03-25T13:22:42Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <text xml:space="preserve" bytes="167">The admin account from quakery.quakedev.com/qwiki . Controlled by [[User:Sajt|Sajt]]. It has been used to copy over stuff from the [http://wiki.quakesrc.org old wiki].</text>
      <sha1>2ieozgbllpkm6e3jhbp8s5mmz8np5g4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>User:Sajt</title>
    <ns>2</ns>
    <id>131</id>
    <revision>
      <id>207</id>
      <timestamp>2007-10-31T02:38:20Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <comment>New page: [[Image:Maybeiamcrazy.jpg]]</comment>
      <text xml:space="preserve" bytes="27">[[Image:Maybeiamcrazy.jpg]]</text>
      <sha1>i7s53mjkp019uy5ixa152e44y9udjf0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1220</id>
      <parentid>207</parentid>
      <timestamp>2009-09-25T05:21:27Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="140">I was a &quot;full-time&quot; Quake modder from 2002 up to some indeterminate point probably around 2005, but never released anything of significance.</text>
      <sha1>ktmlo0zjbe9eyy82qmitk2a5k9ckf0v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>User:Scampie</title>
    <ns>2</ns>
    <id>769</id>
    <revision>
      <id>2206</id>
      <timestamp>2013-03-26T05:04:09Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <comment>Created page with &quot;      ___           /\  \         /::\  \       /:/\ \  \     _\:\~\ \  \   /\ \:\ \ \__\  \:\ \:\ \/__/   \:\ \:\__\      \:\/:/  /       \::/  /         \/__/           ___ ...&quot;</comment>
      <text xml:space="preserve" bytes="1076">      ___     
     /\  \    
    /::\  \   
   /:/\ \  \  
  _\:\~\ \  \ 
 /\ \:\ \ \__\
 \:\ \:\ \/__/
  \:\ \:\__\  
   \:\/:/  /  
    \::/  /   
     \/__/    
      ___     
     /\  \    
    /::\  \   
   /:/\:\  \  
  /:/  \:\  \ 
 /:/__/ \:\__\
 \:\  \  \/__/
  \:\  \      
   \:\  \     
    \:\__\    
     \/__/    
      ___     
     /\  \    
    /::\  \   
   /:/\:\  \  
  /::\~\:\  \ 
 /:/\:\ \:\__\
 \/__\:\/:/  /
      \::/  / 
      /:/  /  
     /:/  /   
     \/__/    
      ___     
     /\__\    
    /::|  |   
   /:|:|  |   
  /:/|:|__|__ 
 /:/ |::::\__\
 \/__/~~/:/  /
       /:/  / 
      /:/  /  
     /:/  /   
     \/__/    
      ___     
     /\  \    
    /::\  \   
   /:/\:\  \  
  /::\~\:\  \ 
 /:/\:\ \:\__\
 \/__\:\/:/  /
      \::/  / 
       \/__/  
      ___   
     /\  \  
     \:\  \ 
     /::\__\
  __/:/\/__/
 /\/:/  /   
 \::/__/    
  \:\__\    
   \/__/        
      ___     
     /\  \    
    /::\  \   
   /:/\:\  \  
  /::\~\:\  \ 
 /:/\:\ \:\__\
 \:\~\:\ \/__/
  \:\ \:\__\  
   \:\ \/__/  
    \:\__\    
     \/__/</text>
      <sha1>0lcv7a82tdh56lnwbn2j2xoa6dz1dwo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2316</id>
      <parentid>2206</parentid>
      <timestamp>2013-03-26T20:07:49Z</timestamp>
      <contributor>
        <username>Scampie</username>
        <id>29</id>
      </contributor>
      <text xml:space="preserve" bytes="1097">      ___       I am a [[Quakeguy]]
     /\  \    
    /::\  \   
   /:/\ \  \  
  _\:\~\ \  \ 
 /\ \:\ \ \__\
 \:\ \:\ \/__/
  \:\ \:\__\  
   \:\/:/  /  
    \::/  /   
     \/__/    
      ___     
     /\  \    
    /::\  \   
   /:/\:\  \  
  /:/  \:\  \ 
 /:/__/ \:\__\
 \:\  \  \/__/
  \:\  \      
   \:\  \     
    \:\__\    
     \/__/    
      ___     
     /\  \    
    /::\  \   
   /:/\:\  \  
  /::\~\:\  \ 
 /:/\:\ \:\__\
 \/__\:\/:/  /
      \::/  / 
      /:/  /  
     /:/  /   
     \/__/    
      ___     
     /\__\    
    /::|  |   
   /:|:|  |   
  /:/|:|__|__ 
 /:/ |::::\__\
 \/__/~~/:/  /
       /:/  / 
      /:/  /  
     /:/  /   
     \/__/    
      ___     
     /\  \    
    /::\  \   
   /:/\:\  \  
  /::\~\:\  \ 
 /:/\:\ \:\__\
 \/__\:\/:/  /
      \::/  / 
       \/__/  
      ___   
     /\  \  
     \:\  \ 
     /::\__\
  __/:/\/__/
 /\/:/  /   
 \::/__/    
  \:\__\    
   \/__/        
      ___     
     /\  \    
    /::\  \   
   /:/\:\  \  
  /::\~\:\  \ 
 /:/\:\ \:\__\
 \:\~\:\ \/__/
  \:\ \:\__\  
   \:\ \/__/  
    \:\__\    
     \/__/</text>
      <sha1>6x52040dcs8sdr8rf4v7ff3zrwd4xg3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>User:Scar3crow</title>
    <ns>2</ns>
    <id>1037</id>
    <revision>
      <id>2964</id>
      <timestamp>2013-05-23T16:51:05Z</timestamp>
      <contributor>
        <ip>176.31.181.186</ip>
      </contributor>
      <comment>LLOYD brand history</comment>
      <text xml:space="preserve" bytes="8480">
LLOYD brand history
1888  1950 ' S
 1888, h.F. Bremen of Mr Meyer Yu Deguo founds leather shoes makes workshop, begin to produce high grade men's clothing leather shoes ceaselessly. Rise right now oneself, the leather shoes that workshop produces pledges element gets praise fully all the time. 1920 during, the high grade leather shoes that produces formally for this workshop names for &quot; LLOYD &quot; . In the meantime, first pairs leather shoes already exported LLOYD Holand. 
 Increase the requirement that impose with each passing day to cooperate market of German etc Europe, LLOYD will produce headquarters 1942 migratory to German Sulingen. Thenceforth rises, LLOYD makes one of place of production of main leather shoes that Sulingen expands German north by original small villages and towns. 2 big afterwar, the exit of LLOYD sells a network to already alled over etc Europe country to wait like Austria and Denmark. 
 1952
 1952, LLOYD is rolled out its lie fallow first pairs shoe. Accordingly, among them recreational series names with this a particular year, &quot;Lloyd 52 &quot; mix of recreational series design is classical tradition and modern idea, establish the market position of LLOYD recreational shoe. 
 1968
 1968, LLOYD is his to indicate at the particular red tape on shoe root register, representing the brand of world-class and the assurance that reach mass exceeding eminent, also be a when LLOYD brand develops important course of development. 
 1970 ' S
 70 time can be the time of the bumper harvest to LLOYD, the money of men's clothing shoe of diversity comes out in succession, for brand future development builds good base. The design of series of leather shoes of LLOYD men's clothing and qualitative element equipment suffer fix eyes on reach high opinion, also develop overseas market of the Australia beyond Europe and Asia in succession at 70 time. 
 
 2000
 By 2000, LLOYD is established at Sulingen be known as &quot; prospective workshop &quot; leather shoes manufactory, become one of Europe's modernest workshop. Advanced product line promotes the crop of LLOYD greatly, make a brand farther march toward internationalization. 
 2001
 The achievement that men's clothing series shinings is encouraging. Through research of years whole, what LLOYD rolled out 2001 is brand-new ovation of female outfit series, numerous and high grade deserve to if portable bag, travel bag, purse, leather belt and sock make leather series more rich,be acted the role of. 
 2003-2004
 More the LLOYD series of diversity suffers fullyLove and esteem, the leather shoes group that the stylist Kai Schroder of LLOYD has large award 2003 (German Shoe And Leather Goods Prize) in German leather shoes and skin more is fastened in, with &quot; practical, good quality reachs crackajack products plan, height masterly handicraft &quot; obtain special honour. Win a prize &quot; LLOYD 1888 &quot; honour still fasten rank to was rolled out December 2004, LLOYD offers brand-new idea at the same time special inn, guide a brand to stride another epochal. 
 2005
 LLOYD obtains German leather shoes and skin to provide large award once more (German Shoe And Leather Goods Prize) , win a prize &quot; ALFA &quot; series of men's clothing leather shoes was rolled out December 2006, ovation. 
 2007
 The concept that LLOYD is located in Hungarian capital Budapest is special store opens, it is the notional inn that right-hand seat home is not LLOYD banner to be managed by agency, indicative brand development and management maturity reach ceaseless progress. 
 Of the same age, LLOYD obtains German leather shoes and skin to provide large award 2007 (German Shoe And Leather Goods Prize) again. 
 2008
 The sale country of LLOYD is added reach more than 40, it is the exalted brand of the market of top class leather shoes that leading many nations. 
 120 years when was LLOYD 2008, also be LLOYD registers red tape solely 40 years of the mark to write down read aloud, the Heng Jiujing that means LLOYD is in charge of and long lasting, reach in the market Wang Zhe position. 
 2009
 LLOYD and when hand-in-hand, roll out series of brand-new LLOYD golf shoe (LLOYD Golf Shoes) , natural series (Nature) and leather Lv series, your the product of LLOYD more hasten diversity and the different need that can get used to the market to go up more. 
 2011
 LLOYD is uptodate 3500 are amounted to in global point of sales, already owned store of more than 20 doors in big China area. 
 
 Brand concept
 German brand LLOYD aims to offer high grade skin to provide set all the time, its masterly handicraft and reach follow the fashion the design of comfortable system, get the client's praise highly. LLOYD besides the quality that stresses a product, customer service also is the most important one link in its brand concept. The manufacturing concept of LLOYD builds be based on 3 big important principles: 
 * product originality
 * group cooperates
 * considers the individual sense of responsibility of a Gao Shuiping
 
 The brand is pithy
 LLOYD the products plan with traditional and admirable handicraft, innovation, knead the science and technology that combines modernization and perfect pull current Cheng, create each pairs of leather shoes that like artwork. Originality of quality, product and proprietary design become the pithy place of the brand. 
 Good quality
 LLOYD is representing the perfect union of traditional craft and German high-tech, the working procedure that all reachs 120 above in &lt;a href=&quot;UR&quot;L&gt;louis vuitton neverfull gm&lt;/a&gt; order to exceed 150 component comprises every pairs of leather shoes, and among them many working procedure more outfit of hand of classics refined technician embeds ability to amount to to the requirement. 
 Product originality
 The leather shoes output with daily LLOYD is made an appointment with 6, 000 pairs, annual yield shoe quantity is as high as 1.6 million pairs. LLOYD applies advanced computer to design a program, assistance designs the range of products of newest money, with reach product production deferent wait for working procedure. LLOYD has the design that invites international to know celebrity be an official and stylist to introduce an innovation for the series of every season more, your whole brand maintains new move and fashionable one's style of work as well as one's moral quality. 
 Have a design only
 On LLOYD leather shoes only red tape is indicating the German brand of world-class. LLOYD insists to embed each pairs of leather shoes in the Sulingen outfit that finish all the time, &quot;Germany is made &quot; already became first-rate quality to assure a mark. The design of new fund, masterly handicraft, let LLOYD become world-class today the delegate of high grade leather shoes! 
 Proponent of astral class famous person
 LLOYD has proponents of many famous person of dutiful star class, include to ever seized the rice of cycle racing hand that bends one class equation champion of world more in the center Mikhail Gorbachev of president of the Russia before Shuhuaxinlijia reachs Anuo of vivid red star of plum of tall easy Mecca, carry on one's shoulder. 
 International market network
 The network of perfect international market that LLOYD builds since 1920 already spanned up to now half century, let every client all can be enjoyed what bring by LLOYD is comfortable reach superior move. &lt;a href=&quot;UR&quot;L&gt;louis vuitton monogram&lt;/a&gt; The sale network of LLOYD spreads all over the whole world to exceed 40 countries, include each country of Australia, Austria, Belgian, Denmark, Finnish, France, Germany, Ireland, Japan, Luxembourg, Holand, New Zealand, Norwegian, Sweden, Switzerland, hamster Russia, Wukelan, Poland, Hungarian and Yalabai. 
 Diversity range of products
 LLOYD offers the range of products of diversity, the classical series that is like men's clothing leather shoes, fashionable series, campaign series and recreational series. Other series includes hand to make reach the &quot;Extra Wide&quot; that adds fashionable innovation element and &quot;Easy Going&quot; series. The leather shoes design of female outfit series is full of beautiful things in eyes more; And series of all male, female outfit all also include to deserve to act the role of with leather product. 2009, brand more rolled out series of brand-new LLOYD golf shoe (LLOYD Golf Shoes) , natural series (Nature) and leather Lv series, range of products is more mature hasten diversity. Article label: FashionableFashionable informationShoeRecreational shoeStar</text>
      <sha1>gc1fp5w4shwnl9uix85wdc1tg1kw08z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2965</id>
      <parentid>2964</parentid>
      <timestamp>2013-05-23T19:27:20Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>removed spam</comment>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2966</id>
      <parentid>2965</parentid>
      <timestamp>2013-05-25T05:30:41Z</timestamp>
      <contributor>
        <ip>176.31.181.186</ip>
      </contributor>
      <comment>Liu Xiang sees laughingstock of dispute of weak competition ground choose idol standard longs for the other side to visit the home filial</comment>
      <text xml:space="preserve" bytes="5509">
Liu Xiang sees laughingstock of dispute of weak competition ground choose idol standard longs for the other side to visit the home filial
Trainee Xu scene reports Tang Ge of reporter of  evening paper The motion of one banquet white is recreational outfit, the China that sits before the reporter &quot; flying person &quot; look more resembling is adjacent home big boy. Yesterday, liu Xiang signs up for trade group to be located in the new building be a guest of Shen village on invitation, have brief communication with the young reporter of same people of a certain kind, editors. The emancipatory daily that will just remove signs up for trade group new building, the first word of Liu Xiang also covers indeed close to: &quot;The school that I leave here and Education Foundation are very close! &quot;The school that I leave here and Education Foundation are very close!! See dispute of weak competition ground Since big Qiu Shijin after contest, liu Xiang appears before media rarely, this coach Sun Haiping with him comes along &quot; string together the door &quot; , about Luo Baisi foul that be placed to appear on the stage again face. Although match result is already final, luo Baisi's gold also is stripped, dan Liuxiang the state of mind at that time still is the focus that everybody pays close attention to. When the query that faces a reporter, ground of Liu Xiang calm says: &quot;When the match ends, feel (Luo Baisi shake handshandle) some are indescribable, never had encountered in the match before. And I believe arbitral committee to be able to make the most judicial ruling; Nevertheless match eventually is the match, the result had been decided, but Luo Baisi is done not have after match end celebrate overly, he also was experienced more or less. Although adversary is inside our field, but the everybody outside field also each other are familiar, be a friend! Be a friend!! Liu Xiang still is restoring now in, elder brother Yao Ming has announced to retire, in recent years the hottest male athlete is not Lin Dan and Sun Yang to not be belonged to, they also become Chinese sport &quot; one elder brother &quot; strong competitor, they in altar of the polity in 2011 the in choosing cent of Lawrence award wins optimal male athlete and award of optimal new personality, liu Xiang also obtains optimal person to enrage award because of its tremendous person vital energy. In refer these two &quot; when Gong Xiaosheng &quot; when, liu Xiang has the &lt;a href=&quot;UR&quot;L&gt;Cheap Jordans&lt;/a&gt; feeling of awake photograph cherish, &quot;1983 is like Lin Dan and me (be born) , he is in was washed out when Athenian Olympic Games 2004 very regrettablly, but he seized gold 2008. I calculate old athlete with him, under photograph comparing, 1991 (be born) Sun Yang is young still, have a strong interest that calf gives birth to to not be afraid of a tiger first! Have a strong interest that calf gives birth to to not be afraid of a tiger first!! Laughingstock choose occasionally standard Training and match are the athlete's centre of gravity admittedly, affection problem of Dan Liuxiang is media and vermicelli made from bean starch already people the focus of attention, also fail naturally yesterday to had escaped to be present of reporters examine minutely. Since Liu Xiang and Yao Ming are considered as the calling card of Shanghai together, natural won't be the comparison on athletics sports merely. The Yao Mingru that was born 1980 had had 3 when belong to his home today, and young Liu Xiang of 3 years old nevers mention it cummer, hear with respect to Lian Fei very few also. To this, nifty Liu Xiang spits a tongue to say: &quot;Kin, family has hope quite to this respect, male after all should marry greatly when marriage daughter greatly, nevertheless everything still is now 0, I still believe lot, need much contact. &quot; do not cross Liu Xiang such answer is natural cannot &quot; contented &quot; reporter and vermicelli made from bean starch people, reporter immediately questions the standard of the cummer in Liu Xiang heart. Face the problem of arise suddenly, liu Xiang laughed undemonstratively also, it is good to express to want to visit the home and filial father and mother only. To the life henceforth, will be entered two years too again and stand year Liu Xiang is much also think calmly. &quot;I am typical 80 hind, affirming with the wife later is two people patronize 4 old people, this is very real problem, strive for her children to make a good example, but very much after all him question is not an expert, reply clearly very hard also. Nevertheless I had not felt I am very old, I think I am very young still all the time, even if will retire henceforth, also won't leave sports this big range! Also won't leave sports this big range!! Arrive from 2008 now, liu Xiang bore too much pressure, face at the outset of many people censure and atttack, liu Xiang says to there have been one really at that time silk is confused, but did not abandon from beginning to end. &quot;The way that I do not know to did not come at that time is met how, be full of to future a lot of sealed, but I have hope to oneself from beginning to end. I also got this paragraph of time come from the help of family member, friend and coach, they perfect each field work carefully seriously, had positive effect to my refreshment, I believe this is the fortune with precious brushstroke. &quot; this momently, those who sit before us, not be the sport star of all-powerful, just an experience is too brilliant with the setback, and the big boy of requicken.</text>
      <sha1>k7mfn7t3u7cqe38yjm85limj55rhjbq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2967</id>
      <parentid>2966</parentid>
      <timestamp>2013-05-25T07:02:08Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Undo revision 2966 by [[Special:Contributions/176.31.181.186|176.31.181.186]] ([[User talk:176.31.181.186|talk]])</comment>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2968</id>
      <parentid>2967</parentid>
      <timestamp>2013-05-25T07:02:36Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Protected &quot;[[User:Scar3crow]]&quot;: Excessive spamming (‎[edit=autoconfirmed] (indefinite) ‎[move=autoconfirmed] (indefinite))</comment>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>User:Sissy</title>
    <ns>2</ns>
    <id>500</id>
    <revision>
      <id>1041</id>
      <timestamp>2009-07-05T09:29:46Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>Created my user page</comment>
      <text xml:space="preserve" bytes="1281">I'm really [http://en.wikipedia.org/wiki/User:Mjb this guy].

I've been playing Quake since '96. For a while c. 2001-2003, I was playing as 'Sissy' on the NRA clan's [http://www.twcup.net/ TWCUP CTF] server. Back when that venue was full, the level of fun, strategy, and teamplay far exceeded any DM or TF experience I ever witnessed. Most of the maps, large and small, were brilliant, and I loved playing on every one of them. But as the number of players dwindled, some of the maps weren't as fun anymore, the teams were often mismatched, and people just kind of lost interest.

My main interest on this wiki is getting people started playing Quake &amp; QuakeWorld on modern operating systems. Quake/QuakeWorld has really faded from the public eye. The average gamer these days has no interest in even seeing it because it's so old and overshadowed by eye candy like the Halo series.

I think there would be more interest if it wasn't so hard to find a concise set of instructions that help people get just what they need to play. Pretty much everything you need is out there and free of charge now, but I'm sure people who look into playing often just give up once they find the tangled mess of 10-plus-year-old tutorials with references to outdated hardware and operating systems.</text>
      <sha1>hyos3p7a4azk0ak07hayr9xnun4ifo8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>User:Spirit</title>
    <ns>2</ns>
    <id>730</id>
    <revision>
      <id>2062</id>
      <timestamp>2013-03-25T12:39:49Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>Than moved page [[e1m1]] to [[E1M1 - The Slipgate Complex]]: testing more complete map name</comment>
      <text xml:space="preserve" bytes="41">#REDIRECT [[E1M1 - The Slipgate Complex]]</text>
      <sha1>j23swdhng1aozmt355al4y11ih77dq8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2077</id>
      <timestamp>2013-03-25T15:04:28Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>Created page with &quot;Hoi, I am Spirit. I run https://www.quaddicted.com and set up the http://quakewiki.org/ (migrating content from the quakery.quakedev.com/qwiki). Ask me anything on [[User_talk...&quot;</comment>
      <text xml:space="preserve" bytes="185">Hoi, I am Spirit. I run https://www.quaddicted.com and set up the http://quakewiki.org/ (migrating content from the quakery.quakedev.com/qwiki). Ask me anything on [[User_talk:Spirit]].</text>
      <sha1>hjabu7ehlpquf96mhux7kx1xper5uvm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2242</id>
      <parentid>2077</parentid>
      <timestamp>2013-03-26T13:58:15Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <text xml:space="preserve" bytes="1634">Hoi, I am Spirit. I run https://www.quaddicted.com and set up the http://quakewiki.org/ (migrating content from the quakery.quakedev.com/qwiki). Ask me anything on [[User_talk:Spirit]].


== Recursive file list creator script ==
 #!/usr/bin/env bash
 # Recursively crawl through the current directory print all files and
 # subdirectories nicely with filename, size, md5sum.
 # This outputs in table format for mediawiki.
 # Written by Spirit for quakewiki.org, 03-2013
 # Do whatever you want with this, consider it public domain.
 
 shopt -s globstar # to make it recursively dive into all directories
 
 echo &quot;&lt;nowiki&gt;&lt;tt&gt;&lt;/nowiki&gt;&quot; # force monospace
 # mediawiki table header
 echo '{| class=&quot;wikitable&quot;'
 echo '|-'
 echo '! Path !! Size !! md5'
 echo '|-'
 
 for file in **/*
 do
 	# Whatever you do, don't forget to quote the filename, ie &quot;${file}&quot;.
 	#echo &quot;now: &quot; &quot;${file}&quot;
 	ls_string=$(ls --color=no -gG --time-style=long-iso &quot;${file}&quot;)
 	file_size=$(echo ${ls_string} | awk '{print $3}')
 	file_time=$(echo ${ls_string} | awk '{print $4 &quot; &quot; $5}')
 	file_md5sum=$(md5sum &quot;${file}&quot; 2&gt;/dev/null | awk '{print $1}')
 	if [[  -z ${file_md5sum} ]] #if &quot;the string is empty&quot;
 	then
 		# Current file is a directory, just print the tree (or nothing at all)
 		# echo ${file}/
 		true # you must have something in this then block :-)
 	else
 		# Current file is a valid file, print all its details
 		#echo &quot;${file}&quot; ${file_size} ${file_time} ${file_md5sum}
 		echo &quot;| ${file}  ||style=&quot;text-align:right&quot;|  ${file_size} || ${file_md5sum}&quot;
 		echo '|-'
 	fi
 done
 
 # mediawiki table footer
 echo '|}'
 echo &quot;&lt;nowiki&gt;&lt;/tt&gt;&lt;/nowiki&gt;&quot;</text>
      <sha1>09dc0raw4zgco1de11lkawkpcsuag9c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>User:Text Fish</title>
    <ns>2</ns>
    <id>788</id>
    <revision>
      <id>2319</id>
      <timestamp>2013-03-26T21:37:57Z</timestamp>
      <contributor>
        <username>Text Fish</username>
        <id>36</id>
      </contributor>
      <comment>Created page with &quot;Quake was released on the 22nd of June 1996. Text_Fish (a human being from Earth) was released on the 22nd of June 1983. That means he was EXACTLY two years under the recommen...&quot;</comment>
      <text xml:space="preserve" bytes="403">Quake was released on the 22nd of June 1996.
Text_Fish (a human being from Earth) was released on the 22nd of June 1983. That means he was EXACTLY two years under the recommended age to play Quake 1 on the day of its release and continued to recklessly flout that recommendation for the duration of those two years on an almost daily basis. The acrimonious old codgers at the ESRB have yet to catch him.</text>
      <sha1>dh6hx5romjkwuyk7nqei5idsawr1f50</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>User:Than</title>
    <ns>2</ns>
    <id>642</id>
    <revision>
      <id>1878</id>
      <timestamp>2013-03-25T01:51:07Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>Created page with &quot;Hey Than! I just saw that you were working on the entities list and adding details - I dropped down to the [[func_door]] article and added a bunch of stuff for it based on wha...&quot;</comment>
      <text xml:space="preserve" bytes="302">Hey Than! I just saw that you were working on the entities list and adding details - I dropped down to the [[func_door]] article and added a bunch of stuff for it based on what shows up in Worldcraft. What do you think? --[[User:Hectate|Hectate]] ([[User talk:Hectate|talk]]) 01:51, 25 March 2013 (UTC)</text>
      <sha1>2faexilyhsseyh4pso5339l0z4aznpe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2850</id>
      <parentid>1878</parentid>
      <timestamp>2013-04-08T14:35:53Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="399">template ideas:

'''Map files'''
{{file_map | file = its_demo_v1.zip}}
Inserts a link to http://www.quaddicted.com/filebase/its_demo_v1.zip

'''Tutorial file links'''
{{file_tutorial | file = tutorial_door.zip}}
Inserts a link to http://www.quaketastic.com/misc/tutorial_door.zip

etc.

This way, if a site goes down and the files are moved, fixing the file links is as easy as changing the template</text>
      <sha1>lqg1bko4907of2smkkgjrsrrss112h9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2854</id>
      <parentid>2850</parentid>
      <timestamp>2013-04-08T14:52:56Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="436">template ideas:

'''Map files'''
{{file_map | file = its_demo_v1.zip | text = In The Shadows (Quaddicted)}}
Inserts a link to http://www.quaddicted.com/filebase/its_demo_v1.zip

'''Tutorial file links'''
{{file_tutorial | file = tutorial_door.zip}}
Inserts a link to http://www.quaketastic.com/misc/tutorial_door.zip

etc.

This way, if a site goes down and the files are moved, fixing the file links is as easy as changing the template</text>
      <sha1>rn53tb0jpudrzuplslby10qy4g7z4qj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>User:Unmaker</title>
    <ns>2</ns>
    <id>1031</id>
    <revision>
      <id>2936</id>
      <timestamp>2013-05-04T14:52:09Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <comment>Created page with &quot;Let's get this thing going.  And yes, Wikia Inc. shalt have its soul given to the Shub.&quot;</comment>
      <text xml:space="preserve" bytes="87">Let's get this thing going.

And yes, Wikia Inc. shalt have its soul given to the Shub.</text>
      <sha1>opzmvhnlz5ljabo5susgut9cxkf08w3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>User:XaGe</title>
    <ns>2</ns>
    <id>368</id>
    <revision>
      <id>606</id>
      <timestamp>2008-04-12T13:45:52Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: I hate that MediaWiki capitalizes my name! lol... I see not much has been done with this since its creation so I have spent a few minutes a day adding little bits here and there...  &lt;H2&gt;Wh...</comment>
      <text xml:space="preserve" bytes="200">I hate that MediaWiki capitalizes my name! lol... I see not much has been done with this since its creation so I have spent a few minutes a day adding little bits here and there...

&lt;H2&gt;Who am I?&lt;/H2&gt;</text>
      <sha1>tu3a6zanun86ldsyf8pp537dw1hmdvi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>607</id>
      <parentid>606</parentid>
      <timestamp>2008-04-12T14:17:30Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="1145">I hate that MediaWiki capitalizes my name! lol... I see not much has been done with this since its creation so I have spent a few minutes a day adding little bits here and there...

&lt;H2&gt;Who am I?&lt;/H2&gt;
..I've been a Quake fan since learning of its existence back in 1996 shortly after its release. I can directly blame (or credit :-P) Doom &amp; Quake with getting me into computers more than I already was at that time coming from my childhood of Arcades, Atari, Texas Instruments, and Commodore computers. I can still remember upgrading my friends DX2 486 with enough ram to get Quake running properly...

..Over the years I've touch upon most aspects of Quake modding with never really accomplishing anything major, happy enough just to dabble, learn, and help others. 

..I joined a friend [[Ali Salehi]] aka [[Little3D]] that I had made via a few Quake forums around the net to just beta test &amp; help out with a few map idea's. The Quake mod was called Xwar which turned out to be heavily based on Tomaz's [[TomazQuake]] engine and TomazQuake mod with a few changes in regards to the engine code and some content creation via Max3d and Photoshop.</text>
      <sha1>3l8vj58un4exsu1sfge7iljq66ybkwj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>608</id>
      <parentid>607</parentid>
      <timestamp>2008-04-12T14:18:34Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="1154">I hate that MediaWiki capitalizes my name! lol... I see not much has been done with this since its creation so I have spent a few minutes a day adding little bits here and there...

&lt;H2&gt;Who am I?&lt;/H2&gt;
..I've been a Quake fan since learning of its existence back in 1996 shortly after its release. I can directly blame (or credit :-P) Doom &amp; Quake for getting me even more into computers more than I already was at that time coming from my childhood of Arcades, Atari, Texas Instruments, and Commodore computers. I can still remember upgrading my friends DX2 486 with enough ram to get Quake running properly...

..Over the years I've touch upon most aspects of Quake modding with never really accomplishing anything major, happy enough just to dabble, learn, and help others. 

..I joined a friend [[Ali Salehi]] aka [[Little3D]] that I had made via a few Quake forums around the net to just beta test &amp; help out with a few map idea's. The Quake mod was called Xwar which turned out to be heavily based on Tomaz's [[TomazQuake]] engine and TomazQuake mod with a few changes in regards to the engine code and some content creation via Max3d and Photoshop.</text>
      <sha1>kq3wwov4iofhkpqu6b3rtiyok9mtc5k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>609</id>
      <parentid>608</parentid>
      <timestamp>2008-04-12T14:27:04Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="1197">I hate that MediaWiki capitalizes my name! lol... I see not much has been done with this since its creation so I have spent a few minutes a day adding little bits here and there...

&lt;H2&gt;Who am I?&lt;/H2&gt;
..I've been a Quake fan since learning of its existence back in 1996 shortly after its release. I can directly blame (or credit :-P) Doom &amp; Quake for getting me even more into computers more than I already was at that time coming from my childhood of Arcades, Atari, Texas Instruments, and Commodore computers. I can still remember upgrading my friends DX2 486 with enough ram to get Quake running properly...

..Over the years I've touch upon most aspects of Quake modding with never really accomplishing anything major, happy enough just to dabble, learn, and help others. I find it all very entertaining actually...

..I joined a friend [[Ali Salehi]] aka [[Little3D]] that I had made via a few Quake forums around the net to just beta test &amp; help out with a few map idea's. The Quake mod was called Xwar which turned out to be heavily based on Tomaz's [[TomazQuake]] engine and TomazQuake mod with a few changes in regards to the engine code and some content creation via Max3d and Photoshop.</text>
      <sha1>dm6y11hq7uwhr1spv1vgxevl5hwgw67</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>610</id>
      <parentid>609</parentid>
      <timestamp>2008-04-12T14:36:52Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="1420">..I hate that MediaWiki capitalizes my name! lol... I see not much has been done with this since its creation so I have spent a few minutes a day adding little bits here and there...

&lt;H2&gt;Who am I?&lt;/H2&gt;
..My parents had &lt;I&gt;&quot;told&quot;&lt;/I&gt; I was born in a hospital, but I think I was born in an arcade! I would constantly be hounding them for quarters in the early 80's to feed my video game fever...Good times, good times! ;-)

..I've been a Quake fan since learning of its existence back in 1996 shortly after its release. I can directly blame (or credit :-P) Doom &amp; Quake for getting me even more into computers more than I already was at that time coming from my childhood of Arcades, Atari, Texas Instruments, and Commodore computers. I can still remember upgrading my friends DX2 486 with enough ram to get Quake running properly... 

..Over the years I've touch upon most aspects of Quake modding with never really accomplishing anything major, happy enough just to dabble, learn, and help others. I find it all very entertaining actually...

..I joined a friend [[Ali Salehi]] aka [[Little3D]] that I had made via a few Quake forums around the net to just beta test &amp; help out with a few map idea's. The Quake mod was called Xwar which turned out to be heavily based on Tomaz's [[TomazQuake]] engine and TomazQuake mod with a few changes in regards to the engine code and some content creation via Max3d and Photoshop.</text>
      <sha1>qgx6kj69khpi1g6ehc84cdc4arikj81</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>611</id>
      <parentid>610</parentid>
      <timestamp>2008-04-12T15:13:27Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="2268">..I hate that MediaWiki capitalizes my name! lol... I see not much has been done with this since its creation so I have spent a few minutes a day adding little bits here and there...

&lt;H2&gt;Who am I?&lt;/H2&gt;
..My parents had &lt;I&gt;&quot;told&quot;&lt;/I&gt; I was born in a hospital, but I think I was born in an arcade! I would constantly be hounding them for quarters in the early 80's to feed my video game fever...Good times, good times! ;-) My 1st computer was a Texas Instruments Ti/99/4a, followed my a Commodore 64 which I got more of a taste for Basic programming, BBS's, the Internet, gaming and piracy.

..My 1st real dose of an actually PC would be my friends 486SX. It brought to me my 1st PC game obsessions in the form or RPG type games named Elder Scrolls:Arena and later Elder Scrolls:DaggerFall. There was also &quot;Imagination Network&quot; which made a huge impact on my PC gaming. It was a online gaming intranet from Sierra which within had many different games you could play with others across the world also plugged into the Sierra network. The one game I obbsessed most over was one of the 1st graphical muds I ever heard of by the name &quot;The Shadow of Yserbius&quot;. I would spend days straight playing my character with my guild mates in the MRA:Mystical Realms of Asgard. I made many friends which I still play with today in WOW... 

&lt;H4&gt;..And then came QUAKE!!!&lt;/H4&gt;

..I've been a Quake fan since learning of its existence back in 1996 shortly after its release. I can directly blame (or credit :-P) Doom &amp; Quake for getting me even more into computers more than I already was at that time. I can still remember upgrading a friends DX2 486 with enough ram to get Quake running properly...

..Over the years I've touch upon most aspects of Quake modding with never really accomplishing anything major, happy enough just to dabble, learn, and help others. I find it all very entertaining actually...

..I joined a friend [[Ali Salehi]] aka [[Little3D]] that I had made via a few Quake forums around the net to just beta test &amp; help out with a few map idea's. The Quake mod was called Xwar which turned out to be heavily based on Tomaz's [[TomazQuake]] engine and TomazQuake mod with a few changes in regards to the engine code and some content creation via Max3d and Photoshop.</text>
      <sha1>5n6716w81mscwpktu1a65xfwsfpch6g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>612</id>
      <parentid>611</parentid>
      <timestamp>2008-04-12T15:14:53Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="2267">..I hate that MediaWiki capitalizes my name! lol... I see not much has been done with this since its creation so I have spent a few minutes a day adding little bits here and there...

&lt;H2&gt;Who am I?&lt;/H2&gt;
..My parents had &lt;I&gt;&quot;told&quot;&lt;/I&gt; I was born in a hospital, but I think I was born in an arcade! I would constantly be hounding them for quarters in the early 80's to feed my video game fever...Good times, good times! ;-) My 1st computer was a Texas Instruments Ti/99/4a, followed my a Commodore 64 which I got more of a taste for Basic programming, BBS's, the Internet, gaming and piracy.

..My 1st real dose of an actually PC would be my friends 486SX. It brought to me my 1st PC game obsessions in the form or RPG type games named Elder Scrolls:Arena and later Elder Scrolls:DaggerFall. There was also &quot;Imagination Network&quot; which made a huge impact on my PC gaming. It was a online gaming intranet from Sierra which within had many different games you could play with others across the world also plugged into the Sierra network. The one game I obsessed most over was one of the 1st graphical muds I ever heard of by the name &quot;The Shadow of Yserbius&quot;. I would spend days straight playing my character with my guild mates in the MRA:Mystical Realms of Asgard. I made many friends which I still play with today in WOW... 

&lt;H4&gt;..And then came QUAKE!!!&lt;/H4&gt;

..I've been a Quake fan since learning of its existence back in 1996 shortly after its release. I can directly blame (or credit :-P) Doom &amp; Quake for getting me even more into computers more than I already was at that time. I can still remember upgrading a friends DX2 486 with enough ram to get Quake running properly...

..Over the years I've touch upon most aspects of Quake modding with never really accomplishing anything major, happy enough just to dabble, learn, and help others. I find it all very entertaining actually...

..I joined a friend [[Ali Salehi]] aka [[Little3D]] that I had made via a few Quake forums around the net to just beta test &amp; help out with a few map idea's. The Quake mod was called Xwar which turned out to be heavily based on Tomaz's [[TomazQuake]] engine and TomazQuake mod with a few changes in regards to the engine code and some content creation via Max3d and Photoshop.</text>
      <sha1>2ol2zupfnlpsq15399ixooc5xrsuzfp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>613</id>
      <parentid>612</parentid>
      <timestamp>2008-04-12T15:28:41Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="2321">..I hate that MediaWiki capitalizes my name! lol... I see not much has been done with this since its creation so I have spent a few minutes a day adding little bits here and there...

&lt;H2&gt;Who am I?&lt;/H2&gt;
..My parents had &lt;I&gt;&quot;told&quot;&lt;/I&gt; I was born in a hospital, but I think I was born in an arcade! I would constantly be hounding them for quarters in the early 80's to feed my video game fever...Good times, good times! ;-) My 1st computer was a Texas Instruments Ti/99/4a, followed my a Commodore 64 which I got more of a taste for Basic programming, BBS's, the Internet, gaming and piracy.

..My 1st real dose of an actually PC would be my friends 486SX. It brought to me my 1st PC game obsessions in the form or RPG type games named Elder Scrolls:Arena and later Elder Scrolls:DaggerFall. There was also &quot;[http://en.wikipedia.org/wiki/The_Shadow_of_Yserbius Imagination Network]&quot; which made a huge impact on my PC gaming. It was a online gaming intranet from Sierra which within had many different games you could play with others across the world also plugged into the Sierra network. The one game I obsessed most over was one of the 1st graphical muds I ever heard of by the name &quot;The Shadow of Yserbius&quot;. I would spend days straight playing my character with my guild mates in the MRA:Mystical Realms of Asgard. I made many friends which I still play with today in WOW... 

&lt;H4&gt;..And then came QUAKE!!!&lt;/H4&gt;

..I've been a Quake fan since learning of its existence back in 1996 shortly after its release. I can directly blame (or credit :-P) Doom &amp; Quake for getting me even more into computers more than I already was at that time. I can still remember upgrading a friends DX2 486 with enough ram to get Quake running properly...

..Over the years I've touch upon most aspects of Quake modding with never really accomplishing anything major, happy enough just to dabble, learn, and help others. I find it all very entertaining actually...

..I joined a friend [[Ali Salehi]] aka [[Little3D]] that I had made via a few Quake forums around the net to just beta test &amp; help out with a few map idea's. The Quake mod was called Xwar which turned out to be heavily based on Tomaz's [[TomazQuake]] engine and TomazQuake mod with a few changes in regards to the engine code and some content creation via Max3d and Photoshop.</text>
      <sha1>d2qmx124gcssug3dj988bl3eme8pi2r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>614</id>
      <parentid>613</parentid>
      <timestamp>2008-04-12T15:43:05Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="2572">..I hate that MediaWiki capitalizes my name! lol... I see not much has been done with this since its creation so I have spent a few minutes a day adding little bits here and there...

&lt;H2&gt;Who am I?&lt;/H2&gt;
..My parents had &lt;I&gt;&quot;told&quot;&lt;/I&gt; I was born in a hospital, but I think I was born in an arcade! I would constantly be hounding them for quarters in the early 80's to feed my video game fever...Good times, good times! ;-) My 1st computer was a Texas Instruments Ti/99/4a, followed my a Commodore 64 which I got more of a taste for Basic programming, BBS's, the Internet, gaming and piracy.

..My 1st real dose of an actually PC would be my friends 486SX. It brought to me my 1st PC game obsessions in the form or RPG type games named [http://en.wikipedia.org/wiki/The_Elder_Scrolls:_Arena The Elder Scrolls:Arena] and later [http://en.wikipedia.org/wiki/The_Elder_Scrolls_II:_Daggerfall The Elder Scrolls II:DaggerFall]. Coming from a [http://en.wikipedia.org/wiki/Dungeons_%26_Dragons Dungeons &amp; Dragons] spent youth these games hooked me. There was also &quot;[http://en.wikipedia.org/wiki/The_Shadow_of_Yserbius Imagination Network]&quot; which made a huge impact on my PC gaming. It was a online gaming intranet from Sierra which within had many different games you could play with others across the world also plugged into the Sierra network. The one game I obsessed most over was one of the 1st graphical muds I ever heard of by the name &quot;The Shadow of Yserbius&quot;. I would spend days straight playing my character with my guild mates in the MRA:Mystical Realms of Asgard. I made many friends which I still play with today in WOW... 

&lt;H4&gt;..And then came QUAKE!!!&lt;/H4&gt;

..I've been a Quake fan since learning of its existence back in 1996 shortly after its release. I can directly blame (or credit :-P) Doom &amp; Quake for getting me even more into computers more than I already was at that time. I can still remember upgrading a friends DX2 486 with enough ram to get Quake running properly...

..Over the years I've touch upon most aspects of Quake modding with never really accomplishing anything major, happy enough just to dabble, learn, and help others. I find it all very entertaining actually...

..I joined a friend [[Ali Salehi]] aka [[Little3D]] that I had made via a few Quake forums around the net to just beta test &amp; help out with a few map idea's. The Quake mod was called Xwar which turned out to be heavily based on Tomaz's [[TomazQuake]] engine and TomazQuake mod with a few changes in regards to the engine code and some content creation via Max3d and Photoshop.</text>
      <sha1>rmrveh0pczuruwrhfet8ck4118nch1r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>615</id>
      <parentid>614</parentid>
      <timestamp>2008-04-12T16:13:23Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="2623">..I hate that MediaWiki capitalizes my name! lol... I see not much has been done with this since its creation so I have spent a few minutes a day adding little bits here and there...

&lt;H2&gt;Who am I?&lt;/H2&gt;
..My parents had &lt;I&gt;&quot;told&quot;&lt;/I&gt; I was born in a hospital, but I think I was born in an arcade! I would constantly be hounding them for quarters in the early 80's to feed my video game fever...Good times, good times! ;-) My 1st computer was a Texas Instruments Ti/99/4a, followed my a Commodore 64 which I got more of a taste for Basic programming, BBS's, the Internet, gaming and piracy.

..My 1st real dose of an actually PC would be my friends 486SX. It brought to me my 1st PC game obsessions in the form or RPG type games named [http://en.wikipedia.org/wiki/The_Elder_Scrolls:_Arena The Elder Scrolls:Arena] and later [http://en.wikipedia.org/wiki/The_Elder_Scrolls_II:_Daggerfall The Elder Scrolls II:DaggerFall]. Coming from a [http://en.wikipedia.org/wiki/Dungeons_%26_Dragons Dungeons &amp; Dragons] spent youth these games hooked me. There was also &quot;[http://en.wikipedia.org/wiki/ImagiNation_Network Imagination Network]&quot; which made a huge impact on my PC gaming. It was a online gaming intranet from Sierra which within had many different games you could play with others across the world also plugged into the Sierra network. The one game I obsessed most over was one of the 1st graphical muds I ever heard of by the name &quot;[http://en.wikipedia.org/wiki/The_Shadow_of_Yserbius The Shadow of Yserbius]&quot;. I would spend days straight playing my character with my guild mates in the MRA:Mystical Realms of Asgard. I made many friends which I still play with today in WOW... 

&lt;H4&gt;..And then came QUAKE!!!&lt;/H4&gt;

..I've been a Quake fan since learning of its existence back in 1996 shortly after its release. I can directly blame (or credit :-P) Doom &amp; Quake for getting me even more into computers more than I already was at that time. I can still remember upgrading a friends DX2 486 with enough ram to get Quake running properly...

..Over the years I've touch upon most aspects of Quake modding with never really accomplishing anything major, happy enough just to dabble, learn, and help others. I find it all very entertaining actually...

..I joined a friend [[Ali Salehi]] aka [[Little3D]] that I had made via a few Quake forums around the net to just beta test &amp; help out with a few map idea's. The Quake mod was called Xwar which turned out to be heavily based on Tomaz's [[TomazQuake]] engine and TomazQuake mod with a few changes in regards to the engine code and some content creation via Max3d and Photoshop.</text>
      <sha1>rkpf532ubq6fmmli91cq8nrsoejw9oi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>616</id>
      <parentid>615</parentid>
      <timestamp>2008-04-12T16:14:17Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="2672">..I hate that MediaWiki capitalizes my name! lol... I see not much has been done with this since its creation so I have spent a few minutes a day adding little bits here and there...

&lt;H2&gt;Who am I?&lt;/H2&gt;
..My parents had &lt;I&gt;&quot;told&quot;&lt;/I&gt; I was born in a hospital, but I think I was born in an arcade! I would constantly be hounding them for quarters in the early 80's to feed my video game fever...Good times, good times! ;-) My 1st computer was a Texas Instruments Ti/99/4a, followed my a Commodore 64 which I got more of a taste for Basic programming, BBS's, the Internet, gaming and piracy.

..My 1st real dose of an actually PC would be my friends 486SX. It brought to me my 1st PC game obsessions in the form or RPG type games named [http://en.wikipedia.org/wiki/The_Elder_Scrolls:_Arena The Elder Scrolls:Arena] and later [http://en.wikipedia.org/wiki/The_Elder_Scrolls_II:_Daggerfall The Elder Scrolls II:DaggerFall]. Coming from a [http://en.wikipedia.org/wiki/Dungeons_%26_Dragons Dungeons &amp; Dragons] spent youth these games hooked me. There was also &quot;[http://en.wikipedia.org/wiki/ImagiNation_Network Imagination Network]&quot; which made a huge impact on my PC gaming. It was a online gaming intranet from Sierra which within had many different games you could play with others across the world also plugged into the Sierra network. The one game I obsessed most over was one of the 1st graphical muds I ever heard of by the name &quot;[http://en.wikipedia.org/wiki/The_Shadow_of_Yserbius The Shadow of Yserbius]&quot;. I would spend days straight playing my character with my guild mates in the MRA:Mystical Realms of Asgard. I made many friends which I still play with today in [http://en.wikipedia.org/wiki/World_of_Warcraft WOW]... 

&lt;H4&gt;..And then came QUAKE!!!&lt;/H4&gt;

..I've been a Quake fan since learning of its existence back in 1996 shortly after its release. I can directly blame (or credit :-P) Doom &amp; Quake for getting me even more into computers more than I already was at that time. I can still remember upgrading a friends DX2 486 with enough ram to get Quake running properly...

..Over the years I've touch upon most aspects of Quake modding with never really accomplishing anything major, happy enough just to dabble, learn, and help others. I find it all very entertaining actually...

..I joined a friend [[Ali Salehi]] aka [[Little3D]] that I had made via a few Quake forums around the net to just beta test &amp; help out with a few map idea's. The Quake mod was called Xwar which turned out to be heavily based on Tomaz's [[TomazQuake]] engine and TomazQuake mod with a few changes in regards to the engine code and some content creation via Max3d and Photoshop.</text>
      <sha1>bx7amrn8dm84qvn6pugevd2aczrovuf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>617</id>
      <parentid>616</parentid>
      <timestamp>2008-04-12T16:16:33Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="2781">..I hate that MediaWiki capitalizes my name! lol... I see not much has been done with this since its creation so I have spent a few minutes a day adding little bits here and there...

&lt;H2&gt;Who am I?&lt;/H2&gt;
..My parents had &lt;I&gt;&quot;told&quot;&lt;/I&gt; I was born in a hospital, but I think I was born in an arcade! I would constantly be hounding them for quarters in the early 80's to feed my video game fever...Good times, good times! ;-) My 1st computer was a Texas Instruments Ti/99/4a, followed my a Commodore 64 which I got more of a taste for Basic programming, BBS's, the Internet, gaming and piracy.

..My 1st real dose of an actually PC would be my friends 486SX. It brought to me my 1st PC game obsessions in the form or RPG type games named [http://en.wikipedia.org/wiki/The_Elder_Scrolls:_Arena The Elder Scrolls:Arena] and later [http://en.wikipedia.org/wiki/The_Elder_Scrolls_II:_Daggerfall The Elder Scrolls II:DaggerFall]. Coming from a [http://en.wikipedia.org/wiki/Dungeons_%26_Dragons Dungeons &amp; Dragons] spent youth these games hooked me. There was also &quot;[http://en.wikipedia.org/wiki/ImagiNation_Network Imagination Network]&quot; which made a huge impact on my PC gaming. It was a online gaming intranet from Sierra which within had many different games you could play with others across the world also plugged into the Sierra network. The one game I obsessed most over was one of the 1st graphical muds I ever heard of by the name &quot;[http://en.wikipedia.org/wiki/The_Shadow_of_Yserbius The Shadow of Yserbius]&quot;. I would spend days straight playing my character with my guild mates in the MRA:Mystical Realms of Asgard. I made many friends which I still play with today in [http://en.wikipedia.org/wiki/World_of_Warcraft WOW]... 

&lt;H4&gt;..And then came QUAKE!!!&lt;/H4&gt;

..I've been a Quake fan since learning of its existence back in 1996 shortly after its release. I can directly blame (or credit :-P) Doom &amp; Quake for getting me even more into computers more than I already was at that time. I can still remember upgrading a friends DX2 486 with enough ram to get Quake running properly...

..Over the years I've touch upon most aspects of Quake modding with never really accomplishing anything major, happy enough just to dabble, learn, and help others. I find it all very entertaining actually...

..I joined a friend [[Ali Salehi]] aka [[Little3D]] that I had made via a few Quake forums around the net to just beta test &amp; help out with a few map idea's. The Quake mod was called Xwar which turned out to be heavily based on Tomaz's [[TomazQuake]] engine and TomazQuake mod with a few changes in regards to the engine code and some content creation via Max3d and Photoshop.



&lt;H2&gt;...I'll finish this some other time...&lt;/H2&gt;

There is probably more here then anyone cares for!.. :-P</text>
      <sha1>iul5gnivl5oe7v1s83m5ql9zpbuc8xl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Vanilla Quake</title>
    <ns>0</ns>
    <id>648</id>
    <revision>
      <id>1926</id>
      <timestamp>2013-03-25T03:46:16Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <comment>created Vanilla Quake page and added content</comment>
      <text xml:space="preserve" bytes="324">'''Vanilla Quake'''

The term Vanilla Quake refers to the game of Quake as shipped and subsequently patched by iD Software. Specifically pak0.pak and pak1.pak.

In regards to a level it means that it sticks to the original limitations of Quake levels and that it would run without problems in the original Quake game engine.</text>
      <sha1>35hajdj9vt1br5mjl97ylw1tgbd7f8k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1931</id>
      <parentid>1926</parentid>
      <timestamp>2013-03-25T03:54:33Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="325">'''Vanilla Quake'''

The term Vanilla Quake refers to the game of Quake as shipped and subsequently patched by iD Software. Specifically pak0.pak and pak1.pak.

In regards to a level it means that it adheres to the original limitations of Quake levels and that it would run without problems in the original Quake game engine.</text>
      <sha1>n3qzfopz2sptc4qmd94g4cxct50vbhr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Vectoangles</title>
    <ns>0</ns>
    <id>941</id>
    <redirect title="vectoangles" />
    <revision>
      <id>2649</id>
      <timestamp>2013-03-29T14:22:25Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Vectoangles]] to [[vectoangles]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="25">#REDIRECT [[vectoangles]]</text>
      <sha1>3kmzqhih9y6posf0xhz6k6fl5kuxrs7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Vector</title>
    <ns>0</ns>
    <id>395</id>
    <revision>
      <id>666</id>
      <timestamp>2008-05-07T17:28:50Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page:  === Vector type ===  A vector, made of 3 float coordinates. Used to represent positions or directions in 3D space.   Valid syntax: '0 0 0' or '20.5 -10 0.00001'  Note the simple quotes ar...</comment>
      <text xml:space="preserve" bytes="372">
=== Vector type ===

A vector, made of 3 float coordinates.
Used to represent positions or directions in 3D space.
  Valid syntax: '0 0 0' or '20.5 -10 0.00001'

Note the simple quotes around the vector. Do not use double quotes, they are reserved for strings.

If you declare a vector foobar, then you can access it's x, y and z fields with: foobar_x, foobar_y,foobar_z.</text>
      <sha1>io5z0fam6nawnjqd2q0jawhobn67nxi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Vectoyaw</title>
    <ns>0</ns>
    <id>194</id>
    <revision>
      <id>370</id>
      <timestamp>2008-02-22T19:28:45Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  float '''vectoyaw'''(vector ''v'')  Vector to yaw: calculates the yaw angle (bearing) corresponding to a given 3D direction ''v'' in degrees.</comment>
      <text xml:space="preserve" bytes="142"> float '''vectoyaw'''(vector ''v'')

Vector to yaw: calculates the yaw angle (bearing) corresponding to a given 3D direction ''v'' in degrees.</text>
      <sha1>iz7smn6qqbad3mkjyek9greye5e0mmo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Versus</title>
    <ns>0</ns>
    <id>448</id>
    <revision>
      <id>785</id>
      <timestamp>2008-05-08T22:00:14Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <comment>New page: {{Infobox Mod |name=Versus |author=RenegadeC |engine=[[Quake]] |first-release=1999 |newest-release=2006 |website= }} Versus is the best mod ever.  It is notable, for being the best mod eve...</comment>
      <text xml:space="preserve" bytes="207">{{Infobox Mod
|name=Versus
|author=RenegadeC
|engine=[[Quake]]
|first-release=1999
|newest-release=2006
|website=
}}
Versus is the best mod ever.  It is notable, for being the best mod ever.

{NetQuake Mods}</text>
      <sha1>eztdmymbmgqtbwn1o2fqpui3zyercp0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Vid mode</title>
    <ns>0</ns>
    <id>942</id>
    <redirect title="vid mode" />
    <revision>
      <id>2651</id>
      <timestamp>2013-03-29T14:22:25Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Vid mode]] to [[vid mode]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="22">#REDIRECT [[vid mode]]</text>
      <sha1>d1q7ctu8e1koggxvugkgslbx4h0tjl1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Vid nopageflip</title>
    <ns>0</ns>
    <id>943</id>
    <redirect title="vid nopageflip" />
    <revision>
      <id>2653</id>
      <timestamp>2013-03-29T14:22:26Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Vid nopageflip]] to [[vid nopageflip]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="28">#REDIRECT [[vid nopageflip]]</text>
      <sha1>2q0lf5iqumc5x7vjw0h2eg6acb5uwmb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Vid stretch by 2</title>
    <ns>0</ns>
    <id>944</id>
    <redirect title="vid stretch by 2" />
    <revision>
      <id>2655</id>
      <timestamp>2013-03-29T14:22:26Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Vid stretch by 2]] to [[vid stretch by 2]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="30">#REDIRECT [[vid stretch by 2]]</text>
      <sha1>3uijzbhghmorra31ine2a68ooo6ektu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Vis</title>
    <ns>0</ns>
    <id>582</id>
    <revision>
      <id>1520</id>
      <timestamp>2010-01-11T08:33:26Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <comment>New page: '''Vis''' is one of the stages of [[map compiling]].  It calculates visibility (or [[PVS]]) data for a [[bsp file]] previously generated by [[QBSP]]. With PVS data, the engine need only dr...</comment>
      <text xml:space="preserve" bytes="1871">'''Vis''' is one of the stages of [[map compiling]].  It calculates visibility (or [[PVS]]) data for a [[bsp file]] previously generated by [[QBSP]]. With PVS data, the engine need only draw those parts of the level (and those entities) that might be visible from the current player location. This performance optimization was necessary to allow levels as large and as complex as Quake's on the computers of the day. And even today, most games use equivalent systems to allow levels, props, and NPCs to be as detailed as possible. 

==What Vis Does==  
Vis uses the [[portal|portals]] from the [[prt file]] generated by [[QBSP]] to calculate visibility.  For each [[visleaf]], it calculates which other visleafs are potentially visible from any point within that visleaf.  It does this using the portal data, as each visleaf can only see into other visleafs by looking through one or more portals.  The final data, which is a series of bits representing whether or not each pair of visleafs can see each other, is then compressed down and saved in the bsp file.

In addition, there are four hard-coded ambient sounds in Quake; one each for [[sky]], [[water]], [[slime]], and [[lava]].  Using the PVS data, Vis calculates the appropriate volume level for each of these ambient sounds based on the proximity and visibility of nearby sky and liquid surfaces.

==Using Vis==
Vis is a command-line tool, generally named vis.exe.  You can invoke it from a command prompt, via a shortcut or batch file, or from the &quot;compile&quot; or &quot;build&quot; menus of some [[level editor|level editors]].

===Command-line options===
TODO

===Error Messages and Warnings===
TODO

===Updated Versions===
In addition to [[id Software]]'s official Vis, there have been various unofficial versions that improve on the original or add additional features.  For a list of Vis variants, see [[mapping tools]].</text>
      <sha1>sigzv5a2cx8xwycuk8exy1upvhk4iuv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1905</id>
      <parentid>1520</parentid>
      <timestamp>2013-03-25T03:12:08Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>fixing misdirected links</comment>
      <text xml:space="preserve" bytes="1909">'''Vis''' is one of the stages of [[map compiling]].  It calculates visibility (or [[PVS]]) data for a [[Quake file formats|bsp file]] previously generated by [[QBSP]]. With PVS data, the engine need only draw those parts of the level (and those entities) that might be visible from the current player location. This performance optimization was necessary to allow levels as large and as complex as Quake's on the computers of the day. And even today, most games use equivalent systems to allow levels, props, and NPCs to be as detailed as possible. 

==What Vis Does==  
Vis uses the [[portal|portals]] from the [[Quake file formats|prt file]] generated by [[QBSP]] to calculate visibility.  For each [[visleaf]], it calculates which other visleafs are potentially visible from any point within that visleaf.  It does this using the portal data, as each visleaf can only see into other visleafs by looking through one or more portals.  The final data, which is a series of bits representing whether or not each pair of visleafs can see each other, is then compressed down and saved in the bsp file.

In addition, there are four hard-coded ambient sounds in Quake; one each for [[sky]], [[water]], [[slime]], and [[lava]].  Using the PVS data, Vis calculates the appropriate volume level for each of these ambient sounds based on the proximity and visibility of nearby sky and liquid surfaces.

==Using Vis==
Vis is a command-line tool, generally named vis.exe.  You can invoke it from a command prompt, via a shortcut or batch file, or from the &quot;compile&quot; or &quot;build&quot; menus of some [[level editor|level editors]].

===Command-line options===
TODO

===Error Messages and Warnings===
TODO

===Updated Versions===
In addition to [[id Software]]'s official Vis, there have been various unofficial versions that improve on the original or add additional features.  For a list of Vis variants, see [[mapping tools]].</text>
      <sha1>3f92t3z0lggr4hgffgidz7gf6x6tgjn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Vlen</title>
    <ns>0</ns>
    <id>193</id>
    <revision>
      <id>369</id>
      <timestamp>2008-02-22T19:27:19Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  float '''vlen'''(vector ''v'')  Returns the length of vector ''v'' (never &lt; 0).</comment>
      <text xml:space="preserve" bytes="80"> float '''vlen'''(vector ''v'')

Returns the length of vector ''v'' (never &lt; 0).</text>
      <sha1>iyal0qj9sfgk7uh0dmxek8qzafsqzeq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Void</title>
    <ns>0</ns>
    <id>945</id>
    <redirect title="void" />
    <revision>
      <id>2657</id>
      <timestamp>2013-03-29T14:22:26Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Void]] to [[void]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="18">#REDIRECT [[void]]</text>
      <sha1>d9v718ras3o2ytl9c9h6oo9fppggpow</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Volume</title>
    <ns>0</ns>
    <id>946</id>
    <redirect title="volume" />
    <revision>
      <id>2659</id>
      <timestamp>2013-03-29T14:22:27Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Volume]] to [[volume]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="20">#REDIRECT [[volume]]</text>
      <sha1>ock8ci8dve611p7nupmd1xpgy5l20yn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Vondur</title>
    <ns>0</ns>
    <id>778</id>
    <revision>
      <id>2264</id>
      <timestamp>2013-03-26T15:15:31Z</timestamp>
      <contributor>
        <username>Vondur</username>
        <id>33</id>
      </contributor>
      <comment>Created page with &quot;Made a number of SP and DM Quake levels, also sources for all the maps are available here: [http://vondur.net]&quot;</comment>
      <text xml:space="preserve" bytes="110">Made a number of SP and DM Quake levels, also sources for all the maps are available here: [http://vondur.net]</text>
      <sha1>g0clh8rqwjjb2g94e9sizdhw3u6dbtv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2266</id>
      <parentid>2264</parentid>
      <timestamp>2013-03-26T15:17:52Z</timestamp>
      <contributor>
        <username>Vondur</username>
        <id>33</id>
      </contributor>
      <text xml:space="preserve" bytes="121">Made a number of SP and DM Quake levels, also sources for all the maps are available here: [http://vondur.net vondur.net]</text>
      <sha1>jqh0hfqjabcuttdnrkf7dxkydq98qgx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Vore</title>
    <ns>0</ns>
    <id>143</id>
    <revision>
      <id>225</id>
      <timestamp>2007-11-02T19:43:40Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: A spideresque hybrid horror. Keep your eye on the firepod he hurls.  * '''Weapon:''' Guided Floating Bombs * '''Health:''' 400 * '''Treasure:''' Nothing  '''Tips:''' Also known as Shalrath...</comment>
      <text xml:space="preserve" bytes="699">A spideresque hybrid horror. Keep your eye on the firepod he hurls.

* '''Weapon:''' Guided Floating Bombs
* '''Health:''' 400
* '''Treasure:''' Nothing

'''Tips:''' Also known as Shalraths, Vores are a very tough opponent that throws floating bombs that will guide themselves around walls. When the Vore throws one, run! Get around a sharp corner, which the bombs can't maneuver around. Your best bet to killing them is hiding around a corner, briefly popping out to fire something big at it (preferably a [[Rocket Launcher|Rocket]]), then hiding again. Repeat until the Vore dies.

'''Entity name:''' [[monster_shalrath]]

[http://wiki.quakesrc.org/files/shalrath.gif]

==See Also==
* [[Monsters]]</text>
      <sha1>7kns78kqne34a54to6fvxc9if7z8yk1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>288</id>
      <parentid>225</parentid>
      <timestamp>2007-11-05T22:24:15Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <text xml:space="preserve" bytes="654">A spideresque hybrid horror. Keep your eye on the firepod he hurls.

* '''Weapon:''' Homing Firepods
* '''Health:''' 400
* '''Treasure:''' Nothing

'''Tips:''' Also known as Shalraths, Vores are a very tough opponent that attack with homing explosive pods. When the Vore throws one, run! Get around a sharp corner, which the pods have difficulty maneuvering around. Your best bet to killing them is hiding around a corner, briefly popping out to fire something big at it (preferably a [[Rocket Launcher|Rocket]]), then hiding again. Repeat until the Vore dies.

[[Image:Shalrath.gif]]

'''Entity name:''' [[monster_shalrath]]

==See Also==
* [[Monsters]]</text>
      <sha1>ho700voacnuud61o3215qi76bfoyygl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>739</id>
      <parentid>288</parentid>
      <timestamp>2008-05-08T13:52:18Z</timestamp>
      <contributor>
        <ip>198.151.13.8</ip>
      </contributor>
      <text xml:space="preserve" bytes="756">A spideresque hybrid horror. Keep your eye on the firepod he hurls.

* '''Weapon:''' Homing Firepods
* '''Health:''' 400
* '''Treasure:''' Nothing

'''Tips:'''
----
Also known as Shalraths, Vores are a very tough opponent that attack with homing explosive pods. When the Vore throws one, run! Get around a sharp corner, which the pods have difficulty maneuvering around. Your best bet to killing them is hiding around a corner, briefly popping out to fire something big at it (preferably a [[Rocket Launcher|Rocket]]), then hiding again. Repeat until the Vore dies.
*'''Best Weapons:''' Rocket Launcher, Super Nailgun
*'''Worst Weapons:''' Shotgun, Super Shotgun

[[Image:Shalrath.gif]]

'''Entity name:''' [[monster_shalrath]]

==See Also==
* [[Monsters]]</text>
      <sha1>nw3ua3dp4i209agz41nlydkuef9b8ek</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>851</id>
      <parentid>739</parentid>
      <timestamp>2008-05-17T18:17:40Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="805">{{Infobox Monster
|monstername=Vore
|entityname=monster_shalrath
|monsterhealth=400
|monstermelee=
|monstermissile=Homing firepod
|movetype=
|monsterspeed=
|monsterclass=
}}

[[Image:Shalrath.gif|left]]

Also known as Shalraths, Vores are a very tough opponent that attack with homing explosive pods. When the Vore throws one, run! Get around a sharp corner, which the pods have difficulty maneuvering around. Your best bet to killing them is hiding around a corner, briefly popping out to fire something big at it (preferably a [[Rocket Launcher|Rocket]]), then hiding again. Repeat until the Vore dies.
*'''Best Weapons:''' Rocket Launcher, Super Nailgun
*'''Worst Weapons:''' Shotgun, Super Shotgun

''&quot;A spideresque hybrid horror. Keep your eye on the firepod he hurls.&quot;''

==See Also==
* [[Monsters]]</text>
      <sha1>4l88ysht5uhs58vhwa9bkzptrrd891l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>856</id>
      <parentid>851</parentid>
      <timestamp>2008-05-17T18:52:05Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="826">{{Infobox Monster
|monstername=Vore
|entityname=monster_shalrath
|monsterhealth=400
|monstermelee=
|monstermissile=Homing firepod
|movetype=
|monsterspeed=
|monsterclass=
|monsterdrop=nothing
}}

[[Image:Shalrath.gif|left]]

Also known as Shalraths, Vores are a very tough opponent that attack with homing explosive pods. When the Vore throws one, run! Get around a sharp corner, which the pods have difficulty maneuvering around. Your best bet to killing them is hiding around a corner, briefly popping out to fire something big at it (preferably a [[Rocket Launcher|Rocket]]), then hiding again. Repeat until the Vore dies.
*'''Best Weapons:''' Rocket Launcher, Super Nailgun
*'''Worst Weapons:''' Shotgun, Super Shotgun

''&quot;A spideresque hybrid horror. Keep your eye on the firepod he hurls.&quot;''

==See Also==
* [[Monsters]]</text>
      <sha1>l3hd5r2zwth8ymtv2crum6y08cxgrid</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1251</id>
      <parentid>856</parentid>
      <timestamp>2009-09-25T08:14:50Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="798">{{Infobox Monster
|name=Vore
|entity=monster_shalrath
|model=shalrath.mdl&lt;br /&gt;h_shal.mdl (head gib)
|health=400
|attacks=Homing firepod
|drop=nothing
|gameversion=Registered
}}
[[Image:Shalrath.gif|left]]
Also known as Shalraths, '''Vores''' are a very tough opponent that attack with homing explosive pods. When the Vore throws one, run! Get around a sharp corner, which the pods have difficulty maneuvering around. Your best bet to killing them is hiding around a corner, briefly popping out to fire something big at it (preferably a [[Rocket Launcher|Rocket]]), then hiding again. Repeat until the Vore dies.
*'''Best Weapons:''' Rocket Launcher, Super Nailgun
*'''Worst Weapons:''' Shotgun, Super Shotgun

''&quot;A spideresque hybrid horror. Keep your eye on the firepod he hurls.&quot;''

{{Monsters}}</text>
      <sha1>ixss7brqzypc60nja0gwpsu069i5iap</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1298</id>
      <parentid>1251</parentid>
      <timestamp>2009-09-27T12:48:11Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="1099">{{Infobox Monster
|name=Vore
|entity=monster_shalrath
|model=shalrath.mdl&lt;br /&gt;h_shal.mdl (head gib)
|health=400
|attacks=Homing firepod
|drop=nothing
|gameversion=Registered
}}
[[Image:Shalrath.gif|left]]
'''Vores''' (also known as Shalraths) are very tough opponents that attack with homing explosive pods. When a Vore throws one, run (fortunately, the firepods don't fly quite as fast as you can run). Get around a sharp corner, which the pods have difficulty maneuvering around. To kill a Vore you will generally have to find cover and get behind it whenever a firepod is hurled at you, popping out regularly to wear the Vore down.

Another useful tactic is to lure the homing pods into another monster, causing the offended monster to fight the Vore while you watch. If you are especially bored, and have enough room, you can run in circles as the Vore throws more and more firepods. Once you have half a dozen or so of these things flying after you, lure them into someone for an extra painful explosion.

''&quot;A spideresque hybrid horror. Keep your eye on the firepod he hurls.&quot;''

{{Monsters}}</text>
      <sha1>7fb7dy02xg856nnyg0vboy6spr58akl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1299</id>
      <parentid>1298</parentid>
      <timestamp>2009-09-27T12:48:50Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="1172">{{Infobox Monster
|name=Vore
|entity=monster_shalrath
|model=shalrath.mdl&lt;br /&gt;h_shal.mdl (head gib)
|health=400
|attacks=Homing firepod
|drop=nothing
|gameversion=Registered
}}
[[Image:Shalrath.gif|left]]
'''Vores''' (also known as Shalraths) are very tough opponents that attack with homing explosive pods. When a Vore throws one, run (fortunately, the firepods don't fly quite as fast as you can run). Get around a sharp corner, which the pods have difficulty maneuvering around. To kill a Vore you will generally have to find cover and get behind it whenever a firepod is hurled at you, popping out regularly to wear the Vore down.

Another useful tactic is to lure the homing pods into another monster, causing the offended monster to fight the Vore while you watch. If you are bored, and have enough room, you can run in circles as the Vore throws more and more firepods. Once you have half a dozen or so of these things flying after you, lure them into someone for an extra painful explosion. These tactics are especially useful in certain user-made maps where ammo is scarce.

''&quot;A spideresque hybrid horror. Keep your eye on the firepod he hurls.&quot;''

{{Monsters}}</text>
      <sha1>q96ze462n3ddtspwyufkno7qbwzi7w7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1300</id>
      <parentid>1299</parentid>
      <timestamp>2009-09-27T12:49:54Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1188">{{Infobox Monster
|name=Vore
|entity=monster_shalrath
|model=shalrath.mdl&lt;br /&gt;h_shal.mdl (head gib)
|health=400
|attacks=Homing firepod
|drop=nothing
|gameversion=Registered
}}
[[Image:Shalrath.gif|left]]
'''Vores''' (also known as Shalraths) are very tough opponents that attack with homing explosive pods. When a Vore throws one, run (fortunately, the firepods don't fly quite as fast as you can run). Get around a sharp corner, which the pods have difficulty maneuvering around. To kill a Vore you will generally have to find cover and get behind it whenever a firepod is hurled at you, popping out regularly to wear the Vore down.

Another useful tactic is to lure the homing pods into another monster, causing the offended monster to [[in-fighting|fight]] the Vore while you watch. If you are bored, and have enough room, you can run in circles as the Vore throws more and more firepods. Once you have half a dozen or so of these things flying after you, lure them into someone for an extra painful explosion. These tactics are especially useful in certain user-made maps where ammo is scarce.

''&quot;A spideresque hybrid horror. Keep your eye on the firepod he hurls.&quot;''

{{Monsters}}</text>
      <sha1>iutgqs4qd1cbu5v828x6tm17q8if6zx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1301</id>
      <parentid>1300</parentid>
      <timestamp>2009-09-27T12:50:18Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1195">{{Infobox Monster
|name=Vore
|entity=monster_shalrath
|model=shalrath.mdl&lt;br /&gt;h_shal.mdl (head gib)
|health=400
|attacks=Homing firepod
|drop=nothing
|gameversion=Registered
}}
[[Image:Shalrath.gif|left]]
'''Vores''' (also known as Shalraths) are very tough opponents that attack with homing explosive pods. When a Vore throws one, run (fortunately, the firepods don't fly quite as fast as you can run). Get around a sharp corner, which the pods have difficulty maneuvering around. To kill a Vore you will generally have to find cover and get behind it whenever a firepod is hurled at you, popping out regularly to wear the Vore down.

Another useful tactic is to lure the homing pods into another monster, causing the offended monster to [[monster infighting|fight]] the Vore while you watch. If you are bored, and have enough room, you can run in circles as the Vore throws more and more firepods. Once you have half a dozen or so of these things flying after you, lure them into someone for an extra painful explosion. These tactics are especially useful in certain user-made maps where ammo is scarce.

''&quot;A spideresque hybrid horror. Keep your eye on the firepod he hurls.&quot;''

{{Monsters}}</text>
      <sha1>8p65r1ubpzlteqwdeiov988bs0uplen</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1391</id>
      <parentid>1301</parentid>
      <timestamp>2009-10-08T23:25:25Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1219">{{Infobox Monster
|name=Vore
|entity=monster_shalrath
|model=shalrath.mdl&lt;br /&gt;h_shal.mdl (head gib)
|health=400
|attacks=Homing firepod
|drop=nothing
|1stappearance=[[e2m6]]
|gameversion=Registered
}}
[[Image:Shalrath.gif|left]]
'''Vores''' (also known as Shalraths) are very tough opponents that attack with homing explosive pods. When a Vore throws one, run (fortunately, the firepods don't fly quite as fast as you can run). Get around a sharp corner, which the pods have difficulty maneuvering around. To kill a Vore you will generally have to find cover and get behind it whenever a firepod is hurled at you, popping out regularly to wear the Vore down.

Another useful tactic is to lure the homing pods into another monster, causing the offended monster to [[monster infighting|fight]] the Vore while you watch. If you are bored, and have enough room, you can run in circles as the Vore throws more and more firepods. Once you have half a dozen or so of these things flying after you, lure them into someone for an extra painful explosion. These tactics are especially useful in certain user-made maps where ammo is scarce.

''&quot;A spideresque hybrid horror. Keep your eye on the firepod he hurls.&quot;''

{{Monsters}}</text>
      <sha1>ep2omge7khi7lwqmw9k4goncs0wnr0w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1404</id>
      <parentid>1391</parentid>
      <timestamp>2009-10-08T23:51:04Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1256">{{Infobox Monster
|name=Vore
|entity=monster_shalrath
|model=shalrath.mdl&lt;br /&gt;h_shal.mdl (head gib)
|health=400
|attacks=Homing firepod
|drop=nothing
|1stappearance=[[e2m6]]
|gameversion=Registered
}}
[[Image:Shalrath.gif|left]]
''&quot;A spideresque hybrid horror. Keep your eye on the firepod he hurls.&quot;''

'''Vores''' (also known as Shalraths) are very tough opponents that attack with homing explosive pods. When a Vore throws one, run (fortunately, the firepods don't fly quite as fast as you can run). Get around a sharp corner, which the pods have difficulty maneuvering around. To kill a Vore you will generally have to find cover and get behind it whenever a firepod is hurled at you, popping out regularly to wear the Vore down.

Another useful tactic is to lure the homing pods into another monster, causing the offended monster to [[monster infighting|fight]] the Vore while you watch. If you are bored, and have enough room, you can run in circles as the Vore throws more and more firepods. Once you have half a dozen or so of these things flying after you, lure them into someone for an extra painful explosion. These tactics are especially useful in certain user-made maps where ammo is scarce.

''&quot;Player was exploded by a Vore&quot;''

{{Monsters}}</text>
      <sha1>pwdae25elwapqhwknactjd3fq54gh0e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1924</id>
      <parentid>1404</parentid>
      <timestamp>2013-03-25T03:39:49Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>fixed image location and file link</comment>
      <text xml:space="preserve" bytes="1257">[[Image:Shalrath.gif|left]]
{{Infobox Monster
|name=Vore
|entity=monster_shalrath
|model=shalrath.mdl&lt;br /&gt;h_shal.mdl (head gib)
|health=400
|attacks=Homing firepod
|drop=nothing
|1stappearance=[[e2m6]]
|gameversion=Registered
}}

''&quot;A spideresque hybrid horror. Keep your eye on the firepod he hurls.&quot;''

'''Vores''' (also known as Shalraths) are very tough opponents that attack with homing explosive pods. When a Vore throws one, run (fortunately, the firepods don't fly quite as fast as you can run). Get around a sharp corner, which the pods have difficulty maneuvering around. To kill a Vore you will generally have to find cover and get behind it whenever a firepod is hurled at you, popping out regularly to wear the Vore down.

Another useful tactic is to lure the homing pods into another monster, causing the offended monster to [[monster infighting|fight]] the Vore while you watch. If you are bored, and have enough room, you can run in circles as the Vore throws more and more firepods. Once you have half a dozen or so of these things flying after you, lure them into someone for an extra painful explosion. These tactics are especially useful in certain user-made maps where ammo is scarce.

''&quot;Player was exploded by a Vore&quot;''

{{Monsters}}</text>
      <sha1>dact6utae541irzsf3hsxmb1s6tlj5e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2770</id>
      <parentid>1924</parentid>
      <timestamp>2013-04-06T13:03:09Z</timestamp>
      <contributor>
        <ip>78.37.177.189</ip>
      </contributor>
      <text xml:space="preserve" bytes="1292">[[Image:Shalrath.gif|left]]
{{Infobox Monster
|name=Vore
|entity=monster_shalrath
|model=shalrath.mdl&lt;br /&gt;h_shal.mdl (head gib)
|health=400
|attacks=Homing firepod (does 40 damage, but gibs zombies)
|drop=nothing
|1stappearance=[[e2m6]]
|gameversion=Registered
}}

''&quot;A spideresque hybrid horror. Keep your eye on the firepod he hurls.&quot;''

'''Vores''' (also known as Shalraths) are very tough opponents that attack with homing explosive pods. When a Vore throws one, run (fortunately, the firepods don't fly quite as fast as you can run). Get around a sharp corner, which the pods have difficulty maneuvering around. To kill a Vore you will generally have to find cover and get behind it whenever a firepod is hurled at you, popping out regularly to wear the Vore down.

Another useful tactic is to lure the homing pods into another monster, causing the offended monster to [[monster infighting|fight]] the Vore while you watch. If you are bored, and have enough room, you can run in circles as the Vore throws more and more firepods. Once you have half a dozen or so of these things flying after you, lure them into someone for an extra painful explosion. These tactics are especially useful in certain user-made maps where ammo is scarce.

''&quot;Player was exploded by a Vore&quot;''

{{Monsters}}</text>
      <sha1>78t8lew8w4dg8i6kt8ff8o1mqx4ugdv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2771</id>
      <parentid>2770</parentid>
      <timestamp>2013-04-06T13:24:30Z</timestamp>
      <contributor>
        <ip>78.37.177.189</ip>
      </contributor>
      <text xml:space="preserve" bytes="1333">[[Image:Shalrath.gif|left]]
{{Infobox Monster
|name=Vore
|entity=monster_shalrath
|model=shalrath.mdl&lt;br /&gt;h_shal.mdl (head gib)
|health=400
|attacks=Homing firepod (does 40 damage, but gibs zombies)
|drop=nothing
|1stappearance=[[e2m6]]
|gameversion=Registered
}}

''&quot;A spideresque hybrid horror. Keep your eye on the firepod he hurls.&quot;''

'''Vores''' (also known as Shalraths) are very tough opponents that attack with homing explosive pods. When a Vore throws one, run. Fortunately, the firepods don't fly quite as fast as you can run (unless you play on Nightmare difficulty). Get around a sharp corner, which the pods have difficulty maneuvering around. To kill a Vore you will generally have to find cover and get behind it whenever a firepod is hurled at you, popping out regularly to wear the Vore down.

Another useful tactic is to lure the homing pods into another monster, causing the offended monster to [[monster infighting|fight]] the Vore while you watch. If you are bored, and have enough room, you can run in circles as the Vore throws more and more firepods. Once you have half a dozen or so of these things flying after you, lure them into someone for an extra painful explosion. These tactics are especially useful in certain user-made maps where ammo is scarce.

''&quot;Player was exploded by a Vore&quot;''

{{Monsters}}</text>
      <sha1>izgmeaiqn4zov4hxw7lliz3fbr9emzy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2772</id>
      <parentid>2771</parentid>
      <timestamp>2013-04-06T13:29:36Z</timestamp>
      <contributor>
        <ip>78.37.177.189</ip>
      </contributor>
      <text xml:space="preserve" bytes="1435">[[Image:Shalrath.gif|left]]
{{Infobox Monster
|name=Vore
|entity=monster_shalrath
|model=shalrath.mdl&lt;br /&gt;h_shal.mdl (head gib)
|health=400
|attacks=Homing firepod (40 dmg)
|drop=nothing
|1stappearance=[[e2m6]]
|gameversion=Registered
}}

''&quot;A spideresque hybrid horror. Keep your eye on the firepod he hurls.&quot;''

'''Vores''' (also known as Shalraths) are very tough opponents that attack with homing explosive pods that deal 40 damage (but extra damage vs [[Zombie|Zombies]] gibbing them). When a Vore throws one, run. Fortunately, the firepods don't fly quite as fast as you can run (unless you play on Nightmare difficulty). Get around a sharp corner, which the pods have difficulty maneuvering around. To kill a Vore you will generally have to find cover and get behind it whenever a firepod is hurled at you, popping out regularly to wear the Vore down.

Another useful tactic is to lure the homing pods into another monster, causing the offended monster to [[monster infighting|fight]] the Vore while you watch. Note that Vores projectiles don't explode on himself. If you are bored, and have enough room, you can run in circles as the Vore throws more and more firepods. Once you have half a dozen or so of these things flying after you, lure them into someone for an extra painful explosion. These tactics are especially useful in certain user-made maps where ammo is scarce.

''&quot;Player was exploded by a Vore&quot;''

{{Monsters}}</text>
      <sha1>8koh1n24pq9ba8l530zxb4p6o94cw7a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2774</id>
      <parentid>2772</parentid>
      <timestamp>2013-04-06T13:48:01Z</timestamp>
      <contributor>
        <ip>78.37.177.189</ip>
      </contributor>
      <text xml:space="preserve" bytes="1443">[[Image:Shalrath.gif|left]]
{{Infobox Monster
|name=Vore
|entity=monster_shalrath
|model=shalrath.mdl&lt;br /&gt;h_shal.mdl (head gib)
|health=400
|attacks=Homing firepod (~30 dmg)
|drop=nothing
|1stappearance=[[e2m6]]
|gameversion=Registered
}}

''&quot;A spideresque hybrid horror. Keep your eye on the firepod he hurls.&quot;''

'''Vores''' (also known as Shalraths) are very tough opponents that attack with homing explosive pods that deal about ~30 damage (but extra damage vs [[Zombie|Zombies]] gibbing them). When a Vore throws one, run. Fortunately, the firepods don't fly quite as fast as you can run (unless you play on Nightmare difficulty). Get around a sharp corner, which the pods have difficulty maneuvering around. To kill a Vore you will generally have to find cover and get behind it whenever a firepod is hurled at you, popping out regularly to wear the Vore down.

Another useful tactic is to lure the homing pods into another monster, causing the offended monster to [[monster infighting|fight]] the Vore while you watch. Note that Vores projectiles don't explode on himself. If you are bored, and have enough room, you can run in circles as the Vore throws more and more firepods. Once you have half a dozen or so of these things flying after you, lure them into someone for an extra painful explosion. These tactics are especially useful in certain user-made maps where ammo is scarce.

''&quot;Player was exploded by a Vore&quot;''

{{Monsters}}</text>
      <sha1>qn3bkx7n07fo2f426d6nknqs2t9cz3a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2775</id>
      <parentid>2774</parentid>
      <timestamp>2013-04-06T13:48:28Z</timestamp>
      <contributor>
        <ip>78.37.177.189</ip>
      </contributor>
      <text xml:space="preserve" bytes="1442">[[Image:Shalrath.gif|left]]
{{Infobox Monster
|name=Vore
|entity=monster_shalrath
|model=shalrath.mdl&lt;br /&gt;h_shal.mdl (head gib)
|health=400
|attacks=Homing firepod(~30 dmg)
|drop=nothing
|1stappearance=[[e2m6]]
|gameversion=Registered
}}

''&quot;A spideresque hybrid horror. Keep your eye on the firepod he hurls.&quot;''

'''Vores''' (also known as Shalraths) are very tough opponents that attack with homing explosive pods that deal about ~30 damage (but extra damage vs [[Zombie|Zombies]] gibbing them). When a Vore throws one, run. Fortunately, the firepods don't fly quite as fast as you can run (unless you play on Nightmare difficulty). Get around a sharp corner, which the pods have difficulty maneuvering around. To kill a Vore you will generally have to find cover and get behind it whenever a firepod is hurled at you, popping out regularly to wear the Vore down.

Another useful tactic is to lure the homing pods into another monster, causing the offended monster to [[monster infighting|fight]] the Vore while you watch. Note that Vores projectiles don't explode on himself. If you are bored, and have enough room, you can run in circles as the Vore throws more and more firepods. Once you have half a dozen or so of these things flying after you, lure them into someone for an extra painful explosion. These tactics are especially useful in certain user-made maps where ammo is scarce.

''&quot;Player was exploded by a Vore&quot;''

{{Monsters}}</text>
      <sha1>4zi5senrvopa3s18e4okpy42m3rohpr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2812</id>
      <parentid>2775</parentid>
      <timestamp>2013-04-08T12:07:38Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>replaced Vore with new combined Monster / mapping info page</comment>
      <text xml:space="preserve" bytes="6306">{{DISPLAYTITLE:Vore}}
{{Infobox Monster
| image = Shalrath.gif
| name = Vore
| health = 400
| attacks = Homing firepod (~30 dmg)
| drop = nothing
| 1stappearance = [[e2m6]]
| gameversion = Registered
| manualtext = A spideresque hybrid horror. Keep your eye on the firepod he hurls.
| deathmessage = Player was exploded by a Vore
}}

The '''Vore''' (also known as a Shalrath) is one of the toughest regular enemies the player will encounter in Quake. It is a three-legged monster that moves very slowly, but throws spiked bombs that home in on the player's position, making them often one of the trickiest enemies to deal with, especially in combination with other enemies.

The homing firepods (more commonly known as Voreballs) that are thrown by the vore can follow the player around quite sharp corners when close enough, and do not explode until they collide with something. This can make them very tricky for a player to shake, especially on [[Nightmare difficulty]], where they are fired more frequently and move faster than on lower skill levels.

==Tactics==
Because of the danger posed by Voreballs, fighting Vores in large open spaces, or where the player is exposed but cannot easily move around (such as on a ledge) is not usually done. Many players deal with Vores from a position that provides cover and enables them to shoot at the Vore, then duck into cover until the Voreball explodes before re-emerging to continue their attack and wear the Vore down.

When fighting Vores in an open space, Voreballs will tend to accumulate in a trail behind a constantly moving player. Voreballs that are following the player can be used against other enemies quite easily, and by simply moving behind another enemy so that it is blocking the path of the Voreball, the player can start [[monster infighting]] to save both ammunition and time.

Since Voreballs will home toward the player gradually, they will often fly around obstacles that are otherwise blocking their path to the player when following very close behind. The best way to safely dispose of closely trailing Voreballs is usually to move quickly around a series of sharp corners, or run in a circle around a pillar or other obstacle. However, if the Voreball gets too close, it can become impossible to avoid in a conventional manner.

==Relationship with other monsters==
Because Vores fire projectiles, and especially because these projectiles can be directed somewhat by crafty players, Vores often get into fights with other monsters. If the vore attracts the attention of multiple monsters, its slow speed often leads to it being killed by even weaker enemies such as [[Scrag|Scrags]].

One particular thing to note about the Vore is that it is one of the few monsters capable of gibbing a [[Zombie]]. This is enabled by a special case in the Voreball code that causes them to inflict extra damage to Zombies - 110 points of damage versus the standard 40 points.

==Tricks==
Because Voreballs follow the player, they can be quite easy to use as a propellant for doing tricks. Since it is possible to run in circles and accumulate trailing Voreballs, it is possible to do Voreball jumps using more than one Voreball at a time, allowing a skilled player to jump extremely high.

&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_shalrath
| commonname = [[Vore]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 72
| quakec = [[shalrath.qc]]
| precaches =
progs/shalrath.mdl&lt;br&gt;
progs/h_shal.mdl&lt;br&gt;
progs/v_spike.mdl&lt;br&gt;
shalrath/attack.wav&lt;br&gt;
shalrath/attack2.wav&lt;br&gt;
shalrath/death.wav&lt;br&gt;
shalrath/idle.wav&lt;br&gt;
shalrath/pain.wav&lt;br&gt;
shalrath/sight.wav&lt;br&gt;
}}

==Entity information==

'''monster_shalrath''' is the [[Entity|entity]] for placing '''Vores''' in a level.

===Usage===
Vores are best placed where there is not too much easy cover, so that the player has to move around, or even run away to avoid getting hit by the homing bombs the Vore fires. Giving the player too much cover can make Vores boring to fight, as the player can safely take potshots without ever really having to worry about Voreballs hitting them.

Vores actually work quite well in open areas with little cover, as it forces the player to run from the Voreballs, and can lead them to drawing the Voreballs into other enemies to create [[Monster_infighting|monster infighting]] situations.

Using Vores in areas with cover can work if there are multiple Vores, making it difficult for the player to hide completely out of sight from ''all'' the Vores at any one time. Adding other monsters at ground level to keep the player from standing in cover also works well.

===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Vore. When triggered, the Vore will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Vore dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Vore dies.
|}

====Spawnflags====
The monster_vore entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Vore will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Vore
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-32 -32 -24, 32 32 48) model(&quot;:progs/shalrath.mdl&quot;)
    = monster_shalrath : &quot;Vore&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_shalrath (1 0 0) (-32 -32 -24) (32 32 48) AMBUSH
Vore (Shalrath), 400 health points.

Flags:
&quot;ambush&quot; -  the monster will only wake up on really seeing the player,
            not another monster getting angry
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>ij1xlh6vyooj5xxqy10mt1z0bfrcnzb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2815</id>
      <parentid>2812</parentid>
      <timestamp>2013-04-08T13:27:28Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>changed image</comment>
      <text xml:space="preserve" bytes="6316">{{DISPLAYTITLE:Vore}}
{{Infobox Monster
| image = monster_quake_vore.gif
| name = Vore
| health = 400
| attacks = Homing firepod (~30 dmg)
| drop = nothing
| 1stappearance = [[e2m6]]
| gameversion = Registered
| manualtext = A spideresque hybrid horror. Keep your eye on the firepod he hurls.
| deathmessage = Player was exploded by a Vore
}}

The '''Vore''' (also known as a Shalrath) is one of the toughest regular enemies the player will encounter in Quake. It is a three-legged monster that moves very slowly, but throws spiked bombs that home in on the player's position, making them often one of the trickiest enemies to deal with, especially in combination with other enemies.

The homing firepods (more commonly known as Voreballs) that are thrown by the vore can follow the player around quite sharp corners when close enough, and do not explode until they collide with something. This can make them very tricky for a player to shake, especially on [[Nightmare difficulty]], where they are fired more frequently and move faster than on lower skill levels.

==Tactics==
Because of the danger posed by Voreballs, fighting Vores in large open spaces, or where the player is exposed but cannot easily move around (such as on a ledge) is not usually done. Many players deal with Vores from a position that provides cover and enables them to shoot at the Vore, then duck into cover until the Voreball explodes before re-emerging to continue their attack and wear the Vore down.

When fighting Vores in an open space, Voreballs will tend to accumulate in a trail behind a constantly moving player. Voreballs that are following the player can be used against other enemies quite easily, and by simply moving behind another enemy so that it is blocking the path of the Voreball, the player can start [[monster infighting]] to save both ammunition and time.

Since Voreballs will home toward the player gradually, they will often fly around obstacles that are otherwise blocking their path to the player when following very close behind. The best way to safely dispose of closely trailing Voreballs is usually to move quickly around a series of sharp corners, or run in a circle around a pillar or other obstacle. However, if the Voreball gets too close, it can become impossible to avoid in a conventional manner.

==Relationship with other monsters==
Because Vores fire projectiles, and especially because these projectiles can be directed somewhat by crafty players, Vores often get into fights with other monsters. If the vore attracts the attention of multiple monsters, its slow speed often leads to it being killed by even weaker enemies such as [[Scrag|Scrags]].

One particular thing to note about the Vore is that it is one of the few monsters capable of gibbing a [[Zombie]]. This is enabled by a special case in the Voreball code that causes them to inflict extra damage to Zombies - 110 points of damage versus the standard 40 points.

==Tricks==
Because Voreballs follow the player, they can be quite easy to use as a propellant for doing tricks. Since it is possible to run in circles and accumulate trailing Voreballs, it is possible to do Voreball jumps using more than one Voreball at a time, allowing a skilled player to jump extremely high.

&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_shalrath
| commonname = [[Vore]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 72
| quakec = [[shalrath.qc]]
| precaches =
progs/shalrath.mdl&lt;br&gt;
progs/h_shal.mdl&lt;br&gt;
progs/v_spike.mdl&lt;br&gt;
shalrath/attack.wav&lt;br&gt;
shalrath/attack2.wav&lt;br&gt;
shalrath/death.wav&lt;br&gt;
shalrath/idle.wav&lt;br&gt;
shalrath/pain.wav&lt;br&gt;
shalrath/sight.wav&lt;br&gt;
}}

==Entity information==

'''monster_shalrath''' is the [[Entity|entity]] for placing '''Vores''' in a level.

===Usage===
Vores are best placed where there is not too much easy cover, so that the player has to move around, or even run away to avoid getting hit by the homing bombs the Vore fires. Giving the player too much cover can make Vores boring to fight, as the player can safely take potshots without ever really having to worry about Voreballs hitting them.

Vores actually work quite well in open areas with little cover, as it forces the player to run from the Voreballs, and can lead them to drawing the Voreballs into other enemies to create [[Monster_infighting|monster infighting]] situations.

Using Vores in areas with cover can work if there are multiple Vores, making it difficult for the player to hide completely out of sight from ''all'' the Vores at any one time. Adding other monsters at ground level to keep the player from standing in cover also works well.

===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Vore. When triggered, the Vore will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Vore dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Vore dies.
|}

====Spawnflags====
The monster_vore entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Vore will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Vore
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-32 -32 -24, 32 32 48) model(&quot;:progs/shalrath.mdl&quot;)
    = monster_shalrath : &quot;Vore&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_shalrath (1 0 0) (-32 -32 -24) (32 32 48) AMBUSH
Vore (Shalrath), 400 health points.

Flags:
&quot;ambush&quot; -  the monster will only wake up on really seeing the player,
            not another monster getting angry
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>8h47mw8o87k6nhei2japtld7y6h2mzs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2816</id>
      <parentid>2815</parentid>
      <timestamp>2013-04-08T13:28:10Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>fixed image. Note to self: I am a retard.</comment>
      <text xml:space="preserve" bytes="6316">{{DISPLAYTITLE:Vore}}
{{Infobox Monster
| image = monster_quake_vore.png
| name = Vore
| health = 400
| attacks = Homing firepod (~30 dmg)
| drop = nothing
| 1stappearance = [[e2m6]]
| gameversion = Registered
| manualtext = A spideresque hybrid horror. Keep your eye on the firepod he hurls.
| deathmessage = Player was exploded by a Vore
}}

The '''Vore''' (also known as a Shalrath) is one of the toughest regular enemies the player will encounter in Quake. It is a three-legged monster that moves very slowly, but throws spiked bombs that home in on the player's position, making them often one of the trickiest enemies to deal with, especially in combination with other enemies.

The homing firepods (more commonly known as Voreballs) that are thrown by the vore can follow the player around quite sharp corners when close enough, and do not explode until they collide with something. This can make them very tricky for a player to shake, especially on [[Nightmare difficulty]], where they are fired more frequently and move faster than on lower skill levels.

==Tactics==
Because of the danger posed by Voreballs, fighting Vores in large open spaces, or where the player is exposed but cannot easily move around (such as on a ledge) is not usually done. Many players deal with Vores from a position that provides cover and enables them to shoot at the Vore, then duck into cover until the Voreball explodes before re-emerging to continue their attack and wear the Vore down.

When fighting Vores in an open space, Voreballs will tend to accumulate in a trail behind a constantly moving player. Voreballs that are following the player can be used against other enemies quite easily, and by simply moving behind another enemy so that it is blocking the path of the Voreball, the player can start [[monster infighting]] to save both ammunition and time.

Since Voreballs will home toward the player gradually, they will often fly around obstacles that are otherwise blocking their path to the player when following very close behind. The best way to safely dispose of closely trailing Voreballs is usually to move quickly around a series of sharp corners, or run in a circle around a pillar or other obstacle. However, if the Voreball gets too close, it can become impossible to avoid in a conventional manner.

==Relationship with other monsters==
Because Vores fire projectiles, and especially because these projectiles can be directed somewhat by crafty players, Vores often get into fights with other monsters. If the vore attracts the attention of multiple monsters, its slow speed often leads to it being killed by even weaker enemies such as [[Scrag|Scrags]].

One particular thing to note about the Vore is that it is one of the few monsters capable of gibbing a [[Zombie]]. This is enabled by a special case in the Voreball code that causes them to inflict extra damage to Zombies - 110 points of damage versus the standard 40 points.

==Tricks==
Because Voreballs follow the player, they can be quite easy to use as a propellant for doing tricks. Since it is possible to run in circles and accumulate trailing Voreballs, it is possible to do Voreball jumps using more than one Voreball at a time, allowing a skilled player to jump extremely high.

&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_shalrath
| commonname = [[Vore]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 72
| quakec = [[shalrath.qc]]
| precaches =
progs/shalrath.mdl&lt;br&gt;
progs/h_shal.mdl&lt;br&gt;
progs/v_spike.mdl&lt;br&gt;
shalrath/attack.wav&lt;br&gt;
shalrath/attack2.wav&lt;br&gt;
shalrath/death.wav&lt;br&gt;
shalrath/idle.wav&lt;br&gt;
shalrath/pain.wav&lt;br&gt;
shalrath/sight.wav&lt;br&gt;
}}

==Entity information==

'''monster_shalrath''' is the [[Entity|entity]] for placing '''Vores''' in a level.

===Usage===
Vores are best placed where there is not too much easy cover, so that the player has to move around, or even run away to avoid getting hit by the homing bombs the Vore fires. Giving the player too much cover can make Vores boring to fight, as the player can safely take potshots without ever really having to worry about Voreballs hitting them.

Vores actually work quite well in open areas with little cover, as it forces the player to run from the Voreballs, and can lead them to drawing the Voreballs into other enemies to create [[Monster_infighting|monster infighting]] situations.

Using Vores in areas with cover can work if there are multiple Vores, making it difficult for the player to hide completely out of sight from ''all'' the Vores at any one time. Adding other monsters at ground level to keep the player from standing in cover also works well.

===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Vore. When triggered, the Vore will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Vore dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Vore dies.
|}

====Spawnflags====
The monster_vore entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Vore will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Vore
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-32 -32 -24, 32 32 48) model(&quot;:progs/shalrath.mdl&quot;)
    = monster_shalrath : &quot;Vore&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_shalrath (1 0 0) (-32 -32 -24) (32 32 48) AMBUSH
Vore (Shalrath), 400 health points.

Flags:
&quot;ambush&quot; -  the monster will only wake up on really seeing the player,
            not another monster getting angry
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>8lgnjasq9wmd6zmn4mctu6ghrr1r9bb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2858</id>
      <parentid>2816</parentid>
      <timestamp>2013-04-08T15:18:10Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>/* DEF Definition */  cleaned out DEF comments because it's pointless to leave in</comment>
      <text xml:space="preserve" bytes="6155">{{DISPLAYTITLE:Vore}}
{{Infobox Monster
| image = monster_quake_vore.png
| name = Vore
| health = 400
| attacks = Homing firepod (~30 dmg)
| drop = nothing
| 1stappearance = [[e2m6]]
| gameversion = Registered
| manualtext = A spideresque hybrid horror. Keep your eye on the firepod he hurls.
| deathmessage = Player was exploded by a Vore
}}

The '''Vore''' (also known as a Shalrath) is one of the toughest regular enemies the player will encounter in Quake. It is a three-legged monster that moves very slowly, but throws spiked bombs that home in on the player's position, making them often one of the trickiest enemies to deal with, especially in combination with other enemies.

The homing firepods (more commonly known as Voreballs) that are thrown by the vore can follow the player around quite sharp corners when close enough, and do not explode until they collide with something. This can make them very tricky for a player to shake, especially on [[Nightmare difficulty]], where they are fired more frequently and move faster than on lower skill levels.

==Tactics==
Because of the danger posed by Voreballs, fighting Vores in large open spaces, or where the player is exposed but cannot easily move around (such as on a ledge) is not usually done. Many players deal with Vores from a position that provides cover and enables them to shoot at the Vore, then duck into cover until the Voreball explodes before re-emerging to continue their attack and wear the Vore down.

When fighting Vores in an open space, Voreballs will tend to accumulate in a trail behind a constantly moving player. Voreballs that are following the player can be used against other enemies quite easily, and by simply moving behind another enemy so that it is blocking the path of the Voreball, the player can start [[monster infighting]] to save both ammunition and time.

Since Voreballs will home toward the player gradually, they will often fly around obstacles that are otherwise blocking their path to the player when following very close behind. The best way to safely dispose of closely trailing Voreballs is usually to move quickly around a series of sharp corners, or run in a circle around a pillar or other obstacle. However, if the Voreball gets too close, it can become impossible to avoid in a conventional manner.

==Relationship with other monsters==
Because Vores fire projectiles, and especially because these projectiles can be directed somewhat by crafty players, Vores often get into fights with other monsters. If the vore attracts the attention of multiple monsters, its slow speed often leads to it being killed by even weaker enemies such as [[Scrag|Scrags]].

One particular thing to note about the Vore is that it is one of the few monsters capable of gibbing a [[Zombie]]. This is enabled by a special case in the Voreball code that causes them to inflict extra damage to Zombies - 110 points of damage versus the standard 40 points.

==Tricks==
Because Voreballs follow the player, they can be quite easy to use as a propellant for doing tricks. Since it is possible to run in circles and accumulate trailing Voreballs, it is possible to do Voreball jumps using more than one Voreball at a time, allowing a skilled player to jump extremely high.

&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_shalrath
| commonname = [[Vore]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 72
| quakec = [[shalrath.qc]]
| precaches =
progs/shalrath.mdl&lt;br&gt;
progs/h_shal.mdl&lt;br&gt;
progs/v_spike.mdl&lt;br&gt;
shalrath/attack.wav&lt;br&gt;
shalrath/attack2.wav&lt;br&gt;
shalrath/death.wav&lt;br&gt;
shalrath/idle.wav&lt;br&gt;
shalrath/pain.wav&lt;br&gt;
shalrath/sight.wav&lt;br&gt;
}}

==Entity information==

'''monster_shalrath''' is the [[Entity|entity]] for placing '''Vores''' in a level.

===Usage===
Vores are best placed where there is not too much easy cover, so that the player has to move around, or even run away to avoid getting hit by the homing bombs the Vore fires. Giving the player too much cover can make Vores boring to fight, as the player can safely take potshots without ever really having to worry about Voreballs hitting them.

Vores actually work quite well in open areas with little cover, as it forces the player to run from the Voreballs, and can lead them to drawing the Voreballs into other enemies to create [[Monster_infighting|monster infighting]] situations.

Using Vores in areas with cover can work if there are multiple Vores, making it difficult for the player to hide completely out of sight from ''all'' the Vores at any one time. Adding other monsters at ground level to keep the player from standing in cover also works well.

===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Vore. When triggered, the Vore will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Vore dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Vore dies.
|}

====Spawnflags====
The monster_vore entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Vore will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Vore
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-32 -32 -24, 32 32 48) model(&quot;:progs/shalrath.mdl&quot;)
    = monster_shalrath : &quot;Vore&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_shalrath (1 0 0) (-32 -32 -24) (32 32 48) AMBUSH
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>634nd2xt6bgwnv504q3h7g8i98wuvwb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2952</id>
      <parentid>2858</parentid>
      <timestamp>2013-05-04T16:35:15Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="6501">{{DISPLAYTITLE:Vore}}
{{Infobox Monster
| image = monster_quake_vore.png
| name = Vore
| health = 400
| gibthresh = -90
| attacks = Homing firepod (~30 dmg)
| drop = nothing
| 1stappearance = [[e2m6]]
| gameversion = Registered
| manualtext = A spideresque hybrid horror. Keep your eye on the firepod he hurls.
| deathmessage = Player was exploded by a Vore
}}

The '''Vore''' (also known as a ''Shalrath'') is one of the toughest regular enemies the player will encounter in Quake. It is a three-legged monster that moves very slowly, but throws spiked bombs that home in on the player's position, making them often one of the trickiest enemies to deal with, especially in combination with other enemies.

The homing firepods (more commonly known as Voreballs or Vorespikes) that are thrown by the vore can follow the player around quite sharp corners when close enough, and do not explode until they collide with something. This can make them very tricky for a player to shake, especially on [[Nightmare difficulty]], where they are fired more frequently and move faster than on lower skill levels.

==Tactics==
Because of the danger posed by Voreballs, fighting Vores in large open spaces, or where the player is exposed but cannot easily move around (such as on a ledge) is not usually done. Many players deal with Vores from a position that provides cover and enables them to shoot at the Vore, then duck into cover until the Voreball explodes before re-emerging to continue their attack and wear the Vore down.

When fighting Vores in an open space, Voreballs will tend to accumulate in a trail behind a constantly moving player. Voreballs that are following the player can be used against other enemies quite easily, and by simply moving behind another enemy so that it is blocking the path of the Voreball, the player can start [[monster infighting]] to save both ammunition and time.

Since Voreballs will home toward the player gradually, they will often fly around obstacles that are otherwise blocking their path to the player when following very close behind. The best way to safely dispose of closely trailing Voreballs is usually to move quickly around a series of sharp corners, or run in a circle around a pillar or other obstacle. However, if the Voreball gets too close, it can become impossible to avoid in a conventional manner.

Additionally, it's important to know that the vore takes the full [[splash damage]] from its own spike. Skilled players can exploit the level geometry to make the vore balls explode almost immediately upon launch, thus gradually wearing the vore down with next to none detriment to own health and ammo supply.
==Relationship with other monsters==
Because Vores fire projectiles, and especially because these projectiles can be directed somewhat by crafty players, Vores often get into fights with other monsters. If the vore attracts the attention of multiple monsters, its slow speed often leads to it being killed by even weaker enemies such as [[Scrag|Scrags]].

One particular thing to note about the Vore is that it is one of the few monsters capable of gibbing a [[Zombie]]. This is enabled by a special case in the Voreball code that causes them to inflict extra damage to Zombies - 110 points of damage versus the standard 40 points.

==Tricks==
Because Voreballs follow the player, they can be quite easy to use as a propellant for doing tricks. Since it is possible to run in circles and accumulate trailing Voreballs, it is possible to do Voreball jumps using more than one Voreball at a time, allowing a skilled player to jump extremely high.

&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_shalrath
| commonname = [[Vore]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 72
| quakec = [[shalrath.qc]]
| precaches =
progs/shalrath.mdl&lt;br&gt;
progs/h_shal.mdl&lt;br&gt;
progs/v_spike.mdl&lt;br&gt;
shalrath/attack.wav&lt;br&gt;
shalrath/attack2.wav&lt;br&gt;
shalrath/death.wav&lt;br&gt;
shalrath/idle.wav&lt;br&gt;
shalrath/pain.wav&lt;br&gt;
shalrath/sight.wav&lt;br&gt;
}}

==Entity information==

'''monster_shalrath''' is the [[Entity|entity]] for placing '''Vores''' in a level.

===Usage===
Vores are best placed where there is not too much easy cover, so that the player has to move around, or even run away to avoid getting hit by the homing bombs the Vore fires. Giving the player too much cover can make Vores boring to fight, as the player can safely take potshots without ever really having to worry about Voreballs hitting them.

Vores actually work quite well in open areas with little cover, as it forces the player to run from the Voreballs, and can lead them to drawing the Voreballs into other enemies to create [[Monster_infighting|monster infighting]] situations.

Using Vores in areas with cover can work if there are multiple Vores, making it difficult for the player to hide completely out of sight from ''all'' the Vores at any one time. Adding other monsters at ground level to keep the player from standing in cover also works well.

===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Vore. When triggered, the Vore will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Vore dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Vore dies.
|}

====Spawnflags====
The monster_vore entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Vore will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Vore
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-32 -32 -24, 32 32 48) model(&quot;:progs/shalrath.mdl&quot;)
    = monster_shalrath : &quot;Vore&quot; []
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_shalrath (1 0 0) (-32 -32 -24) (32 32 48) AMBUSH
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>d9ygmbjkn0g4lb2ydtf2o3rv7jw644l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Vtos</title>
    <ns>0</ns>
    <id>196</id>
    <revision>
      <id>372</id>
      <timestamp>2008-02-22T19:37:36Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  string '''vtos'''(vector ''v'')  Vector to String: Returns a vector v as a string. This string looks like the declaration of a vector:  Example: ' 0.0  0.0  0.0 '</comment>
      <text xml:space="preserve" bytes="163"> string '''vtos'''(vector ''v'')

Vector to String: Returns a vector v as a string. This string looks like the declaration of a vector:

Example: ' 0.0  0.0  0.0 '</text>
      <sha1>1vj0bw639088nq7sr5z08qqmqsumgas</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>W LoadWadFile : couldn't load gfx.wad</title>
    <ns>0</ns>
    <id>490</id>
    <revision>
      <id>1005</id>
      <timestamp>2009-05-23T13:37:05Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>wait, another dirty quick guide?</comment>
      <text xml:space="preserve" bytes="709">This error messages hints at a problem with your Quake installation. The file structure should resemble this:
&lt;pre&gt;
Your Quake Directory (directory)
  \--ID1 (directory)
      \--PAK0.PAK (file)
      \--PAK1.PAK (file, not necessary if you just want to play the shareware/demo)
  \--QUAKE.EXE (glquake.exe or whatever) (file)
&lt;/pre&gt;
In plain text: Inside your Quake directory there must be a directory called ID1. Inside the ID1 directory there must be the files PAK0.PAK and PAK1.PAK. The executable must be in the Quake directory.

If you cannot figure out what is wrong, try reinstalling.

Linux/MacOS users have to make sure all files and directories are '''lowercase'''. On Windows this does not matter.</text>
      <sha1>j33h6sdus4y3h4yyx87flage1cjz4m0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1009</id>
      <parentid>1005</parentid>
      <timestamp>2009-05-26T00:50:15Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="982">This error has at least two possible causes:

1. Running the quake executable with the wrong working directory (could be a problem with the batch file or command line.)

Example of a problem batch file:
&lt;pre&gt;
games\quake\quake.exe
&lt;/pre&gt;
The fixed batch file:
&lt;pre&gt;
cd games\quake
quake.exe
&lt;/pre&gt;

2. A problem with your Quake installation. The file structure should resemble this:
&lt;pre&gt;
Your Quake Directory (directory)
  \--ID1 (directory)
      \--PAK0.PAK (file)
      \--PAK1.PAK (file, not necessary if you just want to play the shareware/demo)
  \--QUAKE.EXE (glquake.exe or whatever) (file)
&lt;/pre&gt;
In plain text: Inside your Quake directory there must be a directory called ID1. Inside the ID1 directory there must be the files PAK0.PAK and PAK1.PAK. The executable must be in the Quake directory.

If you cannot figure out what is wrong, try reinstalling.

Linux/MacOS users have to make sure all files and directories are '''lowercase'''. On Windows this does not matter.</text>
      <sha1>ek5bbuxgn0c4zydqhihtcxzgphfq3t0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1013</id>
      <parentid>1009</parentid>
      <timestamp>2009-05-26T20:42:42Z</timestamp>
      <contributor>
        <username>Metlslime</username>
        <id>15</id>
      </contributor>
      <text xml:space="preserve" bytes="993">This error has at least two possible causes:

==1. Running the quake executable with the wrong working directory==

This could be a problem with the batch file or command line. Example of a problem batch file:
&lt;pre&gt;
games\quake\quake.exe
&lt;/pre&gt;
The fixed batch file:
&lt;pre&gt;
cd games\quake
quake.exe
&lt;/pre&gt;

==2. A problem with your Quake installation==

The file structure should resemble this:
&lt;pre&gt;
Your Quake Directory (directory)
  \--ID1 (directory)
      \--PAK0.PAK (file)
      \--PAK1.PAK (file, not necessary if you just want to play the shareware/demo)
  \--QUAKE.EXE (glquake.exe or whatever) (file)
&lt;/pre&gt;
In plain text: Inside your Quake directory there must be a directory called ID1. Inside the ID1 directory there must be the files PAK0.PAK and PAK1.PAK. The executable must be in the Quake directory.

If you cannot figure out what is wrong, try reinstalling.

Linux/MacOS users have to make sure all files and directories are '''lowercase'''. On Windows this does not matter.</text>
      <sha1>90nuvlbswr1xom8yuj6no0txfmsk011</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3239</id>
      <parentid>1013</parentid>
      <timestamp>2014-06-07T23:39:00Z</timestamp>
      <contributor>
        <ip>192.168.4.107</ip>
      </contributor>
      <comment>lowercase for filenames</comment>
      <text xml:space="preserve" bytes="993">This error has at least two possible causes:

==1. Running the quake executable with the wrong working directory==

This could be a problem with the batch file or command line. Example of a problem batch file:
&lt;pre&gt;
games\quake\quake.exe
&lt;/pre&gt;
The fixed batch file:
&lt;pre&gt;
cd games\quake
quake.exe
&lt;/pre&gt;

==2. A problem with your Quake installation==

The file structure should resemble this:
&lt;pre&gt;
Your Quake Directory (directory)
  \--id1 (directory)
      \--pak0.pak (file)
      \--pak1.pak (file, not necessary if you just want to play the shareware/demo)
  \--QUAKE.EXE (glquake.exe or whatever) (file)
&lt;/pre&gt;
In plain text: Inside your Quake directory there must be a directory called id1. Inside the id1 directory there must be the files pak0.pak and pak1.pak. The executable must be in the Quake directory.

If you cannot figure out what is wrong, try reinstalling.

Linux/MacOS users have to make sure all files and directories are '''lowercase'''. On Windows this does not matter.</text>
      <sha1>azo5hljpzha1o0uevshoukskkciu5va</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Walkmove</title>
    <ns>0</ns>
    <id>200</id>
    <revision>
      <id>376</id>
      <timestamp>2008-02-22T19:47:24Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  float '''walkmove'''(float ''yaw'', float ''dist'')  returns TRUE or FALSE   Moves '''self''' in the given direction. Returns FALSE if could not move (used to detect blocked monsters).</comment>
      <text xml:space="preserve" bytes="185"> float '''walkmove'''(float ''yaw'', float ''dist'')

returns TRUE or FALSE 

Moves '''self''' in the given direction.
Returns FALSE if could not move (used to detect blocked monsters).</text>
      <sha1>5rmmlmftjs13t9mxktpfhzfpndncapm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Weapons</title>
    <ns>0</ns>
    <id>9</id>
    <revision>
      <id>12</id>
      <timestamp>2007-10-30T16:36:17Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: ===[[Quake]] Weapons=== * [[Axe]] * [[Shotgun]] * [[Double-Barrelled Shotgun]] * [[Nailgun]] * [[Super Nailgun]] (also known as the Perforator) * [[Grenade Launcher]] * [[Rocket Launcher]]...</comment>
      <text xml:space="preserve" bytes="461">===[[Quake]] Weapons===
* [[Axe]]
* [[Shotgun]]
* [[Double-Barrelled Shotgun]]
* [[Nailgun]]
* [[Super Nailgun]] (also known as the Perforator)
* [[Grenade Launcher]]
* [[Rocket Launcher]]
* [[Thunderbolt]] (also known as the Lightning Gun or Shaft)

===[[Scourge of Armagon]] Weapons===
* [[Laser Cannon]]
* [[Proximity Bomb]]
* [[Mjolnir]]

===[[Dissolution of Eternity]] Weapons===
* [[Lava Nails]]
* [[Multi Grenades]]
* [[Multi Rockets]]
* [[Plasma Cells]]</text>
      <sha1>5u3hpjdxbnr1nn2u7ovbw3atwq7hu05</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1354</id>
      <parentid>12</parentid>
      <timestamp>2009-09-30T22:35:44Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <comment>/* [[Quake]] Weapons */  mild addition</comment>
      <text xml:space="preserve" bytes="508">===[[Quake]] Weapons===
* [[Axe]]
* [[Shotgun]]
* [[Double-Barrelled Shotgun]] (also known as the SuperShotgun or SSG)
* [[Nailgun]]
* [[Super Nailgun]] (also known as the Perforator or SNG)
* [[Grenade Launcher]]
* [[Rocket Launcher]]
* [[Thunderbolt]] (also known as the Lightning Gun or Shaft)

===[[Scourge of Armagon]] Weapons===
* [[Laser Cannon]]
* [[Proximity Bomb]]
* [[Mjolnir]]

===[[Dissolution of Eternity]] Weapons===
* [[Lava Nails]]
* [[Multi Grenades]]
* [[Multi Rockets]]
* [[Plasma Cells]]</text>
      <sha1>mjz6rsmcmuzajnah8l4qsp79ug77158</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>WinQuake</title>
    <ns>0</ns>
    <id>154</id>
    <revision>
      <id>241</id>
      <timestamp>2007-11-02T20:20:34Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{Infobox Engine |name=WinQuake |author=[[id Software]] |based-on=n/a |first-release=? |newest-release=? |website=? }} WinQuake is a Windows version of Quake that is not 3d accelerated lik...</comment>
      <text xml:space="preserve" bytes="566">{{Infobox Engine
|name=WinQuake
|author=[[id Software]]
|based-on=n/a
|first-release=?
|newest-release=?
|website=?
}}
WinQuake is a Windows version of Quake that is not 3d accelerated like [[GLQuake]] (it is still Software like DOS Quake and therefore doesn't require a 3D video card). WinQuake supports both Quake mission packs ([[-hipnotic]] and [[-rogue]]).

If you are unable to run Quake.exe anymore, if for example you upgraded to Windows 2000 or Windows XP, it is recommended you get WinQuake.

* ftp://ftp.idsoftware.com/idstuff/quake/wq100.zip

{{Engines}}</text>
      <sha1>dad2zznok5y929x3a7sw4n72rxhnbst</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>243</id>
      <parentid>241</parentid>
      <timestamp>2007-11-02T20:22:42Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="591">{{Infobox Engine
|name=WinQuake
|author=[[id Software]]
|based-on=[[Quake (DOS engine)|Quake]]
|first-release=?
|newest-release=?
|website=?
}}
WinQuake is a Windows version of Quake that is not 3d accelerated like [[GLQuake]] (it is still Software like DOS Quake and therefore doesn't require a 3D video card). WinQuake supports both Quake mission packs ([[-hipnotic]] and [[-rogue]]).

If you are unable to run Quake.exe anymore, if for example you upgraded to Windows 2000 or Windows XP, it is recommended you get WinQuake.

* ftp://ftp.idsoftware.com/idstuff/quake/wq100.zip

{{Engines}}</text>
      <sha1>2aoxar886evaj4ej5v7rk8efha0wk4t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1077</id>
      <parentid>243</parentid>
      <timestamp>2009-07-12T00:24:01Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>removed recommendation; people should be steered toward the best engine for their hardware</comment>
      <text xml:space="preserve" bytes="1190">{{Infobox Engine
|name=WinQuake
|author=[[id Software]]
|based-on=[[Quake (DOS engine)|Quake]]
|first-release=?
|newest-release=?
|website=?
}}
id Software released a replacement for QUAKE.EXE called '''WinQuake''' (''WINQUAKE.EXE''). Instead of being for DOS, it is for any version of Windows (95/98/Me/NT/XP/2003/Vista). It's the first, most basic and most widely compatible Quake engine for Windows.

WinQuake accesses your computer's hardware through Windows APIs. It includes support for DirectX 3.0 and up, and VESA VBE video modes, if available. WinQuake is not 3D accelerated like [[GLQuake]]; it looks and runs just like [[QUAKE.EXE|the DOS engine]], but has more video modes which you can access via the Options menu in the game. It also lets you choose between running full-screen or in a window. It removes support for serial and modem-to-modem networking.

WinQuake supports both Quake mission packs (command-line startup options &lt;code&gt;[[-hipnotic]]&lt;/code&gt; and &lt;code&gt;[[-rogue]]&lt;/code&gt;).

Official distribution:
* v1.00 of WinQuake (Quake 1.09; March 1997) is contained, along with support files, in [ftp://ftp.idsoftware.com/idstuff/quake/wq100.zip ''wq100.zip''].

{{Engines}}</text>
      <sha1>dv1txydxidi81b9i4a6hwqwqkoyb8ap</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Windowed mouse</title>
    <ns>0</ns>
    <id>947</id>
    <redirect title="windowed mouse" />
    <revision>
      <id>2661</id>
      <timestamp>2013-03-29T14:22:27Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <comment>Move page script moved page [[Windowed mouse]] to [[windowed mouse]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="28">#REDIRECT [[windowed mouse]]</text>
      <sha1>h6wejxc8ra2th8vzaf3m7d8adm53o3s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Worldcraft</title>
    <ns>0</ns>
    <id>161</id>
    <revision>
      <id>256</id>
      <timestamp>2007-11-03T04:03:46Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: == Worldcraft == A graphical level editor for id Software's Quake, Quake2, and Hexen2 Worldcraft lets you make your own game maps quickly and easily. Worldcraft uses a technique called con...</comment>
      <text xml:space="preserve" bytes="554">== Worldcraft ==
A graphical level editor for id Software's Quake, Quake2, and Hexen2 Worldcraft lets you make your own game maps quickly and easily. Worldcraft uses a technique called constructive solid geometry (CSG) to create maps. It was one of the only few Quake map editor for quite a while back in the day and has since developed into a Half-life/Half-life 2 only map editor.

Worldcraft's Quake related pages can be found archived here:

[http://web.archive.org/web/20070707063852/hosted.planetquake.gamespy.com/worldcraft/index2.shtm]web archive</text>
      <sha1>1d91udaabf0nxipukbvrysmhvarw094</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>257</id>
      <parentid>256</parentid>
      <timestamp>2007-11-03T04:05:33Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>/* Worldcraft */</comment>
      <text xml:space="preserve" bytes="537">A graphical level editor for id Software's Quake, Quake2, and Hexen2 Worldcraft lets you make your own game maps quickly and easily. Worldcraft uses a technique called constructive solid geometry (CSG) to create maps. It was one of the only few Quake map editor for quite a while back in the day and has since developed into a Half-life/Half-life 2 only map editor.

Worldcraft's Quake related pages can be found archived here:

[http://web.archive.org/web/20070707063852/hosted.planetquake.gamespy.com/worldcraft/index2.shtm]web archive</text>
      <sha1>1d7p5twnnpgykz9khemvpqoow1kudsr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>259</id>
      <parentid>257</parentid>
      <timestamp>2007-11-03T22:39:26Z</timestamp>
      <contributor>
        <ip>151.141.78.153</ip>
      </contributor>
      <text xml:space="preserve" bytes="703">Worldcraft is a graphical level editor by Ben Morris which in its last unincorporated form had support for Quake, Quake2 and Hexen2.

Using a technique called constructive solid geometry (CSG), Worldcraft enabled the end user to craft their own levels for the aforementioned titles. It is easily one of the most popular level editors, if not the most, rivaled only by the Radiant series. Morris was later hired by Valve Software to continue the program under the name of Hammer in support of Half-Life and their following products.

Worldcraft's Quake related pages can be found archived here:

[http://web.archive.org/web/20070707063852/hosted.planetquake.gamespy.com/worldcraft/index2.shtm]web archive</text>
      <sha1>ax8trmosjgukktbi8laaa9hs0tccnl7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Worldspawn</title>
    <ns>0</ns>
    <id>157</id>
    <revision>
      <id>247</id>
      <timestamp>2007-11-03T03:26:48Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: ITs</comment>
      <text xml:space="preserve" bytes="3">ITs</text>
      <sha1>7mmuxhxwqaz2xgfjxdnxnm62tpjzm1h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>248</id>
      <parentid>247</parentid>
      <timestamp>2007-11-03T03:29:36Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>Removing all content from page</comment>
      <text xml:space="preserve" bytes="0" />
      <sha1>phoiac9h4m842xq45sp7s6u21eteeq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Yellow Armor</title>
    <ns>0</ns>
    <id>413</id>
    <revision>
      <id>700</id>
      <timestamp>2008-05-07T19:57:13Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: Yellow Armor absorbs about 3/5 of the damage you receive. You get 150 points of yellow armor.</comment>
      <text xml:space="preserve" bytes="93">Yellow Armor absorbs about 3/5 of the damage you receive. You get 150 points of yellow armor.</text>
      <sha1>s954ywyifdgiizh145211p90wj1cd99</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>888</id>
      <parentid>700</parentid>
      <timestamp>2008-06-18T21:53:08Z</timestamp>
      <contributor>
        <ip>65.66.150.198</ip>
      </contributor>
      <text xml:space="preserve" bytes="110">Yellow Armor absorbs about 3/5 of the damage you receive. You get 150 points of yellow armor.

{{Quake items}}</text>
      <sha1>rvjp7poly82wrhjaoj6xaevh3y8qo07</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>Zombie</title>
    <ns>0</ns>
    <id>138</id>
    <revision>
      <id>220</id>
      <timestamp>2007-11-02T19:38:31Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: Thou canst not kill which dost not live. But you can blast it into chunky kibbles.  * '''Weapon:''' Pieces of themselves * '''Health:''' 80 * '''Treasure:''' Nothing  '''Tips:''' Zombies a...</comment>
      <text xml:space="preserve" bytes="854">Thou canst not kill which dost not live. But you can blast it into chunky kibbles.

* '''Weapon:''' Pieces of themselves
* '''Health:''' 80
* '''Treasure:''' Nothing

'''Tips:''' Zombies are truly unique. They rip pieces of flesh off themselves and throw it at you to attack. To kill them, you must gib them. If you do not, they will simply fall over and get up later. To gib them you will need a [[Rocket Launcher]] or a [[Grenade Launcher]]. However, other strategies include discharging the [[Thunderbolt]] in the water (make sure you have the [[Pentagram of Protection]] or lots of armour and health), or using a [[Quad Damage]] combined with the [[Axe]], [[Shotgun]], [[Double-Barrelled Shotgun]], [[Super Nailgun]], or [[Thunderbolt]].

'''Entity name:''' [[monster_zombie]]

[http://wiki.quakesrc.org/files/zombie.gif]

==See Also==
* [[Monsters]]</text>
      <sha1>60dj0qqolrbvce6hoacynm6z94of7rw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>263</id>
      <parentid>220</parentid>
      <timestamp>2007-11-05T21:58:00Z</timestamp>
      <contributor>
        <ip>151.141.78.60</ip>
      </contributor>
      <text xml:space="preserve" bytes="794">Thou canst not kill which dost not live. But you can blast it into chunky kibbles.

* '''Weapon:''' Pieces of themselves
* '''Health:''' 60
* '''Treasure:''' Nothing

'''Tips:''' Zombies are truly unique. They rip pieces of flesh off themselves and throw them at you for their attack. To kill them, you must gib them. If you do not, they will simply fall over and get up later. To gib them you will need to bring their health to -40, meaning you need to 120 damage in a single instance, this is most easily done with explosives as demonstrated in demo1.dem but can also be achieved via [[Quad Damage]] attacks with other weapons, or a [[Thunderbolt]] discharge of at least 3 cells.

'''Entity name:''' [[monster_zombie]]

[http://wiki.quakesrc.org/files/zombie.gif]

==See Also==
* [[Monsters]]</text>
      <sha1>idg57hnea6ary5wsnhnemokov5cu42c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>278</id>
      <parentid>263</parentid>
      <timestamp>2007-11-05T22:17:37Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <text xml:space="preserve" bytes="771">Thou canst not kill which dost not live. But you can blast it into chunky kibbles.

* '''Weapon:''' Pieces of themselves
* '''Health:''' 60
* '''Treasure:''' Nothing

'''Tips:''' Zombies are truly unique. They rip pieces of flesh off themselves and throw them at you for their attack. To kill them, you must gib them. If you do not, they will simply fall over and get up later. To gib them you will need to bring their health to -40, meaning you need to 120 damage in a single instance, this is most easily done with explosives as demonstrated in demo1.dem but can also be achieved via [[Quad Damage]] attacks with other weapons, or a [[Thunderbolt]] discharge of at least 3 cells.

[[Image:zombie.gif]]

'''Entity name:''' [[monster_zombie]]

==See Also==
* [[Monsters]]</text>
      <sha1>gj00yxp0tiq8n4aqwwx91hau59irh6u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>852</id>
      <parentid>278</parentid>
      <timestamp>2008-05-17T18:18:54Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="819">{{Infobox Monster
|monstername=Zombie
|entityname=monster_zombie
|monsterhealth=60
|monstermelee=
|monstermissile=Thrown gibs
|movetype=
|monsterspeed=
|monsterclass=
}}

[[Image:zombie.gif|left]]

Zombies are truly unique. They rip pieces of flesh off themselves and throw them at you for their attack. To kill them, you must gib them. If you do not, they will simply fall over and get up later. To gib them you will need to bring their health to -40, meaning you need to 120 damage in a single instance, this is most easily done with explosives as demonstrated in demo1.dem but can also be achieved via [[Quad Damage]] attacks with other weapons, or a [[Thunderbolt]] discharge of at least 3 cells.

''&quot;Thou canst not kill which dost not live. But you can blast it into chunky kibbles.&quot;''

==See Also==
* [[Monsters]]</text>
      <sha1>6ymh5n6lgdo80zdkuu30vrx7p4ihrxb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>855</id>
      <parentid>852</parentid>
      <timestamp>2008-05-17T18:51:57Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="840">{{Infobox Monster
|monstername=Zombie
|entityname=monster_zombie
|monsterhealth=60
|monstermelee=
|monstermissile=Thrown gibs
|movetype=
|monsterspeed=
|monsterclass=
|monsterdrop=nothing
}}

[[Image:zombie.gif|left]]

Zombies are truly unique. They rip pieces of flesh off themselves and throw them at you for their attack. To kill them, you must gib them. If you do not, they will simply fall over and get up later. To gib them you will need to bring their health to -40, meaning you need to 120 damage in a single instance, this is most easily done with explosives as demonstrated in demo1.dem but can also be achieved via [[Quad Damage]] attacks with other weapons, or a [[Thunderbolt]] discharge of at least 3 cells.

''&quot;Thou canst not kill which dost not live. But you can blast it into chunky kibbles.&quot;''

==See Also==
* [[Monsters]]</text>
      <sha1>lj1ep8z54tlzqc65604c8su7p8s2390</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1252</id>
      <parentid>855</parentid>
      <timestamp>2009-09-25T08:15:35Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="811">{{Infobox Monster
|name=Zombie
|entity=monster_zombie
|model=zombie.mdl&lt;br /&gt;h_zombie.mdl (head gib)
|health=60
|attacks=Thrown gibs
|drop=nothing
|gameversion=Shareware
}}
[[Image:zombie.gif|left]]
'''Zombies''' are truly unique. They rip pieces of flesh off themselves and throw them at you for their attack. To kill them, you must gib them. If you do not, they will simply fall over and get up later. To gib them you will need to bring their health to -40, meaning you need to 120 damage in a single instance, this is most easily done with explosives as demonstrated in demo1.dem but can also be achieved via [[Quad Damage]] attacks with other weapons, or a [[Thunderbolt]] discharge of at least 3 cells.

''&quot;Thou canst not kill which dost not live. But you can blast it into chunky kibbles.&quot;''

{{Monsters}}</text>
      <sha1>32zn9v38o5y55sfaycnog7wfdulxlfl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1392</id>
      <parentid>1252</parentid>
      <timestamp>2009-10-08T23:25:56Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="835">{{Infobox Monster
|name=Zombie
|entity=monster_zombie
|model=zombie.mdl&lt;br /&gt;h_zombie.mdl (head gib)
|health=60
|attacks=Thrown gibs
|drop=nothing
|1stappearance=[[e1m3]]
|gameversion=Shareware
}}
[[Image:zombie.gif|left]]
'''Zombies''' are truly unique. They rip pieces of flesh off themselves and throw them at you for their attack. To kill them, you must gib them. If you do not, they will simply fall over and get up later. To gib them you will need to bring their health to -40, meaning you need to 120 damage in a single instance, this is most easily done with explosives as demonstrated in demo1.dem but can also be achieved via [[Quad Damage]] attacks with other weapons, or a [[Thunderbolt]] discharge of at least 3 cells.

''&quot;Thou canst not kill which dost not live. But you can blast it into chunky kibbles.&quot;''

{{Monsters}}</text>
      <sha1>ajd7znklyrntbpbz5wi3ulrz8f056ij</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1405</id>
      <parentid>1392</parentid>
      <timestamp>2009-10-08T23:51:43Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="867">{{Infobox Monster
|name=Zombie
|entity=monster_zombie
|model=zombie.mdl&lt;br /&gt;h_zombie.mdl (head gib)
|health=60
|attacks=Thrown gibs
|drop=nothing
|1stappearance=[[e1m3]]
|gameversion=Shareware
}}
[[Image:zombie.gif|left]]
''&quot;Thou canst not kill which dost not live. But you can blast it into chunky kibbles.&quot;''

'''Zombies''' are truly unique. They rip pieces of flesh off themselves and throw them at you for their attack. To kill them, you must gib them. If you do not, they will simply fall over and get up later. To gib them you will need to bring their health to -40, meaning you need to 120 damage in a single instance, this is most easily done with explosives as demonstrated in demo1.dem but can also be achieved via [[Quad Damage]] attacks with other weapons, or a [[Thunderbolt]] discharge of at least 3 cells.

''&quot;Player joins the Zombies&quot;''

{{Monsters}}</text>
      <sha1>jboun8tf1yog1fkl2sg4ymrt2fak3bn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1910</id>
      <parentid>1405</parentid>
      <timestamp>2013-03-25T03:27:33Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>fixed image location and file link</comment>
      <text xml:space="preserve" bytes="867">[[Image:Zombie.gif|left]]
{{Infobox Monster
|name=Zombie
|entity=monster_zombie
|model=zombie.mdl&lt;br /&gt;h_zombie.mdl (head gib)
|health=60
|attacks=Thrown gibs
|drop=nothing
|1stappearance=[[e1m3]]
|gameversion=Shareware
}}
''&quot;Thou canst not kill which dost not live. But you can blast it into chunky kibbles.&quot;''

'''Zombies''' are truly unique. They rip pieces of flesh off themselves and throw them at you for their attack. To kill them, you must gib them. If you do not, they will simply fall over and get up later. To gib them you will need to bring their health to -40, meaning you need to 120 damage in a single instance, this is most easily done with explosives as demonstrated in demo1.dem but can also be achieved via [[Quad Damage]] attacks with other weapons, or a [[Thunderbolt]] discharge of at least 3 cells.

''&quot;Player joins the Zombies&quot;''

{{Monsters}}</text>
      <sha1>ldhbc1islj9j0buvlpnwtkm6q0f4ft9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2846</id>
      <parentid>1910</parentid>
      <timestamp>2013-04-08T14:02:59Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>updated infobox</comment>
      <text xml:space="preserve" bytes="843">{{Infobox Monster
| name = Zombie
| image = monster_quake_zombie.png
| manualtext = Thou canst not kill which dost not live. But you can blast it into chunky kibbles.
| health = 60
| attacks = Thrown gibs
| drop = nothing
| 1stappearance = [[e1m3]]
| gameversion = Shareware
| deathmessage = Player joins the Zombies
}}

'''Zombies''' are truly unique. They rip pieces of flesh off themselves and throw them at you for their attack. To kill them, you must gib them. If you do not, they will simply fall over and get up later. To gib them you will need to bring their health to -40, meaning you need to 120 damage in a single instance, this is most easily done with explosives as demonstrated in demo1.dem but can also be achieved via [[Quad Damage]] attacks with other weapons, or a [[Thunderbolt]] discharge of at least 3 cells.

{{Monsters}}</text>
      <sha1>cv5ao8blpk2cs2ccszm9l00yx301miy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2863</id>
      <parentid>2846</parentid>
      <timestamp>2013-04-08T15:40:42Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>Added quick entity info</comment>
      <text xml:space="preserve" bytes="3190">{{Infobox Monster
| name = Zombie
| image = monster_quake_zombie.png
| manualtext = Thou canst not kill which dost not live. But you can blast it into chunky kibbles.
| health = 60
| attacks = Thrown gibs
| drop = nothing
| 1stappearance = [[e1m3]]
| gameversion = Shareware
| deathmessage = Player joins the Zombies
}}

'''Zombies''' are truly unique. They rip pieces of flesh off themselves and throw them at you for their attack. To kill them, you must gib them. If you do not, they will simply fall over and get up later. To gib them you will need to bring their health to -40, meaning you need to 120 damage in a single instance, this is most easily done with explosives as demonstrated in demo1.dem but can also be achieved via [[Quad Damage]] attacks with other weapons, or a [[Thunderbolt]] discharge of at least 3 cells.


==Tactics==

&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_zombie
| commonname = [[Zombie]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 32 x 32 x 64
| quakec = [[zombie.qc]]
| precaches =
progs/zombie.mdl&lt;br&gt;
progs/h_zombie.mdl&lt;br&gt;
progs/zom_gib.mdl&lt;br&gt;
zombie/z_idle.wav&lt;br&gt;
zombie/z_idle1.wav&lt;br&gt;
zombie/z_shot1.wav&lt;br&gt;
zombie/z_gib.wav&lt;br&gt;
zombie/z_pain.wav&lt;br&gt;
zombie/z_pain1.wav&lt;br&gt;
zombie/z_fall.wav&lt;br&gt;
zombie/z_miss.wav&lt;br&gt;
zombie/z_hit.wav&lt;br&gt;
zombie/idle_w2.wav
}}

==Entity information==

'''monster_zombie''' is the [[Entity|entity]] for placing '''Zombies''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Zombie. When triggered, the Zombie will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Zombie dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Zombie dies.
|}

====Spawnflags====
The monster_army entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Zombie will not wake up from seeing other monsters wake up or hearing sounds.
|-
| 2
| Crucified
| The Zombie will become a writhing cruified Zombie prop that can be used as level decoration and is not treated as a monster in game.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Zombie
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model(&quot;:progs/zombie.mdl&quot;)
    = monster_zombie : &quot;Zombie&quot; []
[
	spawnflags(Flags) = 
	[
		1 : &quot;Crucified&quot; : 0
		2 : &quot;Ambush&quot; : 0
	]
]
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_zombie (1 0 0) (-16 -16 -24) (16 16 40) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>ea8h5heh1axnkak46yolpf7n45t4j6m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2864</id>
      <parentid>2863</parentid>
      <timestamp>2013-04-08T15:41:51Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="3192">{{Infobox Monster
| name = Zombie
| image = monster_quake_zombie.png
| manualtext = Thou canst not kill which dost not live. But you can blast it into chunky kibbles.
| health = 60
| attacks = Thrown gibs
| drop = nothing
| 1stappearance = [[e1m3]]
| gameversion = Shareware
| deathmessage = Player joins the Zombies
}}

'''Zombies''' are truly unique. They rip pieces of flesh off themselves and throw them at you for their attack. To kill them, you must gib them. If you do not, they will simply fall over and get up later. To gib them you will need to bring their health to -40, meaning you need to 120 damage in a single instance, this is most easily done with explosives as demonstrated in demo1.dem but can also be achieved via [[Quad Damage]] attacks with other weapons, or a [[Thunderbolt]] discharge of at least 3 cells.


==Tactics==

&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_zombie
| commonname = [[Zombie]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 32 x 32 x 64
| quakec = [[zombie.qc]]
| precaches =
progs/zombie.mdl&lt;br&gt;
progs/h_zombie.mdl&lt;br&gt;
progs/zom_gib.mdl&lt;br&gt;
zombie/z_idle.wav&lt;br&gt;
zombie/z_idle1.wav&lt;br&gt;
zombie/z_shot1.wav&lt;br&gt;
zombie/z_gib.wav&lt;br&gt;
zombie/z_pain.wav&lt;br&gt;
zombie/z_pain1.wav&lt;br&gt;
zombie/z_fall.wav&lt;br&gt;
zombie/z_miss.wav&lt;br&gt;
zombie/z_hit.wav&lt;br&gt;
zombie/idle_w2.wav
}}

==Entity information==

'''monster_zombie''' is the [[Entity|entity]] for placing '''Zombies''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Zombie. When triggered, the Zombie will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Zombie dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Zombie dies.
|}

====Spawnflags====
The monster_zombie entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Zombie will not wake up from seeing other monsters wake up or hearing sounds.
|-
| 2
| Crucified
| The Zombie will become a writhing cruified Zombie prop that can be used as level decoration and is not treated as a monster in game.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Zombie
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model(&quot;:progs/zombie.mdl&quot;)
    = monster_zombie : &quot;Zombie&quot; []
[
	spawnflags(Flags) = 
	[
		1 : &quot;Crucified&quot; : 0
		2 : &quot;Ambush&quot; : 0
	]
]
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_zombie (1 0 0) (-16 -16 -24) (16 16 40) Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>9esi9jzxm0peaptithbig7yqyl6gwq8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2868</id>
      <parentid>2864</parentid>
      <timestamp>2013-04-08T15:46:20Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>/* DEF Definition */ added crucified</comment>
      <text xml:space="preserve" bytes="3202">{{Infobox Monster
| name = Zombie
| image = monster_quake_zombie.png
| manualtext = Thou canst not kill which dost not live. But you can blast it into chunky kibbles.
| health = 60
| attacks = Thrown gibs
| drop = nothing
| 1stappearance = [[e1m3]]
| gameversion = Shareware
| deathmessage = Player joins the Zombies
}}

'''Zombies''' are truly unique. They rip pieces of flesh off themselves and throw them at you for their attack. To kill them, you must gib them. If you do not, they will simply fall over and get up later. To gib them you will need to bring their health to -40, meaning you need to 120 damage in a single instance, this is most easily done with explosives as demonstrated in demo1.dem but can also be achieved via [[Quad Damage]] attacks with other weapons, or a [[Thunderbolt]] discharge of at least 3 cells.


==Tactics==

&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_zombie
| commonname = [[Zombie]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 32 x 32 x 64
| quakec = [[zombie.qc]]
| precaches =
progs/zombie.mdl&lt;br&gt;
progs/h_zombie.mdl&lt;br&gt;
progs/zom_gib.mdl&lt;br&gt;
zombie/z_idle.wav&lt;br&gt;
zombie/z_idle1.wav&lt;br&gt;
zombie/z_shot1.wav&lt;br&gt;
zombie/z_gib.wav&lt;br&gt;
zombie/z_pain.wav&lt;br&gt;
zombie/z_pain1.wav&lt;br&gt;
zombie/z_fall.wav&lt;br&gt;
zombie/z_miss.wav&lt;br&gt;
zombie/z_hit.wav&lt;br&gt;
zombie/idle_w2.wav
}}

==Entity information==

'''monster_zombie''' is the [[Entity|entity]] for placing '''Zombies''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Zombie. When triggered, the Zombie will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Zombie dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Zombie dies.
|}

====Spawnflags====
The monster_zombie entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Zombie will not wake up from seeing other monsters wake up or hearing sounds.
|-
| 2
| Crucified
| The Zombie will become a writhing cruified Zombie prop that can be used as level decoration and is not treated as a monster in game.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Zombie
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model(&quot;:progs/zombie.mdl&quot;)
    = monster_zombie : &quot;Zombie&quot; []
[
	spawnflags(Flags) = 
	[
		1 : &quot;Crucified&quot; : 0
		2 : &quot;Ambush&quot; : 0
	]
]
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_zombie (1 0 0) (-16 -16 -24) (16 16 40) Crucified Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>on65p5i397m3f0unj9s6ue18hm60mwz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2955</id>
      <parentid>2868</parentid>
      <timestamp>2013-05-04T16:49:49Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <minor/>
      <comment>what a bunch of shit somebody had wrote</comment>
      <text xml:space="preserve" bytes="3250">{{Infobox Monster
| name = Zombie
| image = monster_quake_zombie.png
| manualtext = Thou canst not kill which dost not live. But you can blast it into chunky kibbles.
| health = 60 (regenerates to full health on any damage)
| gibthresh = 0 (must be gibbed to be killed)
| attacks = Thrown gibs
| drop = nothing
| 1stappearance = [[e1m3]]
| gameversion = Shareware
| deathmessage = Player joins the Zombies
}}

'''Zombies''' are truly unique. They rip pieces of flesh off themselves and throw them at you for their attack. To kill them, you must gib them. If you do not, they will simply fall over and get up later. You will need to bring their health to zero in a single take, meaning you need to do 60 damage at least, this is most easily done with explosives as demonstrated in the stock ''demo1.dem'', but can also be achieved via [[Quad Damage]] attacks with other weapons.


==Tactics==

&lt;br&gt;
&lt;br&gt;

{{Infobox_entity
| classname = monster_zombie
| commonname = [[Zombie]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 32 x 32 x 64
| quakec = [[zombie.qc]]
| precaches =
progs/zombie.mdl&lt;br&gt;
progs/h_zombie.mdl&lt;br&gt;
progs/zom_gib.mdl&lt;br&gt;
zombie/z_idle.wav&lt;br&gt;
zombie/z_idle1.wav&lt;br&gt;
zombie/z_shot1.wav&lt;br&gt;
zombie/z_gib.wav&lt;br&gt;
zombie/z_pain.wav&lt;br&gt;
zombie/z_pain1.wav&lt;br&gt;
zombie/z_fall.wav&lt;br&gt;
zombie/z_miss.wav&lt;br&gt;
zombie/z_hit.wav&lt;br&gt;
zombie/idle_w2.wav
}}

==Entity information==

'''monster_zombie''' is the [[Entity|entity]] for placing '''Zombies''' in a level.

===Usage===


===Attributes===

====Keys====
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Zombie. When triggered, the Zombie will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Zombie dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Zombie dies.
|}

====Spawnflags====
The monster_zombie entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Zombie will not wake up from seeing other monsters wake up or hearing sounds.
|-
| 2
| Crucified
| The Zombie will become a writhing cruified Zombie prop that can be used as level decoration and is not treated as a monster in game.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Zombie
}}

===Definitions===

====FGD Definition====
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-16 -16 -24, 16 16 40) model(&quot;:progs/zombie.mdl&quot;)
    = monster_zombie : &quot;Zombie&quot; []
[
	spawnflags(Flags) = 
	[
		1 : &quot;Crucified&quot; : 0
		2 : &quot;Ambush&quot; : 0
	]
]
&lt;/pre&gt;

====DEF Definition====
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_zombie (1 0 0) (-16 -16 -24) (16 16 40) Crucified Ambush
*/
&lt;/pre&gt;

[[Category:Quake entities]][[Category:Monsters]]</text>
      <sha1>66s8get84pc8zry02jkmd0ckn7tzxaf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>ai.qc</title>
    <ns>0</ns>
    <id>831</id>
    <revision>
      <id>2446</id>
      <timestamp>2013-03-29T09:55:51Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This file contains the AI code which determines the general behavior of the monsters.   &lt;pre&gt; void() movetarget_f; void() t_movetarget; void() knight_walk1; void() knight_bow6...&quot;</comment>
      <text xml:space="preserve" bytes="14634">This file contains the AI code which determines the general behavior of the monsters.


&lt;pre&gt;
void() movetarget_f;
void() t_movetarget;
void() knight_walk1;
void() knight_bow6;
void() knight_bow1;
void(entity etemp, entity stemp, entity stemp, float dmg) T_Damage;
/*

.enemy
Will be world if not currently angry at anyone.

.movetarget
The next path spot to walk toward.  If .enemy, ignore .movetarget.
When an enemy is killed, the monster will try to return to it's path.

.huntt_ime
Set to time + something when the player is in sight, but movement straight for
him is blocked.  This causes the monster to use wall following code for
movement direction instead of sighting on the player.

.ideal_yaw
A yaw angle of the intended direction, which will be turned towards at up
to 45 deg / state.  If the enemy is in view and hunt_time is not active,
this will be the exact line towards the enemy.

.pausetime
A monster will leave it's stand state and head towards it's .movetarget when
time &gt; .pausetime.

walkmove(angle, speed) primitive is all or nothing
*/


//
// globals
//
float	current_yaw;

//
// when a monster becomes angry at a player, that monster will be used
// as the sight target the next frame so that monsters near that one
// will wake up even if they wouldn't have noticed the player
//
entity	sight_entity;
float	sight_entity_time;

float(float v) anglemod =
{
	while (v &gt;= 360)
		v = v - 360;
	while (v &lt; 0)
		v = v + 360;
	return v;
};

/*
==============================================================================

MOVETARGET CODE

The angle of the movetarget effects standing and bowing direction, but has no effect on movement, which allways heads to the next target.

targetname
must be present.  The name of this movetarget.

target
the next spot to move to.  If not present, stop here for good.

pausetime
The number of seconds to spend standing or bowing for path_stand or path_bow

==============================================================================
*/


void() movetarget_f =
{
	if (!self.targetname)
		objerror (&quot;monster_movetarget: no targetname&quot;);
		
	self.solid = SOLID_TRIGGER;
	self.touch = t_movetarget;
	setsize (self, '-8 -8 -8', '8 8 8');
	
};

/*QUAKED path_corner (0.5 0.3 0) (-8 -8 -8) (8 8 8)
Monsters will continue walking towards the next target corner.
*/
void() path_corner =
{
	movetarget_f ();
};


/*
=============
t_movetarget

Something has bumped into a movetarget.  If it is a monster
moving towards it, change the next destination and continue.
==============
*/
void() t_movetarget =
{
local entity	temp;

	if (other.movetarget != self)
		return;
	
	if (other.enemy)
		return;		// fighting, not following a path

	temp = self;
	self = other;
	other = temp;

	if (self.classname == &quot;monster_ogre&quot;)
		sound (self, CHAN_VOICE, &quot;ogre/ogdrag.wav&quot;, 1, ATTN_IDLE);// play chainsaw drag sound

//dprint (&quot;t_movetarget\n&quot;);
	self.goalentity = self.movetarget = find (world, targetname, other.target);
	self.ideal_yaw = vectoyaw(self.goalentity.origin - self.origin);
	if (!self.movetarget)
	{
		self.pausetime = time + 999999;
		self.th_stand ();
		return;
	}
};



//============================================================================

/*
=============
range

returns the range catagorization of an entity reletive to self
0	melee range, will become hostile even if back is turned
1	visibility and infront, or visibility and show hostile
2	infront and show hostile
3	only triggered by damage
=============
*/
float(entity targ) range =
{
local vector	spot1, spot2;
local float		r;	
	spot1 = self.origin + self.view_ofs;
	spot2 = targ.origin + targ.view_ofs;
	
	r = vlen (spot1 - spot2);
	if (r &lt; 120)
		return RANGE_MELEE;
	if (r &lt; 500)
		return RANGE_NEAR;
	if (r &lt; 1000)
		return RANGE_MID;
	return RANGE_FAR;
};

/*
=============
visible

returns 1 if the entity is visible to self, even if not infront ()
=============
*/
float (entity targ) visible =
{
	local vector	spot1, spot2;
	
	spot1 = self.origin + self.view_ofs;
	spot2 = targ.origin + targ.view_ofs;
	traceline (spot1, spot2, TRUE, self);	// see through other monsters
	
	if (trace_inopen &amp;&amp; trace_inwater)
		return FALSE;			// sight line crossed contents

	if (trace_fraction == 1)
		return TRUE;
	return FALSE;
};


/*
=============
infront

returns 1 if the entity is in front (in sight) of self
=============
*/
float(entity targ) infront =
{
	local vector	vec;
	local float		dot;
	
	makevectors (self.angles);
	vec = normalize (targ.origin - self.origin);
	dot = vec * v_forward;
	
	if ( dot &gt; 0.3)
	{
		return TRUE;
	}
	return FALSE;
};


//============================================================================

/*
===========
ChangeYaw

Turns towards self.ideal_yaw at self.yaw_speed
Sets the global variable current_yaw
Called every 0.1 sec by monsters
============
*/
/*

void() ChangeYaw =
{
	local float		ideal, move;

//current_yaw = self.ideal_yaw;
// mod down the current angle
	current_yaw = anglemod( self.angles_y );
	ideal = self.ideal_yaw;
	
	if (current_yaw == ideal)
		return;
	
	move = ideal - current_yaw;
	if (ideal &gt; current_yaw)
	{
		if (move &gt; 180)
			move = move - 360;
	}
	else
	{
		if (move &lt; -180)
			move = move + 360;
	}
		
	if (move &gt; 0)
	{
		if (move &gt; self.yaw_speed)
			move = self.yaw_speed;
	}
	else
	{
		if (move &lt; 0-self.yaw_speed )
			move = 0-self.yaw_speed;
	}

	current_yaw = anglemod (current_yaw + move);

	self.angles_y = current_yaw;
};

*/


//============================================================================

void() HuntTarget =
{
	self.goalentity = self.enemy;
	self.think = self.th_run;
	self.ideal_yaw = vectoyaw(self.enemy.origin - self.origin);
	self.nextthink = time + 0.1;
	SUB_AttackFinished (1);	// wait a while before first attack
};

void() SightSound =
{
local float	rsnd;

	if (self.classname == &quot;monster_ogre&quot;)	
		sound (self, CHAN_VOICE, &quot;ogre/ogwake.wav&quot;, 1, ATTN_NORM);
	else if (self.classname == &quot;monster_knight&quot;)
		sound (self, CHAN_VOICE, &quot;knight/ksight.wav&quot;, 1, ATTN_NORM);
	else if (self.classname == &quot;monster_shambler&quot;)
		sound (self, CHAN_VOICE, &quot;shambler/ssight.wav&quot;, 1, ATTN_NORM);
	else if (self.classname == &quot;monster_demon1&quot;)
		sound (self, CHAN_VOICE, &quot;demon/sight2.wav&quot;, 1, ATTN_NORM);
	else if (self.classname == &quot;monster_wizard&quot;)
		sound (self, CHAN_VOICE, &quot;wizard/wsight.wav&quot;, 1, ATTN_NORM);
	else if (self.classname == &quot;monster_zombie&quot;)
		sound (self, CHAN_VOICE, &quot;zombie/z_idle.wav&quot;, 1, ATTN_NORM);
	else if (self.classname == &quot;monster_dog&quot;)
		sound (self, CHAN_VOICE, &quot;dog/dsight.wav&quot;, 1, ATTN_NORM);
	else if (self.classname == &quot;monster_hell_knight&quot;)
		sound (self, CHAN_VOICE, &quot;hknight/sight1.wav&quot;, 1, ATTN_NORM);
	else if (self.classname == &quot;monster_tarbaby&quot;)
		sound (self, CHAN_VOICE, &quot;blob/sight1.wav&quot;, 1, ATTN_NORM);
	else if (self.classname == &quot;monster_vomit&quot;)
		sound (self, CHAN_VOICE, &quot;vomitus/v_sight1.wav&quot;, 1, ATTN_NORM);
	else if (self.classname == &quot;monster_enforcer&quot;)
	{
		rsnd = rint(random() * 3);			
		if (rsnd == 1)
			sound (self, CHAN_VOICE, &quot;enforcer/sight1.wav&quot;, 1, ATTN_NORM);
		else if (rsnd == 2)
			sound (self, CHAN_VOICE, &quot;enforcer/sight2.wav&quot;, 1, ATTN_NORM);
		else if (rsnd == 0)
			sound (self, CHAN_VOICE, &quot;enforcer/sight3.wav&quot;, 1, ATTN_NORM);
		else
			sound (self, CHAN_VOICE, &quot;enforcer/sight4.wav&quot;, 1, ATTN_NORM);
	}
	else if (self.classname == &quot;monster_army&quot;)
		sound (self, CHAN_VOICE, &quot;soldier/sight1.wav&quot;, 1, ATTN_NORM);
	else if (self.classname == &quot;monster_shalrath&quot;)
		sound (self, CHAN_VOICE, &quot;shalrath/sight.wav&quot;, 1, ATTN_NORM);
};

void() FoundTarget =
{
	if (self.enemy.classname == &quot;player&quot;)
	{	// let other monsters see this monster for a while
		sight_entity = self;
		sight_entity_time = time;
	}
	
	self.show_hostile = time + 1;		// wake up other monsters

	SightSound ();
	HuntTarget ();
};

/*
===========
FindTarget

Self is currently not attacking anything, so try to find a target

Returns TRUE if an enemy was sighted

When a player fires a missile, the point of impact becomes a fakeplayer so
that monsters that see the impact will respond as if they had seen the
player.

To avoid spending too much time, only a single client (or fakeclient) is
checked each frame.  This means multi player games will have slightly
slower noticing monsters.
============
*/
float() FindTarget =
{
	local entity	client;
	local float		r;

// if the first spawnflag bit is set, the monster will only wake up on
// really seeing the player, not another monster getting angry

// spawnflags &amp; 3 is a big hack, because zombie crucified used the first
// spawn flag prior to the ambush flag, and I forgot about it, so the second
// spawn flag works as well
	if (sight_entity_time &gt;= time - 0.1 &amp;&amp; !(self.spawnflags &amp; 3) )
	{
		client = sight_entity;
		if (client.enemy == self.enemy)
			return;
	}
	else
	{
		client = checkclient ();
		if (!client)
			return FALSE;	// current check entity isn't in PVS
	}

	if (client == self.enemy)
		return FALSE;

	if (client.flags &amp; FL_NOTARGET)
		return FALSE;
	if (client.items &amp; IT_INVISIBILITY)
		return FALSE;

	r = range (client);
	if (r == RANGE_FAR)
		return FALSE;
		
	if (!visible (client))
		return FALSE;

	if (r == RANGE_NEAR)
	{
		if (client.show_hostile &lt; time &amp;&amp; !infront (client))
			return FALSE;
	}
	else if (r == RANGE_MID)
	{
		if ( /* client.show_hostile &lt; time || */ !infront (client))
			return FALSE;
	}
	
//
// got one
//
	self.enemy = client;
	if (self.enemy.classname != &quot;player&quot;)
	{
		self.enemy = self.enemy.enemy;
		if (self.enemy.classname != &quot;player&quot;)
		{
			self.enemy = world;
			return FALSE;
		}
	}
	
	FoundTarget ();

	return TRUE;
};


//=============================================================================

void(float dist) ai_forward =
{
	walkmove (self.angles_y, dist);
};

void(float dist) ai_back =
{
	walkmove ( (self.angles_y+180), dist);
};


/*
=============
ai_pain

stagger back a bit
=============
*/
void(float dist) ai_pain =
{
	ai_back (dist);
/*
	local float	away;
	
	away = anglemod (vectoyaw (self.origin - self.enemy.origin) 
	+ 180*(random()- 0.5) );
	
	walkmove (away, dist);
*/
};

/*
=============
ai_painforward

stagger back a bit
=============
*/
void(float dist) ai_painforward =
{
	walkmove (self.ideal_yaw, dist);
};

/*
=============
ai_walk

The monster is walking it's beat
=============
*/
void(float dist) ai_walk =
{
	local vector		mtemp;
	
	movedist = dist;
	
	if (self.classname == &quot;monster_dragon&quot;)
	{
		movetogoal (dist);
		return;
	}
	// check for noticing a player
	if (FindTarget ())
		return;

	movetogoal (dist);
};


/*
=============
ai_stand

The monster is staying in one place for a while, with slight angle turns
=============
*/
void() ai_stand =
{
	if (FindTarget ())
		return;
	
	if (time &gt; self.pausetime)
	{
		self.th_walk ();
		return;
	}
	
// change angle slightly

};

/*
=============
ai_turn

don't move, but turn towards ideal_yaw
=============
*/
void() ai_turn =
{
	if (FindTarget ())
		return;
	
	ChangeYaw ();
};

//=============================================================================

/*
=============
ChooseTurn
=============
*/
void(vector dest3) ChooseTurn =
{
	local vector	dir, newdir;
	
	dir = self.origin - dest3;

	newdir_x = trace_plane_normal_y;
	newdir_y = 0 - trace_plane_normal_x;
	newdir_z = 0;
	
	if (dir * newdir &gt; 0)
	{
		dir_x = 0 - trace_plane_normal_y;
		dir_y = trace_plane_normal_x;
	}
	else
	{
		dir_x = trace_plane_normal_y;
		dir_y = 0 - trace_plane_normal_x;
	}

	dir_z = 0;
	self.ideal_yaw = vectoyaw(dir);	
};

/*
============
FacingIdeal

============
*/
float() FacingIdeal =
{
	local	float	delta;
	
	delta = anglemod(self.angles_y - self.ideal_yaw);
	if (delta &gt; 45 &amp;&amp; delta &lt; 315)
		return FALSE;
	return TRUE;
};


//=============================================================================

float()	WizardCheckAttack;
float()	DogCheckAttack;

float() CheckAnyAttack =
{
	if (!enemy_vis)
		return;
	if (self.classname == &quot;monster_army&quot;)
		return SoldierCheckAttack ();
	if (self.classname == &quot;monster_ogre&quot;)
		return OgreCheckAttack ();
	if (self.classname == &quot;monster_shambler&quot;)
		return ShamCheckAttack ();
	if (self.classname == &quot;monster_demon1&quot;)
		return DemonCheckAttack ();
	if (self.classname == &quot;monster_dog&quot;)
		return DogCheckAttack ();
	if (self.classname == &quot;monster_wizard&quot;)
		return WizardCheckAttack ();
	return CheckAttack ();
};


/*
=============
ai_run_melee

Turn and close until within an angle to launch a melee attack
=============
*/
void() ai_run_melee =
{
	self.ideal_yaw = enemy_yaw;
	ChangeYaw ();

	if (FacingIdeal())
	{
		self.th_melee ();
		self.attack_state = AS_STRAIGHT;
	}
};


/*
=============
ai_run_missile

Turn in place until within an angle to launch a missile attack
=============
*/
void() ai_run_missile =
{
	self.ideal_yaw = enemy_yaw;
	ChangeYaw ();
	if (FacingIdeal())
	{
		self.th_missile ();
		self.attack_state = AS_STRAIGHT;
	}
};


/*
=============
ai_run_slide

Strafe sideways, but stay at aproximately the same range
=============
*/
void() ai_run_slide =
{
	local float	ofs;
	
	self.ideal_yaw = enemy_yaw;
	ChangeYaw ();
	if (self.lefty)
		ofs = 90;
	else
		ofs = -90;
	
	if (walkmove (self.ideal_yaw + ofs, movedist))
		return;
		
	self.lefty = 1 - self.lefty;
	
	walkmove (self.ideal_yaw - ofs, movedist);
};


/*
=============
ai_run

The monster has an enemy it is trying to kill
=============
*/
void(float dist) ai_run =
{
	local	vector	delta;
	local	float	axis;
	local	float	direct, ang_rint, ang_floor, ang_ceil;
	
	movedist = dist;
// see if the enemy is dead
	if (self.enemy.health &lt;= 0)
	{
		self.enemy = world;
	// FIXME: look all around for other targets
		if (self.oldenemy.health &gt; 0)
		{
			self.enemy = self.oldenemy;
			HuntTarget ();
		}
		else
		{
			if (self.movetarget)
				self.th_walk ();
			else
				self.th_stand ();
			return;
		}
	}

	self.show_hostile = time + 1;		// wake up other monsters

// check knowledge of enemy
	enemy_vis = visible(self.enemy);
	if (enemy_vis)
		self.search_time = time + 5;

// look for other coop players
	if (coop &amp;&amp; self.search_time &lt; time)
	{
		if (FindTarget ())
			return;
	}

	enemy_infront = infront(self.enemy);
	enemy_range = range(self.enemy);
	enemy_yaw = vectoyaw(self.enemy.origin - self.origin);
	
	if (self.attack_state == AS_MISSILE)
	{
//dprint (&quot;ai_run_missile\n&quot;);
		ai_run_missile ();
		return;
	}
	if (self.attack_state == AS_MELEE)
	{
//dprint (&quot;ai_run_melee\n&quot;);
		ai_run_melee ();
		return;
	}

	if (CheckAnyAttack ())
		return;					// beginning an attack
		
	if (self.attack_state == AS_SLIDING)
	{
		ai_run_slide ();
		return;
	}
		
// head straight in
	movetogoal (dist);		// done in C code...
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>ammow8ayxp3df8q6xpohw11gxanfjv3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2447</id>
      <parentid>2446</parentid>
      <timestamp>2013-03-29T09:58:04Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="14661">This [[Quake-C]] file contains the AI code which determines the general behavior of the [[Monsters | monsters]].


&lt;pre&gt;
void() movetarget_f;
void() t_movetarget;
void() knight_walk1;
void() knight_bow6;
void() knight_bow1;
void(entity etemp, entity stemp, entity stemp, float dmg) T_Damage;
/*

.enemy
Will be world if not currently angry at anyone.

.movetarget
The next path spot to walk toward.  If .enemy, ignore .movetarget.
When an enemy is killed, the monster will try to return to it's path.

.huntt_ime
Set to time + something when the player is in sight, but movement straight for
him is blocked.  This causes the monster to use wall following code for
movement direction instead of sighting on the player.

.ideal_yaw
A yaw angle of the intended direction, which will be turned towards at up
to 45 deg / state.  If the enemy is in view and hunt_time is not active,
this will be the exact line towards the enemy.

.pausetime
A monster will leave it's stand state and head towards it's .movetarget when
time &gt; .pausetime.

walkmove(angle, speed) primitive is all or nothing
*/


//
// globals
//
float	current_yaw;

//
// when a monster becomes angry at a player, that monster will be used
// as the sight target the next frame so that monsters near that one
// will wake up even if they wouldn't have noticed the player
//
entity	sight_entity;
float	sight_entity_time;

float(float v) anglemod =
{
	while (v &gt;= 360)
		v = v - 360;
	while (v &lt; 0)
		v = v + 360;
	return v;
};

/*
==============================================================================

MOVETARGET CODE

The angle of the movetarget effects standing and bowing direction, but has no effect on movement, which allways heads to the next target.

targetname
must be present.  The name of this movetarget.

target
the next spot to move to.  If not present, stop here for good.

pausetime
The number of seconds to spend standing or bowing for path_stand or path_bow

==============================================================================
*/


void() movetarget_f =
{
	if (!self.targetname)
		objerror (&quot;monster_movetarget: no targetname&quot;);
		
	self.solid = SOLID_TRIGGER;
	self.touch = t_movetarget;
	setsize (self, '-8 -8 -8', '8 8 8');
	
};

/*QUAKED path_corner (0.5 0.3 0) (-8 -8 -8) (8 8 8)
Monsters will continue walking towards the next target corner.
*/
void() path_corner =
{
	movetarget_f ();
};


/*
=============
t_movetarget

Something has bumped into a movetarget.  If it is a monster
moving towards it, change the next destination and continue.
==============
*/
void() t_movetarget =
{
local entity	temp;

	if (other.movetarget != self)
		return;
	
	if (other.enemy)
		return;		// fighting, not following a path

	temp = self;
	self = other;
	other = temp;

	if (self.classname == &quot;monster_ogre&quot;)
		sound (self, CHAN_VOICE, &quot;ogre/ogdrag.wav&quot;, 1, ATTN_IDLE);// play chainsaw drag sound

//dprint (&quot;t_movetarget\n&quot;);
	self.goalentity = self.movetarget = find (world, targetname, other.target);
	self.ideal_yaw = vectoyaw(self.goalentity.origin - self.origin);
	if (!self.movetarget)
	{
		self.pausetime = time + 999999;
		self.th_stand ();
		return;
	}
};



//============================================================================

/*
=============
range

returns the range catagorization of an entity reletive to self
0	melee range, will become hostile even if back is turned
1	visibility and infront, or visibility and show hostile
2	infront and show hostile
3	only triggered by damage
=============
*/
float(entity targ) range =
{
local vector	spot1, spot2;
local float		r;	
	spot1 = self.origin + self.view_ofs;
	spot2 = targ.origin + targ.view_ofs;
	
	r = vlen (spot1 - spot2);
	if (r &lt; 120)
		return RANGE_MELEE;
	if (r &lt; 500)
		return RANGE_NEAR;
	if (r &lt; 1000)
		return RANGE_MID;
	return RANGE_FAR;
};

/*
=============
visible

returns 1 if the entity is visible to self, even if not infront ()
=============
*/
float (entity targ) visible =
{
	local vector	spot1, spot2;
	
	spot1 = self.origin + self.view_ofs;
	spot2 = targ.origin + targ.view_ofs;
	traceline (spot1, spot2, TRUE, self);	// see through other monsters
	
	if (trace_inopen &amp;&amp; trace_inwater)
		return FALSE;			// sight line crossed contents

	if (trace_fraction == 1)
		return TRUE;
	return FALSE;
};


/*
=============
infront

returns 1 if the entity is in front (in sight) of self
=============
*/
float(entity targ) infront =
{
	local vector	vec;
	local float		dot;
	
	makevectors (self.angles);
	vec = normalize (targ.origin - self.origin);
	dot = vec * v_forward;
	
	if ( dot &gt; 0.3)
	{
		return TRUE;
	}
	return FALSE;
};


//============================================================================

/*
===========
ChangeYaw

Turns towards self.ideal_yaw at self.yaw_speed
Sets the global variable current_yaw
Called every 0.1 sec by monsters
============
*/
/*

void() ChangeYaw =
{
	local float		ideal, move;

//current_yaw = self.ideal_yaw;
// mod down the current angle
	current_yaw = anglemod( self.angles_y );
	ideal = self.ideal_yaw;
	
	if (current_yaw == ideal)
		return;
	
	move = ideal - current_yaw;
	if (ideal &gt; current_yaw)
	{
		if (move &gt; 180)
			move = move - 360;
	}
	else
	{
		if (move &lt; -180)
			move = move + 360;
	}
		
	if (move &gt; 0)
	{
		if (move &gt; self.yaw_speed)
			move = self.yaw_speed;
	}
	else
	{
		if (move &lt; 0-self.yaw_speed )
			move = 0-self.yaw_speed;
	}

	current_yaw = anglemod (current_yaw + move);

	self.angles_y = current_yaw;
};

*/


//============================================================================

void() HuntTarget =
{
	self.goalentity = self.enemy;
	self.think = self.th_run;
	self.ideal_yaw = vectoyaw(self.enemy.origin - self.origin);
	self.nextthink = time + 0.1;
	SUB_AttackFinished (1);	// wait a while before first attack
};

void() SightSound =
{
local float	rsnd;

	if (self.classname == &quot;monster_ogre&quot;)	
		sound (self, CHAN_VOICE, &quot;ogre/ogwake.wav&quot;, 1, ATTN_NORM);
	else if (self.classname == &quot;monster_knight&quot;)
		sound (self, CHAN_VOICE, &quot;knight/ksight.wav&quot;, 1, ATTN_NORM);
	else if (self.classname == &quot;monster_shambler&quot;)
		sound (self, CHAN_VOICE, &quot;shambler/ssight.wav&quot;, 1, ATTN_NORM);
	else if (self.classname == &quot;monster_demon1&quot;)
		sound (self, CHAN_VOICE, &quot;demon/sight2.wav&quot;, 1, ATTN_NORM);
	else if (self.classname == &quot;monster_wizard&quot;)
		sound (self, CHAN_VOICE, &quot;wizard/wsight.wav&quot;, 1, ATTN_NORM);
	else if (self.classname == &quot;monster_zombie&quot;)
		sound (self, CHAN_VOICE, &quot;zombie/z_idle.wav&quot;, 1, ATTN_NORM);
	else if (self.classname == &quot;monster_dog&quot;)
		sound (self, CHAN_VOICE, &quot;dog/dsight.wav&quot;, 1, ATTN_NORM);
	else if (self.classname == &quot;monster_hell_knight&quot;)
		sound (self, CHAN_VOICE, &quot;hknight/sight1.wav&quot;, 1, ATTN_NORM);
	else if (self.classname == &quot;monster_tarbaby&quot;)
		sound (self, CHAN_VOICE, &quot;blob/sight1.wav&quot;, 1, ATTN_NORM);
	else if (self.classname == &quot;monster_vomit&quot;)
		sound (self, CHAN_VOICE, &quot;vomitus/v_sight1.wav&quot;, 1, ATTN_NORM);
	else if (self.classname == &quot;monster_enforcer&quot;)
	{
		rsnd = rint(random() * 3);			
		if (rsnd == 1)
			sound (self, CHAN_VOICE, &quot;enforcer/sight1.wav&quot;, 1, ATTN_NORM);
		else if (rsnd == 2)
			sound (self, CHAN_VOICE, &quot;enforcer/sight2.wav&quot;, 1, ATTN_NORM);
		else if (rsnd == 0)
			sound (self, CHAN_VOICE, &quot;enforcer/sight3.wav&quot;, 1, ATTN_NORM);
		else
			sound (self, CHAN_VOICE, &quot;enforcer/sight4.wav&quot;, 1, ATTN_NORM);
	}
	else if (self.classname == &quot;monster_army&quot;)
		sound (self, CHAN_VOICE, &quot;soldier/sight1.wav&quot;, 1, ATTN_NORM);
	else if (self.classname == &quot;monster_shalrath&quot;)
		sound (self, CHAN_VOICE, &quot;shalrath/sight.wav&quot;, 1, ATTN_NORM);
};

void() FoundTarget =
{
	if (self.enemy.classname == &quot;player&quot;)
	{	// let other monsters see this monster for a while
		sight_entity = self;
		sight_entity_time = time;
	}
	
	self.show_hostile = time + 1;		// wake up other monsters

	SightSound ();
	HuntTarget ();
};

/*
===========
FindTarget

Self is currently not attacking anything, so try to find a target

Returns TRUE if an enemy was sighted

When a player fires a missile, the point of impact becomes a fakeplayer so
that monsters that see the impact will respond as if they had seen the
player.

To avoid spending too much time, only a single client (or fakeclient) is
checked each frame.  This means multi player games will have slightly
slower noticing monsters.
============
*/
float() FindTarget =
{
	local entity	client;
	local float		r;

// if the first spawnflag bit is set, the monster will only wake up on
// really seeing the player, not another monster getting angry

// spawnflags &amp; 3 is a big hack, because zombie crucified used the first
// spawn flag prior to the ambush flag, and I forgot about it, so the second
// spawn flag works as well
	if (sight_entity_time &gt;= time - 0.1 &amp;&amp; !(self.spawnflags &amp; 3) )
	{
		client = sight_entity;
		if (client.enemy == self.enemy)
			return;
	}
	else
	{
		client = checkclient ();
		if (!client)
			return FALSE;	// current check entity isn't in PVS
	}

	if (client == self.enemy)
		return FALSE;

	if (client.flags &amp; FL_NOTARGET)
		return FALSE;
	if (client.items &amp; IT_INVISIBILITY)
		return FALSE;

	r = range (client);
	if (r == RANGE_FAR)
		return FALSE;
		
	if (!visible (client))
		return FALSE;

	if (r == RANGE_NEAR)
	{
		if (client.show_hostile &lt; time &amp;&amp; !infront (client))
			return FALSE;
	}
	else if (r == RANGE_MID)
	{
		if ( /* client.show_hostile &lt; time || */ !infront (client))
			return FALSE;
	}
	
//
// got one
//
	self.enemy = client;
	if (self.enemy.classname != &quot;player&quot;)
	{
		self.enemy = self.enemy.enemy;
		if (self.enemy.classname != &quot;player&quot;)
		{
			self.enemy = world;
			return FALSE;
		}
	}
	
	FoundTarget ();

	return TRUE;
};


//=============================================================================

void(float dist) ai_forward =
{
	walkmove (self.angles_y, dist);
};

void(float dist) ai_back =
{
	walkmove ( (self.angles_y+180), dist);
};


/*
=============
ai_pain

stagger back a bit
=============
*/
void(float dist) ai_pain =
{
	ai_back (dist);
/*
	local float	away;
	
	away = anglemod (vectoyaw (self.origin - self.enemy.origin) 
	+ 180*(random()- 0.5) );
	
	walkmove (away, dist);
*/
};

/*
=============
ai_painforward

stagger back a bit
=============
*/
void(float dist) ai_painforward =
{
	walkmove (self.ideal_yaw, dist);
};

/*
=============
ai_walk

The monster is walking it's beat
=============
*/
void(float dist) ai_walk =
{
	local vector		mtemp;
	
	movedist = dist;
	
	if (self.classname == &quot;monster_dragon&quot;)
	{
		movetogoal (dist);
		return;
	}
	// check for noticing a player
	if (FindTarget ())
		return;

	movetogoal (dist);
};


/*
=============
ai_stand

The monster is staying in one place for a while, with slight angle turns
=============
*/
void() ai_stand =
{
	if (FindTarget ())
		return;
	
	if (time &gt; self.pausetime)
	{
		self.th_walk ();
		return;
	}
	
// change angle slightly

};

/*
=============
ai_turn

don't move, but turn towards ideal_yaw
=============
*/
void() ai_turn =
{
	if (FindTarget ())
		return;
	
	ChangeYaw ();
};

//=============================================================================

/*
=============
ChooseTurn
=============
*/
void(vector dest3) ChooseTurn =
{
	local vector	dir, newdir;
	
	dir = self.origin - dest3;

	newdir_x = trace_plane_normal_y;
	newdir_y = 0 - trace_plane_normal_x;
	newdir_z = 0;
	
	if (dir * newdir &gt; 0)
	{
		dir_x = 0 - trace_plane_normal_y;
		dir_y = trace_plane_normal_x;
	}
	else
	{
		dir_x = trace_plane_normal_y;
		dir_y = 0 - trace_plane_normal_x;
	}

	dir_z = 0;
	self.ideal_yaw = vectoyaw(dir);	
};

/*
============
FacingIdeal

============
*/
float() FacingIdeal =
{
	local	float	delta;
	
	delta = anglemod(self.angles_y - self.ideal_yaw);
	if (delta &gt; 45 &amp;&amp; delta &lt; 315)
		return FALSE;
	return TRUE;
};


//=============================================================================

float()	WizardCheckAttack;
float()	DogCheckAttack;

float() CheckAnyAttack =
{
	if (!enemy_vis)
		return;
	if (self.classname == &quot;monster_army&quot;)
		return SoldierCheckAttack ();
	if (self.classname == &quot;monster_ogre&quot;)
		return OgreCheckAttack ();
	if (self.classname == &quot;monster_shambler&quot;)
		return ShamCheckAttack ();
	if (self.classname == &quot;monster_demon1&quot;)
		return DemonCheckAttack ();
	if (self.classname == &quot;monster_dog&quot;)
		return DogCheckAttack ();
	if (self.classname == &quot;monster_wizard&quot;)
		return WizardCheckAttack ();
	return CheckAttack ();
};


/*
=============
ai_run_melee

Turn and close until within an angle to launch a melee attack
=============
*/
void() ai_run_melee =
{
	self.ideal_yaw = enemy_yaw;
	ChangeYaw ();

	if (FacingIdeal())
	{
		self.th_melee ();
		self.attack_state = AS_STRAIGHT;
	}
};


/*
=============
ai_run_missile

Turn in place until within an angle to launch a missile attack
=============
*/
void() ai_run_missile =
{
	self.ideal_yaw = enemy_yaw;
	ChangeYaw ();
	if (FacingIdeal())
	{
		self.th_missile ();
		self.attack_state = AS_STRAIGHT;
	}
};


/*
=============
ai_run_slide

Strafe sideways, but stay at aproximately the same range
=============
*/
void() ai_run_slide =
{
	local float	ofs;
	
	self.ideal_yaw = enemy_yaw;
	ChangeYaw ();
	if (self.lefty)
		ofs = 90;
	else
		ofs = -90;
	
	if (walkmove (self.ideal_yaw + ofs, movedist))
		return;
		
	self.lefty = 1 - self.lefty;
	
	walkmove (self.ideal_yaw - ofs, movedist);
};


/*
=============
ai_run

The monster has an enemy it is trying to kill
=============
*/
void(float dist) ai_run =
{
	local	vector	delta;
	local	float	axis;
	local	float	direct, ang_rint, ang_floor, ang_ceil;
	
	movedist = dist;
// see if the enemy is dead
	if (self.enemy.health &lt;= 0)
	{
		self.enemy = world;
	// FIXME: look all around for other targets
		if (self.oldenemy.health &gt; 0)
		{
			self.enemy = self.oldenemy;
			HuntTarget ();
		}
		else
		{
			if (self.movetarget)
				self.th_walk ();
			else
				self.th_stand ();
			return;
		}
	}

	self.show_hostile = time + 1;		// wake up other monsters

// check knowledge of enemy
	enemy_vis = visible(self.enemy);
	if (enemy_vis)
		self.search_time = time + 5;

// look for other coop players
	if (coop &amp;&amp; self.search_time &lt; time)
	{
		if (FindTarget ())
			return;
	}

	enemy_infront = infront(self.enemy);
	enemy_range = range(self.enemy);
	enemy_yaw = vectoyaw(self.enemy.origin - self.origin);
	
	if (self.attack_state == AS_MISSILE)
	{
//dprint (&quot;ai_run_missile\n&quot;);
		ai_run_missile ();
		return;
	}
	if (self.attack_state == AS_MELEE)
	{
//dprint (&quot;ai_run_melee\n&quot;);
		ai_run_melee ();
		return;
	}

	if (CheckAnyAttack ())
		return;					// beginning an attack
		
	if (self.attack_state == AS_SLIDING)
	{
		ai_run_slide ();
		return;
	}
		
// head straight in
	movetogoal (dist);		// done in C code...
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>3c4ky1hgn213t385wu98ondjwe0y0jw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>aim</title>
    <ns>0</ns>
    <id>199</id>
    <revision>
      <id>375</id>
      <timestamp>2008-02-22T19:46:05Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  vector '''aim'''(entity ''e'', float ''missilespeed'')  Returns a vector along which the entity ''e'' can shoot. Usually, ''e'' is a player, and the vector returned is calculated by auto-...</comment>
      <text xml:space="preserve" bytes="223"> vector '''aim'''(entity ''e'', float ''missilespeed'')

Returns a vector along which the entity ''e'' can shoot.
Usually, ''e'' is a player, and the vector returned is calculated by auto-aiming to the closest enemy entity.</text>
      <sha1>fcdf8utb9t54dcen0vv3opctoryxotx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2383</id>
      <parentid>375</parentid>
      <timestamp>2013-03-28T14:57:35Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Spirit moved page [[Aim]] to [[aim]]: lowercase</comment>
      <text xml:space="preserve" bytes="223"> vector '''aim'''(entity ''e'', float ''missilespeed'')

Returns a vector along which the entity ''e'' can shoot.
Usually, ''e'' is a player, and the vector returned is calculated by auto-aiming to the closest enemy entity.</text>
      <sha1>fcdf8utb9t54dcen0vv3opctoryxotx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2746</id>
      <parentid>2383</parentid>
      <timestamp>2013-04-03T01:57:44Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="404">====Syntax:====
&lt;code&gt;vector aim(entity e, float speed)&lt;/code&gt;

Used for player weapons and links to the sv_aim console variable for autoaim.
====Parameters:====
:&lt;code&gt;f&lt;/code&gt; - The float value to convert
====Returns:====
:Returns a vector along which the entity ''e'' can shoot.  The vector is calculated based on the sv_aim console variable to the closest enemy entity.


[[Category:QuakeC Function]]</text>
      <sha1>tgy7rear8npslx9wtxv5oj1qasizkfh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>ambient level</title>
    <ns>0</ns>
    <id>85</id>
    <revision>
      <id>145</id>
      <timestamp>2007-10-30T22:56:43Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=ambient_level |default-value=0.3 |saved-to-config=no }} Controls the volume of ambient sounds in the game (for example, wind, comp...</comment>
      <text xml:space="preserve" bytes="226">{{lowercase-underscores}}{{Infobox Console variable
|name=ambient_level
|default-value=0.3
|saved-to-config=no
}}
Controls the volume of ambient sounds in the game (for example, wind, computer hums, etc)

{{Console variables}}</text>
      <sha1>79o2euiknkgpdj6lpxs40xnxci1hhp7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2502</id>
      <parentid>145</parentid>
      <timestamp>2013-03-29T14:21:07Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Ambient level]] to [[ambient level]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="226">{{lowercase-underscores}}{{Infobox Console variable
|name=ambient_level
|default-value=0.3
|saved-to-config=no
}}
Controls the volume of ambient sounds in the game (for example, wind, computer hums, etc)

{{Console variables}}</text>
      <sha1>79o2euiknkgpdj6lpxs40xnxci1hhp7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>ambientsound</title>
    <ns>0</ns>
    <id>801</id>
    <revision>
      <id>2346</id>
      <timestamp>2013-03-27T02:25:04Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;====Syntax:==== &lt;code&gt;void ambientsound(vector pos, string sample, float volume, float attenuation)&lt;/code&gt;  Starts a sound as an ambient sound.  Unlike normal sounds started f...&quot;</comment>
      <text xml:space="preserve" bytes="1289">====Syntax:====
&lt;code&gt;void ambientsound(vector pos, string sample, float volume, float attenuation)&lt;/code&gt;

Starts a sound as an ambient sound.  Unlike normal sounds started from the '''sound''' function, an ambient sound will never stop playing, even if the player moves out of audible range.  It will also be properly registered by the engine if it is started outside of hearing range of the player.
====Parameters:====
:&lt;code&gt;pos&lt;/code&gt; - The coordinates for the origin of the sound.
:&lt;code&gt;sample&lt;/code&gt; - The path to the sound file.  Unlike models, sounds have /sound/ already present, so do not include that directory in the pathname.  This sound MUST be looped by placing markers in the .wav file.
:&lt;code&gt;volume&lt;/code&gt; - A value between 0.0 and 1.0 that controls the volume of the sound.  0.0 is silent, 1.0 is full volume.
:&lt;code&gt;attenuation&lt;/code&gt; - A value greater than or equal to 0 and less than 4 that controls how fast the sound's volume attenuated from distance.  0 can be heard everywhere in the level, 1 can be heard up to 1000 units and 3.999 has a radius of about 250 units.
====Returns:====
:void
====Other Details:====
There is a separate limit to how many ambient sounds can be declared in a map.  In stock Quake, this is 128. (VERIFY?)


[[Category:QuakeC Function]]</text>
      <sha1>06rfjo63h3lucttx4vdbm5xnmeto741</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2347</id>
      <parentid>2346</parentid>
      <timestamp>2013-03-27T02:25:40Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="1321">====Syntax:====
&lt;code&gt;void ambientsound(vector pos, string sample, float volume, float attenuation)&lt;/code&gt;

Starts a sound as an ambient sound.  Unlike normal sounds started from the '''sound''' function, an ambient sound will never stop playing, even if the player moves out of audible range.  It will also be properly registered by the engine if it is started outside of hearing range of the player.
====Parameters:====
:&lt;code&gt;pos&lt;/code&gt; - The coordinates for the origin of the sound.
:&lt;code&gt;sample&lt;/code&gt; - The path to the sound file.  Unlike models, sounds have /sound/ already present, so do not include that directory in the pathname.  This sound MUST be looped by placing markers in the .wav file.
:&lt;code&gt;volume&lt;/code&gt; - A value between 0.0 and 1.0 that controls the volume of the sound.  0.0 is silent, 1.0 is full volume.
:&lt;code&gt;attenuation&lt;/code&gt; - A value greater than or equal to 0 and less than 4 that controls how fast the sound's volume attenuated from distance.  0 can be heard everywhere in the level, 1 can be heard up to 1000 units and 3.999 has a radius of about 250 units.
====Returns:====
:void
====Other Details:====
There is a separate limit to how many ambient sounds can be placed in a map (even if they are the same sound).  In stock Quake, this is 128. (VERIFY?)


[[Category:QuakeC Function]]</text>
      <sha1>1janctbcgt9rkzjp2bjpn39mi07o3tu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2364</id>
      <parentid>2347</parentid>
      <timestamp>2013-03-27T21:03:22Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>/* Other Details: */ linked to Engine Limits page</comment>
      <text xml:space="preserve" bytes="1411">====Syntax:====
&lt;code&gt;void ambientsound(vector pos, string sample, float volume, float attenuation)&lt;/code&gt;

Starts a sound as an ambient sound.  Unlike normal sounds started from the '''sound''' function, an ambient sound will never stop playing, even if the player moves out of audible range.  It will also be properly registered by the engine if it is started outside of hearing range of the player.
====Parameters:====
:&lt;code&gt;pos&lt;/code&gt; - The coordinates for the origin of the sound.
:&lt;code&gt;sample&lt;/code&gt; - The path to the sound file.  Unlike models, sounds have /sound/ already present, so do not include that directory in the pathname.  This sound MUST be looped by placing markers in the .wav file.
:&lt;code&gt;volume&lt;/code&gt; - A value between 0.0 and 1.0 that controls the volume of the sound.  0.0 is silent, 1.0 is full volume.
:&lt;code&gt;attenuation&lt;/code&gt; - A value greater than or equal to 0 and less than 4 that controls how fast the sound's volume attenuated from distance.  0 can be heard everywhere in the level, 1 can be heard up to 1000 units and 3.999 has a radius of about 250 units.
====Returns:====
:void
====Other Details:====
There is a separate limit to how many ambient sounds can be placed in a map (even if they are the same sound).  In stock Quake, this is 128. You can view the known limits for other engines at the [[Engine Limits#Sounds|Engine Limits]] page.


[[Category:QuakeC Function]]</text>
      <sha1>lt7hxnlubqymvjn5in5ahltlu5lqobm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>amtest.qc</title>
    <ns>0</ns>
    <id>832</id>
    <revision>
      <id>2448</id>
      <timestamp>2013-03-29T10:01:52Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for certain test functions. They are not used anywhere in the game.   &lt;pre&gt; /*~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~...&quot;</comment>
      <text xml:space="preserve" bytes="1826">This [[Quake-C]] file contains the code for certain test functions. They are not used anywhere in the game.


&lt;pre&gt;
/*~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;
~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~*/

void() test_teleport_touch;
void() tele_done;

/*QUAKED test_teleport (0 .5 .8) ?
Teleporter testing
*/
void() test_teleport =
{
	precache_model (&quot;sprites/s_aball.spr&quot;);
	setsize (self, self.mins, self.maxs);	
	self.touch = test_teleport_touch;
	self.solid = 1;
	
	if (!self.target)
		objerror (&quot;no target\n&quot;);
};

void() test_teleport_touch =
{
local entity oldself;
	other.movetype = MOVETYPE_TOSS;
//	other.solid = SOLID_NOT;
	other.dest = '256 -128 -128';
	oldself = self;
	self = other;
//	SUB_CalcMove (self.dest, 200, tele_done);
	self.velocity = '1000 0 0 ';
	self = oldself;
};

void() tele_done =
{
	self.movetype = MOVETYPE_WALK;
	self.solid = SOLID_SLIDEBOX;	
};

/*~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;
~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~*/

void() test_goaway;
void() test_spawn;

/*QUAKED test_fodder (0 .5 .8) ?
beating guy
*/
void() test_fodder =
{
	self.nextthink = time + 3;
	self.think = test_spawn;
};

void() test_spawn =
{
local entity	body;
	makevectors (self.angles);

	body = spawn();
	setmodel (body, &quot;progs/soldier.mdl&quot;);
	setorigin (body, self.origin);
	body.classname = &quot;player&quot;;
	body.health = 1000;
	body.frags = 0;
	body.takedamage = DAMAGE_AIM;
	body.solid = SOLID_SLIDEBOX;
	body.movetype = MOVETYPE_WALK;
	body.show_hostile = 0;
	body.weapon = 1;
	body.velocity = v_forward * 200;

	body.nextthink = time + 5;
	body.think = test_goaway;

self.nextthink = time + 3;
self.think = test_spawn;

};

void() test_goaway =
{
	remove (self);
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>b9d4a5bt95jpwdm126o3590xaop4fik</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>bgmvolume</title>
    <ns>0</ns>
    <id>53</id>
    <revision>
      <id>66</id>
      <timestamp>2007-10-30T18:45:47Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase}} bgmvolume controls the volume of the CD music.  Default: 1.0</comment>
      <text xml:space="preserve" bytes="74">{{lowercase}}
bgmvolume controls the volume of the CD music.

Default: 1.0</text>
      <sha1>b387y25h4ki6ient2txv4knuxub7mmh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>67</id>
      <parentid>66</parentid>
      <timestamp>2007-10-30T19:01:38Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="90">{{lowercase|title=bgmvolume}}
bgmvolume controls the volume of the CD music.

Default: 1.0</text>
      <sha1>n0jfpjtrfn7ywezmqje1qi3p69o2eet</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>68</id>
      <parentid>67</parentid>
      <timestamp>2007-10-30T19:24:30Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="87">{{DISPLAYTITLE:bgmvolume}}
bgmvolume controls the volume of the CD music.

Default: 1.0</text>
      <sha1>0l6ly3fpwewyrwqfp11x1rivp8oxwgt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>69</id>
      <parentid>68</parentid>
      <timestamp>2007-10-30T19:24:46Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="139">{{DISPLAYTITLE:{{#if:{{NAMESPACE}}|{{NAMESPACE}}:|}}{{lcfirst:{{PAGENAME}}}}}}
bgmvolume controls the volume of the CD music.

Default: 1.0</text>
      <sha1>9ardf1003xgu9n8v0e7dn3oqrddemz2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>70</id>
      <parentid>69</parentid>
      <timestamp>2007-10-30T19:25:08Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="102">{{DISPLAYTITLE:{{lcfirst:{{PAGENAME}}}}}}
bgmvolume controls the volume of the CD music.

Default: 1.0</text>
      <sha1>87fm4ah0fw6wg3ghpn0nfg9k1b3zkxd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>71</id>
      <parentid>70</parentid>
      <timestamp>2007-10-30T19:25:26Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="74">{{lowercase}}
bgmvolume controls the volume of the CD music.

Default: 1.0</text>
      <sha1>b387y25h4ki6ient2txv4knuxub7mmh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>79</id>
      <parentid>71</parentid>
      <timestamp>2007-10-30T19:38:40Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="86">{{lowercase-underscores}}
bgmvolume controls the volume of the CD music.

Default: 1.0</text>
      <sha1>35dt6jnhwre8chh9euvk320waiju4r7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>90</id>
      <parentid>79</parentid>
      <timestamp>2007-10-30T19:48:08Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="118">{{lowercase-underscores}}
bgmvolume controls the volume of the CD music.

Default: 1.0

[[Category:Console variables]]</text>
      <sha1>oj9hmy1owkz2tyx9ea0upfwf483dwn1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>94</id>
      <parentid>90</parentid>
      <timestamp>2007-10-30T19:56:42Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="109">{{lowercase-underscores}}
bgmvolume controls the volume of the CD music.

Default: 1.0

{{Console variables}}</text>
      <sha1>b1y23e0wx1e3fxmoljkwno9g1h69r8w</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>141</id>
      <parentid>94</parentid>
      <timestamp>2007-10-30T22:43:10Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="180">{{lowercase-underscores}}{{Infobox Console variable
|name=bgmvolume
|default-value=1.0
|saved-to-config=yes
}}
bgmvolume controls the volume of the CD music.

{{Console variables}}</text>
      <sha1>hqwfp8h8sf9t69vrlluptsxq188kirv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>142</id>
      <parentid>141</parentid>
      <timestamp>2007-10-30T22:44:58Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="246">{{lowercase-underscores}}{{Infobox Console variable
|name=bgmvolume
|default-value=1
|saved-to-config=yes
}}
bgmvolume controls the volume of the CD music. 1 is full volume; 0 is no music (and actually pauses the CD track).

{{Console variables}}</text>
      <sha1>26tiffqgnu9019mh39wzqvxwqb7qjtw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>143</id>
      <parentid>142</parentid>
      <timestamp>2007-10-30T22:45:10Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="266">{{lowercase-underscores}}{{Infobox Console variable
|name=bgmvolume
|default-value=1
|saved-to-config=yes
}}
bgmvolume controls the volume of the CD music. 1 is full volume; 0.5 is half volume; 0 is no music (and actually pauses the CD track).

{{Console variables}}</text>
      <sha1>dbnrs2k3j37t5trlal1utp1o3i6ru4n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2385</id>
      <parentid>143</parentid>
      <timestamp>2013-03-28T14:57:49Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Spirit moved page [[Bgmvolume]] to [[bgmvolume]]</comment>
      <text xml:space="preserve" bytes="266">{{lowercase-underscores}}{{Infobox Console variable
|name=bgmvolume
|default-value=1
|saved-to-config=yes
}}
bgmvolume controls the volume of the CD music. 1 is full volume; 0.5 is half volume; 0 is no music (and actually pauses the CD track).

{{Console variables}}</text>
      <sha1>dbnrs2k3j37t5trlal1utp1o3i6ru4n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>boss.qc</title>
    <ns>0</ns>
    <id>833</id>
    <revision>
      <id>2449</id>
      <timestamp>2013-03-29T10:04:12Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for the [[Chthon]] boss [[Monsters | monster]].   &lt;pre&gt; /* ============================================================================...&quot;</comment>
      <text xml:space="preserve" bytes="12525">This [[Quake-C]] file contains the code for the [[Chthon]] boss [[Monsters | monster]].


&lt;pre&gt;
/*
==============================================================================

BOSS-ONE

==============================================================================
*/
$cd id1/models/boss1
$origin 0 0 -15
$base base
$skin skin
$scale 5

$frame rise1 rise2 rise3 rise4 rise5 rise6 rise7 rise8 rise9 rise10
$frame rise11 rise12 rise13 rise14 rise15 rise16 rise17 

$frame walk1 walk2 walk3 walk4 walk5 walk6 walk7 walk8
$frame walk9 walk10 walk11 walk12 walk13 walk14 walk15
$frame walk16 walk17 walk18 walk19 walk20 walk21 walk22
$frame walk23 walk24 walk25 walk26 walk27 walk28 walk29 walk30 walk31

$frame death1 death2 death3 death4 death5 death6 death7 death8 death9

$frame attack1 attack2 attack3 attack4 attack5 attack6 attack7 attack8
$frame attack9 attack10 attack11 attack12 attack13 attack14 attack15
$frame attack16 attack17 attack18 attack19 attack20 attack21 attack22
$frame attack23

$frame shocka1 shocka2 shocka3 shocka4 shocka5 shocka6 shocka7 shocka8
$frame shocka9 shocka10 

$frame shockb1 shockb2 shockb3 shockb4 shockb5 shockb6

$frame shockc1 shockc2 shockc3 shockc4 shockc5 shockc6 shockc7 shockc8 
$frame shockc9 shockc10


void(vector p) boss_missile;

void() boss_face =
{
	
// go for another player if multi player
	if (self.enemy.health &lt;= 0 || random() &lt; 0.02)
	{
		self.enemy = find(self.enemy, classname, &quot;player&quot;);
		if (!self.enemy)
			self.enemy = find(self.enemy, classname, &quot;player&quot;);
	}
	ai_face();
};

void() boss_rise1	=[	$rise1, boss_rise2 ] {
sound (self, CHAN_WEAPON, &quot;boss1/out1.wav&quot;, 1, ATTN_NORM);
};
void() boss_rise2	=[	$rise2, boss_rise3 ] {
sound (self, CHAN_VOICE, &quot;boss1/sight1.wav&quot;, 1, ATTN_NORM);
};
void() boss_rise3	=[	$rise3, boss_rise4 ] {};
void() boss_rise4	=[	$rise4, boss_rise5 ] {};
void() boss_rise5	=[	$rise5, boss_rise6 ] {};
void() boss_rise6	=[	$rise6, boss_rise7 ] {};
void() boss_rise7	=[	$rise7, boss_rise8 ] {};
void() boss_rise8	=[	$rise8, boss_rise9 ] {};
void() boss_rise9	=[	$rise9, boss_rise10 ] {};
void() boss_rise10	=[	$rise10, boss_rise11 ] {};
void() boss_rise11	=[	$rise11, boss_rise12 ] {};
void() boss_rise12	=[	$rise12, boss_rise13 ] {};
void() boss_rise13	=[	$rise13, boss_rise14 ] {};
void() boss_rise14	=[	$rise14, boss_rise15 ] {};
void() boss_rise15	=[	$rise15, boss_rise16 ] {};
void() boss_rise16	=[	$rise16, boss_rise17 ] {};
void() boss_rise17	=[	$rise17, boss_missile1 ] {};

void() boss_idle1	=[	$walk1, boss_idle2 ]
{
// look for other players
};
void() boss_idle2	=[	$walk2, boss_idle3 ] {boss_face();};
void() boss_idle3	=[	$walk3, boss_idle4 ] {boss_face();};
void() boss_idle4	=[	$walk4, boss_idle5 ] {boss_face();};
void() boss_idle5	=[	$walk5, boss_idle6 ] {boss_face();};
void() boss_idle6	=[	$walk6, boss_idle7 ] {boss_face();};
void() boss_idle7	=[	$walk7, boss_idle8 ] {boss_face();};
void() boss_idle8	=[	$walk8, boss_idle9 ] {boss_face();};
void() boss_idle9	=[	$walk9, boss_idle10 ] {boss_face();};
void() boss_idle10	=[	$walk10, boss_idle11 ] {boss_face();};
void() boss_idle11	=[	$walk11, boss_idle12 ] {boss_face();};
void() boss_idle12	=[	$walk12, boss_idle13 ] {boss_face();};
void() boss_idle13	=[	$walk13, boss_idle14 ] {boss_face();};
void() boss_idle14	=[	$walk14, boss_idle15 ] {boss_face();};
void() boss_idle15	=[	$walk15, boss_idle16 ] {boss_face();};
void() boss_idle16	=[	$walk16, boss_idle17 ] {boss_face();};
void() boss_idle17	=[	$walk17, boss_idle18 ] {boss_face();};
void() boss_idle18	=[	$walk18, boss_idle19 ] {boss_face();};
void() boss_idle19	=[	$walk19, boss_idle20 ] {boss_face();};
void() boss_idle20	=[	$walk20, boss_idle21 ] {boss_face();};
void() boss_idle21	=[	$walk21, boss_idle22 ] {boss_face();};
void() boss_idle22	=[	$walk22, boss_idle23 ] {boss_face();};
void() boss_idle23	=[	$walk23, boss_idle24 ] {boss_face();};
void() boss_idle24	=[	$walk24, boss_idle25 ] {boss_face();};
void() boss_idle25	=[	$walk25, boss_idle26 ] {boss_face();};
void() boss_idle26	=[	$walk26, boss_idle27 ] {boss_face();};
void() boss_idle27	=[	$walk27, boss_idle28 ] {boss_face();};
void() boss_idle28	=[	$walk28, boss_idle29 ] {boss_face();};
void() boss_idle29	=[	$walk29, boss_idle30 ] {boss_face();};
void() boss_idle30	=[	$walk30, boss_idle31 ] {boss_face();};
void() boss_idle31	=[	$walk31, boss_idle1 ] {boss_face();};

void() boss_missile1	=[	$attack1, boss_missile2 ] {boss_face();};
void() boss_missile2	=[	$attack2, boss_missile3 ] {boss_face();};
void() boss_missile3	=[	$attack3, boss_missile4 ] {boss_face();};
void() boss_missile4	=[	$attack4, boss_missile5 ] {boss_face();};
void() boss_missile5	=[	$attack5, boss_missile6 ] {boss_face();};
void() boss_missile6	=[	$attack6, boss_missile7 ] {boss_face();};
void() boss_missile7	=[	$attack7, boss_missile8 ] {boss_face();};
void() boss_missile8	=[	$attack8, boss_missile9 ] {boss_face();};
void() boss_missile9	=[	$attack9, boss_missile10 ] {boss_missile('100 100 200');};
void() boss_missile10	=[	$attack10, boss_missile11 ] {boss_face();};
void() boss_missile11	=[	$attack11, boss_missile12 ] {boss_face();};
void() boss_missile12	=[	$attack12, boss_missile13 ] {boss_face();};
void() boss_missile13	=[	$attack13, boss_missile14 ] {boss_face();};
void() boss_missile14	=[	$attack14, boss_missile15 ] {boss_face();};
void() boss_missile15	=[	$attack15, boss_missile16 ] {boss_face();};
void() boss_missile16	=[	$attack16, boss_missile17 ] {boss_face();};
void() boss_missile17	=[	$attack17, boss_missile18 ] {boss_face();};
void() boss_missile18	=[	$attack18, boss_missile19 ] {boss_face();};
void() boss_missile19	=[	$attack19, boss_missile20 ] {boss_face();};
void() boss_missile20	=[	$attack20, boss_missile21 ] {boss_missile('100 -100 200');};
void() boss_missile21	=[	$attack21, boss_missile22 ] {boss_face();};
void() boss_missile22	=[	$attack22, boss_missile23 ] {boss_face();};
void() boss_missile23	=[	$attack23, boss_missile1 ] {boss_face();};

void() boss_shocka1 =[	$shocka1, boss_shocka2 ] {};
void() boss_shocka2 =[	$shocka2, boss_shocka3 ] {};
void() boss_shocka3 =[	$shocka3, boss_shocka4 ] {};
void() boss_shocka4 =[	$shocka4, boss_shocka5 ] {};
void() boss_shocka5 =[	$shocka5, boss_shocka6 ] {};
void() boss_shocka6 =[	$shocka6, boss_shocka7 ] {};
void() boss_shocka7 =[	$shocka7, boss_shocka8 ] {};
void() boss_shocka8 =[	$shocka8, boss_shocka9 ] {};
void() boss_shocka9 =[	$shocka9, boss_shocka10 ] {};
void() boss_shocka10 =[	$shocka10, boss_missile1 ] {};

void() boss_shockb1 =[	$shockb1, boss_shockb2 ] {};
void() boss_shockb2 =[	$shockb2, boss_shockb3 ] {};
void() boss_shockb3 =[	$shockb3, boss_shockb4 ] {};
void() boss_shockb4 =[	$shockb4, boss_shockb5 ] {};
void() boss_shockb5 =[	$shockb5, boss_shockb6 ] {};
void() boss_shockb6 =[	$shockb6, boss_shockb7 ] {};
void() boss_shockb7 =[	$shockb1, boss_shockb8 ] {};
void() boss_shockb8 =[	$shockb2, boss_shockb9 ] {};
void() boss_shockb9 =[	$shockb3, boss_shockb10 ] {};
void() boss_shockb10 =[	$shockb4, boss_missile1 ] {};

void() boss_shockc1 =[	$shockc1, boss_shockc2 ] {};
void() boss_shockc2 =[	$shockc2, boss_shockc3 ] {};
void() boss_shockc3 =[	$shockc3, boss_shockc4 ] {};
void() boss_shockc4 =[	$shockc4, boss_shockc5 ] {};
void() boss_shockc5 =[	$shockc5, boss_shockc6 ] {};
void() boss_shockc6 =[	$shockc6, boss_shockc7 ] {};
void() boss_shockc7 =[	$shockc7, boss_shockc8 ] {};
void() boss_shockc8 =[	$shockc8, boss_shockc9 ] {};
void() boss_shockc9 =[	$shockc9, boss_shockc10 ] {};
void() boss_shockc10 =[	$shockc10, boss_death1 ] {};

void() boss_death1 = [$death1, boss_death2] {
sound (self, CHAN_VOICE, &quot;boss1/death.wav&quot;, 1, ATTN_NORM);
};
void() boss_death2 = [$death2, boss_death3] {};
void() boss_death3 = [$death3, boss_death4] {};
void() boss_death4 = [$death4, boss_death5] {};
void() boss_death5 = [$death5, boss_death6] {};
void() boss_death6 = [$death6, boss_death7] {};
void() boss_death7 = [$death7, boss_death8] {};
void() boss_death8 = [$death8, boss_death9] {};
void() boss_death9 = [$death9, boss_death10]
{
	sound (self, CHAN_BODY, &quot;boss1/out1.wav&quot;, 1, ATTN_NORM);
	WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
	WriteByte (MSG_BROADCAST, TE_LAVASPLASH);
	WriteCoord (MSG_BROADCAST, self.origin_x);
	WriteCoord (MSG_BROADCAST, self.origin_y);
	WriteCoord (MSG_BROADCAST, self.origin_z);
};

void() boss_death10 = [$death9, boss_death10]
{
	killed_monsters = killed_monsters + 1;
	WriteByte (MSG_ALL, SVC_KILLEDMONSTER);	// FIXME: reliable broadcast
	SUB_UseTargets ();
	remove (self);
};

void(vector p) boss_missile =
{
	local	vector	offang;
	local	vector	org, vec, d;
	local	float	t;

	offang = vectoangles (self.enemy.origin - self.origin);	
	makevectors (offang);

	org = self.origin + p_x*v_forward + p_y*v_right + p_z*'0 0 1';
	
// lead the player on hard mode
	if (skill &gt; 1)
	{
		t = vlen(self.enemy.origin - org) / 300;
		vec = self.enemy.velocity;
		vec_z = 0;
		d = self.enemy.origin + t * vec;		
	}
	else
	{
		d = self.enemy.origin;
	}
	
	vec = normalize (d - org);

	launch_spike (org, vec);
	setmodel (newmis, &quot;progs/lavaball.mdl&quot;);
	newmis.avelocity = '200 100 300';
	setsize (newmis, VEC_ORIGIN, VEC_ORIGIN);		
	newmis.velocity = vec*300;
	newmis.touch = T_MissileTouch; // rocket explosion
	sound (self, CHAN_WEAPON, &quot;boss1/throw.wav&quot;, 1, ATTN_NORM);

// check for dead enemy
	if (self.enemy.health &lt;= 0)
		boss_idle1 ();
};


void() boss_awake =
{
	self.solid = SOLID_SLIDEBOX;
	self.movetype = MOVETYPE_STEP;
	self.takedamage = DAMAGE_NO;
	
	setmodel (self, &quot;progs/boss.mdl&quot;);
	setsize (self, '-128 -128 -24', '128 128 256');
	
	if (skill == 0)
		self.health = 1;
	else
		self.health = 3;

	self.enemy = activator;

	WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
	WriteByte (MSG_BROADCAST, TE_LAVASPLASH);
	WriteCoord (MSG_BROADCAST, self.origin_x);
	WriteCoord (MSG_BROADCAST, self.origin_y);
	WriteCoord (MSG_BROADCAST, self.origin_z);

	self.yaw_speed = 20;
	boss_rise1 ();
};


/*QUAKED monster_boss (1 0 0) (-128 -128 -24) (128 128 256)
*/
void() monster_boss =
{
	if (deathmatch)
	{
		remove(self);
		return;
	}
	precache_model (&quot;progs/boss.mdl&quot;);
	precache_model (&quot;progs/lavaball.mdl&quot;);

	precache_sound (&quot;weapons/rocket1i.wav&quot;);
	precache_sound (&quot;boss1/out1.wav&quot;);
	precache_sound (&quot;boss1/sight1.wav&quot;);
	precache_sound (&quot;misc/power.wav&quot;);
	precache_sound (&quot;boss1/throw.wav&quot;);
	precache_sound (&quot;boss1/pain.wav&quot;);
	precache_sound (&quot;boss1/death.wav&quot;);

	total_monsters = total_monsters + 1;

	self.use = boss_awake;
};

//===========================================================================

entity	le1, le2;
float	lightning_end;

void() lightning_fire =
{
	local vector p1, p2;
	
	if (time &gt;= lightning_end)
	{	// done here, put the terminals back up
		self = le1;
		door_go_down ();
		self = le2;
		door_go_down ();
		return;
	}
	
	p1 = (le1.mins + le1.maxs) * 0.5;
	p1_z = le1.absmin_z - 16;
	
	p2 = (le2.mins + le2.maxs) * 0.5;
	p2_z = le2.absmin_z - 16;
	
	// compensate for length of bolt
	p2 = p2 - normalize(p2-p1)*100;

	self.nextthink = time + 0.1;
	self.think = lightning_fire;

	WriteByte (MSG_ALL, SVC_TEMPENTITY);
	WriteByte (MSG_ALL, TE_LIGHTNING3);
	WriteEntity (MSG_ALL, world);
	WriteCoord (MSG_ALL, p1_x);
	WriteCoord (MSG_ALL, p1_y);
	WriteCoord (MSG_ALL, p1_z);
	WriteCoord (MSG_ALL, p2_x);
	WriteCoord (MSG_ALL, p2_y);
	WriteCoord (MSG_ALL, p2_z);
};

void() lightning_use =
{
	if (lightning_end &gt;= time + 1)
		return;

	le1 = find( world, target, &quot;lightning&quot;);
	le2 = find( le1, target, &quot;lightning&quot;);
	if (!le1 || !le2)
	{
		dprint (&quot;missing lightning targets\n&quot;);
		return;
	}
	
	if (
	 (le1.state != STATE_TOP &amp;&amp; le1.state != STATE_BOTTOM)
	|| (le2.state != STATE_TOP &amp;&amp; le2.state != STATE_BOTTOM)
	|| (le1.state != le2.state) )
	{
//		dprint (&quot;not aligned\n&quot;);
		return;
	}

// don't let the electrodes go back up until the bolt is done
	le1.nextthink = -1;
	le2.nextthink = -1;
	lightning_end = time + 1;

	sound (self, CHAN_VOICE, &quot;misc/power.wav&quot;, 1, ATTN_NORM);
	lightning_fire ();		

// advance the boss pain if down
	self = find (world, classname, &quot;monster_boss&quot;);
	if (!self)
		return;
	self.enemy = activator;
	if (le1.state == STATE_TOP &amp;&amp; self.health &gt; 0)
	{
		sound (self, CHAN_VOICE, &quot;boss1/pain.wav&quot;, 1, ATTN_NORM);
		self.health = self.health - 1;
		if (self.health &gt;= 2)
			boss_shocka1();
		else if (self.health == 1)
			boss_shockb1();
		else if (self.health == 0)
			boss_shockc1();
	}	
};


/*QUAKED event_lightning (0 1 1) (-16 -16 -16) (16 16 16)
Just for boss level.
*/
void() event_lightning =
{
	self.use = lightning_use;
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>n7a1m7w2lurvhacs3l4bu34x45n6uxo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>bprint</title>
    <ns>0</ns>
    <id>794</id>
    <revision>
      <id>2337</id>
      <timestamp>2013-03-26T23:29:50Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;====Syntax:==== &lt;code&gt;void bprint(string s)&lt;/code&gt;  Broadcasts text to all players in the map.  This is used by items to display pickup text. ====Parameters:==== :&lt;code&gt;s&lt;/cod...&quot;</comment>
      <text xml:space="preserve" bytes="254">====Syntax:====
&lt;code&gt;void bprint(string s)&lt;/code&gt;

Broadcasts text to all players in the map.  This is used by items to display pickup text.
====Parameters:====
:&lt;code&gt;s&lt;/code&gt; - The string to print.
====Returns:====
:void


[[Category:QuakeC Function]]</text>
      <sha1>ntcpomr62krkkyqh0eaiysg7hdhc4uq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2339</id>
      <parentid>2337</parentid>
      <timestamp>2013-03-26T23:45:41Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="268">====Syntax:====
&lt;code&gt;void bprint(string s)&lt;/code&gt;

Broadcasts text to all players in the map.  This is used for player join/leave messages and obituaries.
====Parameters:====
:&lt;code&gt;s&lt;/code&gt; - The string to print.
====Returns:====
:void


[[Category:QuakeC Function]]</text>
      <sha1>k46d7u4fddhntvulvqr7km38hyb7pqn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2400</id>
      <parentid>2339</parentid>
      <timestamp>2013-03-28T15:02:15Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>todo</comment>
      <text xml:space="preserve" bytes="342">====Syntax:====
&lt;code&gt;void bprint(string s)&lt;/code&gt;

Broadcasts text to all players in the map.  This is used for player join/leave messages and obituaries.
====Parameters:====
:&lt;code&gt;s&lt;/code&gt; - The string to print.
====Returns:====
:void

{{ToDo:todo=Join with http://quakewiki.org/wiki/Bprint and remove Bprint}}
[[Category:QuakeC Function]]</text>
      <sha1>csi9dcvs0w6ibgg3j5ad9w9h3pjehu3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2422</id>
      <parentid>2400</parentid>
      <timestamp>2013-03-28T15:29:14Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>fixed todo</comment>
      <text xml:space="preserve" bytes="358">====Syntax:====
&lt;code&gt;void bprint(string s)&lt;/code&gt;

Broadcasts text to all players in the map.  This is used for player join/leave messages and obituaries.
====Parameters:====
:&lt;code&gt;s&lt;/code&gt; - The string to print.
====Returns:====
:void

{{todo|user=[[Spirit]]|todo=Join with http://quakewiki.org/wiki/Bprint and remove Bprint}}
[[Category:QuakeC Function]]</text>
      <sha1>g11brp2ypysxoar3a9p5ogxtvqgeh2z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>break</title>
    <ns>0</ns>
    <id>617</id>
    <revision>
      <id>1701</id>
      <timestamp>2013-03-24T21:29:52Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;&lt;code&gt;break&lt;/code&gt; causes execution to exit a loop.&quot;</comment>
      <text xml:space="preserve" bytes="51">&lt;code&gt;break&lt;/code&gt; causes execution to exit a loop.</text>
      <sha1>ny3exa9dgosbos26201nt3q4xyhoi7b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1711</id>
      <parentid>1701</parentid>
      <timestamp>2013-03-24T22:32:33Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="924">This statement is used for flow control.  It is meant to be placed inside a loop (either do or while) and will cause execution to exit out of the loop and continue on.

Ex:
&lt;pre&gt;while(TRUE)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x = x + 1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (x &gt; 5)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;
}
&lt;/pre&gt;

In this example, the condition in the while() loop will always evaluate to true, so this loop would normally never end.  By placing a counter inside the loop and checking it's value, we manually break out of the loop by executing the break; statement when x is larger than 5.

In general, it is discouraged from overusing break as a properly written do or while loop should have it's own conditions for exiting and overuse of break, especially in large loops, can impact readability.  This does not mean you should never use it, only to be sure it is actually needed.

[[Category:QuakeC Function]]</text>
      <sha1>jes6xei0yic52azg0gj0wbj761t33th</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1712</id>
      <parentid>1711</parentid>
      <timestamp>2013-03-24T22:34:20Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="958">Syntax:&lt;br/&gt;
&lt;code&gt;break;&lt;/code&gt;

This statement is used for flow control.  It is meant to be placed inside a loop (either do or while) and will cause execution to exit out of the loop and continue on.

Ex:
&lt;pre&gt;while(TRUE)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x = x + 1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (x &gt; 5)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;
}
&lt;/pre&gt;

In this example, the condition in the while() loop will always evaluate to true, so this loop would normally never end.  By placing a counter inside the loop and checking it's value, we manually break out of the loop by executing the break; statement when x is larger than 5.

In general, it is discouraged from overusing break as a properly written do or while loop should have it's own conditions for exiting and overuse of break, especially in large loops, can impact readability.  This does not mean you should never use it, only to be sure it is actually needed.

[[Category:QuakeC Function]]</text>
      <sha1>4wqz7veg3ol47yajahd4jjav71qkkea</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>brush</title>
    <ns>0</ns>
    <id>653</id>
    <redirect title="Brush" />
    <revision>
      <id>1947</id>
      <timestamp>2013-03-25T05:04:52Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>Than moved page [[brush]] to [[Brush]]: fixed capitalisation (sorry!)</comment>
      <text xml:space="preserve" bytes="19">#REDIRECT [[Brush]]</text>
      <sha1>1pjv5f9tg99k0czui9a4sdnmol9b4fc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>buttons.qc</title>
    <ns>0</ns>
    <id>834</id>
    <revision>
      <id>2450</id>
      <timestamp>2013-03-29T10:07:17Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for pressable [[func_button | buttons]].   &lt;pre&gt; // button and multiple button  void() button_wait; void() button_return;  void() butto...&quot;</comment>
      <text xml:space="preserve" bytes="3018">This [[Quake-C]] file contains the code for pressable [[func_button | buttons]].


&lt;pre&gt;
// button and multiple button

void() button_wait;
void() button_return;

void() button_wait =
{
	self.state = STATE_TOP;
	self.nextthink = self.ltime + self.wait;
	self.think = button_return;
	activator = self.enemy;
	SUB_UseTargets();
	self.frame = 1;			// use alternate textures
};

void() button_done =
{
	self.state = STATE_BOTTOM;
};

void() button_return =
{
	self.state = STATE_DOWN;
	SUB_CalcMove (self.pos1, self.speed, button_done);
	self.frame = 0;			// use normal textures
	if (self.health)
		self.takedamage = DAMAGE_YES;	// can be shot again
};


void() button_blocked =
{	// do nothing, just don't ome all the way back out
};


void() button_fire =
{
	if (self.state == STATE_UP || self.state == STATE_TOP)
		return;

	sound (self, CHAN_VOICE, self.noise, 1, ATTN_NORM);

	self.state = STATE_UP;
	SUB_CalcMove (self.pos2, self.speed, button_wait);
};


void() button_use =
{
	self.enemy = activator;
	button_fire ();
};

void() button_touch =
{
	if (other.classname != &quot;player&quot;)
		return;
	self.enemy = other;
	button_fire ();
};

void() button_killed =
{
	self.enemy = damage_attacker;
	self.health = self.max_health;
	self.takedamage = DAMAGE_NO;	// wil be reset upon return
	button_fire ();
};


/*QUAKED func_button (0 .5 .8) ?
When a button is touched, it moves some distance in the direction of it's angle, triggers all of it's targets, waits some time, then returns to it's original position where it can be triggered again.

&quot;angle&quot;		determines the opening direction
&quot;target&quot;	all entities with a matching targetname will be used
&quot;speed&quot;		override the default 40 speed
&quot;wait&quot;		override the default 1 second wait (-1 = never return)
&quot;lip&quot;		override the default 4 pixel lip remaining at end of move
&quot;health&quot;	if set, the button must be killed instead of touched
&quot;sounds&quot;
0) steam metal
1) wooden clunk
2) metallic click
3) in-out
*/
void() func_button =
{
local float		gtemp, ftemp;

	if (self.sounds == 0)
	{
		precache_sound (&quot;buttons/airbut1.wav&quot;);
		self.noise = &quot;buttons/airbut1.wav&quot;;
	}
	if (self.sounds == 1)
	{
		precache_sound (&quot;buttons/switch21.wav&quot;);
		self.noise = &quot;buttons/switch21.wav&quot;;
	}
	if (self.sounds == 2)
	{
		precache_sound (&quot;buttons/switch02.wav&quot;);
		self.noise = &quot;buttons/switch02.wav&quot;;
	}
	if (self.sounds == 3)
	{
		precache_sound (&quot;buttons/switch04.wav&quot;);
		self.noise = &quot;buttons/switch04.wav&quot;;
	}
	
	SetMovedir ();

	self.movetype = MOVETYPE_PUSH;
	self.solid = SOLID_BSP;
	setmodel (self, self.model);

	self.blocked = button_blocked;
	self.use = button_use;

	if (self.health)
	{
		self.max_health = self.health;
		self.th_die = button_killed;
		self.takedamage = DAMAGE_YES;
	}
	else
		self.touch = button_touch;

	if (!self.speed)
		self.speed = 40;
	if (!self.wait)
		self.wait = 1;
	if (!self.lip)
		self.lip = 4;

	self.state = STATE_BOTTOM;

	self.pos1 = self.origin;
	self.pos2 = self.pos1 + self.movedir*(fabs(self.movedir*self.size) - self.lip);
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>q3tikcyfsdlu0ha8qgnmn4sjfjrpie8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>ceil</title>
    <ns>0</ns>
    <id>188</id>
    <revision>
      <id>364</id>
      <timestamp>2008-02-22T19:17:50Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  float '''ceil'''(float ''val'')  Returns ''val'', rounded up to the integer above (like the equivalent function in C).</comment>
      <text xml:space="preserve" bytes="119"> float '''ceil'''(float ''val'')

Returns ''val'', rounded up to the integer above (like the equivalent function in C).</text>
      <sha1>rwb85utc3hp3hhd5xkx500qc402ac4q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2504</id>
      <parentid>364</parentid>
      <timestamp>2013-03-29T14:21:57Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Ceil]] to [[ceil]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="119"> float '''ceil'''(float ''val'')

Returns ''val'', rounded up to the integer above (like the equivalent function in C).</text>
      <sha1>rwb85utc3hp3hhd5xkx500qc402ac4q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>checkbottom</title>
    <ns>0</ns>
    <id>390</id>
    <revision>
      <id>661</id>
      <timestamp>2008-05-07T17:23:26Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: === Function: checkbottom ===   float checkbottom(entity e)  e = entity that is to be checked return TRUE or FALSE  Returns TRUE if on the ground. Used only for jumping monster, that need ...</comment>
      <text xml:space="preserve" bytes="256">=== Function: checkbottom ===
  float checkbottom(entity e)

e = entity that is to be checked
return TRUE or FALSE

Returns TRUE if on the ground.
Used only for jumping monster, that need to jump randomly not to get hung up (or whatever it actually means).</text>
      <sha1>po3mskzh3j4vvaiwpoer6467i7n40na</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2506</id>
      <parentid>661</parentid>
      <timestamp>2013-03-29T14:21:58Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Checkbottom]] to [[checkbottom]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="256">=== Function: checkbottom ===
  float checkbottom(entity e)

e = entity that is to be checked
return TRUE or FALSE

Returns TRUE if on the ground.
Used only for jumping monster, that need to jump randomly not to get hung up (or whatever it actually means).</text>
      <sha1>po3mskzh3j4vvaiwpoer6467i7n40na</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>checkclient</title>
    <ns>0</ns>
    <id>631</id>
    <revision>
      <id>1861</id>
      <timestamp>2013-03-25T00:51:52Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;====Syntax:==== &lt;code&gt;entity checkclient()&lt;/code&gt;  This function returns a potentially visible player for the current self entity.  Mainly used by monsters to detect players n...&quot;</comment>
      <text xml:space="preserve" bytes="453">====Syntax:====
&lt;code&gt;entity checkclient()&lt;/code&gt;

This function returns a potentially visible player for the current self entity.  Mainly used by monsters to detect players nearby.  Note that this only uses the PVS to determine 'visibility', but actual line of sight is checked afterwards in QC.
====Parameters:====
:None
====Returns:====
:Returns a player entity that might be able to be seen by the current self entity.


[[Category:QuakeC Function]]</text>
      <sha1>kvielw9e97mh8crrt05gxm090bdvm9i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>checkextension</title>
    <ns>0</ns>
    <id>594</id>
    <revision>
      <id>1576</id>
      <timestamp>2010-02-06T19:10:33Z</timestamp>
      <contributor>
        <ip>83.226.254.64</ip>
      </contributor>
      <comment>New page: '''Builtin:'''  float(string s) checkextension = #99;  '''Description:'''  Check if (cvar(&quot;pr_checkextension&quot;)) before calling this, this is the only guaranteed extension to be present in ...</comment>
      <text xml:space="preserve" bytes="601">'''Builtin:'''

float(string s) checkextension = #99;

'''Description:'''

Check if (cvar(&quot;pr_checkextension&quot;)) before calling this, this is the only guaranteed extension to be present in the extension system, it allows you to check if an extension is available, by name, to check for an extension.

Use QC code like this:
&lt;pre&gt;
if (cvar(&quot;pr_checkextension&quot;))
if (checkextension(&quot;DP_SV_SETCOLOR&quot;))
	ext_setcolor = TRUE;
&lt;/pre&gt;
It is recommended this code be placed in worldspawn or a worldspawn called function somewhere, from then on you can check ext_setcolor to know if that extension is available.</text>
      <sha1>p7o2mkte6umjvvcdxk38k1tx9t06af5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2389</id>
      <parentid>1576</parentid>
      <timestamp>2013-03-28T14:58:25Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Spirit moved page [[Checkextension]] to [[checkextension]]: lowercase</comment>
      <text xml:space="preserve" bytes="601">'''Builtin:'''

float(string s) checkextension = #99;

'''Description:'''

Check if (cvar(&quot;pr_checkextension&quot;)) before calling this, this is the only guaranteed extension to be present in the extension system, it allows you to check if an extension is available, by name, to check for an extension.

Use QC code like this:
&lt;pre&gt;
if (cvar(&quot;pr_checkextension&quot;))
if (checkextension(&quot;DP_SV_SETCOLOR&quot;))
	ext_setcolor = TRUE;
&lt;/pre&gt;
It is recommended this code be placed in worldspawn or a worldspawn called function somewhere, from then on you can check ext_setcolor to know if that extension is available.</text>
      <sha1>p7o2mkte6umjvvcdxk38k1tx9t06af5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>cl bob</title>
    <ns>0</ns>
    <id>87</id>
    <revision>
      <id>147</id>
      <timestamp>2007-10-30T22:58:47Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=cl_bob |default-value=0.2 |saved-to-config=no }}  Controls how much your weapon and view bobs moves when you walk.  {{Console vari...</comment>
      <text xml:space="preserve" bytes="195">{{lowercase-underscores}}{{Infobox Console variable
|name=cl_bob
|default-value=0.2
|saved-to-config=no
}}

Controls how much your weapon and view bobs moves when you walk.

{{Console variables}}</text>
      <sha1>nhxqr2evvga4h1baljhzru8hy7sk1sx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2387</id>
      <parentid>147</parentid>
      <timestamp>2013-03-28T14:58:15Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Spirit moved page [[Cl bob]] to [[cl bob]]: lowercase</comment>
      <text xml:space="preserve" bytes="195">{{lowercase-underscores}}{{Infobox Console variable
|name=cl_bob
|default-value=0.2
|saved-to-config=no
}}

Controls how much your weapon and view bobs moves when you walk.

{{Console variables}}</text>
      <sha1>nhxqr2evvga4h1baljhzru8hy7sk1sx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>client.qc</title>
    <ns>0</ns>
    <id>835</id>
    <revision>
      <id>2451</id>
      <timestamp>2013-03-29T10:11:24Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for general [[Client | client-side]] game behavior.   &lt;pre&gt; // prototypes void () W_WeaponFrame; void() W_SetCurrentAmmo; void() player...&quot;</comment>
      <text xml:space="preserve" bytes="32473">This [[Quake-C]] file contains the code for general [[Client | client-side]] game behavior.


&lt;pre&gt;
// prototypes
void () W_WeaponFrame;
void() W_SetCurrentAmmo;
void() player_pain;
void() player_stand1;
void (vector org) spawn_tfog;
void (vector org, entity death_owner) spawn_tdeath;

float	modelindex_eyes, modelindex_player;

/*
=============================================================================

				LEVEL CHANGING / INTERMISSION

=============================================================================
*/

float	intermission_running;
float	intermission_exittime;

/*QUAKED info_intermission (1 0.5 0.5) (-16 -16 -16) (16 16 16)
This is the camera point for the intermission.
Use mangle instead of angle, so you can set pitch or roll as well as yaw.  'pitch roll yaw'
*/
void() info_intermission =
{
};



void() SetChangeParms =
{
	if (self.health &lt;= 0)
	{
		SetNewParms ();
		return;
	}

// remove items
	self.items = self.items - (self.items &amp; 
	(IT_KEY1 | IT_KEY2 | IT_INVISIBILITY | IT_INVULNERABILITY | IT_SUIT | IT_QUAD) );
	
// cap super health
	if (self.health &gt; 100)
		self.health = 100;
	if (self.health &lt; 50)
		self.health = 50;
	parm1 = self.items;
	parm2 = self.health;
	parm3 = self.armorvalue;
	if (self.ammo_shells &lt; 25)
		parm4 = 25;
	else
		parm4 = self.ammo_shells;
	parm5 = self.ammo_nails;
	parm6 = self.ammo_rockets;
	parm7 = self.ammo_cells;
	parm8 = self.weapon;
	parm9 = self.armortype * 100;
};

void() SetNewParms =
{
	parm1 = IT_SHOTGUN | IT_AXE;
	parm2 = 100;
	parm3 = 0;
	parm4 = 25;
	parm5 = 0;
	parm6 = 0;
	parm7 = 0;
	parm8 = 1;
	parm9 = 0;
};

void() DecodeLevelParms =
{
	if (serverflags)
	{
		if (world.model == &quot;maps/start.bsp&quot;)
			SetNewParms ();		// take away all stuff on starting new episode
	}
	
	self.items = parm1;
	self.health = parm2;
	self.armorvalue = parm3;
	self.ammo_shells = parm4;
	self.ammo_nails = parm5;
	self.ammo_rockets = parm6;
	self.ammo_cells = parm7;
	self.weapon = parm8;
	self.armortype = parm9 * 0.01;
};

/*
============
FindIntermission

Returns the entity to view from
============
*/
entity() FindIntermission =
{
	local	entity spot;
	local	float cyc;

// look for info_intermission first
	spot = find (world, classname, &quot;info_intermission&quot;);
	if (spot)
	{	// pick a random one
		cyc = random() * 4;
		while (cyc &gt; 1)
		{
			spot = find (spot, classname, &quot;info_intermission&quot;);
			if (!spot)
				spot = find (spot, classname, &quot;info_intermission&quot;);
			cyc = cyc - 1;
		}
		return spot;
	}

// then look for the start position
	spot = find (world, classname, &quot;info_player_start&quot;);
	if (spot)
		return spot;
	
// testinfo_player_start is only found in regioned levels
	spot = find (world, classname, &quot;testplayerstart&quot;);
	if (spot)
		return spot;
	
	objerror (&quot;FindIntermission: no spot&quot;);
};


string nextmap;
void() GotoNextMap =
{
	if (cvar(&quot;samelevel&quot;))	// if samelevel is set, stay on same level
		changelevel (mapname);
	else
		changelevel (nextmap);
};


void() ExitIntermission =
{
// skip any text in deathmatch
	if (deathmatch)
	{
		GotoNextMap ();
		return;
	}
	
	intermission_exittime = time + 1;
	intermission_running = intermission_running + 1;

//
// run some text if at the end of an episode
//
	if (intermission_running == 2)
	{
		if (world.model == &quot;maps/e1m7.bsp&quot;)
		{
			WriteByte (MSG_ALL, SVC_CDTRACK);
			WriteByte (MSG_ALL, 2);
			WriteByte (MSG_ALL, 3);
			if (!cvar(&quot;registered&quot;))
			{
				WriteByte (MSG_ALL, SVC_FINALE);
				WriteString (MSG_ALL, &quot;As the corpse of the monstrous entity\nChthon sinks back into the lava whence\nit rose, you grip the Rune of Earth\nMagic tightly. Now that you have\nconquered the Dimension of the Doomed,\nrealm of Earth Magic, you are ready to\ncomplete your task in the other three\nhaunted lands of Quake. Or are you? If\nyou don't register Quake, you'll never\nknow what awaits you in the Realm of\nBlack Magic, the Netherworld, and the\nElder World!&quot;);
			}
			else
			{
				WriteByte (MSG_ALL, SVC_FINALE);
				WriteString (MSG_ALL, &quot;As the corpse of the monstrous entity\nChthon sinks back into the lava whence\nit rose, you grip the Rune of Earth\nMagic tightly. Now that you have\nconquered the Dimension of the Doomed,\nrealm of Earth Magic, you are ready to\ncomplete your task. A Rune of magic\npower lies at the end of each haunted\nland of Quake. Go forth, seek the\ntotality of the four Runes!&quot;);
			}
			return;
		}
		else if (world.model == &quot;maps/e2m6.bsp&quot;)
		{
			WriteByte (MSG_ALL, SVC_CDTRACK);
			WriteByte (MSG_ALL, 2);
			WriteByte (MSG_ALL, 3);

			WriteByte (MSG_ALL, SVC_FINALE);
			WriteString (MSG_ALL, &quot;The Rune of Black Magic throbs evilly in\nyour hand and whispers dark thoughts\ninto your brain. You learn the inmost\nlore of the Hell-Mother; Shub-Niggurath!\nYou now know that she is behind all the\nterrible plotting which has led to so\nmuch death and horror. But she is not\ninviolate! Armed with this Rune, you\nrealize that once all four Runes are\ncombined, the gate to Shub-Niggurath's\nPit will open, and you can face the\nWitch-Goddess herself in her frightful\notherworld cathedral.&quot;);
			return;
		}
		else if (world.model == &quot;maps/e3m6.bsp&quot;)
		{
			WriteByte (MSG_ALL, SVC_CDTRACK);
			WriteByte (MSG_ALL, 2);
			WriteByte (MSG_ALL, 3);

			WriteByte (MSG_ALL, SVC_FINALE);
			WriteString (MSG_ALL, &quot;The charred viscera of diabolic horrors\nbubble viscously as you seize the Rune\nof Hell Magic. Its heat scorches your\nhand, and its terrible secrets blight\nyour mind. Gathering the shreds of your\ncourage, you shake the devil's shackles\nfrom your soul, and become ever more\nhard and determined to destroy the\nhideous creatures whose mere existence\nthreatens the souls and psyches of all\nthe population of Earth.&quot;);
			return;
		}
		else if (world.model == &quot;maps/e4m7.bsp&quot;)
		{
			WriteByte (MSG_ALL, SVC_CDTRACK);
			WriteByte (MSG_ALL, 2);
			WriteByte (MSG_ALL, 3);

			WriteByte (MSG_ALL, SVC_FINALE);
			WriteString (MSG_ALL, &quot;Despite the awful might of the Elder\nWorld, you have achieved the Rune of\nElder Magic, capstone of all types of\narcane wisdom. Beyond good and evil,\nbeyond life and death, the Rune\npulsates, heavy with import. Patient and\npotent, the Elder Being Shub-Niggurath\nweaves her dire plans to clear off all\nlife from the Earth, and bring her own\nfoul offspring to our world! For all the\ndwellers in these nightmare dimensions\nare her descendants! Once all Runes of\nmagic power are united, the energy\nbehind them will blast open the Gateway\nto Shub-Niggurath, and you can travel\nthere to foil the Hell-Mother's plots\nin person.&quot;);
			return;
		}

		GotoNextMap();
	}
	
	if (intermission_running == 3)
	{
		if (!cvar(&quot;registered&quot;))
		{	// shareware episode has been completed, go to sell screen
			WriteByte (MSG_ALL, SVC_SELLSCREEN);
			return;
		}
		
		if ( (serverflags&amp;15) == 15)
		{
			WriteByte (MSG_ALL, SVC_FINALE);
			WriteString (MSG_ALL, &quot;Now, you have all four Runes. You sense\ntremendous invisible forces moving to\nunseal ancient barriers. Shub-Niggurath\nhad hoped to use the Runes Herself to\nclear off the Earth, but now instead,\nyou will use them to enter her home and\nconfront her as an avatar of avenging\nEarth-life. If you defeat her, you will\nbe remembered forever as the savior of\nthe planet. If she conquers, it will be\nas if you had never been born.&quot;);
			return;
		}
		
	}

	GotoNextMap();
};

/*
============
IntermissionThink

When the player presses attack or jump, change to the next level
============
*/
void() IntermissionThink =
{
	if (time &lt; intermission_exittime)
		return;

	if (!self.button0 &amp;&amp; !self.button1 &amp;&amp; !self.button2)
		return;
	
	ExitIntermission ();
};

void() execute_changelevel =
{
	local entity	pos;

	intermission_running = 1;
	
// enforce a wait time before allowing changelevel
	if (deathmatch)
		intermission_exittime = time + 5;
	else
		intermission_exittime = time + 2;

	WriteByte (MSG_ALL, SVC_CDTRACK);
	WriteByte (MSG_ALL, 3);
	WriteByte (MSG_ALL, 3);
	
	pos = FindIntermission ();

	other = find (world, classname, &quot;player&quot;);
	while (other != world)
	{
		other.view_ofs = '0 0 0';
		other.angles = other.v_angle = pos.mangle;
		other.fixangle = TRUE;		// turn this way immediately
		other.nextthink = time + 0.5;
		other.takedamage = DAMAGE_NO;
		other.solid = SOLID_NOT;
		other.movetype = MOVETYPE_NONE;
		other.modelindex = 0;
		setorigin (other, pos.origin);
		other = find (other, classname, &quot;player&quot;);
	}	

	WriteByte (MSG_ALL, SVC_INTERMISSION);
};


void() changelevel_touch =
{
	local entity	pos;

	if (other.classname != &quot;player&quot;)
		return;

	if ((cvar(&quot;noexit&quot;) == 1) || ((cvar(&quot;noexit&quot;) == 2) &amp;&amp; (mapname != &quot;start&quot;)))
	{
		T_Damage (other, self, self, 50000);
		return;
	}

	if (coop || deathmatch)
	{
		bprint (other.netname);
		bprint (&quot; exited the level\n&quot;);
	}
	
	nextmap = self.map;

	SUB_UseTargets ();

	if ( (self.spawnflags &amp; 1) &amp;&amp; (deathmatch == 0) )
	{	// NO_INTERMISSION
		GotoNextMap();
		return;
	}
	
	self.touch = SUB_Null;

// we can't move people right now, because touch functions are called
// in the middle of C movement code, so set a think time to do it
	self.think = execute_changelevel;
	self.nextthink = time + 0.1;
};

/*QUAKED trigger_changelevel (0.5 0.5 0.5) ? NO_INTERMISSION
When the player touches this, he gets sent to the map listed in the &quot;map&quot; variable.  Unless the NO_INTERMISSION flag is set, the view will go to the info_intermission spot and display stats.
*/
void() trigger_changelevel =
{
	if (!self.map)
		objerror (&quot;chagnelevel trigger doesn't have map&quot;);
	
	InitTrigger ();
	self.touch = changelevel_touch;
};


/*
=============================================================================

				PLAYER GAME EDGE FUNCTIONS

=============================================================================
*/

void() set_suicide_frame;

// called by ClientKill and DeadThink
void() respawn =
{
	if (coop)
	{
		// make a copy of the dead body for appearances sake
		CopyToBodyQue (self);
		// get the spawn parms as they were at level start
		setspawnparms (self);
		// respawn		
		PutClientInServer ();
	}
	else if (deathmatch)
	{
		// make a copy of the dead body for appearances sake
		CopyToBodyQue (self);
		// set default spawn parms
		SetNewParms ();
		// respawn		
		PutClientInServer ();
	}
	else
	{	// restart the entire server
		localcmd (&quot;restart\n&quot;);
	}
};


/*
============
ClientKill

Player entered the suicide command
============
*/
void() ClientKill =
{
	bprint (self.netname);
	bprint (&quot; suicides\n&quot;);
	set_suicide_frame ();
	self.modelindex = modelindex_player;
	self.frags = self.frags - 2;	// extra penalty
	respawn ();
};

float(vector v) CheckSpawnPoint =
{
	return FALSE;
};

/*
============
SelectSpawnPoint

Returns the entity to spawn at
============
*/
entity() SelectSpawnPoint =
{
	local	entity spot;
	local	entity thing;
	local	float  pcount;
	
// testinfo_player_start is only found in regioned levels
	spot = find (world, classname, &quot;testplayerstart&quot;);
	if (spot)
		return spot;
		
// choose a info_player_deathmatch point
	if (coop)
	{
		lastspawn = find(lastspawn, classname, &quot;info_player_coop&quot;);
		if (lastspawn == world)
			lastspawn = find (lastspawn, classname, &quot;info_player_start&quot;);
		if (lastspawn != world)
			return lastspawn;
	}
	else if (deathmatch)
	{
		spot = lastspawn;
		while (1)
		{
			spot = find(spot, classname, &quot;info_player_deathmatch&quot;);
			if (spot != world)
			{
				if (spot == lastspawn)
					return lastspawn;
				pcount = 0;
				thing = findradius(spot.origin, 32);
				while(thing)
				{
					if (thing.classname == &quot;player&quot;)
						pcount = pcount + 1;
					thing = thing.chain;
				}
				if (pcount == 0)
				{
					lastspawn = spot;
					return spot;
				}
			}
		}
	}

	if (serverflags)
	{	// return with a rune to start
		spot = find (world, classname, &quot;info_player_start2&quot;);
		if (spot)
			return spot;
	}
	
	spot = find (world, classname, &quot;info_player_start&quot;);
	if (!spot)
		error (&quot;PutClientInServer: no info_player_start on level&quot;);
	
	return spot;
};

/*
===========
PutClientInServer

called each time a player is spawned
============
*/
void() DecodeLevelParms;
void() PlayerDie;


void() PutClientInServer =
{
	local	entity spot;

	spot = SelectSpawnPoint ();

	self.classname = &quot;player&quot;;
	self.health = 100;
	self.takedamage = DAMAGE_AIM;
	self.solid = SOLID_SLIDEBOX;
	self.movetype = MOVETYPE_WALK;
	self.show_hostile = 0;
	self.max_health = 100;
	self.flags = FL_CLIENT;
	self.air_finished = time + 12;
	self.dmg = 2;   		// initial water damage
	self.super_damage_finished = 0;
	self.radsuit_finished = 0;
	self.invisible_finished = 0;
	self.invincible_finished = 0;
	self.effects = 0;
	self.invincible_time = 0;

	DecodeLevelParms ();
	
	W_SetCurrentAmmo ();

	self.attack_finished = time;
	self.th_pain = player_pain;
	self.th_die = PlayerDie;
	
	self.deadflag = DEAD_NO;
// paustime is set by teleporters to keep the player from moving a while
	self.pausetime = 0;
	
//	spot = SelectSpawnPoint ();

	self.origin = spot.origin + '0 0 1';
	self.angles = spot.angles;
	self.fixangle = TRUE;		// turn this way immediately

// oh, this is a hack!
	setmodel (self, &quot;progs/eyes.mdl&quot;);
	modelindex_eyes = self.modelindex;

	setmodel (self, &quot;progs/player.mdl&quot;);
	modelindex_player = self.modelindex;

	setsize (self, VEC_HULL_MIN, VEC_HULL_MAX);
	
	self.view_ofs = '0 0 22';

	player_stand1 ();
	
	if (deathmatch || coop)
	{
		makevectors(self.angles);
		spawn_tfog (self.origin + v_forward*20);
	}

	spawn_tdeath (self.origin, self);
};


/*
=============================================================================

				QUAKED FUNCTIONS

=============================================================================
*/


/*QUAKED info_player_start (1 0 0) (-16 -16 -24) (16 16 24)
The normal starting point for a level.
*/
void() info_player_start =
{
};


/*QUAKED info_player_start2 (1 0 0) (-16 -16 -24) (16 16 24)
Only used on start map for the return point from an episode.
*/
void() info_player_start2 =
{
};


/*
saved out by quaked in region mode
*/
void() testplayerstart =
{
};

/*QUAKED info_player_deathmatch (1 0 1) (-16 -16 -24) (16 16 24)
potential spawning position for deathmatch games
*/
void() info_player_deathmatch =
{
};

/*QUAKED info_player_coop (1 0 1) (-16 -16 -24) (16 16 24)
potential spawning position for coop games
*/
void() info_player_coop =
{
};

/*
===============================================================================

RULES

===============================================================================
*/

/*
go to the next level for deathmatch
only called if a time or frag limit has expired
*/
void() NextLevel =
{
	local entity o;

	if (mapname == &quot;start&quot;)
	{
		if (!cvar(&quot;registered&quot;))
		{
			mapname = &quot;e1m1&quot;;
		}
		else if (!(serverflags &amp; 1))
		{
			mapname = &quot;e1m1&quot;;
			serverflags = serverflags | 1;
		}
		else if (!(serverflags &amp; 2))
		{
			mapname = &quot;e2m1&quot;;
			serverflags = serverflags | 2;
		}
		else if (!(serverflags &amp; 4))
		{
			mapname = &quot;e3m1&quot;;
			serverflags = serverflags | 4;
		}
		else if (!(serverflags &amp; 8))
		{
			mapname = &quot;e4m1&quot;;
			serverflags = serverflags - 7;
		}

		o = spawn();
		o.map = mapname;
	}
	else
	{
		// find a trigger changelevel
		o = find(world, classname, &quot;trigger_changelevel&quot;);

		// go back to start if no trigger_changelevel
		if (!o)
		{
			mapname = &quot;start&quot;;
			o = spawn();
			o.map = mapname;
		}
	}

	nextmap = o.map;
	gameover = TRUE;
	
	if (o.nextthink &lt; time)
	{
		o.think = execute_changelevel;
		o.nextthink = time + 0.1;
	}
};

/*
============
CheckRules

Exit deathmatch games upon conditions
============
*/
void() CheckRules =
{
	local	float		timelimit;
	local	float		fraglimit;
	
	if (gameover)	// someone else quit the game already
		return;
		
	timelimit = cvar(&quot;timelimit&quot;) * 60;
	fraglimit = cvar(&quot;fraglimit&quot;);
	
	if (timelimit &amp;&amp; time &gt;= timelimit)
	{
		NextLevel ();
		return;
	}
	
	if (fraglimit &amp;&amp; self.frags &gt;= fraglimit)
	{
		NextLevel ();
		return;
	}	
};

//============================================================================

void() PlayerDeathThink =
{
	local entity	old_self;
	local float		forward;

	if ((self.flags &amp; FL_ONGROUND))
	{
		forward = vlen (self.velocity);
		forward = forward - 20;
		if (forward &lt;= 0)
			self.velocity = '0 0 0';
		else	
			self.velocity = forward * normalize(self.velocity);
	}

// wait for all buttons released
	if (self.deadflag == DEAD_DEAD)
	{
		if (self.button2 || self.button1 || self.button0)
			return;
		self.deadflag = DEAD_RESPAWNABLE;
		return;
	}

// wait for any button down
	if (!self.button2 &amp;&amp; !self.button1 &amp;&amp; !self.button0)
		return;

	self.button0 = 0;
	self.button1 = 0;
	self.button2 = 0;
	respawn();
};


void() PlayerJump =
{
	local vector start, end;
	
	if (self.flags &amp; FL_WATERJUMP)
		return;
	
	if (self.waterlevel &gt;= 2)
	{
		if (self.watertype == CONTENT_WATER)
			self.velocity_z = 100;
		else if (self.watertype == CONTENT_SLIME)
			self.velocity_z = 80;
		else
			self.velocity_z = 50;

// play swiming sound
		if (self.swim_flag &lt; time)
		{
			self.swim_flag = time + 1;
			if (random() &lt; 0.5)
				sound (self, CHAN_BODY, &quot;misc/water1.wav&quot;, 1, ATTN_NORM);
			else
				sound (self, CHAN_BODY, &quot;misc/water2.wav&quot;, 1, ATTN_NORM);
		}

		return;
	}

	if (!(self.flags &amp; FL_ONGROUND))
		return;

	if ( !(self.flags &amp; FL_JUMPRELEASED) )
		return;		// don't pogo stick

	self.flags = self.flags - (self.flags &amp; FL_JUMPRELEASED);

	self.flags = self.flags - FL_ONGROUND;	// don't stairwalk
	
	self.button2 = 0;
// player jumping sound
	sound (self, CHAN_BODY, &quot;player/plyrjmp8.wav&quot;, 1, ATTN_NORM);
	self.velocity_z = self.velocity_z + 270;
};


/*
===========
WaterMove

============
*/
.float	dmgtime;

void() WaterMove =
{
//dprint (ftos(self.waterlevel));
	if (self.movetype == MOVETYPE_NOCLIP)
		return;
	if (self.health &lt; 0)
		return;

	if (self.waterlevel != 3)
	{
		if (self.air_finished &lt; time)
			sound (self, CHAN_VOICE, &quot;player/gasp2.wav&quot;, 1, ATTN_NORM);
		else if (self.air_finished &lt; time + 9)
			sound (self, CHAN_VOICE, &quot;player/gasp1.wav&quot;, 1, ATTN_NORM);
		self.air_finished = time + 12;
		self.dmg = 2;
	}
	else if (self.air_finished &lt; time)
	{	// drown!
		if (self.pain_finished &lt; time)
		{
			self.dmg = self.dmg + 2;
			if (self.dmg &gt; 15)
				self.dmg = 10;
			T_Damage (self, world, world, self.dmg);
			self.pain_finished = time + 1;
		}
	}
	
	if (!self.waterlevel)
	{
		if (self.flags &amp; FL_INWATER)
		{	
			// play leave water sound
			sound (self, CHAN_BODY, &quot;misc/outwater.wav&quot;, 1, ATTN_NORM);
			self.flags = self.flags - FL_INWATER;
		}
		return;
	}

	if (self.watertype == CONTENT_LAVA)
	{	// do damage
		if (self.dmgtime &lt; time)
		{
			if (self.radsuit_finished &gt; time)
				self.dmgtime = time + 1;
			else
				self.dmgtime = time + 0.2;

			T_Damage (self, world, world, 10*self.waterlevel);
		}
	}
	else if (self.watertype == CONTENT_SLIME)
	{	// do damage
		if (self.dmgtime &lt; time &amp;&amp; self.radsuit_finished &lt; time)
		{
			self.dmgtime = time + 1;
			T_Damage (self, world, world, 4*self.waterlevel);
		}
	}
	
	if ( !(self.flags &amp; FL_INWATER) )
	{	

// player enter water sound

		if (self.watertype == CONTENT_LAVA)
			sound (self, CHAN_BODY, &quot;player/inlava.wav&quot;, 1, ATTN_NORM);
		if (self.watertype == CONTENT_WATER)
			sound (self, CHAN_BODY, &quot;player/inh2o.wav&quot;, 1, ATTN_NORM);
		if (self.watertype == CONTENT_SLIME)
			sound (self, CHAN_BODY, &quot;player/slimbrn2.wav&quot;, 1, ATTN_NORM);

		self.flags = self.flags + FL_INWATER;
		self.dmgtime = 0;
	}
	
	if (! (self.flags &amp; FL_WATERJUMP) )
		self.velocity = self.velocity - 0.8*self.waterlevel*frametime*self.velocity;
};

void() CheckWaterJump =
{
	local vector start, end;

// check for a jump-out-of-water
	makevectors (self.angles);
	start = self.origin;
	start_z = start_z + 8; 
	v_forward_z = 0;
	normalize(v_forward);
	end = start + v_forward*24;
	traceline (start, end, TRUE, self);
	if (trace_fraction &lt; 1)
	{	// solid at waist
		start_z = start_z + self.maxs_z - 8;
		end = start + v_forward*24;
		self.movedir = trace_plane_normal * -50;
		traceline (start, end, TRUE, self);
		if (trace_fraction == 1)
		{	// open at eye level
			self.flags = self.flags | FL_WATERJUMP;
			self.velocity_z = 225;
			self.flags = self.flags - (self.flags &amp; FL_JUMPRELEASED);
			self.teleport_time = time + 2;	// safety net
			return;
		}
	}
};


/*
================
PlayerPreThink

Called every frame before physics are run
================
*/
void() PlayerPreThink =
{
	local	float	mspeed, aspeed;
	local	float	r;

	if (intermission_running)
	{
		IntermissionThink ();	// otherwise a button could be missed between
		return;					// the think tics
	}

	if (self.view_ofs == '0 0 0')
		return;		// intermission or finale

	makevectors (self.v_angle);		// is this still used

	CheckRules ();
	WaterMove ();

	if (self.waterlevel == 2)
		CheckWaterJump ();

	if (self.deadflag &gt;= DEAD_DEAD)
	{
		PlayerDeathThink ();
		return;
	}
	
	if (self.deadflag == DEAD_DYING)
		return;	// dying, so do nothing

	if (self.button2)
	{
		PlayerJump ();
	}
	else
		self.flags = self.flags | FL_JUMPRELEASED;

// teleporters can force a non-moving pause time	
	if (time &lt; self.pausetime)
		self.velocity = '0 0 0';

	if(time &gt; self.attack_finished &amp;&amp; self.currentammo == 0 &amp;&amp; self.weapon != IT_AXE)
	{
		self.weapon = W_BestWeapon ();
		W_SetCurrentAmmo ();
	}
};
	
/*
================
CheckPowerups

Check for turning off powerups
================
*/
void() CheckPowerups =
{
	if (self.health &lt;= 0)
		return;

// invisibility
	if (self.invisible_finished)
	{
// sound and screen flash when items starts to run out
		if (self.invisible_sound &lt; time)
		{
			sound (self, CHAN_AUTO, &quot;items/inv3.wav&quot;, 0.5, ATTN_IDLE);
			self.invisible_sound = time + ((random() * 3) + 1);
		}


		if (self.invisible_finished &lt; time + 3)
		{
			if (self.invisible_time == 1)
			{
				sprint (self, &quot;Ring of Shadows magic is fading\n&quot;);
				stuffcmd (self, &quot;bf\n&quot;);
				sound (self, CHAN_AUTO, &quot;items/inv2.wav&quot;, 1, ATTN_NORM);
				self.invisible_time = time + 1;
			}
			
			if (self.invisible_time &lt; time)
			{
				self.invisible_time = time + 1;
				stuffcmd (self, &quot;bf\n&quot;);
			}
		}

		if (self.invisible_finished &lt; time)
		{	// just stopped
			self.items = self.items - IT_INVISIBILITY;
			self.invisible_finished = 0;
			self.invisible_time = 0;
		}
		
	// use the eyes
		self.frame = 0;
		self.modelindex = modelindex_eyes;
	}
	else
		self.modelindex = modelindex_player;	// don't use eyes

// invincibility
	if (self.invincible_finished)
	{
// sound and screen flash when items starts to run out
		if (self.invincible_finished &lt; time + 3)
		{
			if (self.invincible_time == 1)
			{
				sprint (self, &quot;Protection is almost burned out\n&quot;);
				stuffcmd (self, &quot;bf\n&quot;);
				sound (self, CHAN_AUTO, &quot;items/protect2.wav&quot;, 1, ATTN_NORM);
				self.invincible_time = time + 1;
			}
			
			if (self.invincible_time &lt; time)
			{
				self.invincible_time = time + 1;
				stuffcmd (self, &quot;bf\n&quot;);
			}
		}
		
		if (self.invincible_finished &lt; time)
		{	// just stopped
			self.items = self.items - IT_INVULNERABILITY;
			self.invincible_time = 0;
			self.invincible_finished = 0;
		}
		if (self.invincible_finished &gt; time)
			self.effects = self.effects | EF_DIMLIGHT;
		else
			self.effects = self.effects - (self.effects &amp; EF_DIMLIGHT);
	}

// super damage
	if (self.super_damage_finished)
	{

// sound and screen flash when items starts to run out

		if (self.super_damage_finished &lt; time + 3)
		{
			if (self.super_time == 1)
			{
				sprint (self, &quot;Quad Damage is wearing off\n&quot;);
				stuffcmd (self, &quot;bf\n&quot;);
				sound (self, CHAN_AUTO, &quot;items/damage2.wav&quot;, 1, ATTN_NORM);
				self.super_time = time + 1;
			}	  
			
			if (self.super_time &lt; time)
			{
				self.super_time = time + 1;
				stuffcmd (self, &quot;bf\n&quot;);
			}
		}

		if (self.super_damage_finished &lt; time)
		{	// just stopped
			self.items = self.items - IT_QUAD;
			self.super_damage_finished = 0;
			self.super_time = 0;
		}
		if (self.super_damage_finished &gt; time)
			self.effects = self.effects | EF_DIMLIGHT;
		else
			self.effects = self.effects - (self.effects &amp; EF_DIMLIGHT);
	}	

// suit	
	if (self.radsuit_finished)
	{
		self.air_finished = time + 12;		// don't drown

// sound and screen flash when items starts to run out
		if (self.radsuit_finished &lt; time + 3)
		{
			if (self.rad_time == 1)
			{
				sprint (self, &quot;Air supply in Biosuit expiring\n&quot;);
				stuffcmd (self, &quot;bf\n&quot;);
				sound (self, CHAN_AUTO, &quot;items/suit2.wav&quot;, 1, ATTN_NORM);
				self.rad_time = time + 1;
			}
			
			if (self.rad_time &lt; time)
			{
				self.rad_time = time + 1;
				stuffcmd (self, &quot;bf\n&quot;);
			}
		}

		if (self.radsuit_finished &lt; time)
		{	// just stopped
			self.items = self.items - IT_SUIT;
			self.rad_time = 0;
			self.radsuit_finished = 0;
		}
	}	

};


/*
================
PlayerPostThink

Called every frame after physics are run
================
*/
void() PlayerPostThink =
{
	local	float	mspeed, aspeed;
	local	float	r;

	if (self.view_ofs == '0 0 0')
		return;		// intermission or finale
	if (self.deadflag)
		return;
		
// do weapon stuff

	W_WeaponFrame ();

// check to see if player landed and play landing sound	
	if ((self.jump_flag &lt; -300) &amp;&amp; (self.flags &amp; FL_ONGROUND) &amp;&amp; (self.health &gt; 0))
	{
		if (self.watertype == CONTENT_WATER)
			sound (self, CHAN_BODY, &quot;player/h2ojump.wav&quot;, 1, ATTN_NORM);
		else if (self.jump_flag &lt; -650)
		{
			T_Damage (self, world, world, 5); 
			sound (self, CHAN_VOICE, &quot;player/land2.wav&quot;, 1, ATTN_NORM);
			self.deathtype = &quot;falling&quot;;
		}
		else
			sound (self, CHAN_VOICE, &quot;player/land.wav&quot;, 1, ATTN_NORM);

		self.jump_flag = 0;
	}

	if (!(self.flags &amp; FL_ONGROUND))
		self.jump_flag = self.velocity_z;

	CheckPowerups ();
};


/*
===========
ClientConnect

called when a player connects to a server
============
*/
void() ClientConnect =
{
	bprint (self.netname);
	bprint (&quot; entered the game\n&quot;);
	
// a client connecting during an intermission can cause problems
	if (intermission_running)
		ExitIntermission ();
};


/*
===========
ClientDisconnect

called when a player disconnects from a server
============
*/
void() ClientDisconnect =
{
	if (gameover)
		return;
	// if the level end trigger has been activated, just return
	// since they aren't *really* leaving

	// let everyone else know
	bprint (self.netname);
	bprint (&quot; left the game with &quot;);
	bprint (ftos(self.frags));
	bprint (&quot; frags\n&quot;);
	sound (self, CHAN_BODY, &quot;player/tornoff2.wav&quot;, 1, ATTN_NONE);
	set_suicide_frame ();
};

/*
===========
ClientObituary

called when a player dies
============
*/
void(entity targ, entity attacker) ClientObituary =
{
	local	float rnum;
	local	string deathstring, deathstring2;
	rnum = random();

	if (targ.classname == &quot;player&quot;)
	{
		if (attacker.classname == &quot;teledeath&quot;)
		{
			bprint (targ.netname);
			bprint (&quot; was telefragged by &quot;);
			bprint (attacker.owner.netname);
			bprint (&quot;\n&quot;);

			attacker.owner.frags = attacker.owner.frags + 1;
			return;
		}

		if (attacker.classname == &quot;teledeath2&quot;)
		{
			bprint (&quot;Satan's power deflects &quot;);
			bprint (targ.netname);
			bprint (&quot;'s telefrag\n&quot;);

			targ.frags = targ.frags - 1;
			return;
		}

		if (attacker.classname == &quot;player&quot;)
		{
			if (targ == attacker)
			{
				// killed self
				attacker.frags = attacker.frags - 1;
				bprint (targ.netname);
				
				if (targ.weapon == 64 &amp;&amp; targ.waterlevel &gt; 1)
				{
					bprint (&quot; discharges into the water.\n&quot;);
					return;
				}
				if (targ.weapon == IT_GRENADE_LAUNCHER)
					bprint (&quot; tries to put the pin back in\n&quot;);
				else
					bprint (&quot; becomes bored with life\n&quot;);
				return;
			}
			else if ( (teamplay == 2) &amp;&amp; (targ.team &gt; 0)&amp;&amp;(targ.team == attacker.team) )
			{
				if (rnum &lt; 0.25)
					deathstring = &quot; mows down a teammate\n&quot;;
				else if (rnum &lt; 0.50)
					deathstring = &quot; checks his glasses\n&quot;;
				else if (rnum &lt; 0.75)
					deathstring = &quot; gets a frag for the other team\n&quot;;
				else
					deathstring = &quot; loses another friend\n&quot;;
				bprint (attacker.netname);
				bprint (deathstring);
				attacker.frags = attacker.frags - 1;
				return;
			}
			else
			{
				attacker.frags = attacker.frags + 1;

				rnum = attacker.weapon;
				if (rnum == IT_AXE)
				{
					deathstring = &quot; was ax-murdered by &quot;;
					deathstring2 = &quot;\n&quot;;
				}
				if (rnum == IT_SHOTGUN)
				{
					deathstring = &quot; chewed on &quot;;
					deathstring2 = &quot;'s boomstick\n&quot;;
				}
				if (rnum == IT_SUPER_SHOTGUN)
				{
					deathstring = &quot; ate 2 loads of &quot;;
					deathstring2 = &quot;'s buckshot\n&quot;;
				}
				if (rnum == IT_NAILGUN)
				{
					deathstring = &quot; was nailed by &quot;;
					deathstring2 = &quot;\n&quot;;
				}
				if (rnum == IT_SUPER_NAILGUN)
				{
					deathstring = &quot; was punctured by &quot;;
					deathstring2 = &quot;\n&quot;;
				}
				if (rnum == IT_GRENADE_LAUNCHER)
				{
					deathstring = &quot; eats &quot;;
					deathstring2 = &quot;'s pineapple\n&quot;;
					if (targ.health &lt; -40)
					{
						deathstring = &quot; was gibbed by &quot;;
						deathstring2 = &quot;'s grenade\n&quot;;
					}
				}
				if (rnum == IT_ROCKET_LAUNCHER)
				{
					deathstring = &quot; rides &quot;;
					deathstring2 = &quot;'s rocket\n&quot;;
					if (targ.health &lt; -40)
					{
						deathstring = &quot; was gibbed by &quot;;
						deathstring2 = &quot;'s rocket\n&quot; ;
					}
				}
				if (rnum == IT_LIGHTNING)
				{
					deathstring = &quot; accepts &quot;;
					if (attacker.waterlevel &gt; 1)
						deathstring2 = &quot;'s discharge\n&quot;;
					else
						deathstring2 = &quot;'s shaft\n&quot;;
				}
				bprint (targ.netname);
				bprint (deathstring);
				bprint (attacker.netname);
				bprint (deathstring2);
			}
			return;
		}
		else
		{
			targ.frags = targ.frags - 1;
			bprint (targ.netname);

			// killed by a montser?
			if (attacker.flags &amp; FL_MONSTER)
			{
				if (attacker.classname == &quot;monster_army&quot;)
					bprint (&quot; was shot by a Grunt\n&quot;);
				if (attacker.classname == &quot;monster_demon1&quot;)
					bprint (&quot; was eviscerated by a Fiend\n&quot;);
				if (attacker.classname == &quot;monster_dog&quot;)
					bprint (&quot; was mauled by a Rottweiler\n&quot;);
				if (attacker.classname == &quot;monster_dragon&quot;)
					bprint (&quot; was fried by a Dragon\n&quot;);
				if (attacker.classname == &quot;monster_enforcer&quot;)
					bprint (&quot; was blasted by an Enforcer\n&quot;);
				if (attacker.classname == &quot;monster_fish&quot;)
					bprint (&quot; was fed to the Rotfish\n&quot;);
				if (attacker.classname == &quot;monster_hell_knight&quot;)
					bprint (&quot; was slain by a Death Knight\n&quot;);
				if (attacker.classname == &quot;monster_knight&quot;)
					bprint (&quot; was slashed by a Knight\n&quot;);
				if (attacker.classname == &quot;monster_ogre&quot;)
					bprint (&quot; was destroyed by an Ogre\n&quot;);
				if (attacker.classname == &quot;monster_oldone&quot;)
					bprint (&quot; became one with Shub-Niggurath\n&quot;);
				if (attacker.classname == &quot;monster_shalrath&quot;)
					bprint (&quot; was exploded by a Vore\n&quot;);
				if (attacker.classname == &quot;monster_shambler&quot;)
					bprint (&quot; was smashed by a Shambler\n&quot;);
				if (attacker.classname == &quot;monster_tarbaby&quot;)
					bprint (&quot; was slimed by a Spawn\n&quot;);
				if (attacker.classname == &quot;monster_vomit&quot;)
					bprint (&quot; was vomited on by a Vomitus\n&quot;);
				if (attacker.classname == &quot;monster_wizard&quot;)
					bprint (&quot; was scragged by a Scrag\n&quot;);
				if (attacker.classname == &quot;monster_zombie&quot;)
					bprint (&quot; joins the Zombies\n&quot;);

				return;
			}

			// tricks and traps
			if (attacker.classname == &quot;explo_box&quot;)
			{
				bprint (&quot; blew up\n&quot;);
				return;
			}
			if (attacker.solid == SOLID_BSP &amp;&amp; attacker != world)
			{	
				bprint (&quot; was squished\n&quot;);
				return;
			}
			if (attacker.classname == &quot;trap_shooter&quot; || attacker.classname == &quot;trap_spikeshooter&quot;)
			{
				bprint (&quot; was spiked\n&quot;);
				return;
			}
			if (attacker.classname == &quot;fireball&quot;)
			{
				bprint (&quot; ate a lavaball\n&quot;);
				return;
			}
			if (attacker.classname == &quot;trigger_changelevel&quot;)
			{
				bprint (&quot; tried to leave\n&quot;);
				return;
			}

			// in-water deaths
			rnum = targ.watertype;
			if (rnum == -3)
			{
				if (random() &lt; 0.5)
					bprint (&quot; sleeps with the fishes\n&quot;);
				else
					bprint (&quot; sucks it down\n&quot;);
				return;
			}
			else if (rnum == -4)
			{
				if (random() &lt; 0.5)
					bprint (&quot; gulped a load of slime\n&quot;);
				else
					bprint (&quot; can't exist on slime alone\n&quot;);
				return;
			}
			else if (rnum == -5)
			{
				if (targ.health &lt; -15)
				{
					bprint (&quot; burst into flames\n&quot;);
					return;
				}
				if (random() &lt; 0.5)
					bprint (&quot; turned into hot slag\n&quot;);
				else
					bprint (&quot; visits the Volcano God\n&quot;);
				return;
			}

			// fell to their death?
			if (targ.deathtype == &quot;falling&quot;)
			{
				targ.deathtype = &quot;&quot;;
				bprint (&quot; fell to his death\n&quot;);
				return;
			}

			// hell if I know; he's just dead!!!
			bprint (&quot; died\n&quot;);
		}
	}
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>84d9nweguych1t168r64gbiqbst2bu2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>clientcommand</title>
    <ns>0</ns>
    <id>218</id>
    <revision>
      <id>399</id>
      <timestamp>2008-02-23T19:24:32Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  void '''clientcommand''' (entity e, string s)  Executes a command string as if it came from the specified client</comment>
      <text xml:space="preserve" bytes="113"> void '''clientcommand''' (entity e, string s)

Executes a command string as if it came from the specified client</text>
      <sha1>p2iwptxok7h40qm4uk0izjzvzkd3sfj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2391</id>
      <parentid>399</parentid>
      <timestamp>2013-03-28T14:58:34Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Spirit moved page [[Clientcommand]] to [[clientcommand]]: lowercase</comment>
      <text xml:space="preserve" bytes="113"> void '''clientcommand''' (entity e, string s)

Executes a command string as if it came from the specified client</text>
      <sha1>p2iwptxok7h40qm4uk0izjzvzkd3sfj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>colormap.lmp</title>
    <ns>0</ns>
    <id>517</id>
    <redirect title="Quake palette" />
    <revision>
      <id>1169</id>
      <timestamp>2009-09-23T22:38:43Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <comment>Redirecting to [[Quake palette#colormap.lmp]]</comment>
      <text xml:space="preserve" bytes="40">#REDIRECT [[Quake palette#colormap.lmp]]</text>
      <sha1>ii518fk15tk4fbgmi0nsr2azee0zqg0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2685</id>
      <parentid>1169</parentid>
      <timestamp>2013-03-30T11:13:03Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Spirit moved page [[Colormap.lmp]] to [[colormap.lmp]] without leaving a redirect: lowercase</comment>
      <text xml:space="preserve" bytes="40">#REDIRECT [[Quake palette#colormap.lmp]]</text>
      <sha1>ii518fk15tk4fbgmi0nsr2azee0zqg0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>combat.qc</title>
    <ns>0</ns>
    <id>836</id>
    <revision>
      <id>2452</id>
      <timestamp>2013-03-29T10:13:18Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for genernal [[Combat | combat]] behavior.   &lt;pre&gt; void() T_MissileTouch; void() info_player_start; void(entity targ, entity attacker) ...&quot;</comment>
      <text xml:space="preserve" bytes="6239">This [[Quake-C]] file contains the code for genernal [[Combat | combat]] behavior.


&lt;pre&gt;
void() T_MissileTouch;
void() info_player_start;
void(entity targ, entity attacker) ClientObituary;

void() monster_death_use;

//============================================================================

/*
============
CanDamage

Returns true if the inflictor can directly damage the target.  Used for
explosions and melee attacks.
============
*/
float(entity targ, entity inflictor) CanDamage =
{
// bmodels need special checking because their origin is 0,0,0
	if (targ.movetype == MOVETYPE_PUSH)
	{
		traceline(inflictor.origin, 0.5 * (targ.absmin + targ.absmax), TRUE, self);
		if (trace_fraction == 1)
			return TRUE;
		if (trace_ent == targ)
			return TRUE;
		return FALSE;
	}
	
	traceline(inflictor.origin, targ.origin, TRUE, self);
	if (trace_fraction == 1)
		return TRUE;
	traceline(inflictor.origin, targ.origin + '15 15 0', TRUE, self);
	if (trace_fraction == 1)
		return TRUE;
	traceline(inflictor.origin, targ.origin + '-15 -15 0', TRUE, self);
	if (trace_fraction == 1)
		return TRUE;
	traceline(inflictor.origin, targ.origin + '-15 15 0', TRUE, self);
	if (trace_fraction == 1)
		return TRUE;
	traceline(inflictor.origin, targ.origin + '15 -15 0', TRUE, self);
	if (trace_fraction == 1)
		return TRUE;

	return FALSE;
};


/*
============
Killed
============
*/
void(entity targ, entity attacker) Killed =
{
	local entity oself;

	oself = self;
	self = targ;
	
	if (self.health &lt; -99)
		self.health = -99;		// don't let sbar look bad if a player

	if (self.movetype == MOVETYPE_PUSH || self.movetype == MOVETYPE_NONE)
	{	// doors, triggers, etc
		self.th_die ();
		self = oself;
		return;
	}

	self.enemy = attacker;

// bump the monster counter
	if (self.flags &amp; FL_MONSTER)
	{
		killed_monsters = killed_monsters + 1;
		WriteByte (MSG_ALL, SVC_KILLEDMONSTER);
	}

	ClientObituary(self, attacker);
	
	self.takedamage = DAMAGE_NO;
	self.touch = SUB_Null;

	monster_death_use();
	self.th_die ();
	
	self = oself;
};


/*
============
T_Damage

The damage is coming from inflictor, but get mad at attacker
This should be the only function that ever reduces health.
============
*/
void(entity targ, entity inflictor, entity attacker, float damage) T_Damage=
{
	local	vector	dir;
	local	entity	oldself;
	local	float	save;
	local	float	take;

	if (!targ.takedamage)
		return;

// used by buttons and triggers to set activator for target firing
	damage_attacker = attacker;

// check for quad damage powerup on the attacker
	if (attacker.super_damage_finished &gt; time)
		damage = damage * 4;

// save damage based on the target's armor level

	save = ceil(targ.armortype*damage);
	if (save &gt;= targ.armorvalue)
	{
		save = targ.armorvalue;
		targ.armortype = 0;	// lost all armor
		targ.items = targ.items - (targ.items &amp; (IT_ARMOR1 | IT_ARMOR2 | IT_ARMOR3));
	}
	
	targ.armorvalue = targ.armorvalue - save;
	take = ceil(damage-save);

// add to the damage total for clients, which will be sent as a single
// message at the end of the frame
// FIXME: remove after combining shotgun blasts?
	if (targ.flags &amp; FL_CLIENT)
	{
		targ.dmg_take = targ.dmg_take + take;
		targ.dmg_save = targ.dmg_save + save;
		targ.dmg_inflictor = inflictor;
	}

// figure momentum add
	if ( (inflictor != world) &amp;&amp; (targ.movetype == MOVETYPE_WALK) )
	{
		dir = targ.origin - (inflictor.absmin + inflictor.absmax) * 0.5;
		dir = normalize(dir);
		targ.velocity = targ.velocity + dir*damage*8;
	}

// check for godmode or invincibility
	if (targ.flags &amp; FL_GODMODE)
		return;
	if (targ.invincible_finished &gt;= time)
	{
		if (self.invincible_sound &lt; time)
		{
			sound (targ, CHAN_ITEM, &quot;items/protect3.wav&quot;, 1, ATTN_NORM);
			self.invincible_sound = time + 2;
		}
		return;
	}

// team play damage avoidance
	if ( (teamplay == 1) &amp;&amp; (targ.team &gt; 0)&amp;&amp;(targ.team == attacker.team) )
		return;
		
// do the damage
	targ.health = targ.health - take;
			
	if (targ.health &lt;= 0)
	{
		Killed (targ, attacker);
		return;
	}

// react to the damage
	oldself = self;
	self = targ;

	if ( (self.flags &amp; FL_MONSTER) &amp;&amp; attacker != world)
	{
	// get mad unless of the same class (except for soldiers)
		if (self != attacker &amp;&amp; attacker != self.enemy)
		{
			if ( (self.classname != attacker.classname) 
			|| (self.classname == &quot;monster_army&quot; ) )
			{
				if (self.enemy.classname == &quot;player&quot;)
					self.oldenemy = self.enemy;
				self.enemy = attacker;
				FoundTarget ();
			}
		}
	}

	if (self.th_pain)
	{
		self.th_pain (attacker, take);
	// nightmare mode monsters don't go into pain frames often
		if (skill == 3)
			self.pain_finished = time + 5;		
	}

	self = oldself;
};

/*
============
T_RadiusDamage
============
*/
void(entity inflictor, entity attacker, float damage, entity ignore) T_RadiusDamage =
{
	local	float 	points;
	local	entity	head;
	local	vector	org;

	head = findradius(inflictor.origin, damage+40);
	
	while (head)
	{
		if (head != ignore)
		{
			if (head.takedamage)
			{
				org = head.origin + (head.mins + head.maxs)*0.5;
				points = 0.5*vlen (inflictor.origin - org);
				if (points &lt; 0)
					points = 0;
				points = damage - points;
				if (head == attacker)
					points = points * 0.5;
				if (points &gt; 0)
				{
					if (CanDamage (head, inflictor))
					{	// shambler takes half damage from all explosions
						if (head.classname == &quot;monster_shambler&quot;)						
							T_Damage (head, inflictor, attacker, points*0.5);
						else
							T_Damage (head, inflictor, attacker, points);
					}
				}
			}
		}
		head = head.chain;
	}
};

/*
============
T_BeamDamage
============
*/
void(entity attacker, float damage) T_BeamDamage =
{
	local	float 	points;
	local	entity	head;
	
	head = findradius(attacker.origin, damage+40);
	
	while (head)
	{
		if (head.takedamage)
		{
			points = 0.5*vlen (attacker.origin - head.origin);
			if (points &lt; 0)
				points = 0;
			points = damage - points;
			if (head == attacker)
				points = points * 0.5;
			if (points &gt; 0)
			{
				if (CanDamage (head, attacker))
				{
					if (head.classname == &quot;monster_shambler&quot;)						
						T_Damage (head, attacker, attacker, points*0.5);
					else
						T_Damage (head, attacker, attacker, points);
				}
			}
		}
		head = head.chain;
	}
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>jdq7vl2yjw90ywbpku3f0vy33m8pfo7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2453</id>
      <parentid>2452</parentid>
      <timestamp>2013-03-29T10:18:25Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="6238">This [[Quake-C]] file contains the code for general [[Combat | combat]] behavior.


&lt;pre&gt;
void() T_MissileTouch;
void() info_player_start;
void(entity targ, entity attacker) ClientObituary;

void() monster_death_use;

//============================================================================

/*
============
CanDamage

Returns true if the inflictor can directly damage the target.  Used for
explosions and melee attacks.
============
*/
float(entity targ, entity inflictor) CanDamage =
{
// bmodels need special checking because their origin is 0,0,0
	if (targ.movetype == MOVETYPE_PUSH)
	{
		traceline(inflictor.origin, 0.5 * (targ.absmin + targ.absmax), TRUE, self);
		if (trace_fraction == 1)
			return TRUE;
		if (trace_ent == targ)
			return TRUE;
		return FALSE;
	}
	
	traceline(inflictor.origin, targ.origin, TRUE, self);
	if (trace_fraction == 1)
		return TRUE;
	traceline(inflictor.origin, targ.origin + '15 15 0', TRUE, self);
	if (trace_fraction == 1)
		return TRUE;
	traceline(inflictor.origin, targ.origin + '-15 -15 0', TRUE, self);
	if (trace_fraction == 1)
		return TRUE;
	traceline(inflictor.origin, targ.origin + '-15 15 0', TRUE, self);
	if (trace_fraction == 1)
		return TRUE;
	traceline(inflictor.origin, targ.origin + '15 -15 0', TRUE, self);
	if (trace_fraction == 1)
		return TRUE;

	return FALSE;
};


/*
============
Killed
============
*/
void(entity targ, entity attacker) Killed =
{
	local entity oself;

	oself = self;
	self = targ;
	
	if (self.health &lt; -99)
		self.health = -99;		// don't let sbar look bad if a player

	if (self.movetype == MOVETYPE_PUSH || self.movetype == MOVETYPE_NONE)
	{	// doors, triggers, etc
		self.th_die ();
		self = oself;
		return;
	}

	self.enemy = attacker;

// bump the monster counter
	if (self.flags &amp; FL_MONSTER)
	{
		killed_monsters = killed_monsters + 1;
		WriteByte (MSG_ALL, SVC_KILLEDMONSTER);
	}

	ClientObituary(self, attacker);
	
	self.takedamage = DAMAGE_NO;
	self.touch = SUB_Null;

	monster_death_use();
	self.th_die ();
	
	self = oself;
};


/*
============
T_Damage

The damage is coming from inflictor, but get mad at attacker
This should be the only function that ever reduces health.
============
*/
void(entity targ, entity inflictor, entity attacker, float damage) T_Damage=
{
	local	vector	dir;
	local	entity	oldself;
	local	float	save;
	local	float	take;

	if (!targ.takedamage)
		return;

// used by buttons and triggers to set activator for target firing
	damage_attacker = attacker;

// check for quad damage powerup on the attacker
	if (attacker.super_damage_finished &gt; time)
		damage = damage * 4;

// save damage based on the target's armor level

	save = ceil(targ.armortype*damage);
	if (save &gt;= targ.armorvalue)
	{
		save = targ.armorvalue;
		targ.armortype = 0;	// lost all armor
		targ.items = targ.items - (targ.items &amp; (IT_ARMOR1 | IT_ARMOR2 | IT_ARMOR3));
	}
	
	targ.armorvalue = targ.armorvalue - save;
	take = ceil(damage-save);

// add to the damage total for clients, which will be sent as a single
// message at the end of the frame
// FIXME: remove after combining shotgun blasts?
	if (targ.flags &amp; FL_CLIENT)
	{
		targ.dmg_take = targ.dmg_take + take;
		targ.dmg_save = targ.dmg_save + save;
		targ.dmg_inflictor = inflictor;
	}

// figure momentum add
	if ( (inflictor != world) &amp;&amp; (targ.movetype == MOVETYPE_WALK) )
	{
		dir = targ.origin - (inflictor.absmin + inflictor.absmax) * 0.5;
		dir = normalize(dir);
		targ.velocity = targ.velocity + dir*damage*8;
	}

// check for godmode or invincibility
	if (targ.flags &amp; FL_GODMODE)
		return;
	if (targ.invincible_finished &gt;= time)
	{
		if (self.invincible_sound &lt; time)
		{
			sound (targ, CHAN_ITEM, &quot;items/protect3.wav&quot;, 1, ATTN_NORM);
			self.invincible_sound = time + 2;
		}
		return;
	}

// team play damage avoidance
	if ( (teamplay == 1) &amp;&amp; (targ.team &gt; 0)&amp;&amp;(targ.team == attacker.team) )
		return;
		
// do the damage
	targ.health = targ.health - take;
			
	if (targ.health &lt;= 0)
	{
		Killed (targ, attacker);
		return;
	}

// react to the damage
	oldself = self;
	self = targ;

	if ( (self.flags &amp; FL_MONSTER) &amp;&amp; attacker != world)
	{
	// get mad unless of the same class (except for soldiers)
		if (self != attacker &amp;&amp; attacker != self.enemy)
		{
			if ( (self.classname != attacker.classname) 
			|| (self.classname == &quot;monster_army&quot; ) )
			{
				if (self.enemy.classname == &quot;player&quot;)
					self.oldenemy = self.enemy;
				self.enemy = attacker;
				FoundTarget ();
			}
		}
	}

	if (self.th_pain)
	{
		self.th_pain (attacker, take);
	// nightmare mode monsters don't go into pain frames often
		if (skill == 3)
			self.pain_finished = time + 5;		
	}

	self = oldself;
};

/*
============
T_RadiusDamage
============
*/
void(entity inflictor, entity attacker, float damage, entity ignore) T_RadiusDamage =
{
	local	float 	points;
	local	entity	head;
	local	vector	org;

	head = findradius(inflictor.origin, damage+40);
	
	while (head)
	{
		if (head != ignore)
		{
			if (head.takedamage)
			{
				org = head.origin + (head.mins + head.maxs)*0.5;
				points = 0.5*vlen (inflictor.origin - org);
				if (points &lt; 0)
					points = 0;
				points = damage - points;
				if (head == attacker)
					points = points * 0.5;
				if (points &gt; 0)
				{
					if (CanDamage (head, inflictor))
					{	// shambler takes half damage from all explosions
						if (head.classname == &quot;monster_shambler&quot;)						
							T_Damage (head, inflictor, attacker, points*0.5);
						else
							T_Damage (head, inflictor, attacker, points);
					}
				}
			}
		}
		head = head.chain;
	}
};

/*
============
T_BeamDamage
============
*/
void(entity attacker, float damage) T_BeamDamage =
{
	local	float 	points;
	local	entity	head;
	
	head = findradius(attacker.origin, damage+40);
	
	while (head)
	{
		if (head.takedamage)
		{
			points = 0.5*vlen (attacker.origin - head.origin);
			if (points &lt; 0)
				points = 0;
			points = damage - points;
			if (head == attacker)
				points = points * 0.5;
			if (points &gt; 0)
			{
				if (CanDamage (head, attacker))
				{
					if (head.classname == &quot;monster_shambler&quot;)						
						T_Damage (head, attacker, attacker, points*0.5);
					else
						T_Damage (head, attacker, attacker, points);
				}
			}
		}
		head = head.chain;
	}
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>s54886kvbd16tlfi6qu2k8pbd0udk7s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>config com baud</title>
    <ns>0</ns>
    <id>77</id>
    <revision>
      <id>127</id>
      <timestamp>2007-10-30T22:02:11Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{underscore-lowercase-underscores}}{{Infobox Console variable |name=_config_com_baud |default-value=57600 |saved-to-config=yes }} Versions: NormalQuake  This variable is used to store the...</comment>
      <text xml:space="preserve" bytes="489">{{underscore-lowercase-underscores}}{{Infobox Console variable
|name=_config_com_baud
|default-value=57600
|saved-to-config=yes
}}
Versions: NormalQuake

This variable is used to store the current baud rate setting of the serial connection when using a null modem or regular modem. Serial communications are not supported in [[WinQuake]] or [[GLQuake]] and this variable remains unused in those ports, however Linux and DOS ports are capable of serial communication.

{{Console variables}}</text>
      <sha1>panjfze703jqg1y4wkuge0186zrwlvo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2508</id>
      <parentid>127</parentid>
      <timestamp>2013-03-29T14:21:58Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Config com baud]] to [[config com baud]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="489">{{underscore-lowercase-underscores}}{{Infobox Console variable
|name=_config_com_baud
|default-value=57600
|saved-to-config=yes
}}
Versions: NormalQuake

This variable is used to store the current baud rate setting of the serial connection when using a null modem or regular modem. Serial communications are not supported in [[WinQuake]] or [[GLQuake]] and this variable remains unused in those ports, however Linux and DOS ports are capable of serial communication.

{{Console variables}}</text>
      <sha1>panjfze703jqg1y4wkuge0186zrwlvo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>config com irq</title>
    <ns>0</ns>
    <id>78</id>
    <revision>
      <id>128</id>
      <timestamp>2007-10-30T22:02:51Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{underscore-lowercase-underscores}}{{Infobox Console variable |name=_config_com_irq |default-value=4 |saved-to-config=yes }} Versions: NormalQuake  This variable holds the IRQ number of t...</comment>
      <text xml:space="preserve" bytes="437">{{underscore-lowercase-underscores}}{{Infobox Console variable
|name=_config_com_irq
|default-value=4
|saved-to-config=yes
}}
Versions: NormalQuake

This variable holds the IRQ number of the com port when using serial connections (modem or null modem). Serial communications are not supported in [[WinQuake]] or [[GLQuake]] and this variable remains unused in those ports, however Linux and DOS ports are capable of serial communication.</text>
      <sha1>8guy54ia58rqnon2giawk7h31ens35l</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>129</id>
      <parentid>128</parentid>
      <timestamp>2007-10-30T22:02:58Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="460">{{underscore-lowercase-underscores}}{{Infobox Console variable
|name=_config_com_irq
|default-value=4
|saved-to-config=yes
}}
Versions: NormalQuake

This variable holds the IRQ number of the com port when using serial connections (modem or null modem). Serial communications are not supported in [[WinQuake]] or [[GLQuake]] and this variable remains unused in those ports, however Linux and DOS ports are capable of serial communication.

{{Console variables}}</text>
      <sha1>8cubu3kvj7bxskgpviz6rri9luiytcz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2393</id>
      <parentid>129</parentid>
      <timestamp>2013-03-28T14:58:50Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Spirit moved page [[Config com irq]] to [[config com irq]]: lowercase</comment>
      <text xml:space="preserve" bytes="460">{{underscore-lowercase-underscores}}{{Infobox Console variable
|name=_config_com_irq
|default-value=4
|saved-to-config=yes
}}
Versions: NormalQuake

This variable holds the IRQ number of the com port when using serial connections (modem or null modem). Serial communications are not supported in [[WinQuake]] or [[GLQuake]] and this variable remains unused in those ports, however Linux and DOS ports are capable of serial communication.

{{Console variables}}</text>
      <sha1>8cubu3kvj7bxskgpviz6rri9luiytcz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>config modem clear</title>
    <ns>0</ns>
    <id>81</id>
    <revision>
      <id>133</id>
      <timestamp>2007-10-30T22:08:01Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{underscore-lowercase-underscores}}{{Infobox Console variable |name=_config_modem_clear |default-value=&quot;ATZ&quot; |saved-to-config=yes }} Versions: NormalQuake  This contains the command to se...</comment>
      <text xml:space="preserve" bytes="527">{{underscore-lowercase-underscores}}{{Infobox Console variable
|name=_config_modem_clear
|default-value=&quot;ATZ&quot;
|saved-to-config=yes
}}
Versions: NormalQuake

This contains the command to send the modem to reset it. Check your modem manual for alternate settings. This variable is only used if [[_config_com_modem]] is 1. Serial communications are not supported in [[WinQuake]] or [[GLQuake]] and this variable remains unused in those ports, however Linux and DOS ports are capable of serial communication.

{{Console variables}}</text>
      <sha1>017azumk6u1m4p0whymee38lg2fmn9b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>140</id>
      <parentid>133</parentid>
      <timestamp>2007-10-30T22:36:19Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="525">{{underscore-lowercase-underscores}}{{Infobox Console variable
|name=_config_modem_clear
|default-value=ATZ
|saved-to-config=yes
}}
Versions: NormalQuake

This contains the command to send the modem to reset it. Check your modem manual for alternate settings. This variable is only used if [[_config_com_modem]] is 1. Serial communications are not supported in [[WinQuake]] or [[GLQuake]] and this variable remains unused in those ports, however Linux and DOS ports are capable of serial communication.

{{Console variables}}</text>
      <sha1>3qwxv4g4t05u7puo4rwubaq2f6ydz22</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2512</id>
      <parentid>140</parentid>
      <timestamp>2013-03-29T14:21:59Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Config modem clear]] to [[config modem clear]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="525">{{underscore-lowercase-underscores}}{{Infobox Console variable
|name=_config_modem_clear
|default-value=ATZ
|saved-to-config=yes
}}
Versions: NormalQuake

This contains the command to send the modem to reset it. Check your modem manual for alternate settings. This variable is only used if [[_config_com_modem]] is 1. Serial communications are not supported in [[WinQuake]] or [[GLQuake]] and this variable remains unused in those ports, however Linux and DOS ports are capable of serial communication.

{{Console variables}}</text>
      <sha1>3qwxv4g4t05u7puo4rwubaq2f6ydz22</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>config modem dialtype</title>
    <ns>0</ns>
    <id>82</id>
    <revision>
      <id>134</id>
      <timestamp>2007-10-30T22:09:17Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{underscore-lowercase-underscores}}{{Infobox Console variables |name=_config_modem_dialtype |default-value=T |saved-to-config=yes }} Versions: NormalQuake  This variable contains the dial...</comment>
      <text xml:space="preserve" bytes="609">{{underscore-lowercase-underscores}}{{Infobox Console variables
|name=_config_modem_dialtype
|default-value=T
|saved-to-config=yes
}}
Versions: NormalQuake

This variable contains the dialtype of the modem: P for pulse dialing and T for DTMF tone dialing. Certain areas of the US still use pulse dialing and charge a fee for tone support. This variable is only used if [[_config_com_modem]] is 1.  Modem communications are not supported in [[WinQuake]] or [[GLQuake]] and this variable remains unused in those ports, however Linux and DOS ports are still capable of modem communication.

{{Console variables}}</text>
      <sha1>qqocn45nsmmod7fvlbdvw70wsajj1tr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>135</id>
      <parentid>134</parentid>
      <timestamp>2007-10-30T22:09:27Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="608">{{underscore-lowercase-underscores}}{{Infobox Console variable
|name=_config_modem_dialtype
|default-value=T
|saved-to-config=yes
}}
Versions: NormalQuake

This variable contains the dialtype of the modem: P for pulse dialing and T for DTMF tone dialing. Certain areas of the US still use pulse dialing and charge a fee for tone support. This variable is only used if [[_config_com_modem]] is 1.  Modem communications are not supported in [[WinQuake]] or [[GLQuake]] and this variable remains unused in those ports, however Linux and DOS ports are still capable of modem communication.

{{Console variables}}</text>
      <sha1>2b4y5g8tjrn5inyoztyx0ykwr64uedr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2514</id>
      <parentid>135</parentid>
      <timestamp>2013-03-29T14:22:00Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Config modem dialtype]] to [[config modem dialtype]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="608">{{underscore-lowercase-underscores}}{{Infobox Console variable
|name=_config_modem_dialtype
|default-value=T
|saved-to-config=yes
}}
Versions: NormalQuake

This variable contains the dialtype of the modem: P for pulse dialing and T for DTMF tone dialing. Certain areas of the US still use pulse dialing and charge a fee for tone support. This variable is only used if [[_config_com_modem]] is 1.  Modem communications are not supported in [[WinQuake]] or [[GLQuake]] and this variable remains unused in those ports, however Linux and DOS ports are still capable of modem communication.

{{Console variables}}</text>
      <sha1>2b4y5g8tjrn5inyoztyx0ykwr64uedr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>config modem hangup</title>
    <ns>0</ns>
    <id>83</id>
    <revision>
      <id>136</id>
      <timestamp>2007-10-30T22:12:43Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{underscore-lowercase-underscores}}{{Infobox Console variable |name=_config_modem_hangup |default-value=AT H |saved-to-config=yes }} Versions: NormalQuake  This variable contains the comm...</comment>
      <text xml:space="preserve" bytes="621">{{underscore-lowercase-underscores}}{{Infobox Console variable
|name=_config_modem_hangup
|default-value=AT H
|saved-to-config=yes
}}
Versions: NormalQuake

This variable contains the command to send to the modem to hangup the phone. The default is fine for most modems, however some modems use ATH0. Consult your modem manual for the correct setting. This variable is only used if [[_config_com_modem]] is 1. Modem communications are not supported in [[WinQuake]] or [[GLQuake]] and this variable remains unused in those ports, however Linux and DOS ports are still capable of modem communication.

{{Console variables}}</text>
      <sha1>t1qcjdr315m43t569dgv0zkrfq0sx3p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2396</id>
      <parentid>136</parentid>
      <timestamp>2013-03-28T14:59:06Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Spirit moved page [[Config modem hangup]] to [[config modem hangup]]: lowercase</comment>
      <text xml:space="preserve" bytes="621">{{underscore-lowercase-underscores}}{{Infobox Console variable
|name=_config_modem_hangup
|default-value=AT H
|saved-to-config=yes
}}
Versions: NormalQuake

This variable contains the command to send to the modem to hangup the phone. The default is fine for most modems, however some modems use ATH0. Consult your modem manual for the correct setting. This variable is only used if [[_config_com_modem]] is 1. Modem communications are not supported in [[WinQuake]] or [[GLQuake]] and this variable remains unused in those ports, however Linux and DOS ports are still capable of modem communication.

{{Console variables}}</text>
      <sha1>t1qcjdr315m43t569dgv0zkrfq0sx3p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>crosshair</title>
    <ns>0</ns>
    <id>91</id>
    <revision>
      <id>154</id>
      <timestamp>2007-10-30T23:33:19Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=crosshair |default-value=0 |saved-to-config=yes* }} When this is enabled (type &quot;crosshair 1&quot;), the engine will draw a plus sign wi...</comment>
      <text xml:space="preserve" bytes="607">{{lowercase-underscores}}{{Infobox Console variable
|name=crosshair
|default-value=0
|saved-to-config=yes*
}}
When this is enabled (type &quot;crosshair 1&quot;), the engine will draw a plus sign with the [[Quake font]] in the centre of the screen.

Some new engines ([[TomazQuake]] for example) support different crosshairs drawn from TGA images, in which case you will be able to change the look of the crosshair by setting it to 2, or 3, etc.

*(FIXME) I seem to recall older versions not saving crosshair to config? Can anyone verify this? (I'm sure cheapalert/leileilol would know exactly)

{{Console variables}}</text>
      <sha1>sj3capysolg1regrxp8urm3iltr9sxa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>155</id>
      <parentid>154</parentid>
      <timestamp>2007-10-30T23:33:56Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="655">{{lowercase-underscores}}{{Infobox Console variable
|name=crosshair
|default-value=0
|saved-to-config=[[#note|yes*]]
}}
When this is enabled (type &quot;crosshair 1&quot;), the engine will draw a plus sign with the [[Quake font]] in the centre of the screen.

Some new engines ([[TomazQuake]] for example) support different crosshairs drawn from TGA images, in which case you will be able to change the look of the crosshair by setting it to 2, or 3, etc.

&lt;a target=&quot;note&quot;&gt;&lt;/a&gt;&lt;nowiki&gt;*&lt;/nowiki&gt;(FIXME) I seem to recall older versions not saving crosshair to config? Can anyone verify this? (I'm sure cheapalert/leileilol would know exactly)

{{Console variables}}</text>
      <sha1>5cqjn4d567ly5j4vej8rsl0wgrfkhty</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>156</id>
      <parentid>155</parentid>
      <timestamp>2007-10-30T23:34:38Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="636">{{lowercase-underscores}}{{Infobox Console variable
|name=crosshair
|default-value=0
|saved-to-config=yes* (see below)
}}
When this is enabled (type &quot;crosshair 1&quot;), the engine will draw a plus sign with the [[Quake font]] in the centre of the screen.

Some new engines ([[TomazQuake]] for example) support different crosshairs drawn from TGA images, in which case you will be able to change the look of the crosshair by setting it to 2, or 3, etc.

&lt;nowiki&gt;*&lt;/nowiki&gt;(FIXME) I seem to recall older versions not saving crosshair to config? Can anyone verify this? (I'm sure cheapalert/leileilol would know exactly)

{{Console variables}}</text>
      <sha1>1jy0gjmjogzy1lmgwy4hcn165tpb31e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2398</id>
      <parentid>156</parentid>
      <timestamp>2013-03-28T14:59:22Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Spirit moved page [[Crosshair]] to [[crosshair]]: lowercase</comment>
      <text xml:space="preserve" bytes="636">{{lowercase-underscores}}{{Infobox Console variable
|name=crosshair
|default-value=0
|saved-to-config=yes* (see below)
}}
When this is enabled (type &quot;crosshair 1&quot;), the engine will draw a plus sign with the [[Quake font]] in the centre of the screen.

Some new engines ([[TomazQuake]] for example) support different crosshairs drawn from TGA images, in which case you will be able to change the look of the crosshair by setting it to 2, or 3, etc.

&lt;nowiki&gt;*&lt;/nowiki&gt;(FIXME) I seem to recall older versions not saving crosshair to config? Can anyone verify this? (I'm sure cheapalert/leileilol would know exactly)

{{Console variables}}</text>
      <sha1>1jy0gjmjogzy1lmgwy4hcn165tpb31e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>deathmatch</title>
    <ns>0</ns>
    <id>126</id>
    <revision>
      <id>201</id>
      <timestamp>2007-10-31T00:45:19Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=deathmatch |default-value=0 |saved-to-config=no }} Deathmatch is a term supposedly coined by John Romero to describe the visceral ...</comment>
      <text xml:space="preserve" bytes="1239">{{lowercase-underscores}}{{Infobox Console variable
|name=deathmatch
|default-value=0
|saved-to-config=no
}}
Deathmatch is a term supposedly coined by John Romero to describe the visceral experience of being in a &quot;match&quot; where two live players, each on their own computer, link up a game for the purpose of fighting the match to the death. Deathmatch differs from other &quot;online/multiplayer&quot; games or game modes in that there are no actual rules, except for maybe a time limit or fragcount limit - it's kill or be killed and at the end of it all whoever has killed the most wins.

There are different types of Deathmatch, here is (some?):

* Deathmatch mode 1: Weapons disappear when took and return 30 seconds after pickup. [[Ammo]] returns 30 seconds after pickup.
* Deathmatch mode 2: Weapons dont disappear (weapon stay). [[Ammo]], [[Health]], [[Armor]] and [[Mega-Health]] dont return after pickup. (this mode is rarely used)
* Deathmatch mode 3: Weapons dont disappear (weapon stay). [[Ammo]] returns 15 seconds after pickup.
* Deathmatch mode 4: Starts with 250 [[Red Armor]] and 200 [[Health]], all weapons except [[Grenade Launcher]], unlimited [[Ammo]] and a [[Pentagram of Protection]] that is burning out.

{{Console variables}}</text>
      <sha1>fsfeydpq9c94x7kzg54w6qfwgki6sao</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>210</id>
      <parentid>201</parentid>
      <timestamp>2007-11-01T23:18:51Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1353">{{lowercase-underscores}}{{Infobox Console variable
|name=deathmatch
|default-value=0
|saved-to-config=no
}}
Deathmatch is a term supposedly coined by John Romero to describe the visceral experience of being in a &quot;match&quot; where two live players, each on their own computer, link up a game for the purpose of fighting the match to the death. Deathmatch differs from other &quot;online/multiplayer&quot; games or game modes in that there are no actual rules, except for maybe a time limit or fragcount limit - it's kill or be killed and at the end of it all whoever has killed the most wins.

There are different types of Deathmatch, here are common rules:

* Deathmatch mode 1: Weapons disappear when picked up and respawn 30 seconds after pickup. [[Ammo]] respawns 30 seconds after pickup. (default)
* Deathmatch mode 2: Weapons do not disappear, but player's already possessing the weapon will not receive additional ammo upon touch (weapon stay). [[Ammo]], [[Health]], [[Armor]] and [[Mega-Health]] do not respawn after pickup. (this mode is rarely used)
* Deathmatch mode 3: Weapon stay as in mode 2. [[Ammo]] returns 15 seconds after pickup. (popular)
* Deathmatch mode 4: Starts with 250 [[Red Armor]] and 200 [[Health]], all weapons except [[Grenade Launcher]], unlimited [[Ammo]] and a [[Pentagram of Protection]] that is burning out.

{{Console variables}}</text>
      <sha1>bseemxysc0sabjrezhjo8e80p4495bp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2516</id>
      <parentid>210</parentid>
      <timestamp>2013-03-29T14:22:00Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Deathmatch]] to [[deathmatch]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="1353">{{lowercase-underscores}}{{Infobox Console variable
|name=deathmatch
|default-value=0
|saved-to-config=no
}}
Deathmatch is a term supposedly coined by John Romero to describe the visceral experience of being in a &quot;match&quot; where two live players, each on their own computer, link up a game for the purpose of fighting the match to the death. Deathmatch differs from other &quot;online/multiplayer&quot; games or game modes in that there are no actual rules, except for maybe a time limit or fragcount limit - it's kill or be killed and at the end of it all whoever has killed the most wins.

There are different types of Deathmatch, here are common rules:

* Deathmatch mode 1: Weapons disappear when picked up and respawn 30 seconds after pickup. [[Ammo]] respawns 30 seconds after pickup. (default)
* Deathmatch mode 2: Weapons do not disappear, but player's already possessing the weapon will not receive additional ammo upon touch (weapon stay). [[Ammo]], [[Health]], [[Armor]] and [[Mega-Health]] do not respawn after pickup. (this mode is rarely used)
* Deathmatch mode 3: Weapon stay as in mode 2. [[Ammo]] returns 15 seconds after pickup. (popular)
* Deathmatch mode 4: Starts with 250 [[Red Armor]] and 200 [[Health]], all weapons except [[Grenade Launcher]], unlimited [[Ammo]] and a [[Pentagram of Protection]] that is burning out.

{{Console variables}}</text>
      <sha1>bseemxysc0sabjrezhjo8e80p4495bp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>defs.qc</title>
    <ns>0</ns>
    <id>837</id>
    <revision>
      <id>2454</id>
      <timestamp>2013-03-29T10:22:55Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the definitions for variables and functions that are used throughout the QC code.   &lt;pre&gt; /* ===================================================...&quot;</comment>
      <text xml:space="preserve" bytes="17561">This [[Quake-C]] file contains the definitions for variables and functions that are used throughout the QC code.


&lt;pre&gt;
/*
==============================================================================

			SOURCE FOR GLOBALVARS_T C STRUCTURE

==============================================================================
*/

//
// system globals
//
entity		self;
entity		other;
entity		world;
float		time;
float		frametime;

float		force_retouch;		// force all entities to touch triggers
								// next frame.  this is needed because
								// non-moving things don't normally scan
								// for triggers, and when a trigger is
								// created (like a teleport trigger), it
								// needs to catch everything.
								// decremented each frame, so set to 2
								// to guarantee everything is touched
string		mapname;

float		deathmatch;
float		coop;
float		teamplay;

float		serverflags;		// propagated from level to level, used to
								// keep track of completed episodes

float		total_secrets;
float		total_monsters;

float		found_secrets;		// number of secrets found
float		killed_monsters;	// number of monsters killed


// spawnparms are used to encode information about clients across server
// level changes
float		parm1, parm2, parm3, parm4, parm5, parm6, parm7, parm8, parm9, parm10, parm11, parm12, parm13, parm14, parm15, parm16;

//
// global variables set by built in functions
//	
vector		v_forward, v_up, v_right;	// set by makevectors()
	
// set by traceline / tracebox
float		trace_allsolid;
float		trace_startsolid;
float		trace_fraction;
vector		trace_endpos;
vector		trace_plane_normal;
float		trace_plane_dist;
entity		trace_ent;
float		trace_inopen;
float		trace_inwater;

entity		msg_entity;				// destination of single entity writes

//
// required prog functions
//
void() 		main;						// only for testing

void()		StartFrame;

void() 		PlayerPreThink;
void() 		PlayerPostThink;

void()		ClientKill;
void()		ClientConnect;
void() 		PutClientInServer;		// call after setting the parm1... parms
void()		ClientDisconnect;

void()		SetNewParms;			// called when a client first connects to
									// a server. sets parms so they can be
									// saved off for restarts

void()		SetChangeParms;			// call to set parms for self so they can
									// be saved for a level transition


//================================================
void		end_sys_globals;		// flag for structure dumping
//================================================

/*
==============================================================================

			SOURCE FOR ENTVARS_T C STRUCTURE

==============================================================================
*/

//
// system fields (*** = do not set in prog code, maintained by C code)
//
.float		modelindex;		// *** model index in the precached list
.vector		absmin, absmax;	// *** origin + mins / maxs

.float		ltime;			// local time for entity
.float		movetype;
.float		solid;

.vector		origin;			// ***
.vector		oldorigin;		// ***
.vector		velocity;
.vector		angles;
.vector		avelocity;

.vector		punchangle;		// temp angle adjust from damage or recoil

.string		classname;		// spawn function
.string		model;
.float		frame;
.float		skin;
.float		effects;

.vector		mins, maxs;		// bounding box extents reletive to origin
.vector		size;			// maxs - mins

.void()		touch;
.void()		use;
.void()		think;
.void()		blocked;		// for doors or plats, called when can't push other

.float		nextthink;
.entity		groundentity;

// stats
.float		health;
.float		frags;
.float		weapon;			// one of the IT_SHOTGUN, etc flags
.string		weaponmodel;
.float		weaponframe;
.float		currentammo;
.float		ammo_shells, ammo_nails, ammo_rockets, ammo_cells;

.float		items;			// bit flags

.float		takedamage;
.entity		chain;
.float		deadflag;

.vector		view_ofs;			// add to origin to get eye point


.float		button0;		// fire
.float		button1;		// use
.float		button2;		// jump

.float		impulse;		// weapon changes

.float		fixangle;
.vector		v_angle;		// view / targeting angle for players
.float		idealpitch;		// calculated pitch angle for lookup up slopes


.string		netname;

.entity 	enemy;

.float		flags;

.float		colormap;
.float		team;

.float		max_health;		// players maximum health is stored here

.float		teleport_time;	// don't back up

.float		armortype;		// save this fraction of incoming damage
.float		armorvalue;

.float		waterlevel;		// 0 = not in, 1 = feet, 2 = wast, 3 = eyes
.float		watertype;		// a contents value

.float		ideal_yaw;
.float		yaw_speed;

.entity		aiment;

.entity 	goalentity;		// a movetarget or an enemy

.float		spawnflags;

.string		target;
.string		targetname;

// damage is accumulated through a frame. and sent as one single
// message, so the super shotgun doesn't generate huge messages
.float		dmg_take;
.float		dmg_save;
.entity		dmg_inflictor;

.entity		owner;		// who launched a missile
.vector		movedir;	// mostly for doors, but also used for waterjump

.string		message;		// trigger messages

.float		sounds;		// either a cd track number or sound number

.string		noise, noise1, noise2, noise3;	// contains names of wavs to play

//================================================
void		end_sys_fields;			// flag for structure dumping
//================================================

/*
==============================================================================

				VARS NOT REFERENCED BY C CODE

==============================================================================
*/


//
// constants
//

float	FALSE					= 0;
float 	TRUE					= 1;

// edict.flags
float	FL_FLY					= 1;
float	FL_SWIM					= 2;
float	FL_CLIENT				= 8;	// set for all client edicts
float	FL_INWATER				= 16;	// for enter / leave water splash
float	FL_MONSTER				= 32;
float	FL_GODMODE				= 64;	// player cheat
float	FL_NOTARGET				= 128;	// player cheat
float	FL_ITEM					= 256;	// extra wide size for bonus items
float	FL_ONGROUND				= 512;	// standing on something
float	FL_PARTIALGROUND		= 1024;	// not all corners are valid
float	FL_WATERJUMP			= 2048;	// player jumping out of water
float	FL_JUMPRELEASED			= 4096;	// for jump debouncing

// edict.movetype values
float	MOVETYPE_NONE			= 0;	// never moves
//float	MOVETYPE_ANGLENOCLIP	= 1;
//float	MOVETYPE_ANGLECLIP		= 2;
float	MOVETYPE_WALK			= 3;	// players only
float	MOVETYPE_STEP			= 4;	// discrete, not real time unless fall
float	MOVETYPE_FLY			= 5;
float	MOVETYPE_TOSS			= 6;	// gravity
float	MOVETYPE_PUSH			= 7;	// no clip to world, push and crush
float	MOVETYPE_NOCLIP			= 8;
float	MOVETYPE_FLYMISSILE		= 9;	// fly with extra size against monsters
float	MOVETYPE_BOUNCE			= 10;
float	MOVETYPE_BOUNCEMISSILE	= 11;	// bounce with extra size

// edict.solid values
float	SOLID_NOT				= 0;	// no interaction with other objects
float	SOLID_TRIGGER			= 1;	// touch on edge, but not blocking
float	SOLID_BBOX				= 2;	// touch on edge, block
float	SOLID_SLIDEBOX			= 3;	// touch on edge, but not an onground
float	SOLID_BSP				= 4;	// bsp clip, touch on edge, block

// range values
float	RANGE_MELEE				= 0;
float	RANGE_NEAR				= 1;
float	RANGE_MID				= 2;
float	RANGE_FAR				= 3;

// deadflag values

float	DEAD_NO					= 0;
float	DEAD_DYING				= 1;
float	DEAD_DEAD				= 2;
float	DEAD_RESPAWNABLE		= 3;

// takedamage values

float	DAMAGE_NO				= 0;
float	DAMAGE_YES				= 1;
float	DAMAGE_AIM				= 2;

// items
float	IT_AXE					= 4096;
float	IT_SHOTGUN				= 1;
float	IT_SUPER_SHOTGUN		= 2;
float	IT_NAILGUN				= 4;
float	IT_SUPER_NAILGUN		= 8;
float	IT_GRENADE_LAUNCHER		= 16;
float	IT_ROCKET_LAUNCHER		= 32;
float	IT_LIGHTNING			= 64;
float	IT_EXTRA_WEAPON			= 128;

float	IT_SHELLS				= 256;
float	IT_NAILS				= 512;
float	IT_ROCKETS				= 1024;
float	IT_CELLS				= 2048;

float	IT_ARMOR1				= 8192;
float	IT_ARMOR2				= 16384;
float	IT_ARMOR3				= 32768;
float	IT_SUPERHEALTH			= 65536;

float	IT_KEY1					= 131072;
float	IT_KEY2					= 262144;

float	IT_INVISIBILITY			= 524288;
float	IT_INVULNERABILITY		= 1048576;
float	IT_SUIT					= 2097152;
float	IT_QUAD					= 4194304;

// point content values

float	CONTENT_EMPTY			= -1;
float	CONTENT_SOLID			= -2;
float	CONTENT_WATER			= -3;
float	CONTENT_SLIME			= -4;
float	CONTENT_LAVA			= -5;
float	CONTENT_SKY				= -6;

float	STATE_TOP		= 0;
float	STATE_BOTTOM	= 1;
float	STATE_UP		= 2;
float	STATE_DOWN		= 3;

vector	VEC_ORIGIN = '0 0 0';
vector	VEC_HULL_MIN = '-16 -16 -24';
vector	VEC_HULL_MAX = '16 16 32';

vector	VEC_HULL2_MIN = '-32 -32 -24';
vector	VEC_HULL2_MAX = '32 32 64';

// protocol bytes
float	SVC_TEMPENTITY		= 23;
float	SVC_KILLEDMONSTER	= 27;
float	SVC_FOUNDSECRET		= 28;
float	SVC_INTERMISSION	= 30;
float	SVC_FINALE			= 31;
float	SVC_CDTRACK			= 32;
float	SVC_SELLSCREEN		= 33;


float	TE_SPIKE		= 0;
float	TE_SUPERSPIKE	= 1;
float	TE_GUNSHOT		= 2;
float	TE_EXPLOSION	= 3;
float	TE_TAREXPLOSION	= 4;
float	TE_LIGHTNING1	= 5;
float	TE_LIGHTNING2	= 6;
float	TE_WIZSPIKE		= 7;
float	TE_KNIGHTSPIKE	= 8;
float	TE_LIGHTNING3	= 9;
float	TE_LAVASPLASH	= 10;
float	TE_TELEPORT		= 11;

// sound channels
// channel 0 never willingly overrides
// other channels (1-7) allways override a playing sound on that channel
float	CHAN_AUTO		= 0;
float	CHAN_WEAPON		= 1;
float	CHAN_VOICE		= 2;
float	CHAN_ITEM		= 3;
float	CHAN_BODY		= 4;

float	ATTN_NONE		= 0;
float	ATTN_NORM		= 1;
float	ATTN_IDLE		= 2;
float	ATTN_STATIC		= 3;

// update types

float	UPDATE_GENERAL	= 0;
float	UPDATE_STATIC	= 1;
float	UPDATE_BINARY	= 2;
float	UPDATE_TEMP		= 3;

// entity effects

float	EF_BRIGHTFIELD	= 1;
float	EF_MUZZLEFLASH 	= 2;
float	EF_BRIGHTLIGHT 	= 4;
float	EF_DIMLIGHT 	= 8;


// messages
float	MSG_BROADCAST	= 0;		// unreliable to all
float	MSG_ONE			= 1;		// reliable to one (msg_entity)
float	MSG_ALL			= 2;		// reliable to all
float	MSG_INIT		= 3;		// write to the init string

//================================================

//
// globals
//
float	movedist;
float	gameover;		// set when a rule exits

string	string_null;	// null string, nothing should be held here
float	empty_float;

entity	newmis;			// launch_spike sets this after spawning it

entity	activator;		// the entity that activated a trigger or brush

entity	damage_attacker;	// set by T_Damage
float	framecount;

float		skill;

//================================================

//
// world fields (FIXME: make globals)
//
.string		wad;
.string 	map;
.float		worldtype;	// 0=medieval 1=metal 2=base

//================================================

.string		killtarget;

//
// quakeed fields
//
.float		light_lev;		// not used by game, but parsed by light util
.float		style;


//
// monster ai
//
.void()		th_stand;
.void()		th_walk;
.void()		th_run;
.void()		th_missile;
.void()		th_melee;
.void(entity attacker, float damage)		th_pain;
.void()		th_die;

.entity		oldenemy;		// mad at this player before taking damage

.float		speed;

.float	lefty;

.float	search_time;
.float	attack_state;

float	AS_STRAIGHT		= 1;
float	AS_SLIDING		= 2;
float	AS_MELEE		= 3;
float	AS_MISSILE		= 4;

//
// player only fields
//
.float		walkframe;

.float 		attack_finished;
.float		pain_finished;

.float		invincible_finished;
.float		invisible_finished;
.float		super_damage_finished;
.float		radsuit_finished;

.float		invincible_time, invincible_sound;
.float		invisible_time, invisible_sound;
.float		super_time, super_sound;
.float		rad_time;
.float		fly_sound;

.float		axhitme;

.float		show_hostile;	// set to time+0.2 whenever a client fires a
							// weapon or takes damage.  Used to alert
							// monsters that otherwise would let the player go
.float		jump_flag;		// player jump flag
.float		swim_flag;		// player swimming sound flag
.float		air_finished;	// when time &gt; air_finished, start drowning
.float		bubble_count;	// keeps track of the number of bubbles
.string		deathtype;		// keeps track of how the player died

//
// object stuff
//
.string		mdl;
.vector		mangle;			// angle at start

.vector		oldorigin;		// only used by secret door

.float		t_length, t_width;


//
// doors, etc
//
.vector		dest, dest1, dest2;
.float		wait;			// time from firing to restarting
.float		delay;			// time from activation to firing
.entity		trigger_field;	// door's trigger entity
.string		noise4;

//
// monsters
//
.float 		pausetime;
.entity 	movetarget;


//
// doors
//
.float		aflag;
.float		dmg;			// damage done by door when hit
	
//
// misc
//
.float		cnt; 			// misc flag
	
//
// subs
//
.void()		think1;
.vector		finaldest, finalangle;

//
// triggers
//
.float		count;			// for counting triggers


//
// plats / doors / buttons
//
.float		lip;
.float		state;
.vector		pos1, pos2;		// top and bottom positions
.float		height;

//
// sounds
//
.float		waitmin, waitmax;
.float		distance;
.float		volume;




//===========================================================================
	

//
// builtin functions
//

void(vector ang)	makevectors		= #1;		// sets v_forward, etc globals
void(entity e, vector o) setorigin	= #2;
void(entity e, string m) setmodel	= #3;		// set movetype and solid first
void(entity e, vector min, vector max) setsize = #4;
// #5 was removed
void() break						= #6;
float() random						= #7;		// returns 0 - 1
void(entity e, float chan, string samp, float vol, float atten) sound = #8;
vector(vector v) normalize			= #9;
void(string e) error				= #10;
void(string e) objerror				= #11;
float(vector v) vlen				= #12;
float(vector v) vectoyaw			= #13;
entity() spawn						= #14;
void(entity e) remove				= #15;

// sets trace_* globals
// nomonsters can be:
// An entity will also be ignored for testing if forent == test,
// forent-&gt;owner == test, or test-&gt;owner == forent
// a forent of world is ignored
void(vector v1, vector v2, float nomonsters, entity forent) traceline = #16;	

entity() checkclient				= #17;	// returns a client to look for
entity(entity start, .string fld, string match) find = #18;
string(string s) precache_sound		= #19;
string(string s) precache_model		= #20;
void(entity client, string s)stuffcmd = #21;
entity(vector org, float rad) findradius = #22;
void(string s) bprint				= #23;
void(entity client, string s) sprint = #24;
void(string s) dprint				= #25;
string(float f) ftos				= #26;
string(vector v) vtos				= #27;
void() coredump						= #28;		// prints all edicts
void() traceon						= #29;		// turns statment trace on
void() traceoff						= #30;
void(entity e) eprint				= #31;		// prints an entire edict
float(float yaw, float dist) walkmove	= #32;	// returns TRUE or FALSE
// #33 was removed
float(float yaw, float dist) droptofloor= #34;	// TRUE if landed on floor
void(float style, string value) lightstyle = #35;
float(float v) rint					= #36;		// round to nearest int
float(float v) floor				= #37;		// largest integer &lt;= v
float(float v) ceil					= #38;		// smallest integer &gt;= v
// #39 was removed
float(entity e) checkbottom			= #40;		// true if self is on ground
float(vector v) pointcontents		= #41;		// returns a CONTENT_*
// #42 was removed
float(float f) fabs = #43;
vector(entity e, float speed) aim = #44;		// returns the shooting vector
float(string s) cvar = #45;						// return cvar.value
void(string s) localcmd = #46;					// put string into local que
entity(entity e) nextent = #47;					// for looping through all ents
void(vector o, vector d, float color, float count) particle = #48;// start a particle effect
void() ChangeYaw = #49;						// turn towards self.ideal_yaw
											// at self.yaw_speed
// #50 was removed
vector(vector v) vectoangles			= #51;

//
// direct client message generation
//
void(float to, float f) WriteByte		= #52;
void(float to, float f) WriteChar		= #53;
void(float to, float f) WriteShort		= #54;
void(float to, float f) WriteLong		= #55;
void(float to, float f) WriteCoord		= #56;
void(float to, float f) WriteAngle		= #57;
void(float to, string s) WriteString	= #58;
void(float to, entity s) WriteEntity	= #59;

//
// broadcast client message generation
//

// void(float f) bWriteByte		= #59;
// void(float f) bWriteChar		= #60;
// void(float f) bWriteShort		= #61;
// void(float f) bWriteLong		= #62;
// void(float f) bWriteCoord		= #63;
// void(float f) bWriteAngle		= #64;
// void(string s) bWriteString	= #65;
// void(entity e) bWriteEntity = #66;

void(float step) movetogoal				= #67;

string(string s) precache_file		= #68;	// no effect except for -copy
void(entity e) makestatic		= #69;
void(string s) changelevel = #70;

//#71 was removed

void(string var, string val) cvar_set = #72;	// sets cvar.value

void(entity client, string s) centerprint = #73;	// sprint, but in middle

void(vector pos, string samp, float vol, float atten) ambientsound = #74;

string(string s) precache_model2	= #75;		// registered version only
string(string s) precache_sound2	= #76;		// registered version only
string(string s) precache_file2		= #77;		// registered version only

void(entity e) setspawnparms		= #78;		// set parm1... to the
												// values at level start
												// for coop respawn

//============================================================================

//
// subs.qc
//
void(vector tdest, float tspeed, void() func) SUB_CalcMove;
void(entity ent, vector tdest, float tspeed, void() func) SUB_CalcMoveEnt;
void(vector destangle, float tspeed, void() func) SUB_CalcAngleMove;
void()  SUB_CalcMoveDone;
void() SUB_CalcAngleMoveDone;
void() SUB_Null;
void() SUB_UseTargets;
void() SUB_Remove;

//
//	combat.qc
//
void(entity targ, entity inflictor, entity attacker, float damage) T_Damage;


float (entity e, float healamount, float ignore) T_Heal; // health function

float(entity targ, entity inflictor) CanDamage;
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>mf22by7n51hmw406s2n6vmkc7jjegmj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>demon.qc</title>
    <ns>0</ns>
    <id>838</id>
    <revision>
      <id>2455</id>
      <timestamp>2013-03-29T10:25:12Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for the [[Fiend]] [[Monsters | monster]].   &lt;pre&gt; /* ==============================================================================  DE...&quot;</comment>
      <text xml:space="preserve" bytes="10013">This [[Quake-C]] file contains the code for the [[Fiend]] [[Monsters | monster]].


&lt;pre&gt;
/*
==============================================================================

DEMON

==============================================================================
*/

$cd id1/models/demon3
$scale	0.8
$origin 0 0 24
$base base
$skin base

$frame stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8 stand9
$frame stand10 stand11 stand12 stand13

$frame walk1 walk2 walk3 walk4 walk5 walk6 walk7 walk8

$frame run1 run2 run3 run4 run5 run6

$frame leap1 leap2 leap3 leap4 leap5 leap6 leap7 leap8 leap9 leap10
$frame leap11 leap12

$frame pain1 pain2 pain3 pain4 pain5 pain6

$frame death1 death2 death3 death4 death5 death6 death7 death8 death9

$frame attacka1 attacka2 attacka3 attacka4 attacka5 attacka6 attacka7 attacka8
$frame attacka9 attacka10 attacka11 attacka12 attacka13 attacka14 attacka15

//============================================================================

void()	Demon_JumpTouch;

void()	demon1_stand1	=[	$stand1,	demon1_stand2	] {ai_stand();};
void()	demon1_stand2	=[	$stand2,	demon1_stand3	] {ai_stand();};
void()	demon1_stand3	=[	$stand3,	demon1_stand4	] {ai_stand();};
void()	demon1_stand4	=[	$stand4,	demon1_stand5	] {ai_stand();};
void()	demon1_stand5	=[	$stand5,	demon1_stand6	] {ai_stand();};
void()	demon1_stand6	=[	$stand6,	demon1_stand7	] {ai_stand();};
void()	demon1_stand7	=[	$stand7,	demon1_stand8	] {ai_stand();};
void()	demon1_stand8	=[	$stand8,	demon1_stand9	] {ai_stand();};
void()	demon1_stand9	=[	$stand9,	demon1_stand10	] {ai_stand();};
void()	demon1_stand10	=[	$stand10,	demon1_stand11	] {ai_stand();};
void()	demon1_stand11	=[	$stand11,	demon1_stand12	] {ai_stand();};
void()	demon1_stand12	=[	$stand12,	demon1_stand13	] {ai_stand();};
void()	demon1_stand13	=[	$stand13,	demon1_stand1	] {ai_stand();};

void()	demon1_walk1	=[	$walk1,		demon1_walk2	] {
if (random() &lt; 0.2)
    sound (self, CHAN_VOICE, &quot;demon/idle1.wav&quot;, 1, ATTN_IDLE);
ai_walk(8);
};
void()	demon1_walk2	=[	$walk2,		demon1_walk3	] {ai_walk(6);};
void()	demon1_walk3	=[	$walk3,		demon1_walk4	] {ai_walk(6);};
void()	demon1_walk4	=[	$walk4,		demon1_walk5	] {ai_walk(7);};
void()	demon1_walk5	=[	$walk5,		demon1_walk6	] {ai_walk(4);};
void()	demon1_walk6	=[	$walk6,		demon1_walk7	] {ai_walk(6);};
void()	demon1_walk7	=[	$walk7,		demon1_walk8	] {ai_walk(10);};
void()	demon1_walk8	=[	$walk8,		demon1_walk1	] {ai_walk(10);};

void()	demon1_run1	=[	$run1,		demon1_run2	] {
if (random() &lt; 0.2)
    sound (self, CHAN_VOICE, &quot;demon/idle1.wav&quot;, 1, ATTN_IDLE);
ai_run(20);};
void()	demon1_run2	=[	$run2,		demon1_run3	] {ai_run(15);};
void()	demon1_run3	=[	$run3,		demon1_run4	] {ai_run(36);};
void()	demon1_run4	=[	$run4,		demon1_run5	] {ai_run(20);};
void()	demon1_run5	=[	$run5,		demon1_run6	] {ai_run(15);};
void()	demon1_run6	=[	$run6,		demon1_run1	] {ai_run(36);};

void()	demon1_jump1	=[	$leap1,		demon1_jump2	] {ai_face();};
void()	demon1_jump2	=[	$leap2,		demon1_jump3	] {ai_face();};
void()	demon1_jump3	=[	$leap3,		demon1_jump4	] {ai_face();};
void()	demon1_jump4	=[	$leap4,		demon1_jump5	]
{
	ai_face();
	
	self.touch = Demon_JumpTouch;
	makevectors (self.angles);
	self.origin_z = self.origin_z + 1;
	self.velocity = v_forward * 600 + '0 0 250';
	if (self.flags &amp; FL_ONGROUND)
		self.flags = self.flags - FL_ONGROUND;
};
void()	demon1_jump5	=[	$leap5,		demon1_jump6	] {};
void()	demon1_jump6	=[	$leap6,		demon1_jump7	] {};
void()	demon1_jump7	=[	$leap7,		demon1_jump8	] {};
void()	demon1_jump8	=[ 	$leap8,		demon1_jump9	] {};
void()	demon1_jump9	=[ 	$leap9,		demon1_jump10	] {};
void()	demon1_jump10	=[ 	$leap10,	demon1_jump1	] {
self.nextthink = time + 3;
// if three seconds pass, assume demon is stuck and jump again
};

void()	demon1_jump11	=[ 	$leap11,	demon1_jump12	] {};
void()	demon1_jump12	=[ 	$leap12,	demon1_run1	] {};


void()	demon1_atta1	=[	$attacka1,		demon1_atta2	] {ai_charge(4);};
void()	demon1_atta2	=[	$attacka2,		demon1_atta3	] {ai_charge(0);};
void()	demon1_atta3	=[	$attacka3,		demon1_atta4	] {ai_charge(0);};
void()	demon1_atta4	=[	$attacka4,		demon1_atta5	] {ai_charge(1);};
void()	demon1_atta5	=[	$attacka5,		demon1_atta6	] {ai_charge(2); Demon_Melee(200);};
void()	demon1_atta6	=[	$attacka6,		demon1_atta7	] {ai_charge(1);};
void()	demon1_atta7	=[	$attacka7,		demon1_atta8	] {ai_charge(6);};
void()	demon1_atta8	=[	$attacka8,		demon1_atta9	] {ai_charge(8);};
void()	demon1_atta9	=[	$attacka9,		demon1_atta10] {ai_charge(4);};
void()	demon1_atta10	=[	$attacka10,		demon1_atta11] {ai_charge(2);};
void()	demon1_atta11	=[	$attacka11,		demon1_atta12] {Demon_Melee(-200);};
void()	demon1_atta12	=[	$attacka12,		demon1_atta13] {ai_charge(5);};
void()	demon1_atta13	=[	$attacka13,		demon1_atta14] {ai_charge(8);};
void()	demon1_atta14	=[	$attacka14,		demon1_atta15] {ai_charge(4);};
void()	demon1_atta15	=[	$attacka15,		demon1_run1] {ai_charge(4);};

void()	demon1_pain1	=[	$pain1,		demon1_pain2	] {};
void()	demon1_pain2	=[	$pain2,		demon1_pain3	] {};
void()	demon1_pain3	=[	$pain3,		demon1_pain4	] {};
void()	demon1_pain4	=[	$pain4,		demon1_pain5	] {};
void()	demon1_pain5	=[	$pain5,		demon1_pain6	] {};
void()	demon1_pain6	=[	$pain6,		demon1_run1	] {};

void(entity attacker, float damage)	demon1_pain =
{
	if (self.touch == Demon_JumpTouch)
		return;

	if (self.pain_finished &gt; time)
		return;

	self.pain_finished = time + 1;
    sound (self, CHAN_VOICE, &quot;demon/dpain1.wav&quot;, 1, ATTN_NORM);

	if (random()*200 &gt; damage)
		return;		// didn't flinch
		
	demon1_pain1 ();
};

void()	demon1_die1		=[	$death1,		demon1_die2	] {
sound (self, CHAN_VOICE, &quot;demon/ddeath.wav&quot;, 1, ATTN_NORM);};
void()	demon1_die2		=[	$death2,		demon1_die3	] {};
void()	demon1_die3		=[	$death3,		demon1_die4	] {};
void()	demon1_die4		=[	$death4,		demon1_die5	] {};
void()	demon1_die5		=[	$death5,		demon1_die6	] {};
void()	demon1_die6		=[	$death6,		demon1_die7	]
{self.solid = SOLID_NOT;};
void()	demon1_die7		=[	$death7,		demon1_die8	] {};
void()	demon1_die8		=[	$death8,		demon1_die9	] {};
void()	demon1_die9		=[	$death9,		demon1_die9 ] {};

void() demon_die =
{
// check for gib
	if (self.health &lt; -80)
	{
		sound (self, CHAN_VOICE, &quot;player/udeath.wav&quot;, 1, ATTN_NORM);
		ThrowHead (&quot;progs/h_demon.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib1.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib1.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib1.mdl&quot;, self.health);
		return;
	}

// regular death
	demon1_die1 ();
};


void() Demon_MeleeAttack =
{
	demon1_atta1 ();
};


/*QUAKED monster_demon1 (1 0 0) (-32 -32 -24) (32 32 64) Ambush

*/
void() monster_demon1 =
{
	if (deathmatch)
	{
		remove(self);
		return;
	}
	precache_model (&quot;progs/demon.mdl&quot;);
	precache_model (&quot;progs/h_demon.mdl&quot;);

	precache_sound (&quot;demon/ddeath.wav&quot;);
	precache_sound (&quot;demon/dhit2.wav&quot;);
	precache_sound (&quot;demon/djump.wav&quot;);
	precache_sound (&quot;demon/dpain1.wav&quot;);
	precache_sound (&quot;demon/idle1.wav&quot;);
	precache_sound (&quot;demon/sight2.wav&quot;);

	self.solid = SOLID_SLIDEBOX;
	self.movetype = MOVETYPE_STEP;

	setmodel (self, &quot;progs/demon.mdl&quot;);

	setsize (self, VEC_HULL2_MIN, VEC_HULL2_MAX);
	self.health = 300;

	self.th_stand = demon1_stand1;
	self.th_walk = demon1_walk1;
	self.th_run = demon1_run1;
	self.th_die = demon_die;
	self.th_melee = Demon_MeleeAttack;		// one of two attacks
	self.th_missile = demon1_jump1;			// jump attack
	self.th_pain = demon1_pain;
		
	walkmonster_start();
};


/*
==============================================================================

DEMON

==============================================================================
*/

/*
==============
CheckDemonMelee

Returns TRUE if a melee attack would hit right now
==============
*/
float()	CheckDemonMelee =
{
	if (enemy_range == RANGE_MELEE)
	{	// FIXME: check canreach
		self.attack_state = AS_MELEE;
		return TRUE;
	}
	return FALSE;
};

/*
==============
CheckDemonJump

==============
*/
float()	CheckDemonJump =
{
	local	vector	dist;
	local	float	d;

	if (self.origin_z + self.mins_z &gt; self.enemy.origin_z + self.enemy.mins_z
	+ 0.75 * self.enemy.size_z)
		return FALSE;
		
	if (self.origin_z + self.maxs_z &lt; self.enemy.origin_z + self.enemy.mins_z
	+ 0.25 * self.enemy.size_z)
		return FALSE;
		
	dist = self.enemy.origin - self.origin;
	dist_z = 0;
	
	d = vlen(dist);
	
	if (d &lt; 100)
		return FALSE;
		
	if (d &gt; 200)
	{
		if (random() &lt; 0.9)
			return FALSE;
	}
		
	return TRUE;
};

float()	DemonCheckAttack =
{
	local	vector	vec;
	
// if close enough for slashing, go for it
	if (CheckDemonMelee ())
	{
		self.attack_state = AS_MELEE;
		return TRUE;
	}
	
	if (CheckDemonJump ())
	{
		self.attack_state = AS_MISSILE;
        sound (self, CHAN_VOICE, &quot;demon/djump.wav&quot;, 1, ATTN_NORM);
		return TRUE;
	}
	
	return FALSE;
};


//===========================================================================

void(float side)	Demon_Melee =
{
	local	float	ldmg;
	local vector	delta;
	
	ai_face ();
	walkmove (self.ideal_yaw, 12);	// allow a little closing

	delta = self.enemy.origin - self.origin;

	if (vlen(delta) &gt; 100)
		return;
	if (!CanDamage (self.enemy, self))
		return;
		
    sound (self, CHAN_WEAPON, &quot;demon/dhit2.wav&quot;, 1, ATTN_NORM);
	ldmg = 10 + 5*random();
	T_Damage (self.enemy, self, self, ldmg);	

	makevectors (self.angles);
	SpawnMeatSpray (self.origin + v_forward*16, side * v_right);
};


void()	Demon_JumpTouch =
{
	local	float	ldmg;

	if (self.health &lt;= 0)
		return;
		
	if (other.takedamage)
	{
		if ( vlen(self.velocity) &gt; 400 )
		{
			ldmg = 40 + 10*random();
			T_Damage (other, self, self, ldmg);	
		}
	}

	if (!checkbottom(self))
	{
		if (self.flags &amp; FL_ONGROUND)
		{	// jump randomly to not get hung up
//dprint (&quot;popjump\n&quot;);
	self.touch = SUB_Null;
	self.think = demon1_jump1;
	self.nextthink = time + 0.1;

//			self.velocity_x = (random() - 0.5) * 600;
//			self.velocity_y = (random() - 0.5) * 600;
//			self.velocity_z = 200;
//			self.flags = self.flags - FL_ONGROUND;
		}
		return;	// not on ground yet
	}

	self.touch = SUB_Null;
	self.think = demon1_jump11;
	self.nextthink = time + 0.1;
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>hv2e6759be29h5jqjrgxmj3720xbj8a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>developer</title>
    <ns>0</ns>
    <id>127</id>
    <revision>
      <id>202</id>
      <timestamp>2007-10-31T00:46:24Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=developer |default-value=0 |saved-to-config=no }} If this toggle ( 0 | 1 ) is enabled the game will output a lot of developer mode...</comment>
      <text xml:space="preserve" bytes="458">{{lowercase-underscores}}{{Infobox Console variable
|name=developer
|default-value=0
|saved-to-config=no
}}
If this toggle ( 0 | 1 ) is enabled the game will output a lot of developer mode information and internal game information. This mode is used by developers to track the progress of the game and to find any bugs.

This cvar enables many developer prints included in the engine code or added by the [[QuakeC]] builtin [[dprint]].

{{Console variables}}</text>
      <sha1>d7zv8mb9pbthcakiuumygeelymfc063</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2518</id>
      <parentid>202</parentid>
      <timestamp>2013-03-29T14:22:00Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Developer]] to [[developer]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="458">{{lowercase-underscores}}{{Infobox Console variable
|name=developer
|default-value=0
|saved-to-config=no
}}
If this toggle ( 0 | 1 ) is enabled the game will output a lot of developer mode information and internal game information. This mode is used by developers to track the progress of the game and to find any bugs.

This cvar enables many developer prints included in the engine code or added by the [[QuakeC]] builtin [[dprint]].

{{Console variables}}</text>
      <sha1>d7zv8mb9pbthcakiuumygeelymfc063</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>dog.qc</title>
    <ns>0</ns>
    <id>839</id>
    <revision>
      <id>2456</id>
      <timestamp>2013-03-29T10:27:49Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for the [[Rottweiler]] [[Monsters | monster]].   &lt;pre&gt; /* =============================================================================...&quot;</comment>
      <text xml:space="preserve" bytes="9657">This [[Quake-C]] file contains the code for the [[Rottweiler]] [[Monsters | monster]].


&lt;pre&gt;
/*
==============================================================================

DOG

==============================================================================
*/
$cd id1/models/dog
$origin 0 0 24
$base base
$skin skin

$frame attack1 attack2 attack3 attack4 attack5 attack6 attack7 attack8

$frame death1 death2 death3 death4 death5 death6 death7 death8 death9

$frame deathb1 deathb2 deathb3 deathb4 deathb5 deathb6 deathb7 deathb8
$frame deathb9

$frame pain1 pain2 pain3 pain4 pain5 pain6

$frame painb1 painb2 painb3 painb4 painb5 painb6 painb7 painb8 painb9 painb10
$frame painb11 painb12 painb13 painb14 painb15 painb16

$frame run1 run2 run3 run4 run5 run6 run7 run8 run9 run10 run11 run12

$frame leap1 leap2 leap3 leap4 leap5 leap6 leap7 leap8 leap9

$frame stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8 stand9

$frame walk1 walk2 walk3 walk4 walk5 walk6 walk7 walk8


void() dog_leap1;
void() dog_run1;

/*
================
dog_bite

================
*/
void() dog_bite =
{
local vector	delta;
local float 	ldmg;

	if (!self.enemy)
		return;

	ai_charge(10);

	if (!CanDamage (self.enemy, self))
		return;

	delta = self.enemy.origin - self.origin;

	if (vlen(delta) &gt; 100)
		return;
		
	ldmg = (random() + random() + random()) * 8;
	T_Damage (self.enemy, self, self, ldmg);
};

void()	Dog_JumpTouch =
{
	local	float	ldmg;

	if (self.health &lt;= 0)
		return;
		
	if (other.takedamage)
	{
		if ( vlen(self.velocity) &gt; 300 )
		{
			ldmg = 10 + 10*random();
			T_Damage (other, self, self, ldmg);	
		}
	}

	if (!checkbottom(self))
	{
		if (self.flags &amp; FL_ONGROUND)
		{	// jump randomly to not get hung up
//dprint (&quot;popjump\n&quot;);
	self.touch = SUB_Null;
	self.think = dog_leap1;
	self.nextthink = time + 0.1;

//			self.velocity_x = (random() - 0.5) * 600;
//			self.velocity_y = (random() - 0.5) * 600;
//			self.velocity_z = 200;
//			self.flags = self.flags - FL_ONGROUND;
		}
		return;	// not on ground yet
	}

	self.touch = SUB_Null;
	self.think = dog_run1;
	self.nextthink = time + 0.1;
};


void() dog_stand1	=[	$stand1,	dog_stand2	] {ai_stand();};
void() dog_stand2	=[	$stand2,	dog_stand3	] {ai_stand();};
void() dog_stand3	=[	$stand3,	dog_stand4	] {ai_stand();};
void() dog_stand4	=[	$stand4,	dog_stand5	] {ai_stand();};
void() dog_stand5	=[	$stand5,	dog_stand6	] {ai_stand();};
void() dog_stand6	=[	$stand6,	dog_stand7	] {ai_stand();};
void() dog_stand7	=[	$stand7,	dog_stand8	] {ai_stand();};
void() dog_stand8	=[	$stand8,	dog_stand9	] {ai_stand();};
void() dog_stand9	=[	$stand9,	dog_stand1	] {ai_stand();};

void() dog_walk1	=[	$walk1 ,	dog_walk2	] {
if (random() &lt; 0.2)
	sound (self, CHAN_VOICE, &quot;dog/idle.wav&quot;, 1, ATTN_IDLE);
ai_walk(8);};
void() dog_walk2	=[	$walk2 ,	dog_walk3	] {ai_walk(8);};
void() dog_walk3	=[	$walk3 ,	dog_walk4	] {ai_walk(8);};
void() dog_walk4	=[	$walk4 ,	dog_walk5	] {ai_walk(8);};
void() dog_walk5	=[	$walk5 ,	dog_walk6	] {ai_walk(8);};
void() dog_walk6	=[	$walk6 ,	dog_walk7	] {ai_walk(8);};
void() dog_walk7	=[	$walk7 ,	dog_walk8	] {ai_walk(8);};
void() dog_walk8	=[	$walk8 ,	dog_walk1	] {ai_walk(8);};

void() dog_run1		=[	$run1  ,	dog_run2	] {
if (random() &lt; 0.2)
	sound (self, CHAN_VOICE, &quot;dog/idle.wav&quot;, 1, ATTN_IDLE);
ai_run(16);};
void() dog_run2		=[	$run2  ,	dog_run3	] {ai_run(32);};
void() dog_run3		=[	$run3  ,	dog_run4	] {ai_run(32);};
void() dog_run4		=[	$run4  ,	dog_run5	] {ai_run(20);};
void() dog_run5		=[	$run5  ,	dog_run6	] {ai_run(64);};
void() dog_run6		=[	$run6  ,	dog_run7	] {ai_run(32);};
void() dog_run7		=[	$run7  ,	dog_run8	] {ai_run(16);};
void() dog_run8		=[	$run8  ,	dog_run9	] {ai_run(32);};
void() dog_run9		=[	$run9  ,	dog_run10	] {ai_run(32);};
void() dog_run10	=[	$run10  ,	dog_run11	] {ai_run(20);};
void() dog_run11	=[	$run11  ,	dog_run12	] {ai_run(64);};
void() dog_run12	=[	$run12  ,	dog_run1	] {ai_run(32);};

void() dog_atta1	=[	$attack1,	dog_atta2	] {ai_charge(10);};
void() dog_atta2	=[	$attack2,	dog_atta3	] {ai_charge(10);};
void() dog_atta3	=[	$attack3,	dog_atta4	] {ai_charge(10);};
void() dog_atta4	=[	$attack4,	dog_atta5	] {
sound (self, CHAN_VOICE, &quot;dog/dattack1.wav&quot;, 1, ATTN_NORM);
dog_bite();};
void() dog_atta5	=[	$attack5,	dog_atta6	] {ai_charge(10);};
void() dog_atta6	=[	$attack6,	dog_atta7	] {ai_charge(10);};
void() dog_atta7	=[	$attack7,	dog_atta8	] {ai_charge(10);};
void() dog_atta8	=[	$attack8,	dog_run1	] {ai_charge(10);};

void() dog_leap1	=[	$leap1,		dog_leap2	] {ai_face();};
void() dog_leap2	=[	$leap2,		dog_leap3	]
{
	ai_face();
	
	self.touch = Dog_JumpTouch;
	makevectors (self.angles);
	self.origin_z = self.origin_z + 1;
	self.velocity = v_forward * 300 + '0 0 200';
	if (self.flags &amp; FL_ONGROUND)
		self.flags = self.flags - FL_ONGROUND;
};

void() dog_leap3	=[	$leap3,		dog_leap4	] {};
void() dog_leap4	=[	$leap4,		dog_leap5	] {};
void() dog_leap5	=[	$leap5,		dog_leap6	] {};
void() dog_leap6	=[	$leap6,		dog_leap7	] {};
void() dog_leap7	=[	$leap7,		dog_leap8	] {};
void() dog_leap8	=[	$leap8,		dog_leap9	] {};
void() dog_leap9	=[	$leap9,		dog_leap9	] {};

void() dog_pain1	=[	$pain1 ,	dog_pain2	] {};
void() dog_pain2	=[	$pain2 ,	dog_pain3	] {};
void() dog_pain3	=[	$pain3 ,	dog_pain4	] {};
void() dog_pain4	=[	$pain4 ,	dog_pain5	] {};
void() dog_pain5	=[	$pain5 ,	dog_pain6	] {};
void() dog_pain6	=[	$pain6 ,	dog_run1	] {};

void() dog_painb1	=[	$painb1 ,	dog_painb2	] {};
void() dog_painb2	=[	$painb2 ,	dog_painb3	] {};
void() dog_painb3	=[	$painb3 ,	dog_painb4	] {ai_pain(4);};
void() dog_painb4	=[	$painb4 ,	dog_painb5	] {ai_pain(12);};
void() dog_painb5	=[	$painb5 ,	dog_painb6	] {ai_pain(12);};
void() dog_painb6	=[	$painb6 ,	dog_painb7	] {ai_pain(2);};
void() dog_painb7	=[	$painb7 ,	dog_painb8	] {};
void() dog_painb8	=[	$painb8 ,	dog_painb9	] {ai_pain(4);};
void() dog_painb9	=[	$painb9 ,	dog_painb10	] {};
void() dog_painb10	=[	$painb10 ,	dog_painb11	] {ai_pain(10);};
void() dog_painb11	=[	$painb11 ,	dog_painb12	] {};
void() dog_painb12	=[	$painb12 ,	dog_painb13	] {};
void() dog_painb13	=[	$painb13 ,	dog_painb14	] {};
void() dog_painb14	=[	$painb14 ,	dog_painb15	] {};
void() dog_painb15	=[	$painb15 ,	dog_painb16	] {};
void() dog_painb16	=[	$painb16 ,	dog_run1	] {};

void() dog_pain =
{
	sound (self, CHAN_VOICE, &quot;dog/dpain1.wav&quot;, 1, ATTN_NORM);

	if (random() &gt; 0.5)
		dog_pain1 ();
	else
		dog_painb1 ();
};

void() dog_die1		=[	$death1,	dog_die2	] {};
void() dog_die2		=[	$death2,	dog_die3	] {};
void() dog_die3		=[	$death3,	dog_die4	] {};
void() dog_die4		=[	$death4,	dog_die5	] {};
void() dog_die5		=[	$death5,	dog_die6	] {};
void() dog_die6		=[	$death6,	dog_die7	] {};
void() dog_die7		=[	$death7,	dog_die8	] {};
void() dog_die8		=[	$death8,	dog_die9	] {};
void() dog_die9		=[	$death9,	dog_die9	] {};

void() dog_dieb1		=[	$deathb1,	dog_dieb2	] {};
void() dog_dieb2		=[	$deathb2,	dog_dieb3	] {};
void() dog_dieb3		=[	$deathb3,	dog_dieb4	] {};
void() dog_dieb4		=[	$deathb4,	dog_dieb5	] {};
void() dog_dieb5		=[	$deathb5,	dog_dieb6	] {};
void() dog_dieb6		=[	$deathb6,	dog_dieb7	] {};
void() dog_dieb7		=[	$deathb7,	dog_dieb8	] {};
void() dog_dieb8		=[	$deathb8,	dog_dieb9	] {};
void() dog_dieb9		=[	$deathb9,	dog_dieb9	] {};


void() dog_die =
{
// check for gib
	if (self.health &lt; -35)
	{
		sound (self, CHAN_VOICE, &quot;player/udeath.wav&quot;, 1, ATTN_NORM);
		ThrowGib (&quot;progs/gib3.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib3.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib3.mdl&quot;, self.health);
		ThrowHead (&quot;progs/h_dog.mdl&quot;, self.health);
		return;
	}

// regular death
	sound (self, CHAN_VOICE, &quot;dog/ddeath.wav&quot;, 1, ATTN_NORM);
	self.solid = SOLID_NOT;

	if (random() &gt; 0.5)
		dog_die1 ();
	else
		dog_dieb1 ();
};

//============================================================================

/*
==============
CheckDogMelee

Returns TRUE if a melee attack would hit right now
==============
*/
float()	CheckDogMelee =
{
	if (enemy_range == RANGE_MELEE)
	{	// FIXME: check canreach
		self.attack_state = AS_MELEE;
		return TRUE;
	}
	return FALSE;
};

/*
==============
CheckDogJump

==============
*/
float()	CheckDogJump =
{
	local	vector	dist;
	local	float	d;

	if (self.origin_z + self.mins_z &gt; self.enemy.origin_z + self.enemy.mins_z
	+ 0.75 * self.enemy.size_z)
		return FALSE;
		
	if (self.origin_z + self.maxs_z &lt; self.enemy.origin_z + self.enemy.mins_z
	+ 0.25 * self.enemy.size_z)
		return FALSE;
		
	dist = self.enemy.origin - self.origin;
	dist_z = 0;
	
	d = vlen(dist);
	
	if (d &lt; 80)
		return FALSE;
		
	if (d &gt; 150)
		return FALSE;
		
	return TRUE;
};

float()	DogCheckAttack =
{
	local	vector	vec;
	
// if close enough for slashing, go for it
	if (CheckDogMelee ())
	{
		self.attack_state = AS_MELEE;
		return TRUE;
	}
	
	if (CheckDogJump ())
	{
		self.attack_state = AS_MISSILE;
		return TRUE;
	}
	
	return FALSE;
};


//===========================================================================

/*QUAKED monster_dog (1 0 0) (-32 -32 -24) (32 32 40) Ambush

*/
void() monster_dog =
{
	if (deathmatch)
	{
		remove(self);
		return;
	}
	precache_model (&quot;progs/h_dog.mdl&quot;);
	precache_model (&quot;progs/dog.mdl&quot;);

	precache_sound (&quot;dog/dattack1.wav&quot;);
	precache_sound (&quot;dog/ddeath.wav&quot;);
	precache_sound (&quot;dog/dpain1.wav&quot;);
	precache_sound (&quot;dog/dsight.wav&quot;);
	precache_sound (&quot;dog/idle.wav&quot;);

	self.solid = SOLID_SLIDEBOX;
	self.movetype = MOVETYPE_STEP;

	setmodel (self, &quot;progs/dog.mdl&quot;);

	setsize (self, '-32 -32 -24', '32 32 40');
	self.health = 25;

	self.th_stand = dog_stand1;
	self.th_walk = dog_walk1;
	self.th_run = dog_run1;
	self.th_pain = dog_pain;
	self.th_die = dog_die;
	self.th_melee = dog_atta1;
	self.th_missile = dog_leap1;

	walkmonster_start();
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>3imtb77hfp982uzazs1hz8qah0k4dtv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>doors.qc</title>
    <ns>0</ns>
    <id>840</id>
    <revision>
      <id>2457</id>
      <timestamp>2013-03-29T10:30:45Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for [[func_door | doors]] and [[func_door_secret | secret doors]].   &lt;pre&gt;  float DOOR_START_OPEN = 1; float DOOR_DONT_LINK = 4; float ...&quot;</comment>
      <text xml:space="preserve" bytes="17163">This [[Quake-C]] file contains the code for [[func_door | doors]] and [[func_door_secret | secret doors]].


&lt;pre&gt;

float DOOR_START_OPEN = 1;
float DOOR_DONT_LINK = 4;
float DOOR_GOLD_KEY = 8;
float DOOR_SILVER_KEY = 16;
float DOOR_TOGGLE = 32;

/*

Doors are similar to buttons, but can spawn a fat trigger field around them
to open without a touch, and they link together to form simultanious
double/quad doors.
 
Door.owner is the master door.  If there is only one door, it points to itself.
If multiple doors, all will point to a single one.

Door.enemy chains from the master door through all doors linked in the chain.

*/

/*
=============================================================================

THINK FUNCTIONS

=============================================================================
*/

void() door_go_down;
void() door_go_up;

void() door_blocked =
{
	T_Damage (other, self, self, self.dmg);
	
// if a door has a negative wait, it would never come back if blocked,
// so let it just squash the object to death real fast
	if (self.wait &gt;= 0)
	{
		if (self.state == STATE_DOWN)
			door_go_up ();
		else
			door_go_down ();
	}
};


void() door_hit_top =
{
	sound (self, CHAN_VOICE, self.noise1, 1, ATTN_NORM);
	self.state = STATE_TOP;
	if (self.spawnflags &amp; DOOR_TOGGLE)
		return;		// don't come down automatically
	self.think = door_go_down;
	self.nextthink = self.ltime + self.wait;
};

void() door_hit_bottom =
{
	sound (self, CHAN_VOICE, self.noise1, 1, ATTN_NORM);
	self.state = STATE_BOTTOM;
};

void() door_go_down =
{
	sound (self, CHAN_VOICE, self.noise2, 1, ATTN_NORM);
	if (self.max_health)
	{
		self.takedamage = DAMAGE_YES;
		self.health = self.max_health;
	}
	
	self.state = STATE_DOWN;
	SUB_CalcMove (self.pos1, self.speed, door_hit_bottom);
};

void() door_go_up =
{
	if (self.state == STATE_UP)
		return;		// allready going up

	if (self.state == STATE_TOP)
	{	// reset top wait time
		self.nextthink = self.ltime + self.wait;
		return;
	}
	
	sound (self, CHAN_VOICE, self.noise2, 1, ATTN_NORM);
	self.state = STATE_UP;
	SUB_CalcMove (self.pos2, self.speed, door_hit_top);

	SUB_UseTargets();
};


/*
=============================================================================

ACTIVATION FUNCTIONS

=============================================================================
*/

void() door_fire =
{
	local entity 	oself;
	local entity	starte;

	if (self.owner != self)
		objerror (&quot;door_fire: self.owner != self&quot;);

// play use key sound

	if (self.items)
		sound (self, CHAN_VOICE, self.noise4, 1, ATTN_NORM);

	self.message = string_null;		// no more message
	oself = self;

	if (self.spawnflags &amp; DOOR_TOGGLE)
	{
		if (self.state == STATE_UP || self.state == STATE_TOP)
		{
			starte = self;
			do
			{
				door_go_down ();
				self = self.enemy;
			} while ( (self != starte) &amp;&amp; (self != world) );
			self = oself;
			return;
		}
	}
	
// trigger all paired doors
	starte = self;
	do
	{
		door_go_up ();
		self = self.enemy;
	} while ( (self != starte) &amp;&amp; (self != world) );
	self = oself;
};


void() door_use =
{
	local entity oself;

	self.message = &quot;&quot;;			// door message are for touch only
	self.owner.message = &quot;&quot;;	
	self.enemy.message = &quot;&quot;;
	oself = self;
	self = self.owner;
	door_fire ();
	self = oself;
};


void() door_trigger_touch =
{
	if (other.health &lt;= 0)
		return;

	if (time &lt; self.attack_finished)
		return;
	self.attack_finished = time + 1;

	activator = other;

	self = self.owner;
	door_use ();
};


void() door_killed =
{
	local entity oself;
	
	oself = self;
	self = self.owner;
	self.health = self.max_health;
	self.takedamage = DAMAGE_NO;	// wil be reset upon return
	door_use ();
	self = oself;
};


/*
================
door_touch

Prints messages and opens key doors
================
*/
void() door_touch =
{
	if (other.classname != &quot;player&quot;)
		return;
	if (self.owner.attack_finished &gt; time)
		return;

	self.owner.attack_finished = time + 2;

	if (self.owner.message != &quot;&quot;)
	{
		centerprint (other, self.owner.message);
		sound (other, CHAN_VOICE, &quot;misc/talk.wav&quot;, 1, ATTN_NORM);
	}
	
// key door stuff
	if (!self.items)
		return;

// FIXME: blink key on player's status bar
	if ( (self.items &amp; other.items) != self.items )
	{
		if (self.owner.items == IT_KEY1)
		{
			if (world.worldtype == 2)
			{
				centerprint (other, &quot;You need the silver keycard&quot;);
				sound (self, CHAN_VOICE, self.noise3, 1, ATTN_NORM);
			}
			else if (world.worldtype == 1)
			{
				centerprint (other, &quot;You need the silver runekey&quot;);
				sound (self, CHAN_VOICE, self.noise3, 1, ATTN_NORM);
			}
			else if (world.worldtype == 0)
			{
				centerprint (other, &quot;You need the silver key&quot;);
				sound (self, CHAN_VOICE, self.noise3, 1, ATTN_NORM);
			}
		}
		else
		{
			if (world.worldtype == 2)
			{
				centerprint (other, &quot;You need the gold keycard&quot;);
				sound (self, CHAN_VOICE, self.noise3, 1, ATTN_NORM);
			}
			else if (world.worldtype == 1)
			{
				centerprint (other, &quot;You need the gold runekey&quot;);
				sound (self, CHAN_VOICE, self.noise3, 1, ATTN_NORM);			
			}
			else if (world.worldtype == 0)
			{
				centerprint (other, &quot;You need the gold key&quot;);
				sound (self, CHAN_VOICE, self.noise3, 1, ATTN_NORM);
			}
		}
		return;
	}

	other.items = other.items - self.items;
	self.touch = SUB_Null;
	if (self.enemy)
		self.enemy.touch = SUB_Null;	// get paired door
	door_use ();
};

/*
=============================================================================

SPAWNING FUNCTIONS

=============================================================================
*/


entity(vector fmins, vector fmaxs) spawn_field =
{
	local entity	trigger;
	local	vector	t1, t2;

	trigger = spawn();
	trigger.movetype = MOVETYPE_NONE;
	trigger.solid = SOLID_TRIGGER;
	trigger.owner = self;
	trigger.touch = door_trigger_touch;

	t1 = fmins;
	t2 = fmaxs;
	setsize (trigger, t1 - '60 60 8', t2 + '60 60 8');
	return (trigger);
};


float (entity e1, entity e2) EntitiesTouching =
{
	if (e1.mins_x &gt; e2.maxs_x)
		return FALSE;
	if (e1.mins_y &gt; e2.maxs_y)
		return FALSE;
	if (e1.mins_z &gt; e2.maxs_z)
		return FALSE;
	if (e1.maxs_x &lt; e2.mins_x)
		return FALSE;
	if (e1.maxs_y &lt; e2.mins_y)
		return FALSE;
	if (e1.maxs_z &lt; e2.mins_z)
		return FALSE;
	return TRUE;
};


/*
=============
LinkDoors


=============
*/
void() LinkDoors =
{
	local entity	t, starte;
	local vector	cmins, cmaxs;

	if (self.enemy)
		return;		// already linked by another door
	if (self.spawnflags &amp; 4)
	{
		self.owner = self.enemy = self;
		return;		// don't want to link this door
	}

	cmins = self.mins;
	cmaxs = self.maxs;
	
	starte = self;
	t = self;
	
	do
	{
		self.owner = starte;			// master door

		if (self.health)
			starte.health = self.health;
		if (self.targetname)
			starte.targetname = self.targetname;
		if (self.message != &quot;&quot;)
			starte.message = self.message;

		t = find (t, classname, self.classname);	
		if (!t)
		{
			self.enemy = starte;		// make the chain a loop

		// shootable, fired, or key doors just needed the owner/enemy links,
		// they don't spawn a field
	
			self = self.owner;

			if (self.health)
				return;
			if (self.targetname)
				return;
			if (self.items)
				return;

			self.owner.trigger_field = spawn_field(cmins, cmaxs);

			return;
		}

		if (EntitiesTouching(self,t))
		{
			if (t.enemy)
				objerror (&quot;cross connected doors&quot;);
			
			self.enemy = t;
			self = t;

			if (t.mins_x &lt; cmins_x)
				cmins_x = t.mins_x;
			if (t.mins_y &lt; cmins_y)
				cmins_y = t.mins_y;
			if (t.mins_z &lt; cmins_z)
				cmins_z = t.mins_z;
			if (t.maxs_x &gt; cmaxs_x)
				cmaxs_x = t.maxs_x;
			if (t.maxs_y &gt; cmaxs_y)
				cmaxs_y = t.maxs_y;
			if (t.maxs_z &gt; cmaxs_z)
				cmaxs_z = t.maxs_z;
		}
	} while (1 );

};


/*QUAKED func_door (0 .5 .8) ? START_OPEN x DOOR_DONT_LINK GOLD_KEY SILVER_KEY TOGGLE
if two doors touch, they are assumed to be connected and operate as a unit.

TOGGLE causes the door to wait in both the start and end states for a trigger event.

START_OPEN causes the door to move to its destination when spawned, and operate in reverse.  It is used to temporarily or permanently close off an area when triggered (not usefull for touch or takedamage doors).

Key doors are allways wait -1.

&quot;message&quot;	is printed when the door is touched if it is a trigger door and it hasn't been fired yet
&quot;angle&quot;		determines the opening direction
&quot;targetname&quot; if set, no touch field will be spawned and a remote button or trigger field activates the door.
&quot;health&quot;	if set, door must be shot open
&quot;speed&quot;		movement speed (100 default)
&quot;wait&quot;		wait before returning (3 default, -1 = never return)
&quot;lip&quot;		lip remaining at end of move (8 default)
&quot;dmg&quot;		damage to inflict when blocked (2 default)
&quot;sounds&quot;
0)	no sound
1)	stone
2)	base
3)	stone chain
4)	screechy metal
*/

void() func_door =

{

	if (world.worldtype == 0)
	{
		precache_sound (&quot;doors/medtry.wav&quot;);
		precache_sound (&quot;doors/meduse.wav&quot;);
		self.noise3 = &quot;doors/medtry.wav&quot;;
		self.noise4 = &quot;doors/meduse.wav&quot;;
	}
	else if (world.worldtype == 1)
	{
		precache_sound (&quot;doors/runetry.wav&quot;);
		precache_sound (&quot;doors/runeuse.wav&quot;);
		self.noise3 = &quot;doors/runetry.wav&quot;;
		self.noise4 = &quot;doors/runeuse.wav&quot;;
	}
	else if (world.worldtype == 2)
	{
		precache_sound (&quot;doors/basetry.wav&quot;);
		precache_sound (&quot;doors/baseuse.wav&quot;);
		self.noise3 = &quot;doors/basetry.wav&quot;;
		self.noise4 = &quot;doors/baseuse.wav&quot;;
	}
	else
	{
		dprint (&quot;no worldtype set!\n&quot;);
	}
	if (self.sounds == 0)
	{
		precache_sound (&quot;misc/null.wav&quot;);
		precache_sound (&quot;misc/null.wav&quot;);
		self.noise1 = &quot;misc/null.wav&quot;;
		self.noise2 = &quot;misc/null.wav&quot;;
	}
	if (self.sounds == 1)
	{
		precache_sound (&quot;doors/drclos4.wav&quot;);
		precache_sound (&quot;doors/doormv1.wav&quot;);
		self.noise1 = &quot;doors/drclos4.wav&quot;;
		self.noise2 = &quot;doors/doormv1.wav&quot;;
	}
	if (self.sounds == 2)
	{
		precache_sound (&quot;doors/hydro1.wav&quot;);
		precache_sound (&quot;doors/hydro2.wav&quot;);
		self.noise2 = &quot;doors/hydro1.wav&quot;;
		self.noise1 = &quot;doors/hydro2.wav&quot;;
	}
	if (self.sounds == 3)
	{
		precache_sound (&quot;doors/stndr1.wav&quot;);
		precache_sound (&quot;doors/stndr2.wav&quot;);
		self.noise2 = &quot;doors/stndr1.wav&quot;;
		self.noise1 = &quot;doors/stndr2.wav&quot;;
	}
	if (self.sounds == 4)
	{
		precache_sound (&quot;doors/ddoor1.wav&quot;);
		precache_sound (&quot;doors/ddoor2.wav&quot;);
		self.noise1 = &quot;doors/ddoor2.wav&quot;;
		self.noise2 = &quot;doors/ddoor1.wav&quot;;
	}


	SetMovedir ();

	self.max_health = self.health;
	self.solid = SOLID_BSP;
	self.movetype = MOVETYPE_PUSH;
	setorigin (self, self.origin);	
	setmodel (self, self.model);
	self.classname = &quot;door&quot;;

	self.blocked = door_blocked;
	self.use = door_use;
	
	if (self.spawnflags &amp; DOOR_SILVER_KEY)
		self.items = IT_KEY1;
	if (self.spawnflags &amp; DOOR_GOLD_KEY)
		self.items = IT_KEY2;
	
	if (!self.speed)
		self.speed = 100;
	if (!self.wait)
		self.wait = 3;
	if (!self.lip)
		self.lip = 8;
	if (!self.dmg)
		self.dmg = 2;

	self.pos1 = self.origin;
	self.pos2 = self.pos1 + self.movedir*(fabs(self.movedir*self.size) - self.lip);

// DOOR_START_OPEN is to allow an entity to be lighted in the closed position
// but spawn in the open position
	if (self.spawnflags &amp; DOOR_START_OPEN)
	{
		setorigin (self, self.pos2);
		self.pos2 = self.pos1;
		self.pos1 = self.origin;
	}

	self.state = STATE_BOTTOM;

	if (self.health)
	{
		self.takedamage = DAMAGE_YES;
		self.th_die = door_killed;
	}
	
	if (self.items)
		self.wait = -1;
		
	self.touch = door_touch;

// LinkDoors can't be done until all of the doors have been spawned, so
// the sizes can be detected properly.
	self.think = LinkDoors;
	self.nextthink = self.ltime + 0.1;
};

/*
=============================================================================

SECRET DOORS

=============================================================================
*/

void() fd_secret_move1;
void() fd_secret_move2;
void() fd_secret_move3;
void() fd_secret_move4;
void() fd_secret_move5;
void() fd_secret_move6;
void() fd_secret_done;

float SECRET_OPEN_ONCE = 1;		// stays open
float SECRET_1ST_LEFT = 2;		// 1st move is left of arrow
float SECRET_1ST_DOWN = 4;		// 1st move is down from arrow
float SECRET_NO_SHOOT = 8;		// only opened by trigger
float SECRET_YES_SHOOT = 16;	// shootable even if targeted


void () fd_secret_use =
{
	local float temp;
	
	self.health = 10000;

	// exit if still moving around...
	if (self.origin != self.oldorigin)
		return;
	
	self.message = string_null;		// no more message

	SUB_UseTargets();				// fire all targets / killtargets
	
	if (!(self.spawnflags &amp; SECRET_NO_SHOOT))
	{
		self.th_pain = SUB_Null;
		self.takedamage = DAMAGE_NO;
	}
	self.velocity = '0 0 0';

	// Make a sound, wait a little...
	
	sound(self, CHAN_VOICE, self.noise1, 1, ATTN_NORM);
	self.nextthink = self.ltime + 0.1;

	temp = 1 - (self.spawnflags &amp; SECRET_1ST_LEFT);	// 1 or -1
	makevectors(self.mangle);
	
	if (!self.t_width)
	{
		if (self.spawnflags &amp; SECRET_1ST_DOWN)
			self. t_width = fabs(v_up * self.size);
		else
			self. t_width = fabs(v_right * self.size);
	}
		
	if (!self.t_length)
		self. t_length = fabs(v_forward * self.size);

	if (self.spawnflags &amp; SECRET_1ST_DOWN)
		self.dest1 = self.origin - v_up * self.t_width;
	else
		self.dest1 = self.origin + v_right * (self.t_width * temp);
		
	self.dest2 = self.dest1 + v_forward * self.t_length;
	SUB_CalcMove(self.dest1, self.speed, fd_secret_move1);
	sound(self, CHAN_VOICE, self.noise2, 1, ATTN_NORM);
};

// Wait after first movement...
void () fd_secret_move1 = 
{
	self.nextthink = self.ltime + 1.0;
	self.think = fd_secret_move2;
	sound(self, CHAN_VOICE, self.noise3, 1, ATTN_NORM);
};

// Start moving sideways w/sound...
void () fd_secret_move2 =
{
	sound(self, CHAN_VOICE, self.noise2, 1, ATTN_NORM);
	SUB_CalcMove(self.dest2, self.speed, fd_secret_move3);
};

// Wait here until time to go back...
void () fd_secret_move3 =
{
	sound(self, CHAN_VOICE, self.noise3, 1, ATTN_NORM);
	if (!(self.spawnflags &amp; SECRET_OPEN_ONCE))
	{
		self.nextthink = self.ltime + self.wait;
		self.think = fd_secret_move4;
	}
};

// Move backward...
void () fd_secret_move4 =
{
	sound(self, CHAN_VOICE, self.noise2, 1, ATTN_NORM);
	SUB_CalcMove(self.dest1, self.speed, fd_secret_move5);		
};

// Wait 1 second...
void () fd_secret_move5 = 
{
	self.nextthink = self.ltime + 1.0;
	self.think = fd_secret_move6;
	sound(self, CHAN_VOICE, self.noise3, 1, ATTN_NORM);
};

void () fd_secret_move6 =
{
	sound(self, CHAN_VOICE, self.noise2, 1, ATTN_NORM);
	SUB_CalcMove(self.oldorigin, self.speed, fd_secret_done);
};

void () fd_secret_done =
{
	if (!self.targetname || self.spawnflags&amp;SECRET_YES_SHOOT)
	{
		self.health = 10000;
		self.takedamage = DAMAGE_YES;
		self.th_pain = fd_secret_use;	
	}
	sound(self, CHAN_VOICE, self.noise3, 1, ATTN_NORM);
};

void () secret_blocked =
{
	if (time &lt; self.attack_finished)
		return;
	self.attack_finished = time + 0.5;
	T_Damage (other, self, self, self.dmg);
};

/*
================
secret_touch

Prints messages
================
*/
void() secret_touch =
{
	if (other.classname != &quot;player&quot;)
		return;
	if (self.attack_finished &gt; time)
		return;

	self.attack_finished = time + 2;
	
	if (self.message)
	{
		centerprint (other, self.message);
		sound (other, CHAN_BODY, &quot;misc/talk.wav&quot;, 1, ATTN_NORM);
	}
};


/*QUAKED func_door_secret (0 .5 .8) ? open_once 1st_left 1st_down no_shoot always_shoot
Basic secret door. Slides back, then to the side. Angle determines direction.
wait  = # of seconds before coming back
1st_left = 1st move is left of arrow
1st_down = 1st move is down from arrow
always_shoot = even if targeted, keep shootable
t_width = override WIDTH to move back (or height if going down)
t_length = override LENGTH to move sideways
&quot;dmg&quot;		damage to inflict when blocked (2 default)

If a secret door has a targetname, it will only be opened by it's botton or trigger, not by damage.
&quot;sounds&quot;
1) medieval
2) metal
3) base
*/

void () func_door_secret =
{
	if (self.sounds == 0)
		self.sounds = 3;
	if (self.sounds == 1)
	{
		precache_sound (&quot;doors/latch2.wav&quot;);
		precache_sound (&quot;doors/winch2.wav&quot;);
		precache_sound (&quot;doors/drclos4.wav&quot;);
		self.noise1 = &quot;doors/latch2.wav&quot;;
		self.noise2 = &quot;doors/winch2.wav&quot;;
		self.noise3 = &quot;doors/drclos4.wav&quot;;
	}
	if (self.sounds == 2)
	{
		precache_sound (&quot;doors/airdoor1.wav&quot;);
		precache_sound (&quot;doors/airdoor2.wav&quot;);
		self.noise2 = &quot;doors/airdoor1.wav&quot;;
		self.noise1 = &quot;doors/airdoor2.wav&quot;;
		self.noise3 = &quot;doors/airdoor2.wav&quot;;
	}
	if (self.sounds == 3)
	{
		precache_sound (&quot;doors/basesec1.wav&quot;);
		precache_sound (&quot;doors/basesec2.wav&quot;);
		self.noise2 = &quot;doors/basesec1.wav&quot;;
		self.noise1 = &quot;doors/basesec2.wav&quot;;
		self.noise3 = &quot;doors/basesec2.wav&quot;;
	}

	if (!self.dmg)
		self.dmg = 2;
		
	// Magic formula...
	self.mangle = self.angles;
	self.angles = '0 0 0';
	self.solid = SOLID_BSP;
	self.movetype = MOVETYPE_PUSH;
	self.classname = &quot;door&quot;;
	setmodel (self, self.model);
	setorigin (self, self.origin);	
	
	self.touch = secret_touch;
	self.blocked = secret_blocked;
	self.speed = 50;
	self.use = fd_secret_use;
	if ( !self.targetname || self.spawnflags&amp;SECRET_YES_SHOOT)
	{
		self.health = 10000;
		self.takedamage = DAMAGE_YES;
		self.th_pain = fd_secret_use;
		self.th_die = fd_secret_use;
	}
	self.oldorigin = self.origin;
	if (!self.wait)
		self.wait = 5;		// 5 seconds before closing
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>01kmxfne57j8azhlw9bnavza8yisjss</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>dprint</title>
    <ns>0</ns>
    <id>796</id>
    <revision>
      <id>2340</id>
      <timestamp>2013-03-26T23:46:51Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;====Syntax:==== &lt;code&gt;void dprint(string s)&lt;/code&gt;  Similar to bprint, dprint broadcasts text to all players in the map but only when the '''developer''' console variable is s...&quot;</comment>
      <text xml:space="preserve" bytes="330">====Syntax:====
&lt;code&gt;void dprint(string s)&lt;/code&gt;

Similar to bprint, dprint broadcasts text to all players in the map but only when the '''developer''' console variable is set to 1.  This is used for debugging mods.
====Parameters:====
:&lt;code&gt;s&lt;/code&gt; - The string to print.
====Returns:====
:void


[[Category:QuakeC Function]]</text>
      <sha1>bkf3tqaay2jog8alabymmoi0qm9kvli</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>droptofloor</title>
    <ns>0</ns>
    <id>798</id>
    <revision>
      <id>2342</id>
      <timestamp>2013-03-27T01:58:41Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;====Syntax:==== &lt;code&gt;float droptofloor(float yaw, float dist)&lt;/code&gt;  Tries to &quot;drop&quot; an entity down up to 256 units in a single frame, as if it had fallen due to physics. ==...&quot;</comment>
      <text xml:space="preserve" bytes="623">====Syntax:====
&lt;code&gt;float droptofloor(float yaw, float dist)&lt;/code&gt;

Tries to &quot;drop&quot; an entity down up to 256 units in a single frame, as if it had fallen due to physics.
====Parameters:====
:&lt;code&gt;yaw&lt;/code&gt; - Unused?
:&lt;code&gt;dist&lt;/code&gt; - Unused?
====Returns:====
:Returns  TRUE if the entity landed on the ground and FALSE if it was still in the air.
====Other Details:====
Note the 256 unit limitation.  Typically droptofloor is either to pre-place items and monsters on the ground after a map has loaded but if an entity is  over 256 units from the ground, droptofloor will return false.

[[Category:QuakeC Function]]</text>
      <sha1>p6df05ekv5rv39lr0gbyae1plowsnza</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e1m1</title>
    <ns>0</ns>
    <id>676</id>
    <revision>
      <id>2001</id>
      <timestamp>2013-03-25T10:36:59Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>added stub</comment>
      <text xml:space="preserve" bytes="174">{{Infobox_singleplayer_map
| title = Slipgate Complex
| filename = e1m1
| image = e1m1.jpg
| author = [[John Romero]]
| monsters = 10 / 23 / 42
| secrets = 6
| cdtrack = 6
}}</text>
      <sha1>jvyf5um1xoxv72z9fxld8jhpsoqoi9k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2061</id>
      <parentid>2001</parentid>
      <timestamp>2013-03-25T12:39:49Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>Than moved page [[e1m1]] to [[E1M1 - The Slipgate Complex]]: testing more complete map name</comment>
      <text xml:space="preserve" bytes="174">{{Infobox_singleplayer_map
| title = Slipgate Complex
| filename = e1m1
| image = e1m1.jpg
| author = [[John Romero]]
| monsters = 10 / 23 / 42
| secrets = 6
| cdtrack = 6
}}</text>
      <sha1>jvyf5um1xoxv72z9fxld8jhpsoqoi9k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2063</id>
      <parentid>2061</parentid>
      <timestamp>2013-03-25T12:41:06Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>Than moved page [[E1M1 - The Slipgate Complex]] to [[e1m1]] over a redirect without leaving a redirect: E1M1 - The Slipgate Complex was a test (and actually &quot;The&quot; was incorrect)</comment>
      <text xml:space="preserve" bytes="174">{{Infobox_singleplayer_map
| title = Slipgate Complex
| filename = e1m1
| image = e1m1.jpg
| author = [[John Romero]]
| monsters = 10 / 23 / 42
| secrets = 6
| cdtrack = 6
}}</text>
      <sha1>jvyf5um1xoxv72z9fxld8jhpsoqoi9k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2064</id>
      <parentid>2063</parentid>
      <timestamp>2013-03-25T12:46:21Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>added a small amount of text as a test</comment>
      <text xml:space="preserve" bytes="390">E1M1 - Slipgate Complex is the first level of the Dimension of the Doomed episode of Quake. As the first regular level of Quake, is one of the most recognisable, and has had several [[remix|remixes]] created of it.

{{Infobox_singleplayer_map
| title = Slipgate Complex
| filename = e1m1
| image = e1m1.jpg
| author = [[John Romero]]
| monsters = 10 / 23 / 42
| secrets = 6
| cdtrack = 6
}}</text>
      <sha1>5a01cnb5wfcipmsltp19twsh4uxxnhn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2066</id>
      <parentid>2064</parentid>
      <timestamp>2013-03-25T12:59:28Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>changed the position of the text and added sections for secrets and remixes, which can be filled out later.</comment>
      <text xml:space="preserve" bytes="422">{{Infobox_singleplayer_map
| title = Slipgate Complex
| filename = e1m1
| image = e1m1.jpg
| author = [[John Romero]]
| monsters = 10 / 23 / 42
| secrets = 6
| cdtrack = 6
}}

'''E1M1 - Slipgate Complex''' is the first level of the Dimension of the Doomed episode of Quake. As the first regular level of Quake, is one of the most recognisable, and has had several [[remix|remixes]] created of it.

==Secrets==

==Remixes==</text>
      <sha1>7cpic93v53h7a5bjmw4wh3rg1d2lktb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2070</id>
      <parentid>2066</parentid>
      <timestamp>2013-03-25T13:27:17Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="1768">{{Infobox_singleplayer_map
| title = Slipgate Complex
| filename = e1m1
| image = e1m1.jpg
| author = [[John Romero]]
| monsters = 10 / 23 / 42
| secrets = 6
| cdtrack = 6
}}

'''E1M1 - Slipgate Complex''' is the first level of the Dimension of the Doomed episode of Quake. As the first regular level of Quake, is one of the most recognisable, and has had several [[remix|remixes]] created of it.

==Secrets==
'''Secret 1''': Right at the beginning there is a shelf with a flashing light and a message saying &quot;you can jump up here&quot;. Shoot the panel with the black and yellow stripes to reveal some [[shells]].

'''Secret 2''': If you fall into the water in the outside area, there is a cave that takes you to a [[megahealth]] and a way back up to the start. This secret can also be accessed by shooting a panel in the end area.

'''Secret 3''': After you see the first explosive crate, head right. Shoot the computer screens that have planets displayed on them to activate a lift and open a secret door. Behind the door is a [[quad damage]]!

'''Secret 4''': A crosshair button is visible when standing on the bridge over the first slime pool. Shoot it to reveal a [[super shotgun]].

'''Secret 5''': In the large room with slime at the bottom, there is an [[envirosuit]] hidden behind a pillar near the bottom. Take the suit and swim in the slime until you find a tunnel entrance. Swim down the tunnel until you reach a square opening out of the slime. This leads to a small room with a [[yellow armor]] and some other items.

'''Secret 6''': In the large room with slime at the bottom, there is a small ledge which has some steps leading up to it above the main route. Climb on the light and the button to reach the steps, which lead up to a megahealth.

==Remixes==</text>
      <sha1>6ayjuyu0cb99beokxtb24zhp8u1jgno</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2236</id>
      <parentid>2070</parentid>
      <timestamp>2013-03-26T13:37:33Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>fixed some links and capitalisation</comment>
      <text xml:space="preserve" bytes="1794">{{Infobox_singleplayer_map
| title = Slipgate Complex
| filename = e1m1
| image = e1m1.jpg
| author = [[John Romero]]
| monsters = 10 / 23 / 42
| secrets = 6
| cdtrack = 6
}}

'''E1M1 - Slipgate Complex''' is the first level of the Dimension of the Doomed episode of Quake. As the first regular level of Quake, is one of the most recognisable, and has had several [[Remix|remixes]] created of it.

==Secrets==
'''Secret 1''': Right at the beginning there is a shelf with a flashing light and a message saying &quot;you can jump up here&quot;. Shoot the panel with the black and yellow stripes to reveal some [[Shells|shells]].

'''Secret 2''': If you fall into the water in the outside area, there is a cave that takes you to a [[Mega-Health]] and a way back up to the start. This secret can also be accessed by shooting a panel in the end area.

'''Secret 3''': After you see the first explosive crate, head right. Shoot the computer screens that have planets displayed on them to activate a lift and open a secret door. Behind the door is a [[Quad Damage]]!

'''Secret 4''': A crosshair button is visible when standing on the bridge over the first slime pool. Shoot it to reveal a [[Double-Barrelled Shotgun]].

'''Secret 5''': In the large room with slime at the bottom, there is an [[Biosuit]] hidden behind a pillar near the bottom. Take the suit and swim in the slime until you find a tunnel entrance. Swim down the tunnel until you reach a square opening out of the slime. This leads to a small room with a [[Yellow_Armor]] and some other items.

'''Secret 6''': In the large room with slime at the bottom, there is a small ledge which has some steps leading up to it above the main route. Climb across the light and the button, then jump to the steps, which lead up to a Mega-Health.

==Remixes==</text>
      <sha1>rwje7ik107nhktdzu2bnu6stymz0qtj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2275</id>
      <parentid>2236</parentid>
      <timestamp>2013-03-26T16:03:42Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>added remixes</comment>
      <text xml:space="preserve" bytes="2414">{{Infobox_singleplayer_map
| title = Slipgate Complex
| filename = e1m1
| image = e1m1.jpg
| author = [[John Romero]]
| monsters = 10 / 23 / 42
| secrets = 6
| cdtrack = 6
}}

'''E1M1 - Slipgate Complex''' is the first level of the Dimension of the Doomed episode of Quake. As the first regular level of Quake, is one of the most recognisable, and has had several [[Remix|remixes]] created of it.

==Secrets==
'''Secret 1''': Right at the beginning there is a shelf with a flashing light and a message saying &quot;you can jump up here&quot;. Shoot the panel with the black and yellow stripes to reveal some [[Shells|shells]].

'''Secret 2''': If you fall into the water in the outside area, there is a cave that takes you to a [[Mega-Health]] and a way back up to the start. This secret can also be accessed by shooting a panel in the end area.

'''Secret 3''': After you see the first explosive crate, head right. Shoot the computer screens that have planets displayed on them to activate a lift and open a secret door. Behind the door is a [[Quad Damage]]!

'''Secret 4''': A crosshair button is visible when standing on the bridge over the first slime pool. Shoot it to reveal a [[Double-Barrelled Shotgun]].

'''Secret 5''': In the large room with slime at the bottom, there is an [[Biosuit]] hidden behind a pillar near the bottom. Take the suit and swim in the slime until you find a tunnel entrance. Swim down the tunnel until you reach a square opening out of the slime. This leads to a small room with a [[Yellow_Armor]] and some other items.

'''Secret 6''': In the large room with slime at the bottom, there is a small ledge which has some steps leading up to it above the main route. Climb across the light and the button, then jump to the steps, which lead up to a Mega-Health.

==Remixes==
As the first and perhaps most recognisable level in Quake, E1M1 has had a couple of remixes made for it. The remixes are listed below.
*E1M1RMX : The first remix, made by [[czg]] and [[Vondur]] in 2004. It has the same layout and gameplay as the original map, only with much improved visuals and a large unmarked secret, accessible from the Double-Barrelled Shotgun secret.
*E1M1RMX_HARD : A remix of E1M1RMX with much more difficult gameplay.
*E1M1QUOTH : Another remix of E1M1RMX, this time for the [[Quoth]] [[mod]]. It has even more details, extra areas and remixed gameplay using the additional Quoth base enemies.</text>
      <sha1>4ovvmcc2on4npxer8248mu5032md59n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3019</id>
      <parentid>2275</parentid>
      <timestamp>2013-11-02T05:55:04Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>added notes as to unique aspects of the map and its multiplayer</comment>
      <text xml:space="preserve" bytes="3705">{{Infobox_singleplayer_map
| title = Slipgate Complex
| filename = e1m1
| image = e1m1.jpg
| author = [[John Romero]]
| monsters = 10 / 23 / 42
| secrets = 6
| cdtrack = 6
}}

'''E1M1 - Slipgate Complex''' is the first level of the Dimension of the Doomed episode of Quake. As the first regular level of Quake, it is one of the most recognizable, and has had several [[Remix|remixes]] created of it.

The level demonstrates Quake's ability to do 3d spaces with the bridge over the creek, a catwalk, and an overlapping spiral ramp. The player encounters most of the game mechanics in the level, other than wind tunnels, crushers, trap shooters, and teleporter trains.

==Tutorial==
Slipgate Complex is the only level to contain a tutorial section, where the player is prompted to jump across a gap and is introduced to the idea that you need to shoot secret walls to access them, easing the transition for Doom players who would still be used to an Action/Use key to trigger such events.

==Secrets==
'''Secret 1''': Right at the beginning there is a shelf with a flashing light and a message saying &quot;you can jump up here&quot;. Shoot the panel with the black and yellow stripes to reveal some [[Shells|shells]].

'''Secret 2''': If you fall into the water in the outside area, there is a cave that takes you to a [[Mega-Health]] and a way back up to the start. This secret can also be accessed by shooting a panel in the end area.

'''Secret 3''': After you see the first explosive crate, head right. Shoot the computer screens that have planets displayed on them to activate a lift and open a secret door. Behind the door is a [[Quad Damage]]!

'''Secret 4''': A crosshair button is visible when standing on the bridge over the first slime pool. Shoot it to reveal a [[Double-Barrelled Shotgun]].

'''Secret 5''': In the large room with slime at the bottom, there is an [[Biosuit]] hidden behind a pillar near the bottom. Take the suit and swim in the slime until you find a tunnel entrance. Swim down the tunnel until you reach a square opening out of the slime. This leads to a small room with a [[Yellow Armor]] and some other items.

'''Secret 6''': In the large room with slime at the bottom, there is a small ledge which has some steps leading up to it above the main route. Climb across the light and the button, then jump to the steps, which lead up to a Mega-Health.

==Deathmatch==
Slipgate Complex is a strange map for deathmatch due to the linear nature of the map combined with the physical proximity of the entrance and exit. The [[Nailgun]] is at the single player spawn and in its original location there is now a [[Rocket Launcher]]. A [[Grenade Launcher]] can be found in Secret 5, and the teleporter will take you to a [[Pentagram of Protection]]. Combat focuses in the entrance to the complex due to the presence of the Rocket Launcher, the Quad Damage from Secret 3, and the exit of Secret 5. Gameplay can be a bit campy as a player in the Rocket Launcher room can easily fire down on anyone below or attempting to use the platform to reach their catwalk.

==Remixes==
As the first and perhaps most recognisable level in Quake, E1M1 has had a couple of remixes made for it. The remixes are listed below.
*E1M1RMX : The first remix, made by [[czg]] and [[Vondur]] in 2004. It has the same layout and gameplay as the original map, only with much improved visuals and a large unmarked secret, accessible from the Double-Barrelled Shotgun secret.
*E1M1RMX_HARD : A remix of E1M1RMX with much more difficult gameplay.
*E1M1QUOTH : Another remix of E1M1RMX, this time for the [[Quoth]] [[mod]]. It has even more details, extra areas and remixed gameplay using the additional Quoth base enemies.</text>
      <sha1>5o1gl20xunfwzqpwuv1mmnj6x5iivjh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e1m2</title>
    <ns>0</ns>
    <id>678</id>
    <revision>
      <id>2003</id>
      <timestamp>2013-03-25T10:38:17Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>added stub</comment>
      <text xml:space="preserve" bytes="178">{{Infobox_singleplayer_map
| title = Castle of the Damned
| filename = e1m2
| image = e1m2.jpg
| author = [[Tim Willits]]
| monsters = 16 / 24 / 42
| secrets = 3
| cdtrack = 8
}}</text>
      <sha1>qgjewkt98micjxd7ktxepo1azfsmr07</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2005</id>
      <parentid>2003</parentid>
      <timestamp>2013-03-25T10:40:53Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="224">{{DISPLAYTITLE:E1M2 - Castle of the Damned}}

{{Infobox_singleplayer_map
| title = Castle of the Damned
| filename = e1m2
| image = e1m2.jpg
| author = [[Tim Willits]]
| monsters = 16 / 24 / 42
| secrets = 3
| cdtrack = 8
}}</text>
      <sha1>aen0g8gjdx5sxnrmrn2o2wydp402txo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2006</id>
      <parentid>2005</parentid>
      <timestamp>2013-03-25T10:41:15Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="178">{{Infobox_singleplayer_map
| title = Castle of the Damned
| filename = e1m2
| image = e1m2.jpg
| author = [[Tim Willits]]
| monsters = 16 / 24 / 42
| secrets = 3
| cdtrack = 8
}}</text>
      <sha1>qgjewkt98micjxd7ktxepo1azfsmr07</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e1m3</title>
    <ns>0</ns>
    <id>679</id>
    <revision>
      <id>2007</id>
      <timestamp>2013-03-25T10:42:15Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created stub</comment>
      <text xml:space="preserve" bytes="172">{{Infobox_singleplayer_map
| title = The Necropolis
| filename = e1m3
| image = e1m3.jpg
| author = [[Tim Willits]]
| monsters = 31 / 47 / 65
| secrets = 3
| cdtrack = 9
}}</text>
      <sha1>somful1wq2plb9ef7e59o8fewd6cbkb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e1m4</title>
    <ns>0</ns>
    <id>680</id>
    <revision>
      <id>2008</id>
      <timestamp>2013-03-25T10:43:06Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created stub</comment>
      <text xml:space="preserve" bytes="175">{{Infobox_singleplayer_map
| title = The Grisly Grotto
| filename = e1m4
| image = e1m4.jpg
| author = [[Tim Willits]]
| monsters = 22 / 42 / 59
| secrets = 3
| cdtrack = 5
}}</text>
      <sha1>0tsfglfyipvum1lz7tf0ljgxu8msv9e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e1m5</title>
    <ns>0</ns>
    <id>681</id>
    <revision>
      <id>2009</id>
      <timestamp>2013-03-25T10:43:49Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created stub</comment>
      <text xml:space="preserve" bytes="168">{{Infobox_singleplayer_map
| title = Gloom Keep
| filename = e1m5
| image = e1m5.jpg
| author = [[Tim Willits]]
| monsters = 18 / 39 / 60
| secrets = 5
| cdtrack = 1
}}</text>
      <sha1>2owziew6x6w32rlgeao9ae9c0notlr2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e1m6</title>
    <ns>0</ns>
    <id>682</id>
    <revision>
      <id>2010</id>
      <timestamp>2013-03-25T10:45:18Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created stub</comment>
      <text xml:space="preserve" bytes="178">{{Infobox_singleplayer_map
| title = The Door To Cthon
| filename = e1m6
| image = e1m6.jpg
| author = [[American McGee]]
| monsters = 14 / 24 / 31
| secrets = 4
| cdtrack = 4
}}</text>
      <sha1>f5r240g7wea0f2yps1cjldx5p356tsb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e1m7</title>
    <ns>0</ns>
    <id>683</id>
    <revision>
      <id>2011</id>
      <timestamp>2013-03-25T10:46:03Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created stub</comment>
      <text xml:space="preserve" bytes="179">{{Infobox_singleplayer_map
| title = The House Of Cthon
| filename = e1m7
| image = e1m7.jpg
| author = [[American McGee]]
| monsters = 21 / 21 / 21
| secrets = 0
| cdtrack = 7
}}</text>
      <sha1>erpo28zmuafqcvzdi8p9q6m36c0hnr4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e1m8</title>
    <ns>0</ns>
    <id>684</id>
    <revision>
      <id>2012</id>
      <timestamp>2013-03-25T10:47:02Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>Created page with &quot;{{Infobox_singleplayer_map | title = Ziggurat Vertigo | filename = e1m8 | image = e1m8.jpg | author = [[American McGee]] | monsters = 17 / 28 / 34 | secrets = 2 | cdtrack = 10 }}&quot;</comment>
      <text xml:space="preserve" bytes="178">{{Infobox_singleplayer_map
| title = Ziggurat Vertigo
| filename = e1m8
| image = e1m8.jpg
| author = [[American McGee]]
| monsters = 17 / 28 / 34
| secrets = 2
| cdtrack = 10
}}</text>
      <sha1>6gxie9p403b6taw2t7wfs69ha1w0mgh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e2m1</title>
    <ns>0</ns>
    <id>685</id>
    <revision>
      <id>2013</id>
      <timestamp>2013-03-25T10:50:26Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created stub</comment>
      <text xml:space="preserve" bytes="174">{{Infobox_singleplayer_map
| title = The Installation
| filename = e2m1
| image = e2m1.jpg
| author = [[John Romero]]
| monsters = 18 / 33 / 46
| secrets = 7
| cdtrack = 6
}}</text>
      <sha1>mdpjo2oxkimhnjuwvxk4w25xp3nwbsa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e2m2</title>
    <ns>0</ns>
    <id>686</id>
    <revision>
      <id>2014</id>
      <timestamp>2013-03-25T10:51:15Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created stub</comment>
      <text xml:space="preserve" bytes="174">{{Infobox_singleplayer_map
| title = The Ogre Citadel
| filename = e2m2
| image = e2m2.jpg
| author = [[John Romero]]
| monsters = 20 / 39 / 48
| secrets = 3
| cdtrack = 8
}}</text>
      <sha1>cx3sb95k7wzqcjs9kd29qmg77plamjt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e2m3</title>
    <ns>0</ns>
    <id>687</id>
    <revision>
      <id>2015</id>
      <timestamp>2013-03-25T10:52:38Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created stub</comment>
      <text xml:space="preserve" bytes="176">{{Infobox_singleplayer_map
| title = The Crypt Of Decay
| filename = e2m3
| image = e2m3.jpg
| author = [[John Romero]]
| monsters = 18 / 32 / 48
| secrets = 4
| cdtrack = 9
}}</text>
      <sha1>luv3tj4gbb9syewtc185etdico613t6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e2m4</title>
    <ns>0</ns>
    <id>688</id>
    <revision>
      <id>2016</id>
      <timestamp>2013-03-25T10:53:40Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created stub</comment>
      <text xml:space="preserve" bytes="175">{{Infobox_singleplayer_map
| title = The Ebon Fortress
| filename = e2m4
| image = e2m4.jpg
| author = [[John Romero]]
| monsters = 27 / 62 / 78
| secrets = 4
| cdtrack = 5
}}</text>
      <sha1>484fd64uej22ck82ovc4mb6tzrp0uqb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e2m5</title>
    <ns>0</ns>
    <id>689</id>
    <revision>
      <id>2017</id>
      <timestamp>2013-03-25T10:54:52Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created stub</comment>
      <text xml:space="preserve" bytes="177">{{Infobox_singleplayer_map
| title = The Wizard's Manse
| filename = e2m5
| image = e2m5.jpg
| author = [[John Romero]]
| monsters = 21 / 43 / 61
| secrets = 2
| cdtrack = 11
}}</text>
      <sha1>6ulrwa6r27ojz3t95kdcvagyqi6aj2d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e2m6</title>
    <ns>0</ns>
    <id>690</id>
    <revision>
      <id>2018</id>
      <timestamp>2013-03-25T10:55:57Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created stub</comment>
      <text xml:space="preserve" bytes="178">{{Infobox_singleplayer_map
| title = The Dismal Oubliette
| filename = e2m6
| image = e2m6.jpg
| author = [[John Romero]]
| monsters = 31 / 62 / 85
| secrets = 2
| cdtrack = 4
}}</text>
      <sha1>paevaalzpvd91w8uyjb99tsl63hcgvj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e2m7</title>
    <ns>0</ns>
    <id>691</id>
    <revision>
      <id>2019</id>
      <timestamp>2013-03-25T10:56:59Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created stub</comment>
      <text xml:space="preserve" bytes="172">{{Infobox_singleplayer_map
| title = The Underearth
| filename = e2m1
| image = e2m1.jpg
| author = [[Tim Willits]]
| monsters = 43 / 67 / 78
| secrets = 2
| cdtrack = 7
}}</text>
      <sha1>buw0swkltqjap7bnv0qqcs11uod10a9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2020</id>
      <parentid>2019</parentid>
      <timestamp>2013-03-25T10:57:14Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="172">{{Infobox_singleplayer_map
| title = The Underearth
| filename = e2m7
| image = e2m7.jpg
| author = [[Tim Willits]]
| monsters = 43 / 67 / 78
| secrets = 2
| cdtrack = 7
}}</text>
      <sha1>ryky7fffvyaze5h3mflmkpf1x6c1rje</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e3m1</title>
    <ns>0</ns>
    <id>715</id>
    <revision>
      <id>2046</id>
      <timestamp>2013-03-25T11:56:23Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created stub</comment>
      <text xml:space="preserve" bytes="177">{{Infobox_singleplayer_map
| title = Termination Central
| filename = e3m1
| image = e3m1.jpg
| author = [[John Romero]]
| monsters = 28 / 55 / 67
| secrets = 5
| cdtrack = 6
}}</text>
      <sha1>km8efp6eiv6jy03oa2ev6aafarc644s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e3m2</title>
    <ns>0</ns>
    <id>716</id>
    <revision>
      <id>2047</id>
      <timestamp>2013-03-25T11:57:20Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created stub</comment>
      <text xml:space="preserve" bytes="178">{{Infobox_singleplayer_map
| title = The Vaults Of Zin
| filename = e3m2
| image = e3m2.jpg
| author = [[American McGee]]
| monsters = 28 / 35 / 47
| secrets = 3
| cdtrack = 8
}}</text>
      <sha1>tiwkbg9ahh5i582ek0si8msputebdr1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e3m3</title>
    <ns>0</ns>
    <id>717</id>
    <revision>
      <id>2048</id>
      <timestamp>2013-03-25T11:58:01Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created stub</comment>
      <text xml:space="preserve" bytes="179">{{Infobox_singleplayer_map
| title = The Tomb Of Terror
| filename = e3m3
| image = e3m3.jpg
| author = [[American McGee]]
| monsters = 25 / 32 / 47
| secrets = 2
| cdtrack = 9
}}</text>
      <sha1>l5wwmfrxx5zfv239l8twlz916s3aoqz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e3m4</title>
    <ns>0</ns>
    <id>718</id>
    <revision>
      <id>2049</id>
      <timestamp>2013-03-25T11:58:53Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created stub</comment>
      <text xml:space="preserve" bytes="181">{{Infobox_singleplayer_map
| title = Satan's Dark Delight
| filename = e3m4
| image = e3m4.jpg
| author = [[American McGee]]
| monsters = 25 / 35 / 43
| secrets = 4
| cdtrack = 8
}}</text>
      <sha1>bplitner3l39ocvephdws4q2o62bwhd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e3m5</title>
    <ns>0</ns>
    <id>719</id>
    <revision>
      <id>2050</id>
      <timestamp>2013-03-25T11:59:34Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created stub</comment>
      <text xml:space="preserve" bytes="178">{{Infobox_singleplayer_map
| title = The Wind Tunnels
| filename = e3m5
| image = e3m5.jpg
| author = [[American McGee]]
| monsters = 25 / 43 / 50
| secrets = 4
| cdtrack = 11
}}</text>
      <sha1>pcan1bvua35qsntfd9dn5p0jtrftftj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e3m6</title>
    <ns>0</ns>
    <id>720</id>
    <revision>
      <id>2051</id>
      <timestamp>2013-03-25T12:00:23Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created stub</comment>
      <text xml:space="preserve" bytes="198">{{Infobox_singleplayer_map
| title = Chambers Of Torment
| filename = e3m6
| image = e3m6.jpg
| author = [[American McGee]] &amp; [[Tim Willits]]
| monsters = 34 / 59 / 73
| secrets = 2
| cdtrack = 4
}}</text>
      <sha1>9vuiaw78jglx1u7q5wxc0dtburhftlo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e3m7</title>
    <ns>0</ns>
    <id>721</id>
    <revision>
      <id>2052</id>
      <timestamp>2013-03-25T12:01:25Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created stub</comment>
      <text xml:space="preserve" bytes="178">{{Infobox_singleplayer_map
| title = The Haunted Halls
| filename = e3m7
| image = e3m7.jpg
| author = [[American McGee]]
| monsters = 32 / 40 / 42
| secrets = 4
| cdtrack = 5
}}</text>
      <sha1>o720q7d32n50y1x004k4hwrd32w0syw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e4m1</title>
    <ns>0</ns>
    <id>722</id>
    <revision>
      <id>2053</id>
      <timestamp>2013-03-25T12:02:19Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created stub</comment>
      <text xml:space="preserve" bytes="175">{{Infobox_singleplayer_map
| title = The Sewage System
| filename = e4m1
| image = e4m1.jpg
| author = [[Tim Willits]]
| monsters = 26 / 48 / 56
| secrets = 4
| cdtrack = 6
}}</text>
      <sha1>02rx1ogba8s7hepo139kxsyvihrz6wv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e4m2</title>
    <ns>0</ns>
    <id>723</id>
    <revision>
      <id>2054</id>
      <timestamp>2013-03-25T12:04:02Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created stub</comment>
      <text xml:space="preserve" bytes="181">{{Infobox_singleplayer_map
| title = The Tower Of Despair
| filename = e4m2
| image = e4m2.jpg
| author = [[Sandy Petersen]]
| monsters = 19 / 34 / 43
| secrets = 5
| cdtrack = 8
}}</text>
      <sha1>6mf5hsc2ancodxme6kbub078pbcuk3b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e4m3</title>
    <ns>0</ns>
    <id>724</id>
    <revision>
      <id>2055</id>
      <timestamp>2013-03-25T12:04:50Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created stub</comment>
      <text xml:space="preserve" bytes="181">{{Infobox_singleplayer_map
| title = The Elder God Shrine
| filename = e4m3
| image = e4m3.jpg
| author = [[Sandy Petersen]]
| monsters = 51 / 77 / 05
| secrets = 3
| cdtrack = 9
}}</text>
      <sha1>44jqzov0bhxkcmc5r3gb0seh777r1ju</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e4m4</title>
    <ns>0</ns>
    <id>725</id>
    <revision>
      <id>2056</id>
      <timestamp>2013-03-25T12:05:45Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created stub</comment>
      <text xml:space="preserve" bytes="179">{{Infobox_singleplayer_map
| title = The Palace Of Hate
| filename = e4m4
| image = e4m4.jpg
| author = [[Sandy Petersen]]
| monsters = 38 / 59 / 78
| secrets = 5
| cdtrack = 5
}}</text>
      <sha1>na1rruof8bfkop9lwmay7ll77r06lxo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e4m5</title>
    <ns>0</ns>
    <id>726</id>
    <revision>
      <id>2057</id>
      <timestamp>2013-03-25T12:06:30Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created stub</comment>
      <text xml:space="preserve" bytes="175">{{Infobox_singleplayer_map
| title = Hell's Atrium
| filename = e4m5
| image = e4m5.jpg
| author = [[Sandy Petersen]]
| monsters = 45 / 71 / 94
| secrets = 4
| cdtrack = 11
}}</text>
      <sha1>swmaie6kh24v0ooc13n1oq8ovey1ptd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e4m6</title>
    <ns>0</ns>
    <id>727</id>
    <revision>
      <id>2058</id>
      <timestamp>2013-03-25T12:07:16Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created stub</comment>
      <text xml:space="preserve" bytes="174">{{Infobox_singleplayer_map
| title = The Pain Maze
| filename = e4m6
| image = e4m6.jpg
| author = [[Sandy Petersen]]
| monsters = 35 / 51 / 81
| secrets = 4
| cdtrack = 4
}}</text>
      <sha1>n2mgeincle0b7917rordlkpf76rz4et</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e4m7</title>
    <ns>0</ns>
    <id>728</id>
    <revision>
      <id>2059</id>
      <timestamp>2013-03-25T12:08:17Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>Created page with &quot;{{Infobox_singleplayer_map | title = Azure Agony | filename = e4m7 | image = e4m7.jpg | author = [[Sandy Petersen]] | monsters = 31 / 54 / 80 | secrets = 9 | cdtrack = 7 }}&quot;</comment>
      <text xml:space="preserve" bytes="172">{{Infobox_singleplayer_map
| title = Azure Agony
| filename = e4m7
| image = e4m7.jpg
| author = [[Sandy Petersen]]
| monsters = 31 / 54 / 80
| secrets = 9
| cdtrack = 7
}}</text>
      <sha1>bnv4zbho252tdp86t9wkvolcws1q1mi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>e4m8</title>
    <ns>0</ns>
    <id>729</id>
    <revision>
      <id>2060</id>
      <timestamp>2013-03-25T12:09:02Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created stub</comment>
      <text xml:space="preserve" bytes="179">{{Infobox_singleplayer_map
| title = The Nameless City
| filename = e4m8
| image = e4m8.jpg
| author = [[Sandy Petersen]]
| monsters = 46 / 64 / 88
| secrets = 4
| cdtrack = 10
}}</text>
      <sha1>qdj8d3rxng77xs0dd2eaaxbva86ol9u</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>efrags</title>
    <ns>0</ns>
    <id>545</id>
    <revision>
      <id>1325</id>
      <timestamp>2009-09-28T08:59:14Z</timestamp>
      <contributor>
        <ip>137.191.242.106</ip>
      </contributor>
      <comment>Created page</comment>
      <text xml:space="preserve" bytes="255">Efrag means &quot;entity fragment&quot;, and is used for tracking which leaf(s) a particular [[Static Entity]] is in.  If a leaf containing an efrag is in the current [[PVS]], the associated Static Entity is also visible, and is added to the list of visible edicts.</text>
      <sha1>chgndhgtwry8tf1qto4w62bj6x1z0ej</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2520</id>
      <parentid>1325</parentid>
      <timestamp>2013-03-29T14:22:01Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Efrags]] to [[efrags]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="255">Efrag means &quot;entity fragment&quot;, and is used for tracking which leaf(s) a particular [[Static Entity]] is in.  If a leaf containing an efrag is in the current [[PVS]], the associated Static Entity is also visible, and is added to the list of visible edicts.</text>
      <sha1>chgndhgtwry8tf1qto4w62bj6x1z0ej</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>end</title>
    <ns>0</ns>
    <id>692</id>
    <revision>
      <id>2021</id>
      <timestamp>2013-03-25T10:59:28Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created stub</comment>
      <text xml:space="preserve" bytes="176">{{Infobox_singleplayer_map
| title = Shub-Niggurath's Pit
| filename = end
| image = end.jpg
| author = [[John Romero]]
| monsters = 16 / 20 / 20
| secrets = 1
| cdtrack = 4
}}</text>
      <sha1>odc4envg6rv6ub8qoemsqfr4ea3m186</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>enforcer.qc</title>
    <ns>0</ns>
    <id>841</id>
    <revision>
      <id>2458</id>
      <timestamp>2013-03-29T10:32:16Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for the [[Enforcer]] [[Monsters | monster]].   &lt;pre&gt; /* ============================================================================== ...&quot;</comment>
      <text xml:space="preserve" bytes="10840">This [[Quake-C]] file contains the code for the [[Enforcer]] [[Monsters | monster]].


&lt;pre&gt;
/*
==============================================================================

SOLDIER / PLAYER

==============================================================================
*/

$cd id1/models/enforcer
$origin 0 -6 24
$base base		
$skin skin

$frame stand1 stand2 stand3 stand4 stand5 stand6 stand7

$frame walk1 walk2 walk3 walk4 walk5 walk6 walk7 walk8 walk9 walk10
$frame walk11 walk12 walk13 walk14 walk15 walk16

$frame run1 run2 run3 run4 run5 run6 run7 run8

$frame attack1 attack2 attack3 attack4 attack5 attack6
$frame attack7 attack8 attack9 attack10

$frame death1 death2 death3 death4 death5 death6 death7 death8
$frame death9 death10 death11 death12 death13 death14

$frame fdeath1 fdeath2 fdeath3 fdeath4 fdeath5 fdeath6 fdeath7 fdeath8
$frame fdeath9 fdeath10 fdeath11

$frame paina1 paina2 paina3 paina4

$frame painb1 painb2 painb3 painb4 painb5

$frame painc1 painc2 painc3 painc4 painc5 painc6 painc7 painc8

$frame paind1 paind2 paind3 paind4 paind5 paind6 paind7 paind8
$frame paind9 paind10 paind11 paind12 paind13 paind14 paind15 paind16
$frame paind17 paind18 paind19


void() Laser_Touch =
{
	local vector org;
	
	if (other == self.owner)
		return;		// don't explode on owner

	if (pointcontents(self.origin) == CONTENT_SKY)
	{
		remove(self);
		return;
	}
	
	sound (self, CHAN_WEAPON, &quot;enforcer/enfstop.wav&quot;, 1, ATTN_STATIC);
	org = self.origin - 8*normalize(self.velocity);

	if (other.health)
	{
		SpawnBlood (org, self.velocity*0.2, 15);
		T_Damage (other, self, self.owner, 15);
	}
	else
	{
		WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
		WriteByte (MSG_BROADCAST, TE_GUNSHOT);
		WriteCoord (MSG_BROADCAST, org_x);
		WriteCoord (MSG_BROADCAST, org_y);
		WriteCoord (MSG_BROADCAST, org_z);
	}
	
	remove(self);	
};

void(vector org, vector vec) LaunchLaser =
{
	local	vector	vec;
		
	if (self.classname == &quot;monster_enforcer&quot;)
		sound (self, CHAN_WEAPON, &quot;enforcer/enfire.wav&quot;, 1, ATTN_NORM);

	vec = normalize(vec);
	
	newmis = spawn();
	newmis.owner = self;
	newmis.movetype = MOVETYPE_FLY;
	newmis.solid = SOLID_BBOX;
	newmis.effects = EF_DIMLIGHT;

	setmodel (newmis, &quot;progs/laser.mdl&quot;);
	setsize (newmis, '0 0 0', '0 0 0');		

	setorigin (newmis, org);

	newmis.velocity = vec * 600;
	newmis.angles = vectoangles(newmis.velocity);

	newmis.nextthink = time + 5;
	newmis.think = SUB_Remove;
	newmis.touch = Laser_Touch;
};



void() enforcer_fire =
{
	local vector org;

	self.effects = self.effects | EF_MUZZLEFLASH;
	makevectors (self.angles);
	
	org = self.origin + v_forward * 30 + v_right * 8.5 + '0 0 16';

	LaunchLaser(org, self.enemy.origin - self.origin);
};

//============================================================================

void()	enf_stand1	=[	$stand1,	enf_stand2	] {ai_stand();};
void()	enf_stand2	=[	$stand2,	enf_stand3	] {ai_stand();};
void()	enf_stand3	=[	$stand3,	enf_stand4	] {ai_stand();};
void()	enf_stand4	=[	$stand4,	enf_stand5	] {ai_stand();};
void()	enf_stand5	=[	$stand5,	enf_stand6	] {ai_stand();};
void()	enf_stand6	=[	$stand6,	enf_stand7	] {ai_stand();};
void()	enf_stand7	=[	$stand7,	enf_stand1	] {ai_stand();};

void()	enf_walk1	=[	$walk1 ,	enf_walk2	] {
if (random() &lt; 0.2)
	sound (self, CHAN_VOICE, &quot;enforcer/idle1.wav&quot;, 1, ATTN_IDLE);
ai_walk(2);};
void()	enf_walk2	=[	$walk2 ,	enf_walk3	] {ai_walk(4);};
void()	enf_walk3	=[	$walk3 ,	enf_walk4	] {ai_walk(4);};
void()	enf_walk4	=[	$walk4 ,	enf_walk5	] {ai_walk(3);};
void()	enf_walk5	=[	$walk5 ,	enf_walk6	] {ai_walk(1);};
void()	enf_walk6	=[	$walk6 ,	enf_walk7	] {ai_walk(2);};
void()	enf_walk7	=[	$walk7 ,	enf_walk8	] {ai_walk(2);};
void()	enf_walk8	=[	$walk8 ,	enf_walk9	] {ai_walk(1);};
void()	enf_walk9	=[	$walk9 ,	enf_walk10	] {ai_walk(2);};
void()	enf_walk10	=[	$walk10,	enf_walk11	] {ai_walk(4);};
void()	enf_walk11	=[	$walk11,	enf_walk12	] {ai_walk(4);};
void()	enf_walk12	=[	$walk12,	enf_walk13	] {ai_walk(1);};
void()	enf_walk13	=[	$walk13,	enf_walk14	] {ai_walk(2);};
void()	enf_walk14	=[	$walk14,	enf_walk15	] {ai_walk(3);};
void()	enf_walk15	=[	$walk15,	enf_walk16	] {ai_walk(4);};
void()	enf_walk16	=[	$walk16,	enf_walk1	] {ai_walk(2);};

void()	enf_run1	=[	$run1  ,	enf_run2	] {
if (random() &lt; 0.2)
	sound (self, CHAN_VOICE, &quot;enforcer/idle1.wav&quot;, 1, ATTN_IDLE);
ai_run(18);};
void()	enf_run2	=[	$run2  ,	enf_run3	] {ai_run(14);};
void()	enf_run3	=[	$run3  ,	enf_run4	] {ai_run(7);};
void()	enf_run4	=[	$run4  ,	enf_run5	] {ai_run(12);};
void()	enf_run5	=[	$run5  ,	enf_run6	] {ai_run(14);};
void()	enf_run6	=[	$run6  ,	enf_run7	] {ai_run(14);};
void()	enf_run7	=[	$run7  ,	enf_run8	] {ai_run(7);};
void()	enf_run8	=[	$run8  ,	enf_run1	] {ai_run(11);};

void()	enf_atk1	=[	$attack1,	enf_atk2	] {ai_face();};
void()	enf_atk2	=[	$attack2,	enf_atk3	] {ai_face();};
void()	enf_atk3	=[	$attack3,	enf_atk4	] {ai_face();};
void()	enf_atk4	=[	$attack4,	enf_atk5	] {ai_face();};
void()	enf_atk5	=[	$attack5,	enf_atk6	] {ai_face();};
void()	enf_atk6	=[	$attack6,	enf_atk7	] {enforcer_fire();};
void()	enf_atk7	=[	$attack7,	enf_atk8	] {ai_face();};
void()	enf_atk8	=[	$attack8,	enf_atk9	] {ai_face();};
void()	enf_atk9	=[	$attack5,	enf_atk10	] {ai_face();};
void()	enf_atk10	=[	$attack6,	enf_atk11	] {enforcer_fire();};
void()	enf_atk11	=[	$attack7,	enf_atk12	] {ai_face();};
void()	enf_atk12	=[	$attack8,	enf_atk13	] {ai_face();};
void()	enf_atk13	=[	$attack9,	enf_atk14	] {ai_face();};
void()	enf_atk14	=[	$attack10,	enf_run1	] {ai_face();
SUB_CheckRefire (enf_atk1);
};

void()	enf_paina1	=[	$paina1,	enf_paina2	] {};
void()	enf_paina2	=[	$paina2,	enf_paina3	] {};
void()	enf_paina3	=[	$paina3,	enf_paina4	] {};
void()	enf_paina4	=[	$paina4,	enf_run1	] {};

void()	enf_painb1	=[	$painb1,	enf_painb2	] {};
void()	enf_painb2	=[	$painb2,	enf_painb3	] {};
void()	enf_painb3	=[	$painb3,	enf_painb4	] {};
void()	enf_painb4	=[	$painb4,	enf_painb5	] {};
void()	enf_painb5	=[	$painb5,	enf_run1	] {};

void()	enf_painc1	=[	$painc1,	enf_painc2	] {};
void()	enf_painc2	=[	$painc2,	enf_painc3	] {};
void()	enf_painc3	=[	$painc3,	enf_painc4	] {};
void()	enf_painc4	=[	$painc4,	enf_painc5	] {};
void()	enf_painc5	=[	$painc5,	enf_painc6	] {};
void()	enf_painc6	=[	$painc6,	enf_painc7	] {};
void()	enf_painc7	=[	$painc7,	enf_painc8	] {};
void()	enf_painc8	=[	$painc8,	enf_run1	] {};

void()	enf_paind1	=[	$paind1,	enf_paind2	] {};
void()	enf_paind2	=[	$paind2,	enf_paind3	] {};
void()	enf_paind3	=[	$paind3,	enf_paind4	] {};
void()	enf_paind4	=[	$paind4,	enf_paind5	] {ai_painforward(2);};
void()	enf_paind5	=[	$paind5,	enf_paind6	] {ai_painforward(1);};
void()	enf_paind6	=[	$paind6,	enf_paind7	] {};
void()	enf_paind7	=[	$paind7,	enf_paind8	] {};
void()	enf_paind8	=[	$paind8,	enf_paind9	] {};
void()	enf_paind9	=[	$paind9,	enf_paind10	] {};
void()	enf_paind10	=[	$paind10,	enf_paind11	] {};
void()	enf_paind11	=[	$paind11,	enf_paind12	] {ai_painforward(1);};
void()	enf_paind12	=[	$paind12,	enf_paind13	] {ai_painforward(1);};
void()	enf_paind13	=[	$paind13,	enf_paind14	] {ai_painforward(1);};
void()	enf_paind14	=[	$paind14,	enf_paind15	] {};
void()	enf_paind15	=[	$paind15,	enf_paind16	] {};
void()	enf_paind16	=[	$paind16,	enf_paind17	] {ai_pain(1);};
void()	enf_paind17	=[	$paind17,	enf_paind18	] {ai_pain(1);};
void()	enf_paind18	=[	$paind18,	enf_paind19	] {};
void()	enf_paind19	=[	$paind19,	enf_run1	] {};

void(entity attacker, float damage)	enf_pain =
{
	local float r;

	r = random ();
	if (self.pain_finished &gt; time)
		return;

	
	if (r &lt; 0.5)
		sound (self, CHAN_VOICE, &quot;enforcer/pain1.wav&quot;, 1, ATTN_NORM);
	else
		sound (self, CHAN_VOICE, &quot;enforcer/pain2.wav&quot;, 1, ATTN_NORM);

	if (r &lt; 0.2)
	{
		self.pain_finished = time + 1;
		enf_paina1 ();
	}
	else if (r &lt; 0.4)
	{
		self.pain_finished = time + 1;
		enf_painb1 ();
	}
	else if (r &lt; 0.7)
	{
		self.pain_finished = time + 1;
		enf_painc1 ();
	}
	else
	{
		self.pain_finished = time + 2;
		enf_paind1 ();
	}
};

//============================================================================




void()	enf_die1	=[	$death1,	enf_die2	] {};
void()	enf_die2	=[	$death2,	enf_die3	] {};
void()	enf_die3	=[	$death3,	enf_die4	]
{self.solid = SOLID_NOT;self.ammo_cells = 5;DropBackpack();};
void()	enf_die4	=[	$death4,	enf_die5	] {ai_forward(14);};
void()	enf_die5	=[	$death5,	enf_die6	] {ai_forward(2);};
void()	enf_die6	=[	$death6,	enf_die7	] {};
void()	enf_die7	=[	$death7,	enf_die8	] {};
void()	enf_die8	=[	$death8,	enf_die9	] {};
void()	enf_die9	=[	$death9,	enf_die10	] {ai_forward(3);};
void()	enf_die10	=[	$death10,	enf_die11	] {ai_forward(5);};
void()	enf_die11	=[	$death11,	enf_die12	] {ai_forward(5);};
void()	enf_die12	=[	$death12,	enf_die13	] {ai_forward(5);};
void()	enf_die13	=[	$death13,	enf_die14	] {};
void()	enf_die14	=[	$death14,	enf_die14	] {};

void()	enf_fdie1	=[	$fdeath1,	enf_fdie2	] {

};
void()	enf_fdie2	=[	$fdeath2,	enf_fdie3	] {};
void()	enf_fdie3	=[	$fdeath3,	enf_fdie4	] 
{self.solid = SOLID_NOT;self.ammo_cells = 5;DropBackpack();};
void()	enf_fdie4	=[	$fdeath4,	enf_fdie5	] {};
void()	enf_fdie5	=[	$fdeath5,	enf_fdie6	] {};
void()	enf_fdie6	=[	$fdeath6,	enf_fdie7	] {};
void()	enf_fdie7	=[	$fdeath7,	enf_fdie8	] {};
void()	enf_fdie8	=[	$fdeath8,	enf_fdie9	] {};
void()	enf_fdie9	=[	$fdeath9,	enf_fdie10	] {};
void()	enf_fdie10	=[	$fdeath10,	enf_fdie11	] {};
void()	enf_fdie11	=[	$fdeath11,	enf_fdie11	] {};


void() enf_die =
{
// check for gib
	if (self.health &lt; -35)
	{
		sound (self, CHAN_VOICE, &quot;player/udeath.wav&quot;, 1, ATTN_NORM);
		ThrowHead (&quot;progs/h_mega.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib1.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib2.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib3.mdl&quot;, self.health);
		return;
	}

// regular death
	sound (self, CHAN_VOICE, &quot;enforcer/death1.wav&quot;, 1, ATTN_NORM);
	if (random() &gt; 0.5)
		enf_die1 ();
	else
		enf_fdie1 ();
};


/*QUAKED monster_enforcer (1 0 0) (-16 -16 -24) (16 16 40) Ambush

*/
void() monster_enforcer =
{
	if (deathmatch)
	{
		remove(self);
		return;
	}
	precache_model2 (&quot;progs/enforcer.mdl&quot;);
	precache_model2 (&quot;progs/h_mega.mdl&quot;);
	precache_model2 (&quot;progs/laser.mdl&quot;);

	precache_sound2 (&quot;enforcer/death1.wav&quot;);
	precache_sound2 (&quot;enforcer/enfire.wav&quot;);
	precache_sound2 (&quot;enforcer/enfstop.wav&quot;);
	precache_sound2 (&quot;enforcer/idle1.wav&quot;);
	precache_sound2 (&quot;enforcer/pain1.wav&quot;);
	precache_sound2 (&quot;enforcer/pain2.wav&quot;);
	precache_sound2 (&quot;enforcer/sight1.wav&quot;);
	precache_sound2 (&quot;enforcer/sight2.wav&quot;);
	precache_sound2 (&quot;enforcer/sight3.wav&quot;);
	precache_sound2 (&quot;enforcer/sight4.wav&quot;);
	
	self.solid = SOLID_SLIDEBOX;
	self.movetype = MOVETYPE_STEP;

	setmodel (self, &quot;progs/enforcer.mdl&quot;);

	setsize (self, '-16 -16 -24', '16 16 40');
	self.health = 80;

	self.th_stand = enf_stand1;
	self.th_walk = enf_walk1;
	self.th_run = enf_run1;
	self.th_pain = enf_pain;
	self.th_die = enf_die;
	self.th_missile = enf_atk1;

	walkmonster_start();
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>9p6s1g1rvu7qv6sj4k5ihsrmou4r508</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>eprint</title>
    <ns>0</ns>
    <id>388</id>
    <revision>
      <id>658</id>
      <timestamp>2008-05-07T17:20:21Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: === Function: eprint ===   void eprint (entity e) 	e = entity to print  Print details about a given entity (for debug purposes).</comment>
      <text xml:space="preserve" bytes="128">=== Function: eprint ===
  void eprint (entity e)
	e = entity to print

Print details about a given entity (for debug purposes).</text>
      <sha1>4qfjocteq51vfipwtj1xvbxk0w6k66g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>659</id>
      <parentid>658</parentid>
      <timestamp>2008-05-07T17:20:48Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="128">=== Function: eprint ===
  void eprint (entity e)

e = entity to print

Print details about a given entity (for debug purposes).</text>
      <sha1>8pien1t9ivf7i0p3d8uuwkgnd1mnpwv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2522</id>
      <parentid>659</parentid>
      <timestamp>2013-03-29T14:22:01Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Eprint]] to [[eprint]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="128">=== Function: eprint ===
  void eprint (entity e)

e = entity to print

Print details about a given entity (for debug purposes).</text>
      <sha1>8pien1t9ivf7i0p3d8uuwkgnd1mnpwv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>error</title>
    <ns>0</ns>
    <id>621</id>
    <revision>
      <id>1730</id>
      <timestamp>2013-03-24T23:03:25Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;====Syntax:==== &lt;code&gt;void error(string message)&lt;/code&gt;  Halts execution and displays and error message. ====Parameters:==== :&lt;code&gt;message&lt;/code&gt; - The error message to displ...&quot;</comment>
      <text xml:space="preserve" bytes="231">====Syntax:====
&lt;code&gt;void error(string message)&lt;/code&gt;

Halts execution and displays and error message.
====Parameters:====
:&lt;code&gt;message&lt;/code&gt; - The error message to display
====Returns:====
:void


[[Category:QuakeC Function]]</text>
      <sha1>nkc31ormis7tvbbc2yitycrpf3yy4qn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>event lightning</title>
    <ns>0</ns>
    <id>1027</id>
    <revision>
      <id>2927</id>
      <timestamp>2013-04-20T21:21:38Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <comment>created page, added content for event_lightning</comment>
      <text xml:space="preserve" bytes="2774">{{DISPLAYTITLE:event_lightning}}

{{Infobox_entity
| classname = event_lightning
| commonname = Chthon death trap (end Boss of the Shareware episode)
| type = Point entity
| class = [[Entity (Misc)|entity]]
| dimensions = NA
| quakec = [[entity.qc]]
| precaches =
list precached&lt;br&gt;
models and sounds&lt;br&gt;
here. Otherwise&lt;br&gt;
leave empty&lt;br&gt;
}}

The '''event_lightning''' entity is the lightning that kills the end boss (Chton) at the end of Episode one (the Shareware episode).

== Usage ==
There really is only one way to use this entity and it can be a little tricky. The entity tells the game engine to turn two doors into electrodes and then to send an electrical &quot;Zap&quot; between the two of them. They both must have the target set to &quot;lightning&quot; for event_lightning to know that they are electrodes. They must also be at the same horizontal plane or the trigger will not go off.

In the released Romero map files these are the attributes of all of the elements for event_lightning as used in e1m7.
====================================
event_lightning entity:
targetname: t14
====================================
Electrodes
====================================
Electrode door 1:
targetname: t12
Angles: -90 0 0
lip: 64
Wait: 20
Target: lightning
Speed: 100
Flags: starts open
====================================
Electrode door 2:
targetname: t13
Angles: -90 0 0
lip: 64
Wait: 20
Target: lightning
Speed: 100
Flags: starts open
====================================
Buttons
====================================
Button for electrode door 1:
angles: -90 0 0
target: t12
speed: 40
Lip: 4
health: 0
wait: 1
====================================
Button for electrode door 2:
angles: -90 0 0
target: t13
speed: 40
Lip: 4
health: 0
wait: 1
====================================
Button for triggering event_lightning:
angles: -90 0 0
target: t14
speed: 40
Lip: 4
health: 0
wait: 1

== Attributes ==
Note that event_lightning can be placed anywhere inside the map much like trigger_relay. The only available attribute is targetname.

=== Keys ===

===Spawnflags===
The entity_name entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| flag #
| flag name in editor (TrenchBroom is ideal)
| Description of flag effects
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Entity
}}

==Definitions==

===FGD Definition===
&lt;pre&gt;
[ @PointClass base(Appearflags, Targetname) = event_lightning : &quot;Chthon's lightning&quot; [] ]
&lt;/pre&gt;
===DEF Definition===
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
[ unavailable ]
&lt;/pre&gt;

[[Category:Quake entities]]</text>
      <sha1>kmj8grtsu08fauo47r5lpfqhw63j4t2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2928</id>
      <parentid>2927</parentid>
      <timestamp>2013-04-20T21:25:08Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2786">{{DISPLAYTITLE:event_lightning}}

{{Infobox_entity
| classname = event_lightning
| commonname = Chthon death trap (end Boss of the Shareware episode)
| type = Point entity
| class = [[Entity (Misc)|entity]]
| dimensions = NA
| quakec = [[entity.qc]]
| precaches =
list precached&lt;br&gt;
models and sounds&lt;br&gt;
here. Otherwise&lt;br&gt;
leave empty&lt;br&gt;
}}

The '''event_lightning''' entity is the lightning that kills the end boss (Chton) at the end of Episode one (the Shareware episode).

== Usage ==
There really is only one way to use this entity and it can be a little tricky. The entity tells the game engine to turn two doors into electrodes and then to send an electrical &quot;Zap&quot; between the two of them. They both must have the target set to &quot;lightning&quot; for event_lightning to know that they are electrodes. They must also be at the same horizontal plane or the trigger will not go off.

In the released Romero map files these are the attributes of all of the elements for event_lightning as used in e1m7.
&lt;pre&gt;
====================================
event_lightning entity:
targetname: t14
====================================
Electrodes
====================================
Electrode door 1:
targetname: t12
Angles: -90 0 0
lip: 64
Wait: 20
Target: lightning
Speed: 100
Flags: starts open
====================================
Electrode door 2:
targetname: t13
Angles: -90 0 0
lip: 64
Wait: 20
Target: lightning
Speed: 100
Flags: starts open
====================================
Buttons
====================================
Button for electrode door 1:
angles: -90 0 0
target: t12
speed: 40
Lip: 4
health: 0
wait: 1
====================================
Button for electrode door 2:
angles: -90 0 0
target: t13
speed: 40
Lip: 4
health: 0
wait: 1
====================================
Button for triggering event_lightning:
angles: -90 0 0
target: t14
speed: 40
Lip: 4
health: 0
wait: 1
&lt;/pre&gt;
== Attributes ==
Note that event_lightning can be placed anywhere inside the map much like trigger_relay. The only available attribute is targetname.

=== Keys ===

===Spawnflags===
The entity_name entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| flag #
| flag name in editor (TrenchBroom is ideal)
| Description of flag effects
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Entity
}}

==Definitions==

===FGD Definition===
&lt;pre&gt;
[ @PointClass base(Appearflags, Targetname) = event_lightning : &quot;Chthon's lightning&quot; [] ]
&lt;/pre&gt;
===DEF Definition===
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
[ unavailable ]
&lt;/pre&gt;

[[Category:Quake entities]]</text>
      <sha1>pt1601afk1fa97z98hfiftk0io16khr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2929</id>
      <parentid>2928</parentid>
      <timestamp>2013-04-21T03:41:12Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2772">{{DISPLAYTITLE:event_lightning}}

{{Infobox_entity
| classname = event_lightning
| commonname = Chthon death trap (end Boss of the Shareware episode)
| type = Point entity
| class = [[Entity (Misc)|entity]]
| dimensions = NA
| quakec = [[entity.qc]]
| precaches =
list precached&lt;br&gt;
models and sounds&lt;br&gt;
here. Otherwise&lt;br&gt;
leave empty&lt;br&gt;
}}

The '''event_lightning''' entity is the lightning that kills the end boss (Chton) at the end of Episode one (the Shareware episode).

== Usage ==
Rules for using entity_lightning.
1) The event_lightning will only activate when both of the attached door entities are stopped (open or closed).
1) The lightning is 100% horizontal (''check vertical'') so if one door/electrode is off in the horizontal plane by even one unit it won't work.
3) The lightning will go diagonal in the horizontal plane. (''check vertical'')

In the released Romero map files these are the attributes of all of the elements for event_lightning '''as used''' in e1m7.
&lt;pre&gt;
====================================
event_lightning entity:
targetname: t14
====================================
Electrodes
====================================
Electrode door 1:
targetname: t12
Angles: -90 0 0
lip: 64
Wait: 20
Target: lightning
Speed: 100
Flags: starts open
====================================
Electrode door 2:
targetname: t13
Angles: -90 0 0
lip: 64
Wait: 20
Target: lightning
Speed: 100
Flags: starts open
====================================
Buttons
====================================
Button for electrode door 1:
angles: -90 0 0
target: t12
speed: 40
Lip: 4
health: 0
wait: 1
====================================
Button for electrode door 2:
angles: -90 0 0
target: t13
speed: 40
Lip: 4
health: 0
wait: 1
====================================
Button for triggering event_lightning:
angles: -90 0 0
target: t14
speed: 40
Lip: 4
health: 0
wait: 1
&lt;/pre&gt;
== Attributes ==
Note that event_lightning can be placed anywhere inside the map much like trigger_relay. The only available attribute is targetname.

=== Keys ===

===Spawnflags===
The entity_name entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| flag #
| flag name in editor (TrenchBroom is ideal)
| Description of flag effects
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Entity
}}

==Definitions==

===FGD Definition===
&lt;pre&gt;
[ @PointClass base(Appearflags, Targetname) = event_lightning : &quot;Chthon's lightning&quot; [] ]
&lt;/pre&gt;
===DEF Definition===
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
[ unavailable ]
&lt;/pre&gt;

[[Category:Quake entities]]</text>
      <sha1>lcerujbrsgx1552x9uxi30kx6n99x80</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2930</id>
      <parentid>2929</parentid>
      <timestamp>2013-04-21T03:44:28Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <text xml:space="preserve" bytes="2774">{{DISPLAYTITLE:event_lightning}}

{{Infobox_entity
| classname = event_lightning
| commonname = Chthon death trap (end Boss of the Shareware episode)
| type = Point entity
| class = [[Entity (Misc)|entity]]
| dimensions = NA
| quakec = [[entity.qc]]
| precaches =
list precached&lt;br&gt;
models and sounds&lt;br&gt;
here. Otherwise&lt;br&gt;
leave empty&lt;br&gt;
}}

The '''event_lightning''' entity is the lightning that kills the end boss (Chton) at the end of Episode one (the Shareware episode).

== Usage ==
Rules for using entity_lightning.
1) The event_lightning will only activate when both of the attached door entities are stopped (open or closed).

2) The lightning is 100% horizontal (''check vertical'') so if one door/electrode is off in the horizontal plane by even one unit it won't work.

3) The lightning will go diagonal in the horizontal plane. (''check vertical'')

In the released Romero map files these are the attributes of all of the elements for event_lightning '''as used''' in e1m7.
&lt;pre&gt;
====================================
event_lightning entity:
targetname: t14
====================================
Electrodes
====================================
Electrode door 1:
targetname: t12
Angles: -90 0 0
lip: 64
Wait: 20
Target: lightning
Speed: 100
Flags: starts open
====================================
Electrode door 2:
targetname: t13
Angles: -90 0 0
lip: 64
Wait: 20
Target: lightning
Speed: 100
Flags: starts open
====================================
Buttons
====================================
Button for electrode door 1:
angles: -90 0 0
target: t12
speed: 40
Lip: 4
health: 0
wait: 1
====================================
Button for electrode door 2:
angles: -90 0 0
target: t13
speed: 40
Lip: 4
health: 0
wait: 1
====================================
Button for triggering event_lightning:
angles: -90 0 0
target: t14
speed: 40
Lip: 4
health: 0
wait: 1
&lt;/pre&gt;
== Attributes ==
Note that event_lightning can be placed anywhere inside the map much like trigger_relay. The only available attribute is targetname.

=== Keys ===

===Spawnflags===
The entity_name entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| flag #
| flag name in editor (TrenchBroom is ideal)
| Description of flag effects
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Entity
}}

==Definitions==

===FGD Definition===
&lt;pre&gt;
[ @PointClass base(Appearflags, Targetname) = event_lightning : &quot;Chthon's lightning&quot; [] ]
&lt;/pre&gt;
===DEF Definition===
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
[ unavailable ]
&lt;/pre&gt;

[[Category:Quake entities]]</text>
      <sha1>gk7h75o8y2q7803tdl8p7hri41sdufl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2979</id>
      <parentid>2930</parentid>
      <timestamp>2013-05-30T15:23:38Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <minor/>
      <comment>/* Usage */</comment>
      <text xml:space="preserve" bytes="2733">{{DISPLAYTITLE:event_lightning}}

{{Infobox_entity
| classname = event_lightning
| commonname = Chthon death trap (end Boss of the Shareware episode)
| type = Point entity
| class = [[Entity (Misc)|entity]]
| dimensions = NA
| quakec = [[entity.qc]]
| precaches =
list precached&lt;br&gt;
models and sounds&lt;br&gt;
here. Otherwise&lt;br&gt;
leave empty&lt;br&gt;
}}

The '''event_lightning''' entity is the lightning that kills the end boss (Chton) at the end of Episode one (the Shareware episode).

== Usage ==
Rules for using entity_lightning.
1) The event_lightning will only activate when both of the attached door entities are stopped (open or closed).

2) The lightning is 100% horizontal so if one door/electrode is off in the horizontal plane by even one unit it won't work.

3) The lightning will go diagonal in the horizontal plane.

In the released Romero map files these are the attributes of all of the elements for event_lightning '''as used''' in e1m7.
&lt;pre&gt;
====================================
event_lightning entity:
targetname: t14
====================================
Electrodes
====================================
Electrode door 1:
targetname: t12
Angles: -90 0 0
lip: 64
Wait: 20
Target: lightning
Speed: 100
Flags: starts open
====================================
Electrode door 2:
targetname: t13
Angles: -90 0 0
lip: 64
Wait: 20
Target: lightning
Speed: 100
Flags: starts open
====================================
Buttons
====================================
Button for electrode door 1:
angles: -90 0 0
target: t12
speed: 40
Lip: 4
health: 0
wait: 1
====================================
Button for electrode door 2:
angles: -90 0 0
target: t13
speed: 40
Lip: 4
health: 0
wait: 1
====================================
Button for triggering event_lightning:
angles: -90 0 0
target: t14
speed: 40
Lip: 4
health: 0
wait: 1
&lt;/pre&gt;

== Attributes ==
Note that event_lightning can be placed anywhere inside the map much like trigger_relay. The only available attribute is targetname.

=== Keys ===

===Spawnflags===
The entity_name entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| flag #
| flag name in editor (TrenchBroom is ideal)
| Description of flag effects
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Entity
}}

==Definitions==

===FGD Definition===
&lt;pre&gt;
[ @PointClass base(Appearflags, Targetname) = event_lightning : &quot;Chthon's lightning&quot; [] ]
&lt;/pre&gt;
===DEF Definition===
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
[ unavailable ]
&lt;/pre&gt;

[[Category:Quake entities]]</text>
      <sha1>o4l4zl8a7cdcleabtd2q1fna5zw3et9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>fabs</title>
    <ns>0</ns>
    <id>189</id>
    <revision>
      <id>365</id>
      <timestamp>2008-02-22T19:19:48Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  float '''fabs'''(float ''val'')  Returns absolute value of ''val'' (like the equivalent function in C).</comment>
      <text xml:space="preserve" bytes="104"> float '''fabs'''(float ''val'')

Returns absolute value of ''val'' (like the equivalent function in C).</text>
      <sha1>kelh2pvaph3eeqfxk81w8k4eu1db95p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2401</id>
      <parentid>365</parentid>
      <timestamp>2013-03-28T15:03:12Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Spirit moved page [[Fabs]] to [[fabs]]: lowercase</comment>
      <text xml:space="preserve" bytes="104"> float '''fabs'''(float ''val'')

Returns absolute value of ''val'' (like the equivalent function in C).</text>
      <sha1>kelh2pvaph3eeqfxk81w8k4eu1db95p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>fiend</title>
    <ns>0</ns>
    <id>1033</id>
    <redirect title="Fiend" />
    <revision>
      <id>2939</id>
      <timestamp>2013-05-04T15:33:47Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <comment>we need this</comment>
      <text xml:space="preserve" bytes="19">#REDIRECT [[Fiend]]</text>
      <sha1>8laqccggf3h8jw64y3kyb0czdp7kg08</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>fight.qc</title>
    <ns>0</ns>
    <id>842</id>
    <revision>
      <id>2459</id>
      <timestamp>2013-03-29T10:34:18Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for the general [[Monsters | monster]] fight behavior.   &lt;pre&gt;  /*  A monster is in fight mode if it thinks it can effectively attack i...&quot;</comment>
      <text xml:space="preserve" bytes="7330">This [[Quake-C]] file contains the code for the general [[Monsters | monster]] fight behavior.


&lt;pre&gt;

/*

A monster is in fight mode if it thinks it can effectively attack its
enemy.

When it decides it can't attack, it goes into hunt mode.

*/

float(float v) anglemod;

void() knight_atk1;
void() knight_runatk1;
void() ogre_smash1;
void() ogre_swing1;

void() sham_smash1;
void() sham_swingr1;
void() sham_swingl1;

float()	DemonCheckAttack;
void(float side)	Demon_Melee;

void(vector dest) ChooseTurn;

void() ai_face;


float	enemy_vis, enemy_infront, enemy_range;
float	enemy_yaw;


void() knight_attack =
{
	local float		len;
	
// decide if now is a good swing time
	len = vlen(self.enemy.origin+self.enemy.view_ofs - (self.origin+self.view_ofs));
	
	if (len&lt;80)
		knight_atk1 ();
	else
		knight_runatk1 ();
};

//=============================================================================

/*
===========
CheckAttack

The player is in view, so decide to move or launch an attack
Returns FALSE if movement should continue
============
*/
float() CheckAttack =
{
	local vector	spot1, spot2;	
	local entity	targ;
	local float		chance;

	targ = self.enemy;
	
// see if any entities are in the way of the shot
	spot1 = self.origin + self.view_ofs;
	spot2 = targ.origin + targ.view_ofs;

	traceline (spot1, spot2, FALSE, self);

	if (trace_ent != targ)
		return FALSE;		// don't have a clear shot
			
	if (trace_inopen &amp;&amp; trace_inwater)
		return FALSE;			// sight line crossed contents

	if (enemy_range == RANGE_MELEE)
	{	// melee attack
		if (self.th_melee)
		{
			if (self.classname == &quot;monster_knight&quot;)
				knight_attack ();
			else
				self.th_melee ();
			return TRUE;
		}
	}
	
// missile attack
	if (!self.th_missile)
		return FALSE;
		
	if (time &lt; self.attack_finished)
		return FALSE;
		
	if (enemy_range == RANGE_FAR)
		return FALSE;
		
	if (enemy_range == RANGE_MELEE)
	{
		chance = 0.9;
		self.attack_finished = 0;
	}
	else if (enemy_range == RANGE_NEAR)
	{
		if (self.th_melee)
			chance = 0.2;
		else
			chance = 0.4;
	}
	else if (enemy_range == RANGE_MID)
	{
		if (self.th_melee)
			chance = 0.05;
		else
			chance = 0.1;
	}
	else
		chance = 0;

	if (random () &lt; chance)
	{
		self.th_missile ();
		SUB_AttackFinished (2*random());
		return TRUE;
	}

	return FALSE;
};


/*
=============
ai_face

Stay facing the enemy
=============
*/
void() ai_face =
{
	self.ideal_yaw = vectoyaw(self.enemy.origin - self.origin);
	ChangeYaw ();
};

/*
=============
ai_charge

The monster is in a melee attack, so get as close as possible to .enemy
=============
*/
float (entity targ) visible;
float(entity targ) infront;
float(entity targ) range;

void(float d) ai_charge =
{
	ai_face ();	
	movetogoal (d);		// done in C code...
};

void() ai_charge_side =
{
	local	vector	dtemp;
	local	float	heading;
	
// aim to the left of the enemy for a flyby

	self.ideal_yaw = vectoyaw(self.enemy.origin - self.origin);
	ChangeYaw ();

	makevectors (self.angles);
	dtemp = self.enemy.origin - 30*v_right;
	heading = vectoyaw(dtemp - self.origin);
	
	walkmove(heading, 20);
};


/*
=============
ai_melee

=============
*/
void() ai_melee =
{
	local vector	delta;
	local float 	ldmg;

	if (!self.enemy)
		return;		// removed before stroke
		
	delta = self.enemy.origin - self.origin;

	if (vlen(delta) &gt; 60)
		return;
		
	ldmg = (random() + random() + random()) * 3;
	T_Damage (self.enemy, self, self, ldmg);
};


void() ai_melee_side =
{
	local vector	delta;
	local float 	ldmg;

	if (!self.enemy)
		return;		// removed before stroke
		
	ai_charge_side();
	
	delta = self.enemy.origin - self.origin;

	if (vlen(delta) &gt; 60)
		return;
	if (!CanDamage (self.enemy, self))
		return;
	ldmg = (random() + random() + random()) * 3;
	T_Damage (self.enemy, self, self, ldmg);
};


//=============================================================================

/*
===========
SoldierCheckAttack

The player is in view, so decide to move or launch an attack
Returns FALSE if movement should continue
============
*/
float() SoldierCheckAttack =
{
	local vector	spot1, spot2;	
	local entity	targ;
	local float		chance;

	targ = self.enemy;
	
// see if any entities are in the way of the shot
	spot1 = self.origin + self.view_ofs;
	spot2 = targ.origin + targ.view_ofs;

	traceline (spot1, spot2, FALSE, self);

	if (trace_inopen &amp;&amp; trace_inwater)
		return FALSE;			// sight line crossed contents

	if (trace_ent != targ)
		return FALSE;	// don't have a clear shot
			
	
// missile attack
	if (time &lt; self.attack_finished)
		return FALSE;
		
	if (enemy_range == RANGE_FAR)
		return FALSE;
		
	if (enemy_range == RANGE_MELEE)
		chance = 0.9;
	else if (enemy_range == RANGE_NEAR)
		chance = 0.4;
	else if (enemy_range == RANGE_MID)
		chance = 0.05;
	else
		chance = 0;

	if (random () &lt; chance)
	{
		self.th_missile ();
		SUB_AttackFinished (1 + random());
		if (random() &lt; 0.3)
			self.lefty = !self.lefty;

		return TRUE;
	}

	return FALSE;
};
//=============================================================================

/*
===========
ShamCheckAttack

The player is in view, so decide to move or launch an attack
Returns FALSE if movement should continue
============
*/
float() ShamCheckAttack =
{
	local vector	spot1, spot2;	
	local entity	targ;
	local float		chance;
	local float		enemy_yaw;

	if (enemy_range == RANGE_MELEE)
	{
		if (CanDamage (self.enemy, self))
		{
			self.attack_state = AS_MELEE;
			return TRUE;
		}
	}

	if (time &lt; self.attack_finished)
		return FALSE;
	
	if (!enemy_vis)
		return FALSE;
		
	targ = self.enemy;
	
// see if any entities are in the way of the shot
	spot1 = self.origin + self.view_ofs;
	spot2 = targ.origin + targ.view_ofs;

	if (vlen(spot1 - spot2) &gt; 600)
		return FALSE;

	traceline (spot1, spot2, FALSE, self);

	if (trace_inopen &amp;&amp; trace_inwater)
		return FALSE;			// sight line crossed contents

	if (trace_ent != targ)
	{
		return FALSE;	// don't have a clear shot
	}
			
// missile attack
	if (enemy_range == RANGE_FAR)
		return FALSE;
		
	self.attack_state = AS_MISSILE;
	SUB_AttackFinished (2 + 2*random());
	return TRUE;
};

//============================================================================

/*
===========
OgreCheckAttack

The player is in view, so decide to move or launch an attack
Returns FALSE if movement should continue
============
*/
float() OgreCheckAttack =
{
	local vector	spot1, spot2;	
	local entity	targ;
	local float		chance;

	if (enemy_range == RANGE_MELEE)
	{
		if (CanDamage (self.enemy, self))
		{
			self.attack_state = AS_MELEE;
			return TRUE;
		}
	}

	if (time &lt; self.attack_finished)
		return FALSE;
	
	if (!enemy_vis)
		return FALSE;
		
	targ = self.enemy;
	
// see if any entities are in the way of the shot
	spot1 = self.origin + self.view_ofs;
	spot2 = targ.origin + targ.view_ofs;

	traceline (spot1, spot2, FALSE, self);

	if (trace_inopen &amp;&amp; trace_inwater)
		return FALSE;			// sight line crossed contents

	if (trace_ent != targ)
	{
		return FALSE;	// don't have a clear shot
	}
			
// missile attack
	if (time &lt; self.attack_finished)
		return FALSE;
		
	if (enemy_range == RANGE_FAR)
		return FALSE;
		
	else if (enemy_range == RANGE_NEAR)
		chance = 0.10;
	else if (enemy_range == RANGE_MID)
		chance = 0.05;
	else
		chance = 0;

	self.attack_state = AS_MISSILE;
	SUB_AttackFinished (1 + 2*random());
	return TRUE;
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>7ynu64p9atw8i4qiqkdhyj0bocziyv9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>find</title>
    <ns>0</ns>
    <id>633</id>
    <revision>
      <id>1863</id>
      <timestamp>2013-03-25T00:54:52Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;====Syntax:==== &lt;code&gt;entity find(entity start, .string fld, string match)&lt;/code&gt;  Returns an entity who's entity variable matches &lt;code&gt;match&lt;/code&gt; by searching through the ...&quot;</comment>
      <text xml:space="preserve" bytes="565">====Syntax:====
&lt;code&gt;entity find(entity start, .string fld, string match)&lt;/code&gt;

Returns an entity who's entity variable matches &lt;code&gt;match&lt;/code&gt; by searching through the edict list starting from &lt;code&gt;start&lt;/code&gt;.
====Parameters:====
:&lt;code&gt;start&lt;/code&gt; - The entity to start searching from.  Use &lt;code&gt;world&lt;/code&gt; to start from the top of the list.
:&lt;code&gt;fld&lt;/code&gt; - The field to check for matches.  Eg: .targetname
:&lt;code&gt;match&lt;/code&gt; - The values to check for.
====Returns:====
:Returns an entity that matches the criteria


[[Category:QuakeC Function]]</text>
      <sha1>8hp5j6fd0bfrf5nx5i3f7bcjdrx6uwd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>findchain</title>
    <ns>0</ns>
    <id>556</id>
    <revision>
      <id>1428</id>
      <timestamp>2009-10-23T23:15:45Z</timestamp>
      <contributor>
        <ip>94.193.174.213</ip>
      </contributor>
      <comment>initial revision</comment>
      <text xml:space="preserve" bytes="423">entity '''findchain''' (.string ''fld'', string ''match'')

* fld = label of field to query  
* match = value in field to match on  

The functionality of [[find]] in the format of [[findradius]] - chains up matches into the .chain field of entities. Proper use would look something like:

 local entity head;
 head = findchain(classname, &quot;player&quot;);
 while (head)
 {
   T_Damage(head,self,self,10);
   head = head.chain;
 }</text>
      <sha1>5tgevnfax85iczxh4kwnprbvzkpn1tq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2524</id>
      <parentid>1428</parentid>
      <timestamp>2013-03-29T14:22:02Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Findchain]] to [[findchain]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="423">entity '''findchain''' (.string ''fld'', string ''match'')

* fld = label of field to query  
* match = value in field to match on  

The functionality of [[find]] in the format of [[findradius]] - chains up matches into the .chain field of entities. Proper use would look something like:

 local entity head;
 head = findchain(classname, &quot;player&quot;);
 while (head)
 {
   T_Damage(head,self,self,10);
   head = head.chain;
 }</text>
      <sha1>5tgevnfax85iczxh4kwnprbvzkpn1tq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>findentity</title>
    <ns>0</ns>
    <id>203</id>
    <revision>
      <id>382</id>
      <timestamp>2008-02-23T15:51:25Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  entity '''findentity'''(entity ''start'', .entity field, entity match)  finds an entity, similar to [[Find]], but for entity fields.</comment>
      <text xml:space="preserve" bytes="133"> entity '''findentity'''(entity ''start'', .entity field, entity match)

finds an entity, similar to [[Find]], but for entity fields.</text>
      <sha1>e1btkidzfjoxaofq6netlv9deqll2qw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2526</id>
      <parentid>382</parentid>
      <timestamp>2013-03-29T14:22:02Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Findentity]] to [[findentity]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="133"> entity '''findentity'''(entity ''start'', .entity field, entity match)

finds an entity, similar to [[Find]], but for entity fields.</text>
      <sha1>e1btkidzfjoxaofq6netlv9deqll2qw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>findfloat</title>
    <ns>0</ns>
    <id>204</id>
    <revision>
      <id>385</id>
      <timestamp>2008-02-23T16:01:14Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  entity '''findfloat'''(entity start, .float fld, float match)  finds an entity, similar to [[Find]], but for float fields.</comment>
      <text xml:space="preserve" bytes="123"> entity '''findfloat'''(entity start, .float fld, float match)

finds an entity, similar to [[Find]], but for float fields.</text>
      <sha1>2kuamoa63gvdazq5u4ft3nmyw0iq4tl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2403</id>
      <parentid>385</parentid>
      <timestamp>2013-03-28T15:03:38Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Spirit moved page [[Findfloat]] to [[findfloat]]: lowercase</comment>
      <text xml:space="preserve" bytes="123"> entity '''findfloat'''(entity start, .float fld, float match)

finds an entity, similar to [[Find]], but for float fields.</text>
      <sha1>2kuamoa63gvdazq5u4ft3nmyw0iq4tl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>findradius</title>
    <ns>0</ns>
    <id>748</id>
    <revision>
      <id>2136</id>
      <timestamp>2013-03-26T00:00:40Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;====Syntax:==== &lt;code&gt;entity findradius(vector org, float rad)&lt;/code&gt;  Finds all entities in a sphere of the given radius and origin. ====Parameters:==== :&lt;code&gt;org&lt;/code&gt; - T...&quot;</comment>
      <text xml:space="preserve" bytes="1385">====Syntax:====
&lt;code&gt;entity findradius(vector org, float rad)&lt;/code&gt;

Finds all entities in a sphere of the given radius and origin.
====Parameters:====
:&lt;code&gt;org&lt;/code&gt; - The center of the sphere to perform the search.
:&lt;code&gt;rad&lt;/code&gt; - The radius of the sphere to perform the search.
====Returns:====
:Returns an entity that is the first in a list of entities linked together by the .chain field.
====Other Details:====
The point at which findradius considers an entity to be 'in range' is computed based on the center of an entity's bounding box, not its origin.
Entities with SOLID_NOT are completely ignored.
When this function is run, it builds the list of entities by setting the .chain field on all entities it finds.  This means that if other findradius functions are called and they affect the same entities, the entity links for the previous list will be broken.  Make sure you do not call findradius when it is nested inside a previous findradius loop.
====Example:====
 local	entity	head;
 head = findradius(self.origin, 200);
 while (head)
 {
 	head = head.chain;
 }
 
In this example, findradius searches 200 units around '''self''' and creates a list of entities linked together with .chain and returns the first in the list.  The while loop then continues to move through the list until it reaches the end where .chain is '''world'''.

[[Category:QuakeC Function]]</text>
      <sha1>117l8ank8f6ig8rrf3hkhq8nyjtb8y5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>fish.qc</title>
    <ns>0</ns>
    <id>843</id>
    <revision>
      <id>2460</id>
      <timestamp>2013-03-29T10:36:14Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for the [[Rotfish]] [[Monsters | monster]].   &lt;pre&gt; $cd id1/models/fish $origin 0 0 24 $base base		 $skin skin  $frame attack1 attack2 ...&quot;</comment>
      <text xml:space="preserve" bytes="7858">This [[Quake-C]] file contains the code for the [[Rotfish]] [[Monsters | monster]].


&lt;pre&gt;
$cd id1/models/fish
$origin 0 0 24
$base base		
$skin skin

$frame attack1 attack2 attack3 attack4 attack5 attack6 
$frame attack7 attack8 attack9 attack10 attack11 attack12 attack13 
$frame attack14 attack15 attack16 attack17 attack18 

$frame death1 death2 death3 death4 death5 death6 death7 
$frame death8 death9 death10 death11 death12 death13 death14 death15 
$frame death16 death17 death18 death19 death20 death21 

$frame swim1 swim2 swim3 swim4 swim5 swim6 swim7 swim8 
$frame swim9 swim10 swim11 swim12 swim13 swim14 swim15 swim16 swim17 
$frame swim18 

$frame pain1 pain2 pain3 pain4 pain5 pain6 pain7 pain8 
$frame pain9 

void() swimmonster_start;

void() f_stand1  =[      $swim1, f_stand2 ] {ai_stand();};
void() f_stand2  =[      $swim2, f_stand3 ] {ai_stand();};
void() f_stand3  =[      $swim3, f_stand4 ] {ai_stand();};
void() f_stand4  =[      $swim4, f_stand5 ] {ai_stand();};
void() f_stand5  =[      $swim5, f_stand6 ] {ai_stand();};
void() f_stand6  =[      $swim6, f_stand7 ] {ai_stand();};
void() f_stand7  =[      $swim7, f_stand8 ] {ai_stand();};
void() f_stand8  =[      $swim8, f_stand9 ] {ai_stand();};
void() f_stand9  =[      $swim9, f_stand10  ] {ai_stand();};
void() f_stand10 =[      $swim10, f_stand11 ] {ai_stand();};
void() f_stand11 =[      $swim11, f_stand12 ] {ai_stand();};
void() f_stand12 =[      $swim12, f_stand13 ] {ai_stand();};
void() f_stand13 =[      $swim13, f_stand14 ] {ai_stand();};
void() f_stand14 =[      $swim14, f_stand15 ] {ai_stand();};
void() f_stand15 =[      $swim15, f_stand16 ] {ai_stand();};
void() f_stand16 =[      $swim16, f_stand17 ] {ai_stand();};
void() f_stand17 =[      $swim17, f_stand18 ] {ai_stand();};
void() f_stand18 =[      $swim18, f_stand1 ] {ai_stand();};

void() f_walk1  =[      $swim1, f_walk2 ] {ai_walk(8);};
void() f_walk2  =[      $swim2, f_walk3 ] {ai_walk(8);};
void() f_walk3  =[      $swim3, f_walk4 ] {ai_walk(8);};
void() f_walk4  =[      $swim4, f_walk5 ] {ai_walk(8);};
void() f_walk5  =[      $swim5, f_walk6 ] {ai_walk(8);};
void() f_walk6  =[      $swim6, f_walk7 ] {ai_walk(8);};
void() f_walk7  =[      $swim7, f_walk8 ] {ai_walk(8);};
void() f_walk8  =[      $swim8, f_walk9 ] {ai_walk(8);};
void() f_walk9  =[      $swim9, f_walk10  ] {ai_walk(8);};
void() f_walk10 =[      $swim10, f_walk11 ] {ai_walk(8);};
void() f_walk11 =[      $swim11, f_walk12 ] {ai_walk(8);};
void() f_walk12 =[      $swim12, f_walk13 ] {ai_walk(8);};
void() f_walk13 =[      $swim13, f_walk14 ] {ai_walk(8);};
void() f_walk14 =[      $swim14, f_walk15 ] {ai_walk(8);};
void() f_walk15 =[      $swim15, f_walk16 ] {ai_walk(8);};
void() f_walk16 =[      $swim16, f_walk17 ] {ai_walk(8);};
void() f_walk17 =[      $swim17, f_walk18 ] {ai_walk(8);};
void() f_walk18 =[      $swim18, f_walk1 ] {ai_walk(8);};

void() f_run1  =[      $swim1, f_run2 ] {ai_run(12);
	if (random() &lt; 0.5)
		sound (self, CHAN_VOICE, &quot;fish/idle.wav&quot;, 1, ATTN_NORM);
};
void() f_run2  =[      $swim3, f_run3 ] {ai_run(12);};
void() f_run3  =[      $swim5, f_run4 ] {ai_run(12);};
void() f_run4  =[      $swim7, f_run5 ] {ai_run(12);};
void() f_run5  =[      $swim9, f_run6 ] {ai_run(12);};
void() f_run6  =[      $swim11, f_run7 ] {ai_run(12);};
void() f_run7  =[      $swim13, f_run8 ] {ai_run(12);};
void() f_run8  =[      $swim15, f_run9 ] {ai_run(12);};
void() f_run9  =[      $swim17, f_run1 ] {ai_run(12);};

void() fish_melee =
{
	local vector	delta;
	local float 	ldmg;

	if (!self.enemy)
		return;		// removed before stroke
		
	delta = self.enemy.origin - self.origin;

	if (vlen(delta) &gt; 60)
		return;
		
	sound (self, CHAN_VOICE, &quot;fish/bite.wav&quot;, 1, ATTN_NORM);
	ldmg = (random() + random()) * 3;
	T_Damage (self.enemy, self, self, ldmg);
};

void() f_attack1        =[      $attack1,       f_attack2 ] {ai_charge(10);};
void() f_attack2        =[      $attack2,       f_attack3 ] {ai_charge(10);};
void() f_attack3        =[      $attack3,       f_attack4 ] {fish_melee();};
void() f_attack4        =[      $attack4,       f_attack5 ] {ai_charge(10);};
void() f_attack5        =[      $attack5,       f_attack6 ] {ai_charge(10);};
void() f_attack6        =[      $attack6,       f_attack7 ] {ai_charge(10);};
void() f_attack7        =[      $attack7,       f_attack8 ] {ai_charge(10);};
void() f_attack8        =[      $attack8,       f_attack9 ] {ai_charge(10);};
void() f_attack9        =[      $attack9,       f_attack10] {fish_melee();};
void() f_attack10       =[      $attack10,      f_attack11] {ai_charge(10);};
void() f_attack11       =[      $attack11,      f_attack12] {ai_charge(10);};
void() f_attack12       =[      $attack12,      f_attack13] {ai_charge(10);};
void() f_attack13       =[      $attack13,      f_attack14] {ai_charge(10);};
void() f_attack14       =[      $attack14,      f_attack15] {ai_charge(10);};
void() f_attack15       =[      $attack15,      f_attack16] {fish_melee();};
void() f_attack16       =[      $attack16,      f_attack17] {ai_charge(10);};
void() f_attack17       =[      $attack17,      f_attack18] {ai_charge(10);};
void() f_attack18       =[      $attack18,      f_run1    ] {ai_charge(10);};

void() f_death1 =[      $death1,        f_death2        ] {
sound (self, CHAN_VOICE, &quot;fish/death.wav&quot;, 1, ATTN_NORM);
};
void() f_death2 =[      $death2,        f_death3        ] {};
void() f_death3 =[      $death3,        f_death4        ] {};
void() f_death4 =[      $death4,        f_death5        ] {};
void() f_death5 =[      $death5,        f_death6        ] {};
void() f_death6 =[      $death6,        f_death7        ] {};
void() f_death7 =[      $death7,        f_death8        ] {};
void() f_death8 =[      $death8,        f_death9        ] {};
void() f_death9 =[      $death9,        f_death10       ] {};
void() f_death10 =[      $death10,       f_death11       ] {};
void() f_death11 =[      $death11,       f_death12       ] {};
void() f_death12 =[      $death12,       f_death13       ] {};
void() f_death13 =[      $death13,       f_death14       ] {};
void() f_death14 =[      $death14,       f_death15       ] {};
void() f_death15 =[      $death15,       f_death16       ] {};
void() f_death16 =[      $death16,       f_death17       ] {};
void() f_death17 =[      $death17,       f_death18       ] {};
void() f_death18 =[      $death18,       f_death19       ] {};
void() f_death19 =[      $death19,       f_death20       ] {};
void() f_death20 =[      $death20,       f_death21       ] {};
void() f_death21 =[      $death21,       f_death21       ] {self.solid = SOLID_NOT;};

void() f_pain1  =[      $pain1, f_pain2 ] {};
void() f_pain2  =[      $pain2, f_pain3 ] {ai_pain(6);};
void() f_pain3  =[      $pain3, f_pain4 ] {ai_pain(6);};
void() f_pain4  =[      $pain4, f_pain5 ] {ai_pain(6);};
void() f_pain5  =[      $pain5, f_pain6 ] {ai_pain(6);};
void() f_pain6  =[      $pain6, f_pain7 ] {ai_pain(6);};
void() f_pain7  =[      $pain7, f_pain8 ] {ai_pain(6);};
void() f_pain8  =[      $pain8, f_pain9 ] {ai_pain(6);};
void() f_pain9  =[      $pain9, f_run1 ] {ai_pain(6);};

void(entity attacker, float damage)	fish_pain =
{

// fish allways do pain frames
	f_pain1 ();
};



/*QUAKED monster_fish (1 0 0) (-16 -16 -24) (16 16 24) Ambush
*/
void() monster_fish =
{
	if (deathmatch)
	{
		remove(self);
		return;
	}
	precache_model2 (&quot;progs/fish.mdl&quot;);

	precache_sound2 (&quot;fish/death.wav&quot;);
	precache_sound2 (&quot;fish/bite.wav&quot;);
	precache_sound2 (&quot;fish/idle.wav&quot;);

	self.solid = SOLID_SLIDEBOX;
	self.movetype = MOVETYPE_STEP;

	setmodel (self, &quot;progs/fish.mdl&quot;);

	setsize (self, '-16 -16 -24', '16 16 24');
	self.health = 25;
	
	self.th_stand = f_stand1;
	self.th_walk = f_walk1;
	self.th_run = f_run1;
	self.th_die = f_death1;
	self.th_pain = fish_pain;
	self.th_melee = f_attack1;
	
	swimmonster_start ();
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>flj822sedvv1s2wya6hy4sjet8m5k3s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>floor</title>
    <ns>0</ns>
    <id>187</id>
    <revision>
      <id>363</id>
      <timestamp>2008-02-22T19:17:16Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  float '''floor'''(float ''val'')  Returns ''val'', rounded up to the integer below (like the equivalent function in C).</comment>
      <text xml:space="preserve" bytes="120"> float '''floor'''(float ''val'')

Returns ''val'', rounded up to the integer below (like the equivalent function in C).</text>
      <sha1>029086qizyrq393f4i46e3rx5pppcv3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2405</id>
      <parentid>363</parentid>
      <timestamp>2013-03-28T15:03:47Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Spirit moved page [[Floor]] to [[floor]]: lowercase</comment>
      <text xml:space="preserve" bytes="120"> float '''floor'''(float ''val'')

Returns ''val'', rounded up to the integer below (like the equivalent function in C).</text>
      <sha1>029086qizyrq393f4i46e3rx5pppcv3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>free resources</title>
    <ns>0</ns>
    <id>26</id>
    <revision>
      <id>32</id>
      <timestamp>2007-10-30T17:05:25Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: FIXME  ===See Also=== * [http://telejano.berlios.de/wiki3/index.php/TexturesSets Telejano resources] * [http://www.planetquake.com/gg/ Free Game Arts]</comment>
      <text xml:space="preserve" bytes="150">FIXME

===See Also===
* [http://telejano.berlios.de/wiki3/index.php/TexturesSets Telejano resources]
* [http://www.planetquake.com/gg/ Free Game Arts]</text>
      <sha1>9gq2fcoiwvognf8fcfj0vrqsjvrha8d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>574</id>
      <parentid>32</parentid>
      <timestamp>2008-04-09T04:56:30Z</timestamp>
      <contributor>
        <username>Leilei</username>
        <id>8</id>
      </contributor>
      <comment>/* See Also */</comment>
      <text xml:space="preserve" bytes="153">FIXME

===See Also===
* [http://telejano.berlios.de/wiki3/index.php/TexturesSets Telejano resources]
* [http://freegamearts.tuxfamily.org Free Game Arts]</text>
      <sha1>arxap5vq0zud9yv8rha2fxl2zju74ky</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>823</id>
      <parentid>574</parentid>
      <timestamp>2008-05-14T23:50:20Z</timestamp>
      <contributor>
        <ip>74.76.3.9</ip>
      </contributor>
      <comment>/* See Also */</comment>
      <text xml:space="preserve" bytes="75">FIXME

===See Also===

* [http://freegamearts.tuxfamily.org Free Game Arts]</text>
      <sha1>cmsfd3gl5025ubpthwscoqo4uzbndnk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2528</id>
      <parentid>823</parentid>
      <timestamp>2013-03-29T14:22:02Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Free resources]] to [[free resources]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="75">FIXME

===See Also===

* [http://freegamearts.tuxfamily.org Free Game Arts]</text>
      <sha1>cmsfd3gl5025ubpthwscoqo4uzbndnk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>ftos</title>
    <ns>0</ns>
    <id>747</id>
    <revision>
      <id>2135</id>
      <timestamp>2013-03-25T23:47:49Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;====Syntax:==== &lt;code&gt;string ftos(float f)&lt;/code&gt;  Converts a float into a string to allow it to be printed to the console or displayed in a centerprint. ====Parameters:==== :...&quot;</comment>
      <text xml:space="preserve" bytes="539">====Syntax:====
&lt;code&gt;string ftos(float f)&lt;/code&gt;

Converts a float into a string to allow it to be printed to the console or displayed in a centerprint.
====Parameters:====
:&lt;code&gt;f&lt;/code&gt; - The float value to convert
====Returns:====
:Returns a string representation of the float.
====Other Details:====
The string value returned by this function always points to the same area in memory.  Running this function multiple times in the same frame will cause all strings to be set to the last float converted.


[[Category:QuakeC Function]]</text>
      <sha1>5wc6tfm0doup9xzljmvbsmvgpubbhgv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>func bossgate</title>
    <ns>0</ns>
    <id>612</id>
    <revision>
      <id>1692</id>
      <timestamp>2013-03-24T19:59:40Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <comment>created func_bossgate page and added content</comment>
      <text xml:space="preserve" bytes="1151">'''Func_bossgate:'''

The func_bossgate entity is used in Vanilla Quake to block entry to the final &quot;Boss&quot; level until all four item_sigils (Runes) have been previously collected by the player. It is similar to a func_wall and works in the opposite manner of the func_episodegate entity.

'''Using the func_bossgate in a map:'''

A func_bossgate entity is attached to a brush that becomes invisible and is removed from a level only when the player is in possession of all four runes when they enter a level. As with all func_walls it will not cast a shadow.

In an .fgd file there is usually this entry for the func_episodegate:

@SolidClass = func_bossgate : &quot;Boss gate&quot; []

This entry tells a level editor (such as Worldcraft) that the func_bossgate is to be tied to a specific brush. Episode 1 is the default here. The lack of an Appearflag indicates that there is no option for selecting a skill level (for the obvious reason that you would normally want this entity to effect all skill levels). There is no rule against adding that to a custom .fgd file if you wanted to and that could lead to some interesting design choices for a level creator.</text>
      <sha1>1isous4rn6bdogmthhexy952j5268bt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1693</id>
      <parentid>1692</parentid>
      <timestamp>2013-03-24T20:00:29Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1120">'''Func_bossgate:'''

The func_bossgate entity is used in Vanilla Quake to block entry to the final &quot;Boss&quot; level until all four item_sigils (Runes) have been previously collected by the player. It is similar to a func_wall and works in the opposite manner of the func_episodegate entity.

'''Using the func_bossgate in a map:'''

A func_bossgate entity is attached to a brush that becomes invisible and is removed from a level only when the player is in possession of all four runes when they enter a level. As with all func_walls it will not cast a shadow.

In an .fgd file there is usually this entry for the func_episodegate:

@SolidClass = func_bossgate : &quot;Boss gate&quot; []

This entry tells a level editor (such as Worldcraft) that the func_bossgate is to be tied to a specific brush. The lack of an Appearflag indicates that there is no option for selecting a skill level (for the obvious reason that you would normally want this entity to effect all skill levels). There is no rule against adding that to a custom .fgd file if you wanted to and that could lead to some interesting design choices for a level creator.</text>
      <sha1>l1x3ub6i3y0p7orng0o6q4a6045ywqt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1706</id>
      <parentid>1693</parentid>
      <timestamp>2013-03-24T21:52:47Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1147">'''Func_bossgate:'''

The func_bossgate entity is used in Vanilla Quake to block entry to the final &quot;Boss&quot; level until all four item_sigils (Runes) have been previously collected by the player. It is similar to a func_wall and works in the opposite manner of the func_episodegate entity.

'''Using the func_bossgate in a map:'''

A func_bossgate entity is attached to a brush that becomes invisible and is removed from a level only when the player is in possession of all four runes when they enter a level. As with all func_walls it will not cast a shadow.

In an .fgd file there is usually this entry for the func_episodegate:

@SolidClass = func_bossgate : &quot;Boss gate&quot; []

This entry tells a level editor (such as Worldcraft) that the func_bossgate is to be tied to a specific brush. The lack of an Appearflag indicates that there is no option for selecting a skill level (for the obvious reason that you would normally want this entity to effect all skill levels). There is no rule against adding that to a custom .fgd file if you wanted to and that could lead to some interesting design choices for a level creator.

[[Category:Entity guide]]</text>
      <sha1>50p8vkicdqh93b7hm55kv36twhdxpcz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1707</id>
      <parentid>1706</parentid>
      <timestamp>2013-03-24T21:56:45Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1217">'''Func_bossgate:'''

The func_bossgate entity is used in Vanilla Quake to block entry to the final &quot;Boss&quot; level until all four item_sigils (Runes) have been previously collected by the player. It is similar to a func_wall and works in the opposite manner of the func_episodegate entity in that it removes a func_wall instead of inserting one.

'''Using the func_bossgate in a map:'''

A func_bossgate entity is attached to a brush that becomes invisible and is removed from a level only when the player is in possession of all four runes when they enter a level. As with all func_walls type entities it will not cast a shadow.

In an .fgd file there is usually this entry for the func_episodegate:

@SolidClass = func_bossgate : &quot;Boss gate&quot; []

This entry tells a level editor (such as Worldcraft) that the func_bossgate is to be tied to a specific brush. The lack of an Appearflag indicates that there is no option for selecting a skill level (for the obvious reason that you would normally want this entity to effect all skill levels). There is no rule against adding that to a custom .fgd file if you wanted to and that could lead to some interesting design choices for a level creator.

[[Category:Entity guide]]</text>
      <sha1>jcn71byxkwxvexdo2v319l7p8pdkzdy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1893</id>
      <parentid>1707</parentid>
      <timestamp>2013-03-25T02:30:40Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="1245">'''Func_bossgate:'''

The func_bossgate entity is used in Vanilla Quake to block entry to the final &quot;Boss&quot; level until all four item_sigils (Runes) have been previously collected by the player. It is similar to a func_wall and works in the opposite manner of the func_episodegate entity in that it removes a func_wall instead of inserting one.

'''Using the func_bossgate in a map:'''

A func_bossgate entity is attached to a brush that becomes invisible and is removed from a level only when the player is in possession of all four runes when they enter a level. As with all func_walls type entities it will not cast a shadow.

In an .fgd file there is usually this entry for the func_episodegate:

@SolidClass = func_bossgate : &quot;Boss gate&quot; []

This entry tells a level editor (such as Worldcraft) that the func_bossgate is to be tied to a specific brush. The lack of an Appearflag indicates that there is no option for selecting a skill level (for the obvious reason that you would normally want this entity to effect all skill levels). There is no rule against adding that to a custom .fgd file if you wanted to and that could lead to some interesting design choices for a level creator.

[[Category:Entity guide]]
[[Category:Quake entities]]</text>
      <sha1>kaqbdfyyozhmjwv01lj5dkbejxfzi2c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1904</id>
      <parentid>1893</parentid>
      <timestamp>2013-03-25T03:11:49Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1235">'''Func_bossgate:'''

The func_bossgate entity is used in Vanilla Quake to block entry to the final &quot;Boss&quot; level until all four [[item_sigils]] (Runes) have been previously collected by the player. It is similar to a [[func_wall]] and works in the opposite manner of the [[func_episodegate]] entity in that it removes a func_wall instead of inserting one.

'''Using the func_bossgate in a map:'''

A func_bossgate entity is attached to a brush that becomes invisible and is removed from a level only when the player is in possession of all four runes when they enter a level. As with all func_walls type entities it will not cast a shadow.

In an .fgd file there is usually this entry for the func_episodegate:

@SolidClass = func_bossgate : &quot;Boss gate&quot; []

This entry tells a level editor (such as [[Worldcraft]]) that the func_bossgate is to be tied to a specific brush. The lack of an Appearflag indicates that there is no option for selecting a skill level (for the obvious reason that you would normally want this entity to effect all skill levels). There is no rule against adding that to a custom .fgd file if you wanted to and that could lead to some interesting design choices for a level creator.

[[Category:Quake entities]]</text>
      <sha1>8g5wixug1o9r2rwq2yj759gys6ahu57</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1906</id>
      <parentid>1904</parentid>
      <timestamp>2013-03-25T03:12:15Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1235">'''Func_bossgate:'''

The func_bossgate entity is used in Vanilla Quake to block entry to the final &quot;Boss&quot; level until all four [[item_sigil]]s (Runes) have been previously collected by the player. It is similar to a [[func_wall]] and works in the opposite manner of the [[func_episodegate]] entity in that it removes a func_wall instead of inserting one.

'''Using the func_bossgate in a map:'''

A func_bossgate entity is attached to a brush that becomes invisible and is removed from a level only when the player is in possession of all four runes when they enter a level. As with all func_walls type entities it will not cast a shadow.

In an .fgd file there is usually this entry for the func_episodegate:

@SolidClass = func_bossgate : &quot;Boss gate&quot; []

This entry tells a level editor (such as [[Worldcraft]]) that the func_bossgate is to be tied to a specific brush. The lack of an Appearflag indicates that there is no option for selecting a skill level (for the obvious reason that you would normally want this entity to effect all skill levels). There is no rule against adding that to a custom .fgd file if you wanted to and that could lead to some interesting design choices for a level creator.

[[Category:Quake entities]]</text>
      <sha1>18zbgn944tztg0qrd9holkg39uf5sv9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1930</id>
      <parentid>1906</parentid>
      <timestamp>2013-03-25T03:53:29Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1239">'''Func_bossgate:'''

The func_bossgate entity is used in [[Vanilla Quake]] to block entry to the final &quot;Boss&quot; level until all four [[item_sigil]]s (Runes) have been previously collected by the player. It is similar to a [[func_wall]] and works in the opposite manner of the [[func_episodegate]] entity in that it removes a func_wall instead of inserting one.

'''Using the func_bossgate in a map:'''

A func_bossgate entity is attached to a brush that becomes invisible and is removed from a level only when the player is in possession of all four runes when they enter a level. As with all func_walls type entities it will not cast a shadow.

In an .fgd file there is usually this entry for the func_episodegate:

@SolidClass = func_bossgate : &quot;Boss gate&quot; []

This entry tells a level editor (such as [[Worldcraft]]) that the func_bossgate is to be tied to a specific brush. The lack of an Appearflag indicates that there is no option for selecting a skill level (for the obvious reason that you would normally want this entity to effect all skill levels). There is no rule against adding that to a custom .fgd file if you wanted to and that could lead to some interesting design choices for a level creator.

[[Category:Quake entities]]</text>
      <sha1>ckmxpb6scr8yq8p5xpqanz8wrne8xu6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>func button</title>
    <ns>0</ns>
    <id>651</id>
    <revision>
      <id>1944</id>
      <timestamp>2013-03-25T04:52:24Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>Created page with &quot;{{DISPLAYTITLE:func_button}}  This is test&quot;</comment>
      <text xml:space="preserve" bytes="42">{{DISPLAYTITLE:func_button}}

This is test</text>
      <sha1>kf10bvp2kx2cz23su4odczqxni2w5mx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1949</id>
      <parentid>1944</parentid>
      <timestamp>2013-03-25T05:34:58Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>Added func_button, but it's a bit crap right now. Need to format nicely.</comment>
      <text xml:space="preserve" bytes="1359">{{DISPLAYTITLE:func_button}}

The '''func_button''' is a button that can be used to trigger events in a level and is operated by the player on touch.

==Settings==
In addition to the settings listed below, the func_button can be made to move up or down by setting angle to -1 (up) or -2 (down).

===Keys===
targetname : The name of the button. Since the button is a trigger itself, this is generally used for killing the button from another trigger.
target : The targetname of the entity that will be triggered when the button is pressed.
killtarget : The targetname of the entity that will be killed when the button is pressed.
wait : Time after pressing the button for it to reset and be pushable again. Setting this to -1 will cause the button to stay pressed.
delay : Time after pressing the button before triggering its targets.
speed : The movement speed of the button.
lip : An offset added to the default movement distance that allows the designer to adjust the amount the button sticks in or out after being pressed.
health : If set to any value above 0, the button will only be activated by shooting it or hitting it with the axe. Often used for buttons that open secrets.
message : A message to display when the button triggers.

===Spawnflags===
The button supports [[Entity#Spawnflags|standard spawnflags]] for difficulty and deathmatch presence.</text>
      <sha1>izd9k51gs583orpzpg3xqg7dx5yesod</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1950</id>
      <parentid>1949</parentid>
      <timestamp>2013-03-25T06:10:53Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>tried putting keys in a table... wanted to kill self</comment>
      <text xml:space="preserve" bytes="1686">{{DISPLAYTITLE:func_button}}

The '''func_button''' is a button that can be used to trigger events in a level and is operated by the player on touch.

==Settings==
In addition to the settings listed below, the func_button can be made to move up or down by setting angle to -1 (up) or -2 (down).

===Keys===

{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The name of the button. Since the button is a trigger itself, this is generally used for killing the button from another trigger.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity that will be triggered when the button is pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity that will be killed when the button is pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''wait'' || Time after pressing the button for it to reset and be pushable again. Setting this to -1 will cause the button to stay pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''delay'' || Time after pressing the button before triggering its targets.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''speed'' || The movement speed of the button.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''lip'' || An offset added to the default movement distance that allows the designer to adjust the amount the button sticks in or out after being pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''health'' || If set to any value above 0, the button will only be activated by shooting it or hitting it with the axe. Often used for buttons that open secrets.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''message'' || A message to display when the button triggers.
|}

===Spawnflags===
The button supports [[Entity#Spawnflags|standard spawnflags]] for difficulty and deathmatch presence.</text>
      <sha1>nqxhkxiharyzs8jzwneupwxv5ywggkl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1951</id>
      <parentid>1950</parentid>
      <timestamp>2013-03-25T06:19:14Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>/* Keys */</comment>
      <text xml:space="preserve" bytes="1685">{{DISPLAYTITLE:func_button}}

The '''func_button''' is a button that can be used to trigger events in a level and is operated by the player on touch.

==Settings==
In addition to the settings listed below, the func_button can be made to move up or down by setting angle to -1 (up) or -2 (down).

===Keys===

{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''targetname'' || The name of the button. Since the button is a trigger itself, this is generally used for killing the button from another trigger.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity that will be triggered when the button is pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity that will be killed when the button is pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''wait'' || Time after pressing the button for it to reset and be pushable again. Setting this to -1 will cause the button to stay pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''delay'' || Time after pressing the button before triggering its targets.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''speed'' || The movement speed of the button.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''lip'' || An offset added to the default movement distance that allows the designer to adjust the amount the button sticks in or out after being pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''health'' || If set to any value above 0, the button will only be activated by shooting it or hitting it with the axe. Often used for buttons that open secrets.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''message'' || A message to display when the button triggers.
|}

===Spawnflags===
The button supports [[Entity#Spawnflags|standard spawnflags]] for difficulty and deathmatch presence.</text>
      <sha1>max5q0z05qevbdi6siylq208pdp2gou</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1953</id>
      <parentid>1951</parentid>
      <timestamp>2013-03-25T06:26:54Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>changed main text a little</comment>
      <text xml:space="preserve" bytes="2126">{{DISPLAYTITLE:func_button}}

The '''func_button''' is a solid entity that is used to create a physical button in the level that triggers events when the player touches it. Unlike the trigger_once and trigger_multiple entities, the func_button is visible and normally used in situations where the designer wants the player to see the button, such as for an elevator button. However, func_button is sometimes used in places that it's difficult for the player to see, such as on the floor to trigger [[traps]], or quite commonly as a means to open a [[secret area]] where it must be shot.

==Settings==
In addition to the settings listed below, the func_button can be made to move up or down by setting its angle to -1 (up) or -2 (down).

===Keys===

{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''targetname'' || The name of the button. Since the button is a trigger itself, this is generally used for killing the button from another trigger.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity that will be triggered when the button is pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity that will be killed when the button is pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''wait'' || Time after pressing the button for it to reset and be pushable again. Setting this to -1 will cause the button to stay pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''delay'' || Time after pressing the button before triggering its targets.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''speed'' || The movement speed of the button.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''lip'' || An offset added to the default movement distance that allows the designer to adjust the amount the button sticks in or out after being pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''health'' || If set to any value above 0, the button will only be activated by shooting it or hitting it with the axe. Often used for buttons that open secrets.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''message'' || A message to display when the button triggers.
|}

===Spawnflags===
The button supports [[Entity#Spawnflags|standard spawnflags]] for difficulty and deathmatch presence.</text>
      <sha1>m0wqp0c4h56alox8ivmh1pgyrnweboh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1955</id>
      <parentid>1953</parentid>
      <timestamp>2013-03-25T06:41:18Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>/* Settings */  settings to attributes</comment>
      <text xml:space="preserve" bytes="2128">{{DISPLAYTITLE:func_button}}

The '''func_button''' is a solid entity that is used to create a physical button in the level that triggers events when the player touches it. Unlike the trigger_once and trigger_multiple entities, the func_button is visible and normally used in situations where the designer wants the player to see the button, such as for an elevator button. However, func_button is sometimes used in places that it's difficult for the player to see, such as on the floor to trigger [[traps]], or quite commonly as a means to open a [[secret area]] where it must be shot.

==Attributes==
In addition to the settings listed below, the func_button can be made to move up or down by setting its angle to -1 (up) or -2 (down).

===Keys===

{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''targetname'' || The name of the button. Since the button is a trigger itself, this is generally used for killing the button from another trigger.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity that will be triggered when the button is pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity that will be killed when the button is pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''wait'' || Time after pressing the button for it to reset and be pushable again. Setting this to -1 will cause the button to stay pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''delay'' || Time after pressing the button before triggering its targets.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''speed'' || The movement speed of the button.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''lip'' || An offset added to the default movement distance that allows the designer to adjust the amount the button sticks in or out after being pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''health'' || If set to any value above 0, the button will only be activated by shooting it or hitting it with the axe. Often used for buttons that open secrets.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''message'' || A message to display when the button triggers.
|}

===Spawnflags===
The button supports [[Entity#Spawnflags|standard spawnflags]] for difficulty and deathmatch presence.</text>
      <sha1>pmkh2c52cih5kzjnwtf7eq09u5jbfi7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1966</id>
      <parentid>1955</parentid>
      <timestamp>2013-03-25T08:18:53Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>added category</comment>
      <text xml:space="preserve" bytes="2157">{{DISPLAYTITLE:func_button}}

The '''func_button''' is a solid entity that is used to create a physical button in the level that triggers events when the player touches it. Unlike the trigger_once and trigger_multiple entities, the func_button is visible and normally used in situations where the designer wants the player to see the button, such as for an elevator button. However, func_button is sometimes used in places that it's difficult for the player to see, such as on the floor to trigger [[traps]], or quite commonly as a means to open a [[secret area]] where it must be shot.

==Attributes==
In addition to the settings listed below, the func_button can be made to move up or down by setting its angle to -1 (up) or -2 (down).

===Keys===

{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''targetname'' || The name of the button. Since the button is a trigger itself, this is generally used for killing the button from another trigger.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity that will be triggered when the button is pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity that will be killed when the button is pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''wait'' || Time after pressing the button for it to reset and be pushable again. Setting this to -1 will cause the button to stay pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''delay'' || Time after pressing the button before triggering its targets.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''speed'' || The movement speed of the button.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''lip'' || An offset added to the default movement distance that allows the designer to adjust the amount the button sticks in or out after being pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''health'' || If set to any value above 0, the button will only be activated by shooting it or hitting it with the axe. Often used for buttons that open secrets.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''message'' || A message to display when the button triggers.
|}

===Spawnflags===
The button supports [[Entity#Spawnflags|standard spawnflags]] for difficulty and deathmatch presence.

[[Category:Quake entities]]</text>
      <sha1>dh160leejl9193l42rhivx2kaghb03c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2436</id>
      <parentid>1966</parentid>
      <timestamp>2013-03-28T20:03:01Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="2446">{{DISPLAYTITLE:func_button}}

The '''func_button''' is a solid entity that is used to create a physical button in the level that triggers events when the player touches it. Unlike the trigger_once and trigger_multiple entities, the func_button is visible and normally used in situations where the designer wants the player to see the button, such as for an elevator button. However, func_button is sometimes used in places that it's difficult for the player to see, such as on the floor to trigger [[traps]], or quite commonly as a means to open a [[secret area]] where it must be shot.

==Usage==
The [[Button tutorial]] has some examples of the creation and use of the func_button entity.
{{todo}}
==Attributes==
In addition to the settings listed below, the func_button can be made to move up or down by setting its angle to -1 (up) or -2 (down).

===Keys===

{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''targetname'' || The name of the button. Since the button is a trigger itself, this is generally used for killing the button from another trigger.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity that will be triggered when the button is pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity that will be killed when the button is pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''wait'' || Time after pressing the button for it to reset and be pushable again. Setting this to -1 will cause the button to stay pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''delay'' || Time after pressing the button before triggering its targets.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''speed'' || The movement speed of the button.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''lip'' || An offset added to the default movement distance that allows the designer to adjust the amount the button sticks in or out after being pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''health'' || If set to any value above 0, the button will only be activated by shooting it or hitting it with the axe. Often used for buttons that open secrets.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''message'' || A message to display when the button triggers.
|}

===Spawnflags===
The button supports [[Entity#Spawnflags|standard spawnflags]] for difficulty and deathmatch presence.
{| class=&quot;wikitable collapsible collapsed&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}

[[Category:Quake entities]]</text>
      <sha1>f8w45d31l7nzn8q9dga137vxivhn4l8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2670</id>
      <parentid>2436</parentid>
      <timestamp>2013-03-29T15:40:17Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>updated to meet new entity standards</comment>
      <text xml:space="preserve" bytes="3101">{{DISPLAYTITLE:func_button}}

{{Infobox_entity
| classname = func_button
| commonname = Button
| type = solid
| class = [[Func (entity class)|func]]
| dimensions = variable
| quakec = [[buttons.qc]]
| precaches =
* buttons/airbut1.wav
* buttons/switch21.wav
* buttons/switch02.wav
* buttons/switch04.wav
}}

The '''func_button''' is a solid entity that is used to create a physical button in the level that triggers events when the player touches it. Unlike the trigger_once and trigger_multiple entities, the func_button is visible and normally used in situations where the designer wants the player to see the button, such as for an elevator button. However, func_button is sometimes used in places that it's difficult for the player to see, such as on the floor to trigger [[traps]], or quite commonly as a means to open a [[secret area]] where it must be shot.

==Usage==
The [[Button tutorial]] has some examples of the creation and use of the func_button entity.
{{todo}}

==Attributes==
In addition to the settings listed below, the func_button can be made to move up or down by setting its angle to -1 (up) or -2 (down).

===Keys===
{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100&quot; | ''targetname''
| The targetname of the button. Since the button is a trigger itself, this is generally used for killing the button from another trigger.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' 
| The targetname of the entity that will be triggered when the button is pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget''
| The targetname of the entity that will be killed when the button is pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''wait'' 
| Time after pressing the button for it to reset and be pushable again. Setting this to -1 will cause the button to stay pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''delay''
| Time after pressing the button before triggering its targets.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''speed''
| The movement speed of the button.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''lip''
| An offset added to the default movement distance that allows the designer to adjust the amount the button sticks in or out after being pressed.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''health''
| If set to any value above 0, the button will only be activated by shooting it or hitting it with the axe. Often used for buttons that open secrets.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''message''
| A message to display when the button triggers.
|}

===Spawnflags===
func_button supports standard [[Entity#Spawnflags|spawnflags]] for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The button
}}

==Definitions==

===FGD Definition===
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the base class definition, which may also be required.
&lt;pre&gt;
[ code from entity entry in an .fgd file goes in here ]
&lt;/pre&gt;
===DEF Definition===
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
[ code from entity entry in a .def file goes in here ]
&lt;/pre&gt;

[[Category:Quake entities]]</text>
      <sha1>gvq3co307x9vapus1232bpq8hzoanc1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>func door</title>
    <ns>0</ns>
    <id>641</id>
    <revision>
      <id>1877</id>
      <timestamp>2013-03-25T01:48:23Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>trying out a format for entity descriptions that will be useful for mappers</comment>
      <text xml:space="preserve" bytes="2285">{{template:lowercase}}

=== func_door ===

This is a [[brush entity]] that can move in the level. As the name implies it is commonly used for doors, however its movement is also useful in implementing simple moving objects such as lifts or extending platforms.

== Attributes ==
func_door has the following attributes in [[Worldcraft]]:

* Angle : The direction of motion for the entity when triggered
* Name : Give the entity a name for identification
* Target : Give the entity a target entity to trigger
* Killtarget : Give the entity a target entity to kill
* Speed : Speed of movement when triggered
* Sounds : Type of sounds produced by the entity when triggered. The selection is limited to the following options:
** None
** Stone
** Machine
** Stone Chain
** Screechy Metal
** Custom Sounds
* Move sound : The sound to play during movement if custom sounds are being used
* Stop sound : The sound to play when motion stops if custom sounds are being used
* Delay before close : The time in seconds before the motion reverses to return the entity to the original position
* Lip : The distance of forward or backward motion to perform before beginning sideways motion (for doors that pop out or back in first)
* Damage inflicted when blocked : The amount of damage to apply to an entity that attempts to block the motion of the door
* Message if triggered : Sends a message (global?) when triggered
* Health (shoot open) : Amount of damage required to be done to the entity to trigger motion

== Flags ==
func_door has the following entity flags:

* Starts open : The entity is moved to the open position for it's initial state
* Don't link : ??
* Gold key required : The entity will not move unless the player has collected the Gold Key
* Silver key required : The entity will not move unless the player has collected the Silver key
* Toggle : The entity will toggle between open and closed states instead of automatically closing after a delay
* Not in Easy : The entity will not exist if the player is in Easy difficulty mode
* Not in Normal : The entity will not exist if the player is in Normal difficulty mode
* Not in Hard : The entity will not exist if the player is in Hard difficulty mode
* Not in Deathmatch : The entity will not exist if the game is a Deathmatch game</text>
      <sha1>ps8k82kc8b5oe0p3rwgyjdg26a0h7c4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1879</id>
      <parentid>1877</parentid>
      <timestamp>2013-03-25T01:55:10Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>/* Flags */ linkage!</comment>
      <text xml:space="preserve" bytes="2294">{{template:lowercase}}

=== func_door ===

This is a [[brush entity]] that can move in the level. As the name implies it is commonly used for doors, however its movement is also useful in implementing simple moving objects such as lifts or extending platforms.

== Attributes ==
func_door has the following attributes in [[Worldcraft]]:

* Angle : The direction of motion for the entity when triggered
* Name : Give the entity a name for identification
* Target : Give the entity a target entity to trigger
* Killtarget : Give the entity a target entity to kill
* Speed : Speed of movement when triggered
* Sounds : Type of sounds produced by the entity when triggered. The selection is limited to the following options:
** None
** Stone
** Machine
** Stone Chain
** Screechy Metal
** Custom Sounds
* Move sound : The sound to play during movement if custom sounds are being used
* Stop sound : The sound to play when motion stops if custom sounds are being used
* Delay before close : The time in seconds before the motion reverses to return the entity to the original position
* Lip : The distance of forward or backward motion to perform before beginning sideways motion (for doors that pop out or back in first)
* Damage inflicted when blocked : The amount of damage to apply to an entity that attempts to block the motion of the door
* Message if triggered : Sends a message (global?) when triggered
* Health (shoot open) : Amount of damage required to be done to the entity to trigger motion

== Flags ==
func_door has the following entity [[spawnflags]]:

* Starts open : The entity is moved to the open position for it's initial state
* Don't link : ??
* Gold key required : The entity will not move unless the player has collected the Gold Key
* Silver key required : The entity will not move unless the player has collected the Silver key
* Toggle : The entity will toggle between open and closed states instead of automatically closing after a delay
* Not in Easy : The entity will not exist if the player is in Easy difficulty mode
* Not in Normal : The entity will not exist if the player is in Normal difficulty mode
* Not in Hard : The entity will not exist if the player is in Hard difficulty mode
* Not in Deathmatch : The entity will not exist if the game is a Deathmatch game</text>
      <sha1>qolbwh2p4zajg9exbyoci0xjumh4m27</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1880</id>
      <parentid>1879</parentid>
      <timestamp>2013-03-25T01:56:02Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>header title redundant with article title</comment>
      <text xml:space="preserve" bytes="2275">{{template:lowercase}}

This is a [[brush entity]] that can move in the level. As the name implies it is commonly used for doors, however its movement is also useful in implementing simple moving objects such as lifts or extending platforms.

== Attributes ==
func_door has the following attributes in [[Worldcraft]]:

* Angle : The direction of motion for the entity when triggered
* Name : Give the entity a name for identification
* Target : Give the entity a target entity to trigger
* Killtarget : Give the entity a target entity to kill
* Speed : Speed of movement when triggered
* Sounds : Type of sounds produced by the entity when triggered. The selection is limited to the following options:
** None
** Stone
** Machine
** Stone Chain
** Screechy Metal
** Custom Sounds
* Move sound : The sound to play during movement if custom sounds are being used
* Stop sound : The sound to play when motion stops if custom sounds are being used
* Delay before close : The time in seconds before the motion reverses to return the entity to the original position
* Lip : The distance of forward or backward motion to perform before beginning sideways motion (for doors that pop out or back in first)
* Damage inflicted when blocked : The amount of damage to apply to an entity that attempts to block the motion of the door
* Message if triggered : Sends a message (global?) when triggered
* Health (shoot open) : Amount of damage required to be done to the entity to trigger motion

== Flags ==
func_door has the following entity [[spawnflags]]:

* Starts open : The entity is moved to the open position for it's initial state
* Don't link : ??
* Gold key required : The entity will not move unless the player has collected the Gold Key
* Silver key required : The entity will not move unless the player has collected the Silver key
* Toggle : The entity will toggle between open and closed states instead of automatically closing after a delay
* Not in Easy : The entity will not exist if the player is in Easy difficulty mode
* Not in Normal : The entity will not exist if the player is in Normal difficulty mode
* Not in Hard : The entity will not exist if the player is in Hard difficulty mode
* Not in Deathmatch : The entity will not exist if the game is a Deathmatch game</text>
      <sha1>44xujj28zs4od4kmxmdqqxi6xtadtpd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1884</id>
      <parentid>1880</parentid>
      <timestamp>2013-03-25T02:14:08Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="3242">{{template:lowercase}}

This is a [[brush entity]] that can move in the level. As the name implies it is commonly used for doors, however its movement is also useful in implementing simple moving objects such as lifts or extending platforms. It can be made to open in any horizontal direction, or straight up or down, but the standard Quake entities were not capable of rotation, unlike many recent patches such as the Ritual and Rogue add-on mission packs, and Hexen2, but clever map designers can still make interesting effects with a little time and imagination. To place a door in your map, create the brush you wish to use as the door, then turn it into a func_door entity.

== Attributes ==
func_door has the following attributes in [[Worldcraft]]. These may also be known as [[keyvalues]].

* Angle : The direction of motion for the entity when triggered
* Name / Targetname : Give the entity a name for identification by other entities. ''Only'' use this if you want the door to be locked until triggered by something else, such as a button.
* Target : Give the entity a target entity to trigger
* Killtarget : Give the entity a target entity to kill
* Speed : Speed of movement when triggered
* Sounds : Type of sounds produced by the entity when triggered. The selection is limited to the following options:
** None (value 0)
** Stone (value 1)
** Machine (value 2)
** Stone Chain (value 3)
** Screechy Metal (value 4)
** Custom Sounds (value 5)
* Move sound / noise2 : The sound to play during movement if custom sounds are being used
* Stop sound / noise1 : The sound to play when motion stops if custom sounds are being used
* Delay before close / Wait : The time in seconds before the motion reverses to return the entity to the original position
* Lip : The amount of additional distance to add to the motion. The default amount is equal to the width of the brush in the direction of motion. This value can be positive or negative; positive values reduce the distance while negative values increase the distance.
* Damage inflicted when blocked : The amount of damage to apply to an entity that attempts to block the motion of the door
* Message if triggered / message : Sends a message to display on the player's screen when triggered
* Health (shoot open) : Amount of damage required to be done to the entity to trigger motion

== Flags ==
func_door has the following entity [[spawnflags]]:

* Starts open : The entity is moved to the open position for it's initial state
* Don't link : Restricts the entity from being linked to a matching door (preventing it from opening as part of a pair)
* Gold key required : The entity will not move unless the player has collected the Gold Key
* Silver key required : The entity will not move unless the player has collected the Silver key
* Toggle : The entity will toggle between open and closed states instead of automatically closing after a delay
* Not in Easy : The entity will not exist if the player is in Easy difficulty mode
* Not in Normal : The entity will not exist if the player is in Normal difficulty mode
* Not in Hard : The entity will not exist if the player is in Hard difficulty mode
* Not in Deathmatch : The entity will not exist if the game is a Deathmatch game</text>
      <sha1>5676syo2bz0ojwku9fchuj1z9nb45dr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1886</id>
      <parentid>1884</parentid>
      <timestamp>2013-03-25T02:22:07Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="3271">{{template:lowercase}}

This is a [[brush entity]] that can move in the level. As the name implies it is commonly used for doors, however its movement is also useful in implementing simple moving objects such as lifts or extending platforms. It can be made to open in any horizontal direction, or straight up or down, but the standard Quake entities were not capable of rotation, unlike many recent patches such as the Ritual and Rogue add-on mission packs, and Hexen2, but clever map designers can still make interesting effects with a little time and imagination. To place a door in your map, create the brush you wish to use as the door, then turn it into a func_door entity.

== Attributes ==
func_door has the following attributes in [[Worldcraft]]. These may also be known as [[keyvalues]].

* Angle : The direction of motion for the entity when triggered
* Name / Targetname : Give the entity a name for identification by other entities. ''Only'' use this if you want the door to be locked until triggered by something else, such as a button.
* Target : Give the entity a target entity to trigger
* Killtarget : Give the entity a target entity to kill
* Speed : Speed of movement when triggered
* Sounds : Type of sounds produced by the entity when triggered. The selection is limited to the following options:
** None (value 0)
** Stone (value 1)
** Machine (value 2)
** Stone Chain (value 3)
** Screechy Metal (value 4)
** Custom Sounds (value 5)
* Move sound / noise2 : The sound to play during movement if custom sounds are being used
* Stop sound / noise1 : The sound to play when motion stops if custom sounds are being used
* Delay before close / Wait : The time in seconds before the motion reverses to return the entity to the original position
* Lip : The amount of additional distance to add to the motion. The default amount is equal to the width of the brush in the direction of motion. This value can be positive or negative; positive values reduce the distance while negative values increase the distance.
* Damage inflicted when blocked : The amount of damage to apply to an entity that attempts to block the motion of the door
* Message if triggered / message : Sends a message to display on the player's screen when triggered
* Health (shoot open) : Amount of damage required to be done to the entity to trigger motion

== Flags ==
func_door has the following entity [[spawnflags]]:

* Starts open : The entity is moved to the open position for it's initial state
* Don't link : Restricts the entity from being linked to a matching door (preventing it from opening as part of a pair)
* Gold key required : The entity will not move unless the player has collected the Gold Key
* Silver key required : The entity will not move unless the player has collected the Silver key
* Toggle : The entity will toggle between open and closed states instead of automatically closing after a delay
* Not in Easy : The entity will not exist if the player is in Easy difficulty mode
* Not in Normal : The entity will not exist if the player is in Normal difficulty mode
* Not in Hard : The entity will not exist if the player is in Hard difficulty mode
* Not in Deathmatch : The entity will not exist if the game is a Deathmatch game

[[Category:Quake entities]]</text>
      <sha1>3ztj7h7i154r1iebzj6s7q5r3ntoo5o</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1954</id>
      <parentid>1886</parentid>
      <timestamp>2013-03-25T06:29:14Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>fixed displayname</comment>
      <text xml:space="preserve" bytes="3275">{{DISPLAYTITLE:func_door}}

This is a [[brush entity]] that can move in the level. As the name implies it is commonly used for doors, however its movement is also useful in implementing simple moving objects such as lifts or extending platforms. It can be made to open in any horizontal direction, or straight up or down, but the standard Quake entities were not capable of rotation, unlike many recent patches such as the Ritual and Rogue add-on mission packs, and Hexen2, but clever map designers can still make interesting effects with a little time and imagination. To place a door in your map, create the brush you wish to use as the door, then turn it into a func_door entity.

== Attributes ==
func_door has the following attributes in [[Worldcraft]]. These may also be known as [[keyvalues]].

* Angle : The direction of motion for the entity when triggered
* Name / Targetname : Give the entity a name for identification by other entities. ''Only'' use this if you want the door to be locked until triggered by something else, such as a button.
* Target : Give the entity a target entity to trigger
* Killtarget : Give the entity a target entity to kill
* Speed : Speed of movement when triggered
* Sounds : Type of sounds produced by the entity when triggered. The selection is limited to the following options:
** None (value 0)
** Stone (value 1)
** Machine (value 2)
** Stone Chain (value 3)
** Screechy Metal (value 4)
** Custom Sounds (value 5)
* Move sound / noise2 : The sound to play during movement if custom sounds are being used
* Stop sound / noise1 : The sound to play when motion stops if custom sounds are being used
* Delay before close / Wait : The time in seconds before the motion reverses to return the entity to the original position
* Lip : The amount of additional distance to add to the motion. The default amount is equal to the width of the brush in the direction of motion. This value can be positive or negative; positive values reduce the distance while negative values increase the distance.
* Damage inflicted when blocked : The amount of damage to apply to an entity that attempts to block the motion of the door
* Message if triggered / message : Sends a message to display on the player's screen when triggered
* Health (shoot open) : Amount of damage required to be done to the entity to trigger motion

== Flags ==
func_door has the following entity [[spawnflags]]:

* Starts open : The entity is moved to the open position for it's initial state
* Don't link : Restricts the entity from being linked to a matching door (preventing it from opening as part of a pair)
* Gold key required : The entity will not move unless the player has collected the Gold Key
* Silver key required : The entity will not move unless the player has collected the Silver key
* Toggle : The entity will toggle between open and closed states instead of automatically closing after a delay
* Not in Easy : The entity will not exist if the player is in Easy difficulty mode
* Not in Normal : The entity will not exist if the player is in Normal difficulty mode
* Not in Hard : The entity will not exist if the player is in Hard difficulty mode
* Not in Deathmatch : The entity will not exist if the game is a Deathmatch game

[[Category:Quake entities]]</text>
      <sha1>9f1c90cfkzjauj3im944m7s0bz5ah1j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2433</id>
      <parentid>1954</parentid>
      <timestamp>2013-03-28T19:14:19Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>updated to match project style</comment>
      <text xml:space="preserve" bytes="3603">{{DISPLAYTITLE:func_door}}

The '''func_door''' is a solid [[brush entity]] that can move in the level. As the name implies it is commonly used for doors, however its movement is also useful in implementing simple moving objects such as lifts or extending platforms. It can be made to open in any horizontal direction, or straight up or down, but in standard Quake it cannot be made to rotate. 

== Usage ==
The [[Door tutorial]] article has some examples of the creation and use of a func_door entity.
{{todo|user=Hectate|todo=Create a func_door tutorial!}}

== Attributes ==
As mentioned above, the door will open in the direction of whatever angle you set it. The default distance covered is equal to the width of the door in that direction. You can also set the motion to be vertical by setting the angle to -1 (upward motion) or -2 (downward motion) instead.

=== Keys ===
{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''targetname'' || The name of the door. ''Only'' use this if you want the door to be locked until triggered by something else, such as a [[func_button|button]].
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity that will be triggered when the door is triggered.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity that will be killed when the door is triggered.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''wait'' || Time after opening for it to reset and be triggerable again. Setting this to -1 will cause the door to remain open.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''speed'' || The movement speed of the door.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''lip'' || An offset added to the default movement distance that allows the designer to adjust the amount the door travels. This value can be positive or negative; positive values reduce the distance while negative values increase the distance.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''health'' || If set to any value above 0, the door will only be activated by shooting it or hitting it with the axe. Often used for secret doors. The door will not trigger until the damage exceeds the health value.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''message'' || A message to display when the door triggers.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''sounds'' || Type of sounds produced by the entity when triggered. The selection is limited to the following options:
* None (value 0)
* Stone (value 1)
* Machine (value 2)
* Stone Chain (value 3)
* Screechy Metal (value 4)
* Custom Sounds (value 5)
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''noise2'' || The sound to play during movement if custom sounds are being used
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''noise1'' || The sound to play when motion stops if custom sounds are being used
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''Damage'' || The amount of damage to apply to an entity that attempts to block the motion of the door.
|}

===Spawnflags===
The button supports [[Entity#Spawnflags|standard spawnflags]] for difficulty and deathmatch presence. It also has the following additional flags:
* Starts open : The entity is moved to the open position for it's initial state
* Don't link : Restricts the entity from being linked to a matching door (preventing it from opening as part of a pair)
* Gold key required : The entity will not move unless the player has collected the Gold Key
* Silver key required : The entity will not move unless the player has collected the Silver key
* Toggle : The entity will toggle between open and closed states instead of automatically closing after a delay
{{todo|user=Hectate|todo=Get the specific titles of the above spawnflags and update it into a wikitable also.}}
[[Category:Quake entities]]</text>
      <sha1>tjjpd3mteithyb52nyh429kkn1laook</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2434</id>
      <parentid>2433</parentid>
      <timestamp>2013-03-28T19:43:21Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>/* Spawnflags */ added the additional ones</comment>
      <text xml:space="preserve" bytes="3793">{{DISPLAYTITLE:func_door}}

The '''func_door''' is a solid [[brush entity]] that can move in the level. As the name implies it is commonly used for doors, however its movement is also useful in implementing simple moving objects such as lifts or extending platforms. It can be made to open in any horizontal direction, or straight up or down, but in standard Quake it cannot be made to rotate. 

== Usage ==
The [[Door tutorial]] article has some examples of the creation and use of a func_door entity.
{{todo|user=Hectate|todo=Create a func_door tutorial!}}

== Attributes ==
As mentioned above, the door will open in the direction of whatever angle you set it. The default distance covered is equal to the width of the door in that direction. You can also set the motion to be vertical by setting the angle to -1 (upward motion) or -2 (downward motion) instead.

=== Keys ===
{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''targetname'' || The name of the door. ''Only'' use this if you want the door to be locked until triggered by something else, such as a [[func_button|button]].
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity that will be triggered when the door is triggered.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity that will be killed when the door is triggered.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''wait'' || Time after opening for it to reset and be triggerable again. Setting this to -1 will cause the door to remain open.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''speed'' || The movement speed of the door.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''lip'' || An offset added to the default movement distance that allows the designer to adjust the amount the door travels. This value can be positive or negative; positive values reduce the distance while negative values increase the distance.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''health'' || If set to any value above 0, the door will only be activated by shooting it or hitting it with the axe. Often used for secret doors. The door will not trigger until the damage exceeds the health value.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''message'' || A message to display when the door triggers.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''sounds'' || Type of sounds produced by the entity when triggered. The selection is limited to the following options:
* None (value 0)
* Stone (value 1)
* Machine (value 2)
* Stone Chain (value 3)
* Screechy Metal (value 4)
* Custom Sounds (value 5)
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''noise2'' || The sound to play during movement if custom sounds are being used
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''noise1'' || The sound to play when motion stops if custom sounds are being used
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''Damage'' || The amount of damage to apply to an entity that attempts to block the motion of the door.
|}

===Spawnflags===
The button supports [[Entity#Spawnflags|standard spawnflags]] for difficulty and deathmatch presence.
{| class=&quot;wikitable collapsible collapsed&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
It also has the following additional flags enabled:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name !! Description
|-
| 1 || Starts open ||| The entity is moved to the open position for it's initial state
|-
| 4 || Don't link ||| Restricts the entity from being linked to a matching door (preventing it from opening as part of a pair)
|-
| 8 || Gold key required ||| The entity will not move unless the player has collected the Gold Key
|-
| 16 || Silver key required ||| The entity will not move unless the player has collected the Silver key
|-
| 32 || Toggle ||| The entity will toggle between open and closed states instead of automatically closing after a delay
|}

[[Category:Quake entities]]</text>
      <sha1>tfxtk6pf6l2xhde1qk2e8qncgoxa4rp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2435</id>
      <parentid>2434</parentid>
      <timestamp>2013-03-28T19:48:51Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>/* Keys */ corrected a name</comment>
      <text xml:space="preserve" bytes="3790">{{DISPLAYTITLE:func_door}}

The '''func_door''' is a solid [[brush entity]] that can move in the level. As the name implies it is commonly used for doors, however its movement is also useful in implementing simple moving objects such as lifts or extending platforms. It can be made to open in any horizontal direction, or straight up or down, but in standard Quake it cannot be made to rotate. 

== Usage ==
The [[Door tutorial]] article has some examples of the creation and use of a func_door entity.
{{todo|user=Hectate|todo=Create a func_door tutorial!}}

== Attributes ==
As mentioned above, the door will open in the direction of whatever angle you set it. The default distance covered is equal to the width of the door in that direction. You can also set the motion to be vertical by setting the angle to -1 (upward motion) or -2 (downward motion) instead.

=== Keys ===
{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''targetname'' || The name of the door. ''Only'' use this if you want the door to be locked until triggered by something else, such as a [[func_button|button]].
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity that will be triggered when the door is triggered.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity that will be killed when the door is triggered.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''wait'' || Time after opening for it to reset and be triggerable again. Setting this to -1 will cause the door to remain open.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''speed'' || The movement speed of the door.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''lip'' || An offset added to the default movement distance that allows the designer to adjust the amount the door travels. This value can be positive or negative; positive values reduce the distance while negative values increase the distance.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''health'' || If set to any value above 0, the door will only be activated by shooting it or hitting it with the axe. Often used for secret doors. The door will not trigger until the damage exceeds the health value.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''message'' || A message to display when the door triggers.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''sounds'' || Type of sounds produced by the entity when triggered. The selection is limited to the following options:
* None (value 0)
* Stone (value 1)
* Machine (value 2)
* Stone Chain (value 3)
* Screechy Metal (value 4)
* Custom Sounds (value 5)
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''noise2'' || The sound to play during movement if custom sounds are being used
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''noise1'' || The sound to play when motion stops if custom sounds are being used
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''dmg'' || The amount of damage to apply to an entity that attempts to block the motion of the door.
|}

===Spawnflags===
The button supports [[Entity#Spawnflags|standard spawnflags]] for difficulty and deathmatch presence.
{| class=&quot;wikitable collapsible collapsed&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
It also has the following additional flags enabled:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name !! Description
|-
| 1 || Starts open ||| The entity is moved to the open position for it's initial state
|-
| 4 || Don't link ||| Restricts the entity from being linked to a matching door (preventing it from opening as part of a pair)
|-
| 8 || Gold key required ||| The entity will not move unless the player has collected the Gold Key
|-
| 16 || Silver key required ||| The entity will not move unless the player has collected the Silver key
|-
| 32 || Toggle ||| The entity will toggle between open and closed states instead of automatically closing after a delay
|}

[[Category:Quake entities]]</text>
      <sha1>eayc2k8wkri06fs5ex37k3eqf1ilesb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2911</id>
      <parentid>2435</parentid>
      <timestamp>2013-04-09T19:29:28Z</timestamp>
      <contributor>
        <ip>159.153.4.50</ip>
      </contributor>
      <comment>/* Attributes */</comment>
      <text xml:space="preserve" bytes="3772">{{DISPLAYTITLE:func_door}}

The '''func_door''' is a solid [[brush entity]] that can move in the level. As the name implies it is commonly used for doors, however its movement is also useful in implementing simple moving objects such as lifts or extending platforms. It can be made to open in any horizontal direction, or straight up or down, but in standard Quake it cannot be made to rotate. 

== Usage ==
The [[Door tutorial]] article has some examples of the creation and use of a func_door entity.
{{todo|user=Hectate|todo=Create a func_door tutorial!}}

== Attributes ==

=== Keys ===
{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''targetname'' || The name of the door. ''Only'' use this if you want the door to be locked until triggered by something else, such as a [[func_button|button]].
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity that will be triggered when the door is triggered.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity that will be killed when the door is triggered.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''angle'' || Sets the direction the door should move when it opens.  Angles from 0 to 359 will make it move horizontally.  You can also set the motion to be vertical by setting the angle to -1 (upward motion) or -2 (downward motion) instead.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''wait'' || Time after opening for it to reset and be triggerable again. Setting this to -1 will cause the door to remain open.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''speed'' || The movement speed of the door.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''lip'' || An offset added to the default movement distance that allows the designer to adjust the amount the door travels. This value can be positive or negative; positive values reduce the distance while negative values increase the distance.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''health'' || If set to any value above 0, the door will only be activated by shooting it or hitting it with the axe. Often used for secret doors. The door will not trigger until the damage exceeds the health value.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''message'' || A message to display when the door triggers.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''sounds'' || Type of sounds produced by the entity when triggered. The selection is limited to the following options:
* None (value 0)
* Stone (value 1)
* Machine (value 2)
* Stone Chain (value 3)
* Screechy Metal (value 4)
* Custom Sounds (value 5)
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''noise2'' || The sound to play during movement if custom sounds are being used
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''noise1'' || The sound to play when motion stops if custom sounds are being used
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''dmg'' || The amount of damage to apply to an entity that attempts to block the motion of the door.
|}

===Spawnflags===
The button supports [[Entity#Spawnflags|standard spawnflags]] for difficulty and deathmatch presence.
{| class=&quot;wikitable collapsible collapsed&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
It also has the following additional flags enabled:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name !! Description
|-
| 1 || Starts open ||| The entity is moved to the open position for it's initial state
|-
| 4 || Don't link ||| Restricts the entity from being linked to a matching door (preventing it from opening as part of a pair)
|-
| 8 || Gold key required ||| The entity will not move unless the player has collected the Gold Key
|-
| 16 || Silver key required ||| The entity will not move unless the player has collected the Silver key
|-
| 32 || Toggle ||| The entity will toggle between open and closed states instead of automatically closing after a delay
|}

[[Category:Quake entities]]</text>
      <sha1>g77td9ipjm87wu9abdgcnpuhhu233ad</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2912</id>
      <parentid>2911</parentid>
      <timestamp>2013-04-09T19:40:43Z</timestamp>
      <contributor>
        <ip>159.153.4.50</ip>
      </contributor>
      <comment>/* Usage */</comment>
      <text xml:space="preserve" bytes="5063">{{DISPLAYTITLE:func_door}}

The '''func_door''' is a solid [[brush entity]] that can move in the level. As the name implies it is commonly used for doors, however its movement is also useful in implementing simple moving objects such as lifts or extending platforms. It can be made to open in any horizontal direction, or straight up or down, but in standard Quake it cannot be made to rotate. 

== Usage ==
The [[Door tutorial]] article has some examples of the creation and use of a func_door entity.
{{todo|user=Hectate|todo=Create a func_door tutorial!}}

=== Movement ===
When triggered, doors move in a straight line until fully open, then wait a short time, then close by moving back to the starting position. The direction of travel is controlled by the ''angle'' value.  The distance traveled is equal to the width of the door in that direction, less an amount specified by the ''lip'' value.

=== Triggering ===
By default doors will automatically open when a player or monster is near, and close when they leave.  This only happens if the door is not locked and doesn't have a ''targetname''.

If a door has a ''targetname'', it will only open if another entity triggers it, such as a button or trigger.

If a door is locked, it will only open if the player touches it while holding the correct key.  If this happens, the door will open and stay open permanently, and the player loses the key.

=== Message ===
A locked door, or a door with a ''targetname'', will display a ''message'' if the player touches it while it is closed (except when the player has the key for the locked door.)

=== Linking ===
By default multiple doors that touch (or have overlapping bounding boxes) will be linked, so that if one opens they will all open.  This can be used to make a multi-part door.  To disable this behavior use the &quot;Don't Link&quot; spawnflag.

== Attributes ==

=== Keys ===
{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''targetname'' || The name of the door. ''Only'' use this if you want the door to be locked until triggered by something else, such as a [[func_button|button]].
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity that will be triggered when the door is triggered.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity that will be killed when the door is triggered.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''angle'' || Sets the direction the door should move when it opens.  Angles from 0 to 359 will make it move horizontally.  You can also set the motion to be vertical by setting the angle to -1 (upward motion) or -2 (downward motion) instead.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''wait'' || Time after opening for it to reset and be triggerable again. Setting this to -1 will cause the door to remain open.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''speed'' || The movement speed of the door.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''lip'' || An offset added to the default movement distance that allows the designer to adjust the amount the door travels. This value can be positive or negative; positive values reduce the distance while negative values increase the distance.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''health'' || If set to any value above 0, the door will only be activated by shooting it or hitting it with the axe. Often used for secret doors. The door will not trigger until the damage exceeds the health value.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''message'' || A message to display when the door triggers.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''sounds'' || Type of sounds produced by the entity when triggered. The selection is limited to the following options:
* None (value 0)
* Stone (value 1)
* Machine (value 2)
* Stone Chain (value 3)
* Screechy Metal (value 4)
* Custom Sounds (value 5)
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''noise2'' || The sound to play during movement if custom sounds are being used
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''noise1'' || The sound to play when motion stops if custom sounds are being used
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''dmg'' || The amount of damage to apply to an entity that attempts to block the motion of the door.
|}

===Spawnflags===
The button supports [[Entity#Spawnflags|standard spawnflags]] for difficulty and deathmatch presence.
{| class=&quot;wikitable collapsible collapsed&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
It also has the following additional flags enabled:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name !! Description
|-
| 1 || Starts open ||| The entity is moved to the open position for it's initial state
|-
| 4 || Don't link ||| Restricts the entity from being linked to a matching door (preventing it from opening as part of a pair)
|-
| 8 || Gold key required ||| The entity will not move unless the player has collected the Gold Key
|-
| 16 || Silver key required ||| The entity will not move unless the player has collected the Silver key
|-
| 32 || Toggle ||| The entity will toggle between open and closed states instead of automatically closing after a delay
|}

[[Category:Quake entities]]</text>
      <sha1>q0hq8zphyl2ahowmthjos6fjofe6087</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2913</id>
      <parentid>2912</parentid>
      <timestamp>2013-04-09T19:42:03Z</timestamp>
      <contributor>
        <ip>159.153.4.50</ip>
      </contributor>
      <comment>/* Keys */</comment>
      <text xml:space="preserve" bytes="5093">{{DISPLAYTITLE:func_door}}

The '''func_door''' is a solid [[brush entity]] that can move in the level. As the name implies it is commonly used for doors, however its movement is also useful in implementing simple moving objects such as lifts or extending platforms. It can be made to open in any horizontal direction, or straight up or down, but in standard Quake it cannot be made to rotate. 

== Usage ==
The [[Door tutorial]] article has some examples of the creation and use of a func_door entity.
{{todo|user=Hectate|todo=Create a func_door tutorial!}}

=== Movement ===
When triggered, doors move in a straight line until fully open, then wait a short time, then close by moving back to the starting position. The direction of travel is controlled by the ''angle'' value.  The distance traveled is equal to the width of the door in that direction, less an amount specified by the ''lip'' value.

=== Triggering ===
By default doors will automatically open when a player or monster is near, and close when they leave.  This only happens if the door is not locked and doesn't have a ''targetname''.

If a door has a ''targetname'', it will only open if another entity triggers it, such as a button or trigger.

If a door is locked, it will only open if the player touches it while holding the correct key.  If this happens, the door will open and stay open permanently, and the player loses the key.

=== Message ===
A locked door, or a door with a ''targetname'', will display a ''message'' if the player touches it while it is closed (except when the player has the key for the locked door.)

=== Linking ===
By default multiple doors that touch (or have overlapping bounding boxes) will be linked, so that if one opens they will all open.  This can be used to make a multi-part door.  To disable this behavior use the &quot;Don't Link&quot; spawnflag.

== Attributes ==

=== Keys ===
{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''targetname'' || The name of the door. ''Only'' use this if you want the door to be locked until triggered by something else, such as a [[func_button|button]].
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity that will be triggered when the door is triggered.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity that will be killed when the door is triggered.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''angle'' || Sets the direction the door should move when it opens.  Angles from 0 to 359 will make it move horizontally.  You can also set the motion to be vertical by setting the angle to -1 (upward motion) or -2 (downward motion) instead.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''wait'' || Time after opening for it to reset and be triggerable again. Setting this to -1 will cause the door to remain open.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''speed'' || The movement speed of the door.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''lip'' || An offset added to the default movement distance that allows the designer to adjust the amount the door travels. This value can be positive or negative; positive values reduce the distance while negative values increase the distance.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''health'' || If set to any value above 0, the door will only be activated by shooting it or hitting it with the axe. Often used for secret doors. The door will not trigger until the damage exceeds the health value.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''message'' || A message to display when the player touches the door in its closed state.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''sounds'' || Type of sounds produced by the entity when triggered. The selection is limited to the following options:
* None (value 0)
* Stone (value 1)
* Machine (value 2)
* Stone Chain (value 3)
* Screechy Metal (value 4)
* Custom Sounds (value 5)
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''noise2'' || The sound to play during movement if custom sounds are being used
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''noise1'' || The sound to play when motion stops if custom sounds are being used
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''dmg'' || The amount of damage to apply to an entity that attempts to block the motion of the door.
|}

===Spawnflags===
The button supports [[Entity#Spawnflags|standard spawnflags]] for difficulty and deathmatch presence.
{| class=&quot;wikitable collapsible collapsed&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
It also has the following additional flags enabled:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name !! Description
|-
| 1 || Starts open ||| The entity is moved to the open position for it's initial state
|-
| 4 || Don't link ||| Restricts the entity from being linked to a matching door (preventing it from opening as part of a pair)
|-
| 8 || Gold key required ||| The entity will not move unless the player has collected the Gold Key
|-
| 16 || Silver key required ||| The entity will not move unless the player has collected the Silver key
|-
| 32 || Toggle ||| The entity will toggle between open and closed states instead of automatically closing after a delay
|}

[[Category:Quake entities]]</text>
      <sha1>dr36yv0vetjdme18mejy1x2sweygg6f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2914</id>
      <parentid>2913</parentid>
      <timestamp>2013-04-09T23:52:08Z</timestamp>
      <contributor>
        <ip>120.136.5.22</ip>
      </contributor>
      <text xml:space="preserve" bytes="5092">{{DISPLAYTITLE:func_door}}

The '''func_door''' is a solid [[brush entity]] that can move in the level. As the name implies it is commonly used for doors, however its movement is also useful in implementing simple moving objects such as lifts or extending platforms. It can be made to open in any horizontal direction, or straight up or down, but in standard Quake it cannot be made to rotate. 

== Usage ==
The [[Door tutorial]] article has some examples of the creation and use of a func_door entity.
{{todo|user=Hectate|todo=Create a func_door tutorial!}}

=== Movement ===
When triggered, doors move in a straight line until fully open, then wait a short time, then close by moving back to the starting position. The direction of travel is controlled by the ''angle'' value.  The distance traveled is equal to the width of the door in that direction, less an amount specified by the ''lip'' value.

=== Triggering ===
By default doors will automatically open when a player or monster is near, and close when they leave.  This only happens if the door is not locked and doesn't have a ''targetname''.

If a door has a ''targetname'', it will only open if another entity triggers it, such as a button or trigger.

If a door is locked, it will only open if the player touches it while holding the correct key.  If this happens, the door will open and stay open permanently, and the player loses the key.

=== Message ===
A locked door, or a door with a ''targetname'', will display a ''message'' if the player touches it while it is closed (except when the player has the key for the locked door.)

=== Linking ===
By default multiple doors that touch (or have overlapping bounding boxes) will be linked, so that if one opens they will all open.  This can be used to make a multi-part door.  To disable this behavior use the &quot;Don't Link&quot; spawnflag.

== Attributes ==

=== Keys ===
{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''targetname'' || The name of the door. ''Only'' use this if you want the door to be locked until triggered by something else, such as a [[func_button|button]].
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity that will be triggered when the door is triggered.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity that will be killed when the door is triggered.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''angle'' || Sets the direction the door should move when it opens.  Angles from 0 to 359 will make it move horizontally.  You can also set the motion to be vertical by setting the angle to -1 (upward motion) or -2 (downward motion) instead.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''wait'' || Time after opening for it to reset and be triggerable again. Setting this to -1 will cause the door to remain open.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''speed'' || The movement speed of the door.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''lip'' || An offset added to the default movement distance that allows the designer to adjust the amount the door travels. This value can be positive or negative; positive values reduce the distance while negative values increase the distance.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''health'' || If set to any value above 0, the door will only be activated by shooting it or hitting it with the axe. Often used for secret doors. The door will not trigger until the damage exceeds the health value.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''message'' || A message to display when the player touches the door in its closed state.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''sounds'' || Type of sounds produced by the entity when triggered. The selection is limited to the following options:
* None (value 0)
* Stone (value 1)
* Machine (value 2)
* Stone Chain (value 3)
* Screechy Metal (value 4)
* Custom Sounds (value 5)
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''noise2'' || The sound to play during movement if custom sounds are being used
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''noise1'' || The sound to play when motion stops if custom sounds are being used
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''dmg'' || The amount of damage to apply to an entity that attempts to block the motion of the door.
|}

===Spawnflags===
The button supports [[Entity#Spawnflags|standard spawnflags]] for difficulty and deathmatch presence.
{| class=&quot;wikitable collapsible collapsed&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
It also has the following additional flags enabled:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name !! Description
|-
| 1 || Starts open ||| The entity is moved to the open position for its initial state
|-
| 4 || Don't link ||| Restricts the entity from being linked to a matching door (preventing it from opening as part of a pair)
|-
| 8 || Gold key required ||| The entity will not move unless the player has collected the Gold Key
|-
| 16 || Silver key required ||| The entity will not move unless the player has collected the Silver key
|-
| 32 || Toggle ||| The entity will toggle between open and closed states instead of automatically closing after a delay
|}

[[Category:Quake entities]]</text>
      <sha1>ah39rk803bccsq5bcek480onp6enmw5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>func episodegate</title>
    <ns>0</ns>
    <id>611</id>
    <revision>
      <id>1690</id>
      <timestamp>2013-03-24T19:42:47Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <comment>created func_episodegate page with content</comment>
      <text xml:space="preserve" bytes="1174">'''func_episodegate'''

The func_episodegate is used in Vanilla Quake to create a special func_wall in the start level. It is tied to a specific item_sigil (Rune) in the players possession upon entering a level. In the game it is used to block access to an episode that has already been completed by the player. As such there are four different func_episodegates each one related to a specific item_sigil.

'''Using the func_episodegate in a map:'''

In an .fgd file there is usually this entry for the func_episodegate: 

@SolidClass = func_episodegate : &quot;Episode Gate&quot;
[
	spawnflags(Flags) =
	[
		1 : &quot;Episode 1&quot; : 1
		2 : &quot;Episode 2&quot; : 0
		4 : &quot;Episode 3&quot; : 0
		8 : &quot;Episode 4&quot; : 0
	]
]

This entry tells a level editor (such as Worldcraft) that the func_episodegate is to be tied to a specific item_sigil. Episode 1 is the default here. The lack of an Appearflag indicates that there is no option for selecting a skill level (for the obvious reason that you would normally want this entity to effect all skill levels). There is no rule against adding that to a custom .fgd file if you wanted to and that could lead to some interesting design choices for a level creator.</text>
      <sha1>eyeia3syhr7dganzuffffp4tm3ogyu3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1691</id>
      <parentid>1690</parentid>
      <timestamp>2013-03-24T19:48:25Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <minor/>
      <comment>tweaked func_episodegate content</comment>
      <text xml:space="preserve" bytes="1347">'''func_episodegate'''

The func_episodegate is used in Vanilla Quake to create a special func_wall in the start level. It is tied to a specific item_sigil (Rune) in the players possession upon entering a level. In the game it is used to block access to an episode that has already been completed by the player. As such there are four different func_episodegates each one related to a specific item_sigil.

'''Using the func_episodegate in a map:'''

A func_episodegate is attached to a brush that becomes visible and solid only when the player is in possession of a rune. As with all func_walls it will not cast a shadow.

In an .fgd file there is usually this entry for the func_episodegate: 

@SolidClass = func_episodegate : &quot;Episode Gate&quot;
[
	spawnflags(Flags) =
	[
		1 : &quot;Episode 1&quot; : 1
		2 : &quot;Episode 2&quot; : 0
		4 : &quot;Episode 3&quot; : 0
		8 : &quot;Episode 4&quot; : 0
	]
]

This entry tells a level editor (such as Worldcraft) that the func_episodegate is to be tied to a specific item_sigil. Episode 1 is the default here. The lack of an Appearflag indicates that there is no option for selecting a skill level (for the obvious reason that you would normally want this entity to effect all skill levels). There is no rule against adding that to a custom .fgd file if you wanted to and that could lead to some interesting design choices for a level creator.</text>
      <sha1>aibj6lwauw44ybob6tb4gqa7wdfyajn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1705</id>
      <parentid>1691</parentid>
      <timestamp>2013-03-24T21:52:07Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1374">'''func_episodegate'''

The func_episodegate is used in Vanilla Quake to create a special func_wall in the start level. It is tied to a specific item_sigil (Rune) in the players possession upon entering a level. In the game it is used to block access to an episode that has already been completed by the player. As such there are four different func_episodegates each one related to a specific item_sigil.

'''Using the func_episodegate in a map:'''

A func_episodegate is attached to a brush that becomes visible and solid only when the player is in possession of a rune. As with all func_walls it will not cast a shadow.

In an .fgd file there is usually this entry for the func_episodegate: 

@SolidClass = func_episodegate : &quot;Episode Gate&quot;
[
	spawnflags(Flags) =
	[
		1 : &quot;Episode 1&quot; : 1
		2 : &quot;Episode 2&quot; : 0
		4 : &quot;Episode 3&quot; : 0
		8 : &quot;Episode 4&quot; : 0
	]
]

This entry tells a level editor (such as Worldcraft) that the func_episodegate is to be tied to a specific item_sigil. Episode 1 is the default here. The lack of an Appearflag indicates that there is no option for selecting a skill level (for the obvious reason that you would normally want this entity to effect all skill levels). There is no rule against adding that to a custom .fgd file if you wanted to and that could lead to some interesting design choices for a level creator.

[[Category:Entity guide]]</text>
      <sha1>2yqdhnzqxcg4ds93ra0ofejrsm1a8pb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1892</id>
      <parentid>1705</parentid>
      <timestamp>2013-03-25T02:30:32Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="1402">'''func_episodegate'''

The func_episodegate is used in Vanilla Quake to create a special func_wall in the start level. It is tied to a specific item_sigil (Rune) in the players possession upon entering a level. In the game it is used to block access to an episode that has already been completed by the player. As such there are four different func_episodegates each one related to a specific item_sigil.

'''Using the func_episodegate in a map:'''

A func_episodegate is attached to a brush that becomes visible and solid only when the player is in possession of a rune. As with all func_walls it will not cast a shadow.

In an .fgd file there is usually this entry for the func_episodegate: 

@SolidClass = func_episodegate : &quot;Episode Gate&quot;
[
	spawnflags(Flags) =
	[
		1 : &quot;Episode 1&quot; : 1
		2 : &quot;Episode 2&quot; : 0
		4 : &quot;Episode 3&quot; : 0
		8 : &quot;Episode 4&quot; : 0
	]
]

This entry tells a level editor (such as Worldcraft) that the func_episodegate is to be tied to a specific item_sigil. Episode 1 is the default here. The lack of an Appearflag indicates that there is no option for selecting a skill level (for the obvious reason that you would normally want this entity to effect all skill levels). There is no rule against adding that to a custom .fgd file if you wanted to and that could lead to some interesting design choices for a level creator.

[[Category:Entity guide]]
[[Category:Quake entities]]</text>
      <sha1>oxo71jrggdu3ptddb1ea9fv04qlokzq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1900</id>
      <parentid>1892</parentid>
      <timestamp>2013-03-25T03:04:14Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1417">'''func_episodegate'''

The func_episodegate is used in Vanilla Quake to create a special [[func_wall]] in the start level. It is tied to a specific [[item_sigil]] (Rune) in the players possession upon entering a level. In the game it is used to block access to an episode that has already been completed by the player. As such there are four different func_episodegates each one related to a specific item_sigil.

'''Using the func_episodegate in a map:'''

A func_episodegate is attached to a brush that becomes visible and solid only when the player is in possession of a rune. As with all func_walls it will not cast a shadow.

In an .fgd file there is usually this entry for the func_episodegate: 

@SolidClass = func_episodegate : &quot;Episode Gate&quot;
[
	spawnflags(Flags) =
	[
		1 : &quot;Episode 1&quot; : 1
		2 : &quot;Episode 2&quot; : 0
		4 : &quot;Episode 3&quot; : 0
		8 : &quot;Episode 4&quot; : 0
	]
]

This entry tells a level editor (such as [[Worldcraft]]) that the func_episodegate is to be tied to a specific item_sigil. Episode 1 is the default here. The lack of an Appearflag indicates that there is no option for selecting a skill level (for the obvious reason that you would normally want this entity to effect all skill levels). There is no rule against adding that to a custom .fgd file if you wanted to and that could lead to some interesting design choices for a level creator.

See also: [[func_bossgate]]

[[Category:Quake entities]]</text>
      <sha1>gf4olweef7k8gdqx0mkzch1gpse9olc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1902</id>
      <parentid>1900</parentid>
      <timestamp>2013-03-25T03:08:48Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1456">'''func_episodegate'''

The func_episodegate is used in Vanilla Quake to create a special [[func_wall]] in the start level. It is tied to a specific [[item_sigil]] (Rune) in the players possession upon entering a level. In the game it is used to block access to an episode that has already been completed by the player. As such there are four different func_episodegates each one related to a specific item_sigil.

'''Using the func_episodegate in a map:'''

A func_episodegate is attached to a brush that becomes visible and solid only when the player is in possession of a specific rune picked up in an earlier level. As with all func_walls it will not cast a shadow.

In an .fgd file there is usually this entry for the func_episodegate: 

@SolidClass = func_episodegate : &quot;Episode Gate&quot;
[
	spawnflags(Flags) =
	[
		1 : &quot;Episode 1&quot; : 1
		2 : &quot;Episode 2&quot; : 0
		4 : &quot;Episode 3&quot; : 0
		8 : &quot;Episode 4&quot; : 0
	]
]

This entry tells a level editor (such as [[Worldcraft]]) that the func_episodegate is to be tied to a specific item_sigil. Episode 1 is the default here. The lack of an Appearflag indicates that there is no option for selecting a skill level (for the obvious reason that you would normally want this entity to effect all skill levels). There is no rule against adding that to a custom .fgd file if you wanted to and that could lead to some interesting design choices for a level creator.

See also: [[func_bossgate]]

[[Category:Quake entities]]</text>
      <sha1>t38nwgfidrifo3vwk6w8su176is2a2h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1928</id>
      <parentid>1902</parentid>
      <timestamp>2013-03-25T03:51:43Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1460">'''func_episodegate'''

The func_episodegate is used in [[Vanilla Quake]] to create a special [[func_wall]] in the start level. It is tied to a specific [[item_sigil]] (Rune) in the players possession upon entering a level. In the game it is used to block access to an episode that has already been completed by the player. As such there are four different func_episodegates each one related to a specific item_sigil.

'''Using the func_episodegate in a map:'''

A func_episodegate is attached to a brush that becomes visible and solid only when the player is in possession of a specific rune picked up in an earlier level. As with all func_walls it will not cast a shadow.

In an .fgd file there is usually this entry for the func_episodegate: 

@SolidClass = func_episodegate : &quot;Episode Gate&quot;
[
	spawnflags(Flags) =
	[
		1 : &quot;Episode 1&quot; : 1
		2 : &quot;Episode 2&quot; : 0
		4 : &quot;Episode 3&quot; : 0
		8 : &quot;Episode 4&quot; : 0
	]
]

This entry tells a level editor (such as [[Worldcraft]]) that the func_episodegate is to be tied to a specific item_sigil. Episode 1 is the default here. The lack of an Appearflag indicates that there is no option for selecting a skill level (for the obvious reason that you would normally want this entity to effect all skill levels). There is no rule against adding that to a custom .fgd file if you wanted to and that could lead to some interesting design choices for a level creator.

See also: [[func_bossgate]]

[[Category:Quake entities]]</text>
      <sha1>c1dt0bkt1rf55ff330qdsxm863mwf5q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>func wall</title>
    <ns>0</ns>
    <id>1077</id>
    <revision>
      <id>3248</id>
      <timestamp>2014-09-08T13:54:28Z</timestamp>
      <contributor>
        <username>Ijed</username>
        <id>57</id>
      </contributor>
      <comment>Created page with &quot;This is a solid brush with a few extra controls and characteristics;  It has a Targetname, which means you can perform the following actions during play;  Killtarget it If you...&quot;</comment>
      <text xml:space="preserve" bytes="1107">This is a solid brush with a few extra controls and characteristics;

It has a Targetname, which means you can perform the following actions during play;

Killtarget it
If you put its targetname in the 'killtarget field of another entity, the func_wall will be removed when that entity fires.  Typically a trigger_relay is used to do this, but be aware that it will not work properly under standard progs if the trigger_relay has both a target and a killtarget.

Swap its texture
If the func_wall has a texture named +''something'' then, when triggered by another entity it will change its texture to +a''something''.

Because func_walls are brush entities, they do not create shadows and do not impact on vis compilation time.  

'''Bug: Flickering entity'''
This occurs when a large and/or complex brush entity crosses two or more vis leafs.  It's a visual error whereby the entity will go invisible when the player is stood in a certain spot (ie. vis leaf).

The proper fix must come engine-side, the only mapside fix that can be done is to divide the func_wall into smaller ones that do not cross leafs.</text>
      <sha1>3drne66mz61erwxanhl66bbjjfk0on9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3249</id>
      <parentid>3248</parentid>
      <timestamp>2014-09-08T13:57:42Z</timestamp>
      <contributor>
        <username>Ijed</username>
        <id>57</id>
      </contributor>
      <comment>Created entry / fixed formatting</comment>
      <text xml:space="preserve" bytes="1197">This is a solid brush with a few extra controls and characteristics.

It has a Targetname, which means you can perform the following actions;

Killtarget it
----
If you put its targetname in the 'killtarget field of another entity, the func_wall will be removed when that entity fires.  Typically a trigger_relay is used to do this, but be aware that it will not work properly under standard progs if the trigger_relay has both a target and a killtarget.

When killtargeted, the func_wall will vanish forever.  Or until the map is restarted.

Swap its texture
----
If the func_wall has a texture named +''something'' then, when triggered by another entity it will change its texture to +a''something''.

Because func_walls are brush entities, they do not create shadows and do not impact on vis compilation time.  

'''Bug: Flickering entity'''
----
This occurs when a large and/or complex brush entity crosses two or more vis leafs.  It's a visual error whereby the entity will go invisible when the player is stood in a certain spot (ie. vis leaf).

The proper fix must come engine-side, the only mapside fix that can be done is to divide the func_wall into smaller ones that do not cross leafs.</text>
      <sha1>b5p421p1s8iwt634qy3u15fq60vik30</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3250</id>
      <parentid>3249</parentid>
      <timestamp>2014-09-08T13:58:28Z</timestamp>
      <contributor>
        <username>Ijed</username>
        <id>57</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1209">This is a solid brush with a few extra controls and characteristics.

It has a Targetname, which means you can perform the following actions;

'''Killtarget it'''
----
If you put its targetname in the 'killtarget field of another entity, the func_wall will be removed when that entity fires.  Typically a trigger_relay is used to do this, but be aware that it will not work properly under standard progs if the trigger_relay has both a target and a killtarget.

When killtargeted, the func_wall will vanish forever.  Or until the map is restarted.

'''Swap its texture'''
----
If the func_wall has a texture named +''something'' then, when triggered by another entity it will change its texture to +a''something''.

Because func_walls are brush entities, they do not create shadows and do not impact on vis compilation time.  

'''Bug: Flickering entity'''
----
This occurs when a large and/or complex brush entity crosses two or more vis leafs.  It's a visual error whereby the entity will go invisible when the player is stood in a certain spot (ie. vis leaf).

The proper fix must come engine-side, the only mapside fix that can be done is to divide the func_wall into smaller ones that do not cross leafs.</text>
      <sha1>4u9hbwx94anyvh2f06eg3rjr7hqoyiy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3252</id>
      <parentid>3250</parentid>
      <timestamp>2014-09-08T14:18:06Z</timestamp>
      <contributor>
        <username>Ijed</username>
        <id>57</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1415">'''Description'''
----
This is a solid brush with a few extra controls and characteristics.  Basically, it has a targetname, allowing the mapper to manipulate it to some degree during play.  

Additionally, because func_walls are brush entities, they do not create shadows and do not impact on vis compilation time.  

'''Killtarget it'''
----
If you put its targetname in the 'killtarget field of another entity (like a trigger_relay) then the func_wall will be removed when that entity is triggered.  Typically a trigger_relay is used to do this, but be aware that it will not work properly under standard progs if the trigger_relay has both a target and a killtarget.

When killtargeted, the func_wall will vanish forever.  Or until the map is restarted, or loaded to a time before the wall was killtargeted.

'''Swap its texture'''
----
If the func_wall has a texture named +0''something'' then, when triggered by another entity it will change its texture to +a''something''.  See the texture naming conventions for more detail.

'''Bug: Flickering entity'''
----
This occurs when a large and/or complex brush entity crosses two or more vis leafs.  It's a visual error whereby the entity will go invisible when the player is stood in a certain spot (ie. vis leaf).

The proper fix must come engine-side, the only mapside fix that can be done is to divide the func_wall into smaller ones that do not cross leafs.</text>
      <sha1>3qgxr4fc3v306h3zavjhyq3iwe9hh0m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3253</id>
      <parentid>3252</parentid>
      <timestamp>2014-09-08T14:19:01Z</timestamp>
      <contributor>
        <username>Ijed</username>
        <id>57</id>
      </contributor>
      <text xml:space="preserve" bytes="1506">'''Description'''
----
This is a solid brush with a few extra controls and characteristics.  Basically, it has a targetname, allowing the mapper to manipulate it to some degree during play.  

Additionally, because func_walls are brush entities, they do not create shadows and do not impact on vis compilation time.  

'''Keys'''
----
Targetname - This gives it a name, so that other entities can trigger it.

'''Killtarget it'''
----
If you put its targetname in the 'killtarget field of another entity (like a trigger_relay) then the func_wall will be removed when that entity is triggered.  Typically a trigger_relay is used to do this, but be aware that it will not work properly under standard progs if the trigger_relay has both a target and a killtarget.

When killtargeted, the func_wall will vanish forever.  Or until the map is restarted, or loaded to a time before the wall was killtargeted.

'''Swap its texture'''
----
If the func_wall has a texture named +0''something'' then, when triggered by another entity it will change its texture to +a''something''.  See the texture naming conventions for more detail.

'''Bug: Flickering entity'''
----
This occurs when a large and/or complex brush entity crosses two or more vis leafs.  It's a visual error whereby the entity will go invisible when the player is stood in a certain spot (ie. vis leaf).

The proper fix must come engine-side, the only mapside fix that can be done is to divide the func_wall into smaller ones that do not cross leafs.</text>
      <sha1>btd1kmwprmmljowf0uqaz7w2z46dual</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>gib</title>
    <ns>0</ns>
    <id>1035</id>
    <redirect title="Gib" />
    <revision>
      <id>2959</id>
      <timestamp>2013-05-05T15:21:14Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <comment>Redirected page to [[Gib]]</comment>
      <text xml:space="preserve" bytes="17">#REDIRECT [[Gib]]</text>
      <sha1>ozv2nz9lvxgqqlb2gb75nhxkf08mjid</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>gl clear</title>
    <ns>0</ns>
    <id>92</id>
    <revision>
      <id>157</id>
      <timestamp>2007-10-30T23:36:34Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=gl_clear |default-value=0 |saved-to-config=no }} Versions: [[GLQuake]]  When set to a non-zero value, gl_clear will clear the colo...</comment>
      <text xml:space="preserve" bytes="1036">{{lowercase-underscores}}{{Infobox Console variable
|name=gl_clear
|default-value=0
|saved-to-config=no
}}
Versions: [[GLQuake]]

When set to a non-zero value, gl_clear will clear the color-buffer. Basically, this means that when the camera can see into the [void], either because of the map extending past the farclip plane or there is some kind of corruption of the map data. This is often used as a debugging tool as the 'gl_clear' color is red, therefore allowing you to see such holes quite clearly against the browns, blue and beiges of the quake world. Other people have also used it when cheating to be better able to make sense of the void whilst noclipping outside of the world.

On older systems (I.E. Pre-Voodoo3) it is advisable to leave this set to 0 (ZERO) as it will have a noticable positive effect on your framerate. Newer systems will be less affected.

Some custom engines or mods RELY on the behaviour and existence of this cvar, so as a note to engine modders, please leave this cvar intact.

{{Console variables}}</text>
      <sha1>7t4vlq0cpx16cjbynpyz7oeh13vsfd6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>158</id>
      <parentid>157</parentid>
      <timestamp>2007-10-30T23:40:02Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <text xml:space="preserve" bytes="1342">{{lowercase-underscores}}{{Infobox Console variable
|name=gl_clear
|default-value=0
|saved-to-config=no
}}
Versions: [[GLQuake]]

When set to a non-zero value, gl_clear will clear the color-buffer. Basically, this means that when the camera can see into the [void], either because of the map extending past the [[farclip]] plane or there is some kind of corruption of the map data. This is often used as a debugging tool as the 'gl_clear' color is red, therefore allowing you to see such holes quite clearly against the browns, blue and beiges of the quake world. Other people have also used it when cheating to be better able to make sense of the void whilst noclipping outside of the world.

On older systems (I.E. Pre-Voodoo3) it is advisable to leave this set to 0 (ZERO) as it will have a noticable positive effect on your framerate. Newer systems will be less affected. However, sometimes graphical errors can occur causing seams in the map (especially when [[gl_keeptjunctions]] is on), usually causing a few glaring red pixels to show through. For this reason, it is advised to leave gl_clear off, especially on old engines such as GLQuake that use the ugly red colour.

Some custom engines or mods RELY on the behaviour and existence of this cvar, so as a note to engine modders, please leave this cvar intact.

{{Console variables}}</text>
      <sha1>8mqhf1h9z2419jlamw6yzd0kdyv6o5m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>246</id>
      <parentid>158</parentid>
      <timestamp>2007-11-02T22:10:04Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1343">{{lowercase-underscores}}{{Infobox Console variable
|name=gl_clear
|default-value=0
|saved-to-config=no
}}
Versions: [[GLQuake]]

When set to a non-zero value, gl_clear will clear the color-buffer. Basically, this means that when the camera can see into the [void], either because of the map extending past the [[farclip]] plane or there is some kind of corruption of the map data. This is often used as a debugging tool as the 'gl_clear' color is red, therefore allowing you to see such holes quite clearly against the browns, blue and beiges of the quake world. Other people have also used it when cheating to be better able to make sense of the void whilst noclipping outside of the world.

On older systems (I.E. Pre-Voodoo3) it is advisable to leave this set to 0 (ZERO) as it will have a noticable positive effect on your framerate. Newer systems will be less affected. However, sometimes graphical errors can occur causing seams in the map (especially when [[gl_keeptjunctions]] is off), usually causing a few glaring red pixels to show through. For this reason, it is advised to leave gl_clear off, especially on old engines such as GLQuake that use the ugly red colour.

Some custom engines or mods RELY on the behaviour and existence of this cvar, so as a note to engine modders, please leave this cvar intact.

{{Console variables}}</text>
      <sha1>401y0l0y5jqwo5pb5zktn2bqlzze1sj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2407</id>
      <parentid>246</parentid>
      <timestamp>2013-03-28T15:04:09Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Spirit moved page [[Gl clear]] to [[gl clear]]: lowercase</comment>
      <text xml:space="preserve" bytes="1343">{{lowercase-underscores}}{{Infobox Console variable
|name=gl_clear
|default-value=0
|saved-to-config=no
}}
Versions: [[GLQuake]]

When set to a non-zero value, gl_clear will clear the color-buffer. Basically, this means that when the camera can see into the [void], either because of the map extending past the [[farclip]] plane or there is some kind of corruption of the map data. This is often used as a debugging tool as the 'gl_clear' color is red, therefore allowing you to see such holes quite clearly against the browns, blue and beiges of the quake world. Other people have also used it when cheating to be better able to make sense of the void whilst noclipping outside of the world.

On older systems (I.E. Pre-Voodoo3) it is advisable to leave this set to 0 (ZERO) as it will have a noticable positive effect on your framerate. Newer systems will be less affected. However, sometimes graphical errors can occur causing seams in the map (especially when [[gl_keeptjunctions]] is off), usually causing a few glaring red pixels to show through. For this reason, it is advised to leave gl_clear off, especially on old engines such as GLQuake that use the ugly red colour.

Some custom engines or mods RELY on the behaviour and existence of this cvar, so as a note to engine modders, please leave this cvar intact.

{{Console variables}}</text>
      <sha1>401y0l0y5jqwo5pb5zktn2bqlzze1sj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>gl polyblend</title>
    <ns>0</ns>
    <id>93</id>
    <revision>
      <id>159</id>
      <timestamp>2007-10-30T23:41:25Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=gl_polyblend |default-value=1 |save-to-config=no }} Versions: [[GLQuake]]  Enables/Disables the color adjustments when the client ...</comment>
      <text xml:space="preserve" bytes="431">{{lowercase-underscores}}{{Infobox Console variable
|name=gl_polyblend
|default-value=1
|save-to-config=no
}}
Versions: [[GLQuake]]

Enables/Disables the color adjustments when the client picks up a powerup, or the flash when the client picks up an item.

NOTE: because of the way gl_polyblend is implemented, the client will suffer from a significant fillrate hit when whenever the colors have been shifted.

{{Console variables}}</text>
      <sha1>6eq2wbtor2mcynt7l9m1hildkehsqj3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2409</id>
      <parentid>159</parentid>
      <timestamp>2013-03-28T15:04:20Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Spirit moved page [[Gl polyblend]] to [[gl polyblend]]: lowercase</comment>
      <text xml:space="preserve" bytes="431">{{lowercase-underscores}}{{Infobox Console variable
|name=gl_polyblend
|default-value=1
|save-to-config=no
}}
Versions: [[GLQuake]]

Enables/Disables the color adjustments when the client picks up a powerup, or the flash when the client picks up an item.

NOTE: because of the way gl_polyblend is implemented, the client will suffer from a significant fillrate hit when whenever the colors have been shifted.

{{Console variables}}</text>
      <sha1>6eq2wbtor2mcynt7l9m1hildkehsqj3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>hknight.qc</title>
    <ns>0</ns>
    <id>844</id>
    <revision>
      <id>2461</id>
      <timestamp>2013-03-29T10:39:25Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for the [[Death Knight]] [[Monsters | monster]].   &lt;pre&gt; /* ===========================================================================...&quot;</comment>
      <text xml:space="preserve" bytes="18415">This [[Quake-C]] file contains the code for the [[Death Knight]] [[Monsters | monster]].


&lt;pre&gt;
/*
==============================================================================

KNIGHT

==============================================================================
*/

$cd id1/models/knight2
$origin 0 0 24
$base base
$skin skin

$frame stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8 stand9

$frame walk1 walk2 walk3 walk4 walk5 walk6 walk7 walk8 walk9
$frame walk10 walk11 walk12 walk13 walk14 walk15 walk16 walk17
$frame walk18 walk19 walk20

$frame run1 run2 run3 run4 run5 run6 run7 run8

$frame pain1 pain2 pain3 pain4 pain5

$frame death1 death2 death3 death4 death5 death6 death7 death8
$frame death9 death10 death11 death12

$frame deathb1 deathb2 deathb3 deathb4 deathb5 deathb6 deathb7 deathb8
$frame deathb9

$frame char_a1 char_a2 char_a3 char_a4 char_a5 char_a6 char_a7 char_a8
$frame char_a9 char_a10 char_a11 char_a12 char_a13 char_a14 char_a15 char_a16

$frame magica1 magica2 magica3 magica4 magica5 magica6 magica7 magica8
$frame magica9 magica10 magica11 magica12 magica13 magica14

$frame magicb1 magicb2 magicb3 magicb4 magicb5 magicb6 magicb7 magicb8
$frame magicb9 magicb10 magicb11 magicb12 magicb13

$frame char_b1 char_b2 char_b3 char_b4 char_b5 char_b6

$frame slice1 slice2 slice3 slice4 slice5 slice6 slice7 slice8 slice9 slice10

$frame smash1 smash2 smash3 smash4 smash5 smash6 smash7 smash8 smash9 smash10
$frame smash11

$frame w_attack1 w_attack2 w_attack3 w_attack4 w_attack5 w_attack6 w_attack7 
$frame w_attack8 w_attack9 w_attack10 w_attack11 w_attack12 w_attack13 w_attack14
$frame w_attack15 w_attack16 w_attack17 w_attack18 w_attack19 w_attack20 
$frame w_attack21 w_attack22 

$frame magicc1 magicc2 magicc3 magicc4 magicc5 magicc6 magicc7 magicc8
$frame magicc9 magicc10 magicc11


void() hknight_char_a1;
void() hknight_run1;
void() hk_idle_sound;

void(float offset) hknight_shot =
{
	local	vector	offang;
	local	vector	org, vec;
	
	offang = vectoangles (self.enemy.origin - self.origin);
	offang_y = offang_y + offset * 6;
	
	makevectors (offang);

	org = self.origin + self.mins + self.size*0.5 + v_forward * 20;

// set missile speed
	vec = normalize (v_forward);
	vec_z = 0 - vec_z + (random() - 0.5)*0.1;
	
	launch_spike (org, vec);
	newmis.classname = &quot;knightspike&quot;;
	setmodel (newmis, &quot;progs/k_spike.mdl&quot;);
	setsize (newmis, VEC_ORIGIN, VEC_ORIGIN);		
	newmis.velocity = vec*300;
	sound (self, CHAN_WEAPON, &quot;hknight/attack1.wav&quot;, 1, ATTN_NORM);
};

void() CheckForCharge =
{
// check for mad charge
if (!enemy_vis)
	return;
if (time &lt; self.attack_finished)
	return;	
if ( fabs(self.origin_z - self.enemy.origin_z) &gt; 20)
	return;		// too much height change
if ( vlen (self.origin - self.enemy.origin) &lt; 80)
	return;		// use regular attack

// charge		
	SUB_AttackFinished (2);
	hknight_char_a1 ();

};

void() CheckContinueCharge =
{
	if (time &gt; self.attack_finished)
	{
		SUB_AttackFinished (3);
		hknight_run1 ();
		return;		// done charging
	}
	if (random() &gt; 0.5)
		sound (self, CHAN_WEAPON, &quot;knight/sword2.wav&quot;, 1, ATTN_NORM);
	else
		sound (self, CHAN_WEAPON, &quot;knight/sword1.wav&quot;, 1, ATTN_NORM);
};

//===========================================================================

void()	hknight_stand1	=[	$stand1,	hknight_stand2	] {ai_stand();};
void()	hknight_stand2	=[	$stand2,	hknight_stand3	] {ai_stand();};
void()	hknight_stand3	=[	$stand3,	hknight_stand4	] {ai_stand();};
void()	hknight_stand4	=[	$stand4,	hknight_stand5	] {ai_stand();};
void()	hknight_stand5	=[	$stand5,	hknight_stand6	] {ai_stand();};
void()	hknight_stand6	=[	$stand6,	hknight_stand7	] {ai_stand();};
void()	hknight_stand7	=[	$stand7,	hknight_stand8	] {ai_stand();};
void()	hknight_stand8	=[	$stand8,	hknight_stand9	] {ai_stand();};
void()	hknight_stand9	=[	$stand9,	hknight_stand1	] {ai_stand();};

//===========================================================================

void()	hknight_walk1	=[	$walk1,		hknight_walk2	] {
hk_idle_sound();
ai_walk(2);};
void()	hknight_walk2	=[	$walk2,		hknight_walk3	] {ai_walk(5);};
void()	hknight_walk3	=[	$walk3,		hknight_walk4	] {ai_walk(5);};
void()	hknight_walk4	=[	$walk4,		hknight_walk5	] {ai_walk(4);};
void()	hknight_walk5	=[	$walk5,		hknight_walk6	] {ai_walk(4);};
void()	hknight_walk6	=[	$walk6,		hknight_walk7	] {ai_walk(2);};
void()	hknight_walk7	=[	$walk7,		hknight_walk8	] {ai_walk(2);};
void()	hknight_walk8	=[	$walk8,		hknight_walk9	] {ai_walk(3);};
void()	hknight_walk9	=[	$walk9,		hknight_walk10	] {ai_walk(3);};
void()	hknight_walk10	=[	$walk10,	hknight_walk11	] {ai_walk(4);};
void()	hknight_walk11	=[	$walk11,	hknight_walk12	] {ai_walk(3);};
void()	hknight_walk12	=[	$walk12,	hknight_walk13	] {ai_walk(4);};
void()	hknight_walk13	=[	$walk13,	hknight_walk14	] {ai_walk(6);};
void()	hknight_walk14	=[	$walk14,	hknight_walk15	] {ai_walk(2);};
void()	hknight_walk15	=[	$walk15,	hknight_walk16	] {ai_walk(2);};
void()	hknight_walk16	=[	$walk16,	hknight_walk17	] {ai_walk(4);};
void()	hknight_walk17	=[	$walk17,	hknight_walk18	] {ai_walk(3);};
void()	hknight_walk18	=[	$walk18,	hknight_walk19	] {ai_walk(3);};
void()	hknight_walk19	=[	$walk19,	hknight_walk20	] {ai_walk(3);};
void()	hknight_walk20	=[	$walk20,	hknight_walk1	] {ai_walk(2);};

//===========================================================================

void()	hknight_run1	=[	$run1,		hknight_run2	] {
hk_idle_sound();
ai_run (20); CheckForCharge (); };
void()	hknight_run2	=[	$run2,		hknight_run3	] {ai_run(25);};
void()	hknight_run3	=[	$run3,		hknight_run4	] {ai_run(18);};
void()	hknight_run4	=[	$run4,		hknight_run5	] {ai_run(16);};
void()	hknight_run5	=[	$run5,		hknight_run6	] {ai_run(14);};
void()	hknight_run6	=[	$run6,		hknight_run7	] {ai_run(25);};
void()	hknight_run7	=[	$run7,		hknight_run8	] {ai_run(21);};
void()	hknight_run8	=[	$run8,		hknight_run1	] {ai_run(13);};

//============================================================================

void()	hknight_pain1	=[	$pain1,		hknight_pain2	] {sound (self, CHAN_VOICE, &quot;hknight/pain1.wav&quot;, 1, ATTN_NORM);};
void()	hknight_pain2	=[	$pain2,		hknight_pain3	] {};
void()	hknight_pain3	=[	$pain3,		hknight_pain4	] {};
void()	hknight_pain4	=[	$pain4,		hknight_pain5	] {};
void()	hknight_pain5	=[	$pain5,		hknight_run1	] {};

//============================================================================

void()	hknight_die1	=[	$death1,	hknight_die2	] {ai_forward(10);};
void()	hknight_die2	=[	$death2,	hknight_die3	] {ai_forward(8);};
void()	hknight_die3	=[	$death3,	hknight_die4	]
{self.solid = SOLID_NOT; ai_forward(7);};
void()	hknight_die4	=[	$death4,	hknight_die5	] {};
void()	hknight_die5	=[	$death5,	hknight_die6	] {};
void()	hknight_die6	=[	$death6,	hknight_die7	] {};
void()	hknight_die7	=[	$death7,	hknight_die8	] {};
void()	hknight_die8	=[	$death8,	hknight_die9	] {ai_forward(10);};
void()	hknight_die9	=[	$death9,	hknight_die10	] {ai_forward(11);};
void()	hknight_die10	=[	$death10,	hknight_die11	] {};
void()	hknight_die11	=[	$death11,	hknight_die12	] {};
void()	hknight_die12	=[	$death12,	hknight_die12	] {};

void()	hknight_dieb1	=[	$deathb1,	hknight_dieb2	] {};
void()	hknight_dieb2	=[	$deathb2,	hknight_dieb3	] {};
void()	hknight_dieb3	=[	$deathb3,	hknight_dieb4	]
{self.solid = SOLID_NOT;};
void()	hknight_dieb4	=[	$deathb4,	hknight_dieb5	] {};
void()	hknight_dieb5	=[	$deathb5,	hknight_dieb6	] {};
void()	hknight_dieb6	=[	$deathb6,	hknight_dieb7	] {};
void()	hknight_dieb7	=[	$deathb7,	hknight_dieb8	] {};
void()	hknight_dieb8	=[	$deathb8,	hknight_dieb9	] {};
void()	hknight_dieb9	=[	$deathb9,	hknight_dieb9	] {};

void() hknight_die =
{
// check for gib
	if (self.health &lt; -40)
	{
		sound (self, CHAN_VOICE, &quot;player/udeath.wav&quot;, 1, ATTN_NORM);
		ThrowHead (&quot;progs/h_hellkn.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib1.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib2.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib3.mdl&quot;, self.health);
		return;
	}

// regular death
	sound (self, CHAN_VOICE, &quot;hknight/death1.wav&quot;, 1, ATTN_NORM);
	if (random() &gt; 0.5)
		hknight_die1 ();
	else
		hknight_dieb1 ();
};


//============================================================================

void()	hknight_magica1 =[	$magica1,	hknight_magica2	] {ai_face();};
void()	hknight_magica2 =[	$magica2,	hknight_magica3	] {ai_face();};
void()	hknight_magica3 =[	$magica3,	hknight_magica4	] {ai_face();};
void()	hknight_magica4 =[	$magica4,	hknight_magica5	] {ai_face();};
void()	hknight_magica5 =[	$magica5,	hknight_magica6	] {ai_face();};
void()	hknight_magica6 =[	$magica6,	hknight_magica7	] {ai_face();};
void()	hknight_magica7 =[	$magica7,	hknight_magica8	] {hknight_shot(-2);};
void()	hknight_magica8 =[	$magica8,	hknight_magica9	] {hknight_shot(-1);};
void()	hknight_magica9 =[	$magica9,	hknight_magica10] {hknight_shot(0);};
void()	hknight_magica10 =[	$magica10,	hknight_magica11] {hknight_shot(1);};
void()	hknight_magica11 =[	$magica11,	hknight_magica12] {hknight_shot(2);};
void()	hknight_magica12 =[	$magica12,	hknight_magica13] {hknight_shot(3);};
void()	hknight_magica13 =[	$magica13,	hknight_magica14] {ai_face();};
void()	hknight_magica14 =[	$magica14,	hknight_run1	] {ai_face();};

//============================================================================

void()	hknight_magicb1 =[	$magicb1,	hknight_magicb2	] {ai_face();};
void()	hknight_magicb2 =[	$magicb2,	hknight_magicb3	] {ai_face();};
void()	hknight_magicb3 =[	$magicb3,	hknight_magicb4	] {ai_face();};
void()	hknight_magicb4 =[	$magicb4,	hknight_magicb5	] {ai_face();};
void()	hknight_magicb5 =[	$magicb5,	hknight_magicb6	] {ai_face();};
void()	hknight_magicb6 =[	$magicb6,	hknight_magicb7	] {ai_face();};
void()	hknight_magicb7 =[	$magicb7,	hknight_magicb8	] {hknight_shot(-2);};
void()	hknight_magicb8 =[	$magicb8,	hknight_magicb9	] {hknight_shot(-1);};
void()	hknight_magicb9 =[	$magicb9,	hknight_magicb10] {hknight_shot(0);};
void()	hknight_magicb10 =[	$magicb10,	hknight_magicb11] {hknight_shot(1);};
void()	hknight_magicb11 =[	$magicb11,	hknight_magicb12] {hknight_shot(2);};
void()	hknight_magicb12 =[	$magicb12,	hknight_magicb13] {hknight_shot(3);};
void()	hknight_magicb13 =[	$magicb13,	hknight_run1] {ai_face();};

//============================================================================

void()	hknight_magicc1 =[	$magicc1,	hknight_magicc2	] {ai_face();};
void()	hknight_magicc2 =[	$magicc2,	hknight_magicc3	] {ai_face();};
void()	hknight_magicc3 =[	$magicc3,	hknight_magicc4	] {ai_face();};
void()	hknight_magicc4 =[	$magicc4,	hknight_magicc5	] {ai_face();};
void()	hknight_magicc5 =[	$magicc5,	hknight_magicc6	] {ai_face();};
void()	hknight_magicc6 =[	$magicc6,	hknight_magicc7	] {hknight_shot(-2);};
void()	hknight_magicc7 =[	$magicc7,	hknight_magicc8	] {hknight_shot(-1);};
void()	hknight_magicc8 =[	$magicc8,	hknight_magicc9	] {hknight_shot(0);};
void()	hknight_magicc9 =[	$magicc9,	hknight_magicc10] {hknight_shot(1);};
void()	hknight_magicc10 =[	$magicc10,	hknight_magicc11] {hknight_shot(2);};
void()	hknight_magicc11 =[	$magicc11,	hknight_run1] {hknight_shot(3);};

//===========================================================================

void()	hknight_char_a1	=[	$char_a1,	hknight_char_a2	] {ai_charge(20);};
void()	hknight_char_a2	=[	$char_a2,	hknight_char_a3	] {ai_charge(25);};
void()	hknight_char_a3	=[	$char_a3,	hknight_char_a4	] {ai_charge(18);};
void()	hknight_char_a4	=[	$char_a4,	hknight_char_a5	] {ai_charge(16);};
void()	hknight_char_a5	=[	$char_a5,	hknight_char_a6	] {ai_charge(14);};
void()	hknight_char_a6	=[	$char_a6,	hknight_char_a7	] {ai_charge(20); ai_melee();};
void()	hknight_char_a7	=[	$char_a7,	hknight_char_a8	] {ai_charge(21); ai_melee();};
void()	hknight_char_a8	=[	$char_a8,	hknight_char_a9	] {ai_charge(13); ai_melee();};
void()	hknight_char_a9	=[	$char_a9,	hknight_char_a10	] {ai_charge(20); ai_melee();};
void()	hknight_char_a10=[	$char_a10,	hknight_char_a11	] {ai_charge(20); ai_melee();};
void()	hknight_char_a11=[	$char_a11,	hknight_char_a12	] {ai_charge(18); ai_melee();};
void()	hknight_char_a12=[	$char_a12,	hknight_char_a13	] {ai_charge(16);};
void()	hknight_char_a13=[	$char_a13,	hknight_char_a14	] {ai_charge(14);};
void()	hknight_char_a14=[	$char_a14,	hknight_char_a15	] {ai_charge(25);};
void()	hknight_char_a15=[	$char_a15,	hknight_char_a16	] {ai_charge(21);};
void()	hknight_char_a16=[	$char_a16,	hknight_run1	] {ai_charge(13);};

//===========================================================================

void()	hknight_char_b1	=[	$char_b1,	hknight_char_b2	]
{CheckContinueCharge (); ai_charge(23); ai_melee();};
void()	hknight_char_b2	=[	$char_b2,	hknight_char_b3	] {ai_charge(17); ai_melee();};
void()	hknight_char_b3	=[	$char_b3,	hknight_char_b4	] {ai_charge(12); ai_melee();};
void()	hknight_char_b4	=[	$char_b4,	hknight_char_b5	] {ai_charge(22); ai_melee();};
void()	hknight_char_b5	=[	$char_b5,	hknight_char_b6	] {ai_charge(18); ai_melee();};
void()	hknight_char_b6	=[	$char_b6,	hknight_char_b1	] {ai_charge(8); ai_melee();};

//===========================================================================

void()	hknight_slice1	=[	$slice1,	hknight_slice2	] {ai_charge(9);};
void()	hknight_slice2	=[	$slice2,	hknight_slice3	] {ai_charge(6);};
void()	hknight_slice3	=[	$slice3,	hknight_slice4	] {ai_charge(13);};
void()	hknight_slice4	=[	$slice4,	hknight_slice5	] {ai_charge(4);};
void()	hknight_slice5	=[	$slice5,	hknight_slice6	] {ai_charge(7); ai_melee();};
void()	hknight_slice6	=[	$slice6,	hknight_slice7	] {ai_charge(15); ai_melee();};
void()	hknight_slice7	=[	$slice7,	hknight_slice8	] {ai_charge(8); ai_melee();};
void()	hknight_slice8	=[	$slice8,	hknight_slice9	] {ai_charge(2); ai_melee();};
void()	hknight_slice9	=[	$slice9,	hknight_slice10	] {ai_melee();};
void()	hknight_slice10	=[	$slice10,	hknight_run1	] {ai_charge(3);};

//===========================================================================

void()	hknight_smash1	=[	$smash1,	hknight_smash2	] {ai_charge(1);};
void()	hknight_smash2	=[	$smash2,	hknight_smash3	] {ai_charge(13);};
void()	hknight_smash3	=[	$smash3,	hknight_smash4	] {ai_charge(9);};
void()	hknight_smash4	=[	$smash4,	hknight_smash5	] {ai_charge(11);};
void()	hknight_smash5	=[	$smash5,	hknight_smash6	] {ai_charge(10); ai_melee();};
void()	hknight_smash6	=[	$smash6,	hknight_smash7	] {ai_charge(7); ai_melee();};
void()	hknight_smash7	=[	$smash7,	hknight_smash8	] {ai_charge(12); ai_melee();};
void()	hknight_smash8	=[	$smash8,	hknight_smash9	] {ai_charge(2); ai_melee();};
void()	hknight_smash9	=[	$smash9,	hknight_smash10	] {ai_charge(3); ai_melee();};
void()	hknight_smash10	=[	$smash10,	hknight_smash11	] {ai_charge(0);};
void()	hknight_smash11	=[	$smash11,	hknight_run1	] {ai_charge(0);};

//============================================================================

void()	hknight_watk1	=[	$w_attack1,	hknight_watk2	] {ai_charge(2);};
void()	hknight_watk2	=[	$w_attack2,	hknight_watk3	] {ai_charge(0);};
void()	hknight_watk3	=[	$w_attack3,	hknight_watk4	] {ai_charge(0);};
void()	hknight_watk4	=[	$w_attack4,	hknight_watk5	] {ai_melee();};
void()	hknight_watk5	=[	$w_attack5,	hknight_watk6	] {ai_melee();};
void()	hknight_watk6	=[	$w_attack6,	hknight_watk7	] {ai_melee();};
void()	hknight_watk7	=[	$w_attack7,	hknight_watk8	] {ai_charge(1);};
void()	hknight_watk8	=[	$w_attack8,	hknight_watk9	] {ai_charge(4);};
void()	hknight_watk9	=[	$w_attack9,	hknight_watk10	] {ai_charge(5);};
void()	hknight_watk10	=[	$w_attack10,	hknight_watk11	] {ai_charge(3); ai_melee();};
void()	hknight_watk11	=[	$w_attack11,	hknight_watk12	] {ai_charge(2); ai_melee();};
void()	hknight_watk12	=[	$w_attack12,	hknight_watk13	] {ai_charge(2); ai_melee();};
void()	hknight_watk13	=[	$w_attack13,	hknight_watk14	] {ai_charge(0);};
void()	hknight_watk14	=[	$w_attack14,	hknight_watk15	] {ai_charge(0);};
void()	hknight_watk15	=[	$w_attack15,	hknight_watk16	] {ai_charge(0);};
void()	hknight_watk16	=[	$w_attack16,	hknight_watk17	] {ai_charge(1);};
void()	hknight_watk17	=[	$w_attack17,	hknight_watk18	] {ai_charge(1); ai_melee();};
void()	hknight_watk18	=[	$w_attack18,	hknight_watk19	] {ai_charge(3); ai_melee();};
void()	hknight_watk19	=[	$w_attack19,	hknight_watk20	] {ai_charge(4); ai_melee();};
void()	hknight_watk20	=[	$w_attack20,	hknight_watk21	] {ai_charge(6);};
void()	hknight_watk21	=[	$w_attack21,	hknight_watk22	] {ai_charge(7);};
void()	hknight_watk22	=[	$w_attack22,	hknight_run1	] {ai_charge(3);};

//============================================================================

void() hk_idle_sound =
{
	if (random() &lt; 0.2)
		sound (self, CHAN_VOICE, &quot;hknight/idle.wav&quot;, 1, ATTN_NORM);
};

void(entity attacker, float damage)	hknight_pain =
{
	if (self.pain_finished &gt; time)
		return;

	sound (self, CHAN_VOICE, &quot;hknight/pain1.wav&quot;, 1, ATTN_NORM);

	if (time - self.pain_finished &gt; 5)
	{	// allways go into pain frame if it has been a while
		hknight_pain1 ();
		self.pain_finished = time + 1;
		return;
	}
	
	if ((random()*30 &gt; damage) )
		return;		// didn't flinch

	self.pain_finished = time + 1;
	hknight_pain1 ();
};

float	hknight_type;

void() hknight_melee =
{
	hknight_type = hknight_type + 1;

	sound (self, CHAN_WEAPON, &quot;hknight/slash1.wav&quot;, 1, ATTN_NORM);
	if (hknight_type == 1)
		hknight_slice1 ();
	else if (hknight_type == 2)
		hknight_smash1 ();
	else if (hknight_type == 3)
	{
		hknight_watk1 ();
		hknight_type = 0;
	}
};

/*QUAKED monster_hell_knight (1 0 0) (-16 -16 -24) (16 16 40) Ambush
*/
void() monster_hell_knight =
{
	if (deathmatch)
	{
		remove(self);
		return;
	}
	precache_model2 (&quot;progs/hknight.mdl&quot;);
	precache_model2 (&quot;progs/k_spike.mdl&quot;);
	precache_model2 (&quot;progs/h_hellkn.mdl&quot;);

	
	precache_sound2 (&quot;hknight/attack1.wav&quot;);
	precache_sound2 (&quot;hknight/death1.wav&quot;);
	precache_sound2 (&quot;hknight/pain1.wav&quot;);
	precache_sound2 (&quot;hknight/sight1.wav&quot;);
	precache_sound (&quot;hknight/hit.wav&quot;);		// used by C code, so don't sound2
	precache_sound2 (&quot;hknight/slash1.wav&quot;);
	precache_sound2 (&quot;hknight/idle.wav&quot;);
	precache_sound2 (&quot;hknight/grunt.wav&quot;);

	precache_sound (&quot;knight/sword1.wav&quot;);
	precache_sound (&quot;knight/sword2.wav&quot;);
	
	self.solid = SOLID_SLIDEBOX;
	self.movetype = MOVETYPE_STEP;

	setmodel (self, &quot;progs/hknight.mdl&quot;);

	setsize (self, '-16 -16 -24', '16 16 40');
	self.health = 250;

	self.th_stand = hknight_stand1;
	self.th_walk = hknight_walk1;
	self.th_run = hknight_run1;
	self.th_melee = hknight_melee;
	self.th_missile = hknight_magicc1;
	self.th_pain = hknight_pain;
	self.th_die = hknight_die;
	
	walkmonster_start ();
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>lrfkqq4m83se77lfxavmgdujfak11io</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>iD Software</title>
    <ns>0</ns>
    <id>636</id>
    <redirect title="Id Software" />
    <revision>
      <id>1869</id>
      <timestamp>2013-03-25T01:18:38Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>Redirected page to [[ID Software]]</comment>
      <text xml:space="preserve" bytes="25">#REDIRECT [[ID Software]]</text>
      <sha1>fmr6tgrs7ze1dt0pqfmn51xuewy2syi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1870</id>
      <parentid>1869</parentid>
      <timestamp>2013-03-25T01:18:54Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>Redirected page to [[Id Software]]</comment>
      <text xml:space="preserve" bytes="25">#REDIRECT [[Id Software]]</text>
      <sha1>gs8izcz4e2tz1jrug6mxyb6ehr9u8dh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>id Software</title>
    <ns>0</ns>
    <id>565</id>
    <revision>
      <id>1474</id>
      <timestamp>2009-12-11T20:31:36Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}} '''id Software''' is the company that made Quake.  == External links == * http://www.idsoftware.com * http://en.wikipedia.org/wiki/id_Software</comment>
      <text xml:space="preserve" bytes="168">{{lowercase-underscores}}
'''id Software''' is the company that made Quake.

== External links ==
* http://www.idsoftware.com
* http://en.wikipedia.org/wiki/id_Software</text>
      <sha1>fpzklil9tm7lsuiuqio42g1ev65h1s4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1475</id>
      <parentid>1474</parentid>
      <timestamp>2009-12-11T20:32:36Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="156">{{lowercase}}
'''id Software''' is the company that made Quake.

== External links ==
* http://www.idsoftware.com
* http://en.wikipedia.org/wiki/id_Software</text>
      <sha1>2epvyfhgtoo1f2i9h0qzsp8mdnlt06k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2379</id>
      <parentid>1475</parentid>
      <timestamp>2013-03-28T14:56:04Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Spirit moved page [[Id Software]] to [[id Software]] over redirect: lowercase</comment>
      <text xml:space="preserve" bytes="156">{{lowercase}}
'''id Software''' is the company that made Quake.

== External links ==
* http://www.idsoftware.com
* http://en.wikipedia.org/wiki/id_Software</text>
      <sha1>2epvyfhgtoo1f2i9h0qzsp8mdnlt06k</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>info intermission</title>
    <ns>0</ns>
    <id>354</id>
    <revision>
      <id>581</id>
      <timestamp>2008-04-11T02:22:15Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: This entity is used like a camera in Quake, shown only when you exit the level with a [[trigger_changelevel]] brush entity. This is the &quot;intermission&quot; you see, usually with a nice view of ...</comment>
      <text xml:space="preserve" bytes="1516">This entity is used like a camera in Quake, shown only when you exit the level with a [[trigger_changelevel]] brush entity. This is the &quot;intermission&quot; you see, usually with a nice view of a graphical highlight of the level before the next level loads, or while text is written across the screen (that text has to be hard coded into the QuakeC). Simply place the entity in your level at the place you want the CAMERA to be positioned, and give the &quot;mangle&quot; keyvalue three values in the form of xxx yyy zzz, where each value is separated by a single space. xxx refers to the pitch of the camera angle. Positive values point the camera down, negative values point it up. yyy refers to the compass heading of the camera. zzz refers to the &quot;roll&quot; of the camera. If the camera has a positive roll value, the camera will be tilted to the right, while a negative value will tilt the camera to the left. You can download a sample map with an [[info_intermission]] entity in use by clicking here. If a level ends, and the [[trigger_changelevel]] that ends the level calls for a intermission, and there is NO [[info_intermission]] entity, Quake will simply the info_player_start entity in a similar manner, but with no pitch and roll values. You can also place several [[info_intermission]] entities in your map, and Quake will semi-randomly choose amongst them when the level ends for showing the intermission view. This entity can be ignored if you select a &quot;no intermission&quot; flag in the [[trigger_changelevel]] brush entity.</text>
      <sha1>e8rhlm1ix82d9cvd1dlrj29sytmn2we</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>583</id>
      <parentid>581</parentid>
      <timestamp>2008-04-11T02:25:01Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="1520">This entity is used like a camera in Quake, shown only when you exit the level with a [[trigger_changelevel]] brush entity. This is the &quot;intermission&quot; you see, usually with a nice view of a graphical highlight of the level before the next level loads, or while text is written across the screen (that text has to be hard coded into the QuakeC). Simply place the entity in your level at the place you want the CAMERA to be positioned, and give the &quot;mangle&quot; keyvalue three values in the form of xxx yyy zzz, where each value is separated by a single space. xxx refers to the pitch of the camera angle. Positive values point the camera down, negative values point it up. yyy refers to the compass heading of the camera. zzz refers to the &quot;roll&quot; of the camera. If the camera has a positive roll value, the camera will be tilted to the right, while a negative value will tilt the camera to the left. You can download a sample map with an [[info_intermission]] entity in use by clicking here. If a level ends, and the [[trigger_changelevel]] that ends the level calls for a intermission, and there is NO [[info_intermission]] entity, Quake will simply the [[info_player_s]]tart entity in a similar manner, but with no pitch and roll values. You can also place several [[info_intermission]] entities in your map, and Quake will semi-randomly choose amongst them when the level ends for showing the intermission view. This entity can be ignored if you select a &quot;no intermission&quot; flag in the [[trigger_changelevel]] brush entity.</text>
      <sha1>p95uasa6r0yds5o8cwspa5pwrj7ijp2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2530</id>
      <parentid>583</parentid>
      <timestamp>2013-03-29T14:22:02Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Info intermission]] to [[info intermission]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="1520">This entity is used like a camera in Quake, shown only when you exit the level with a [[trigger_changelevel]] brush entity. This is the &quot;intermission&quot; you see, usually with a nice view of a graphical highlight of the level before the next level loads, or while text is written across the screen (that text has to be hard coded into the QuakeC). Simply place the entity in your level at the place you want the CAMERA to be positioned, and give the &quot;mangle&quot; keyvalue three values in the form of xxx yyy zzz, where each value is separated by a single space. xxx refers to the pitch of the camera angle. Positive values point the camera down, negative values point it up. yyy refers to the compass heading of the camera. zzz refers to the &quot;roll&quot; of the camera. If the camera has a positive roll value, the camera will be tilted to the right, while a negative value will tilt the camera to the left. You can download a sample map with an [[info_intermission]] entity in use by clicking here. If a level ends, and the [[trigger_changelevel]] that ends the level calls for a intermission, and there is NO [[info_intermission]] entity, Quake will simply the [[info_player_s]]tart entity in a similar manner, but with no pitch and roll values. You can also place several [[info_intermission]] entities in your map, and Quake will semi-randomly choose amongst them when the level ends for showing the intermission view. This entity can be ignored if you select a &quot;no intermission&quot; flag in the [[trigger_changelevel]] brush entity.</text>
      <sha1>p95uasa6r0yds5o8cwspa5pwrj7ijp2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>info notnull</title>
    <ns>0</ns>
    <id>566</id>
    <revision>
      <id>1484</id>
      <timestamp>2009-12-21T10:01:41Z</timestamp>
      <contributor>
        <ip>88.70.236.217</ip>
      </contributor>
      <comment>New page: This is a wildcard entity. It has no predefined functions in the game code, but unlike its equivalent [[info_null]], it does not remove itself. It can therefore be used to incorporate an a...</comment>
      <text xml:space="preserve" bytes="309">This is a wildcard entity. It has no predefined functions in the game code, but unlike its equivalent [[info_null]], it does not remove itself. It can therefore be used to incorporate an array of non-standard features in a map by adopting individual functions of other entities, so-called [[progs.dat hacks]].</text>
      <sha1>sl2grv0ef8bq9s10derimpy1rjt4f9a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1485</id>
      <parentid>1484</parentid>
      <timestamp>2009-12-21T10:06:01Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <text xml:space="preserve" bytes="328">== info_notnull ==
This is a wildcard entity. It has no predefined functions in the game code, but unlike its equivalent [[info_null]], it does not remove itself. It can therefore be used to incorporate an array of non-standard features in a map by adopting individual functions of other entities, so-called [[progs.dat hacks]].</text>
      <sha1>tmza8yi111ojz0cgmuv62lt9mkm8hxk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2357</id>
      <parentid>1485</parentid>
      <timestamp>2013-03-27T15:26:14Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>fixed title?</comment>
      <text xml:space="preserve" bytes="340">{{DISPLAYTITLE:info_notnull}}

This is a wildcard entity. It has no predefined functions in the game code, but unlike its equivalent [[info_null]], it does not remove itself. It can therefore be used to incorporate an array of non-standard features in a map by adopting individual functions of other entities, so-called [[progs.dat hacks]].</text>
      <sha1>o6ytdb4hn7oymzqlkjrfe8x4srpz311</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2358</id>
      <parentid>2357</parentid>
      <timestamp>2013-03-27T15:27:44Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>Than moved page [[Info notnull]] to [[info notnull]] without leaving a redirect: all the other entities are lower case currently. Although this goes against the wiki naming rules, for some reason, having an upper case letter at the start breaks the DIS...</comment>
      <text xml:space="preserve" bytes="340">{{DISPLAYTITLE:info_notnull}}

This is a wildcard entity. It has no predefined functions in the game code, but unlike its equivalent [[info_null]], it does not remove itself. It can therefore be used to incorporate an array of non-standard features in a map by adopting individual functions of other entities, so-called [[progs.dat hacks]].</text>
      <sha1>o6ytdb4hn7oymzqlkjrfe8x4srpz311</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2373</id>
      <parentid>2358</parentid>
      <timestamp>2013-03-28T12:30:39Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>changed link</comment>
      <text xml:space="preserve" bytes="356">{{DISPLAYTITLE:info_notnull}}

This is a wildcard entity. It has no predefined functions in the game code, but unlike its equivalent [[info_null]], it does not remove itself. It can therefore be used to incorporate an array of non-standard features in a map by adopting individual functions of other entities, so-called [[Map_based_hacks|progs.dat hacks]].</text>
      <sha1>e3aahymsa4krwimhrulbciqd0l8bmxw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>info null</title>
    <ns>0</ns>
    <id>767</id>
    <revision>
      <id>2195</id>
      <timestamp>2013-03-26T04:36:04Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>Created page with &quot;{{DISPLAYTITLE:info_null}}  '''info_null''' is a special entity that is used as a target for lights in order to set the direction of spotlights. However, all modern light tool...&quot;</comment>
      <text xml:space="preserve" bytes="1009">{{DISPLAYTITLE:info_null}}

'''info_null''' is a special entity that is used as a target for lights in order to set the direction of spotlights. However, all modern light tools support additional keys added to lights directly that is used to set the angle in a more convenient way, so info_null is almost never used.

Do not confuse info_null and [[info_notnull]]. info_notnull is an extremely useful entity, and is primarily used for [[map based hacks]] that allow the level designer to add various features to levels that are not directly supported by the standard Quake entities, and without needing a [[mod]].

==Keys==
{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''targetname'' || The name of the info_notnull. If the info_notnull is targeted by a light, the light will become a spotlight that faces in the direction of the info_notnull.
|}

==Spawnflags==
The info_notnull does not support any spawnflags, since it is removed from the level at compile time.

[[Category:Quake entities]]</text>
      <sha1>sod7tc8e1eu6k74gabzm70vutdtub1z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2196</id>
      <parentid>2195</parentid>
      <timestamp>2013-03-26T04:37:51Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1029">{{DISPLAYTITLE:info_null}}

'''info_null''' is a special entity that is used as a target for lights in order to set the direction of spotlights. However, all modern light tools support additional keys added to lights directly that is used to set the angle in a more convenient way, so info_null is almost never used.

Do not confuse info_null and [[info_notnull]]. info_notnull is an extremely useful entity, and is primarily used for [[map based hacks]] that allow the level designer to add various features to levels that are not directly supported by the standard Quake entities, and without needing a [[mod]].

==Attributes==

===Keys===
{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''targetname'' || The name of the info_notnull. If the info_notnull is targeted by a light, the light will become a spotlight that faces in the direction of the info_notnull.
|}

===Spawnflags===
The info_notnull does not support any spawnflags, since it is removed from the level at compile time.

[[Category:Quake entities]]</text>
      <sha1>e91hddqw1vo20a5ko6aegzeg52dc3pd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2198</id>
      <parentid>2196</parentid>
      <timestamp>2013-03-26T04:39:32Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>changed case of Map based hacks to create correctly titled article (GRRR WIKI!)</comment>
      <text xml:space="preserve" bytes="1045">{{DISPLAYTITLE:info_null}}

'''info_null''' is a special entity that is used as a target for lights in order to set the direction of spotlights. However, all modern light tools support additional keys added to lights directly that is used to set the angle in a more convenient way, so info_null is almost never used.

Do not confuse info_null and [[info_notnull]]. info_notnull is an extremely useful entity, and is primarily used for [[Map based hacks|map based hacks]] that allow the level designer to add various features to levels that are not directly supported by the standard Quake entities, and without needing a [[mod]].

==Attributes==

===Keys===
{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''targetname'' || The name of the info_notnull. If the info_notnull is targeted by a light, the light will become a spotlight that faces in the direction of the info_notnull.
|}

===Spawnflags===
The info_notnull does not support any spawnflags, since it is removed from the level at compile time.

[[Category:Quake entities]]</text>
      <sha1>nzv5uszsx33iwyu76y2gpq5tx637yqh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2205</id>
      <parentid>2198</parentid>
      <timestamp>2013-03-26T04:56:55Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <text xml:space="preserve" bytes="1115">{{DISPLAYTITLE:info_null}}

'''info_null''' is a special entity that is used as a target for lights and [[event_lightning]] in order to set the direction of spotlights and as the end destination of event_lightning. However, all modern light tools support additional keys added to lights directly that is used to set the angle in a more convenient way, so info_null is almost never used.

Do not confuse info_null and [[info_notnull]]. info_notnull is an extremely useful entity, and is primarily used for [[Map based hacks|map based hacks]] that allow the level designer to add various features to levels that are not directly supported by the standard Quake entities, and without needing a [[mod]].

==Attributes==

===Keys===
{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''targetname'' || The name of the info_notnull. If the info_notnull is targeted by a light, the light will become a spotlight that faces in the direction of the info_notnull.
|}

===Spawnflags===
The info_notnull does not support any spawnflags, since it is removed from the level at compile time.

[[Category:Quake entities]]</text>
      <sha1>jt7neyzdy3qt884xenov584s7fmumtl</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2773</id>
      <parentid>2205</parentid>
      <timestamp>2013-04-06T13:32:15Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Removed incorrect/redundant information, slightly rewritten.</comment>
      <text xml:space="preserve" bytes="761">{{DISPLAYTITLE:info_null}}

'''info_null''' is a simple point entity that removes itself on map start. It is used as a target for lights in order to set the direction and width of spotlights. Since modern light tools typically support additional keys on lights for improved spotlight control, the info_null entity is largely redundant nowadays.


==Attributes==

===Keys===
{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''targetname'' || The name of the info_notnull. If the info_notnull is targeted by a light, the light will become a spotlight that faces in the direction of the info_notnull.
|}

===Spawnflags===
The info_notnull does not support any spawnflags, since it is removed from the level at compile time.

[[Category:Quake entities]]</text>
      <sha1>1x1szx1af2cnrmpeclpcsakb1h9u56z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>info player coop</title>
    <ns>0</ns>
    <id>655</id>
    <revision>
      <id>1963</id>
      <timestamp>2013-03-25T08:16:39Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>added a short description</comment>
      <text xml:space="preserve" bytes="466">{{DISPLAYTITLE:info_player_coop}}

The '''info_player_coop''' entity functions the same as the [[info_player_start]] entity, with the exception that it is only used in [[coop]] mode. In maps that support coop, there are usually four of these, since the player limit for standard [[NetQuake]] is 4. The regular player start point is also used in coop, so in reality, only three are necessary to support four players spawning at the same time without [[telefragging]].</text>
      <sha1>239mq9qyqiug3np606wlbxabtuvwx5z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1964</id>
      <parentid>1963</parentid>
      <timestamp>2013-03-25T08:18:16Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>added category</comment>
      <text xml:space="preserve" bytes="496">{{DISPLAYTITLE:info_player_coop}}

The '''info_player_coop''' entity functions the same as the [[info_player_start]] entity, with the exception that it is only used in [[coop]] mode. In maps that support coop, there are usually four of these, since the player limit for standard [[NetQuake]] is 4. The regular player start point is also used in coop, so in reality, only three are necessary to support four players spawning at the same time without [[telefragging]].


[[Category:Quake entities]]</text>
      <sha1>qaayf7b1pqqn25botawky21gzazismv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>info player deathmatch</title>
    <ns>0</ns>
    <id>640</id>
    <revision>
      <id>1876</id>
      <timestamp>2013-03-25T01:40:38Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>Added basic info</comment>
      <text xml:space="preserve" bytes="667">The info_player_deathmatch entity is used to define the [[respawn]] points used in [[deathmatch]] mode. Players entering the game, and respawning after being killed will be placed at one of these entities.

There is no upper limit on the number of info_playe_deathmatch entities that can be placed, but at least one is required in order to test a level in deathmatch, and a larger number should be used in order to prevent frequent [[telefragging]] and make [[spawn camping]] more difficult. Generally speaking, larger levels that support more players should have more respawn points than smaller levels, and even for [[1-on-1]] maps, 5 or 6 is the suggested minimum.</text>
      <sha1>e6k71mhoykopf3cfazxafw6mlpnlt78</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1883</id>
      <parentid>1876</parentid>
      <timestamp>2013-03-25T02:00:02Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <comment>added more info for mapping</comment>
      <text xml:space="preserve" bytes="1223">The info_player_deathmatch entity is used to define the [[respawn]] points used in [[deathmatch]] mode. Players entering the game, and respawning after being killed will be placed at one of these entities.

There is no upper limit on the number of info_playe_deathmatch entities that can be placed, but at least one is required in order to test a level in deathmatch, and a larger number should be used in order to prevent frequent [[telefragging]] and make [[spawn camping]] more difficult. Generally speaking, larger levels that support more players should have more respawn points than smaller levels, and even for [[1-on-1]] maps, 5 or 6 is the suggested minimum.

== Attributes ==
info_player_deathmatch has the following attributes in [[Worldcraft]]:

* Angle : The direction the entity faces when spawned

== Flags ==
info_player_deathmatch has the following entity [[spawnflags]]:

* Not in Easy : The entity will not exist if the player is in Easy difficulty mode
* Not in Normal : The entity will not exist if the player is in Normal difficulty mode
* Not in Hard : The entity will not exist if the player is in Hard difficulty mode
* Not in Deathmatch : The entity will not exist if the game is a Deathmatch game</text>
      <sha1>1bgx6qovthl1lxttsp2u6w4fk2hhtvy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1888</id>
      <parentid>1883</parentid>
      <timestamp>2013-03-25T02:22:43Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="1252">The info_player_deathmatch entity is used to define the [[respawn]] points used in [[deathmatch]] mode. Players entering the game, and respawning after being killed will be placed at one of these entities.

There is no upper limit on the number of info_playe_deathmatch entities that can be placed, but at least one is required in order to test a level in deathmatch, and a larger number should be used in order to prevent frequent [[telefragging]] and make [[spawn camping]] more difficult. Generally speaking, larger levels that support more players should have more respawn points than smaller levels, and even for [[1-on-1]] maps, 5 or 6 is the suggested minimum.

== Attributes ==
info_player_deathmatch has the following attributes in [[Worldcraft]]:

* Angle : The direction the entity faces when spawned

== Flags ==
info_player_deathmatch has the following entity [[spawnflags]]:

* Not in Easy : The entity will not exist if the player is in Easy difficulty mode
* Not in Normal : The entity will not exist if the player is in Normal difficulty mode
* Not in Hard : The entity will not exist if the player is in Hard difficulty mode
* Not in Deathmatch : The entity will not exist if the game is a Deathmatch game

[[Category:Quake entities]]</text>
      <sha1>jsgiurkdupb71c5vl1i7fi19gm7c30c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1961</id>
      <parentid>1888</parentid>
      <timestamp>2013-03-25T07:26:05Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>fixed title</comment>
      <text xml:space="preserve" bytes="1293">{{DISPLAYTITLE:info_player_deathmatch}}

The info_player_deathmatch entity is used to define the [[respawn]] points used in [[deathmatch]] mode. Players entering the game, and respawning after being killed will be placed at one of these entities.

There is no upper limit on the number of info_playe_deathmatch entities that can be placed, but at least one is required in order to test a level in deathmatch, and a larger number should be used in order to prevent frequent [[telefragging]] and make [[spawn camping]] more difficult. Generally speaking, larger levels that support more players should have more respawn points than smaller levels, and even for [[1-on-1]] maps, 5 or 6 is the suggested minimum.

== Attributes ==
info_player_deathmatch has the following attributes in [[Worldcraft]]:

* Angle : The direction the entity faces when spawned

== Flags ==
info_player_deathmatch has the following entity [[spawnflags]]:

* Not in Easy : The entity will not exist if the player is in Easy difficulty mode
* Not in Normal : The entity will not exist if the player is in Normal difficulty mode
* Not in Hard : The entity will not exist if the player is in Hard difficulty mode
* Not in Deathmatch : The entity will not exist if the game is a Deathmatch game

[[Category:Quake entities]]</text>
      <sha1>rix5tzmnc62mxci5djot0czquobsm7p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>info player start</title>
    <ns>0</ns>
    <id>638</id>
    <revision>
      <id>1873</id>
      <timestamp>2013-03-25T01:28:30Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>Added some basic information</comment>
      <text xml:space="preserve" bytes="577">The info_player_start entity defines the start location of the player in a single-player game of Quake. It is also used as a spawn point in cooperative play, although level authors are encouraged to also provide specific cooperative spawn points by also placing [[info_player_coop]] entities in their maps.

As with almost all entities, the info_player_start can be enabled/disabled depending on the difficulty settings by using [[spawnflags]]. In the case of info_player_start, this can be used to allow the player to spawn in a different location depending on map difficulty.</text>
      <sha1>8a32sbr0abnlm0rgzu21fomqa9n9d3x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1881</id>
      <parentid>1873</parentid>
      <timestamp>2013-03-25T01:57:55Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="1131">The info_player_start entity defines the start location of the player in a single-player game of Quake. It is also used as a spawn point in cooperative play, although level authors are encouraged to also provide specific cooperative spawn points by also placing [[info_player_coop]] entities in their maps.

As with almost all entities, the info_player_start can be enabled/disabled depending on the difficulty settings by using [[spawnflags]]. In the case of info_player_start, this can be used to allow the player to spawn in a different location depending on map difficulty.

== Attributes ==
info_player_start has the following attributes in [[Worldcraft]]:

* Angle : The direction of motion for the entity when spawned

== Flags ==
info_player_start has the following entity [[spawnflags]]:

* Not in Easy : The entity will not exist if the player is in Easy difficulty mode
* Not in Normal : The entity will not exist if the player is in Normal difficulty mode
* Not in Hard : The entity will not exist if the player is in Hard difficulty mode
* Not in Deathmatch : The entity will not exist if the game is a Deathmatch game</text>
      <sha1>pl25f7fkn1bh62x8cimij3y0skgcmqk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1882</id>
      <parentid>1881</parentid>
      <timestamp>2013-03-25T01:58:20Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>/* Attributes */ rewording</comment>
      <text xml:space="preserve" bytes="1123">The info_player_start entity defines the start location of the player in a single-player game of Quake. It is also used as a spawn point in cooperative play, although level authors are encouraged to also provide specific cooperative spawn points by also placing [[info_player_coop]] entities in their maps.

As with almost all entities, the info_player_start can be enabled/disabled depending on the difficulty settings by using [[spawnflags]]. In the case of info_player_start, this can be used to allow the player to spawn in a different location depending on map difficulty.

== Attributes ==
info_player_start has the following attributes in [[Worldcraft]]:

* Angle : The direction the entity faces when spawned

== Flags ==
info_player_start has the following entity [[spawnflags]]:

* Not in Easy : The entity will not exist if the player is in Easy difficulty mode
* Not in Normal : The entity will not exist if the player is in Normal difficulty mode
* Not in Hard : The entity will not exist if the player is in Hard difficulty mode
* Not in Deathmatch : The entity will not exist if the game is a Deathmatch game</text>
      <sha1>kifzuq4z56p1tu8mkdjruqmwl26j652</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1885</id>
      <parentid>1882</parentid>
      <timestamp>2013-03-25T02:21:52Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>categories</comment>
      <text xml:space="preserve" bytes="1152">The info_player_start entity defines the start location of the player in a single-player game of Quake. It is also used as a spawn point in cooperative play, although level authors are encouraged to also provide specific cooperative spawn points by also placing [[info_player_coop]] entities in their maps.

As with almost all entities, the info_player_start can be enabled/disabled depending on the difficulty settings by using [[spawnflags]]. In the case of info_player_start, this can be used to allow the player to spawn in a different location depending on map difficulty.

== Attributes ==
info_player_start has the following attributes in [[Worldcraft]]:

* Angle : The direction the entity faces when spawned

== Flags ==
info_player_start has the following entity [[spawnflags]]:

* Not in Easy : The entity will not exist if the player is in Easy difficulty mode
* Not in Normal : The entity will not exist if the player is in Normal difficulty mode
* Not in Hard : The entity will not exist if the player is in Hard difficulty mode
* Not in Deathmatch : The entity will not exist if the game is a Deathmatch game

[[Category:Quake entities]]</text>
      <sha1>dy8txhhb9dumpel25oetn4hyw335vf5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1960</id>
      <parentid>1885</parentid>
      <timestamp>2013-03-25T07:25:26Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>fixed title</comment>
      <text xml:space="preserve" bytes="1188">{{DISPLAYTITLE:info_player_start}}

The info_player_start entity defines the start location of the player in a single-player game of Quake. It is also used as a spawn point in cooperative play, although level authors are encouraged to also provide specific cooperative spawn points by also placing [[info_player_coop]] entities in their maps.

As with almost all entities, the info_player_start can be enabled/disabled depending on the difficulty settings by using [[spawnflags]]. In the case of info_player_start, this can be used to allow the player to spawn in a different location depending on map difficulty.

== Attributes ==
info_player_start has the following attributes in [[Worldcraft]]:

* Angle : The direction the entity faces when spawned

== Flags ==
info_player_start has the following entity [[spawnflags]]:

* Not in Easy : The entity will not exist if the player is in Easy difficulty mode
* Not in Normal : The entity will not exist if the player is in Normal difficulty mode
* Not in Hard : The entity will not exist if the player is in Hard difficulty mode
* Not in Deathmatch : The entity will not exist if the game is a Deathmatch game

[[Category:Quake entities]]</text>
      <sha1>14drgtg34pdtlunyrmypdw52bl1t9xs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1962</id>
      <parentid>1960</parentid>
      <timestamp>2013-03-25T08:10:12Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>info_player_start now bold</comment>
      <text xml:space="preserve" bytes="1194">{{DISPLAYTITLE:info_player_start}}

The '''info_player_start''' entity defines the start location of the player in a single-player game of Quake. It is also used as a spawn point in cooperative play, although level authors are encouraged to also provide specific cooperative spawn points by also placing [[info_player_coop]] entities in their maps.

As with almost all entities, the info_player_start can be enabled/disabled depending on the difficulty settings by using [[spawnflags]]. In the case of info_player_start, this can be used to allow the player to spawn in a different location depending on map difficulty.

== Attributes ==
info_player_start has the following attributes in [[Worldcraft]]:

* Angle : The direction the entity faces when spawned

== Flags ==
info_player_start has the following entity [[spawnflags]]:

* Not in Easy : The entity will not exist if the player is in Easy difficulty mode
* Not in Normal : The entity will not exist if the player is in Normal difficulty mode
* Not in Hard : The entity will not exist if the player is in Hard difficulty mode
* Not in Deathmatch : The entity will not exist if the game is a Deathmatch game

[[Category:Quake entities]]</text>
      <sha1>opjiyen2ot7k7xa4zhah02l7frn8f7m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>info player start2</title>
    <ns>0</ns>
    <id>647</id>
    <revision>
      <id>1922</id>
      <timestamp>2013-03-25T03:38:06Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <comment>added info_player_start2 page and content</comment>
      <text xml:space="preserve" bytes="744">'''Info_player_start2'''

Info_player_start2 is used in [[Vanilla Quake]] as the return point from the end of an episode back into the start map area where episode selections are made by the player. It was placed in a location (in front of the Teleport that originated in the skill selection area) that bypassed the skill selection portion of the level. In any case where a player is entering a level named start.bsp ''(this needs to be tested as the level name might not be a factor)'' from another level this is where they will be sent to instead of the [[info_player_start]] point entity that is also required for any valid Quake map.

All of the other information found in the [[info_player_start]] page is applicable to info_player_start2.</text>
      <sha1>gty6amuddvr98dp4266618l1qd1pe65</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1925</id>
      <parentid>1922</parentid>
      <timestamp>2013-03-25T03:42:53Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <comment>categories</comment>
      <text xml:space="preserve" bytes="772">'''Info_player_start2'''

Info_player_start2 is used in [[Vanilla Quake]] as the return point from the end of an episode back into the start map area where episode selections are made by the player. It was placed in a location (in front of the Teleport that originated in the skill selection area) that bypassed the skill selection portion of the level. In any case where a player is entering a level named start.bsp ''(this needs to be tested as the level name might not be a factor)'' from another level this is where they will be sent to instead of the [[info_player_start]] point entity that is also required for any valid Quake map.

All of the other information found in the [[info_player_start]] page is applicable to info_player_start2.
[[Category:Quake entities]]</text>
      <sha1>ek3mtk7oa618slhu5hp2ef5m9ud4o7r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>info teleport destination</title>
    <ns>0</ns>
    <id>353</id>
    <revision>
      <id>578</id>
      <timestamp>2008-04-11T02:18:37Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page:      This entity is used in almost all levels, as destination points for trigger_teleport entities. You need to give this entity a &quot;targetname&quot; keyvalue to connect it with the trigger_tele...</comment>
      <text xml:space="preserve" bytes="1014">     This entity is used in almost all levels, as destination points for trigger_teleport entities. You need to give this entity a &quot;targetname&quot; keyvalue to connect it with the trigger_teleport's &quot;targetname&quot;. The facing direction is used to define the direction the player is facing after teleporting. Download a teleporter example map by clicking here.

Several teleporters can address the same destination with no problem. For example, no matter which skill gate you step through in Quake's start map, you always end up in the same location in the episode selection room. Although these entities can't be used with difficulty settings, with some advanced mapping, you can make certain teleporters only available at certain skill levels with a func_wall or something along those lines. This will allow you to put teleporters (ie: needed to access the next area in the map) that are open at higher skill levels on terrain that is difficult to reach, and possibly at ground level, in plain view, for the easy skill.</text>
      <sha1>2evrkoy5f5m3veyn8g30249480ngkcs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>579</id>
      <parentid>578</parentid>
      <timestamp>2008-04-11T02:19:13Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="1012">   This entity is used in almost all levels, as destination points for trigger_teleport entities. You need to give this entity a &quot;targetname&quot; keyvalue to connect it with the trigger_teleport's &quot;targetname&quot;. The facing direction is used to define the direction the player is facing after teleporting. Download a teleporter example map by clicking here.

Several teleporters can address the same destination with no problem. For example, no matter which skill gate you step through in Quake's start map, you always end up in the same location in the episode selection room. Although these entities can't be used with difficulty settings, with some advanced mapping, you can make certain teleporters only available at certain skill levels with a func_wall or something along those lines. This will allow you to put teleporters (ie: needed to access the next area in the map) that are open at higher skill levels on terrain that is difficult to reach, and possibly at ground level, in plain view, for the easy skill.</text>
      <sha1>al59qk8zzqho353dyaur4t3ov68yhck</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>580</id>
      <parentid>579</parentid>
      <timestamp>2008-04-11T02:19:24Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="1009">This entity is used in almost all levels, as destination points for trigger_teleport entities. You need to give this entity a &quot;targetname&quot; keyvalue to connect it with the trigger_teleport's &quot;targetname&quot;. The facing direction is used to define the direction the player is facing after teleporting. Download a teleporter example map by clicking here.

Several teleporters can address the same destination with no problem. For example, no matter which skill gate you step through in Quake's start map, you always end up in the same location in the episode selection room. Although these entities can't be used with difficulty settings, with some advanced mapping, you can make certain teleporters only available at certain skill levels with a func_wall or something along those lines. This will allow you to put teleporters (ie: needed to access the next area in the map) that are open at higher skill levels on terrain that is difficult to reach, and possibly at ground level, in plain view, for the easy skill.</text>
      <sha1>47v5k7ou0we3hepnlrbdwer4g5ewm92</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2532</id>
      <parentid>580</parentid>
      <timestamp>2013-03-29T14:22:03Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Info teleport destination]] to [[info teleport destination]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="1009">This entity is used in almost all levels, as destination points for trigger_teleport entities. You need to give this entity a &quot;targetname&quot; keyvalue to connect it with the trigger_teleport's &quot;targetname&quot;. The facing direction is used to define the direction the player is facing after teleporting. Download a teleporter example map by clicking here.

Several teleporters can address the same destination with no problem. For example, no matter which skill gate you step through in Quake's start map, you always end up in the same location in the episode selection room. Although these entities can't be used with difficulty settings, with some advanced mapping, you can make certain teleporters only available at certain skill levels with a func_wall or something along those lines. This will allow you to put teleporters (ie: needed to access the next area in the map) that are open at higher skill levels on terrain that is difficult to reach, and possibly at ground level, in plain view, for the easy skill.</text>
      <sha1>47v5k7ou0we3hepnlrbdwer4g5ewm92</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3272</id>
      <parentid>2532</parentid>
      <timestamp>2014-09-30T07:36:23Z</timestamp>
      <contributor>
        <ip>192.168.4.107</ip>
      </contributor>
      <comment>correction, trigger_teleport's target (not targetname) connects to info_teleport_destination</comment>
      <text xml:space="preserve" bytes="1005">This entity is used in almost all levels, as destination points for trigger_teleport entities. You need to give this entity a &quot;targetname&quot; keyvalue to connect it with the trigger_teleport's &quot;target&quot;. The facing direction is used to define the direction the player is facing after teleporting. Download a teleporter example map by clicking here.

Several teleporters can address the same destination with no problem. For example, no matter which skill gate you step through in Quake's start map, you always end up in the same location in the episode selection room. Although these entities can't be used with difficulty settings, with some advanced mapping, you can make certain teleporters only available at certain skill levels with a func_wall or something along those lines. This will allow you to put teleporters (ie: needed to access the next area in the map) that are open at higher skill levels on terrain that is difficult to reach, and possibly at ground level, in plain view, for the easy skill.</text>
      <sha1>mz67i9a6gvl6i8z266wpovrowunnybp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>item armor1</title>
    <ns>0</ns>
    <id>574</id>
    <revision>
      <id>1496</id>
      <timestamp>2009-12-21T11:03:40Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>New page: == item_armor1 == This entity spawns the [[Green Armor]].   Model: progs/armor1.mdl (skin 0)  Sounds: items/armor1.wav  Bounding box: 32*32*56</comment>
      <text xml:space="preserve" bytes="142">== item_armor1 ==
This entity spawns the [[Green Armor]].


Model: progs/armor1.mdl (skin 0)

Sounds: items/armor1.wav

Bounding box: 32*32*56</text>
      <sha1>2ebj397gejogq0q7ng767zc3sl22g5f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2534</id>
      <parentid>1496</parentid>
      <timestamp>2013-03-29T14:22:03Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Item armor1]] to [[item armor1]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="142">== item_armor1 ==
This entity spawns the [[Green Armor]].


Model: progs/armor1.mdl (skin 0)

Sounds: items/armor1.wav

Bounding box: 32*32*56</text>
      <sha1>2ebj397gejogq0q7ng767zc3sl22g5f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>item armor2</title>
    <ns>0</ns>
    <id>573</id>
    <revision>
      <id>1495</id>
      <timestamp>2009-12-21T11:02:41Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>New page: == item_armor2 == This entity spawns the [[Yellow Armor]].   Model: progs/armor1.mdl (skin 1)  Sound: items/armor1.wav  Bounding box: 32*32*56</comment>
      <text xml:space="preserve" bytes="142">== item_armor2 ==
This entity spawns the [[Yellow Armor]].


Model: progs/armor1.mdl (skin 1)

Sound: items/armor1.wav

Bounding box: 32*32*56</text>
      <sha1>ouf9p5xpjx2egd727l8ewyizq3bmwrn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2536</id>
      <parentid>1495</parentid>
      <timestamp>2013-03-29T14:22:03Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Item armor2]] to [[item armor2]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="142">== item_armor2 ==
This entity spawns the [[Yellow Armor]].


Model: progs/armor1.mdl (skin 1)

Sound: items/armor1.wav

Bounding box: 32*32*56</text>
      <sha1>ouf9p5xpjx2egd727l8ewyizq3bmwrn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>item armorInv</title>
    <ns>0</ns>
    <id>1079</id>
    <revision>
      <id>3254</id>
      <timestamp>2014-09-08T15:00:50Z</timestamp>
      <contributor>
        <username>Ijed</username>
        <id>57</id>
      </contributor>
      <comment>Created Entry</comment>
      <text xml:space="preserve" bytes="522">'''Description'''
----

A pickup which give the player 200 points of armour when collected.  This mitigates incoming damage by 20% and is reduced by the same amount each time it does so (this is what I can gather by having a quick decco at the qc).  If the player is wearing better armor they will not pick up worse armor unless it is heavily damaged - how much depends on the armour type being worn, how damaged it is and the armour type being picked up.


'''Keys'''
----
target - Will trigger this entity when collected</text>
      <sha1>f6rbop5fbynql07jpwgymqje9pa3wwu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3255</id>
      <parentid>3254</parentid>
      <timestamp>2014-09-08T16:01:42Z</timestamp>
      <contributor>
        <username>Ijed</username>
        <id>57</id>
      </contributor>
      <text xml:space="preserve" bytes="1180">'''Description'''
----

A pickup which give the player 200 points of armour when collected.  This mitigates incoming damage by 20% and is reduced by the same amount each time it does so (this is what I can gather by having a quick decco at the qc).  If the player is wearing better armor they will not pick up worse armor unless it is heavily damaged - how much depends on the armour type being worn, how damaged it is and the armour type being picked up.

'''Keys'''
----
target - Will trigger this entity when collected

'''Size'''
----
Like the other armour items, ArmorInv is 32 units wide/deep and 72 units tall.  The bounding box, from the origin is as follows; '-16 -16 0', '16 16 56'.  If any of these extents clip through level geometry then the item will fall out of play on map load.

'''Tricks'''
----

If armor starts a level sat on a func_wall which is later killtargeted then the armor will not fall, but instead hang in the air as if the func_wall was still there.  If you do want armor to fall off of something then use a func_door that moves horizontally next to some other geometry to 'scrape' the armor off - it will fall once there is no solid brush below it.</text>
      <sha1>tm7zm4buz0dk2bf4uqyoh864y13764e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3256</id>
      <parentid>3255</parentid>
      <timestamp>2014-09-08T16:02:24Z</timestamp>
      <contributor>
        <username>Ijed</username>
        <id>57</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1183">'''Description'''
----

A pickup which give the player 200 points of armour when collected.  This mitigates incoming damage by 20% and is reduced by the same amount each time it does so (this is what I can gather by having a quick decco at the qc).  If the player is wearing better armor they will not pick up worse armor unless it is heavily damaged - how much depends on the armour type being worn, how damaged it is and the armour type being picked up.


'''Keys'''
----
target - Will trigger this entity when collected


'''Size'''
----
Like the other armour items, ArmorInv is 32 units wide/deep and 72 units tall.  The bounding box, from the origin is as follows; '-16 -16 0', '16 16 56'.  If any of these extents clip through level geometry then the item will fall out of play on map load.


'''Tricks'''
----

If armor starts a level sat on a func_wall which is later killtargeted then the armor will not fall, but instead hang in the air as if the func_wall was still there.  If you do want armor to fall off of something then use a func_door that moves horizontally next to some other geometry to 'scrape' the armor off - it will fall once there is no solid brush below it.</text>
      <sha1>f7btzronrgxgcagstn29qmet9rbbtgm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3257</id>
      <parentid>3256</parentid>
      <timestamp>2014-09-08T16:03:13Z</timestamp>
      <contributor>
        <username>Ijed</username>
        <id>57</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1216">'''Description'''
----

A pickup which give the player 200 points of armour when collected.  This mitigates incoming damage by 20% and is reduced by the same amount each time it does so (this is what I can gather by having a quick decco at the qc).  If the player is wearing better armor they will not pick up worse armor unless it is heavily damaged - how much depends on the armour type being worn, how damaged it is and the armour type being picked up.


'''Keys'''
----
targetname - Can be killtargeted
target - Will trigger this entity when collected


'''Size'''
----
Like the other armour items, ArmorInv is 32 units wide/deep and 72 units tall.  The bounding box, from the origin is as follows; '-16 -16 0', '16 16 56'.  If any of these extents clip through level geometry then the item will fall out of play on map load.


'''Tricks'''
----

If armor starts a level sat on a func_wall which is later killtargeted then the armor will not fall, but instead hang in the air as if the func_wall was still there.  If you do want armor to fall off of something then use a func_door that moves horizontally next to some other geometry to 'scrape' the armor off - it will fall once there is no solid brush below it.</text>
      <sha1>bdfpzzsccjonvp755qs2170ojlxvjta</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3258</id>
      <parentid>3257</parentid>
      <timestamp>2014-09-08T16:03:32Z</timestamp>
      <contributor>
        <username>Ijed</username>
        <id>57</id>
      </contributor>
      <text xml:space="preserve" bytes="1217">'''Description'''
----

A pickup which give the player 200 points of armour when collected.  This mitigates incoming damage by 20% and is reduced by the same amount each time it does so (this is what I can gather by having a quick decco at the qc).  If the player is wearing better armor they will not pick up worse armor unless it is heavily damaged - how much depends on the armour type being worn, how damaged it is and the armour type being picked up.


'''Keys'''
----
targetname - Can be killtargeted

target - Will trigger this entity when collected


'''Size'''
----
Like the other armour items, ArmorInv is 32 units wide/deep and 72 units tall.  The bounding box, from the origin is as follows; '-16 -16 0', '16 16 56'.  If any of these extents clip through level geometry then the item will fall out of play on map load.


'''Tricks'''
----

If armor starts a level sat on a func_wall which is later killtargeted then the armor will not fall, but instead hang in the air as if the func_wall was still there.  If you do want armor to fall off of something then use a func_door that moves horizontally next to some other geometry to 'scrape' the armor off - it will fall once there is no solid brush below it.</text>
      <sha1>bk1q0a83gntl4evpy5o82dl110gp8z4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3259</id>
      <parentid>3258</parentid>
      <timestamp>2014-09-08T18:41:32Z</timestamp>
      <contributor>
        <username>Ijed</username>
        <id>57</id>
      </contributor>
      <text xml:space="preserve" bytes="1315">'''Description'''
----
This entity spawns the [[Red Armor]].

Model: progs/armor1.mdl (skin 2)

Sounds: items/armor1.wav

A pickup which give the player 200 points of armour when collected.  This mitigates incoming damage by 20% and is reduced by the same amount each time it does so (this is what I can gather by having a quick decco at the qc).  If the player is wearing better armor they will not pick up worse armor unless it is heavily damaged - how much depends on the armour type being worn, how damaged it is and the armour type being picked up.


'''Keys'''
----
targetname - Can be killtargeted

target - Will trigger this entity when collected


'''Size'''
----
Like the other armour items, ArmorInv is 32 units wide/deep and 72 units tall.  The bounding box, from the origin is as follows; '-16 -16 0', '16 16 56'.  If any of these extents clip through level geometry then the item will fall out of play on map load.


'''Tricks'''
----

If armor starts a level sat on a func_wall which is later killtargeted then the armor will not fall, but instead hang in the air as if the func_wall was still there.  If you do want armor to fall off of something then use a func_door that moves horizontally next to some other geometry to 'scrape' the armor off - it will fall once there is no solid brush below it.</text>
      <sha1>ca8qrvsbtp8fmogthqwu5uhpgzfglfz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3260</id>
      <parentid>3259</parentid>
      <timestamp>2014-09-08T18:43:10Z</timestamp>
      <contributor>
        <username>Ijed</username>
        <id>57</id>
      </contributor>
      <text xml:space="preserve" bytes="1089">'''Description'''
----
This entity spawns the [[Red Armor]].

Model: progs/armor1.mdl (skin 2)

Sounds: items/armor1.wav

If the player is wearing better armor they will not pick up worse armor unless it is heavily damaged - how much depends on the armour type being worn, how damaged it is and the armour type being picked up.


'''Keys'''
----
targetname - Can be killtargeted

target - Will trigger this entity when collected


'''Size'''
----
Like the other armour items, ArmorInv is 32 units wide/deep and 72 units tall.  The bounding box, from the origin is as follows; '-16 -16 0', '16 16 56'.  If any of these extents clip through level geometry then the item will fall out of play on map load.


'''Tricks'''
----

If armor starts a level sat on a func_wall which is later killtargeted then the armor will not fall, but instead hang in the air as if the func_wall was still there.  If you do want armor to fall off of something then use a func_door that moves horizontally next to some other geometry to 'scrape' the armor off - it will fall once there is no solid brush below it.</text>
      <sha1>rzesphxnnbcjexx0emmsd8ickq631ta</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>item armorinv</title>
    <ns>0</ns>
    <id>572</id>
    <revision>
      <id>1494</id>
      <timestamp>2009-12-21T11:01:24Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>New page: == item_armorInv == This entity spawns the [[Red Armor]].   Model: progs/armor.mdl (skin 2)  Sounds: items/armor1.wav  Bounding box: 32*32*56</comment>
      <text xml:space="preserve" bytes="141">== item_armorInv ==
This entity spawns the [[Red Armor]].


Model: progs/armor.mdl (skin 2)

Sounds: items/armor1.wav

Bounding box: 32*32*56</text>
      <sha1>dmexakeq9odl7tq0t4p81ut5pi4k2os</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2538</id>
      <parentid>1494</parentid>
      <timestamp>2013-03-29T14:22:04Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Item armorInv]] to [[item armorinv]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="141">== item_armorInv ==
This entity spawns the [[Red Armor]].


Model: progs/armor.mdl (skin 2)

Sounds: items/armor1.wav

Bounding box: 32*32*56</text>
      <sha1>dmexakeq9odl7tq0t4p81ut5pi4k2os</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>item artifact envirosuit</title>
    <ns>0</ns>
    <id>568</id>
    <revision>
      <id>1489</id>
      <timestamp>2009-12-21T10:32:51Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>New page: == item_artifact_envirosuit == This entity spawns the [[Biosuit]] powerup.   Model: progs/suit.mdl  Sounds: items/suit.wav (pickup), items/suit2.wav (end)  Netname: Biosuit  Internal name:...</comment>
      <text xml:space="preserve" bytes="225">== item_artifact_envirosuit ==
This entity spawns the [[Biosuit]] powerup.


Model: progs/suit.mdl

Sounds: items/suit.wav (pickup), items/suit2.wav (end)

Netname: Biosuit

Internal name: IT_SUIT

Bounding box size: 32*32*56</text>
      <sha1>e6059taksnjdhdco5xqib2ub9rhfd2n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2540</id>
      <parentid>1489</parentid>
      <timestamp>2013-03-29T14:22:04Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Item artifact envirosuit]] to [[item artifact envirosuit]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="225">== item_artifact_envirosuit ==
This entity spawns the [[Biosuit]] powerup.


Model: progs/suit.mdl

Sounds: items/suit.wav (pickup), items/suit2.wav (end)

Netname: Biosuit

Internal name: IT_SUIT

Bounding box size: 32*32*56</text>
      <sha1>e6059taksnjdhdco5xqib2ub9rhfd2n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>item artifact invisibility</title>
    <ns>0</ns>
    <id>571</id>
    <revision>
      <id>1493</id>
      <timestamp>2009-12-21T10:58:57Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>New page: == item_artifact_invisiblility == This entity spawns the [[Ring of Shadows]] bonus item.   Model: progs/invisibl.mdl  Sounds: items/inv1.wav (pickup), items/inv2.wav (end), items/inv3.wav ...</comment>
      <text xml:space="preserve" bytes="218">== item_artifact_invisiblility ==
This entity spawns the [[Ring of Shadows]] bonus item.


Model: progs/invisibl.mdl

Sounds: items/inv1.wav (pickup), items/inv2.wav (end), items/inv3.wav (idle)

Bounding box: 32*32*56</text>
      <sha1>9iw5fkm6vi3xjsn1r6obzzlfz4pd8ut</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2542</id>
      <parentid>1493</parentid>
      <timestamp>2013-03-29T14:22:04Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Item artifact invisibility]] to [[item artifact invisibility]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="218">== item_artifact_invisiblility ==
This entity spawns the [[Ring of Shadows]] bonus item.


Model: progs/invisibl.mdl

Sounds: items/inv1.wav (pickup), items/inv2.wav (end), items/inv3.wav (idle)

Bounding box: 32*32*56</text>
      <sha1>9iw5fkm6vi3xjsn1r6obzzlfz4pd8ut</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>item artifact invulnerability</title>
    <ns>0</ns>
    <id>570</id>
    <revision>
      <id>1492</id>
      <timestamp>2009-12-21T10:56:26Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>New page: == item_artifact_invulnerability == This entity spawns the [[Pentagram of Protection]] bonus item.   Model: progs/invulner.mdl  Sounds: items/protect.wav (pickup), items/protect2.wav (end)...</comment>
      <text xml:space="preserve" bytes="240">== item_artifact_invulnerability ==
This entity spawns the [[Pentagram of Protection]] bonus item.


Model: progs/invulner.mdl

Sounds: items/protect.wav (pickup), items/protect2.wav (end), items/protect.wav (absorb)

Bounding box: 32*32*56</text>
      <sha1>n9jw3nv3nthtd7wc65j53hmysudfv9n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2544</id>
      <parentid>1492</parentid>
      <timestamp>2013-03-29T14:22:05Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Item artifact invulnerability]] to [[item artifact invulnerability]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="240">== item_artifact_invulnerability ==
This entity spawns the [[Pentagram of Protection]] bonus item.


Model: progs/invulner.mdl

Sounds: items/protect.wav (pickup), items/protect2.wav (end), items/protect.wav (absorb)

Bounding box: 32*32*56</text>
      <sha1>n9jw3nv3nthtd7wc65j53hmysudfv9n</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>item artifact super damage</title>
    <ns>0</ns>
    <id>569</id>
    <revision>
      <id>1491</id>
      <timestamp>2009-12-21T10:52:28Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>New page: == item_artifact_super_damage == This entity spawns the [[Quad Damage]] bonus item.   Model: progs/quaddama.mdl  Sounds: items/damage.wav (pickup), items/damage2.wav (end), items/damage03....</comment>
      <text xml:space="preserve" bytes="224">== item_artifact_super_damage ==
This entity spawns the [[Quad Damage]] bonus item.


Model: progs/quaddama.mdl

Sounds: items/damage.wav (pickup), items/damage2.wav (end), items/damage03.wav (attack)

Bounding box: 32*32*56</text>
      <sha1>la3kjgbuvtxrozlbf6ufeqat5xk4c4f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2546</id>
      <parentid>1491</parentid>
      <timestamp>2013-03-29T14:22:05Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Item artifact super damage]] to [[item artifact super damage]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="224">== item_artifact_super_damage ==
This entity spawns the [[Quad Damage]] bonus item.


Model: progs/quaddama.mdl

Sounds: items/damage.wav (pickup), items/damage2.wav (end), items/damage03.wav (attack)

Bounding box: 32*32*56</text>
      <sha1>la3kjgbuvtxrozlbf6ufeqat5xk4c4f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>item cells</title>
    <ns>0</ns>
    <id>370</id>
    <revision>
      <id>619</id>
      <timestamp>2008-04-14T00:34:02Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: A box of 6 cells for the Thunderbolt, or other cell-using weapon. Once placed, you can alter the flag settings to make it a big box (12 cells), or to exclude its existance in any skill lev...</comment>
      <text xml:space="preserve" bytes="213">A box of 6 cells for the Thunderbolt, or other cell-using weapon. Once placed, you can alter the flag settings to make it a big box (12 cells), or to exclude its existance in any skill level or in deathmatch mode.</text>
      <sha1>bjihmo9v2cb8fh7mhli53pueg7e485b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2548</id>
      <parentid>619</parentid>
      <timestamp>2013-03-29T14:22:05Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Item cells]] to [[item cells]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="213">A box of 6 cells for the Thunderbolt, or other cell-using weapon. Once placed, you can alter the flag settings to make it a big box (12 cells), or to exclude its existance in any skill level or in deathmatch mode.</text>
      <sha1>bjihmo9v2cb8fh7mhli53pueg7e485b</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>item health</title>
    <ns>0</ns>
    <id>567</id>
    <revision>
      <id>1487</id>
      <timestamp>2009-12-21T10:17:32Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>New page: == item_health == This entity spawns a medkit to replenish a player's health. There are three different types depending on the spawnflag.  Large medkit (spawnflags 0):  +25 health  Small m...</comment>
      <text xml:space="preserve" bytes="286">== item_health ==
This entity spawns a medkit to replenish a player's health. There are three different types depending on the spawnflag.

Large medkit (spawnflags 0):  +25 health

Small medkit (spawnflags 1): +15 health

Megahealth (spawnflags 2): +100 health, slowly rots back to 100.</text>
      <sha1>0gfhga94wr9h0cymrijiezx4rq9thjo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1490</id>
      <parentid>1487</parentid>
      <timestamp>2009-12-21T10:47:22Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <text xml:space="preserve" bytes="512">== item_health ==
This entity spawns a [[Health|health box]] (medkit). The type depends on the spawnflag.


Small medkit (+15 health) -- spawnflags &quot;1&quot;

Model: maps/b_bh10.bsp

Sound: items/r_item1.wav

Bounding box: 32*32*56


Large medkit (+25 health) -- spawnflags &quot;0&quot;

Model: maps/b_bh25.bsp

Sound: items/health1.wav

Bounding box: 32*32*56


Megahealth (+100 health and starts rotting back to 100 after 5 seconds) -- spawnflags &quot;2&quot;

Model: maps/b_bh100.bsp

Sound: items/r_item2.wav

Bounding box: 32*32*56</text>
      <sha1>5sx6lfrmcc7v7ky3o03lqvyxejsz2q7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2550</id>
      <parentid>1490</parentid>
      <timestamp>2013-03-29T14:22:07Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Item health]] to [[item health]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="512">== item_health ==
This entity spawns a [[Health|health box]] (medkit). The type depends on the spawnflag.


Small medkit (+15 health) -- spawnflags &quot;1&quot;

Model: maps/b_bh10.bsp

Sound: items/r_item1.wav

Bounding box: 32*32*56


Large medkit (+25 health) -- spawnflags &quot;0&quot;

Model: maps/b_bh25.bsp

Sound: items/health1.wav

Bounding box: 32*32*56


Megahealth (+100 health and starts rotting back to 100 after 5 seconds) -- spawnflags &quot;2&quot;

Model: maps/b_bh100.bsp

Sound: items/r_item2.wav

Bounding box: 32*32*56</text>
      <sha1>5sx6lfrmcc7v7ky3o03lqvyxejsz2q7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>item rockets</title>
    <ns>0</ns>
    <id>371</id>
    <revision>
      <id>620</id>
      <timestamp>2008-04-14T00:35:24Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: A box of 5 rockets for the rocket launcher, grenade launcher, or other weapon which uses them. Once placed, you can alter the flag settings to make it a big box (10 rockets), or to exclude...</comment>
      <text xml:space="preserve" bytes="235">A box of 5 rockets for the rocket launcher, grenade launcher, or other weapon which uses them. Once placed, you can alter the flag settings to make it a big box (10 rockets), or to exclude it from any skill level or in deathmatch mode.</text>
      <sha1>2u4ehcm95muuwae9lnjd1vei279jhoo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2552</id>
      <parentid>620</parentid>
      <timestamp>2013-03-29T14:22:07Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Item rockets]] to [[item rockets]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="235">A box of 5 rockets for the rocket launcher, grenade launcher, or other weapon which uses them. Once placed, you can alter the flag settings to make it a big box (10 rockets), or to exclude it from any skill level or in deathmatch mode.</text>
      <sha1>2u4ehcm95muuwae9lnjd1vei279jhoo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>item shells</title>
    <ns>0</ns>
    <id>369</id>
    <revision>
      <id>618</id>
      <timestamp>2008-04-14T00:33:16Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: A box of 20 shotgun shells for use in the shotgun, supershotgun, or other weapon which uses them. Once placed, you can alter the flag settings to make it a big box (40 shells), or to exclu...</comment>
      <text xml:space="preserve" bytes="235">A box of 20 shotgun shells for use in the shotgun, supershotgun, or other weapon which uses them. Once placed, you can alter the flag settings to make it a big box (40 shells), or to exclude it from any skill level, or deathmatch mode.</text>
      <sha1>b80iz0iyxu5bcbajhs6u1bdmhpf4erm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2554</id>
      <parentid>618</parentid>
      <timestamp>2013-03-29T14:22:07Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Item shells]] to [[item shells]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="235">A box of 20 shotgun shells for use in the shotgun, supershotgun, or other weapon which uses them. Once placed, you can alter the flag settings to make it a big box (40 shells), or to exclude it from any skill level, or deathmatch mode.</text>
      <sha1>b80iz0iyxu5bcbajhs6u1bdmhpf4erm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>item sigil</title>
    <ns>0</ns>
    <id>610</id>
    <revision>
      <id>1689</id>
      <timestamp>2013-03-24T19:18:10Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <comment>created item_sigil page with content</comment>
      <text xml:space="preserve" bytes="1519">'''item_sigil'''

The item_sigil is the Rune located at the end of each of the four episodes of Vanilla Quake. These Runes are persistent in that once one is collected they will stay with the player throughout the rest of the game (unlike other pickups such as weapons, ammo or armor). It serves three purposes.

1) To indicate to the player that they have reached a goal in the game.
2) To trigger a func_episodegate in the start level that is linked to the Rune.
3) To trigger a func_bossgate in the start level once all four Runes have been collected.

The last two functions are only available after the player exits a level (trigger_changelevel) and is sent to another level.

'''Using an item_sigil in a map:'''

In an .fgd file there is usually this entry for the item_sigil:

@PointClass size(-16 -16 -24, 16 16 32) base(Item, Appearflags) = 
	item_sigil : &quot;Sigil&quot; 
[
	spawnflags(Flags) =
	[
		1 : &quot;Episode 1&quot; : 1
		2 : &quot;Episode 2&quot; : 0
		4 : &quot;Episode 3&quot; : 0
		8 : &quot;Episode 4&quot; : 0
	]
]

This entry tells a level editor (such as Worldcraft) that it has the options of being selectively available in easy, medium, hard, nightmare or deathmatch skill levels (Appearflags) and then it gives the choice of which rune of the four runes to insert into the level (the default in this case is the item_sigil for episode 1 as indicated by a 1 instead of a 0).

It is entirely possible to have all four runes inside of one map which can lead the level designer into some interesting decisions later on in a follow-up level.</text>
      <sha1>5t0typzr4usr98oz1bgvry4bm24f5to</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1703</id>
      <parentid>1689</parentid>
      <timestamp>2013-03-24T21:50:17Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1540">'''item_sigil'''

The item_sigil is the Rune located at the end of each of the four episodes of Vanilla Quake. These Runes are persistent in that once one is collected they will stay with the player throughout the rest of the game (unlike other pickups such as weapons, ammo or armor). It serves three purposes.

1) To indicate to the player that they have reached a goal in the game.
2) To trigger a func_episodegate in the start level that is linked to the Rune.
3) To trigger a func_bossgate in the start level once all four Runes have been collected.

The last two functions are only available after the player exits a level (trigger_changelevel) and is sent to another level.

'''Using an item_sigil in a map:'''

In an .fgd file there is usually this entry for the item_sigil:

@PointClass size(-16 -16 -24, 16 16 32) base(Item, Appearflags) = 
	item_sigil : &quot;Sigil&quot; 
[
	spawnflags(Flags) =
	[
		1 : &quot;Episode 1&quot; : 1
		2 : &quot;Episode 2&quot; : 0
		4 : &quot;Episode 3&quot; : 0
		8 : &quot;Episode 4&quot; : 0
	]
]

This entry tells a level editor (such as Worldcraft) that it has the options of being selectively available in easy, medium, hard, nightmare or deathmatch skill levels (Appearflags) and then it gives the choice of which rune of the four runes to insert into the level (the default in this case is the item_sigil for episode 1 as indicated by a 1 instead of a 0).

It is entirely possible to have all four runes inside of one map which can lead the level designer into some interesting decisions later on in a follow-up level.

[[Category:Entity]]</text>
      <sha1>afdeoyiooxl29onfmqf37k3y731h5i7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1704</id>
      <parentid>1703</parentid>
      <timestamp>2013-03-24T21:51:12Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1546">'''item_sigil'''

The item_sigil is the Rune located at the end of each of the four episodes of Vanilla Quake. These Runes are persistent in that once one is collected they will stay with the player throughout the rest of the game (unlike other pickups such as weapons, ammo or armor). It serves three purposes.

1) To indicate to the player that they have reached a goal in the game.
2) To trigger a func_episodegate in the start level that is linked to the Rune.
3) To trigger a func_bossgate in the start level once all four Runes have been collected.

The last two functions are only available after the player exits a level (trigger_changelevel) and is sent to another level.

'''Using an item_sigil in a map:'''

In an .fgd file there is usually this entry for the item_sigil:

@PointClass size(-16 -16 -24, 16 16 32) base(Item, Appearflags) = 
	item_sigil : &quot;Sigil&quot; 
[
	spawnflags(Flags) =
	[
		1 : &quot;Episode 1&quot; : 1
		2 : &quot;Episode 2&quot; : 0
		4 : &quot;Episode 3&quot; : 0
		8 : &quot;Episode 4&quot; : 0
	]
]

This entry tells a level editor (such as Worldcraft) that it has the options of being selectively available in easy, medium, hard, nightmare or deathmatch skill levels (Appearflags) and then it gives the choice of which rune of the four runes to insert into the level (the default in this case is the item_sigil for episode 1 as indicated by a 1 instead of a 0).

It is entirely possible to have all four runes inside of one map which can lead the level designer into some interesting decisions later on in a follow-up level.

[[Category:Entity guide]]</text>
      <sha1>qaxsu54krbnbkbt1nvtkj70k2zlp3wi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1894</id>
      <parentid>1704</parentid>
      <timestamp>2013-03-25T02:30:48Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <text xml:space="preserve" bytes="1574">'''item_sigil'''

The item_sigil is the Rune located at the end of each of the four episodes of Vanilla Quake. These Runes are persistent in that once one is collected they will stay with the player throughout the rest of the game (unlike other pickups such as weapons, ammo or armor). It serves three purposes.

1) To indicate to the player that they have reached a goal in the game.
2) To trigger a func_episodegate in the start level that is linked to the Rune.
3) To trigger a func_bossgate in the start level once all four Runes have been collected.

The last two functions are only available after the player exits a level (trigger_changelevel) and is sent to another level.

'''Using an item_sigil in a map:'''

In an .fgd file there is usually this entry for the item_sigil:

@PointClass size(-16 -16 -24, 16 16 32) base(Item, Appearflags) = 
	item_sigil : &quot;Sigil&quot; 
[
	spawnflags(Flags) =
	[
		1 : &quot;Episode 1&quot; : 1
		2 : &quot;Episode 2&quot; : 0
		4 : &quot;Episode 3&quot; : 0
		8 : &quot;Episode 4&quot; : 0
	]
]

This entry tells a level editor (such as Worldcraft) that it has the options of being selectively available in easy, medium, hard, nightmare or deathmatch skill levels (Appearflags) and then it gives the choice of which rune of the four runes to insert into the level (the default in this case is the item_sigil for episode 1 as indicated by a 1 instead of a 0).

It is entirely possible to have all four runes inside of one map which can lead the level designer into some interesting decisions later on in a follow-up level.

[[Category:Entity guide]]
[[Category:Quake entities]]</text>
      <sha1>bfve8flen153jlrnohjj7ceeaq85j95</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1899</id>
      <parentid>1894</parentid>
      <timestamp>2013-03-25T02:59:33Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <text xml:space="preserve" bytes="1574">'''item_sigil'''

The item_sigil is the Rune located at the end of each of the four episodes of Vanilla Quake. These Runes are persistent in that once one is collected they will stay with the player throughout the rest of the game (unlike other pickups such as weapons, ammo or armor). It serves three purposes.

1) To indicate to the player that they have reached a goal in the game.
2) To trigger a [[func_episodegate]] in the start level that is linked to the Rune.
3) To trigger a [[func_bossgate]] in the start level once all four Runes have been collected.

The last two functions are only available after the player exits a level through a ([[trigger_changelevel]]) and is sent to another level.

'''Using an item_sigil in a map:'''

In an .fgd file there is usually this entry for the item_sigil:

@PointClass size(-16 -16 -24, 16 16 32) base(Item, Appearflags) = 
	item_sigil : &quot;Sigil&quot; 
[
	spawnflags(Flags) =
	[
		1 : &quot;Episode 1&quot; : 1
		2 : &quot;Episode 2&quot; : 0
		4 : &quot;Episode 3&quot; : 0
		8 : &quot;Episode 4&quot; : 0
	]
]

This entry tells a level editor (such as [[Worldcraft]]) that it has the options of being selectively available in easy, medium, hard, nightmare or deathmatch skill levels (Appearflags) and then it gives the choice of which rune of the four runes to insert into the level (the default in this case is the item_sigil for episode 1 as indicated by a 1 instead of a 0).

It is entirely possible to have all four runes inside of one map which can lead the level designer into some interesting decisions later on in a follow-up level.

[[Category:Quake entities]]</text>
      <sha1>es0t7ze1b9x03q55tdqq5ishrnuorn1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1929</id>
      <parentid>1899</parentid>
      <timestamp>2013-03-25T03:52:40Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1578">'''item_sigil'''

The item_sigil is the Rune located at the end of each of the four episodes of [[Vanilla Quake]]. These Runes are persistent in that once one is collected they will stay with the player throughout the rest of the game (unlike other pickups such as weapons, ammo or armor). It serves three purposes.

1) To indicate to the player that they have reached a goal in the game.
2) To trigger a [[func_episodegate]] in the start level that is linked to the Rune.
3) To trigger a [[func_bossgate]] in the start level once all four Runes have been collected.

The last two functions are only available after the player exits a level through a ([[trigger_changelevel]]) and is sent to another level.

'''Using an item_sigil in a map:'''

In an .fgd file there is usually this entry for the item_sigil:

@PointClass size(-16 -16 -24, 16 16 32) base(Item, Appearflags) = 
	item_sigil : &quot;Sigil&quot; 
[
	spawnflags(Flags) =
	[
		1 : &quot;Episode 1&quot; : 1
		2 : &quot;Episode 2&quot; : 0
		4 : &quot;Episode 3&quot; : 0
		8 : &quot;Episode 4&quot; : 0
	]
]

This entry tells a level editor (such as [[Worldcraft]]) that it has the options of being selectively available in easy, medium, hard, nightmare or deathmatch skill levels (Appearflags) and then it gives the choice of which rune of the four runes to insert into the level (the default in this case is the item_sigil for episode 1 as indicated by a 1 instead of a 0).

It is entirely possible to have all four runes inside of one map which can lead the level designer into some interesting decisions later on in a follow-up level.

[[Category:Quake entities]]</text>
      <sha1>i5eh824iw1gl1p3z7bmzhlwfjw5ks0z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2211</id>
      <parentid>1929</parentid>
      <timestamp>2013-03-26T11:01:38Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>improved formatting</comment>
      <text xml:space="preserve" bytes="1603">{{DISPLAYTITLE:item_sigil}}

The item_sigil is the Rune located at the end of each of the four episodes of [[Vanilla Quake]]. These Runes are persistent in that once one is collected they will stay with the player throughout the rest of the game (unlike other pickups such as weapons, ammo or armor). It serves three purposes.

# To indicate to the player that they have reached a goal in the game.
# To trigger a [[func_episodegate]] in the start level that is linked to the Rune.
# To trigger a [[func_bossgate]] in the start level once all four Runes have been collected.

The last two functions are only available after the player exits a level through a ([[trigger_changelevel]]) and is sent to another level.

== Using an item_sigil in a map ==

In an .fgd file there is usually this entry for the item_sigil:
 &lt;nowiki&gt;
@PointClass size(-16 -16 -24, 16 16 32) base(Item, Appearflags) = 
	item_sigil : &quot;Sigil&quot; 
[
	spawnflags(Flags) =
	[
		1 : &quot;Episode 1&quot; : 1
		2 : &quot;Episode 2&quot; : 0
		4 : &quot;Episode 3&quot; : 0
		8 : &quot;Episode 4&quot; : 0
	]
]
&lt;/nowiki&gt;
This entry tells a level editor (such as [[Worldcraft]]) that it has the options of being selectively available in easy, medium, hard, nightmare or deathmatch skill levels (Appearflags) and then it gives the choice of which rune of the four runes to insert into the level (the default in this case is the item_sigil for episode 1 as indicated by a 1 instead of a 0).

It is entirely possible to have all four runes inside of one map which can lead the level designer into some interesting decisions later on in a follow-up level.

[[Category:Quake entities]]</text>
      <sha1>p7xi5l3bznjkqr7p9yrfx0ghj1igrij</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2870</id>
      <parentid>2211</parentid>
      <timestamp>2013-04-09T03:19:12Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1662">{{DISPLAYTITLE:item_sigil}}

The item_sigil is the Rune located at the end of each of the four episodes of [[Vanilla Quake]]. These Runes are persistent in that once one is collected they will stay with the player throughout the rest of the game (unlike other pickups such as weapons, ammo or armor that will reset if the player enters a level named &quot;Start&quot;). It serves three purposes.

# To indicate to the player that they have reached a goal in the game.
# To trigger a [[func_episodegate]] in the start level that is linked to the Rune.
# To trigger a [[func_bossgate]] in the start level once all four Runes have been collected.

The last two functions are only available after the player exits a level through a ([[trigger_changelevel]]) and is sent to another level.

== Using an item_sigil in a map ==

In an .fgd file there is usually this entry for the item_sigil:
 &lt;nowiki&gt;
@PointClass size(-16 -16 -24, 16 16 32) base(Item, Appearflags) = 
	item_sigil : &quot;Sigil&quot; 
[
	spawnflags(Flags) =
	[
		1 : &quot;Episode 1&quot; : 1
		2 : &quot;Episode 2&quot; : 0
		4 : &quot;Episode 3&quot; : 0
		8 : &quot;Episode 4&quot; : 0
	]
]
&lt;/nowiki&gt;
This entry tells a level editor (such as [[Worldcraft]]) that it has the options of being selectively available in easy, medium, hard, nightmare or deathmatch skill levels (Appearflags) and then it gives the choice of which rune of the four runes to insert into the level (the default in this case is the item_sigil for episode 1 as indicated by a 1 instead of a 0).

It is entirely possible to have all four runes inside of one map which can lead the level designer into some interesting decisions later on in a follow-up level.

[[Category:Quake entities]]</text>
      <sha1>5l9lb8z3svfyt4pi7zeaewupuxqqsw4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>item spikes</title>
    <ns>0</ns>
    <id>374</id>
    <revision>
      <id>627</id>
      <timestamp>2008-04-16T14:51:06Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: item_spikes  A box of 25 spikes for use in the [nailgun] or [supernailgun], or other weapon which uses spikes. Once placed, you can alter the flag settings to make it a big box (50 spikes)...</comment>
      <text xml:space="preserve" bytes="253">item_spikes

A box of 25 spikes for use in the [nailgun] or [supernailgun], or other weapon which uses spikes. Once placed, you can alter the flag settings to make it a big box (50 spikes), or to exclude it from any skill level, or in [deathmatch] mode.</text>
      <sha1>gn3n0ngo0aofy0no7cnqurwrpc1c5ut</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>898</id>
      <parentid>627</parentid>
      <timestamp>2008-07-01T11:39:28Z</timestamp>
      <contributor>
        <ip>195.199.147.174</ip>
      </contributor>
      <text xml:space="preserve" bytes="258">item_spikes

A box of 25 spikes for use in the [[Nailgun]] or [[Super Nailgun]], or other weapon which uses spikes. Once placed, you can alter the flag settings to make it a big box (50 spikes), or to exclude it from any skill level, or in [deathmatch] mode.</text>
      <sha1>n7caax6tj6zxjz2n0kijeatlru7ehhz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>899</id>
      <parentid>898</parentid>
      <timestamp>2008-07-01T11:53:01Z</timestamp>
      <contributor>
        <ip>195.199.147.174</ip>
      </contributor>
      <text xml:space="preserve" bytes="260">item_spikes

A box of 25 spikes for use in the [[Nailgun]] or [[Super Nailgun]], or other weapon which uses spikes. Once placed, you can alter the flag settings to make it a big box (50 spikes), or to exclude it from any skill level, or in [[Deathmatch]] mode.</text>
      <sha1>okntucvkmv4glx3jov7lljb6ow50h5i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2556</id>
      <parentid>899</parentid>
      <timestamp>2013-03-29T14:22:08Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Item spikes]] to [[item spikes]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="260">item_spikes

A box of 25 spikes for use in the [[Nailgun]] or [[Super Nailgun]], or other weapon which uses spikes. Once placed, you can alter the flag settings to make it a big box (50 spikes), or to exclude it from any skill level, or in [[Deathmatch]] mode.</text>
      <sha1>okntucvkmv4glx3jov7lljb6ow50h5i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>items.qc</title>
    <ns>0</ns>
    <id>845</id>
    <revision>
      <id>2462</id>
      <timestamp>2013-03-29T10:44:37Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for the [[Items | items]].   &lt;pre&gt; void() W_SetCurrentAmmo; /* ALL LIGHTS SHOULD BE 0 1 0 IN COLOR ALL OTHER ITEMS SHOULD BE .8 .3 .4 I...&quot;</comment>
      <text xml:space="preserve" bytes="28563">This [[Quake-C]] file contains the code for the [[Items | items]].


&lt;pre&gt;
void() W_SetCurrentAmmo;
/* ALL LIGHTS SHOULD BE 0 1 0 IN COLOR ALL OTHER ITEMS SHOULD
BE .8 .3 .4 IN COLOR */


void() SUB_regen =
{
	self.model = self.mdl;		// restore original model
	self.solid = SOLID_TRIGGER;	// allow it to be touched again
	sound (self, CHAN_VOICE, &quot;items/itembk2.wav&quot;, 1, ATTN_NORM);	// play respawn sound
	setorigin (self, self.origin);
};



/*QUAKED noclass (0 0 0) (-8 -8 -8) (8 8 8)
prints a warning message when spawned
*/
void() noclass =
{
	dprint (&quot;noclass spawned at&quot;);
	dprint (vtos(self.origin));
	dprint (&quot;\n&quot;);
	remove (self);
};



/*
============
PlaceItem

plants the object on the floor
============
*/
void() PlaceItem =
{
	local float	oldz;

	self.mdl = self.model;		// so it can be restored on respawn
	self.flags = FL_ITEM;		// make extra wide
	self.solid = SOLID_TRIGGER;
	self.movetype = MOVETYPE_TOSS;	
	self.velocity = '0 0 0';
	self.origin_z = self.origin_z + 6;
	oldz = self.origin_z;
	if (!droptofloor())
	{
		dprint (&quot;Bonus item fell out of level at &quot;);
		dprint (vtos(self.origin));
		dprint (&quot;\n&quot;);
		remove(self);
		return;
	}
};

/*
============
StartItem

Sets the clipping size and plants the object on the floor
============
*/
void() StartItem =
{
	self.nextthink = time + 0.2;	// items start after other solids
	self.think = PlaceItem;
};

/*
=========================================================================

HEALTH BOX

=========================================================================
*/
//
// T_Heal: add health to an entity, limiting health to max_health
// &quot;ignore&quot; will ignore max_health limit
//
float (entity e, float healamount, float ignore) T_Heal =
{
	if (e.health &lt;= 0)
		return 0;
	if ((!ignore) &amp;&amp; (e.health &gt;= other.max_health))
		return 0;
	healamount = ceil(healamount);

	e.health = e.health + healamount;
	if ((!ignore) &amp;&amp; (e.health &gt;= other.max_health))
		e.health = other.max_health;
		
	if (e.health &gt; 250)
		e.health = 250;
	return 1;
};

/*QUAKED item_health (.3 .3 1) (0 0 0) (32 32 32) rotten megahealth
Health box. Normally gives 25 points.
Rotten box heals 5-10 points,
megahealth will add 100 health, then 
rot you down to your maximum health limit, 
one point per second.
*/

float	H_ROTTEN = 1;
float	H_MEGA = 2;
.float	healamount, healtype;
void() health_touch;
void() item_megahealth_rot;

void() item_health =
{	
	self.touch = health_touch;

	if (self.spawnflags &amp; H_ROTTEN)
	{
		precache_model(&quot;maps/b_bh10.bsp&quot;);

		precache_sound(&quot;items/r_item1.wav&quot;);
		setmodel(self, &quot;maps/b_bh10.bsp&quot;);
		self.noise = &quot;items/r_item1.wav&quot;;
		self.healamount = 15;
		self.healtype = 0;
	}
	else
	if (self.spawnflags &amp; H_MEGA)
	{
		precache_model(&quot;maps/b_bh100.bsp&quot;);
		precache_sound(&quot;items/r_item2.wav&quot;);
		setmodel(self, &quot;maps/b_bh100.bsp&quot;);
		self.noise = &quot;items/r_item2.wav&quot;;
		self.healamount = 100;
		self.healtype = 2;
	}
	else
	{
		precache_model(&quot;maps/b_bh25.bsp&quot;);
		precache_sound(&quot;items/health1.wav&quot;);
		setmodel(self, &quot;maps/b_bh25.bsp&quot;);
		self.noise = &quot;items/health1.wav&quot;;
		self.healamount = 25;
		self.healtype = 1;
	}
	setsize (self, '0 0 0', '32 32 56');
	StartItem ();
};


void() health_touch =
{
	local	float amount;
	local	string	s;
	
	if (other.classname != &quot;player&quot;)
		return;
	
	if (self.healtype == 2) // Megahealth?  Ignore max_health...
	{
		if (other.health &gt;= 250)
			return;
		if (!T_Heal(other, self.healamount, 1))
			return;
	}
	else
	{
		if (!T_Heal(other, self.healamount, 0))
			return;
	}
	
	sprint(other, &quot;You receive &quot;);
	s = ftos(self.healamount);
	sprint(other, s);
	sprint(other, &quot; health\n&quot;);
	
// health touch sound
	sound(other, CHAN_ITEM, self.noise, 1, ATTN_NORM);

	stuffcmd (other, &quot;bf\n&quot;);
	
	self.model = string_null;
	self.solid = SOLID_NOT;

	// Megahealth = rot down the player's super health
	if (self.healtype == 2)
	{
		other.items = other.items | IT_SUPERHEALTH;
		self.nextthink = time + 5;
		self.think = item_megahealth_rot;
		self.owner = other;
	}
	else
	{
		if (deathmatch != 2)		// deathmatch 2 is the silly old rules
		{
			if (deathmatch)
				self.nextthink = time + 20;
			self.think = SUB_regen;
		}
	}
	
	activator = other;
	SUB_UseTargets();				// fire all targets / killtargets
};	

void() item_megahealth_rot =
{
	other = self.owner;
	
	if (other.health &gt; other.max_health)
	{
		other.health = other.health - 1;
		self.nextthink = time + 1;
		return;
	}

// it is possible for a player to die and respawn between rots, so don't
// just blindly subtract the flag off
	other.items = other.items - (other.items &amp; IT_SUPERHEALTH);
	
	if (deathmatch == 1)	// deathmatch 2 is silly old rules
	{
		self.nextthink = time + 20;
		self.think = SUB_regen;
	}
};

/*
===============================================================================

ARMOR

===============================================================================
*/

void() armor_touch;

void() armor_touch =
{
	local	float	type, value, bit;
	
	if (other.health &lt;= 0)
		return;
	if (other.classname != &quot;player&quot;)
		return;

	if (self.classname == &quot;item_armor1&quot;)
	{
		type = 0.3;
		value = 100;
		bit = IT_ARMOR1;
	}
	if (self.classname == &quot;item_armor2&quot;)
	{
		type = 0.6;
		value = 150;
		bit = IT_ARMOR2;
	}
	if (self.classname == &quot;item_armorInv&quot;)
	{
		type = 0.8;
		value = 200;
		bit = IT_ARMOR3;
	}
	if (other.armortype*other.armorvalue &gt;= type*value)
		return;
		
	other.armortype = type;
	other.armorvalue = value;
	other.items = other.items - (other.items &amp; (IT_ARMOR1 | IT_ARMOR2 | IT_ARMOR3)) + bit;

	self.solid = SOLID_NOT;
	self.model = string_null;
	if (deathmatch == 1)
		self.nextthink = time + 20;
	self.think = SUB_regen;

	sprint(other, &quot;You got armor\n&quot;);
// armor touch sound
	sound(other, CHAN_ITEM, &quot;items/armor1.wav&quot;, 1, ATTN_NORM);
	stuffcmd (other, &quot;bf\n&quot;);
	
	activator = other;
	SUB_UseTargets();				// fire all targets / killtargets
};


/*QUAKED item_armor1 (0 .5 .8) (-16 -16 0) (16 16 32)
*/

void() item_armor1 =
{
	self.touch = armor_touch;
	precache_model (&quot;progs/armor.mdl&quot;);
	setmodel (self, &quot;progs/armor.mdl&quot;);
	self.skin = 0;
	setsize (self, '-16 -16 0', '16 16 56');
	StartItem ();
};

/*QUAKED item_armor2 (0 .5 .8) (-16 -16 0) (16 16 32)
*/

void() item_armor2 =
{
	self.touch = armor_touch;
	precache_model (&quot;progs/armor.mdl&quot;);
	setmodel (self, &quot;progs/armor.mdl&quot;);
	self.skin = 1;
	setsize (self, '-16 -16 0', '16 16 56');
	StartItem ();
};

/*QUAKED item_armorInv (0 .5 .8) (-16 -16 0) (16 16 32)
*/

void() item_armorInv =
{
	self.touch = armor_touch;
	precache_model (&quot;progs/armor.mdl&quot;);
	setmodel (self, &quot;progs/armor.mdl&quot;);
	self.skin = 2;
	setsize (self, '-16 -16 0', '16 16 56');
	StartItem ();
};

/*
===============================================================================

WEAPONS

===============================================================================
*/

void() bound_other_ammo =
{
	if (other.ammo_shells &gt; 100)
		other.ammo_shells = 100;
	if (other.ammo_nails &gt; 200)
		other.ammo_nails = 200;
	if (other.ammo_rockets &gt; 100)
		other.ammo_rockets = 100;		
	if (other.ammo_cells &gt; 100)
		other.ammo_cells = 100;		
};


float(float w) RankForWeapon =
{
	if (w == IT_LIGHTNING)
		return 1;
	if (w == IT_ROCKET_LAUNCHER)
		return 2;
	if (w == IT_SUPER_NAILGUN)
		return 3;
	if (w == IT_GRENADE_LAUNCHER)
		return 4;
	if (w == IT_SUPER_SHOTGUN)
		return 5;
	if (w == IT_NAILGUN)
		return 6;
	return 7;
};

/*
=============
Deathmatch_Weapon

Deathmatch weapon change rules for picking up a weapon

.float		ammo_shells, ammo_nails, ammo_rockets, ammo_cells;
=============
*/
void(float old, float new) Deathmatch_Weapon =
{
	local float or, nr;

// change self.weapon if desired
	or = RankForWeapon (self.weapon);
	nr = RankForWeapon (new);
	if ( nr &lt; or )
		self.weapon = new;
};

/*
=============
weapon_touch
=============
*/
float() W_BestWeapon;

void() weapon_touch =
{
	local	float	hadammo, best, new, old;
	local	entity	stemp;
	local	float	leave;

	if (!(other.flags &amp; FL_CLIENT))
		return;

// if the player was using his best weapon, change up to the new one if better		
	stemp = self;
	self = other;
	best = W_BestWeapon();
	self = stemp;

	if (deathmatch == 2 || coop)
		leave = 1;
	else
		leave = 0;
	
	if (self.classname == &quot;weapon_nailgun&quot;)
	{
		if (leave &amp;&amp; (other.items &amp; IT_NAILGUN) )
			return;
		hadammo = other.ammo_nails;			
		new = IT_NAILGUN;
		other.ammo_nails = other.ammo_nails + 30;
	}
	else if (self.classname == &quot;weapon_supernailgun&quot;)
	{
		if (leave &amp;&amp; (other.items &amp; IT_SUPER_NAILGUN) )
			return;
		hadammo = other.ammo_rockets;			
		new = IT_SUPER_NAILGUN;
		other.ammo_nails = other.ammo_nails + 30;
	}
	else if (self.classname == &quot;weapon_supershotgun&quot;)
	{
		if (leave &amp;&amp; (other.items &amp; IT_SUPER_SHOTGUN) )
			return;
		hadammo = other.ammo_rockets;			
		new = IT_SUPER_SHOTGUN;
		other.ammo_shells = other.ammo_shells + 5;
	}
	else if (self.classname == &quot;weapon_rocketlauncher&quot;)
	{
		if (leave &amp;&amp; (other.items &amp; IT_ROCKET_LAUNCHER) )
			return;
		hadammo = other.ammo_rockets;			
		new = IT_ROCKET_LAUNCHER;
		other.ammo_rockets = other.ammo_rockets + 5;
	}
	else if (self.classname == &quot;weapon_grenadelauncher&quot;)
	{
		if (leave &amp;&amp; (other.items &amp; IT_GRENADE_LAUNCHER) )
			return;
		hadammo = other.ammo_rockets;			
		new = IT_GRENADE_LAUNCHER;
		other.ammo_rockets = other.ammo_rockets + 5;
	}
	else if (self.classname == &quot;weapon_lightning&quot;)
	{
		if (leave &amp;&amp; (other.items &amp; IT_LIGHTNING) )
			return;
		hadammo = other.ammo_rockets;			
		new = IT_LIGHTNING;
		other.ammo_cells = other.ammo_cells + 15;
	}
	else
		objerror (&quot;weapon_touch: unknown classname&quot;);

	sprint (other, &quot;You got the &quot;);
	sprint (other, self.netname);
	sprint (other, &quot;\n&quot;);
// weapon touch sound
	sound (other, CHAN_ITEM, &quot;weapons/pkup.wav&quot;, 1, ATTN_NORM);
	stuffcmd (other, &quot;bf\n&quot;);

	bound_other_ammo ();

// change to the weapon
	old = other.items;
	other.items = other.items | new;
	
	stemp = self;
	self = other;

	if (!deathmatch)
		self.weapon = new;
	else
		Deathmatch_Weapon (old, new);

	W_SetCurrentAmmo();

	self = stemp;

	if (leave)
		return;

// remove it in single player, or setup for respawning in deathmatch
	self.model = string_null;
	self.solid = SOLID_NOT;
	if (deathmatch == 1)
		self.nextthink = time + 30;
	self.think = SUB_regen;
	
	activator = other;
	SUB_UseTargets();				// fire all targets / killtargets
};


/*QUAKED weapon_supershotgun (0 .5 .8) (-16 -16 0) (16 16 32)
*/

void() weapon_supershotgun =
{
	precache_model (&quot;progs/g_shot.mdl&quot;);
	setmodel (self, &quot;progs/g_shot.mdl&quot;);
	self.weapon = IT_SUPER_SHOTGUN;
	self.netname = &quot;Double-barrelled Shotgun&quot;;
	self.touch = weapon_touch;
	setsize (self, '-16 -16 0', '16 16 56');
	StartItem ();
};

/*QUAKED weapon_nailgun (0 .5 .8) (-16 -16 0) (16 16 32)
*/

void() weapon_nailgun =
{
	precache_model (&quot;progs/g_nail.mdl&quot;);
	setmodel (self, &quot;progs/g_nail.mdl&quot;);
	self.weapon = IT_NAILGUN;
	self.netname = &quot;nailgun&quot;;
	self.touch = weapon_touch;
	setsize (self, '-16 -16 0', '16 16 56');
	StartItem ();
};

/*QUAKED weapon_supernailgun (0 .5 .8) (-16 -16 0) (16 16 32)
*/

void() weapon_supernailgun =
{
	precache_model (&quot;progs/g_nail2.mdl&quot;);
	setmodel (self, &quot;progs/g_nail2.mdl&quot;);
	self.weapon = IT_SUPER_NAILGUN;
	self.netname = &quot;Super Nailgun&quot;;
	self.touch = weapon_touch;
	setsize (self, '-16 -16 0', '16 16 56');
	StartItem ();
};

/*QUAKED weapon_grenadelauncher (0 .5 .8) (-16 -16 0) (16 16 32)
*/

void() weapon_grenadelauncher =
{
	precache_model (&quot;progs/g_rock.mdl&quot;);
	setmodel (self, &quot;progs/g_rock.mdl&quot;);
	self.weapon = 3;
	self.netname = &quot;Grenade Launcher&quot;;
	self.touch = weapon_touch;
	setsize (self, '-16 -16 0', '16 16 56');
	StartItem ();
};

/*QUAKED weapon_rocketlauncher (0 .5 .8) (-16 -16 0) (16 16 32)
*/

void() weapon_rocketlauncher =
{
	precache_model (&quot;progs/g_rock2.mdl&quot;);
	setmodel (self, &quot;progs/g_rock2.mdl&quot;);
	self.weapon = 3;
	self.netname = &quot;Rocket Launcher&quot;;
	self.touch = weapon_touch;
	setsize (self, '-16 -16 0', '16 16 56');
	StartItem ();
};


/*QUAKED weapon_lightning (0 .5 .8) (-16 -16 0) (16 16 32)
*/

void() weapon_lightning =
{
	precache_model (&quot;progs/g_light.mdl&quot;);
	setmodel (self, &quot;progs/g_light.mdl&quot;);
	self.weapon = 3;
	self.netname = &quot;Thunderbolt&quot;;
	self.touch = weapon_touch;
	setsize (self, '-16 -16 0', '16 16 56');
	StartItem ();
};


/*
===============================================================================

AMMO

===============================================================================
*/

void() ammo_touch =
{
local entity	stemp;
local float		best;

	if (other.classname != &quot;player&quot;)
		return;
	if (other.health &lt;= 0)
		return;

// if the player was using his best weapon, change up to the new one if better		
	stemp = self;
	self = other;
	best = W_BestWeapon();
	self = stemp;


// shotgun
	if (self.weapon == 1)
	{
		if (other.ammo_shells &gt;= 100)
			return;
		other.ammo_shells = other.ammo_shells + self.aflag;
	}

// spikes
	if (self.weapon == 2)
	{
		if (other.ammo_nails &gt;= 200)
			return;
		other.ammo_nails = other.ammo_nails + self.aflag;
	}

//	rockets
	if (self.weapon == 3)
	{
		if (other.ammo_rockets &gt;= 100)
			return;
		other.ammo_rockets = other.ammo_rockets + self.aflag;
	}

//	cells
	if (self.weapon == 4)
	{
		if (other.ammo_cells &gt;= 100)
			return;
		other.ammo_cells = other.ammo_cells + self.aflag;
	}

	bound_other_ammo ();
	
	sprint (other, &quot;You got the &quot;);
	sprint (other, self.netname);
	sprint (other, &quot;\n&quot;);
// ammo touch sound
	sound (other, CHAN_ITEM, &quot;weapons/lock4.wav&quot;, 1, ATTN_NORM);
	stuffcmd (other, &quot;bf\n&quot;);

// change to a better weapon if appropriate

	if ( other.weapon == best )
	{
		stemp = self;
		self = other;
		self.weapon = W_BestWeapon();
		W_SetCurrentAmmo ();
		self = stemp;
	}

// if changed current ammo, update it
	stemp = self;
	self = other;
	W_SetCurrentAmmo();
	self = stemp;

// remove it in single player, or setup for respawning in deathmatch
	self.model = string_null;
	self.solid = SOLID_NOT;
	if (deathmatch == 1)
		self.nextthink = time + 30;
	self.think = SUB_regen;

	activator = other;
	SUB_UseTargets();				// fire all targets / killtargets
};




float WEAPON_BIG2 = 1;

/*QUAKED item_shells (0 .5 .8) (0 0 0) (32 32 32) big
*/

void() item_shells =
{
	self.touch = ammo_touch;

	if (self.spawnflags &amp; WEAPON_BIG2)
	{
		precache_model (&quot;maps/b_shell1.bsp&quot;);
		setmodel (self, &quot;maps/b_shell1.bsp&quot;);
		self.aflag = 40;
	}
	else
	{
		precache_model (&quot;maps/b_shell0.bsp&quot;);
		setmodel (self, &quot;maps/b_shell0.bsp&quot;);
		self.aflag = 20;
	}
	self.weapon = 1;
	self.netname = &quot;shells&quot;;
	setsize (self, '0 0 0', '32 32 56');
	StartItem ();
};

/*QUAKED item_spikes (0 .5 .8) (0 0 0) (32 32 32) big
*/

void() item_spikes =
{
	self.touch = ammo_touch;

	if (self.spawnflags &amp; WEAPON_BIG2)
	{
		precache_model (&quot;maps/b_nail1.bsp&quot;);
		setmodel (self, &quot;maps/b_nail1.bsp&quot;);
		self.aflag = 50;
	}
	else
	{
		precache_model (&quot;maps/b_nail0.bsp&quot;);
		setmodel (self, &quot;maps/b_nail0.bsp&quot;);
		self.aflag = 25;
	}
	self.weapon = 2;
	self.netname = &quot;nails&quot;;
	setsize (self, '0 0 0', '32 32 56');
	StartItem ();
};

/*QUAKED item_rockets (0 .5 .8) (0 0 0) (32 32 32) big
*/

void() item_rockets =
{
	self.touch = ammo_touch;

	if (self.spawnflags &amp; WEAPON_BIG2)
	{
		precache_model (&quot;maps/b_rock1.bsp&quot;);
		setmodel (self, &quot;maps/b_rock1.bsp&quot;);
		self.aflag = 10;
	}
	else
	{
		precache_model (&quot;maps/b_rock0.bsp&quot;);
		setmodel (self, &quot;maps/b_rock0.bsp&quot;);
		self.aflag = 5;
	}
	self.weapon = 3;
	self.netname = &quot;rockets&quot;;
	setsize (self, '0 0 0', '32 32 56');
	StartItem ();
};


/*QUAKED item_cells (0 .5 .8) (0 0 0) (32 32 32) big
*/

void() item_cells =
{
	self.touch = ammo_touch;

	if (self.spawnflags &amp; WEAPON_BIG2)
	{
		precache_model (&quot;maps/b_batt1.bsp&quot;);
		setmodel (self, &quot;maps/b_batt1.bsp&quot;);
		self.aflag = 12;
	}
	else
	{
		precache_model (&quot;maps/b_batt0.bsp&quot;);
		setmodel (self, &quot;maps/b_batt0.bsp&quot;);
		self.aflag = 6;
	}
	self.weapon = 4;
	self.netname = &quot;cells&quot;;
	setsize (self, '0 0 0', '32 32 56');
	StartItem ();
};


/*QUAKED item_weapon (0 .5 .8) (0 0 0) (32 32 32) shotgun rocket spikes big
DO NOT USE THIS!!!! IT WILL BE REMOVED!
*/

float WEAPON_SHOTGUN = 1;
float WEAPON_ROCKET = 2;
float WEAPON_SPIKES = 4;
float WEAPON_BIG = 8;
void() item_weapon =
{
	self.touch = ammo_touch;

	if (self.spawnflags &amp; WEAPON_SHOTGUN)
	{
		if (self.spawnflags &amp; WEAPON_BIG)
		{
			precache_model (&quot;maps/b_shell1.bsp&quot;);
			setmodel (self, &quot;maps/b_shell1.bsp&quot;);
			self.aflag = 40;
		}
		else
		{
			precache_model (&quot;maps/b_shell0.bsp&quot;);
			setmodel (self, &quot;maps/b_shell0.bsp&quot;);
			self.aflag = 20;
		}
		self.weapon = 1;
		self.netname = &quot;shells&quot;;
	}

	if (self.spawnflags &amp; WEAPON_SPIKES)
	{
		if (self.spawnflags &amp; WEAPON_BIG)
		{
			precache_model (&quot;maps/b_nail1.bsp&quot;);
			setmodel (self, &quot;maps/b_nail1.bsp&quot;);
			self.aflag = 40;
		}
		else
		{
			precache_model (&quot;maps/b_nail0.bsp&quot;);
			setmodel (self, &quot;maps/b_nail0.bsp&quot;);
			self.aflag = 20;
		}
		self.weapon = 2;
		self.netname = &quot;spikes&quot;;
	}

	if (self.spawnflags &amp; WEAPON_ROCKET)
	{
		if (self.spawnflags &amp; WEAPON_BIG)
		{
			precache_model (&quot;maps/b_rock1.bsp&quot;);
			setmodel (self, &quot;maps/b_rock1.bsp&quot;);
			self.aflag = 10;
		}
		else
		{
			precache_model (&quot;maps/b_rock0.bsp&quot;);
			setmodel (self, &quot;maps/b_rock0.bsp&quot;);
			self.aflag = 5;
		}
		self.weapon = 3;
		self.netname = &quot;rockets&quot;;
	}
	
	setsize (self, '0 0 0', '32 32 56');
	StartItem ();
};


/*
===============================================================================

KEYS

===============================================================================
*/

void() key_touch =
{
local entity	stemp;
local float		best;

	if (other.classname != &quot;player&quot;)
		return;
	if (other.health &lt;= 0)
		return;
	if (other.items &amp; self.items)
		return;

	sprint (other, &quot;You got the &quot;);
	sprint (other, self.netname);
	sprint (other,&quot;\n&quot;);

	sound (other, CHAN_ITEM, self.noise, 1, ATTN_NORM);
	stuffcmd (other, &quot;bf\n&quot;);
	other.items = other.items | self.items;

	if (!coop)
	{	
		self.solid = SOLID_NOT;
		self.model = string_null;
	}

	activator = other;
	SUB_UseTargets();				// fire all targets / killtargets
};


void() key_setsounds =
{
	if (world.worldtype == 0)
	{
		precache_sound (&quot;misc/medkey.wav&quot;);
		self.noise = &quot;misc/medkey.wav&quot;;
	}
	if (world.worldtype == 1)
	{
		precache_sound (&quot;misc/runekey.wav&quot;);
		self.noise = &quot;misc/runekey.wav&quot;;
	}
	if (world.worldtype == 2)
	{
		precache_sound2 (&quot;misc/basekey.wav&quot;);
		self.noise = &quot;misc/basekey.wav&quot;;
	}
};

/*QUAKED item_key1 (0 .5 .8) (-16 -16 -24) (16 16 32)
SILVER key
In order for keys to work
you MUST set your maps
worldtype to one of the
following:
0: medieval
1: metal
2: base
*/

void() item_key1 =
{
	if (world.worldtype == 0)
	{
		precache_model (&quot;progs/w_s_key.mdl&quot;);
		setmodel (self, &quot;progs/w_s_key.mdl&quot;);
		self.netname = &quot;silver key&quot;;
	}
	else if (world.worldtype == 1)
	{
		precache_model (&quot;progs/m_s_key.mdl&quot;);
		setmodel (self, &quot;progs/m_s_key.mdl&quot;);
		self.netname = &quot;silver runekey&quot;;
	}
	else if (world.worldtype == 2)
	{
		precache_model2 (&quot;progs/b_s_key.mdl&quot;);
		setmodel (self, &quot;progs/b_s_key.mdl&quot;);
		self.netname = &quot;silver keycard&quot;;
	}
	key_setsounds();
	self.touch = key_touch;
	self.items = IT_KEY1;
	setsize (self, '-16 -16 -24', '16 16 32');
	StartItem ();
};

/*QUAKED item_key2 (0 .5 .8) (-16 -16 -24) (16 16 32)
GOLD key
In order for keys to work
you MUST set your maps
worldtype to one of the
following:
0: medieval
1: metal
2: base
*/

void() item_key2 =
{
	if (world.worldtype == 0)
	{
		precache_model (&quot;progs/w_g_key.mdl&quot;);
		setmodel (self, &quot;progs/w_g_key.mdl&quot;);
		self.netname = &quot;gold key&quot;;
	}
	if (world.worldtype == 1)
	{
		precache_model (&quot;progs/m_g_key.mdl&quot;);
		setmodel (self, &quot;progs/m_g_key.mdl&quot;);
		self.netname = &quot;gold runekey&quot;;
	}
	if (world.worldtype == 2)
	{
		precache_model2 (&quot;progs/b_g_key.mdl&quot;);
		setmodel (self, &quot;progs/b_g_key.mdl&quot;);
		self.netname = &quot;gold keycard&quot;;
	}
	key_setsounds();
	self.touch = key_touch;
	self.items = IT_KEY2;
	setsize (self, '-16 -16 -24', '16 16 32');
	StartItem ();
};



/*
===============================================================================

END OF LEVEL RUNES

===============================================================================
*/

void() sigil_touch =
{
local entity	stemp;
local float		best;

	if (other.classname != &quot;player&quot;)
		return;
	if (other.health &lt;= 0)
		return;

	centerprint (other, &quot;You got the rune!&quot;);

	sound (other, CHAN_ITEM, self.noise, 1, ATTN_NORM);
	stuffcmd (other, &quot;bf\n&quot;);
	self.solid = SOLID_NOT;
	self.model = string_null;
	serverflags = serverflags | (self.spawnflags &amp; 15);
	self.classname = &quot;&quot;;		// so rune doors won't find it
	
	activator = other;
	SUB_UseTargets();				// fire all targets / killtargets
};


/*QUAKED item_sigil (0 .5 .8) (-16 -16 -24) (16 16 32) E1 E2 E3 E4
End of level sigil, pick up to end episode and return to jrstart.
*/

void() item_sigil =
{
	if (!self.spawnflags)
		objerror (&quot;no spawnflags&quot;);

	precache_sound (&quot;misc/runekey.wav&quot;);
	self.noise = &quot;misc/runekey.wav&quot;;

	if (self.spawnflags &amp; 1)
	{
		precache_model (&quot;progs/end1.mdl&quot;);
		setmodel (self, &quot;progs/end1.mdl&quot;);
	}
	if (self.spawnflags &amp; 2)
	{
		precache_model2 (&quot;progs/end2.mdl&quot;);
		setmodel (self, &quot;progs/end2.mdl&quot;);
	}
	if (self.spawnflags &amp; 4)
	{
		precache_model2 (&quot;progs/end3.mdl&quot;);
		setmodel (self, &quot;progs/end3.mdl&quot;);
	}
	if (self.spawnflags &amp; 8)
	{
		precache_model2 (&quot;progs/end4.mdl&quot;);
		setmodel (self, &quot;progs/end4.mdl&quot;);
	}
	
	self.touch = sigil_touch;
	setsize (self, '-16 -16 -24', '16 16 32');
	StartItem ();
};

/*
===============================================================================

POWERUPS

===============================================================================
*/

void() powerup_touch;


void() powerup_touch =
{
local entity	stemp;
local float		best;

	if (other.classname != &quot;player&quot;)
		return;
	if (other.health &lt;= 0)
		return;

	sprint (other, &quot;You got the &quot;);
	sprint (other, self.netname);
	sprint (other,&quot;\n&quot;);

	if (deathmatch)
	{
		self.mdl = self.model;
		
		if ((self.classname == &quot;item_artifact_invulnerability&quot;) ||
			(self.classname == &quot;item_artifact_invisibility&quot;))
			self.nextthink = time + 60*5;
		else
			self.nextthink = time + 60;
		
		self.think = SUB_regen;
	}	

	sound (other, CHAN_VOICE, self.noise, 1, ATTN_NORM);
	stuffcmd (other, &quot;bf\n&quot;);
	self.solid = SOLID_NOT;
	other.items = other.items | self.items;
	self.model = string_null;

// do the apropriate action
	if (self.classname == &quot;item_artifact_envirosuit&quot;)
	{
		other.rad_time = 1;
		other.radsuit_finished = time + 30;
	}
	
	if (self.classname == &quot;item_artifact_invulnerability&quot;)
	{
		other.invincible_time = 1;
		other.invincible_finished = time + 30;
	}
	
	if (self.classname == &quot;item_artifact_invisibility&quot;)
	{
		other.invisible_time = 1;
		other.invisible_finished = time + 30;
	}

	if (self.classname == &quot;item_artifact_super_damage&quot;)
	{
		other.super_time = 1;
		other.super_damage_finished = time + 30;
	}	

	activator = other;
	SUB_UseTargets();				// fire all targets / killtargets
};



/*QUAKED item_artifact_invulnerability (0 .5 .8) (-16 -16 -24) (16 16 32)
Player is invulnerable for 30 seconds
*/
void() item_artifact_invulnerability =
{
	self.touch = powerup_touch;

	precache_model (&quot;progs/invulner.mdl&quot;);
	precache_sound (&quot;items/protect.wav&quot;);
	precache_sound (&quot;items/protect2.wav&quot;);
	precache_sound (&quot;items/protect3.wav&quot;);
	self.noise = &quot;items/protect.wav&quot;;
	setmodel (self, &quot;progs/invulner.mdl&quot;);
	self.netname = &quot;Pentagram of Protection&quot;;
	self.items = IT_INVULNERABILITY;
	setsize (self, '-16 -16 -24', '16 16 32');
	StartItem ();
};

/*QUAKED item_artifact_envirosuit (0 .5 .8) (-16 -16 -24) (16 16 32)
Player takes no damage from water or slime for 30 seconds
*/
void() item_artifact_envirosuit =
{
	self.touch = powerup_touch;

	precache_model (&quot;progs/suit.mdl&quot;);
	precache_sound (&quot;items/suit.wav&quot;);
	precache_sound (&quot;items/suit2.wav&quot;);
	self.noise = &quot;items/suit.wav&quot;;
	setmodel (self, &quot;progs/suit.mdl&quot;);
	self.netname = &quot;Biosuit&quot;;
	self.items = IT_SUIT;
	setsize (self, '-16 -16 -24', '16 16 32');
	StartItem ();
};


/*QUAKED item_artifact_invisibility (0 .5 .8) (-16 -16 -24) (16 16 32)
Player is invisible for 30 seconds
*/
void() item_artifact_invisibility =
{
	self.touch = powerup_touch;

	precache_model (&quot;progs/invisibl.mdl&quot;);
	precache_sound (&quot;items/inv1.wav&quot;);
	precache_sound (&quot;items/inv2.wav&quot;);
	precache_sound (&quot;items/inv3.wav&quot;);
	self.noise = &quot;items/inv1.wav&quot;;
	setmodel (self, &quot;progs/invisibl.mdl&quot;);
	self.netname = &quot;Ring of Shadows&quot;;
	self.items = IT_INVISIBILITY;
	setsize (self, '-16 -16 -24', '16 16 32');
	StartItem ();
};


/*QUAKED item_artifact_super_damage (0 .5 .8) (-16 -16 -24) (16 16 32)
The next attack from the player will do 4x damage
*/
void() item_artifact_super_damage =
{
	self.touch = powerup_touch;

	precache_model (&quot;progs/quaddama.mdl&quot;);
	precache_sound (&quot;items/damage.wav&quot;);
	precache_sound (&quot;items/damage2.wav&quot;);
	precache_sound (&quot;items/damage3.wav&quot;);
	self.noise = &quot;items/damage.wav&quot;;
	setmodel (self, &quot;progs/quaddama.mdl&quot;);
	self.netname = &quot;Quad Damage&quot;;
	self.items = IT_QUAD;
	setsize (self, '-16 -16 -24', '16 16 32');
	StartItem ();
};



/*
===============================================================================

PLAYER BACKPACKS

===============================================================================
*/

void() BackpackTouch =
{
	local string	s;
	local	float	best, old, new;
	local		entity	stemp;
	local	float	acount;
	
	if (other.classname != &quot;player&quot;)
		return;
	if (other.health &lt;= 0)
		return;

	acount = 0;
	sprint (other, &quot;You get &quot;);

	if (self.items)
		if ((other.items &amp; self.items) == 0)
		{
			acount = 1;
			sprint (other, &quot;the &quot;);
			sprint (other, self.netname);
		}

// if the player was using his best weapon, change up to the new one if better		
	stemp = self;
	self = other;
	best = W_BestWeapon();
	self = stemp;

// change weapons
	other.ammo_shells = other.ammo_shells + self.ammo_shells;
	other.ammo_nails = other.ammo_nails + self.ammo_nails;
	other.ammo_rockets = other.ammo_rockets + self.ammo_rockets;
	other.ammo_cells = other.ammo_cells + self.ammo_cells;

	new = self.items;
	if (!new)
		new = other.weapon;
	old = other.items;
	other.items = other.items | new;
	
	bound_other_ammo ();

	if (self.ammo_shells)
	{
		if (acount)
			sprint(other, &quot;, &quot;);
		acount = 1;
		s = ftos(self.ammo_shells);
		sprint (other, s);
		sprint (other, &quot; shells&quot;);
	}
	if (self.ammo_nails)
	{
		if (acount)
			sprint(other, &quot;, &quot;);
		acount = 1;
		s = ftos(self.ammo_nails);
		sprint (other, s);
		sprint (other, &quot; nails&quot;);
	}
	if (self.ammo_rockets)
	{
		if (acount)
			sprint(other, &quot;, &quot;);
		acount = 1;
		s = ftos(self.ammo_rockets);
		sprint (other, s);
		sprint (other, &quot; rockets&quot;);
	}
	if (self.ammo_cells)
	{
		if (acount)
			sprint(other, &quot;, &quot;);
		acount = 1;
		s = ftos(self.ammo_cells);
		sprint (other, s);
		sprint (other, &quot; cells&quot;);
	}
	
	sprint (other, &quot;\n&quot;);
// backpack touch sound
	sound (other, CHAN_ITEM, &quot;weapons/lock4.wav&quot;, 1, ATTN_NORM);
	stuffcmd (other, &quot;bf\n&quot;);

// remove the backpack, change self to the player
	remove(self);
	self = other;

// change to the weapon
	if (!deathmatch)
		self.weapon = new;
	else
		Deathmatch_Weapon (old, new);

	W_SetCurrentAmmo ();
};

/*
===============
DropBackpack
===============
*/
void() DropBackpack =
{
	local entity	item;

	if (!(self.ammo_shells + self.ammo_nails + self.ammo_rockets + self.ammo_cells))
		return;	// nothing in it

	item = spawn();
	item.origin = self.origin - '0 0 24';
	
	item.items = self.weapon;
	if (item.items == IT_AXE)
		item.netname = &quot;Axe&quot;;
	else if (item.items == IT_SHOTGUN)
		item.netname = &quot;Shotgun&quot;;
	else if (item.items == IT_SUPER_SHOTGUN)
		item.netname = &quot;Double-barrelled Shotgun&quot;;
	else if (item.items == IT_NAILGUN)
		item.netname = &quot;Nailgun&quot;;
	else if (item.items == IT_SUPER_NAILGUN)
		item.netname = &quot;Super Nailgun&quot;;
	else if (item.items == IT_GRENADE_LAUNCHER)
		item.netname = &quot;Grenade Launcher&quot;;
	else if (item.items == IT_ROCKET_LAUNCHER)
		item.netname = &quot;Rocket Launcher&quot;;
	else if (item.items == IT_LIGHTNING)
		item.netname = &quot;Thunderbolt&quot;;
	else
		item.netname = &quot;&quot;;

	item.ammo_shells = self.ammo_shells;
	item.ammo_nails = self.ammo_nails;
	item.ammo_rockets = self.ammo_rockets;
	item.ammo_cells = self.ammo_cells;

	item.velocity_z = 300;
	item.velocity_x = -100 + (random() * 200);
	item.velocity_y = -100 + (random() * 200);
	
	item.flags = FL_ITEM;
	item.solid = SOLID_TRIGGER;
	item.movetype = MOVETYPE_TOSS;
	setmodel (item, &quot;progs/backpack.mdl&quot;);
	setsize (item, '-16 -16 0', '16 16 56');
	item.touch = BackpackTouch;
	
	item.nextthink = time + 120;	// remove after 2 minutes
	item.think = SUB_Remove;
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>mr7flb9bmz5o7vn6v1fgnugud7d5s58</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>jctest.qc</title>
    <ns>0</ns>
    <id>846</id>
    <revision>
      <id>2463</id>
      <timestamp>2013-03-29T10:46:34Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for a test trigger. It is not used anywhere in the game.   &lt;pre&gt; void() jctrig = { dprint (&quot;here\n\n&quot;); 	lightstyle(0, &quot;az&quot;); };  /*QUA...&quot;</comment>
      <text xml:space="preserve" bytes="346">This [[Quake-C]] file contains the code for a test trigger. It is not used anywhere in the game.


&lt;pre&gt;
void() jctrig =
{
dprint (&quot;here\n\n&quot;);
	lightstyle(0, &quot;az&quot;);
};

/*QUAKED trigger_jctest (.5 .5 .5) ?
*/
void() trigger_jctest =
{
	setsize (self, self.mins, self.maxs);
	self.solid = SOLID_EDGE;
	self.touch = jctrig;
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>cm2u8jel4etq1vyywqozx8bqtxo3grp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>knight.qc</title>
    <ns>0</ns>
    <id>847</id>
    <revision>
      <id>2465</id>
      <timestamp>2013-03-29T10:48:23Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for the [[Knight]] [[Monsters | monster]].   &lt;pre&gt; /* ==============================================================================  K...&quot;</comment>
      <text xml:space="preserve" bytes="9795">This [[Quake-C]] file contains the code for the [[Knight]] [[Monsters | monster]].


&lt;pre&gt;
/*
==============================================================================

KNIGHT

==============================================================================
*/

$cd id1/models/knight
$origin 0 0 24
$base base
$skin badass3

$frame stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8 stand9

$frame runb1 runb2 runb3 runb4 runb5 runb6 runb7 runb8

//frame runc1 runc2 runc3 runc4 runc5 runc6

$frame runattack1 runattack2 runattack3 runattack4 runattack5
$frame runattack6 runattack7 runattack8 runattack9 runattack10
$frame runattack11

$frame pain1 pain2 pain3

$frame painb1 painb2 painb3 painb4 painb5 painb6 painb7 painb8 painb9
$frame painb10 painb11

//frame attack1 attack2 attack3 attack4 attack5 attack6 attack7
//frame attack8 attack9 attack10 attack11

$frame attackb1 attackb1 attackb2 attackb3 attackb4 attackb5
$frame attackb6 attackb7 attackb8 attackb9 attackb10

$frame walk1 walk2 walk3 walk4 walk5 walk6 walk7 walk8 walk9
$frame walk10 walk11 walk12 walk13 walk14

$frame kneel1 kneel2 kneel3 kneel4 kneel5

$frame standing2 standing3 standing4 standing5

$frame death1 death2 death3 death4 death5 death6 death7 death8
$frame death9 death10

$frame deathb1 deathb2 deathb3 deathb4 deathb5 deathb6 deathb7 deathb8
$frame deathb9 deathb10 deathb11

void()	knight_stand1	=[	$stand1,	knight_stand2	] {ai_stand();};
void()	knight_stand2	=[	$stand2,	knight_stand3	] {ai_stand();};
void()	knight_stand3	=[	$stand3,	knight_stand4	] {ai_stand();};
void()	knight_stand4	=[	$stand4,	knight_stand5	] {ai_stand();};
void()	knight_stand5	=[	$stand5,	knight_stand6	] {ai_stand();};
void()	knight_stand6	=[	$stand6,	knight_stand7	] {ai_stand();};
void()	knight_stand7	=[	$stand7,	knight_stand8	] {ai_stand();};
void()	knight_stand8	=[	$stand8,	knight_stand9	] {ai_stand();};
void()	knight_stand9	=[	$stand9,	knight_stand1	] {ai_stand();};

void()	knight_walk1	=[	$walk1,		knight_walk2	] {
if (random() &lt; 0.2)
	sound (self, CHAN_VOICE, &quot;knight/idle.wav&quot;, 1,  ATTN_IDLE);
ai_walk(3);};
void()	knight_walk2	=[	$walk2,		knight_walk3	] {ai_walk(2);};
void()	knight_walk3	=[	$walk3,		knight_walk4	] {ai_walk(3);};
void()	knight_walk4	=[	$walk4,		knight_walk5	] {ai_walk(4);};
void()	knight_walk5	=[	$walk5,		knight_walk6	] {ai_walk(3);};
void()	knight_walk6	=[	$walk6,		knight_walk7	] {ai_walk(3);};
void()	knight_walk7	=[	$walk7,		knight_walk8	] {ai_walk(3);};
void()	knight_walk8	=[	$walk8,		knight_walk9	] {ai_walk(4);};
void()	knight_walk9	=[	$walk9,		knight_walk10	] {ai_walk(3);};
void()	knight_walk10	=[	$walk10,	knight_walk11	] {ai_walk(3);};
void()	knight_walk11	=[	$walk11,	knight_walk12	] {ai_walk(2);};
void()	knight_walk12	=[	$walk12,	knight_walk13	] {ai_walk(3);};
void()	knight_walk13	=[	$walk13,	knight_walk14	] {ai_walk(4);};
void()	knight_walk14	=[	$walk14,	knight_walk1	] {ai_walk(3);};


void()	knight_run1	=[	$runb1,		knight_run2	] {
if (random() &lt; 0.2)
	sound (self, CHAN_VOICE, &quot;knight/idle.wav&quot;, 1,  ATTN_IDLE);
ai_run(16);};
void()	knight_run2	=[	$runb2,		knight_run3	] {ai_run(20);};
void()	knight_run3	=[	$runb3,		knight_run4	] {ai_run(13);};
void()	knight_run4	=[	$runb4,		knight_run5	] {ai_run(7);};
void()	knight_run5	=[	$runb5,		knight_run6	] {ai_run(16);};
void()	knight_run6	=[	$runb6,		knight_run7	] {ai_run(20);};
void()	knight_run7	=[	$runb7,		knight_run8	] {ai_run(14);};
void()	knight_run8	=[	$runb8,		knight_run1	] {ai_run(6);};


void()	knight_runatk1	=[	$runattack1,		knight_runatk2	]
{
if (random() &gt; 0.5)
	sound (self, CHAN_WEAPON, &quot;knight/sword2.wav&quot;, 1, ATTN_NORM);
else
	sound (self, CHAN_WEAPON, &quot;knight/sword1.wav&quot;, 1, ATTN_NORM);
ai_charge(20);
};
void()	knight_runatk2	=[	$runattack2,	knight_runatk3	] {ai_charge_side();};
void()	knight_runatk3	=[	$runattack3,	knight_runatk4	] {ai_charge_side();};
void()	knight_runatk4	=[	$runattack4,	knight_runatk5	] {ai_charge_side();};
void()	knight_runatk5	=[	$runattack5,	knight_runatk6	] {ai_melee_side();};
void()	knight_runatk6	=[	$runattack6,	knight_runatk7	] {ai_melee_side();};
void()	knight_runatk7	=[	$runattack7,	knight_runatk8	] {ai_melee_side();};
void()	knight_runatk8	=[	$runattack8,	knight_runatk9	] {ai_melee_side();};
void()	knight_runatk9	=[	$runattack9,	knight_runatk10	] {ai_melee_side();};
void()	knight_runatk10	=[	$runattack10,	knight_runatk11	] {ai_charge_side();};
void()	knight_runatk11	=[	$runattack11,	knight_run1	] {ai_charge(10);};

void()	knight_atk1	=[	$attackb1,		knight_atk2	]
{
sound (self, CHAN_WEAPON, &quot;knight/sword1.wav&quot;, 1, ATTN_NORM);
ai_charge(0);};
void()	knight_atk2	=[	$attackb2,		knight_atk3	] {ai_charge(7);};
void()	knight_atk3	=[	$attackb3,		knight_atk4	] {ai_charge(4);};
void()	knight_atk4	=[	$attackb4,		knight_atk5	] {ai_charge(0);};
void()	knight_atk5	=[	$attackb5,		knight_atk6	] {ai_charge(3);};
void()	knight_atk6	=[	$attackb6,		knight_atk7	] {ai_charge(4); ai_melee();};
void()	knight_atk7	=[	$attackb7,		knight_atk8	] {ai_charge(1); ai_melee();};
void()	knight_atk8	=[	$attackb8,		knight_atk9	] {ai_charge(3);
ai_melee();};
void()	knight_atk9	=[	$attackb9,		knight_atk10] {ai_charge(1);};
void()	knight_atk10=[	$attackb10,		knight_run1	] {ai_charge(5);};

//void()	knight_atk9	=[	$attack9,		knight_atk10	] {};
//void()	knight_atk10	=[	$attack10,		knight_atk11	] {};
//void()	knight_atk11	=[	$attack11,		knight_run1	] {};

//===========================================================================

void()	knight_pain1	=[	$pain1,		knight_pain2	] {};
void()	knight_pain2	=[	$pain2,		knight_pain3	] {};
void()	knight_pain3	=[	$pain3,		knight_run1	] {};

void()	knight_painb1	=[	$painb1,	knight_painb2	] {ai_painforward(0);};
void()	knight_painb2	=[	$painb2,	knight_painb3	] {ai_painforward(3);};
void()	knight_painb3	=[	$painb3,	knight_painb4	] {};
void()	knight_painb4	=[	$painb4,	knight_painb5	] {};
void()	knight_painb5	=[	$painb5,	knight_painb6	] {ai_painforward(2);};
void()	knight_painb6	=[	$painb6,	knight_painb7	] {ai_painforward(4);};
void()	knight_painb7	=[	$painb7,	knight_painb8	] {ai_painforward(2);};
void()	knight_painb8	=[	$painb8,	knight_painb9	] {ai_painforward(5);};
void()	knight_painb9	=[	$painb9,	knight_painb10	] {ai_painforward(5);};
void()	knight_painb10	=[	$painb10,	knight_painb11	] {ai_painforward(0);};
void()	knight_painb11	=[	$painb11,	knight_run1	] {};

void(entity attacker, float damage)	knight_pain =
{
	local float r;

	if (self.pain_finished &gt; time)
		return;

	r = random();
	
	sound (self, CHAN_VOICE, &quot;knight/khurt.wav&quot;, 1, ATTN_NORM);
	if (r &lt; 0.85)
	{
		knight_pain1 ();
		self.pain_finished = time + 1;
	}
	else
	{
		knight_painb1 ();
		self.pain_finished = time + 1;
	}
	
};

//===========================================================================

void()	knight_bow1	=[	$kneel1,		knight_bow2	] {ai_turn();};
void()	knight_bow2	=[	$kneel2,		knight_bow3	] {ai_turn();};
void()	knight_bow3	=[	$kneel3,		knight_bow4	] {ai_turn();};
void()	knight_bow4	=[	$kneel4,		knight_bow5	] {ai_turn();};

void()	knight_bow5	=[	$kneel5,		knight_bow5	] {ai_turn();};

void()	knight_bow6	=[	$kneel4,		knight_bow7	] {ai_turn();};
void()	knight_bow7	=[	$kneel3,		knight_bow8	] {ai_turn();};
void()	knight_bow8	=[	$kneel2,		knight_bow9	] {ai_turn();};
void()	knight_bow9	=[	$kneel1,		knight_bow10	] {ai_turn();};
void()	knight_bow10	=[	$walk1,		knight_walk1	] {ai_turn();};



void()	knight_die1	=[	$death1,	knight_die2	] {};
void()	knight_die2	=[	$death2,	knight_die3	] {};
void()	knight_die3	=[	$death3,	knight_die4	] 
{self.solid = SOLID_NOT;};
void()	knight_die4	=[	$death4,	knight_die5	] {};
void()	knight_die5	=[	$death5,	knight_die6	] {};
void()	knight_die6	=[	$death6,	knight_die7	] {};
void()	knight_die7	=[	$death7,	knight_die8	] {};
void()	knight_die8	=[	$death8,	knight_die9	] {};
void()	knight_die9	=[	$death9,	knight_die10] {};
void()	knight_die10=[	$death10,	knight_die10] {};


void()	knight_dieb1	=[	$deathb1,	knight_dieb2	] {};
void()	knight_dieb2	=[	$deathb2,	knight_dieb3	] {};
void()	knight_dieb3	=[	$deathb3,	knight_dieb4	] 	
{self.solid = SOLID_NOT;};
void()	knight_dieb4	=[	$deathb4,	knight_dieb5	] {};
void()	knight_dieb5	=[	$deathb5,	knight_dieb6	] {};
void()	knight_dieb6	=[	$deathb6,	knight_dieb7	] {};
void()	knight_dieb7	=[	$deathb7,	knight_dieb8	] {};
void()	knight_dieb8	=[	$deathb8,	knight_dieb9	] {};
void()	knight_dieb9	=[	$deathb9,	knight_dieb10] {};
void()	knight_dieb10 = [	$deathb10,	knight_dieb11] {};
void()	knight_dieb11 = [	$deathb11,	knight_dieb11] {};


void() knight_die =
{
// check for gib
	if (self.health &lt; -40)
	{
		sound (self, CHAN_VOICE, &quot;player/udeath.wav&quot;, 1, ATTN_NORM);
		ThrowHead (&quot;progs/h_knight.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib1.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib2.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib3.mdl&quot;, self.health);
		return;
	}

// regular death
	sound (self, CHAN_VOICE, &quot;knight/kdeath.wav&quot;, 1, ATTN_NORM);
	if (random() &lt; 0.5)
		knight_die1 ();
	else
		knight_dieb1 ();
};


/*QUAKED monster_knight (1 0 0) (-16 -16 -24) (16 16 40) Ambush
*/
void() monster_knight =
{
	if (deathmatch)
	{
		remove(self);
		return;
	}
	precache_model (&quot;progs/knight.mdl&quot;);
	precache_model (&quot;progs/h_knight.mdl&quot;);

	precache_sound (&quot;knight/kdeath.wav&quot;);
	precache_sound (&quot;knight/khurt.wav&quot;);
	precache_sound (&quot;knight/ksight.wav&quot;);
	precache_sound (&quot;knight/sword1.wav&quot;);
	precache_sound (&quot;knight/sword2.wav&quot;);
	precache_sound (&quot;knight/idle.wav&quot;);

	self.solid = SOLID_SLIDEBOX;
	self.movetype = MOVETYPE_STEP;

	setmodel (self, &quot;progs/knight.mdl&quot;);

	setsize (self, '-16 -16 -24', '16 16 40');
	self.health = 75;

	self.th_stand = knight_stand1;
	self.th_walk = knight_walk1;
	self.th_run = knight_run1;
	self.th_melee = knight_atk1;
	self.th_pain = knight_pain;
	self.th_die = knight_die;
	
	walkmonster_start ();
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>2s1z3cyac0cedgbjoec3dw9om27wo13</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>light</title>
    <ns>0</ns>
    <id>1074</id>
    <revision>
      <id>3232</id>
      <timestamp>2014-04-17T12:08:00Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;Lighting info: http://necros.fov120.com/post.php?postID=2&quot;</comment>
      <text xml:space="preserve" bytes="57">Lighting info: http://necros.fov120.com/post.php?postID=2</text>
      <sha1>m4ye94q87dhkp95sitoc61kejeofsxg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3233</id>
      <parentid>3232</parentid>
      <timestamp>2014-04-17T12:11:30Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="141">Lighting info: http://necros.fov120.com/post.php?postID=2
Shadows without shadow casting geometry :http://necros.fov120.com/post.php?postID=5</text>
      <sha1>breg9kaqx8nc82i3a0l854s2s6rhfhs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3234</id>
      <parentid>3233</parentid>
      <timestamp>2014-04-17T12:11:47Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="142">Lighting info: http://necros.fov120.com/post.php?postID=2

Shadows without shadow casting geometry :http://necros.fov120.com/post.php?postID=5</text>
      <sha1>7a212qnfbssasp29zzuxi80fl5fhsoa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>lightstyle</title>
    <ns>0</ns>
    <id>799</id>
    <revision>
      <id>2343</id>
      <timestamp>2013-03-27T02:06:33Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;====Syntax:==== &lt;code&gt;void lightstyle(float style, string value)&lt;/code&gt;  Changes a light style in-game.  In stock Quake, this is used to make switchable lights. ====Parameters...&quot;</comment>
      <text xml:space="preserve" bytes="1060">====Syntax:====
&lt;code&gt;void lightstyle(float style, string value)&lt;/code&gt;

Changes a light style in-game.  In stock Quake, this is used to make switchable lights.
====Parameters:====
:&lt;code&gt;style&lt;/code&gt; - The light style to affect.
:&lt;code&gt;value&lt;/code&gt; - The string of letters that make up the lightstyle's brightness values.
====Returns:====
:void
====Example:====
lightstyle(15, &quot;azazaaazzz&quot;);
====Other Details:====
The string '''value''' is a sequence of letters representing different brightness levels.
'''a''' is pitch black (off) and '''z''' is full brightness (in engines with overbright lighting, this is actually double brightness, '''m''' is normal brightness).
Each letter is played for 0.1 seconds and when the engine gets to the end of the sequence, it loops back to the beginning.
It is important to note that a light style is global and will affect all lights in the level that are tagged with a particular light style.  Setting style 0 will affect all normal lights in the level (including sunlight and minlight!).


[[Category:QuakeC Function]]</text>
      <sha1>9mtldz8x7fngj1jgfh3mkv8n6pt85e3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2934</id>
      <parentid>2343</parentid>
      <timestamp>2013-05-02T02:51:37Z</timestamp>
      <contributor>
        <ip>99.227.215.224</ip>
      </contributor>
      <comment>/* Other Details: */</comment>
      <text xml:space="preserve" bytes="1254">====Syntax:====
&lt;code&gt;void lightstyle(float style, string value)&lt;/code&gt;

Changes a light style in-game.  In stock Quake, this is used to make switchable lights.
====Parameters:====
:&lt;code&gt;style&lt;/code&gt; - The light style to affect.
:&lt;code&gt;value&lt;/code&gt; - The string of letters that make up the lightstyle's brightness values.
====Returns:====
:void
====Example:====
lightstyle(15, &quot;azazaaazzz&quot;);
====Other Details:====
The string '''value''' is a sequence of letters representing different brightness levels.
'''a''' is pitch black (off) and '''z''' is full brightness (in engines with overbright lighting, this is actually double brightness, '''m''' is normal brightness).
Each letter is played for 0.1 seconds and when the engine gets to the end of the sequence, it loops back to the beginning.
It is important to note that a light style is global and will affect all lights in the level that are tagged with a particular light style.  Setting style 0 will affect all normal lights in the level (including sunlight and minlight!).
In stock quake, this was used to create switchable lights by alternating between 'm' and 'z' values when triggered, but you can also use it to change light patterns or to fade lights on and off.

[[Category:QuakeC Function]]</text>
      <sha1>1td9jmiulq3flmsvlopsglwia2kwfcu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2935</id>
      <parentid>2934</parentid>
      <timestamp>2013-05-02T02:52:29Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <minor/>
      <comment>/* Other Details: */</comment>
      <text xml:space="preserve" bytes="1256">====Syntax:====
&lt;code&gt;void lightstyle(float style, string value)&lt;/code&gt;

Changes a light style in-game.  In stock Quake, this is used to make switchable lights.
====Parameters:====
:&lt;code&gt;style&lt;/code&gt; - The light style to affect.
:&lt;code&gt;value&lt;/code&gt; - The string of letters that make up the lightstyle's brightness values.
====Returns:====
:void
====Example:====
lightstyle(15, &quot;azazaaazzz&quot;);
====Other Details:====
The string '''value''' is a sequence of letters representing different brightness levels.
'''a''' is pitch black (off) and '''z''' is full brightness (in engines with overbright lighting, this is actually double brightness, '''m''' is normal brightness).
Each letter is played for 0.1 seconds and when the engine gets to the end of the sequence, it loops back to the beginning.

It is important to note that a light style is global and will affect all lights in the level that are tagged with a particular light style.  Setting style 0 will affect all normal lights in the level (including sunlight and minlight!).

In stock quake, this was used to create switchable lights by alternating between 'm' and 'z' values when triggered, but you can also use it to change light patterns or to fade lights on and off.

[[Category:QuakeC Function]]</text>
      <sha1>t1g8bj5dfz97b8oqy06lcy2sqdvwm9p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>localcmd</title>
    <ns>0</ns>
    <id>438</id>
    <revision>
      <id>765</id>
      <timestamp>2008-05-08T14:30:02Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page:  == Function: localcmd ==   void localcmd (string text)        text = text of the command, ended by \
 (newline).  Execute a command on the server, as if it had been typed on the server's ...</comment>
      <text xml:space="preserve" bytes="375">
== Function: localcmd ==


void localcmd (string text)
       text = text of the command, ended by \
 (newline).

Execute a command on the server, as if it had been typed on the server's console.

Examples:

   localcmd(&quot;restart\
&quot;);      // restart the level
   localcmd(&quot;teamplay 1\
&quot;);   // set deathmatch mode to teamplay
   localcmd(&quot;killserver\
&quot;);   // poor server...</text>
      <sha1>5vm44dtsgktuecnb3r4n9jzuj3czwbk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2558</id>
      <parentid>765</parentid>
      <timestamp>2013-03-29T14:22:08Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Localcmd]] to [[localcmd]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="375">
== Function: localcmd ==


void localcmd (string text)
       text = text of the command, ended by \
 (newline).

Execute a command on the server, as if it had been typed on the server's console.

Examples:

   localcmd(&quot;restart\
&quot;);      // restart the level
   localcmd(&quot;teamplay 1\
&quot;);   // set deathmatch mode to teamplay
   localcmd(&quot;killserver\
&quot;);   // poor server...</text>
      <sha1>5vm44dtsgktuecnb3r4n9jzuj3czwbk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>makevectors</title>
    <ns>0</ns>
    <id>613</id>
    <revision>
      <id>1697</id>
      <timestamp>2013-03-24T21:22:05Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Gets relative directional vectors from angles.</comment>
      <text xml:space="preserve" bytes="411">Syntax:&lt;br/&gt;
&lt;code&gt;makevectors(vector angles)&lt;/code&gt;

Creates relative forward, right and up vectors with length 1 from angles.  These 3 directional vectors are stored in the global variables &lt;code&gt;v_forward&lt;/code&gt;, &lt;code&gt;v_right&lt;/code&gt; and &lt;code&gt;v_up&lt;/code&gt; respectively.
Note that because these are global variables, running makevectors on another set of angles will destroy the previously calculated vectors.</text>
      <sha1>tkn9mkgwe0rgobmna383hli1hagjx3r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1708</id>
      <parentid>1697</parentid>
      <timestamp>2013-03-24T22:19:33Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="442">Syntax:&lt;br/&gt;
&lt;code&gt;makevectors(vector angles)&lt;/code&gt;

Creates relative forward, right and up vectors with length 1 from angles.  These 3 directional vectors are stored in the global variables &lt;code&gt;v_forward&lt;/code&gt;, &lt;code&gt;v_right&lt;/code&gt; and &lt;code&gt;v_up&lt;/code&gt; respectively.
Note that because these are global variables, running makevectors on another set of angles will destroy the previously calculated vectors.


[[Category:QuakeC Function]]</text>
      <sha1>f4yi2af2etqx8bj7zp2xpfcbz4xuw7c</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1713</id>
      <parentid>1708</parentid>
      <timestamp>2013-03-24T22:35:47Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="447">Syntax:&lt;br/&gt;
void &lt;code&gt;makevectors(vector angles)&lt;/code&gt;

Creates relative forward, right and up vectors with length 1 from angles.  These 3 directional vectors are stored in the global variables &lt;code&gt;v_forward&lt;/code&gt;, &lt;code&gt;v_right&lt;/code&gt; and &lt;code&gt;v_up&lt;/code&gt; respectively.
Note that because these are global variables, running makevectors on another set of angles will destroy the previously calculated vectors.


[[Category:QuakeC Function]]</text>
      <sha1>cemzy5izs26s8hc3q7tx9c1ml23oil2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1714</id>
      <parentid>1713</parentid>
      <timestamp>2013-03-24T22:35:55Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="447">Syntax:&lt;br/&gt;
&lt;code&gt;void makevectors(vector angles)&lt;/code&gt;

Creates relative forward, right and up vectors with length 1 from angles.  These 3 directional vectors are stored in the global variables &lt;code&gt;v_forward&lt;/code&gt;, &lt;code&gt;v_right&lt;/code&gt; and &lt;code&gt;v_up&lt;/code&gt; respectively.
Note that because these are global variables, running makevectors on another set of angles will destroy the previously calculated vectors.


[[Category:QuakeC Function]]</text>
      <sha1>0qxlxqzw2stx2mj1zah6qstjus6uyfd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1720</id>
      <parentid>1714</parentid>
      <timestamp>2013-03-24T22:50:19Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="498">====Syntax:====
&lt;code&gt;void makevectors(vector angles)&lt;/code&gt;

Creates relative forward, right and up vectors with length 1 from angles.  These 3 directional vectors are stored in the global variables &lt;code&gt;v_forward&lt;/code&gt;, &lt;code&gt;v_right&lt;/code&gt; and &lt;code&gt;v_up&lt;/code&gt; respectively.
Note that because these are global variables, running makevectors on another set of angles will destroy the previously calculated vectors.
====Parameters:====
:None
====Returns:====
:void

[[Category:QuakeC Function]]</text>
      <sha1>bq5ptijcyydm8v23kj0yvsjjpj098oe</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1724</id>
      <parentid>1720</parentid>
      <timestamp>2013-03-24T22:56:05Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="568">====Syntax:====
&lt;code&gt;void makevectors(vector angles)&lt;/code&gt;

Creates relative forward, right and up vectors with length 1 from angles.  These 3 directional vectors are stored in the global variables &lt;code&gt;v_forward&lt;/code&gt;, &lt;code&gt;v_right&lt;/code&gt; and &lt;code&gt;v_up&lt;/code&gt; respectively.
Note that because these are global variables, running makevectors on another set of angles will destroy the previously calculated vectors.
====Parameters:====
:&lt;code&gt;angles&lt;/code&gt; - The angles that will be used to generate the vectors
====Returns:====
:void

[[Category:QuakeC Function]]</text>
      <sha1>4mfb4r8dnnqxsgwpjrljplytfa9804z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>max leafs visible</title>
    <ns>0</ns>
    <id>1042</id>
    <revision>
      <id>2989</id>
      <timestamp>2013-06-16T17:31:15Z</timestamp>
      <contributor>
        <username>Deqer</username>
        <id>42</id>
      </contributor>
      <comment>Created page with &quot;'''max_leafs_visible''' is a message that shows up in any game that is powered by id Tech, such as Quake 1, Quake 2, Quake 3, etc.   '''max_leafs_visible''' is not an error.  ...&quot;</comment>
      <text xml:space="preserve" bytes="558">'''max_leafs_visible''' is a message that shows up in any game that is powered by id Tech, such as Quake 1, Quake 2, Quake 3, etc. 

'''max_leafs_visible''' is not an error.  It is a report.

'''max_leafs_visible''' tells you the # of leafs visible from a place (place /w the highest leaves visible) in your map (for when a player stood there).  The number (following &quot;max_leafs_visible&quot;) is the # of leaves, and the following three numbers (enclosed in parentheses) are the coordinates of the position(the place where the player would stand) that it occurs.</text>
      <sha1>p9nprkntwjl6a41k46gthuhorabv9p0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>misc.qc</title>
    <ns>0</ns>
    <id>848</id>
    <revision>
      <id>2466</id>
      <timestamp>2013-03-29T10:50:37Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for miscellaneous entities.   &lt;pre&gt;  /*QUAKED info_null (0 0.5 0) (-4 -4 -4) (4 4 4) Used as a positional target for spotlights, etc. *...&quot;</comment>
      <text xml:space="preserve" bytes="15184">This [[Quake-C]] file contains the code for miscellaneous entities.


&lt;pre&gt;

/*QUAKED info_null (0 0.5 0) (-4 -4 -4) (4 4 4)
Used as a positional target for spotlights, etc.
*/
void() info_null =
{
	remove(self);
};

/*QUAKED info_notnull (0 0.5 0) (-4 -4 -4) (4 4 4)
Used as a positional target for lightning.
*/
void() info_notnull =
{
};

//============================================================================

float START_OFF = 1;

void() light_use =
{
	if (self.spawnflags &amp; START_OFF)
	{
		lightstyle(self.style, &quot;m&quot;);
		self.spawnflags = self.spawnflags - START_OFF;
	}
	else
	{
		lightstyle(self.style, &quot;a&quot;);
		self.spawnflags = self.spawnflags + START_OFF;
	}
};

/*QUAKED light (0 1 0) (-8 -8 -8) (8 8 8) START_OFF
Non-displayed light.
Default light value is 300
Default style is 0
If targeted, it will toggle between on or off.
*/
void() light =
{
	if (!self.targetname)
	{	// inert light
		remove(self);
		return;
	}
	
	if (self.style &gt;= 32)
	{
		self.use = light_use;
		if (self.spawnflags &amp; START_OFF)
			lightstyle(self.style, &quot;a&quot;);
		else
			lightstyle(self.style, &quot;m&quot;);
	}
};

/*QUAKED light_fluoro (0 1 0) (-8 -8 -8) (8 8 8) START_OFF
Non-displayed light.
Default light value is 300
Default style is 0
If targeted, it will toggle between on or off.
Makes steady fluorescent humming sound
*/
void() light_fluoro =
{
	if (self.style &gt;= 32)
	{
		self.use = light_use;
		if (self.spawnflags &amp; START_OFF)
			lightstyle(self.style, &quot;a&quot;);
		else
			lightstyle(self.style, &quot;m&quot;);
	}
	
	precache_sound (&quot;ambience/fl_hum1.wav&quot;);
	ambientsound (self.origin, &quot;ambience/fl_hum1.wav&quot;, 0.5, ATTN_STATIC);
};

/*QUAKED light_fluorospark (0 1 0) (-8 -8 -8) (8 8 8)
Non-displayed light.
Default light value is 300
Default style is 10
Makes sparking, broken fluorescent sound
*/
void() light_fluorospark =
{
	if (!self.style)
		self.style = 10;

	precache_sound (&quot;ambience/buzz1.wav&quot;);
	ambientsound (self.origin, &quot;ambience/buzz1.wav&quot;, 0.5, ATTN_STATIC);
};

/*QUAKED light_globe (0 1 0) (-8 -8 -8) (8 8 8)
Sphere globe light.
Default light value is 300
Default style is 0
*/
void() light_globe =
{
	precache_model (&quot;progs/s_light.spr&quot;);
	setmodel (self, &quot;progs/s_light.spr&quot;);
	makestatic (self);
};

void() FireAmbient =
{
	precache_sound (&quot;ambience/fire1.wav&quot;);
// attenuate fast
	ambientsound (self.origin, &quot;ambience/fire1.wav&quot;, 0.5, ATTN_STATIC);
};

/*QUAKED light_torch_small_walltorch (0 .5 0) (-10 -10 -20) (10 10 20)
Short wall torch
Default light value is 200
Default style is 0
*/
void() light_torch_small_walltorch =
{
	precache_model (&quot;progs/flame.mdl&quot;);
	setmodel (self, &quot;progs/flame.mdl&quot;);
	FireAmbient ();
	makestatic (self);
};

/*QUAKED light_flame_large_yellow (0 1 0) (-10 -10 -12) (12 12 18)
Large yellow flame ball
*/
void() light_flame_large_yellow =
{
	precache_model (&quot;progs/flame2.mdl&quot;);
	setmodel (self, &quot;progs/flame2.mdl&quot;);
	self.frame = 1;
	FireAmbient ();
	makestatic (self);
};

/*QUAKED light_flame_small_yellow (0 1 0) (-8 -8 -8) (8 8 8) START_OFF
Small yellow flame ball
*/
void() light_flame_small_yellow =
{
	precache_model (&quot;progs/flame2.mdl&quot;);
	setmodel (self, &quot;progs/flame2.mdl&quot;);
	FireAmbient ();
	makestatic (self);
};

/*QUAKED light_flame_small_white (0 1 0) (-10 -10 -40) (10 10 40) START_OFF
Small white flame ball
*/
void() light_flame_small_white =
{
	precache_model (&quot;progs/flame2.mdl&quot;);
	setmodel (self, &quot;progs/flame2.mdl&quot;);
	FireAmbient ();
	makestatic (self);
};

//============================================================================


/*QUAKED misc_fireball (0 .5 .8) (-8 -8 -8) (8 8 8)
Lava Balls
*/

void() fire_fly;
void() fire_touch;
void() misc_fireball =
{
	
	precache_model (&quot;progs/lavaball.mdl&quot;);
	self.classname = &quot;fireball&quot;;
	self.nextthink = time + (random() * 5);
	self.think = fire_fly;
	if (!self.speed)
		self.speed == 1000;
};

void() fire_fly =
{
local entity	fireball;

	fireball = spawn();
	fireball.solid = SOLID_TRIGGER;
	fireball.movetype = MOVETYPE_TOSS;
	fireball.velocity = '0 0 1000';
	fireball.velocity_x = (random() * 100) - 50;
	fireball.velocity_y = (random() * 100) - 50;
	fireball.velocity_z = self.speed + (random() * 200);
	fireball.classname = &quot;fireball&quot;;
	setmodel (fireball, &quot;progs/lavaball.mdl&quot;);
	setsize (fireball, '0 0 0', '0 0 0');
	setorigin (fireball, self.origin);
	fireball.nextthink = time + 5;
	fireball.think = SUB_Remove;
	fireball.touch = fire_touch;
	
	self.nextthink = time + (random() * 5) + 3;
	self.think = fire_fly;
};


void() fire_touch =
{
	T_Damage (other, self, self, 20);
	remove(self);
};

//============================================================================


void() barrel_explode =
{
	self.takedamage = DAMAGE_NO;
	self.classname = &quot;explo_box&quot;;
	// did say self.owner
	T_RadiusDamage (self, self, 160, world);
	sound (self, CHAN_VOICE, &quot;weapons/r_exp3.wav&quot;, 1, ATTN_NORM);
	particle (self.origin, '0 0 0', 75, 255);

	self.origin_z = self.origin_z + 32;
	BecomeExplosion ();
};



/*QUAKED misc_explobox (0 .5 .8) (0 0 0) (32 32 64)
TESTING THING
*/

void() misc_explobox =
{
	local float	oldz;
	
	self.solid = SOLID_BBOX;
	self.movetype = MOVETYPE_NONE;
	precache_model (&quot;maps/b_explob.bsp&quot;);
	setmodel (self, &quot;maps/b_explob.bsp&quot;);
	precache_sound (&quot;weapons/r_exp3.wav&quot;);
	self.health = 20;
	self.th_die = barrel_explode;
	self.takedamage = DAMAGE_AIM;

	self.origin_z = self.origin_z + 2;
	oldz = self.origin_z;
	droptofloor();
	if (oldz - self.origin_z &gt; 250)
	{
		dprint (&quot;item fell out of level at &quot;);
		dprint (vtos(self.origin));
		dprint (&quot;\n&quot;);
		remove(self);
	}
};




/*QUAKED misc_explobox2 (0 .5 .8) (0 0 0) (32 32 64)
Smaller exploding box, REGISTERED ONLY
*/

void() misc_explobox2 =
{
	local float	oldz;
	
	self.solid = SOLID_BBOX;
	self.movetype = MOVETYPE_NONE;
	precache_model2 (&quot;maps/b_exbox2.bsp&quot;);
	setmodel (self, &quot;maps/b_exbox2.bsp&quot;);
	precache_sound (&quot;weapons/r_exp3.wav&quot;);
	self.health = 20;
	self.th_die = barrel_explode;
	self.takedamage = DAMAGE_AIM;

	self.origin_z = self.origin_z + 2;
	oldz = self.origin_z;
	droptofloor();
	if (oldz - self.origin_z &gt; 250)
	{
		dprint (&quot;item fell out of level at &quot;);
		dprint (vtos(self.origin));
		dprint (&quot;\n&quot;);
		remove(self);
	}
};

//============================================================================

float SPAWNFLAG_SUPERSPIKE	= 1;
float SPAWNFLAG_LASER = 2;

void(vector org, vector vec) LaunchLaser;

void() spikeshooter_use =
{
	if (self.spawnflags &amp; SPAWNFLAG_LASER)
	{
		sound (self, CHAN_VOICE, &quot;enforcer/enfire.wav&quot;, 1, ATTN_NORM);
		LaunchLaser (self.origin, self.movedir);
	}
	else
	{
		sound (self, CHAN_VOICE, &quot;weapons/spike2.wav&quot;, 1, ATTN_NORM);
		launch_spike (self.origin, self.movedir);
		newmis.velocity = self.movedir * 500;
		if (self.spawnflags &amp; SPAWNFLAG_SUPERSPIKE)
			newmis.touch = superspike_touch;
	}
};

void() shooter_think =
{
	spikeshooter_use ();
	self.nextthink = time + self.wait;
	newmis.velocity = self.movedir * 500;
};


/*QUAKED trap_spikeshooter (0 .5 .8) (-8 -8 -8) (8 8 8) superspike laser
When triggered, fires a spike in the direction set in QuakeEd.
Laser is only for REGISTERED.
*/

void() trap_spikeshooter =
{
	SetMovedir ();
	self.use = spikeshooter_use;
	if (self.spawnflags &amp; SPAWNFLAG_LASER)
	{
		precache_model2 (&quot;progs/laser.mdl&quot;);
		
		precache_sound2 (&quot;enforcer/enfire.wav&quot;);
		precache_sound2 (&quot;enforcer/enfstop.wav&quot;);
	}
	else
		precache_sound (&quot;weapons/spike2.wav&quot;);
};


/*QUAKED trap_shooter (0 .5 .8) (-8 -8 -8) (8 8 8) superspike laser
Continuously fires spikes.
&quot;wait&quot; time between spike (1.0 default)
&quot;nextthink&quot; delay before firing first spike, so multiple shooters can be stagered.
*/
void() trap_shooter =
{
	trap_spikeshooter ();
	
	if (self.wait == 0)
		self.wait = 1;
	self.nextthink = self.nextthink + self.wait + self.ltime;
	self.think = shooter_think;
};



/*
===============================================================================


===============================================================================
*/


void() make_bubbles;
void() bubble_remove;
void() bubble_bob;

/*QUAKED air_bubbles (0 .5 .8) (-8 -8 -8) (8 8 8)

testing air bubbles
*/

void() air_bubbles =

{
	if (deathmatch)
	{
		remove (self);
		return;
	}
	precache_model (&quot;progs/s_bubble.spr&quot;);
	self.nextthink = time + 1;
	self.think = make_bubbles;
};

void() make_bubbles =
{
local entity	bubble;

	bubble = spawn();
	setmodel (bubble, &quot;progs/s_bubble.spr&quot;);
	setorigin (bubble, self.origin);
	bubble.movetype = MOVETYPE_NOCLIP;
	bubble.solid = SOLID_NOT;
	bubble.velocity = '0 0 15';
	bubble.nextthink = time + 0.5;
	bubble.think = bubble_bob;
	bubble.touch = bubble_remove;
	bubble.classname = &quot;bubble&quot;;
	bubble.frame = 0;
	bubble.cnt = 0;
	setsize (bubble, '-8 -8 -8', '8 8 8');
	self.nextthink = time + random() + 0.5;
	self.think = make_bubbles;
};

void() bubble_split =
{
local entity	bubble;
	bubble = spawn();
	setmodel (bubble, &quot;progs/s_bubble.spr&quot;);
	setorigin (bubble, self.origin);
	bubble.movetype = MOVETYPE_NOCLIP;
	bubble.solid = SOLID_NOT;
	bubble.velocity = self.velocity;
	bubble.nextthink = time + 0.5;
	bubble.think = bubble_bob;
	bubble.touch = bubble_remove;
	bubble.classname = &quot;bubble&quot;;
	bubble.frame = 1;
	bubble.cnt = 10;
	setsize (bubble, '-8 -8 -8', '8 8 8');
	self.frame = 1;
	self.cnt = 10;
	if (self.waterlevel != 3)
		remove (self);
};

void() bubble_remove =
{
	if (other.classname == self.classname)
	{
//		dprint (&quot;bump&quot;);
		return;
	}
	remove(self);
};

void() bubble_bob =
{
local float		rnd1, rnd2, rnd3;
local vector	vtmp1, modi;

	self.cnt = self.cnt + 1;
	if (self.cnt == 4)
		bubble_split();
	if (self.cnt == 20)
		remove(self);

	rnd1 = self.velocity_x + (-10 + (random() * 20));
	rnd2 = self.velocity_y + (-10 + (random() * 20));
	rnd3 = self.velocity_z + 10 + random() * 10;

	if (rnd1 &gt; 10)
		rnd1 = 5;
	if (rnd1 &lt; -10)
		rnd1 = -5;
		
	if (rnd2 &gt; 10)
		rnd2 = 5;
	if (rnd2 &lt; -10)
		rnd2 = -5;
		
	if (rnd3 &lt; 10)
		rnd3 = 15;
	if (rnd3 &gt; 30)
		rnd3 = 25;
	
	self.velocity_x = rnd1;
	self.velocity_y = rnd2;
	self.velocity_z = rnd3;
		
	self.nextthink = time + 0.5;
	self.think = bubble_bob;
};

/*~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;
~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~&lt;~&gt;~*/

/*QUAKED viewthing (0 .5 .8) (-8 -8 -8) (8 8 8)

Just for the debugging level.  Don't use
*/

void() viewthing =

{
	self.movetype = MOVETYPE_NONE;
	self.solid = SOLID_NOT;
	precache_model (&quot;progs/player.mdl&quot;);
	setmodel (self, &quot;progs/player.mdl&quot;);
};


/*
==============================================================================

SIMPLE BMODELS

==============================================================================
*/

void() func_wall_use =
{	// change to alternate textures
	self.frame = 1 - self.frame;
};

/*QUAKED func_wall (0 .5 .8) ?
This is just a solid wall if not inhibitted
*/
void() func_wall =
{
	self.angles = '0 0 0';
	self.movetype = MOVETYPE_PUSH;	// so it doesn't get pushed by anything
	self.solid = SOLID_BSP;
	self.use = func_wall_use;
	setmodel (self, self.model);
};


/*QUAKED func_illusionary (0 .5 .8) ?
A simple entity that looks solid but lets you walk through it.
*/
void() func_illusionary =

{
	self.angles = '0 0 0';
	self.movetype = MOVETYPE_NONE;
	self.solid = SOLID_NOT;
	setmodel (self, self.model);
	makestatic ();
};

/*QUAKED func_episodegate (0 .5 .8) ? E1 E2 E3 E4
This bmodel will appear if the episode has allready been completed, so players can't reenter it.
*/
void() func_episodegate =

{
	if (!(serverflags &amp; self.spawnflags))
		return;			// can still enter episode

	self.angles = '0 0 0';
	self.movetype = MOVETYPE_PUSH;	// so it doesn't get pushed by anything
	self.solid = SOLID_BSP;
	self.use = func_wall_use;
	setmodel (self, self.model);
};

/*QUAKED func_bossgate (0 .5 .8) ?
This bmodel appears unless players have all of the episode sigils.
*/
void() func_bossgate =

{
	if ( (serverflags &amp; 15) == 15)
		return;		// all episodes completed
	self.angles = '0 0 0';
	self.movetype = MOVETYPE_PUSH;	// so it doesn't get pushed by anything
	self.solid = SOLID_BSP;
	self.use = func_wall_use;
	setmodel (self, self.model);
};

//============================================================================
/*QUAKED ambient_suck_wind (0.3 0.1 0.6) (-10 -10 -8) (10 10 8)
*/
void() ambient_suck_wind =
{
	precache_sound (&quot;ambience/suck1.wav&quot;);
	ambientsound (self.origin, &quot;ambience/suck1.wav&quot;, 1, ATTN_STATIC);
};

/*QUAKED ambient_drone (0.3 0.1 0.6) (-10 -10 -8) (10 10 8)
*/
void() ambient_drone =
{
	precache_sound (&quot;ambience/drone6.wav&quot;);
	ambientsound (self.origin, &quot;ambience/drone6.wav&quot;, 0.5, ATTN_STATIC);
};

/*QUAKED ambient_flouro_buzz (0.3 0.1 0.6) (-10 -10 -8) (10 10 8)
*/
void() ambient_flouro_buzz =
{
	precache_sound (&quot;ambience/buzz1.wav&quot;);
	ambientsound (self.origin, &quot;ambience/buzz1.wav&quot;, 1, ATTN_STATIC);
};
/*QUAKED ambient_drip (0.3 0.1 0.6) (-10 -10 -8) (10 10 8)
*/
void() ambient_drip =
{
	precache_sound (&quot;ambience/drip1.wav&quot;);
	ambientsound (self.origin, &quot;ambience/drip1.wav&quot;, 0.5, ATTN_STATIC);
};
/*QUAKED ambient_comp_hum (0.3 0.1 0.6) (-10 -10 -8) (10 10 8)
*/
void() ambient_comp_hum =
{
	precache_sound (&quot;ambience/comp1.wav&quot;);
	ambientsound (self.origin, &quot;ambience/comp1.wav&quot;, 1, ATTN_STATIC);
};
/*QUAKED ambient_thunder (0.3 0.1 0.6) (-10 -10 -8) (10 10 8)
*/
void() ambient_thunder =
{
	precache_sound (&quot;ambience/thunder1.wav&quot;);
	ambientsound (self.origin, &quot;ambience/thunder1.wav&quot;, 0.5, ATTN_STATIC);
};
/*QUAKED ambient_light_buzz (0.3 0.1 0.6) (-10 -10 -8) (10 10 8)
*/
void() ambient_light_buzz =
{
	precache_sound (&quot;ambience/fl_hum1.wav&quot;);
	ambientsound (self.origin, &quot;ambience/fl_hum1.wav&quot;, 0.5, ATTN_STATIC);
};
/*QUAKED ambient_swamp1 (0.3 0.1 0.6) (-10 -10 -8) (10 10 8)
*/
void() ambient_swamp1 =
{
	precache_sound (&quot;ambience/swamp1.wav&quot;);
	ambientsound (self.origin, &quot;ambience/swamp1.wav&quot;, 0.5, ATTN_STATIC);
};
/*QUAKED ambient_swamp2 (0.3 0.1 0.6) (-10 -10 -8) (10 10 8)
*/
void() ambient_swamp2 =
{
	precache_sound (&quot;ambience/swamp2.wav&quot;);
	ambientsound (self.origin, &quot;ambience/swamp2.wav&quot;, 0.5, ATTN_STATIC);
};

//============================================================================

void() noise_think =
{
	self.nextthink = time + 0.5;
	sound (self, 1, &quot;enforcer/enfire.wav&quot;, 1, ATTN_NORM);
	sound (self, 2, &quot;enforcer/enfstop.wav&quot;, 1, ATTN_NORM);
	sound (self, 3, &quot;enforcer/sight1.wav&quot;, 1, ATTN_NORM);
	sound (self, 4, &quot;enforcer/sight2.wav&quot;, 1, ATTN_NORM);
	sound (self, 5, &quot;enforcer/sight3.wav&quot;, 1, ATTN_NORM);
	sound (self, 6, &quot;enforcer/sight4.wav&quot;, 1, ATTN_NORM);
	sound (self, 7, &quot;enforcer/pain1.wav&quot;, 1, ATTN_NORM);
};

/*QUAKED misc_noisemaker (1 0.5 0) (-10 -10 -10) (10 10 10)

For optimzation testing, starts a lot of sounds.
*/

void() misc_noisemaker =

{
	precache_sound2 (&quot;enforcer/enfire.wav&quot;);
	precache_sound2 (&quot;enforcer/enfstop.wav&quot;);
	precache_sound2 (&quot;enforcer/sight1.wav&quot;);
	precache_sound2 (&quot;enforcer/sight2.wav&quot;);
	precache_sound2 (&quot;enforcer/sight3.wav&quot;);
	precache_sound2 (&quot;enforcer/sight4.wav&quot;);
	precache_sound2 (&quot;enforcer/pain1.wav&quot;);
	precache_sound2 (&quot;enforcer/pain2.wav&quot;);
	precache_sound2 (&quot;enforcer/death1.wav&quot;);
	precache_sound2 (&quot;enforcer/idle1.wav&quot;);

	self.nextthink = time + 0.1 + random();
	self.think = noise_think;
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>jza4jgdc47voagz4wwk7ilcul6waw8s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>models.qc</title>
    <ns>0</ns>
    <id>850</id>
    <revision>
      <id>2469</id>
      <timestamp>2013-03-29T10:53:40Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for the [[Model | models]].   &lt;pre&gt; /* ===============================================================================  WORLD WEAPONS  ...&quot;</comment>
      <text xml:space="preserve" bytes="9090">This [[Quake-C]] file contains the code for the [[Model | models]].


&lt;pre&gt;
/*
===============================================================================

WORLD WEAPONS

===============================================================================
*/

$modelname g_shot
$cd id1/models/g_shot
$origin 0 0 -24
$flags 8		// client side rotate
$base base
$skin skin
$frame shot1


$modelname g_nail
$cd id1/models/g_nail
$flags 8		// client side rotate
$origin 0 0 -24
$base base
$skin skin
$frame shot1


$modelname g_nail2
$cd id1/models/g_nail2
$flags 8		// client side rotate
$origin 0 0 -24
$base base
$skin skin
$frame shot2


$modelname g_rock
$cd id1/models/g_rock
$flags 8		// client side rotate
$origin 0 0 -24
$base base
$skin skin
$frame shot1


$modelname g_rock2
$cd id1/models/g_rock2
$flags 8		// client side rotate
$origin 0 0 -24
$base base
$skin skin
$frame shot1

$modelname g_light
$cd id1/models/g_light
$flags 8		// client side rotate
$origin 0 0 -24
$base base
$skin skin
$frame shot1

/*
===============================================================================

VIEW WEAPONS

===============================================================================
*/

$modelname v_axe
$cd id1/models/v_axe
$origin 0 5 54
$base base
$skin skin
$frame frame1 frame2 frame3 frame4 frame5 frame6 frame7 frame8 frame9


$modelname v_shot
$cd id1/models/v_shot
$origin 0 0 54
$base base
$skin skin
$frame shot1 shot2 shot3 shot4 shot5 shot6 shot7


$modelname v_shot2
$cd id1/models/v_shot2
$origin 0 0 56
$base base
$skin skin
$frame shot1 shot2 shot3 shot4 shot5 shot6 shot7


$modelname v_rock2
$cd id1/models/v_rock2
$origin 0 0 54
$base base
$skin skin
$frame shot1 shot2 shot3 shot4 shot5 shot6 shot6


$modelname v_rock
$cd id1/models/v_rock
$origin 0 0 54
$base base
$skin skin
$frame shot1 shot2 shot3 shot4 shot5 shot6 shot7


$modelname v_nail2
$cd id1/models/v_nail2
$origin 0 0 54
$base base
$skin skin
$frame shot1 shot2 shot3 shot4 shot5 shot6 shot7 shot8 shot9


$modelname v_nail
$cd id1/models/v_nail
$origin 0 0 54
$base base
$skin skin
$frame shot1 shot2 shot3 shot4 shot5 shot6 shot7 shot8 shot9

$modelname v_light
$cd id1/models/v_light
$origin 0 0 54
$base base
$skin skin
$frame shot1 shot2 shot3 shot4 shot5


/*
===============================================================================

ITEMS

===============================================================================
*/

$modelname w_g_key
$cd id1/models/w_g_key
$flags 8		// client side rotate
$base base
$skin skin
$frame frame1

$modelname w_s_key
$cd id1/models/w_s_key
$flags 8		// client side rotate
$base base
$skin skin
$frame frame1

$modelname m_g_key
$cd id1/models/m_g_key
$flags 8		// client side rotate
$base base
$skin skin
$frame frame1

$modelname m_s_key
$cd id1/models/m_s_key
$flags 8		// client side rotate
$base base
$skin skin
$frame frame1

$modelname b_g_key
$cd id1/models/b_g_key
$flags 8		// client side rotate
$base base
$skin skin
$frame frame1

$modelname b_s_key
$cd id1/models/b_s_key
$flags 8		// client side rotate
$base base
$skin skin
$frame frame1


$modelname quaddama
$cd id1/models/quaddama
$flags 8		// client side rotate
$base base
$skin skin
$frame frame1

$modelname invisibl
$cd id1/models/invisibl
$flags 8		// client side rotate
$base base
$skin skin
$frame frame1

$modelname invulner
$flags 8		// client side rotate
$cd id1/models/invulner
$base base
$skin skin
$frame frame1

//modelname jetpack
//cd id1/models/jetpack
//flags 8		// client side rotate
//base base
//skin skin
//frame frame1

$modelname cube
$cd id1/models/cube
$flags 8		// client side rotate
$base base
$skin skin
$frame frame1

$modelname suit
$cd id1/models/suit
$flags 8		// client side rotate
$base base
$skin skin
$frame frame1

$modelname boots
$cd id1/models/boots
$flags 8		// client side rotate
$base base
$skin skin
$frame frame1

$modelname end1
$cd id1/models/end1
$flags 8		// client side rotate
$base base
$skin skin
$frame frame1

$modelname end2
$cd id1/models/end2
$flags 8		// client side rotate
$base base
$skin skin
$frame frame1

$modelname end3
$cd id1/models/end3
$flags 8		// client side rotate
$base base
$skin skin
$frame frame1

$modelname end4
$cd id1/models/end4
$flags 8		// client side rotate
$base base
$skin skin
$frame frame1


/*
===============================================================================

GIBS

===============================================================================
*/

$modelname gib1
$cd id1/models/gib1
$flags 4		// EF_GIB
$origin 0 0 0
$base base
$skin skin
$frame frame1


// torso
$modelname gib2
$cd id1/models/gib2
$flags 4		// EF_GIB
$origin 0 0 0
$base base
$skin skin
$frame frame1

$modelname gib3
$cd id1/models/gib3
$flags 4		// EF_GIB
$origin 0 0 0
$base base
$skin skin
$frame frame1


// heads

$modelname h_player
$cd id1/models/h_player
$flags 4		// EF_GIB
$origin 0 0 0
$base base
$skin skin
$frame frame1

$modelname h_dog
$cd id1/models/h_dog
$flags 4		// EF_GIB
$origin 0 0 0
$base base
$skin skin
$frame frame1

$modelname h_mega
$cd id1/models/h_mega
$flags 4		// EF_GIB
$origin 0 0 0
$base base
$skin skin
$frame frame1

$modelname h_guard
$cd id1/models/h_guard
$flags 4		// EF_GIB
$origin 0 0 0
$base base
$skin skin
$frame frame1

$modelname h_wizard
$cd id1/models/h_wizard
$flags 4		// EF_GIB
$origin 0 0 0
$base base
$skin skin
$frame frame1

$modelname h_knight
$cd id1/models/h_knight
$flags 4		// EF_GIB
$origin 0 0 0
$base base
$skin skin
$frame frame1

$modelname h_hellkn
$cd id1/models/h_hellkn
$flags 4		// EF_GIB
$origin 0 0 0
$base base
$skin skin
$frame frame1

$modelname h_zombie
$cd id1/models/h_zombie
$flags 4		// EF_GIB
$origin 0 0 0
$base base
$skin skin
$frame frame1

$modelname h_shams
$cd id1/models/h_shams
$flags 4		// EF_GIB
$origin 0 0 0
$base base
$skin skin
$frame frame1

$modelname h_shal
$cd id1/models/h_shal
$flags 4		// EF_GIB
$origin 0 0 0
$base base
$skin skin
$frame frame1

$modelname h_ogre
$cd id1/models/h_ogre
$flags 4		// EF_GIB
$origin 0 0 0
$base base
$skin skin
$frame frame1

$modelname h_demon
$cd id1/models/h_demon
$flags 4		// EF_GIB
$origin 0 0 0
$base base
$skin skin
$frame frame1

/*
===============================================================================

MISC

===============================================================================
*/

$modelname armor
$cd id1/models/armor
$flags 8		// client side rotate
$origin 0 0 -8
$base base
$skin skin
$skin skin2
$skin skin3
$frame armor

$modelname s_light			// shambler lightning ready
$cd id1/models/s_light
$origin 0 0 24
$base base
$skin skin
$frame	frame1 frame2 frame3

$modelname bolt3			// lightning towar bolts
$cd id1/models/bolt2
$origin 0 0 0
$base base
$scale 4
$skin skin
$frame	light

$modelname bolt2
$cd id1/models/bolt2
$origin 0 0 0
$base base
$skin skin
$frame	light

$modelname bolt
$cd id1/models/bolt
$origin 0 0 0
$base light
$skin light
$frame	light

$modelname laser
$cd id1/models/laser
$base base
$skin skin
$scale 2
$frame frame1

$modelname flame		// with torch
$cd id1/models/flame
$origin 0 0 12
$base base
$skin skin
$framegroupstart
$frame flame1	0.1
$frame flame2	0.1
$frame flame3	0.1
$frame flame4	0.1
$frame flame5	0.1
$frame flame6	0.1
$framegroupend

$modelname flame2		// standing flame, no torch
$cd id1/models/flame2
$origin 0 0 12
$base base
$skin skin
$framegroupstart
$frame flame1	0.1
$frame flame2	0.1
$frame flame3	0.1
$frame flame4	0.1
$frame flame5	0.1
$frame flame6	0.1
$framegroupend
$framegroupstart
$frame flameb1
$frame flameb2
$frame flameb3
$frame flameb4
$frame flameb5
$frame flameb6
$frame flameb7
$frame flameb8
$frame flameb9
$frame flameb10
$frame flameb11
$framegroupend

$modelname zom_gib
$cd id1/models/zom_gib
$flags 32		// EF_ZOMGIB
$base base
$skin skin
$frame frame1

$modelname eyes
$cd id1/models/eyes
$origin 0 0 -24
$base base
$skin skin
$frame frame1

$modelname spike
$cd id1/models/spike
$origin 0 0 0
$base spike
$skin skin
$frame spike

$modelname s_spike
$cd id1/models/s_spike
$origin 0 0 0
$base spike
$skin skin
$frame spike

$modelname v_spike
$cd id1/models/v_spike
$flags 128		// EF_TRACER3
$origin 0 0 0
$base base
$skin skin
$frame frame1

$modelname w_spike
$cd id1/models/w_spike
$flags 16		// EF_TRACER
$origin 0 0 0
$base base
$skin skin
$framegroupstart
$frame frame1	0.1
$frame frame2	0.1
$frame frame3	0.1
$frame frame4	0.1
$framegroupend

$modelname k_spike
$cd id1/models/k_spike
$flags 64		// EF_TRACER2
$origin 0 0 0
$base base
$skin skin
$frame frame1

$modelname backpack
$cd id1/models/backpack
$flags 8		// EF_ROTATE
$origin 0 0 0
$base base
$skin skin
$frame frame1

$modelname grenade
$cd id1/models/grenade2
$flags 2		// EF_GRENADE
$origin 0 0 0
$base base
$skin skin
$frame grenade

$modelname missile
$cd id1/models/missile
$flags	1			// EF_ROCKET
$origin 0 0 0
$base base
$skin skin
$frame missile

$modelname lavaball
$cd id1/models/lavaball
$flags	1			// EF_ROCKET
$origin 0 0 0
$base base
$skin skin
$frame frame1

$modelname teleport
$cd id1/models/teleport
$origin 0 0 24
$base base
$skin skin
$frame frame1
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>r3yuevhlv8uvsvykucty5yzfucx7gbs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>monster army</title>
    <ns>0</ns>
    <id>416</id>
    <redirect title="Grunt" />
    <revision>
      <id>705</id>
      <timestamp>2008-05-07T20:02:01Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page:   monster_army  Entity name for the [[grunt]]</comment>
      <text xml:space="preserve" bytes="45">  monster_army

Entity name for the [[grunt]]</text>
      <sha1>7vbmldv4368m2hwjhw0rstr5oenf5ca</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2560</id>
      <parentid>705</parentid>
      <timestamp>2013-03-29T14:22:09Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Monster army]] to [[monster army]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="45">  monster_army

Entity name for the [[grunt]]</text>
      <sha1>7vbmldv4368m2hwjhw0rstr5oenf5ca</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2860</id>
      <parentid>2560</parentid>
      <timestamp>2013-04-08T15:21:36Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>turned into redirect to Grunt page</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[Grunt#Entity_information]]</text>
      <sha1>aqvfz6o9rpvaugqf2ai928gzhi2lt3i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2865</id>
      <parentid>2860</parentid>
      <timestamp>2013-04-08T15:43:24Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>changed display title</comment>
      <text xml:space="preserve" bytes="69">{{DISPLAYTITLE:monster_army}}

#REDIRECT [[Grunt#Entity_information]]</text>
      <sha1>nzs34gdb3c9637b918cg1umamr5kb3z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2866</id>
      <parentid>2865</parentid>
      <timestamp>2013-04-08T15:44:13Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>fixed</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[Grunt#Entity_information]]</text>
      <sha1>aqvfz6o9rpvaugqf2ai928gzhi2lt3i</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>monster boss</title>
    <ns>0</ns>
    <id>1022</id>
    <redirect title="Chthon" />
    <revision>
      <id>2889</id>
      <timestamp>2013-04-09T09:59:06Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>Redirected page to [[Cthon#Entity information]]</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[Cthon#Entity_information]]</text>
      <sha1>h3k1la5uly2qb0z5zk32sa6b5ey98oj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2904</id>
      <parentid>2889</parentid>
      <timestamp>2013-04-09T11:59:51Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>fixed redirect link</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[Chthon#Entity_information]]</text>
      <sha1>mmmiughulomo4s2t708qmaqqocv5h3x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>monster demon1</title>
    <ns>0</ns>
    <id>425</id>
    <redirect title="Fiend" />
    <revision>
      <id>718</id>
      <timestamp>2008-05-07T20:09:21Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page:   monster_demon1 Entity name for the [[fiend]]</comment>
      <text xml:space="preserve" bytes="46">  monster_demon1
Entity name for the [[fiend]]</text>
      <sha1>fspuxkzwe54ryqonlgbynadwz5cn1ai</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2562</id>
      <parentid>718</parentid>
      <timestamp>2013-03-29T14:22:09Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Monster demon1]] to [[monster demon1]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="46">  monster_demon1
Entity name for the [[fiend]]</text>
      <sha1>fspuxkzwe54ryqonlgbynadwz5cn1ai</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2890</id>
      <parentid>2562</parentid>
      <timestamp>2013-04-09T09:59:16Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>redirect</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[Fiend#Entity_information]]</text>
      <sha1>iwykub0scp6wmhilatvzxgjg96trwrh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>monster dog</title>
    <ns>0</ns>
    <id>415</id>
    <redirect title="Rottweiler" />
    <revision>
      <id>702</id>
      <timestamp>2008-05-07T20:00:56Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: Entity name for a [[Rottweiler]]</comment>
      <text xml:space="preserve" bytes="32">Entity name for a [[Rottweiler]]</text>
      <sha1>1fzl9h2e4tprbbu9kxyantzvjh8gz7t</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>703</id>
      <parentid>702</parentid>
      <timestamp>2008-05-07T20:01:16Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="51">'''Monster_dog'''

Entity name for a [[Rottweiler]]</text>
      <sha1>6fa5o26p0fnxoz3hgntupqjhj2924zm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>704</id>
      <parentid>703</parentid>
      <timestamp>2008-05-07T20:01:29Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="47">  Monster_dog

Entity name for a [[Rottweiler]]</text>
      <sha1>n0h1zzvtxlxxbuo445cogc0p492ke48</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2564</id>
      <parentid>704</parentid>
      <timestamp>2013-03-29T14:22:10Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Monster dog]] to [[monster dog]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="47">  Monster_dog

Entity name for a [[Rottweiler]]</text>
      <sha1>n0h1zzvtxlxxbuo445cogc0p492ke48</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2886</id>
      <parentid>2564</parentid>
      <timestamp>2013-04-09T09:57:49Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>redirect</comment>
      <text xml:space="preserve" bytes="43">#REDIRECT [[Rottweiler#Entity_information]]</text>
      <sha1>2igvvug9h1qamnrs27thc807av377i6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>monster enforcer</title>
    <ns>0</ns>
    <id>417</id>
    <redirect title="Enforcer" />
    <revision>
      <id>706</id>
      <timestamp>2008-05-07T20:02:35Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page:   monster_enforcer  Entity name for the [[enforcer]]</comment>
      <text xml:space="preserve" bytes="52">  monster_enforcer

Entity name for the [[enforcer]]</text>
      <sha1>j85x202mn69yvzh3j30nrqre46kkurq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2566</id>
      <parentid>706</parentid>
      <timestamp>2013-03-29T14:22:10Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Monster enforcer]] to [[monster enforcer]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="52">  monster_enforcer

Entity name for the [[enforcer]]</text>
      <sha1>j85x202mn69yvzh3j30nrqre46kkurq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2895</id>
      <parentid>2566</parentid>
      <timestamp>2013-04-09T10:00:54Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>redirect</comment>
      <text xml:space="preserve" bytes="41">#REDIRECT [[Enforcer#Entity_information]]</text>
      <sha1>f372kkyfqlhbsbp6xnlzr0yjq5j5m3p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>monster fish</title>
    <ns>0</ns>
    <id>420</id>
    <redirect title="Rotfish" />
    <revision>
      <id>710</id>
      <timestamp>2008-05-07T20:04:10Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page:   monster_fish Entity name for the [[rotfish]]</comment>
      <text xml:space="preserve" bytes="46">  monster_fish
Entity name for the [[rotfish]]</text>
      <sha1>9ehuztb4ha06wfxdteb0qmvrvpn40yt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2568</id>
      <parentid>710</parentid>
      <timestamp>2013-03-29T14:22:10Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Monster fish]] to [[monster fish]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="46">  monster_fish
Entity name for the [[rotfish]]</text>
      <sha1>9ehuztb4ha06wfxdteb0qmvrvpn40yt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2896</id>
      <parentid>2568</parentid>
      <timestamp>2013-04-09T10:01:14Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>redirect</comment>
      <text xml:space="preserve" bytes="40">#REDIRECT [[Rotfish#Entity_information]]</text>
      <sha1>b6fbhm5osvv6o357f2f9zki4jl72iy4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>monster hell knight</title>
    <ns>0</ns>
    <id>419</id>
    <redirect title="Death Knight" />
    <revision>
      <id>708</id>
      <timestamp>2008-05-07T20:03:27Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page:   monster_hell_knight Entity name for the [[Hell Knight]]</comment>
      <text xml:space="preserve" bytes="57">  monster_hell_knight
Entity name for the [[Hell Knight]]</text>
      <sha1>4t8k5khwycvjqrwlxxg51mkvwhrwowj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>709</id>
      <parentid>708</parentid>
      <timestamp>2008-05-07T20:03:42Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="58">  monster_hell_knight
Entity name for the [[Death Knight]]</text>
      <sha1>rkjdxx6b3jemxd78gc2nittphnrhixk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2570</id>
      <parentid>709</parentid>
      <timestamp>2013-03-29T14:22:11Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Monster hell knight]] to [[monster hell knight]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="58">  monster_hell_knight
Entity name for the [[Death Knight]]</text>
      <sha1>rkjdxx6b3jemxd78gc2nittphnrhixk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2892</id>
      <parentid>2570</parentid>
      <timestamp>2013-04-09T09:59:40Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>redirect</comment>
      <text xml:space="preserve" bytes="45">#REDIRECT [[Death_Knight#Entity_information]]</text>
      <sha1>5p2ofskx5i09mjbjehnyh970uczemcy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>monster knight</title>
    <ns>0</ns>
    <id>418</id>
    <redirect title="Knight" />
    <revision>
      <id>707</id>
      <timestamp>2008-05-07T20:02:59Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page:   monster_knight  Entity name for the [[knight]]</comment>
      <text xml:space="preserve" bytes="48">  monster_knight

Entity name for the [[knight]]</text>
      <sha1>iydcx4p7bpbq700y3q69wd1xlbkxvev</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2572</id>
      <parentid>707</parentid>
      <timestamp>2013-03-29T14:22:11Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Monster knight]] to [[monster knight]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="48">  monster_knight

Entity name for the [[knight]]</text>
      <sha1>iydcx4p7bpbq700y3q69wd1xlbkxvev</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2893</id>
      <parentid>2572</parentid>
      <timestamp>2013-04-09T09:59:52Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>redirect</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[Knight#Entity_information]]</text>
      <sha1>0kgbu5w2fioaoj4gj40dyv5jaf0ibxm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>monster ogre</title>
    <ns>0</ns>
    <id>423</id>
    <redirect title="Ogre" />
    <revision>
      <id>713</id>
      <timestamp>2008-05-07T20:05:33Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page:   monster_ogre  Entity name for the regular [[ogre]]</comment>
      <text xml:space="preserve" bytes="52">  monster_ogre

Entity name for the regular [[ogre]]</text>
      <sha1>0c3k0rfrvapmghnstdiq42t4bj3ze80</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>714</id>
      <parentid>713</parentid>
      <timestamp>2008-05-07T20:05:58Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="89">  monster_ogre

Entity name for the regular [[ogre]]

Also see: [[monster_ogre_marksman]]</text>
      <sha1>af64i18nze8g6i60mw6yy0bq3gz661e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2574</id>
      <parentid>714</parentid>
      <timestamp>2013-03-29T14:22:12Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Monster ogre]] to [[monster ogre]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="89">  monster_ogre

Entity name for the regular [[ogre]]

Also see: [[monster_ogre_marksman]]</text>
      <sha1>af64i18nze8g6i60mw6yy0bq3gz661e</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2887</id>
      <parentid>2574</parentid>
      <timestamp>2013-04-09T09:58:18Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>redirect</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[Ogre#Entity_information]]</text>
      <sha1>7le7f7y7tivfvfknic7310hqvz35l02</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>monster ogre marksman</title>
    <ns>0</ns>
    <id>424</id>
    <redirect title="Ogre" />
    <revision>
      <id>715</id>
      <timestamp>2008-05-07T20:06:47Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page:   monster_ogre_marksman  Entity name for the [[ogre]], but with increased accuracy over long distances  Also see: [[monster_ogre]]</comment>
      <text xml:space="preserve" bytes="130">  monster_ogre_marksman

Entity name for the [[ogre]], but with increased accuracy over long distances

Also see: [[monster_ogre]]</text>
      <sha1>ir51jpsz4re5f18ly461b3ydykklh5g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2576</id>
      <parentid>715</parentid>
      <timestamp>2013-03-29T14:22:13Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Monster ogre marksman]] to [[monster ogre marksman]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="130">  monster_ogre_marksman

Entity name for the [[ogre]], but with increased accuracy over long distances

Also see: [[monster_ogre]]</text>
      <sha1>ir51jpsz4re5f18ly461b3ydykklh5g</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2678</id>
      <parentid>2576</parentid>
      <timestamp>2013-03-29T17:36:14Z</timestamp>
      <contributor>
        <username>Rj</username>
        <id>39</id>
      </contributor>
      <comment>old info was wrong</comment>
      <text xml:space="preserve" bytes="279">  monster_ogre_marksman

Duplicate entity name for the [[Ogre]], behaves exactly like [[monster_ogre]] except that the ogre sight sound will not play upon the monster being awoken. The two classnames are also treated as different monsters for the purposes of monster in-fighting.</text>
      <sha1>6n7gnsivoub85455y4uzhhwl6sgybj4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2888</id>
      <parentid>2678</parentid>
      <timestamp>2013-04-09T09:58:36Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>redirect</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[Ogre#Entity_information]]</text>
      <sha1>7le7f7y7tivfvfknic7310hqvz35l02</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>monster oldone</title>
    <ns>0</ns>
    <id>429</id>
    <redirect title="Shub-Niggurath" />
    <revision>
      <id>741</id>
      <timestamp>2008-05-08T13:53:49Z</timestamp>
      <contributor>
        <ip>198.151.13.8</ip>
      </contributor>
      <comment>New page:   monster_oldone  Entity name for Shub-Niggurath</comment>
      <text xml:space="preserve" bytes="48">  monster_oldone

Entity name for Shub-Niggurath</text>
      <sha1>ie5w39bcinw9vis666qej0wu28n532q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>742</id>
      <parentid>741</parentid>
      <timestamp>2008-05-08T13:53:57Z</timestamp>
      <contributor>
        <ip>198.151.13.8</ip>
      </contributor>
      <text xml:space="preserve" bytes="52">  monster_oldone

Entity name for [[Shub-Niggurath]]</text>
      <sha1>iazs3moilf3s33foi6eocaq9k437wmp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2578</id>
      <parentid>742</parentid>
      <timestamp>2013-03-29T14:22:13Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Monster oldone]] to [[monster oldone]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="52">  monster_oldone

Entity name for [[Shub-Niggurath]]</text>
      <sha1>iazs3moilf3s33foi6eocaq9k437wmp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2897</id>
      <parentid>2578</parentid>
      <timestamp>2013-04-09T10:01:30Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>redirect</comment>
      <text xml:space="preserve" bytes="47">#REDIRECT [[Shub-Niggurath#Entity_information]]</text>
      <sha1>jhvv3ihe5b82mv4osw5cfn47o9mhvk8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>monster shalrath</title>
    <ns>0</ns>
    <id>867</id>
    <redirect title="Vore" />
    <revision>
      <id>2495</id>
      <timestamp>2013-03-29T12:53:40Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>testing! if conditional appears to not work...</comment>
      <text xml:space="preserve" bytes="363">{{Infobox_entity
| classname = monster_shalrath
| commonname = [[Vore]]
| type = point
| class = monster
| dimensions = 64 x 64 x 72
| quakec = [[shalrath.qc]]
| precaches =
* progs/shalrath.mdl
* progs/h_shal.mdl
* progs/v_spike.mdl
* shalrath/attack.wav
* shalrath/attack2.wav
* shalrath/death.wav
* shalrath/idle.wav
* shalrath/pain.wav
* shalrath/sight.wav
}}</text>
      <sha1>j7o2q2z1ykklru2tal32uu5lxdhh1u4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2498</id>
      <parentid>2495</parentid>
      <timestamp>2013-03-29T13:31:30Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="2043">{{Infobox_entity
| classname = monster_shalrath
| commonname = [[Vore]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 72
| quakec = [[shalrath.qc]]
| precaches =
* progs/shalrath.mdl
* progs/h_shal.mdl
* progs/v_spike.mdl
* shalrath/attack.wav
* shalrath/attack2.wav
* shalrath/death.wav
* shalrath/idle.wav
* shalrath/pain.wav
* shalrath/sight.wav
}}

'''monster_shalrath''' is the entity for placing [[Vore|Vores]] in a level.

== Usage ==
Vores are best placed where there is not too much easy cover, so that the player has to move around, or even run away to avoid getting hit by the homing bombs the Vore fires. Giving the player too much cover can make Vores boring to fight, as the player can safely take potshots without ever really having to worry about Voreballs hitting them.

Vores actually work quite well in open areas with little cover, as it forces the player to run from the Voreballs, and can lead them to drawing the Voreballs into other enemies to create [[Monster_infighting|monster infighting]] situations.

== Attributes ==


=== Keys ===
{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''targetname'' || The name of the entity. The Vore will wake up and follow the player when triggered, regardless of whether or not it has detected them. 
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity that will be triggered when the Vore dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''keyvaluename'' || Additional keyvalues and descriptions can be appended in this format.
|}

===Spawnflags===
The button supports [[Entity#Spawnflags|standard spawnflags]] for difficulty and deathmatch presence.
{| class=&quot;wikitable collapsible collapsed&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
It also has the following additional flags enabled:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name !! Description
|-
| flag # || Some Name ||| Description of spawnflag
|}
[[Category:Quake entities]]</text>
      <sha1>lqqnk0vkk869v83f1sbtq1g8gxxzytr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2499</id>
      <parentid>2498</parentid>
      <timestamp>2013-03-29T14:04:46Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="2823">{{DISPLAYTITLE:monster_shalrath}}

{{Infobox_entity
| classname = monster_shalrath
| commonname = [[Vore]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 72
| quakec = [[shalrath.qc]]
| precaches =
* progs/shalrath.mdl
* progs/h_shal.mdl
* progs/v_spike.mdl
* shalrath/attack.wav
* shalrath/attack2.wav
* shalrath/death.wav
* shalrath/idle.wav
* shalrath/pain.wav
* shalrath/sight.wav
}}

'''monster_shalrath''' is the entity for placing [[Vore|Vores]] in a level.

== Usage ==
Vores are best placed where there is not too much easy cover, so that the player has to move around, or even run away to avoid getting hit by the homing bombs the Vore fires. Giving the player too much cover can make Vores boring to fight, as the player can safely take potshots without ever really having to worry about Voreballs hitting them.

Vores actually work quite well in open areas with little cover, as it forces the player to run from the Voreballs, and can lead them to drawing the Voreballs into other enemies to create [[Monster_infighting|monster infighting]] situations.

== Attributes ==


=== Keys ===
{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''targetname'' || The name of the entity. The Vore will wake up and follow the player when triggered, regardless of whether or not it has detected them. 
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity that will be triggered when the Vore dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''keyvaluename'' || Additional keyvalues and descriptions can be appended in this format.
|}

===Spawnflags===
The button supports [[Entity#Spawnflags|standard spawnflags]] for difficulty and deathmatch presence.
{| class=&quot;wikitable collapsible collapsed&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
It also has the following additional flags enabled:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name !! Description
|-
| flag # || Some Name ||| Description of spawnflag
|}

==Definitions==

===FGD Definition===
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-32 -32 -24, 32 32 48) model(&quot;:progs/shalrath.mdl&quot;)
    = monster_shalrath : &quot;Vore&quot; []
&lt;/pre&gt;
===DEF Definition===
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_shalrath (1 0 0) (-32 -32 -24) (32 32 48) AMBUSH
Vore (Shalrath), 400 health points.

Flags:
&quot;ambush&quot; -  the monster will only wake up on really seeing the player,
            not another monster getting angry
*/
&lt;/pre&gt;

[[Category:Quake entities]]</text>
      <sha1>67i5e3lvxvex1q1tnhnuwcrjuudaorq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2500</id>
      <parentid>2499</parentid>
      <timestamp>2013-03-29T14:07:04Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>this page is still just an example. Testing various things.</comment>
      <text xml:space="preserve" bytes="2858">{{DISPLAYTITLE:monster_shalrath}}

{{Infobox_entity
| classname = monster_shalrath
| commonname = [[Vore]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 72
| quakec = [[shalrath.qc]]
| precaches =
* progs/shalrath.mdl
* progs/h_shal.mdl
* progs/v_spike.mdl
* shalrath/attack.wav
* shalrath/attack2.wav
* shalrath/death.wav
* shalrath/idle.wav
* shalrath/pain.wav
* shalrath/sight.wav
}}

'''monster_shalrath''' is the entity for placing [[Vore|Vores]] in a level.

== Usage ==
Vores are best placed where there is not too much easy cover, so that the player has to move around, or even run away to avoid getting hit by the homing bombs the Vore fires. Giving the player too much cover can make Vores boring to fight, as the player can safely take potshots without ever really having to worry about Voreballs hitting them.

Vores actually work quite well in open areas with little cover, as it forces the player to run from the Voreballs, and can lead them to drawing the Voreballs into other enemies to create [[Monster_infighting|monster infighting]] situations.

== Attributes ==


=== Keys ===
{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''targetname'' || The name of the entity. The Vore will wake up and follow the player when triggered, regardless of whether or not it has detected them. 
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity that will be triggered when the Vore dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''keyvaluename'' || Additional keyvalues and descriptions can be appended in this format.
|}

===Spawnflags===
The button supports [[Entity#Spawnflags|standard spawnflags]] for difficulty and deathmatch presence.
{| class=&quot;wikitable collapsible collapsed&quot;
|-
! Flag !! Common Name
|-
| 256 || Not on Easy
|-
| 512 || Not on Normal
|-
| 1024 || Not on Hard
|-
| 2048 || Not in Deathmatch
|}
It also has the following additional flags enabled:
{| class=&quot;wikitable&quot;
|-
! Flag !! Common Name !! Description
|-
| 1 || Ambush ||| The Vore will only get angry if it sees the player or is triggered.
|}

==Definitions==

===FGD Definition===
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-32 -32 -24, 32 32 48) model(&quot;:progs/shalrath.mdl&quot;)
    = monster_shalrath : &quot;Vore&quot; []
&lt;/pre&gt;
===DEF Definition===
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_shalrath (1 0 0) (-32 -32 -24) (32 32 48) AMBUSH
Vore (Shalrath), 400 health points.

Flags:
&quot;ambush&quot; -  the monster will only wake up on really seeing the player,
            not another monster getting angry
*/
&lt;/pre&gt;

[[Category:Quake entities]]</text>
      <sha1>fs6fmobgbrz6vphju5ef3me8v3gtnri</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2663</id>
      <parentid>2500</parentid>
      <timestamp>2013-03-29T14:30:58Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>/* Spawnflags */</comment>
      <text xml:space="preserve" bytes="2783">{{DISPLAYTITLE:monster_shalrath}}

{{Infobox_entity
| classname = monster_shalrath
| commonname = [[Vore]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 72
| quakec = [[shalrath.qc]]
| precaches =
* progs/shalrath.mdl
* progs/h_shal.mdl
* progs/v_spike.mdl
* shalrath/attack.wav
* shalrath/attack2.wav
* shalrath/death.wav
* shalrath/idle.wav
* shalrath/pain.wav
* shalrath/sight.wav
}}

'''monster_shalrath''' is the entity for placing [[Vore|Vores]] in a level.

== Usage ==
Vores are best placed where there is not too much easy cover, so that the player has to move around, or even run away to avoid getting hit by the homing bombs the Vore fires. Giving the player too much cover can make Vores boring to fight, as the player can safely take potshots without ever really having to worry about Voreballs hitting them.

Vores actually work quite well in open areas with little cover, as it forces the player to run from the Voreballs, and can lead them to drawing the Voreballs into other enemies to create [[Monster_infighting|monster infighting]] situations.

== Attributes ==


=== Keys ===
{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''targetname'' || The name of the entity. The Vore will wake up and follow the player when triggered, regardless of whether or not it has detected them. 
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity that will be triggered when the Vore dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''keyvaluename'' || Additional keyvalues and descriptions can be appended in this format.
|}

===Spawnflags===
The monster_vore entity supports the following [[Entity#Spawnflags|spawnflags]]
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Vore will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Vore
}}

==Definitions==

===FGD Definition===
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-32 -32 -24, 32 32 48) model(&quot;:progs/shalrath.mdl&quot;)
    = monster_shalrath : &quot;Vore&quot; []
&lt;/pre&gt;
===DEF Definition===
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_shalrath (1 0 0) (-32 -32 -24) (32 32 48) AMBUSH
Vore (Shalrath), 400 health points.

Flags:
&quot;ambush&quot; -  the monster will only wake up on really seeing the player,
            not another monster getting angry
*/
&lt;/pre&gt;

[[Category:Quake entities]]</text>
      <sha1>otfxnqvu6dwiw2pes4yvuvq2b8m9cet</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2665</id>
      <parentid>2663</parentid>
      <timestamp>2013-03-29T14:34:48Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>/* Keys */</comment>
      <text xml:space="preserve" bytes="2724">{{DISPLAYTITLE:monster_shalrath}}

{{Infobox_entity
| classname = monster_shalrath
| commonname = [[Vore]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 72
| quakec = [[shalrath.qc]]
| precaches =
* progs/shalrath.mdl
* progs/h_shal.mdl
* progs/v_spike.mdl
* shalrath/attack.wav
* shalrath/attack2.wav
* shalrath/death.wav
* shalrath/idle.wav
* shalrath/pain.wav
* shalrath/sight.wav
}}

'''monster_shalrath''' is the entity for placing [[Vore|Vores]] in a level.

== Usage ==
Vores are best placed where there is not too much easy cover, so that the player has to move around, or even run away to avoid getting hit by the homing bombs the Vore fires. Giving the player too much cover can make Vores boring to fight, as the player can safely take potshots without ever really having to worry about Voreballs hitting them.

Vores actually work quite well in open areas with little cover, as it forces the player to run from the Voreballs, and can lead them to drawing the Voreballs into other enemies to create [[Monster_infighting|monster infighting]] situations.

== Attributes ==


=== Keys ===
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Vore. When triggered, the Vore will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Vore dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Vore dies.
|}

===Spawnflags===
The monster_vore entity supports the following [[Entity#Spawnflags|spawnflags]]
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Vore will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Vore
}}

==Definitions==

===FGD Definition===
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-32 -32 -24, 32 32 48) model(&quot;:progs/shalrath.mdl&quot;)
    = monster_shalrath : &quot;Vore&quot; []
&lt;/pre&gt;
===DEF Definition===
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_shalrath (1 0 0) (-32 -32 -24) (32 32 48) AMBUSH
Vore (Shalrath), 400 health points.

Flags:
&quot;ambush&quot; -  the monster will only wake up on really seeing the player,
            not another monster getting angry
*/
&lt;/pre&gt;

[[Category:Quake entities]]</text>
      <sha1>0hgh8t08msnj1fckmus6cbe52vtsi1z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2666</id>
      <parentid>2665</parentid>
      <timestamp>2013-03-29T14:35:13Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>/* Spawnflags */</comment>
      <text xml:space="preserve" bytes="2725">{{DISPLAYTITLE:monster_shalrath}}

{{Infobox_entity
| classname = monster_shalrath
| commonname = [[Vore]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 72
| quakec = [[shalrath.qc]]
| precaches =
* progs/shalrath.mdl
* progs/h_shal.mdl
* progs/v_spike.mdl
* shalrath/attack.wav
* shalrath/attack2.wav
* shalrath/death.wav
* shalrath/idle.wav
* shalrath/pain.wav
* shalrath/sight.wav
}}

'''monster_shalrath''' is the entity for placing [[Vore|Vores]] in a level.

== Usage ==
Vores are best placed where there is not too much easy cover, so that the player has to move around, or even run away to avoid getting hit by the homing bombs the Vore fires. Giving the player too much cover can make Vores boring to fight, as the player can safely take potshots without ever really having to worry about Voreballs hitting them.

Vores actually work quite well in open areas with little cover, as it forces the player to run from the Voreballs, and can lead them to drawing the Voreballs into other enemies to create [[Monster_infighting|monster infighting]] situations.

== Attributes ==


=== Keys ===
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Vore. When triggered, the Vore will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Vore dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Vore dies.
|}

===Spawnflags===
The monster_vore entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Vore will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Vore
}}

==Definitions==

===FGD Definition===
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-32 -32 -24, 32 32 48) model(&quot;:progs/shalrath.mdl&quot;)
    = monster_shalrath : &quot;Vore&quot; []
&lt;/pre&gt;
===DEF Definition===
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_shalrath (1 0 0) (-32 -32 -24) (32 32 48) AMBUSH
Vore (Shalrath), 400 health points.

Flags:
&quot;ambush&quot; -  the monster will only wake up on really seeing the player,
            not another monster getting angry
*/
&lt;/pre&gt;

[[Category:Quake entities]]</text>
      <sha1>rj9sw23i0x42cx27pvizzvusv5va5rh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2767</id>
      <parentid>2666</parentid>
      <timestamp>2013-04-06T10:43:08Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>got rid of list for precaches</comment>
      <text xml:space="preserve" bytes="2743">{{DISPLAYTITLE:monster_shalrath}}

{{Infobox_entity
| classname = monster_shalrath
| commonname = [[Vore]]
| type = point
| class = [[Monster (entity class)|monster]]
| dimensions = 64 x 64 x 72
| quakec = [[shalrath.qc]]
| precaches =
progs/shalrath.mdl&lt;br&gt;
progs/h_shal.mdl&lt;br&gt;
progs/v_spike.mdl&lt;br&gt;
shalrath/attack.wav&lt;br&gt;
shalrath/attack2.wav&lt;br&gt;
shalrath/death.wav&lt;br&gt;
shalrath/idle.wav&lt;br&gt;
shalrath/pain.wav&lt;br&gt;
shalrath/sight.wav&lt;br&gt;
}}

'''monster_shalrath''' is the entity for placing [[Vore|Vores]] in a level.

== Usage ==
Vores are best placed where there is not too much easy cover, so that the player has to move around, or even run away to avoid getting hit by the homing bombs the Vore fires. Giving the player too much cover can make Vores boring to fight, as the player can safely take potshots without ever really having to worry about Voreballs hitting them.

Vores actually work quite well in open areas with little cover, as it forces the player to run from the Voreballs, and can lead them to drawing the Voreballs into other enemies to create [[Monster_infighting|monster infighting]] situations.

== Attributes ==


=== Keys ===
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;100px&quot; | ''targetname'' || The targetname of the Vore. When triggered, the Vore will wake up if inactive.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''target'' || The targetname of the entity to be triggered when the Vore dies.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''killtarget'' || The targetname of the entity to be removed when the Vore dies.
|}

===Spawnflags===
The monster_vore entity supports the following [[Entity#Spawnflags|spawnflags]]:
{| class=&quot;wikitable&quot; width=&quot;100%&quot;
! width=&quot;50&quot; | Flag
! width=&quot;150&quot; | Common Name
! Description
|-
| 1
| Ambush
| The Vore will not wake up from seeing other monsters wake up or hearing sounds.
|}

It also supports the standard spawnflags for difficulty and deathmatch presence.
{{Template:Mode_spawnflags
| entity = The Vore
}}

==Definitions==

===FGD Definition===
This is the format used by [[TrenchBroom]] and [[Worldcraft]]. Note that the model(...) parameter is not supported by Worldcraft. This does not include the Monster base class definition, which is also required.
&lt;pre&gt;
@PointClass base(Monster) size(-32 -32 -24, 32 32 48) model(&quot;:progs/shalrath.mdl&quot;)
    = monster_shalrath : &quot;Vore&quot; []
&lt;/pre&gt;
===DEF Definition===
This is the definition format used for most old Quake editors, including the original [[QuakeEd]].
&lt;pre&gt;
/*QUAKED monster_shalrath (1 0 0) (-32 -32 -24) (32 32 48) AMBUSH
Vore (Shalrath), 400 health points.

Flags:
&quot;ambush&quot; -  the monster will only wake up on really seeing the player,
            not another monster getting angry
*/
&lt;/pre&gt;

[[Category:Quake entities]]</text>
      <sha1>4dcgf6pl77ilgkc76zpps7z55oj66vt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2813</id>
      <parentid>2767</parentid>
      <timestamp>2013-04-08T12:12:05Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>changing page to redirect to Vore page</comment>
      <text xml:space="preserve" bytes="37">#REDIRECT [[Vore#Entity_information]]</text>
      <sha1>edq8vh7x4bz1oydjyelndjtvmlz9q0d</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>monster shambler</title>
    <ns>0</ns>
    <id>427</id>
    <redirect title="Shambler" />
    <revision>
      <id>720</id>
      <timestamp>2008-05-07T20:10:18Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page:   monster_shambler Entity name for the [[shambler]]</comment>
      <text xml:space="preserve" bytes="51">  monster_shambler
Entity name for the [[shambler]]</text>
      <sha1>lk7wwc8qy7w9nhaws3dwy3bt3ux07k2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2580</id>
      <parentid>720</parentid>
      <timestamp>2013-03-29T14:22:13Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Monster shambler]] to [[monster shambler]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="51">  monster_shambler
Entity name for the [[shambler]]</text>
      <sha1>lk7wwc8qy7w9nhaws3dwy3bt3ux07k2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2862</id>
      <parentid>2580</parentid>
      <timestamp>2013-04-08T15:30:45Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>Redirected page to [[Shambler#Entity information]]</comment>
      <text xml:space="preserve" bytes="41">#REDIRECT [[Shambler#Entity_information]]</text>
      <sha1>ant2g3kpgppn748jmz2xxxri21snbl9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>monster tarbaby</title>
    <ns>0</ns>
    <id>1023</id>
    <redirect title="Spawn" />
    <revision>
      <id>2894</id>
      <timestamp>2013-04-09T10:00:30Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>redirect</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[Spawn#Entity_information]]</text>
      <sha1>0nxpx6brd1uw0tenflhk75n5s3nmvwm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>monster wizard</title>
    <ns>0</ns>
    <id>422</id>
    <redirect title="Scrag" />
    <revision>
      <id>712</id>
      <timestamp>2008-05-07T20:04:57Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page:   monster_wizard Entity name for the [[scrag]]</comment>
      <text xml:space="preserve" bytes="46">  monster_wizard
Entity name for the [[scrag]]</text>
      <sha1>htusrsj7ecnvwaprh11vguvjfvf1wno</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2582</id>
      <parentid>712</parentid>
      <timestamp>2013-03-29T14:22:14Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Monster wizard]] to [[monster wizard]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="46">  monster_wizard
Entity name for the [[scrag]]</text>
      <sha1>htusrsj7ecnvwaprh11vguvjfvf1wno</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2891</id>
      <parentid>2582</parentid>
      <timestamp>2013-04-09T09:59:26Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>redirect</comment>
      <text xml:space="preserve" bytes="38">#REDIRECT [[Scrag#Entity_information]]</text>
      <sha1>sxm611q59zfq8iud9kb25x7gxav2c4f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>monster zombie</title>
    <ns>0</ns>
    <id>421</id>
    <redirect title="Zombie" />
    <revision>
      <id>711</id>
      <timestamp>2008-05-07T20:04:31Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page:   monster_zombie Entity name for the [[zombie]]</comment>
      <text xml:space="preserve" bytes="47">  monster_zombie
Entity name for the [[zombie]]</text>
      <sha1>k4an0mj5z3g0krb7mbu477h7pgm5aee</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2584</id>
      <parentid>711</parentid>
      <timestamp>2013-03-29T14:22:14Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Monster zombie]] to [[monster zombie]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="47">  monster_zombie
Entity name for the [[zombie]]</text>
      <sha1>k4an0mj5z3g0krb7mbu477h7pgm5aee</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2867</id>
      <parentid>2584</parentid>
      <timestamp>2013-04-08T15:44:33Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>changed to redirect</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[Zombie#Entity_information]]</text>
      <sha1>s4zbn0ec8eqrnw3ngi3hbxibytrilob</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>monsters.qc</title>
    <ns>0</ns>
    <id>851</id>
    <revision>
      <id>2472</id>
      <timestamp>2013-03-29T11:09:50Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for the initial [[Monsters | monster]] placement and death behavior.  It includes a [[Bugs | bug]] that causes [[Rotfish]] to be counte...&quot;</comment>
      <text xml:space="preserve" bytes="5166">This [[Quake-C]] file contains the code for the initial [[Monsters | monster]] placement and death behavior.

It includes a [[Bugs | bug]] that causes [[Rotfish]] to be counted twice in the map statistics. This is due to the duplicate line &lt;code&gt; total_monsters = total_monsters + 1;&lt;/code&gt; in the &lt;code&gt;swimmonster_start_go&lt;/code&gt; function.


&lt;pre&gt;
/* ALL MONSTERS SHOULD BE 1 0 0 IN COLOR */

// name =[framenum,	nexttime, nextthink] {code}
// expands to:
// name ()
// {
//		self.frame=framenum;
//		self.nextthink = time + nexttime;
//		self.think = nextthink
//		&lt;code&gt;
// };


/*
================
monster_use

Using a monster makes it angry at the current activator
================
*/
void() monster_use =
{
	if (self.enemy)
		return;
	if (self.health &lt;= 0)
		return;
	if (activator.items &amp; IT_INVISIBILITY)
		return;
	if (activator.flags &amp; FL_NOTARGET)
		return;
	if (activator.classname != &quot;player&quot;)
		return;
	
// delay reaction so if the monster is teleported, its sound is still
// heard
	self.enemy = activator;
	self.nextthink = time + 0.1;
	self.think = FoundTarget;
};

/*
================
monster_death_use

When a mosnter dies, it fires all of its targets with the current
enemy as activator.
================
*/
void() monster_death_use =
{
	local entity 	ent, otemp, stemp;

// fall to ground
	if (self.flags &amp; FL_FLY)
		self.flags = self.flags - FL_FLY;
	if (self.flags &amp; FL_SWIM)
		self.flags = self.flags - FL_SWIM;

	if (!self.target)
		return;

	activator = self.enemy;
	SUB_UseTargets ();
};


//============================================================================

void() walkmonster_start_go =
{
local string	stemp;
local entity	etemp;

	self.origin_z = self.origin_z + 1;	// raise off floor a bit
	droptofloor();
	
	if (!walkmove(0,0))
	{
		dprint (&quot;walkmonster in wall at: &quot;);
		dprint (vtos(self.origin));
		dprint (&quot;\n&quot;);
	}
	
	self.takedamage = DAMAGE_AIM;

	self.ideal_yaw = self.angles * '0 1 0';
	if (!self.yaw_speed)
		self.yaw_speed = 20;
	self.view_ofs = '0 0 25';
	self.use = monster_use;
	
	self.flags = self.flags | FL_MONSTER;
	
	if (self.target)
	{
		self.goalentity = self.movetarget = find(world, targetname, self.target);
		self.ideal_yaw = vectoyaw(self.goalentity.origin - self.origin);
		if (!self.movetarget)
		{
			dprint (&quot;Monster can't find target at &quot;);
			dprint (vtos(self.origin));
			dprint (&quot;\n&quot;);
		}
// this used to be an objerror
		if (self.movetarget.classname == &quot;path_corner&quot;)
			self.th_walk ();
		else
			self.pausetime = 99999999;
			self.th_stand ();
	}
	else
	{
		self.pausetime = 99999999;
		self.th_stand ();
	}

// spread think times so they don't all happen at same time
	self.nextthink = self.nextthink + random()*0.5;
};


void() walkmonster_start =
{
// delay drop to floor to make sure all doors have been spawned
// spread think times so they don't all happen at same time
	self.nextthink = self.nextthink + random()*0.5;
	self.think = walkmonster_start_go;
	total_monsters = total_monsters + 1;
};



void() flymonster_start_go =
{
	self.takedamage = DAMAGE_AIM;

	self.ideal_yaw = self.angles * '0 1 0';
	if (!self.yaw_speed)
		self.yaw_speed = 10;
	self.view_ofs = '0 0 25';
	self.use = monster_use;

	self.flags = self.flags | FL_FLY;
	self.flags = self.flags | FL_MONSTER;

	if (!walkmove(0,0))
	{
		dprint (&quot;flymonster in wall at: &quot;);
		dprint (vtos(self.origin));
		dprint (&quot;\n&quot;);
	}

	if (self.target)
	{
		self.goalentity = self.movetarget = find(world, targetname, self.target);
		if (!self.movetarget)
		{
			dprint (&quot;Monster can't find target at &quot;);
			dprint (vtos(self.origin));
			dprint (&quot;\n&quot;);
		}
// this used to be an objerror
		if (self.movetarget.classname == &quot;path_corner&quot;)
			self.th_walk ();
		else
			self.pausetime = 99999999;
			self.th_stand ();
	}
	else
	{
		self.pausetime = 99999999;
		self.th_stand ();
	}
};

void() flymonster_start =
{
// spread think times so they don't all happen at same time
	self.nextthink = self.nextthink + random()*0.5;
	self.think = flymonster_start_go;
	total_monsters = total_monsters + 1;
};


void() swimmonster_start_go =
{
	if (deathmatch)
	{
		remove(self);
		return;
	}

	self.takedamage = DAMAGE_AIM;
	total_monsters = total_monsters + 1;

	self.ideal_yaw = self.angles * '0 1 0';
	if (!self.yaw_speed)
		self.yaw_speed = 10;
	self.view_ofs = '0 0 10';
	self.use = monster_use;
	
	self.flags = self.flags | FL_SWIM;
	self.flags = self.flags | FL_MONSTER;

	if (self.target)
	{
		self.goalentity = self.movetarget = find(world, targetname, self.target);
		if (!self.movetarget)
		{
			dprint (&quot;Monster can't find target at &quot;);
			dprint (vtos(self.origin));
			dprint (&quot;\n&quot;);
		}
// this used to be an objerror
		self.ideal_yaw = vectoyaw(self.goalentity.origin - self.origin);
		self.th_walk ();
	}
	else
	{
		self.pausetime = 99999999;
		self.th_stand ();
	}

// spread think times so they don't all happen at same time
	self.nextthink = self.nextthink + random()*0.5;
};

void() swimmonster_start =
{
// spread think times so they don't all happen at same time
	self.nextthink = self.nextthink + random()*0.5;
	self.think = swimmonster_start_go;
	total_monsters = total_monsters + 1;
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>ti9v9xpoqkkiqh5flmoor7j4c6wydha</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>movetogoal</title>
    <ns>0</ns>
    <id>800</id>
    <revision>
      <id>2344</id>
      <timestamp>2013-03-27T02:14:34Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;====Syntax:==== &lt;code&gt;void movetogoal(float dist)&lt;/code&gt;  This is the primary means of navigation available to monsters.  It is a very basic form of navigation consisting of o...&quot;</comment>
      <text xml:space="preserve" bytes="1051">====Syntax:====
&lt;code&gt;void movetogoal(float dist)&lt;/code&gt;

This is the primary means of navigation available to monsters.  It is a very basic form of navigation consisting of only 2 behaviours:
1. Move straight toward the current''' .goalentity'''
2. If blocked, move in a random direction for a random period of time.
If the monster has the '''FL_FLY''' flag set, it will try to stay slightly above the height of the entity in the '''.enemy''' field.
====Parameters:====
:&lt;code&gt;dist&lt;/code&gt; - How far to 'step'.
====Returns:====
:void
====Other Details:====
Please note that the movement target and the height target are set via ''different'' fields.  Setting '''.goalentity''' but not '''.enemy''' will result in a monster not adjusting it's height.
However, merely setting '''.enemy''' to an entity is not enough for movetogoal to match heights with it.  The entity in the '''.enemy''' field must have a bounding box (it cannot be a point entity) and it must also have a '''.movetype''' other than '''MOVETYPE_NONE''').


[[Category:QuakeC Function]]</text>
      <sha1>do7uzwrlyeb1j7enxf587b67prqujcg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>nextent</title>
    <ns>0</ns>
    <id>439</id>
    <revision>
      <id>766</id>
      <timestamp>2008-05-08T14:31:14Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page:  == Function: nextent ==  entity nextent(entity e)  Returns entity that is just after e in the entity list. Useful to browse the list of entities, because it skips the undefined ones. Func...</comment>
      <text xml:space="preserve" bytes="772">
== Function: nextent ==

entity nextent(entity e)

Returns entity that is just after e in the entity list.
Useful to browse the list of entities, because it skips the undefined ones.
Function: find

entity find (entity start, .string field, string match)
	start = begining of list to search (world, for the begining of list)
	field = entity field that must be examined (ex: targetname)
	match = value that must be matched (ex: other.target)
	returns the entity found, or world if no entity was found.

Searches the server entity list beginning at start, looking for an entity that has entity.field = match.

Example: find the first player entity

 e = find( world, classname, &quot;player&quot;);

Take care that field is a name of an entity field, without dot, and without quotes.</text>
      <sha1>2vrz8yktr3tanz1wkaxtranezj867mr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>767</id>
      <parentid>766</parentid>
      <timestamp>2008-05-08T14:31:34Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="779">== Function: nextent ==

entity nextent(entity e)

Returns entity that is just after e in the entity list.
Useful to browse the list of entities, because it skips the undefined ones.
Function: find

entity find (entity start, .string field, string match)

  start = begining of list to search (world, for the begining of list)

  field = entity field that must be examined (ex: targetname)

  match = value that must be matched (ex: other.target)

  returns the entity found, or world if no entity was found.

Searches the server entity list beginning at start, looking for an entity that has entity.field = match.

Example: find the first player entity

 e = find( world, classname, &quot;player&quot;);

Take care that field is a name of an entity field, without dot, and without quotes.</text>
      <sha1>ov6ibvnmuq8668mqhhxek8biy0i6xwn</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>768</id>
      <parentid>767</parentid>
      <timestamp>2008-05-08T14:32:04Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="777">== Function: nextent ==

entity nextent(entity e)

Returns entity that is just after e in the entity list.
Useful to browse the list of entities, because it skips the undefined ones.
Function: find

entity find (entity start, .string field, string match)

  start = begining of list to search (world, for the begining of list)

  field = entity field that must be examined (ex: targetname)

  match = value that must be matched (ex: other.target)

returns the entity found, or world if no entity was found.

Searches the server entity list beginning at start, looking for an entity that has entity.field = match.

Example: find the first player entity

 e = find( world, classname, &quot;player&quot;);

Take care that field is a name of an entity field, without dot, and without quotes.</text>
      <sha1>jhsj4e86y71tkmyh38k0je2j7vmj8uq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>769</id>
      <parentid>768</parentid>
      <timestamp>2008-05-08T14:32:13Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="779">== Function: nextent ==

entity nextent(entity e)

Returns entity that is just after e in the entity list.
Useful to browse the list of entities, because it skips the undefined ones.
Function: find

entity find (entity start, .string field, string match)

  start = begining of list to search (world, for the begining of list)

  field = entity field that must be examined (ex: targetname)

  match = value that must be matched (ex: other.target)

returns the entity found, or world if no entity was found.



Searches the server entity list beginning at start, looking for an entity that has entity.field = match.

Example: find the first player entity

 e = find( world, classname, &quot;player&quot;);

Take care that field is a name of an entity field, without dot, and without quotes.</text>
      <sha1>k86pr0c0xygx5yjrfaq5jhajzc0c4il</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>770</id>
      <parentid>769</parentid>
      <timestamp>2008-05-08T14:32:46Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="778">== Function: nextent ==

entity nextent(entity e)

Returns entity that is just after e in the entity list.
Useful to browse the list of entities, because it skips the undefined ones.
Function: find

entity find (entity start, .string field, string match)

  start = begining of list to search (world, for the begining of list)

  field = entity field that must be examined (ex: targetname)

  match = value that must be matched (ex: other.target)

returns the entity found, or world if no entity was found.

Searches the server entity list beginning at start, looking for an entity that has entity.field = match.


Example: find the first player entity

 e = find( world, classname, &quot;player&quot;);

Take care that field is a name of an entity field, without dot, and without quotes.</text>
      <sha1>nezw7pxvclu4bcuwt73bbyionltl6hd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2586</id>
      <parentid>770</parentid>
      <timestamp>2013-03-29T14:22:14Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Nextent]] to [[nextent]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="778">== Function: nextent ==

entity nextent(entity e)

Returns entity that is just after e in the entity list.
Useful to browse the list of entities, because it skips the undefined ones.
Function: find

entity find (entity start, .string field, string match)

  start = begining of list to search (world, for the begining of list)

  field = entity field that must be examined (ex: targetname)

  match = value that must be matched (ex: other.target)

returns the entity found, or world if no entity was found.

Searches the server entity list beginning at start, looking for an entity that has entity.field = match.


Example: find the first player entity

 e = find( world, classname, &quot;player&quot;);

Take care that field is a name of an entity field, without dot, and without quotes.</text>
      <sha1>nezw7pxvclu4bcuwt73bbyionltl6hd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>normalize</title>
    <ns>0</ns>
    <id>620</id>
    <revision>
      <id>1729</id>
      <timestamp>2013-03-24T23:02:12Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;====Syntax:==== &lt;code&gt;vector normalize(vector vec)&lt;/code&gt;  This function normalizes a vector. ====Parameters:==== :&lt;code&gt;vec&lt;/code&gt; - The vector to normalize ====Returns:==== ...&quot;</comment>
      <text xml:space="preserve" bytes="268">====Syntax:====
&lt;code&gt;vector normalize(vector vec)&lt;/code&gt;

This function normalizes a vector.
====Parameters:====
:&lt;code&gt;vec&lt;/code&gt; - The vector to normalize
====Returns:====
:An identical vector as &lt;code&gt;vec&lt;/code&gt; but with length of 1.


[[Category:QuakeC Function]]</text>
      <sha1>qdtl5uv0ucx68jw9fb1y4rqemgdkcsf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>objerror</title>
    <ns>0</ns>
    <id>622</id>
    <revision>
      <id>1731</id>
      <timestamp>2013-03-24T23:04:25Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;====Syntax:==== &lt;code&gt;vector objerror(string message)&lt;/code&gt;  Removes self and displays an error message. ====Parameters:==== :&lt;code&gt;message&lt;/code&gt; - The error message to disp...&quot;</comment>
      <text xml:space="preserve" bytes="232">====Syntax:====
&lt;code&gt;vector objerror(string message)&lt;/code&gt;

Removes self and displays an error message.
====Parameters:====
:&lt;code&gt;message&lt;/code&gt; - The error message to display
====Returns:====
:void


[[Category:QuakeC Function]]</text>
      <sha1>kdsw3tarlpjknxbxsz79rhvdrie13wa</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1732</id>
      <parentid>1731</parentid>
      <timestamp>2013-03-24T23:05:16Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="230">====Syntax:====
&lt;code&gt;void objerror(string message)&lt;/code&gt;

Removes self and displays an error message.
====Parameters:====
:&lt;code&gt;message&lt;/code&gt; - The error message to display
====Returns:====
:void


[[Category:QuakeC Function]]</text>
      <sha1>ij1tyn538dxpy5z6hj5dkcvrye1ly7v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>ogre.qc</title>
    <ns>0</ns>
    <id>852</id>
    <revision>
      <id>2473</id>
      <timestamp>2013-03-29T11:11:07Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for the [[Ogre]] [[Monsters | monster]].   &lt;pre&gt; /* ==============================================================================  OGR...&quot;</comment>
      <text xml:space="preserve" bytes="14764">This [[Quake-C]] file contains the code for the [[Ogre]] [[Monsters | monster]].


&lt;pre&gt;
/*
==============================================================================

OGRE

==============================================================================
*/

$cd id1/models/ogre_c
$origin 0 0 24
$base base		
$skin base

$frame	stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8 stand9

$frame walk1 walk2 walk3 walk4 walk5 walk6 walk7
$frame walk8 walk9 walk10 walk11 walk12 walk13 walk14 walk15 walk16

$frame run1 run2 run3 run4 run5 run6 run7 run8

$frame swing1 swing2 swing3 swing4 swing5 swing6 swing7
$frame swing8 swing9 swing10 swing11 swing12 swing13 swing14

$frame smash1 smash2 smash3 smash4 smash5 smash6 smash7
$frame smash8 smash9 smash10 smash11 smash12 smash13 smash14

$frame shoot1 shoot2 shoot3 shoot4 shoot5 shoot6

$frame pain1 pain2 pain3 pain4 pain5

$frame painb1 painb2 painb3

$frame painc1 painc2 painc3 painc4 painc5 painc6

$frame paind1 paind2 paind3 paind4 paind5 paind6 paind7 paind8 paind9 paind10
$frame paind11 paind12 paind13 paind14 paind15 paind16

$frame paine1 paine2 paine3 paine4 paine5 paine6 paine7 paine8 paine9 paine10
$frame paine11 paine12 paine13 paine14 paine15

$frame death1 death2 death3 death4 death5 death6
$frame death7 death8 death9 death10 death11 death12
$frame death13 death14

$frame bdeath1 bdeath2 bdeath3 bdeath4 bdeath5 bdeath6
$frame bdeath7 bdeath8 bdeath9 bdeath10

$frame pull1 pull2 pull3 pull4 pull5 pull6 pull7 pull8 pull9 pull10 pull11

//=============================================================================


void() OgreGrenadeExplode =
{
	T_RadiusDamage (self, self.owner, 40, world);
	sound (self, CHAN_VOICE, &quot;weapons/r_exp3.wav&quot;, 1, ATTN_NORM);

	WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
	WriteByte (MSG_BROADCAST, TE_EXPLOSION);
	WriteCoord (MSG_BROADCAST, self.origin_x);
	WriteCoord (MSG_BROADCAST, self.origin_y);
	WriteCoord (MSG_BROADCAST, self.origin_z);

	self.velocity = '0 0 0';
	self.touch = SUB_Null;
	setmodel (self, &quot;progs/s_explod.spr&quot;);
	self.solid = SOLID_NOT;
	s_explode1 ();
};

void() OgreGrenadeTouch =
{
	if (other == self.owner)
		return;		// don't explode on owner
	if (other.takedamage == DAMAGE_AIM)
	{
		OgreGrenadeExplode();
		return;
	}
	sound (self, CHAN_VOICE, &quot;weapons/bounce.wav&quot;, 1, ATTN_NORM);	// bounce sound
	if (self.velocity == '0 0 0')
		self.avelocity = '0 0 0';
};

/*
================
OgreFireGrenade
================
*/
void() OgreFireGrenade =
{
	local	entity missile, mpuff;
	
	self.effects = self.effects | EF_MUZZLEFLASH;

	sound (self, CHAN_WEAPON, &quot;weapons/grenade.wav&quot;, 1, ATTN_NORM);

	missile = spawn ();
	missile.owner = self;
	missile.movetype = MOVETYPE_BOUNCE;
	missile.solid = SOLID_BBOX;
		
// set missile speed	

	makevectors (self.angles);

	missile.velocity = normalize(self.enemy.origin - self.origin);
	missile.velocity = missile.velocity * 600;
	missile.velocity_z = 200;

	missile.avelocity = '300 300 300';

	missile.angles = vectoangles(missile.velocity);
	
	missile.touch = OgreGrenadeTouch;
	
// set missile duration
	missile.nextthink = time + 2.5;
	missile.think = OgreGrenadeExplode;

	setmodel (missile, &quot;progs/grenade.mdl&quot;);
	setsize (missile, '0 0 0', '0 0 0');		
	setorigin (missile, self.origin);
};


//=============================================================================

/*
================
chainsaw

FIXME
================
*/
void(float side) chainsaw =
{
local vector	delta;
local float 	ldmg;

	if (!self.enemy)
		return;
	if (!CanDamage (self.enemy, self))
		return;

	ai_charge(10);

	delta = self.enemy.origin - self.origin;

	if (vlen(delta) &gt; 100)
		return;
		
	ldmg = (random() + random() + random()) * 4;
	T_Damage (self.enemy, self, self, ldmg);
	
	if (side)
	{
		makevectors (self.angles);
		if (side == 1)
			SpawnMeatSpray (self.origin + v_forward*16, crandom() * 100 * v_right);
		else
			SpawnMeatSpray (self.origin + v_forward*16, side * v_right);
	}
};


void() ogre_stand1	=[	$stand1,	ogre_stand2	] {ai_stand();};
void() ogre_stand2	=[	$stand2,	ogre_stand3	] {ai_stand();};
void() ogre_stand3	=[	$stand3,	ogre_stand4	] {ai_stand();};
void() ogre_stand4	=[	$stand4,	ogre_stand5	] {ai_stand();};
void() ogre_stand5	=[	$stand5,	ogre_stand6	] {
if (random() &lt; 0.2)
	sound (self, CHAN_VOICE, &quot;ogre/ogidle.wav&quot;, 1, ATTN_IDLE);
ai_stand();
};
void() ogre_stand6	=[	$stand6,	ogre_stand7	] {ai_stand();};
void() ogre_stand7	=[	$stand7,	ogre_stand8	] {ai_stand();};
void() ogre_stand8	=[	$stand8,	ogre_stand9	] {ai_stand();};
void() ogre_stand9	=[	$stand9,	ogre_stand1	] {ai_stand();};

void() ogre_walk1	=[	$walk1,		ogre_walk2	] {ai_walk(3);};
void() ogre_walk2	=[	$walk2,		ogre_walk3	] {ai_walk(2);};
void() ogre_walk3	=[	$walk3,		ogre_walk4	] {
ai_walk(2);
if (random() &lt; 0.2)
	sound (self, CHAN_VOICE, &quot;ogre/ogidle.wav&quot;, 1, ATTN_IDLE);
};
void() ogre_walk4	=[	$walk4,		ogre_walk5	] {ai_walk(2);};
void() ogre_walk5	=[	$walk5,		ogre_walk6	] {ai_walk(2);};
void() ogre_walk6	=[	$walk6,		ogre_walk7	] {
ai_walk(5);
if (random() &lt; 0.1)
	sound (self, CHAN_VOICE, &quot;ogre/ogdrag.wav&quot;, 1, ATTN_IDLE);
};
void() ogre_walk7	=[	$walk7,		ogre_walk8	] {ai_walk(3);};
void() ogre_walk8	=[	$walk8,		ogre_walk9	] {ai_walk(2);};
void() ogre_walk9	=[	$walk9,		ogre_walk10	] {ai_walk(3);};
void() ogre_walk10	=[	$walk10,	ogre_walk11	] {ai_walk(1);};
void() ogre_walk11	=[	$walk11,	ogre_walk12	] {ai_walk(2);};
void() ogre_walk12	=[	$walk12,	ogre_walk13	] {ai_walk(3);};
void() ogre_walk13	=[	$walk13,	ogre_walk14	] {ai_walk(3);};
void() ogre_walk14	=[	$walk14,	ogre_walk15	] {ai_walk(3);};
void() ogre_walk15	=[	$walk15,	ogre_walk16	] {ai_walk(3);};
void() ogre_walk16	=[	$walk16,	ogre_walk1	] {ai_walk(4);};

void() ogre_run1	=[	$run1,		ogre_run2	] {ai_run(9);
if (random() &lt; 0.2)
	sound (self, CHAN_VOICE, &quot;ogre/ogidle2.wav&quot;, 1, ATTN_IDLE);
};
void() ogre_run2	=[	$run2,		ogre_run3	] {ai_run(12);};
void() ogre_run3	=[	$run3,		ogre_run4	] {ai_run(8);};
void() ogre_run4	=[	$run4,		ogre_run5	] {ai_run(22);};
void() ogre_run5	=[	$run5,		ogre_run6	] {ai_run(16);};
void() ogre_run6	=[	$run6,		ogre_run7	] {ai_run(4);};
void() ogre_run7	=[	$run7,		ogre_run8	] {ai_run(13);};
void() ogre_run8	=[	$run8,		ogre_run1	] {ai_run(24);};

void() ogre_swing1	=[	$swing1,		ogre_swing2	] {ai_charge(11);
sound (self, CHAN_WEAPON, &quot;ogre/ogsawatk.wav&quot;, 1, ATTN_NORM);
};
void() ogre_swing2	=[	$swing2,		ogre_swing3	] {ai_charge(1);};
void() ogre_swing3	=[	$swing3,		ogre_swing4	] {ai_charge(4);};
void() ogre_swing4	=[	$swing4,		ogre_swing5	] {ai_charge(13);};
void() ogre_swing5	=[	$swing5,		ogre_swing6	] {ai_charge(9); chainsaw(0);self.angles_y = self.angles_y + random()*25;};
void() ogre_swing6	=[	$swing6,		ogre_swing7	] {chainsaw(200);self.angles_y = self.angles_y + random()* 25;};
void() ogre_swing7	=[	$swing7,		ogre_swing8	] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
void() ogre_swing8	=[	$swing8,		ogre_swing9	] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
void() ogre_swing9	=[	$swing9,		ogre_swing10 ] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
void() ogre_swing10	=[	$swing10,		ogre_swing11 ] {chainsaw(-200);self.angles_y = self.angles_y + random()* 25;};
void() ogre_swing11	=[	$swing11,		ogre_swing12 ] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
void() ogre_swing12	=[	$swing12,		ogre_swing13 ] {ai_charge(3);};
void() ogre_swing13	=[	$swing13,		ogre_swing14 ] {ai_charge(8);};
void() ogre_swing14	=[	$swing14,		ogre_run1	] {ai_charge(9);};

void() ogre_smash1	=[	$smash1,		ogre_smash2	] {ai_charge(6);
sound (self, CHAN_WEAPON, &quot;ogre/ogsawatk.wav&quot;, 1, ATTN_NORM);
};
void() ogre_smash2	=[	$smash2,		ogre_smash3	] {ai_charge(0);};
void() ogre_smash3	=[	$smash3,		ogre_smash4	] {ai_charge(0);};
void() ogre_smash4	=[	$smash4,		ogre_smash5	] {ai_charge(1);};
void() ogre_smash5	=[	$smash5,		ogre_smash6	] {ai_charge(4);};
void() ogre_smash6	=[	$smash6,		ogre_smash7	] {ai_charge(4); chainsaw(0);};
void() ogre_smash7	=[	$smash7,		ogre_smash8	] {ai_charge(4); chainsaw(0);};
void() ogre_smash8	=[	$smash8,		ogre_smash9	] {ai_charge(10); chainsaw(0);};
void() ogre_smash9	=[	$smash9,		ogre_smash10 ] {ai_charge(13); chainsaw(0);};
void() ogre_smash10	=[	$smash10,		ogre_smash11 ] {chainsaw(1);};
void() ogre_smash11	=[	$smash11,		ogre_smash12 ] {ai_charge(2); chainsaw(0);
self.nextthink = self.nextthink + random()*0.2;};	// slight variation
void() ogre_smash12	=[	$smash12,		ogre_smash13 ] {ai_charge();};
void() ogre_smash13	=[	$smash13,		ogre_smash14 ] {ai_charge(4);};
void() ogre_smash14	=[	$smash14,		ogre_run1	] {ai_charge(12);};

void() ogre_nail1	=[	$shoot1,		ogre_nail2	] {ai_face();};
void() ogre_nail2	=[	$shoot2,		ogre_nail3	] {ai_face();};
void() ogre_nail3	=[	$shoot2,		ogre_nail4	] {ai_face();};
void() ogre_nail4	=[	$shoot3,		ogre_nail5	] {ai_face();OgreFireGrenade();};
void() ogre_nail5	=[	$shoot4,		ogre_nail6	] {ai_face();};
void() ogre_nail6	=[	$shoot5,		ogre_nail7	] {ai_face();};
void() ogre_nail7	=[	$shoot6,		ogre_run1	] {ai_face();};

void()	ogre_pain1	=[	$pain1,		ogre_pain2	] {};
void()	ogre_pain2	=[	$pain2,		ogre_pain3	] {};
void()	ogre_pain3	=[	$pain3,		ogre_pain4	] {};
void()	ogre_pain4	=[	$pain4,		ogre_pain5	] {};
void()	ogre_pain5	=[	$pain5,		ogre_run1	] {};


void()	ogre_painb1	=[	$painb1,	ogre_painb2	] {};
void()	ogre_painb2	=[	$painb2,	ogre_painb3	] {};
void()	ogre_painb3	=[	$painb3,	ogre_run1	] {};


void()	ogre_painc1	=[	$painc1,	ogre_painc2	] {};
void()	ogre_painc2	=[	$painc2,	ogre_painc3	] {};
void()	ogre_painc3	=[	$painc3,	ogre_painc4	] {};
void()	ogre_painc4	=[	$painc4,	ogre_painc5	] {};
void()	ogre_painc5	=[	$painc5,	ogre_painc6	] {};
void()	ogre_painc6	=[	$painc6,	ogre_run1	] {};


void()	ogre_paind1	=[	$paind1,	ogre_paind2	] {};
void()	ogre_paind2	=[	$paind2,	ogre_paind3	] {ai_pain(10);};
void()	ogre_paind3	=[	$paind3,	ogre_paind4	] {ai_pain(9);};
void()	ogre_paind4	=[	$paind4,	ogre_paind5	] {ai_pain(4);};
void()	ogre_paind5	=[	$paind5,	ogre_paind6	] {};
void()	ogre_paind6	=[	$paind6,	ogre_paind7	] {};
void()	ogre_paind7	=[	$paind7,	ogre_paind8	] {};
void()	ogre_paind8	=[	$paind8,	ogre_paind9	] {};
void()	ogre_paind9	=[	$paind9,	ogre_paind10	] {};
void()	ogre_paind10=[	$paind10,	ogre_paind11	] {};
void()	ogre_paind11=[	$paind11,	ogre_paind12	] {};
void()	ogre_paind12=[	$paind12,	ogre_paind13	] {};
void()	ogre_paind13=[	$paind13,	ogre_paind14	] {};
void()	ogre_paind14=[	$paind14,	ogre_paind15	] {};
void()	ogre_paind15=[	$paind15,	ogre_paind16	] {};
void()	ogre_paind16=[	$paind16,	ogre_run1	] {};

void()	ogre_paine1	=[	$paine1,	ogre_paine2	] {};
void()	ogre_paine2	=[	$paine2,	ogre_paine3	] {ai_pain(10);};
void()	ogre_paine3	=[	$paine3,	ogre_paine4	] {ai_pain(9);};
void()	ogre_paine4	=[	$paine4,	ogre_paine5	] {ai_pain(4);};
void()	ogre_paine5	=[	$paine5,	ogre_paine6	] {};
void()	ogre_paine6	=[	$paine6,	ogre_paine7	] {};
void()	ogre_paine7	=[	$paine7,	ogre_paine8	] {};
void()	ogre_paine8	=[	$paine8,	ogre_paine9	] {};
void()	ogre_paine9	=[	$paine9,	ogre_paine10	] {};
void()	ogre_paine10=[	$paine10,	ogre_paine11	] {};
void()	ogre_paine11=[	$paine11,	ogre_paine12	] {};
void()	ogre_paine12=[	$paine12,	ogre_paine13	] {};
void()	ogre_paine13=[	$paine13,	ogre_paine14	] {};
void()	ogre_paine14=[	$paine14,	ogre_paine15	] {};
void()	ogre_paine15=[	$paine15,	ogre_run1	] {};


void(entity attacker, float damage)	ogre_pain =
{
	local float	r;

// don't make multiple pain sounds right after each other
	if (self.pain_finished &gt; time)
		return;

	sound (self, CHAN_VOICE, &quot;ogre/ogpain1.wav&quot;, 1, ATTN_NORM);		

	r = random();
	
	if (r &lt; 0.25)
	{
		ogre_pain1 ();
		self.pain_finished = time + 1;
	}
	else if (r &lt; 0.5)
	{
		ogre_painb1 ();
		self.pain_finished = time + 1;
	}
	else if (r &lt; 0.75)
	{
		ogre_painc1 ();
		self.pain_finished = time + 1;
	}
	else if (r &lt; 0.88)
	{
		ogre_paind1 ();
		self.pain_finished = time + 2;
	}
	else
	{
		ogre_paine1 ();
		self.pain_finished = time + 2;
	}
};

void()	ogre_die1	=[	$death1,	ogre_die2	] {};
void()	ogre_die2	=[	$death2,	ogre_die3	] {};
void()	ogre_die3	=[	$death3,	ogre_die4	]
{self.solid = SOLID_NOT;
self.ammo_rockets = 2;DropBackpack();};
void()	ogre_die4	=[	$death4,	ogre_die5	] {};
void()	ogre_die5	=[	$death5,	ogre_die6	] {};
void()	ogre_die6	=[	$death6,	ogre_die7	] {};
void()	ogre_die7	=[	$death7,	ogre_die8	] {};
void()	ogre_die8	=[	$death8,	ogre_die9	] {};
void()	ogre_die9	=[	$death9,	ogre_die10	] {};
void()	ogre_die10	=[	$death10,	ogre_die11	] {};
void()	ogre_die11	=[	$death11,	ogre_die12	] {};
void()	ogre_die12	=[	$death12,	ogre_die13	] {};
void()	ogre_die13	=[	$death13,	ogre_die14	] {};
void()	ogre_die14	=[	$death14,	ogre_die14	] {};

void()	ogre_bdie1	=[	$bdeath1,	ogre_bdie2	] {};
void()	ogre_bdie2	=[	$bdeath2,	ogre_bdie3	] {ai_forward(5);};
void()	ogre_bdie3	=[	$bdeath3,	ogre_bdie4	]
{self.solid = SOLID_NOT;
self.ammo_rockets = 2;DropBackpack();};
void()	ogre_bdie4	=[	$bdeath4,	ogre_bdie5	] {ai_forward(1);};
void()	ogre_bdie5	=[	$bdeath5,	ogre_bdie6	] {ai_forward(3);};
void()	ogre_bdie6	=[	$bdeath6,	ogre_bdie7	] {ai_forward(7);};
void()	ogre_bdie7	=[	$bdeath7,	ogre_bdie8	] {ai_forward(25);};
void()	ogre_bdie8	=[	$bdeath8,	ogre_bdie9	] {};
void()	ogre_bdie9	=[	$bdeath9,	ogre_bdie10	] {};
void()	ogre_bdie10	=[	$bdeath10,	ogre_bdie10	] {};

void() ogre_die =
{
// check for gib
	if (self.health &lt; -80)
	{
		sound (self, CHAN_VOICE, &quot;player/udeath.wav&quot;, 1, ATTN_NORM);
		ThrowHead (&quot;progs/h_ogre.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib3.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib3.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib3.mdl&quot;, self.health);
		return;
	}

	sound (self, CHAN_VOICE, &quot;ogre/ogdth.wav&quot;, 1, ATTN_NORM);
	
	if (random() &lt; 0.5)
		ogre_die1 ();
	else
		ogre_bdie1 ();
};

void() ogre_melee =
{
	if (random() &gt; 0.5)
		ogre_smash1 ();
	else
		ogre_swing1 ();
};


/*QUAKED monster_ogre (1 0 0) (-32 -32 -24) (32 32 64) Ambush

*/
void() monster_ogre =
{
	if (deathmatch)
	{
		remove(self);
		return;
	}
	precache_model (&quot;progs/ogre.mdl&quot;);
	precache_model (&quot;progs/h_ogre.mdl&quot;);
	precache_model (&quot;progs/grenade.mdl&quot;);

	precache_sound (&quot;ogre/ogdrag.wav&quot;);
	precache_sound (&quot;ogre/ogdth.wav&quot;);
	precache_sound (&quot;ogre/ogidle.wav&quot;);
	precache_sound (&quot;ogre/ogidle2.wav&quot;);
	precache_sound (&quot;ogre/ogpain1.wav&quot;);
	precache_sound (&quot;ogre/ogsawatk.wav&quot;);
	precache_sound (&quot;ogre/ogwake.wav&quot;);

	self.solid = SOLID_SLIDEBOX;
	self.movetype = MOVETYPE_STEP;

	setmodel (self, &quot;progs/ogre.mdl&quot;);

	setsize (self, VEC_HULL2_MIN, VEC_HULL2_MAX);
	self.health = 200;

	self.th_stand = ogre_stand1;
	self.th_walk = ogre_walk1;
	self.th_run = ogre_run1;
	self.th_die = ogre_die;
	self.th_melee = ogre_melee;
	self.th_missile = ogre_nail1;
	self.th_pain = ogre_pain;
	
	walkmonster_start();
};

void() monster_ogre_marksman =
{
	monster_ogre ();
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>cp4w2yly7rygdt6jd3gz1zknhabqa1r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>oldone.qc</title>
    <ns>0</ns>
    <id>853</id>
    <revision>
      <id>2474</id>
      <timestamp>2013-03-29T11:12:39Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for the [[Shub-Niggurath]] boss [[Monsters | monster]].   &lt;pre&gt; /* ====================================================================...&quot;</comment>
      <text xml:space="preserve" bytes="9660">This [[Quake-C]] file contains the code for the [[Shub-Niggurath]] boss [[Monsters | monster]].


&lt;pre&gt;
/*
==============================================================================

OLD ONE

==============================================================================
*/
$cd id1/models/old_one
$origin 0 0 24
$base base
$skin skin
$scale 1

void() finale_1;
void() finale_2;
void() finale_3;
void() finale_4;


entity	shub;

$frame old1 old2 old3 old4 old5 old6 old7 old8 old9 
$frame old10 old11 old12 old13 old14 old15 old16 old17 old18 old19 
$frame old20 old21 old22 old23 old24 old25 old26 old27 old28 old29 
$frame old30 old31 old32 old33 old34 old35 old36 old37 old38 old39 
$frame old40 old41 old42 old43 old44 old45 old46 

$frame shake1 shake2 shake3 shake4 shake5 shake6 shake7 shake8
$frame shake9 shake10 shake11 shake12 shake12 shake13 shake14
$frame shake15 shake16 shake17 shake18 shake19 shake20

//void() old_stand     =[      $old1,       old_stand    ] {};

void() old_idle1        =[      $old1,  old_idle2       ] {};
void() old_idle2        =[      $old2,  old_idle3       ] {};
void() old_idle3        =[      $old3,  old_idle4       ] {};
void() old_idle4        =[      $old4,  old_idle5       ] {};
void() old_idle5        =[      $old5,  old_idle6       ] {};
void() old_idle6        =[      $old6,  old_idle7       ] {};
void() old_idle7        =[      $old7,  old_idle8       ] {};
void() old_idle8        =[      $old8,  old_idle9       ] {};
void() old_idle9        =[      $old9,  old_idle10      ] {};
void() old_idle10       =[      $old10, old_idle11      ] {};
void() old_idle11       =[      $old11, old_idle12      ] {};
void() old_idle12       =[      $old12, old_idle13      ] {};
void() old_idle13       =[      $old13, old_idle14      ] {};
void() old_idle14       =[      $old14, old_idle15      ] {};
void() old_idle15       =[      $old15, old_idle16      ] {};
void() old_idle16       =[      $old16, old_idle17      ] {};
void() old_idle17       =[      $old17, old_idle18      ] {};
void() old_idle18       =[      $old18, old_idle19      ] {};
void() old_idle19       =[      $old19, old_idle20      ] {};
void() old_idle20       =[      $old20, old_idle21      ] {};
void() old_idle21       =[      $old21, old_idle22      ] {};
void() old_idle22       =[      $old22, old_idle23      ] {};
void() old_idle23       =[      $old23, old_idle24      ] {};
void() old_idle24       =[      $old24, old_idle25      ] {};
void() old_idle25       =[      $old25, old_idle26      ] {};
void() old_idle26       =[      $old26, old_idle27      ] {};
void() old_idle27       =[      $old27, old_idle28      ] {};
void() old_idle28       =[      $old28, old_idle29      ] {};
void() old_idle29       =[      $old29, old_idle30      ] {};
void() old_idle30       =[      $old30, old_idle31      ] {};
void() old_idle31       =[      $old31, old_idle32      ] {};
void() old_idle32       =[      $old32, old_idle33      ] {};
void() old_idle33       =[      $old33, old_idle34      ] {};
void() old_idle34       =[      $old34, old_idle35      ] {};
void() old_idle35       =[      $old35, old_idle36      ] {};
void() old_idle36       =[      $old36, old_idle37      ] {};
void() old_idle37       =[      $old37, old_idle38      ] {};
void() old_idle38       =[      $old38, old_idle39      ] {};
void() old_idle39       =[      $old39, old_idle40      ] {};
void() old_idle40       =[      $old40, old_idle41      ] {};
void() old_idle41       =[      $old41, old_idle42      ] {};
void() old_idle42       =[      $old42, old_idle43      ] {};
void() old_idle43       =[      $old43, old_idle44      ] {};
void() old_idle44       =[      $old44, old_idle45      ] {};
void() old_idle45       =[      $old45, old_idle46      ] {};
void() old_idle46       =[      $old46, old_idle1       ] {};


void() old_thrash1        =[ $shake1,  old_thrash2       ] {lightstyle(0, &quot;m&quot;);};
void() old_thrash2        =[      $shake2,  old_thrash3       ] {lightstyle(0, &quot;k&quot;);};
void() old_thrash3        =[      $shake3,  old_thrash4       ] {lightstyle(0, &quot;k&quot;);};
void() old_thrash4        =[      $shake4,  old_thrash5       ] {lightstyle(0, &quot;i&quot;);};
void() old_thrash5        =[      $shake5,  old_thrash6       ] {lightstyle(0, &quot;g&quot;);};
void() old_thrash6        =[      $shake6,  old_thrash7       ] {lightstyle(0, &quot;e&quot;);};
void() old_thrash7        =[      $shake7,  old_thrash8       ] {lightstyle(0, &quot;c&quot;);};
void() old_thrash8        =[      $shake8,  old_thrash9       ] {lightstyle(0, &quot;a&quot;);};
void() old_thrash9        =[      $shake9,  old_thrash10      ] {lightstyle(0, &quot;c&quot;);};
void() old_thrash10       =[      $shake10, old_thrash11      ] {lightstyle(0, &quot;e&quot;);};
void() old_thrash11       =[      $shake11, old_thrash12      ] {lightstyle(0, &quot;g&quot;);};
void() old_thrash12       =[      $shake12, old_thrash13      ] {lightstyle(0, &quot;i&quot;);};
void() old_thrash13       =[      $shake13, old_thrash14      ] {lightstyle(0, &quot;k&quot;);};
void() old_thrash14       =[      $shake14, old_thrash15      ] {lightstyle(0, &quot;m&quot;);};
void() old_thrash15       =[      $shake15, old_thrash16      ] {lightstyle(0, &quot;m&quot;);
self.cnt = self.cnt + 1;
if (self.cnt != 3)
	self.think = old_thrash1;
};
void() old_thrash16       =[      $shake16, old_thrash17      ] {lightstyle(0, &quot;g&quot;);};
void() old_thrash17       =[      $shake17, old_thrash18      ] {lightstyle(0, &quot;c&quot;);};
void() old_thrash18       =[      $shake18, old_thrash19      ] {lightstyle(0, &quot;b&quot;);};
void() old_thrash19       =[      $shake19, old_thrash20      ] {lightstyle(0, &quot;a&quot;);};
void() old_thrash20       =[      $shake20, old_thrash20      ] {finale_4();};

//============================================================================

void() finale_1 =
{
	local entity	pos, pl;
	local entity	timer;

	intermission_exittime = time + 10000000;	// never allow exit
	intermission_running = 1;

	// find the intermission spot
	pos = find (world, classname, &quot;info_intermission&quot;);
	if (!pos)
		error (&quot;no info_intermission&quot;);
	pl = find (world, classname, &quot;misc_teleporttrain&quot;);
	if (!pl)
		error (&quot;no teleporttrain&quot;);
	remove (pl);

	WriteByte (MSG_ALL, SVC_FINALE);
	WriteString (MSG_ALL, &quot;&quot;);

	pl = find (world, classname, &quot;player&quot;);
	while (pl != world)
	{
		pl.view_ofs = '0 0 0';
		pl.angles = other.v_angle = pos.mangle;
		pl.fixangle = TRUE;		// turn this way immediately
		pl.map = self.map;
		pl.nextthink = time + 0.5;
		pl.takedamage = DAMAGE_NO;
		pl.solid = SOLID_NOT;
		pl.movetype = MOVETYPE_NONE;
		pl.modelindex = 0;
		setorigin (pl, pos.origin);
		pl = find (pl, classname, &quot;player&quot;);
	}	
	
	// make fake versions of all players as standins, and move the real
	// players to the intermission spot
	
	// wait for 1 second
	timer = spawn();
	timer.nextthink = time + 1;
	timer.think = finale_2;	
};

void() finale_2 =
{
	local vector	o;

	// start a teleport splash inside shub

	o = shub.origin - '0 100 0';
	WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
	WriteByte (MSG_BROADCAST, TE_TELEPORT);
	WriteCoord (MSG_BROADCAST, o_x);
	WriteCoord (MSG_BROADCAST, o_y);
	WriteCoord (MSG_BROADCAST, o_z);

	sound (shub, CHAN_VOICE, &quot;misc/r_tele1.wav&quot;, 1, ATTN_NORM);
	
	self.nextthink = time + 2;
	self.think = finale_3;
};

void() finale_3 =
{
	// start shub thrashing wildly
	shub.think = old_thrash1;
	sound (shub, CHAN_VOICE, &quot;boss2/death.wav&quot;, 1, ATTN_NORM);
	lightstyle(0, &quot;abcdefghijklmlkjihgfedcb&quot;);	
};

void() finale_4 =
{
	// throw tons of meat chunks	
	local	vector	oldo;
	local	float	x, y, z;
	local	float	r;
	local entity	n;

	sound (self, CHAN_VOICE, &quot;boss2/pop2.wav&quot;, 1, ATTN_NORM);
	
	oldo = self.origin;

	z = 16;
	while (z &lt;= 144)
	{
		x = -64;
		while (x &lt;= 64)
		{
			y = -64;
			while (y &lt;= 64)
			{
				self.origin_x = oldo_x + x;
				self.origin_y = oldo_y + y;
				self.origin_z = oldo_z + z;

				r = random();
				if (r &lt; 0.3)				
					ThrowGib (&quot;progs/gib1.mdl&quot;, -999);
				else if (r &lt; 0.6)
					ThrowGib (&quot;progs/gib2.mdl&quot;, -999);
				else
					ThrowGib (&quot;progs/gib3.mdl&quot;, -999);
				y = y + 32;
			}
			x = x + 32;
		}
		z = z + 96;
	}
	// start the end text
	WriteByte (MSG_ALL, SVC_FINALE);
	WriteString (MSG_ALL, &quot;Congratulations and well done! You have\nbeaten the hideous Shub-Niggurath, and\nher hundreds of ugly changelings and\nmonsters. You have proven that your\nskill and your cunning are greater than\nall the powers of Quake. You are the\nmaster now. Id Software salutes you.&quot;);

// put a player model down
	n = spawn();
	setmodel (n, &quot;progs/player.mdl&quot;);
	oldo = oldo - '32 264 0';
	setorigin (n, oldo);
	n.angles = '0 290 0';
	n.frame = 1;

	remove (self);

// switch cd track
	WriteByte (MSG_ALL, SVC_CDTRACK);
	WriteByte (MSG_ALL, 3);
	WriteByte (MSG_ALL, 3);
	lightstyle(0, &quot;m&quot;);	
};

//============================================================================

void () nopain =
{
	self.health = 40000;
};

//============================================================================


/*QUAKED monster_oldone (1 0 0) (-16 -16 -24) (16 16 32)
*/
void() monster_oldone =
{
	if (deathmatch)
	{
		remove(self);
		return;
	}

	precache_model2 (&quot;progs/oldone.mdl&quot;);

	precache_sound2 (&quot;boss2/death.wav&quot;);
	precache_sound2 (&quot;boss2/idle.wav&quot;);
	precache_sound2 (&quot;boss2/sight.wav&quot;);
	precache_sound2 (&quot;boss2/pop2.wav&quot;);

	self.solid = SOLID_SLIDEBOX;
	self.movetype = MOVETYPE_STEP;
	
	setmodel (self, &quot;progs/oldone.mdl&quot;);
	setsize (self, '-160 -128 -24', '160 128 256');

	self.health = 40000;		// kill by telefrag
	self.think = old_idle1;
	self.nextthink = time + 0.1;	
	self.takedamage = DAMAGE_YES;
	self.th_pain = nopain;
	self.th_die = finale_1;
	shub = self;
	
	total_monsters = total_monsters + 1;
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>j5z9g8z5aqt6aaag1thm0202szcmtmj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>pak0.pak</title>
    <ns>0</ns>
    <id>503</id>
    <revision>
      <id>1065</id>
      <timestamp>2009-07-09T10:10:10Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>new article</comment>
      <text xml:space="preserve" bytes="605">The '''''pak0.pak''''' file that comes with Quake is a [[PAK file]] required by all Quake [[engines]]. It contains the maps, models, programs, and skins required to play Quake Episode 1, ''Dimension of the Doomed''. It is expected to be in the ID1 subfolder of the Quake root folder.

''pak0.pak'' contains the following folders &amp; files:

* default.cfg
* demo1.dem
* demo2.dem
* end1.bin
* gfx.wad
* progs.dat
* quake.rc
* gfx/
** bigbox.lmp
** box_bl.lmp
** ... ''TODO: fill this in.''
* maps/
** ... ''TODO: fill this in.''
* progs/
** ... ''TODO: fill this in.''
* sound/
** ... ''TODO: fill this in.''</text>
      <sha1>3fgky9788bj12r508cvmm8wdciul6bt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1069</id>
      <parentid>1065</parentid>
      <timestamp>2009-07-09T10:29:25Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>+info about how it's distributed.</comment>
      <text xml:space="preserve" bytes="1095">The '''''pak0.pak''''' file that comes with Quake is a [[PAK file]] required by all Quake [[engines]]. It contains the maps, models, programs, and skins required to play Quake Episode 1, ''Dimension of the Doomed''. It is expected to be in the ID1 subfolder of the Quake root folder.

''pak0.pak'' is distributed with both the shareware and the registered/commercial editions of Quake.

In some editions, including the downloadable shareware (''quake106.zip'') from id Software, it is embedded in another archive, ''[[resource.1]]''. This file is LZH-encoded using the lh5 algorithm. If you can't or don't want to run the DOS/Win32 Quake installer program it comes with, then you'll need a compatible extractor program to get ''pak0.pak'' out of the ''resource.1'' archive.

''pak0.pak'' contains the following folders &amp; files:

* default.cfg
* demo1.dem
* demo2.dem
* end1.bin
* gfx.wad
* progs.dat
* quake.rc
* gfx/
** bigbox.lmp
** box_bl.lmp
** ... ''TODO: fill this in.''
* maps/
** ... ''TODO: fill this in.''
* progs/
** ... ''TODO: fill this in.''
* sound/
** ... ''TODO: fill this in.''</text>
      <sha1>bbir2b0g6l8p0dlele7ayddqgn5nany</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1070</id>
      <parentid>1069</parentid>
      <timestamp>2009-07-09T23:05:27Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>clarify that not all pak0.paks are the same</comment>
      <text xml:space="preserve" bytes="1239">The '''''pak0.pak''''' file that comes with Quake is a [[PAK file]] required by all Quake [[engines]]. It contains the maps, models, programs, and skins required to play Quake Episode 1, ''Dimension of the Doomed''. It is expected to be in the ID1 subfolder of the Quake root folder. Quake mission packs and Quake-based games often have their own ''pak0.pak'' files, which live in a different folder, not the ID1 folder.

The ID1 ''pak0.pak'' is distributed with both the shareware and the registered/commercial editions of Quake. In some editions, including the downloadable shareware (''quake106.zip'') from id Software, it is embedded in another archive, ''[[resource.1]]''. This file is LZH-encoded using the lh5 algorithm. If you can't or don't want to run the DOS/Win32 Quake installer program it comes with, then you'll need a compatible extractor program to get ''pak0.pak'' out of the ''resource.1'' archive.

''pak0.pak'' contains the following folders &amp; files:

* default.cfg
* demo1.dem
* demo2.dem
* end1.bin
* gfx.wad
* progs.dat
* quake.rc
* gfx/
** bigbox.lmp
** box_bl.lmp
** ... ''TODO: fill this in.''
* maps/
** ... ''TODO: fill this in.''
* progs/
** ... ''TODO: fill this in.''
* sound/
** ... ''TODO: fill this in.''</text>
      <sha1>3hznhm4an7diukxffj9mn6n9rul7lv6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1071</id>
      <parentid>1070</parentid>
      <timestamp>2009-07-09T23:06:06Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>again making clear which pak0.pak we're talking about</comment>
      <text xml:space="preserve" bytes="1247">The '''''pak0.pak''''' file that comes with Quake is a [[PAK file]] required by all Quake [[engines]]. It contains the maps, models, programs, and skins required to play Quake Episode 1, ''Dimension of the Doomed''. It is expected to be in the ID1 subfolder of the Quake root folder. Quake mission packs and Quake-based games often have their own ''pak0.pak'' files, which live in a different folder, not the ID1 folder.

The ID1 ''pak0.pak'' is distributed with both the shareware and the registered/commercial editions of Quake. In some editions, including the downloadable shareware (''quake106.zip'') from id Software, it is embedded in another archive, ''[[resource.1]]''. This file is LZH-encoded using the lh5 algorithm. If you can't or don't want to run the DOS/Win32 Quake installer program it comes with, then you'll need a compatible extractor program to get ''pak0.pak'' out of the ''resource.1'' archive.

The ID1 ''pak0.pak'' contains the following folders &amp; files:

* default.cfg
* demo1.dem
* demo2.dem
* end1.bin
* gfx.wad
* progs.dat
* quake.rc
* gfx/
** bigbox.lmp
** box_bl.lmp
** ... ''TODO: fill this in.''
* maps/
** ... ''TODO: fill this in.''
* progs/
** ... ''TODO: fill this in.''
* sound/
** ... ''TODO: fill this in.''</text>
      <sha1>354keb3138xwdzs9uuqb0veulnfblml</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1073</id>
      <parentid>1071</parentid>
      <timestamp>2009-07-12T00:08:22Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <comment>further clarification</comment>
      <text xml:space="preserve" bytes="1326">The '''''pak0.pak''''' file that comes with Quake is required by all Quake [[engines]]. It contains the maps, models, programs, and skins required to play Quake Episode 1, ''Dimension of the Doomed''. It is expected to be in the ID1 subfolder of the Quake root folder.

[[PAK file]]s are typically named ''pak0.pak'', ''pak1.pak'', ''pak2.pak'', and so on. Quake mission packs and other Quake-based games often have their own ''pak0.pak'' files, which live in a different folder, not the ID1 folder.

The ID1 ''pak0.pak'' is distributed with both the shareware and the registered/commercial editions of Quake. In some editions, including the downloadable shareware (''quake106.zip'') from id Software, it is embedded in another archive, ''[[resource.1]]''. This file is LZH-encoded using the lh5 algorithm. If you can't or don't want to run the DOS/Win32 Quake installer program it comes with, then you'll need a compatible extractor program to get ''pak0.pak'' out of the ''resource.1'' archive.

The ID1 ''pak0.pak'' contains the following folders &amp; files:

* default.cfg
* demo1.dem
* demo2.dem
* end1.bin
* gfx.wad
* progs.dat
* quake.rc
* gfx/
** bigbox.lmp
** box_bl.lmp
** ... ''TODO: fill this in.''
* maps/
** ... ''TODO: fill this in.''
* progs/
** ... ''TODO: fill this in.''
* sound/
** ... ''TODO: fill this in.''</text>
      <sha1>78xqvna1bmy4pil7j6uhq7mzbwvpmxx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1098</id>
      <parentid>1073</parentid>
      <timestamp>2009-07-20T02:11:25Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <minor/>
      <comment>+sounds</comment>
      <text xml:space="preserve" bytes="1334">The '''''pak0.pak''''' file that comes with Quake is required by all Quake [[engines]]. It contains the maps, models, programs, sounds, and skins required to play Quake Episode 1, ''Dimension of the Doomed''. It is expected to be in the ID1 subfolder of the Quake root folder.

[[PAK file]]s are typically named ''pak0.pak'', ''pak1.pak'', ''pak2.pak'', and so on. Quake mission packs and other Quake-based games often have their own ''pak0.pak'' files, which live in a different folder, not the ID1 folder.

The ID1 ''pak0.pak'' is distributed with both the shareware and the registered/commercial editions of Quake. In some editions, including the downloadable shareware (''quake106.zip'') from id Software, it is embedded in another archive, ''[[resource.1]]''. This file is LZH-encoded using the lh5 algorithm. If you can't or don't want to run the DOS/Win32 Quake installer program it comes with, then you'll need a compatible extractor program to get ''pak0.pak'' out of the ''resource.1'' archive.

The ID1 ''pak0.pak'' contains the following folders &amp; files:

* default.cfg
* demo1.dem
* demo2.dem
* end1.bin
* gfx.wad
* progs.dat
* quake.rc
* gfx/
** bigbox.lmp
** box_bl.lmp
** ... ''TODO: fill this in.''
* maps/
** ... ''TODO: fill this in.''
* progs/
** ... ''TODO: fill this in.''
* sound/
** ... ''TODO: fill this in.''</text>
      <sha1>sz87nk080mkgegy9y3y27935f8fj2c9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1102</id>
      <parentid>1098</parentid>
      <timestamp>2009-07-20T02:27:21Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <minor/>
      <comment>consistent formatting - italics for filenames</comment>
      <text xml:space="preserve" bytes="1370">The '''''pak0.pak''''' file that comes with Quake is required by all Quake [[engines]]. It contains the maps, models, programs, sounds, and skins required to play Quake Episode 1, ''Dimension of the Doomed''. It is expected to be in the ID1 subfolder of the Quake root folder.

[[PAK file]]s are typically named ''pak0.pak'', ''pak1.pak'', ''pak2.pak'', and so on. Quake mission packs and other Quake-based games often have their own ''pak0.pak'' files, which live in a different folder, not the ID1 folder.

The ID1 ''pak0.pak'' is distributed with both the shareware and the registered/commercial editions of Quake. In some editions, including the downloadable shareware (''quake106.zip'') from id Software, it is embedded in another archive, ''[[resource.1]]''. This file is LZH-encoded using the lh5 algorithm. If you can't or don't want to run the DOS/Win32 Quake installer program it comes with, then you'll need a compatible extractor program to get ''pak0.pak'' out of the ''resource.1'' archive.

The ID1 ''pak0.pak'' contains the following folders &amp; files:

* ''default.cfg''
* ''demo1.dem''
* ''demo2.dem''
* ''end1.bin''
* ''gfx.wad''
* ''progs.dat''
* ''quake.rc''
* gfx/
** ''bigbox.lmp''
** ''box_bl.lmp''
** ... ''TODO: fill this in.''
* maps/
** ... ''TODO: fill this in.''
* progs/
** ... ''TODO: fill this in.''
* sound/
** ... ''TODO: fill this in.''</text>
      <sha1>dy4drzn0lf65igc7hmog3nae4qr0nsv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1103</id>
      <parentid>1102</parentid>
      <timestamp>2009-07-20T02:29:46Z</timestamp>
      <contributor>
        <username>Sissy</username>
        <id>18</id>
      </contributor>
      <minor/>
      <comment>paragraph separation, and minor clarification</comment>
      <text xml:space="preserve" bytes="1398">The '''''pak0.pak''''' file that comes with Quake is required by all Quake [[engines]]. It contains the maps, models, programs, sounds, and skins required to play Quake Episode 1, ''Dimension of the Doomed''. It is expected to be in the ID1 subfolder of the Quake root folder.

[[PAK file]]s are typically named ''pak0.pak'', ''pak1.pak'', ''pak2.pak'', and so on. Quake mission packs and other Quake-based games often have their own ''pak0.pak'' files, which live in a different folder, not the ID1 folder.

The ID1 ''pak0.pak'' is distributed with both the shareware and the registered/commercial editions of Quake.

In some editions, including the downloadable shareware (''quake106.zip'') from id Software, ''pak0.pak'' is embedded in another archive, ''[[resource.1]]''. The files in this archive are LZH-encoded using the lh5 algorithm. If you can't or don't want to run the DOS/Win32 Quake installer program it comes with, then you'll need a compatible extractor program to get ''pak0.pak'' out of the ''resource.1'' archive.

The ID1 ''pak0.pak'' contains the following folders &amp; files:

* ''default.cfg''
* ''demo1.dem''
* ''demo2.dem''
* ''end1.bin''
* ''gfx.wad''
* ''progs.dat''
* ''quake.rc''
* gfx/
** ''bigbox.lmp''
** ''box_bl.lmp''
** ... ''TODO: fill this in.''
* maps/
** ... ''TODO: fill this in.''
* progs/
** ... ''TODO: fill this in.''
* sound/
** ... ''TODO: fill this in.''</text>
      <sha1>dkva51xabbh3eknhunlgb1oozcmgtyw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2231</id>
      <parentid>1103</parentid>
      <timestamp>2013-03-26T13:20:24Z</timestamp>
      <contributor>
        <username>Hectate</username>
        <id>28</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="1493">The '''''pak0.pak''''' file that comes with Quake is required by all Quake [[engines]]. It contains the maps, models, programs, sounds, and skins required to play Quake Episode 1, ''Dimension of the Doomed''. It is expected to be in the ID1 subfolder of the Quake root folder.

[[PAK file]]s are typically named ''pak0.pak'', ''pak1.pak'', ''pak2.pak'', and so on. Quake mission packs and other Quake-based games often have their own ''pak0.pak'' files, which live in a different folder, not the ID1 folder.

The ID1 ''pak0.pak'' is distributed with both the shareware and the registered/commercial editions of Quake.

In some editions, including the downloadable shareware (''quake106.zip'') from id Software, ''pak0.pak'' is embedded in another archive, ''[[resource.1]]''. The files in this archive are LZH-encoded using the lh5 algorithm. If you can't or don't want to run the DOS/Win32 Quake installer program it comes with, then you'll need a compatible extractor program to get ''pak0.pak'' out of the ''resource.1'' archive.

The ID1 ''pak0.pak'' contains the following folders &amp; files:

* ''default.cfg''
* ''demo1.dem''
* ''demo2.dem''
* ''end1.bin''
* ''gfx.wad''
* ''progs.dat''
* ''quake.rc''
* gfx/
** ''bigbox.lmp''
** ''box_bl.lmp''
** ... ''TODO: fill this in.''
* maps/
** ... ''TODO: fill this in.''
* progs/
** ... ''TODO: fill this in.''
* sound/
** ... ''TODO: fill this in.''

{{todo|todo=Multiple to do items listed above, detail out the contents of various pak files}}</text>
      <sha1>62n9b31z5jebgek3zfy7nyoyp7m8j0a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2240</id>
      <parentid>2231</parentid>
      <timestamp>2013-03-26T13:51:58Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>added crazy list of all files in pak0.pak</comment>
      <text xml:space="preserve" bytes="33476">The '''''pak0.pak''''' file that comes with Quake is required by all Quake [[engines]]. It contains the maps, models, programs, sounds, and skins required to play Quake Episode 1, ''Dimension of the Doomed''. It is expected to be in the ID1 subfolder of the Quake root folder.

[[PAK file]]s are typically named ''pak0.pak'', ''pak1.pak'', ''pak2.pak'', and so on. Quake mission packs and other Quake-based games often have their own ''pak0.pak'' files, which live in a different folder, not the ID1 folder.

The ID1 ''pak0.pak'' is distributed with both the shareware and the registered/commercial editions of Quake.

In some editions, including the downloadable shareware (''quake106.zip'') from id Software, ''pak0.pak'' is embedded in another archive, ''[[resource.1]]''. The files in this archive are LZH-encoded using the lh5 algorithm. If you can't or don't want to run the DOS/Win32 Quake installer program it comes with, then you'll need a compatible extractor program to get ''pak0.pak'' out of the ''resource.1'' archive.

The ID1 ''pak0.pak'' with the md5sum 5906e5998fc3d896ddaf5e6a62e03abb contains the following folders &amp; files:
&lt;tt&gt;
{| class=&quot;wikitable&quot;
|-
! Path !! Size !! md5
|-
| default.cfg  ||style=text-align:right|  1914 || fc989b37572fae074e8ffda0ce4d5297
|-
| demo1.dem  ||style=text-align:right|  184471 || 85ec0141ab24d9732e487d1aafa791f0
|-
| demo2.dem  ||style=text-align:right|  152705 || fa5c3daf7a57954cd95f94b698a7e420
|-
| demo3.dem  ||style=text-align:right|  197679 || 691f37e5715ea2863c1d8092a6429824
|-
| end1.bin  ||style=text-align:right|  4000 || 92ae51961ec2f429dfe9bea1138fbd5d
|-
| gfx/bigbox.lmp  ||style=text-align:right|  5192 || e597771ac6149b2b071ebfd24981ea04
|-
| gfx/box_bl.lmp  ||style=text-align:right|  72 || 5b094c37c2c1c2eebe37f84117dea182
|-
| gfx/box_bm.lmp  ||style=text-align:right|  136 || 44621236738e2bf8d669e53dca887278
|-
| gfx/box_br.lmp  ||style=text-align:right|  72 || 86597d5325b472caf5644644033e5cab
|-
| gfx/box_ml.lmp  ||style=text-align:right|  72 || adcea286ba0ac01084fd0c131b16ffdd
|-
| gfx/box_mm2.lmp  ||style=text-align:right|  136 || b850bcec189d909e7a0f796111a11249
|-
| gfx/box_mm.lmp  ||style=text-align:right|  136 || 700b4884b1a3c6aa7356a43014261866
|-
| gfx/box_mr.lmp  ||style=text-align:right|  72 || e30d9ea783ef7dd50101682f03ba40d7
|-
| gfx/box_tl.lmp  ||style=text-align:right|  72 || 3903d3d814e37c55790ac0ccfef2b925
|-
| gfx/box_tm.lmp  ||style=text-align:right|  136 || 7cb85ccbf8e7d2532da2a839a7cef348
|-
| gfx/box_tr.lmp  ||style=text-align:right|  72 || 5c5e72746af821a4cf8437d8fecc53c7
|-
| gfx/colormap.lmp  ||style=text-align:right|  16385 || 0d793b70bffafbd666fc5c88d6e15e9d
|-
| gfx/complete.lmp  ||style=text-align:right|  4616 || db6a00dfbe2c62a43c261e5622297c4a
|-
| gfx/conback.lmp  ||style=text-align:right|  64008 || 9eb6f9c47870bf42985d9382958a5c12
|-
| gfx/dim_drct.lmp  ||style=text-align:right|  3352 || 50ea11fe8c4d9db92863bdcd03b89df5
|-
| gfx/dim_ipx.lmp  ||style=text-align:right|  3352 || 0bef9943487f0611225bf0a5c0fe5dd4
|-
| gfx/dim_modm.lmp  ||style=text-align:right|  3352 || 3288f03144f06b95cadafa9458a77b1d
|-
| gfx/dim_mult.lmp  ||style=text-align:right|  3352 || 348b7369227f2d7e9d0daccbf6c9344d
|-
| gfx/dim_tcp.lmp  ||style=text-align:right|  3352 || 7dc8bbb01d7c90cd51c28da0ff6ed900
|-
| gfx/finale.lmp  ||style=text-align:right|  6920 || b6e49409d344e0344273d86ea33fe35f
|-
| gfx/help0.lmp  ||style=text-align:right|  64008 || b392ac30ad49252b51ec934ed855c20f
|-
| gfx/help1.lmp  ||style=text-align:right|  64008 || 857543c69245117a606044ea63adac9a
|-
| gfx/help2.lmp  ||style=text-align:right|  64008 || 882dd5920ea9c19f637f32084de9788a
|-
| gfx/help3.lmp  ||style=text-align:right|  64008 || a89d169524920d896128009467deebfc
|-
| gfx/help4.lmp  ||style=text-align:right|  64008 || c72d67c84ae6b403fae5f08d3e5c3bc6
|-
| gfx/help5.lmp  ||style=text-align:right|  64008 || 12203d7cdec35c4f51622dd90ec92093
|-
| gfx/inter.lmp  ||style=text-align:right|  23048 || f6eabe0d742380c7b47a9ee44170993d
|-
| gfx/loading.lmp  ||style=text-align:right|  3464 || 3249bc994266529a1748c06bfbb24bfa
|-
| gfx/mainmenu.lmp  ||style=text-align:right|  26888 || 8122e2a0b8888f9d1ebef149551b6434
|-
| gfx/menudot1.lmp  ||style=text-align:right|  392 || bfdb08d84d580abcfbacc1c9abd62bfb
|-
| gfx/menudot2.lmp  ||style=text-align:right|  392 || 6c6d2176e00edbe530bb1db118aaa6dc
|-
| gfx/menudot3.lmp  ||style=text-align:right|  392 || 2527a05f6162efb3e4bc5311d9e010d5
|-
| gfx/menudot4.lmp  ||style=text-align:right|  392 || 90ea6be033b39b139b3779932d266f33
|-
| gfx/menudot5.lmp  ||style=text-align:right|  392 || c9beb9600c35e458d0f83b6cf1e1c692
|-
| gfx/menudot6.lmp  ||style=text-align:right|  392 || 31b9a6ec1d12a2bd56b955185a9e72d3
|-
| gfx/menuplyr.lmp  ||style=text-align:right|  2696 || 9eebe617ff51c4ce43f85ca1a6920d5b
|-
| gfx/mp_menu.lmp  ||style=text-align:right|  14856 || c6416b8f7f5262a5a19b9ce4be1fd9ce
|-
| gfx/netmen1.lmp  ||style=text-align:right|  3352 || 5bc6a8d8cfdfd7e940e933812954367a
|-
| gfx/netmen2.lmp  ||style=text-align:right|  3352 || c8aafb649a653e90fc5eb7b7a2b3ca2e
|-
| gfx/netmen3.lmp  ||style=text-align:right|  3352 || 11c9372d0e64057a1ec8251f596b820d
|-
| gfx/netmen4.lmp  ||style=text-align:right|  3352 || 74ec672b1312699be2eeaf25a68e4582
|-
| gfx/netmen5.lmp  ||style=text-align:right|  3352 || 231f8a9ea4ba364f517db0e9f7f1ba72
|-
| gfx/palette.lmp  ||style=text-align:right|  768 || 79bc149d4f2fb0bd68cd8400a3fd87d4
|-
| gfx/pause.lmp  ||style=text-align:right|  3080 || 5aa67f927719e4a9eb3e020e75fea969
|-
| gfx/p_load.lmp  ||style=text-align:right|  2504 || 27fe08071058385529b0b8ad746421e7
|-
| gfx/p_multi.lmp  ||style=text-align:right|  5192 || 5a307c7d11da20a4772ad9c00b9f4309
|-
| gfx/p_option.lmp  ||style=text-align:right|  3464 || 83a3bf4459bce3fe85857a0aa647b90a
|-
| gfx/p_save.lmp  ||style=text-align:right|  2120 || 0d2bb5fa5524e0180a85bf273094cd1f
|-
| gfx/qplaque.lmp  ||style=text-align:right|  4616 || f4de79557c75e26b85ea84fb6029a5f3
|-
| gfx/ranking.lmp  ||style=text-align:right|  4040 || 919b13d1f7fdd0082ec0f94699f3b681
|-
| gfx/sell.lmp  ||style=text-align:right|  64008 || 878db3866e8b38c5b8d951aef516358c
|-
| gfx/sp_menu.lmp  ||style=text-align:right|  14856 || f624aa79778970ecb8ef518b5ab435f6
|-
| gfx/ttl_cstm.lmp  ||style=text-align:right|  4424 || 4ee84e0e7fa93f0e93d26efb1e726a4d
|-
| gfx/ttl_main.lmp  ||style=text-align:right|  2312 || 07e1c8e189e2463befcfc44f5ecf8dcb
|-
| gfx/ttl_sgl.lmp  ||style=text-align:right|  3080 || 25d5360228da738f091063eaeb7c6aa8
|-
| gfx/vidmodes.lmp  ||style=text-align:right|  5192 || 18a97f403057777f262188903f485fe8
|-
| gfx.wad  ||style=text-align:right|  112828 || cde5b5890c8902c02a2f271abe8f4a1f
|-
| maps/b_batt0.bsp  ||style=text-align:right|  5044 || 00bc989f4c8d2570a2826a63c7356a27
|-
| maps/b_batt1.bsp  ||style=text-align:right|  4620 || 555bc0cb0b5c2ad2ed0110f307e70679
|-
| maps/b_bh100.bsp  ||style=text-align:right|  8820 || 62f78bb5143265f037b79ddd077c50ed
|-
| maps/b_bh10.bsp  ||style=text-align:right|  3936 || e80cde9f185612f669fc100f825ca84f
|-
| maps/b_bh25.bsp  ||style=text-align:right|  8872 || 032d70dbf8669b3627b82b41f31488bd
|-
| maps/b_explob.bsp  ||style=text-align:right|  10220 || d8c9db3cfa0264678afc580143f665ea
|-
| maps/b_nail0.bsp  ||style=text-align:right|  5044 || c8d7ec0bdee74e0c1e69e8dbe939117d
|-
| maps/b_nail1.bsp  ||style=text-align:right|  5044 || ea08b2bd6aa19ece0307f75c491e5d24
|-
| maps/b_rock0.bsp  ||style=text-align:right|  2956 || 19ce64cd248a4459bf37b45e6e7c1219
|-
| maps/b_rock1.bsp  ||style=text-align:right|  2944 || b4cdb75094cd7218ed2b0475aefabe80
|-
| maps/b_shell0.bsp  ||style=text-align:right|  5044 || 574824b3c52661959d633a76dc823859
|-
| maps/b_shell1.bsp  ||style=text-align:right|  5044 || dc8b8dcb490e204e615b2b9cdc673296
|-
| maps/e1m1.bsp  ||style=text-align:right|  1365176 || 84cae48010619bcc945426b91bc03ade
|-
| maps/e1m2.bsp  ||style=text-align:right|  1332228 || caff91afbe41f3eac4dda65cee0083c9
|-
| maps/e1m3.bsp  ||style=text-align:right|  1249944 || f20eaa5692e94ab889c4ade9e1c116c7
|-
| maps/e1m4.bsp  ||style=text-align:right|  1411452 || 29419f05ef647f83d0482502bb3f84f8
|-
| maps/e1m5.bsp  ||style=text-align:right|  1324060 || afd98cc890d748986186951b32fc9fcb
|-
| maps/e1m6.bsp  ||style=text-align:right|  1065080 || ec178e54ff68c4d8cf71e26775b2eb2d
|-
| maps/e1m7.bsp  ||style=text-align:right|  607420 || 0c1f55455e0f957291e21d211b689718
|-
| maps/e1m8.bsp  ||style=text-align:right|  924116 || 18c7ab2f922d5d586150afbc27c323a4
|-
| maps/start.bsp  ||style=text-align:right|  1433792 || 61a57bb4ca36368478f02b142d1b5291
|-
| progs/armor.mdl  ||style=text-align:right|  44076 || ca060166d7e4e4686995f05645dde593
|-
| progs/backpack.mdl  ||style=text-align:right|  19348 || 315b4ef42fb035aa3318e8d2d61961ce
|-
| progs/bolt2.mdl  ||style=text-align:right|  11860 || f59ce07cfbe01fcfc578258c573d2c31
|-
| progs/bolt3.mdl  ||style=text-align:right|  11860 || ff87579a424faa59ca2695b7434ea488
|-
| progs/bolt.mdl  ||style=text-align:right|  20644 || a176903954e9d8c7ab629f92784546c2
|-
| progs/boss.mdl  ||style=text-align:right|  211836 || 25da3b2bc30677e32ee3a3a878a4d3af
|-
| progs.dat  ||style=text-align:right|  413116 || 0c3ef3625df5883536f8da42c78b673a
|-
| progs/demon.mdl  ||style=text-align:right|  102120 || 4c73786e7cfb2083ca38cbc983cd6c4b
|-
| progs/dog.mdl  ||style=text-align:right|  146056 || e727fbc39acc652f812972612ce37565
|-
| progs/end1.mdl  ||style=text-align:right|  20820 || 67c0fcab33d3772c00bb462b0e749275
|-
| progs/eyes.mdl  ||style=text-align:right|  4372 || ed72f64a17c6909b2cb3034a734bca97
|-
| progs/flame2.mdl  ||style=text-align:right|  64572 || f2c8f8950ebd7a0edded6247655d325b
|-
| progs/flame.mdl  ||style=text-align:right|  46364 || 8593c05374d84354d4444c218e86fdb8
|-
| progs/gib1.mdl  ||style=text-align:right|  5716 || f5c5b799e895dc03036522a487e99913
|-
| progs/gib2.mdl  ||style=text-align:right|  16228 || cfa9e97a3542852418123e0bb12e4f86
|-
| progs/gib3.mdl  ||style=text-align:right|  22228 || d73be7b2881e0a5aacf2b332ac29086f
|-
| progs/g_light.mdl  ||style=text-align:right|  50276 || 61bba06ec3804b7f355a62fd4585ad8f
|-
| progs/g_nail2.mdl  ||style=text-align:right|  30720 || ed6d7bb5ff050ad5f2bf4be7739a16a5
|-
| progs/g_nail.mdl  ||style=text-align:right|  34700 || e2959ca741c764dd42025ef531a1b554
|-
| progs/grenade.mdl  ||style=text-align:right|  2244 || f492d6257c216306983a72f41db0d891
|-
| progs/g_rock2.mdl  ||style=text-align:right|  40756 || 68c047c97bab89afe2cb69e65b7c62e1
|-
| progs/g_rock.mdl  ||style=text-align:right|  48244 || 61346f842944795e0821e31e3d61b427
|-
| progs/g_shot.mdl  ||style=text-align:right|  32916 || 7facfec1a3cfb892cce871f398e9cb6b
|-
| progs/h_demon.mdl  ||style=text-align:right|  34884 || 5253a0ea93d9624d73fb984ee339b52f
|-
| progs/h_dog.mdl  ||style=text-align:right|  24436 || a0b5f87522b3a769548c46cf3bb4223e
|-
| progs/h_guard.mdl  ||style=text-align:right|  5428 || 18a629b53b87392030df63b7806eb833
|-
| progs/h_knight.mdl  ||style=text-align:right|  7156 || 46a03fa72b0cdebcf58045aba2fafc13
|-
| progs/h_ogre.mdl  ||style=text-align:right|  14900 || 14eb06611c769e254d0531c05919bdf5
|-
| progs/h_player.mdl  ||style=text-align:right|  14708 || bf1773df7d3e19c5b211a1ee408f6b05
|-
| progs/h_shams.mdl  ||style=text-align:right|  37060 || ff1e04e18c57667991341a011fb6c363
|-
| progs/h_wizard.mdl  ||style=text-align:right|  14804 || 4bc6be40128f313cf9ad06c347310735
|-
| progs/h_zombie.mdl  ||style=text-align:right|  4484 || 0fdef7f7cd05a3209e0a163e87f69f8b
|-
| progs/invisibl.mdl  ||style=text-align:right|  7092 || 1e87d86af02e69db9c9f27f5fddc7a47
|-
| progs/invulner.mdl  ||style=text-align:right|  23920 || 8c8d83e4d50c3282d009b333a1280422
|-
| progs/knight.mdl  ||style=text-align:right|  101404 || 5328915db5c53e85cf75d46e7b747fb9
|-
| progs/lavaball.mdl  ||style=text-align:right|  8788 || 92af53d2145681e37877dbc1d12801b2
|-
| progs/m_g_key.mdl  ||style=text-align:right|  12820 || 192c2650a115c91706f6fa8fe68beb45
|-
| progs/missile.mdl  ||style=text-align:right|  57796 || 47f19f9e34954b93443c9759dd2e7ba0
|-
| progs/m_s_key.mdl  ||style=text-align:right|  12820 || 20837376b391cdd5c92e57b84e05687f
|-
| progs/ogre.mdl  ||style=text-align:right|  162036 || fbb592ca3788a576dd2f31fcf8c80fab
|-
| progs/player.mdl  ||style=text-align:right|  191852 || 405cef9a10d96cdabffb5e91312f8e5c
|-
| progs/quaddama.mdl  ||style=text-align:right|  39992 || 00b177ff272a4779097ea08344da8aff
|-
| progs/s_bubble.spr  ||style=text-align:right|  588 || 7c0887630ed468205292d8cb7abcae93
|-
| progs/s_explod.spr  ||style=text-align:right|  18972 || 766c6a92c26b54f68f7ff87c90d71cf2
|-
| progs/shambler.mdl  ||style=text-align:right|  98556 || 9b09375a0f614dc4081e363cc34f1185
|-
| progs/s_light.mdl  ||style=text-align:right|  27596 || ee6649ea5673989f3aa06213a8d65f76
|-
| progs/s_light.spr  ||style=text-align:right|  1080 || aff44ba238f4e1d0d504d6f9700aadb4
|-
| progs/soldier.mdl  ||style=text-align:right|  146288 || 5b6c30a984872b4273dd5861412d35c5
|-
| progs/spike.mdl  ||style=text-align:right|  1684 || be4cb73125f939284376080acc9887dd
|-
| progs/s_spike.mdl  ||style=text-align:right|  1684 || ebb1d58242b64a703623c8a33fcbd9e6
|-
| progs/suit.mdl  ||style=text-align:right|  51236 || 882a61f5eea7f9cdbc04800b963cef85
|-
| progs/v_axe.mdl  ||style=text-align:right|  57908 || 577dadcca2700068995c808dc7dec76f
|-
| progs/v_light.mdl  ||style=text-align:right|  56204 || 68733d4c690de88b5c3ba33e52be1c15
|-
| progs/v_nail2.mdl  ||style=text-align:right|  68732 || aacd1002ab02662cc1d3ff46885b553e
|-
| progs/v_nail.mdl  ||style=text-align:right|  54472 || ec9ba028b346da2f9674c2a521ff0c2f
|-
| progs/v_rock2.mdl  ||style=text-align:right|  58188 || 96edf1a3c7629987c200361523f780d7
|-
| progs/v_rock.mdl  ||style=text-align:right|  58548 || 7bea46b2a75fd7cff2fb99420e4c4e25
|-
| progs/v_shot2.mdl  ||style=text-align:right|  50816 || 922b3b687766ae0d7aeb73d44dec7035
|-
| progs/v_shot.mdl  ||style=text-align:right|  43852 || 1fd140b6856843e83cd9bf3966f5d7dd
|-
| progs/w_g_key.mdl  ||style=text-align:right|  7252 || c5c5f0d14b022f57294ad9aded318250
|-
| progs/wizard.mdl  ||style=text-align:right|  64472 || bf60986594f045e60e8aa6339d553ee7
|-
| progs/w_s_key.mdl  ||style=text-align:right|  7252 || ec02314a7d12439d36b4eb2dd0a641a8
|-
| progs/w_spike.mdl  ||style=text-align:right|  14336 || 8cf9245df2164e8062b01a220b508d6b
|-
| progs/zombie.mdl  ||style=text-align:right|  186084 || a923b1d03b9d237dd5ead9bd56acc900
|-
| progs/zom_gib.mdl  ||style=text-align:right|  10196 || cf42c938caa5b19f719d1f110b1dc6d4
|-
| quake.rc  ||style=text-align:right|  293 || 411d42958aaeae141813f9ebfcf5233f
|-
| sound/ambience/buzz1.wav  ||style=text-align:right|  36308 || 346a00c795c6f1f1338ade6fc350b3fe
|-
| sound/ambience/comp1.wav  ||style=text-align:right|  62734 || f91a1120de804f7cd4dbba4f12c748e9
|-
| sound/ambience/drip1.wav  ||style=text-align:right|  137736 || 2306a76162eeda3d0812c516bc99aa7a
|-
| sound/ambience/drone6.wav  ||style=text-align:right|  18522 || 322853ddb42ad2a205579b5cca8e2e8c
|-
| sound/ambience/fire1.wav  ||style=text-align:right|  24064 || 610d3985ed8133988e8de3bec2b9cbbe
|-
| sound/ambience/fl_hum1.wav  ||style=text-align:right|  50154 || e4628499702e004c4bacd282a3ecb8c0
|-
| sound/ambience/hum1.wav  ||style=text-align:right|  40166 || 486bfa737c35b0c9dda57cbee2a540af
|-
| sound/ambience/suck1.wav  ||style=text-align:right|  110392 || 2e99e4d1fe1501d5191c8157d3063cb6
|-
| sound/ambience/swamp1.wav  ||style=text-align:right|  68524 || 29ffb678d78997eb6c227677c86ea4f8
|-
| sound/ambience/swamp2.wav  ||style=text-align:right|  68526 || 356aa1e875da846e72d8f17bbb699a5b
|-
| sound/ambience/thunder1.wav  ||style=text-align:right|  41492 || cefd6ced4b5bc79fcece1003238566f6
|-
| sound/ambience/water1.wav  ||style=text-align:right|  55784 || 6eeaae0a3450652d2be0782895297ee4
|-
| sound/ambience/wind2.wav  ||style=text-align:right|  28610 || 030cf8dd2b00a12454b5b35a89d03914
|-
| sound/ambience/windfly.wav  ||style=text-align:right|  22140 || c7be01e6d324e66883f70aa0072a99b0
|-
| sound/boss1/death.wav  ||style=text-align:right|  27600 || 43469b1acd35b67107da5da82e1df911
|-
| sound/boss1/out1.wav  ||style=text-align:right|  50344 || 847a6f971f6905dfaffd70b30d18a4b1
|-
| sound/boss1/pain.wav  ||style=text-align:right|  17700 || 49112740c0ff421f9272b9e8efc748cd
|-
| sound/boss1/sight1.wav  ||style=text-align:right|  24768 || 427dd600e6b28c9402212adcc5d652c7
|-
| sound/boss1/throw.wav  ||style=text-align:right|  11526 || 9b6e9ff2c8df448f7fd4b5315e60ddda
|-
| sound/buttons/airbut1.wav  ||style=text-align:right|  10672 || 9d2e14e7176842a0dce909a43d38873d
|-
| sound/buttons/switch02.wav  ||style=text-align:right|  3746 || d2e9cba3a353edc65115f6f5c574403c
|-
| sound/buttons/switch04.wav  ||style=text-align:right|  3666 || ff47857a58d3faefb2b94a37d7ba4f26
|-
| sound/buttons/switch21.wav  ||style=text-align:right|  6318 || 3605b0d061a9baf185c6ab7614534531
|-
| sound/demon/ddeath.wav  ||style=text-align:right|  9140 || 62a48dcd405ca55c9ce18497e36faa0e
|-
| sound/demon/dhit2.wav  ||style=text-align:right|  7142 || 9e741696e4d0d66e30e718fc70ec186e
|-
| sound/demon/djump.wav  ||style=text-align:right|  8494 || 791ac9d6b6593808316145443cb7e7a0
|-
| sound/demon/dland2.wav  ||style=text-align:right|  4400 || db14c7b01838f826b7a712075f9026fd
|-
| sound/demon/dpain1.wav  ||style=text-align:right|  6282 || 5e6c485878393c9bebb0d0e6659bc479
|-
| sound/demon/idle1.wav  ||style=text-align:right|  9098 || 7a83f8caf3d5b1172a7dc5afdc942988
|-
| sound/demon/sight2.wav  ||style=text-align:right|  8804 || 65171c355c22a5069520b0881677ae3c
|-
| sound/dog/dattack1.wav  ||style=text-align:right|  8154 || 0c47c9d4aaae0bf3159a288b674f4a35
|-
| sound/dog/ddeath.wav  ||style=text-align:right|  14912 || b0e7760b1d7286a028ff9773f6802958
|-
| sound/dog/dpain1.wav  ||style=text-align:right|  7240 || 28e5ab93b41e13e2916433283a5d1a46
|-
| sound/dog/dsight.wav  ||style=text-align:right|  6722 || 0edc290765bac1fb4fe03ca55bc7c225
|-
| sound/dog/idle.wav  ||style=text-align:right|  6870 || 42bd6026ff32bd94523ad9f8fe8362cc
|-
| sound/doors/airdoor1.wav  ||style=text-align:right|  13654 || 9b91930e8c2fdece31a2362296891122
|-
| sound/doors/airdoor2.wav  ||style=text-align:right|  8594 || 29fd823d1c14ca42a9a89c716b26f4cd
|-
| sound/doors/basesec1.wav  ||style=text-align:right|  13930 || eb2363fed42724f55e8f55f96c335bcf
|-
| sound/doors/basesec2.wav  ||style=text-align:right|  10238 || 8d163a56607c9cf64a270a156c1c5cef
|-
| sound/doors/basetry.wav  ||style=text-align:right|  10518 || a5108d5c51281ab55c0baf884cbe8cbe
|-
| sound/doors/baseuse.wav  ||style=text-align:right|  16486 || f43fee91efe813a5eb34e9d72918fdb9
|-
| sound/doors/ddoor1.wav  ||style=text-align:right|  7738 || dff86a26139cdd49a193d5ed7ebf6ae1
|-
| sound/doors/ddoor2.wav  ||style=text-align:right|  5904 || 4a9d0b0825d0302ce465569d1e35fbcf
|-
| sound/doors/doormv1.wav  ||style=text-align:right|  14036 || 3fd379aec80a2ad8105c0c89ba5b40e6
|-
| sound/doors/drclos4.wav  ||style=text-align:right|  12814 || 83df1865a0c9fa5d02c2f137564c57de
|-
| sound/doors/hydro1.wav  ||style=text-align:right|  11094 || b1703980a20e624bc3366ccf55ca617e
|-
| sound/doors/hydro2.wav  ||style=text-align:right|  10700 || b1866f5b3950788ccf4206444ab64bc7
|-
| sound/doors/latch2.wav  ||style=text-align:right|  7338 || ad2378ca21a0ca529df328261e07aed5
|-
| sound/doors/medtry.wav  ||style=text-align:right|  7828 || ebb536bec2cdfd22c25b35793c055339
|-
| sound/doors/meduse.wav  ||style=text-align:right|  10718 || 4522aada194b23eb33b541cbcc755cf6
|-
| sound/doors/runetry.wav  ||style=text-align:right|  13524 || c433bae9e2ab508712f87dc2cacc82c8
|-
| sound/doors/runeuse.wav  ||style=text-align:right|  17364 || b4bcfd525a26f5b5ecc9d392430d9079
|-
| sound/doors/stndr1.wav  ||style=text-align:right|  12620 || 5bae2183885e18d65d69624e85249fd9
|-
| sound/doors/stndr2.wav  ||style=text-align:right|  11470 || f43a75c917effff09ef7be8a321c8b49
|-
| sound/doors/winch2.wav  ||style=text-align:right|  14872 || a4edffdfede7dbaed37db526c26e2b6d
|-
| sound/hknight/hit.wav  ||style=text-align:right|  6260 || fece24e2548f1d769e8fce39a5c87d01
|-
| sound/items/armor1.wav  ||style=text-align:right|  7714 || 186d29f2baf35b8c280bc97754606fad
|-
| sound/items/damage2.wav  ||style=text-align:right|  33012 || 14e53b7617ffe315a7c3f8d89652e51c
|-
| sound/items/damage3.wav  ||style=text-align:right|  12894 || baf754aec7ed4baba16760ac85513184
|-
| sound/items/damage.wav  ||style=text-align:right|  23374 || 8cde8b9278ca4922a4ec7ead6e5ee01b
|-
| sound/items/health1.wav  ||style=text-align:right|  7958 || 52a2c4f808db4edd8393de0de618c91f
|-
| sound/items/inv1.wav  ||style=text-align:right|  13728 || 5850cab55d6197d0e76d9f0a22ba10be
|-
| sound/items/inv2.wav  ||style=text-align:right|  33216 || 4edcd38a2c6adc5305636dd7afd5ef60
|-
| sound/items/inv3.wav  ||style=text-align:right|  33320 || 325c268be05b42a019ccb92e6993ab9e
|-
| sound/items/itembk2.wav  ||style=text-align:right|  9910 || 270c688b3cb884f5d4e5ffd8ccc934a1
|-
| sound/items/protect2.wav  ||style=text-align:right|  34012 || 25627a4bd2b4c6054cfd2fc4bf69ddc2
|-
| sound/items/protect3.wav  ||style=text-align:right|  23364 || 7b9374d67f6d59e524bba2af236ca30a
|-
| sound/items/protect.wav  ||style=text-align:right|  22536 || d839d5a84f811ce8a0e28616891bf1a7
|-
| sound/items/r_item1.wav  ||style=text-align:right|  6822 || 3fc0d0ae4a71c9fbfe548f38626c6a08
|-
| sound/items/r_item2.wav  ||style=text-align:right|  7448 || 384ffefe795d99df75f381596a0f1976
|-
| sound/items/suit2.wav  ||style=text-align:right|  33254 || 0a9d2766a5b805cb5794f9bea57e6585
|-
| sound/items/suit.wav  ||style=text-align:right|  15854 || da413f34023d219f1e34fde50a037be0
|-
| sound/knight/idle.wav  ||style=text-align:right|  11064 || 1b5c3981bee078318af346d8fe8090b9
|-
| sound/knight/kdeath.wav  ||style=text-align:right|  10688 || 11a96f48a8f2433c23beae299c8fb96e
|-
| sound/knight/khurt.wav  ||style=text-align:right|  5586 || 32c9f48dd4a6a87752aedf56fe8de668
|-
| sound/knight/ksight.wav  ||style=text-align:right|  13514 || eb75b4af348c88e84d8c87c19d5976fa
|-
| sound/knight/sword1.wav  ||style=text-align:right|  2306 || 93045b5f3178413dc6b01ec2869d1f73
|-
| sound/knight/sword2.wav  ||style=text-align:right|  2784 || 82d1a7c263cd3df7b060dee2f7f8b1fd
|-
| sound/misc/h2ohit1.wav  ||style=text-align:right|  12972 || 49ecb03f4f10862453656a67598f8b8a
|-
| sound/misc/medkey.wav  ||style=text-align:right|  10020 || 0e3ae5626a47d81e4166539e355e31bb
|-
| sound/misc/menu1.wav  ||style=text-align:right|  5738 || 12c36546601c385bc47c9ca9420b7eee
|-
| sound/misc/menu2.wav  ||style=text-align:right|  10672 || 39b01ea6feb3ec8dbd6d8ee3e5e966c4
|-
| sound/misc/menu3.wav  ||style=text-align:right|  3010 || 4a03dc2fd56831b855dab761eac4f7de
|-
| sound/misc/null.wav  ||style=text-align:right|  1244 || 811989e09124f54cb27fe6154b0f1018
|-
| sound/misc/outwater.wav  ||style=text-align:right|  5018 || 35732412412ddb5ed418633bb0123bbe
|-
| sound/misc/power.wav  ||style=text-align:right|  19832 || 9f2c3a18d9fc8d9cecfac6db3aad6bc6
|-
| sound/misc/r_tele1.wav  ||style=text-align:right|  8036 || c2194171b4c446e136ed7514fbb098a5
|-
| sound/misc/r_tele2.wav  ||style=text-align:right|  17324 || 0ce662ac90fb3658d69320d1be4025c1
|-
| sound/misc/r_tele3.wav  ||style=text-align:right|  18016 || 122ef44813edcfe7391578fd29e729d2
|-
| sound/misc/r_tele4.wav  ||style=text-align:right|  9068 || 0097b5747ccc70d5b12fc6838aff02c2
|-
| sound/misc/r_tele5.wav  ||style=text-align:right|  22042 || a82334cbb66d12f28cce9e71c90ea50b
|-
| sound/misc/runekey.wav  ||style=text-align:right|  14578 || 6b21a2e5878011da50fdee0a301d3e34
|-
| sound/misc/secret.wav  ||style=text-align:right|  6610 || a02ceefcc24b1ebf5c164a1e1acfb05f
|-
| sound/misc/talk.wav  ||style=text-align:right|  1810 || d5b25d4df59d92ac5016e88689ea60c1
|-
| sound/misc/trigger1.wav  ||style=text-align:right|  20230 || dc927c8a1d0a9bd59fbc5dd91ae1d812
|-
| sound/misc/water1.wav  ||style=text-align:right|  3926 || d8291c762acb1edf24927fdcc0f6a6cd
|-
| sound/misc/water2.wav  ||style=text-align:right|  3340 || 049e8e7e7b30d4d8038afb7248bdd977
|-
| sound/ogre/ogdrag.wav  ||style=text-align:right|  12396 || 658587dc89aaefae5ca3f058f7ff4227
|-
| sound/ogre/ogdth.wav  ||style=text-align:right|  13892 || de98e7bb9e70586edddd3308cfded3db
|-
| sound/ogre/ogidle2.wav  ||style=text-align:right|  11254 || 196ae9c33a4311160e1d5f3da878ab09
|-
| sound/ogre/ogidle.wav  ||style=text-align:right|  12894 || 177c829840a87c885bbc8951e7ce962e
|-
| sound/ogre/ogpain1.wav  ||style=text-align:right|  7898 || ac6d133d7720c12df49813fe10e683b5
|-
| sound/ogre/ogsawatk.wav  ||style=text-align:right|  16154 || 7257bdfd014bb61d778b8f88cb65d560
|-
| sound/ogre/ogwake.wav  ||style=text-align:right|  19356 || 3296459e495c4c12b31179d4eeffac19
|-
| sound/plats/medplat1.wav  ||style=text-align:right|  16378 || b73215aa6627c8b5b90fce8d260d48d0
|-
| sound/plats/medplat2.wav  ||style=text-align:right|  7338 || 1fc6c3772917a1a8155d04fa52e17005
|-
| sound/plats/plat1.wav  ||style=text-align:right|  20248 || 5d43ed85d896ba926f459e06ba6635d5
|-
| sound/plats/plat2.wav  ||style=text-align:right|  7338 || 49d7ab0fd726cd652eb6e5756fce61b9
|-
| sound/plats/train1.wav  ||style=text-align:right|  21430 || b589ae8262046361d9dca39d6b8f693a
|-
| sound/plats/train2.wav  ||style=text-align:right|  5870 || 640017e1b870d643e3bca29d499c72ee
|-
| sound/player/axhit1.wav  ||style=text-align:right|  6906 || 149b2371334da318386325182924eaca
|-
| sound/player/axhit2.wav  ||style=text-align:right|  2434 || fc01909318455f5310efa2457a370897
|-
| sound/player/death1.wav  ||style=text-align:right|  10170 || ba005f5488d4ee78dabf613a03f33a5f
|-
| sound/player/death2.wav  ||style=text-align:right|  8026 || 20477d2e7c84aac1bef95d32c9c702dd
|-
| sound/player/death3.wav  ||style=text-align:right|  10918 || 7b206ba8e1fa28d8605b50e3f3200f11
|-
| sound/player/death4.wav  ||style=text-align:right|  14126 || 1b0f27f4d41b748d3cc5c3d56bd917f8
|-
| sound/player/death5.wav  ||style=text-align:right|  14946 || 7efe84195cfa97515aad2d7f96f25346
|-
| sound/player/drown1.wav  ||style=text-align:right|  8908 || 732f0416af6990e028110380bcb36f0d
|-
| sound/player/drown2.wav  ||style=text-align:right|  3114 || 29ee1f287879acce29b15d4722668bc2
|-
| sound/player/gasp1.wav  ||style=text-align:right|  8702 || b06cbc370c8c2c163dc4d487e8b673c7
|-
| sound/player/gasp2.wav  ||style=text-align:right|  13134 || 30aece9d8779764620c7f866bfb06edb
|-
| sound/player/gib.wav  ||style=text-align:right|  14424 || 26fa9942078125388f34b71546615068
|-
| sound/player/h2odeath.wav  ||style=text-align:right|  18104 || 73b0f4dfae07f6e49112cadfe202735c
|-
| sound/player/h2ojump.wav  ||style=text-align:right|  11438 || cd421b96410971bb1a4f21d3936a3805
|-
| sound/player/inh2o.wav  ||style=text-align:right|  11340 || d4c1a27c4d07e8dfdf18a4b1a880c610
|-
| sound/player/inlava.wav  ||style=text-align:right|  10958 || c37875a082900716b7af88d2d990f55c
|-
| sound/player/land2.wav  ||style=text-align:right|  6204 || 6ba534256a779d66d9d9dabb90e63c8b
|-
| sound/player/land.wav  ||style=text-align:right|  2434 || e34328a40358d98f0f95403b9e27ec1e
|-
| sound/player/lburn1.wav  ||style=text-align:right|  6682 || 3c447c72385defe97c060771077d8ba0
|-
| sound/player/lburn2.wav  ||style=text-align:right|  6076 || 6849ee8dbd91ec82ece016fbd39b0a5c
|-
| sound/player/pain1.wav  ||style=text-align:right|  3394 || d7ac9df7540b791f952ca2a681c0265b
|-
| sound/player/pain2.wav  ||style=text-align:right|  2710 || 513e054b64d4fb61f31384d59e123020
|-
| sound/player/pain3.wav  ||style=text-align:right|  4854 || aafc61ad4e16cc5cdd2db2100796b494
|-
| sound/player/pain4.wav  ||style=text-align:right|  4840 || f655ef2045bc55473303b27546aa6fc0
|-
| sound/player/pain5.wav  ||style=text-align:right|  8020 || f8551a73cb89396042687baa8c68b5c2
|-
| sound/player/pain6.wav  ||style=text-align:right|  5462 || 70062eabf96288d307280fb601ce0ee2
|-
| sound/player/plyrjmp8.wav  ||style=text-align:right|  3888 || d4a552d8f627c7f3b933568c4a74c913
|-
| sound/player/slimbrn2.wav  ||style=text-align:right|  12468 || b17c18a9f81a952f2d41f65b5180f210
|-
| sound/player/teledth1.wav  ||style=text-align:right|  14414 || c226c7f041187ba058d8112cc0190b56
|-
| sound/player/tornoff2.wav  ||style=text-align:right|  7726 || 03ec1c805b307b8fe4c4052f8332a5e5
|-
| sound/player/udeath.wav  ||style=text-align:right|  16082 || afe674f287efb6197da2cea0c0b1d2f8
|-
| sound/shambler/melee1.wav  ||style=text-align:right|  4718 || 77fe6240973a204b757a427ebf66bcfd
|-
| sound/shambler/melee2.wav  ||style=text-align:right|  5966 || 3be31638d769e3d690c92311dfafdeac
|-
| sound/shambler/sattck1.wav  ||style=text-align:right|  8036 || ec8c3f79ea42d09154cb8975ada1b21c
|-
| sound/shambler/sboom.wav  ||style=text-align:right|  11672 || 9834601a645d7d1f62001b2a314ec18f
|-
| sound/shambler/sdeath.wav  ||style=text-align:right|  21106 || e0e62d229a985a6e39218c6488599059
|-
| sound/shambler/shurt2.wav  ||style=text-align:right|  4302 || 1e87631ede95e061a75f9c31629ac0b8
|-
| sound/shambler/sidle.wav  ||style=text-align:right|  5646 || 368a240e6c3e877793352a79c1828386
|-
| sound/shambler/smack.wav  ||style=text-align:right|  5300 || bd8c634c9894348360fec7b7419d1649
|-
| sound/shambler/ssight.wav  ||style=text-align:right|  15420 || 657107577460d5acf3157dec97e07a89
|-
| sound/soldier/death1.wav  ||style=text-align:right|  8434 || fe25952af40b536c3bb67bfca58062eb
|-
| sound/soldier/idle.wav  ||style=text-align:right|  9802 || 4cdfbdda8fb5f40b125c7bcddb6e8914
|-
| sound/soldier/pain1.wav  ||style=text-align:right|  5000 || 54d3b05fdcecf7480034858f2b22b06c
|-
| sound/soldier/pain2.wav  ||style=text-align:right|  7838 || e2bbc9d3405b9b9fdae76d2fc298fc2f
|-
| sound/soldier/sattck1.wav  ||style=text-align:right|  14302 || b76ac35f900f280a7a7996da7e404362
|-
| sound/soldier/sight1.wav  ||style=text-align:right|  12716 || e2a39533250ddd1b08053d5c4ebf7fd0
|-
| sound/weapons/ax1.wav  ||style=text-align:right|  3308 || 237d4d819d02ad37849a8a895cc410e1
|-
| sound/weapons/bounce.wav  ||style=text-align:right|  5864 || fced668c6558a9505abf5014d60528a6
|-
| sound/weapons/grenade.wav  ||style=text-align:right|  8364 || d2b6fa131933f203eba2a282276e88df
|-
| sound/weapons/guncock.wav  ||style=text-align:right|  14430 || 6a63452167cc106e756518536446844f
|-
| sound/weapons/lhit.wav  ||style=text-align:right|  26028 || fefd021d0bd35a1f8da8870f1c06abb9
|-
| sound/weapons/lock4.wav  ||style=text-align:right|  3876 || 3fd93222258d5b1500b150f021c94519
|-
| sound/weapons/lstart.wav  ||style=text-align:right|  56378 || abe1abf6dcadcda5930b0684c7ea820a
|-
| sound/weapons/pkup.wav  ||style=text-align:right|  5174 || 0aa6f0a7d609e1a56fd535a06d1bb56e
|-
| sound/weapons/r_exp3.wav  ||style=text-align:right|  17478 || 57db026474fc76ba7f38cea24eaaf8cf
|-
| sound/weapons/ric1.wav  ||style=text-align:right|  4308 || a31166b4bbb4509ac3004a01f7477ee9
|-
| sound/weapons/ric2.wav  ||style=text-align:right|  10838 || a180b447c0527e603cea54a9aefd6139
|-
| sound/weapons/ric3.wav  ||style=text-align:right|  12638 || 8a773bbb585540ddce256151162f3a2c
|-
| sound/weapons/rocket1i.wav  ||style=text-align:right|  9660 || fb4fdf345d805cf6980c4c695974effc
|-
| sound/weapons/sgun1.wav  ||style=text-align:right|  22992 || 95a14815e48deb323d0cf8251d728ac7
|-
| sound/weapons/shotgn2.wav  ||style=text-align:right|  8694 || cb561cefbf472232334b419af050e5a0
|-
| sound/weapons/spike2.wav  ||style=text-align:right|  12642 || 9189d811855f108da4a1e2d34dc7c633
|-
| sound/weapons/tink1.wav  ||style=text-align:right|  1252 || 297ba8706625fcf05887edb393e9a441
|-
| sound/wizard/hit.wav  ||style=text-align:right|  7332 || 6598d669334df977f1f97b95288edf11
|-
| sound/wizard/wattack.wav  ||style=text-align:right|  25912 || b3568a47439f81779d40335e76f5bc2d
|-
| sound/wizard/wdeath.wav  ||style=text-align:right|  20684 || 99d9c71343bc23222abb92119d404400
|-
| sound/wizard/widle1.wav  ||style=text-align:right|  13464 || b22b1dd9f66879b3447d36ab584316c7
|-
| sound/wizard/widle2.wav  ||style=text-align:right|  23094 || 7178fd83df227360564adef01bed92c6
|-
| sound/wizard/wpain.wav  ||style=text-align:right|  8686 || bd7e59ab7d7b835f9ed8ab51950914de
|-
| sound/wizard/wsight.wav  ||style=text-align:right|  13078 || df5949057c750528917c6cb32b7fd9fd
|-
| sound/zombie/idle_w2.wav  ||style=text-align:right|  17192 || d2bb59b9d7ac71097c07123a23525641
|-
| sound/zombie/z_fall.wav  ||style=text-align:right|  3062 || 6968318b2d196c6d54bc707d8a390547
|-
| sound/zombie/z_gib.wav  ||style=text-align:right|  16226 || 199dda66ade8d6f0ef4897e4d7608c0d
|-
| sound/zombie/z_hit.wav  ||style=text-align:right|  6166 || 6c66ab3e6b149bf35956a4bbc0057acb
|-
| sound/zombie/z_idle1.wav  ||style=text-align:right|  13244 || 21088a7b38b1124d7ec72e58d5ab93a6
|-
| sound/zombie/z_idle.wav  ||style=text-align:right|  16734 || e5e570e38c4405111004190a79f0e925
|-
| sound/zombie/z_miss.wav  ||style=text-align:right|  10734 || 96fad96a8c3bc6f7bcc5da6c82678da2
|-
| sound/zombie/z_pain1.wav  ||style=text-align:right|  15374 || fcd83b89a94b0cadbe1361a4df080ec0
|-
| sound/zombie/z_pain.wav  ||style=text-align:right|  12218 || 56637968b8309bd2f825153330bbdfc0
|-
| sound/zombie/z_shot1.wav  ||style=text-align:right|  3068 || 561afb69b7851923a8fb3b54e3e13c96
|-
|}&lt;/tt&gt;

{{todo|todo=Multiple to do items listed above, detail out the contents of various pak files}}</text>
      <sha1>gk538o9rbh66sm8h9dvz2hnxaeqoflp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2241</id>
      <parentid>2240</parentid>
      <timestamp>2013-03-26T13:52:53Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>note about different pak files</comment>
      <text xml:space="preserve" bytes="33539">The '''''pak0.pak''''' file that comes with Quake is required by all Quake [[engines]]. It contains the maps, models, programs, sounds, and skins required to play Quake Episode 1, ''Dimension of the Doomed''. It is expected to be in the ID1 subfolder of the Quake root folder.

[[PAK file]]s are typically named ''pak0.pak'', ''pak1.pak'', ''pak2.pak'', and so on. Quake mission packs and other Quake-based games often have their own ''pak0.pak'' files, which live in a different folder, not the ID1 folder.

The ID1 ''pak0.pak'' is distributed with both the shareware and the registered/commercial editions of Quake.

In some editions, including the downloadable shareware (''quake106.zip'') from id Software, ''pak0.pak'' is embedded in another archive, ''[[resource.1]]''. The files in this archive are LZH-encoded using the lh5 algorithm. If you can't or don't want to run the DOS/Win32 Quake installer program it comes with, then you'll need a compatible extractor program to get ''pak0.pak'' out of the ''resource.1'' archive.

The ID1 ''pak0.pak'' with the md5sum 5906e5998fc3d896ddaf5e6a62e03abb contains the following folders &amp; files:
&lt;tt&gt;
{| class=&quot;wikitable&quot;
|-
! Path !! Size !! md5
|-
| default.cfg  ||style=text-align:right|  1914 || fc989b37572fae074e8ffda0ce4d5297
|-
| demo1.dem  ||style=text-align:right|  184471 || 85ec0141ab24d9732e487d1aafa791f0
|-
| demo2.dem  ||style=text-align:right|  152705 || fa5c3daf7a57954cd95f94b698a7e420
|-
| demo3.dem  ||style=text-align:right|  197679 || 691f37e5715ea2863c1d8092a6429824
|-
| end1.bin  ||style=text-align:right|  4000 || 92ae51961ec2f429dfe9bea1138fbd5d
|-
| gfx/bigbox.lmp  ||style=text-align:right|  5192 || e597771ac6149b2b071ebfd24981ea04
|-
| gfx/box_bl.lmp  ||style=text-align:right|  72 || 5b094c37c2c1c2eebe37f84117dea182
|-
| gfx/box_bm.lmp  ||style=text-align:right|  136 || 44621236738e2bf8d669e53dca887278
|-
| gfx/box_br.lmp  ||style=text-align:right|  72 || 86597d5325b472caf5644644033e5cab
|-
| gfx/box_ml.lmp  ||style=text-align:right|  72 || adcea286ba0ac01084fd0c131b16ffdd
|-
| gfx/box_mm2.lmp  ||style=text-align:right|  136 || b850bcec189d909e7a0f796111a11249
|-
| gfx/box_mm.lmp  ||style=text-align:right|  136 || 700b4884b1a3c6aa7356a43014261866
|-
| gfx/box_mr.lmp  ||style=text-align:right|  72 || e30d9ea783ef7dd50101682f03ba40d7
|-
| gfx/box_tl.lmp  ||style=text-align:right|  72 || 3903d3d814e37c55790ac0ccfef2b925
|-
| gfx/box_tm.lmp  ||style=text-align:right|  136 || 7cb85ccbf8e7d2532da2a839a7cef348
|-
| gfx/box_tr.lmp  ||style=text-align:right|  72 || 5c5e72746af821a4cf8437d8fecc53c7
|-
| gfx/colormap.lmp  ||style=text-align:right|  16385 || 0d793b70bffafbd666fc5c88d6e15e9d
|-
| gfx/complete.lmp  ||style=text-align:right|  4616 || db6a00dfbe2c62a43c261e5622297c4a
|-
| gfx/conback.lmp  ||style=text-align:right|  64008 || 9eb6f9c47870bf42985d9382958a5c12
|-
| gfx/dim_drct.lmp  ||style=text-align:right|  3352 || 50ea11fe8c4d9db92863bdcd03b89df5
|-
| gfx/dim_ipx.lmp  ||style=text-align:right|  3352 || 0bef9943487f0611225bf0a5c0fe5dd4
|-
| gfx/dim_modm.lmp  ||style=text-align:right|  3352 || 3288f03144f06b95cadafa9458a77b1d
|-
| gfx/dim_mult.lmp  ||style=text-align:right|  3352 || 348b7369227f2d7e9d0daccbf6c9344d
|-
| gfx/dim_tcp.lmp  ||style=text-align:right|  3352 || 7dc8bbb01d7c90cd51c28da0ff6ed900
|-
| gfx/finale.lmp  ||style=text-align:right|  6920 || b6e49409d344e0344273d86ea33fe35f
|-
| gfx/help0.lmp  ||style=text-align:right|  64008 || b392ac30ad49252b51ec934ed855c20f
|-
| gfx/help1.lmp  ||style=text-align:right|  64008 || 857543c69245117a606044ea63adac9a
|-
| gfx/help2.lmp  ||style=text-align:right|  64008 || 882dd5920ea9c19f637f32084de9788a
|-
| gfx/help3.lmp  ||style=text-align:right|  64008 || a89d169524920d896128009467deebfc
|-
| gfx/help4.lmp  ||style=text-align:right|  64008 || c72d67c84ae6b403fae5f08d3e5c3bc6
|-
| gfx/help5.lmp  ||style=text-align:right|  64008 || 12203d7cdec35c4f51622dd90ec92093
|-
| gfx/inter.lmp  ||style=text-align:right|  23048 || f6eabe0d742380c7b47a9ee44170993d
|-
| gfx/loading.lmp  ||style=text-align:right|  3464 || 3249bc994266529a1748c06bfbb24bfa
|-
| gfx/mainmenu.lmp  ||style=text-align:right|  26888 || 8122e2a0b8888f9d1ebef149551b6434
|-
| gfx/menudot1.lmp  ||style=text-align:right|  392 || bfdb08d84d580abcfbacc1c9abd62bfb
|-
| gfx/menudot2.lmp  ||style=text-align:right|  392 || 6c6d2176e00edbe530bb1db118aaa6dc
|-
| gfx/menudot3.lmp  ||style=text-align:right|  392 || 2527a05f6162efb3e4bc5311d9e010d5
|-
| gfx/menudot4.lmp  ||style=text-align:right|  392 || 90ea6be033b39b139b3779932d266f33
|-
| gfx/menudot5.lmp  ||style=text-align:right|  392 || c9beb9600c35e458d0f83b6cf1e1c692
|-
| gfx/menudot6.lmp  ||style=text-align:right|  392 || 31b9a6ec1d12a2bd56b955185a9e72d3
|-
| gfx/menuplyr.lmp  ||style=text-align:right|  2696 || 9eebe617ff51c4ce43f85ca1a6920d5b
|-
| gfx/mp_menu.lmp  ||style=text-align:right|  14856 || c6416b8f7f5262a5a19b9ce4be1fd9ce
|-
| gfx/netmen1.lmp  ||style=text-align:right|  3352 || 5bc6a8d8cfdfd7e940e933812954367a
|-
| gfx/netmen2.lmp  ||style=text-align:right|  3352 || c8aafb649a653e90fc5eb7b7a2b3ca2e
|-
| gfx/netmen3.lmp  ||style=text-align:right|  3352 || 11c9372d0e64057a1ec8251f596b820d
|-
| gfx/netmen4.lmp  ||style=text-align:right|  3352 || 74ec672b1312699be2eeaf25a68e4582
|-
| gfx/netmen5.lmp  ||style=text-align:right|  3352 || 231f8a9ea4ba364f517db0e9f7f1ba72
|-
| gfx/palette.lmp  ||style=text-align:right|  768 || 79bc149d4f2fb0bd68cd8400a3fd87d4
|-
| gfx/pause.lmp  ||style=text-align:right|  3080 || 5aa67f927719e4a9eb3e020e75fea969
|-
| gfx/p_load.lmp  ||style=text-align:right|  2504 || 27fe08071058385529b0b8ad746421e7
|-
| gfx/p_multi.lmp  ||style=text-align:right|  5192 || 5a307c7d11da20a4772ad9c00b9f4309
|-
| gfx/p_option.lmp  ||style=text-align:right|  3464 || 83a3bf4459bce3fe85857a0aa647b90a
|-
| gfx/p_save.lmp  ||style=text-align:right|  2120 || 0d2bb5fa5524e0180a85bf273094cd1f
|-
| gfx/qplaque.lmp  ||style=text-align:right|  4616 || f4de79557c75e26b85ea84fb6029a5f3
|-
| gfx/ranking.lmp  ||style=text-align:right|  4040 || 919b13d1f7fdd0082ec0f94699f3b681
|-
| gfx/sell.lmp  ||style=text-align:right|  64008 || 878db3866e8b38c5b8d951aef516358c
|-
| gfx/sp_menu.lmp  ||style=text-align:right|  14856 || f624aa79778970ecb8ef518b5ab435f6
|-
| gfx/ttl_cstm.lmp  ||style=text-align:right|  4424 || 4ee84e0e7fa93f0e93d26efb1e726a4d
|-
| gfx/ttl_main.lmp  ||style=text-align:right|  2312 || 07e1c8e189e2463befcfc44f5ecf8dcb
|-
| gfx/ttl_sgl.lmp  ||style=text-align:right|  3080 || 25d5360228da738f091063eaeb7c6aa8
|-
| gfx/vidmodes.lmp  ||style=text-align:right|  5192 || 18a97f403057777f262188903f485fe8
|-
| gfx.wad  ||style=text-align:right|  112828 || cde5b5890c8902c02a2f271abe8f4a1f
|-
| maps/b_batt0.bsp  ||style=text-align:right|  5044 || 00bc989f4c8d2570a2826a63c7356a27
|-
| maps/b_batt1.bsp  ||style=text-align:right|  4620 || 555bc0cb0b5c2ad2ed0110f307e70679
|-
| maps/b_bh100.bsp  ||style=text-align:right|  8820 || 62f78bb5143265f037b79ddd077c50ed
|-
| maps/b_bh10.bsp  ||style=text-align:right|  3936 || e80cde9f185612f669fc100f825ca84f
|-
| maps/b_bh25.bsp  ||style=text-align:right|  8872 || 032d70dbf8669b3627b82b41f31488bd
|-
| maps/b_explob.bsp  ||style=text-align:right|  10220 || d8c9db3cfa0264678afc580143f665ea
|-
| maps/b_nail0.bsp  ||style=text-align:right|  5044 || c8d7ec0bdee74e0c1e69e8dbe939117d
|-
| maps/b_nail1.bsp  ||style=text-align:right|  5044 || ea08b2bd6aa19ece0307f75c491e5d24
|-
| maps/b_rock0.bsp  ||style=text-align:right|  2956 || 19ce64cd248a4459bf37b45e6e7c1219
|-
| maps/b_rock1.bsp  ||style=text-align:right|  2944 || b4cdb75094cd7218ed2b0475aefabe80
|-
| maps/b_shell0.bsp  ||style=text-align:right|  5044 || 574824b3c52661959d633a76dc823859
|-
| maps/b_shell1.bsp  ||style=text-align:right|  5044 || dc8b8dcb490e204e615b2b9cdc673296
|-
| maps/e1m1.bsp  ||style=text-align:right|  1365176 || 84cae48010619bcc945426b91bc03ade
|-
| maps/e1m2.bsp  ||style=text-align:right|  1332228 || caff91afbe41f3eac4dda65cee0083c9
|-
| maps/e1m3.bsp  ||style=text-align:right|  1249944 || f20eaa5692e94ab889c4ade9e1c116c7
|-
| maps/e1m4.bsp  ||style=text-align:right|  1411452 || 29419f05ef647f83d0482502bb3f84f8
|-
| maps/e1m5.bsp  ||style=text-align:right|  1324060 || afd98cc890d748986186951b32fc9fcb
|-
| maps/e1m6.bsp  ||style=text-align:right|  1065080 || ec178e54ff68c4d8cf71e26775b2eb2d
|-
| maps/e1m7.bsp  ||style=text-align:right|  607420 || 0c1f55455e0f957291e21d211b689718
|-
| maps/e1m8.bsp  ||style=text-align:right|  924116 || 18c7ab2f922d5d586150afbc27c323a4
|-
| maps/start.bsp  ||style=text-align:right|  1433792 || 61a57bb4ca36368478f02b142d1b5291
|-
| progs/armor.mdl  ||style=text-align:right|  44076 || ca060166d7e4e4686995f05645dde593
|-
| progs/backpack.mdl  ||style=text-align:right|  19348 || 315b4ef42fb035aa3318e8d2d61961ce
|-
| progs/bolt2.mdl  ||style=text-align:right|  11860 || f59ce07cfbe01fcfc578258c573d2c31
|-
| progs/bolt3.mdl  ||style=text-align:right|  11860 || ff87579a424faa59ca2695b7434ea488
|-
| progs/bolt.mdl  ||style=text-align:right|  20644 || a176903954e9d8c7ab629f92784546c2
|-
| progs/boss.mdl  ||style=text-align:right|  211836 || 25da3b2bc30677e32ee3a3a878a4d3af
|-
| progs.dat  ||style=text-align:right|  413116 || 0c3ef3625df5883536f8da42c78b673a
|-
| progs/demon.mdl  ||style=text-align:right|  102120 || 4c73786e7cfb2083ca38cbc983cd6c4b
|-
| progs/dog.mdl  ||style=text-align:right|  146056 || e727fbc39acc652f812972612ce37565
|-
| progs/end1.mdl  ||style=text-align:right|  20820 || 67c0fcab33d3772c00bb462b0e749275
|-
| progs/eyes.mdl  ||style=text-align:right|  4372 || ed72f64a17c6909b2cb3034a734bca97
|-
| progs/flame2.mdl  ||style=text-align:right|  64572 || f2c8f8950ebd7a0edded6247655d325b
|-
| progs/flame.mdl  ||style=text-align:right|  46364 || 8593c05374d84354d4444c218e86fdb8
|-
| progs/gib1.mdl  ||style=text-align:right|  5716 || f5c5b799e895dc03036522a487e99913
|-
| progs/gib2.mdl  ||style=text-align:right|  16228 || cfa9e97a3542852418123e0bb12e4f86
|-
| progs/gib3.mdl  ||style=text-align:right|  22228 || d73be7b2881e0a5aacf2b332ac29086f
|-
| progs/g_light.mdl  ||style=text-align:right|  50276 || 61bba06ec3804b7f355a62fd4585ad8f
|-
| progs/g_nail2.mdl  ||style=text-align:right|  30720 || ed6d7bb5ff050ad5f2bf4be7739a16a5
|-
| progs/g_nail.mdl  ||style=text-align:right|  34700 || e2959ca741c764dd42025ef531a1b554
|-
| progs/grenade.mdl  ||style=text-align:right|  2244 || f492d6257c216306983a72f41db0d891
|-
| progs/g_rock2.mdl  ||style=text-align:right|  40756 || 68c047c97bab89afe2cb69e65b7c62e1
|-
| progs/g_rock.mdl  ||style=text-align:right|  48244 || 61346f842944795e0821e31e3d61b427
|-
| progs/g_shot.mdl  ||style=text-align:right|  32916 || 7facfec1a3cfb892cce871f398e9cb6b
|-
| progs/h_demon.mdl  ||style=text-align:right|  34884 || 5253a0ea93d9624d73fb984ee339b52f
|-
| progs/h_dog.mdl  ||style=text-align:right|  24436 || a0b5f87522b3a769548c46cf3bb4223e
|-
| progs/h_guard.mdl  ||style=text-align:right|  5428 || 18a629b53b87392030df63b7806eb833
|-
| progs/h_knight.mdl  ||style=text-align:right|  7156 || 46a03fa72b0cdebcf58045aba2fafc13
|-
| progs/h_ogre.mdl  ||style=text-align:right|  14900 || 14eb06611c769e254d0531c05919bdf5
|-
| progs/h_player.mdl  ||style=text-align:right|  14708 || bf1773df7d3e19c5b211a1ee408f6b05
|-
| progs/h_shams.mdl  ||style=text-align:right|  37060 || ff1e04e18c57667991341a011fb6c363
|-
| progs/h_wizard.mdl  ||style=text-align:right|  14804 || 4bc6be40128f313cf9ad06c347310735
|-
| progs/h_zombie.mdl  ||style=text-align:right|  4484 || 0fdef7f7cd05a3209e0a163e87f69f8b
|-
| progs/invisibl.mdl  ||style=text-align:right|  7092 || 1e87d86af02e69db9c9f27f5fddc7a47
|-
| progs/invulner.mdl  ||style=text-align:right|  23920 || 8c8d83e4d50c3282d009b333a1280422
|-
| progs/knight.mdl  ||style=text-align:right|  101404 || 5328915db5c53e85cf75d46e7b747fb9
|-
| progs/lavaball.mdl  ||style=text-align:right|  8788 || 92af53d2145681e37877dbc1d12801b2
|-
| progs/m_g_key.mdl  ||style=text-align:right|  12820 || 192c2650a115c91706f6fa8fe68beb45
|-
| progs/missile.mdl  ||style=text-align:right|  57796 || 47f19f9e34954b93443c9759dd2e7ba0
|-
| progs/m_s_key.mdl  ||style=text-align:right|  12820 || 20837376b391cdd5c92e57b84e05687f
|-
| progs/ogre.mdl  ||style=text-align:right|  162036 || fbb592ca3788a576dd2f31fcf8c80fab
|-
| progs/player.mdl  ||style=text-align:right|  191852 || 405cef9a10d96cdabffb5e91312f8e5c
|-
| progs/quaddama.mdl  ||style=text-align:right|  39992 || 00b177ff272a4779097ea08344da8aff
|-
| progs/s_bubble.spr  ||style=text-align:right|  588 || 7c0887630ed468205292d8cb7abcae93
|-
| progs/s_explod.spr  ||style=text-align:right|  18972 || 766c6a92c26b54f68f7ff87c90d71cf2
|-
| progs/shambler.mdl  ||style=text-align:right|  98556 || 9b09375a0f614dc4081e363cc34f1185
|-
| progs/s_light.mdl  ||style=text-align:right|  27596 || ee6649ea5673989f3aa06213a8d65f76
|-
| progs/s_light.spr  ||style=text-align:right|  1080 || aff44ba238f4e1d0d504d6f9700aadb4
|-
| progs/soldier.mdl  ||style=text-align:right|  146288 || 5b6c30a984872b4273dd5861412d35c5
|-
| progs/spike.mdl  ||style=text-align:right|  1684 || be4cb73125f939284376080acc9887dd
|-
| progs/s_spike.mdl  ||style=text-align:right|  1684 || ebb1d58242b64a703623c8a33fcbd9e6
|-
| progs/suit.mdl  ||style=text-align:right|  51236 || 882a61f5eea7f9cdbc04800b963cef85
|-
| progs/v_axe.mdl  ||style=text-align:right|  57908 || 577dadcca2700068995c808dc7dec76f
|-
| progs/v_light.mdl  ||style=text-align:right|  56204 || 68733d4c690de88b5c3ba33e52be1c15
|-
| progs/v_nail2.mdl  ||style=text-align:right|  68732 || aacd1002ab02662cc1d3ff46885b553e
|-
| progs/v_nail.mdl  ||style=text-align:right|  54472 || ec9ba028b346da2f9674c2a521ff0c2f
|-
| progs/v_rock2.mdl  ||style=text-align:right|  58188 || 96edf1a3c7629987c200361523f780d7
|-
| progs/v_rock.mdl  ||style=text-align:right|  58548 || 7bea46b2a75fd7cff2fb99420e4c4e25
|-
| progs/v_shot2.mdl  ||style=text-align:right|  50816 || 922b3b687766ae0d7aeb73d44dec7035
|-
| progs/v_shot.mdl  ||style=text-align:right|  43852 || 1fd140b6856843e83cd9bf3966f5d7dd
|-
| progs/w_g_key.mdl  ||style=text-align:right|  7252 || c5c5f0d14b022f57294ad9aded318250
|-
| progs/wizard.mdl  ||style=text-align:right|  64472 || bf60986594f045e60e8aa6339d553ee7
|-
| progs/w_s_key.mdl  ||style=text-align:right|  7252 || ec02314a7d12439d36b4eb2dd0a641a8
|-
| progs/w_spike.mdl  ||style=text-align:right|  14336 || 8cf9245df2164e8062b01a220b508d6b
|-
| progs/zombie.mdl  ||style=text-align:right|  186084 || a923b1d03b9d237dd5ead9bd56acc900
|-
| progs/zom_gib.mdl  ||style=text-align:right|  10196 || cf42c938caa5b19f719d1f110b1dc6d4
|-
| quake.rc  ||style=text-align:right|  293 || 411d42958aaeae141813f9ebfcf5233f
|-
| sound/ambience/buzz1.wav  ||style=text-align:right|  36308 || 346a00c795c6f1f1338ade6fc350b3fe
|-
| sound/ambience/comp1.wav  ||style=text-align:right|  62734 || f91a1120de804f7cd4dbba4f12c748e9
|-
| sound/ambience/drip1.wav  ||style=text-align:right|  137736 || 2306a76162eeda3d0812c516bc99aa7a
|-
| sound/ambience/drone6.wav  ||style=text-align:right|  18522 || 322853ddb42ad2a205579b5cca8e2e8c
|-
| sound/ambience/fire1.wav  ||style=text-align:right|  24064 || 610d3985ed8133988e8de3bec2b9cbbe
|-
| sound/ambience/fl_hum1.wav  ||style=text-align:right|  50154 || e4628499702e004c4bacd282a3ecb8c0
|-
| sound/ambience/hum1.wav  ||style=text-align:right|  40166 || 486bfa737c35b0c9dda57cbee2a540af
|-
| sound/ambience/suck1.wav  ||style=text-align:right|  110392 || 2e99e4d1fe1501d5191c8157d3063cb6
|-
| sound/ambience/swamp1.wav  ||style=text-align:right|  68524 || 29ffb678d78997eb6c227677c86ea4f8
|-
| sound/ambience/swamp2.wav  ||style=text-align:right|  68526 || 356aa1e875da846e72d8f17bbb699a5b
|-
| sound/ambience/thunder1.wav  ||style=text-align:right|  41492 || cefd6ced4b5bc79fcece1003238566f6
|-
| sound/ambience/water1.wav  ||style=text-align:right|  55784 || 6eeaae0a3450652d2be0782895297ee4
|-
| sound/ambience/wind2.wav  ||style=text-align:right|  28610 || 030cf8dd2b00a12454b5b35a89d03914
|-
| sound/ambience/windfly.wav  ||style=text-align:right|  22140 || c7be01e6d324e66883f70aa0072a99b0
|-
| sound/boss1/death.wav  ||style=text-align:right|  27600 || 43469b1acd35b67107da5da82e1df911
|-
| sound/boss1/out1.wav  ||style=text-align:right|  50344 || 847a6f971f6905dfaffd70b30d18a4b1
|-
| sound/boss1/pain.wav  ||style=text-align:right|  17700 || 49112740c0ff421f9272b9e8efc748cd
|-
| sound/boss1/sight1.wav  ||style=text-align:right|  24768 || 427dd600e6b28c9402212adcc5d652c7
|-
| sound/boss1/throw.wav  ||style=text-align:right|  11526 || 9b6e9ff2c8df448f7fd4b5315e60ddda
|-
| sound/buttons/airbut1.wav  ||style=text-align:right|  10672 || 9d2e14e7176842a0dce909a43d38873d
|-
| sound/buttons/switch02.wav  ||style=text-align:right|  3746 || d2e9cba3a353edc65115f6f5c574403c
|-
| sound/buttons/switch04.wav  ||style=text-align:right|  3666 || ff47857a58d3faefb2b94a37d7ba4f26
|-
| sound/buttons/switch21.wav  ||style=text-align:right|  6318 || 3605b0d061a9baf185c6ab7614534531
|-
| sound/demon/ddeath.wav  ||style=text-align:right|  9140 || 62a48dcd405ca55c9ce18497e36faa0e
|-
| sound/demon/dhit2.wav  ||style=text-align:right|  7142 || 9e741696e4d0d66e30e718fc70ec186e
|-
| sound/demon/djump.wav  ||style=text-align:right|  8494 || 791ac9d6b6593808316145443cb7e7a0
|-
| sound/demon/dland2.wav  ||style=text-align:right|  4400 || db14c7b01838f826b7a712075f9026fd
|-
| sound/demon/dpain1.wav  ||style=text-align:right|  6282 || 5e6c485878393c9bebb0d0e6659bc479
|-
| sound/demon/idle1.wav  ||style=text-align:right|  9098 || 7a83f8caf3d5b1172a7dc5afdc942988
|-
| sound/demon/sight2.wav  ||style=text-align:right|  8804 || 65171c355c22a5069520b0881677ae3c
|-
| sound/dog/dattack1.wav  ||style=text-align:right|  8154 || 0c47c9d4aaae0bf3159a288b674f4a35
|-
| sound/dog/ddeath.wav  ||style=text-align:right|  14912 || b0e7760b1d7286a028ff9773f6802958
|-
| sound/dog/dpain1.wav  ||style=text-align:right|  7240 || 28e5ab93b41e13e2916433283a5d1a46
|-
| sound/dog/dsight.wav  ||style=text-align:right|  6722 || 0edc290765bac1fb4fe03ca55bc7c225
|-
| sound/dog/idle.wav  ||style=text-align:right|  6870 || 42bd6026ff32bd94523ad9f8fe8362cc
|-
| sound/doors/airdoor1.wav  ||style=text-align:right|  13654 || 9b91930e8c2fdece31a2362296891122
|-
| sound/doors/airdoor2.wav  ||style=text-align:right|  8594 || 29fd823d1c14ca42a9a89c716b26f4cd
|-
| sound/doors/basesec1.wav  ||style=text-align:right|  13930 || eb2363fed42724f55e8f55f96c335bcf
|-
| sound/doors/basesec2.wav  ||style=text-align:right|  10238 || 8d163a56607c9cf64a270a156c1c5cef
|-
| sound/doors/basetry.wav  ||style=text-align:right|  10518 || a5108d5c51281ab55c0baf884cbe8cbe
|-
| sound/doors/baseuse.wav  ||style=text-align:right|  16486 || f43fee91efe813a5eb34e9d72918fdb9
|-
| sound/doors/ddoor1.wav  ||style=text-align:right|  7738 || dff86a26139cdd49a193d5ed7ebf6ae1
|-
| sound/doors/ddoor2.wav  ||style=text-align:right|  5904 || 4a9d0b0825d0302ce465569d1e35fbcf
|-
| sound/doors/doormv1.wav  ||style=text-align:right|  14036 || 3fd379aec80a2ad8105c0c89ba5b40e6
|-
| sound/doors/drclos4.wav  ||style=text-align:right|  12814 || 83df1865a0c9fa5d02c2f137564c57de
|-
| sound/doors/hydro1.wav  ||style=text-align:right|  11094 || b1703980a20e624bc3366ccf55ca617e
|-
| sound/doors/hydro2.wav  ||style=text-align:right|  10700 || b1866f5b3950788ccf4206444ab64bc7
|-
| sound/doors/latch2.wav  ||style=text-align:right|  7338 || ad2378ca21a0ca529df328261e07aed5
|-
| sound/doors/medtry.wav  ||style=text-align:right|  7828 || ebb536bec2cdfd22c25b35793c055339
|-
| sound/doors/meduse.wav  ||style=text-align:right|  10718 || 4522aada194b23eb33b541cbcc755cf6
|-
| sound/doors/runetry.wav  ||style=text-align:right|  13524 || c433bae9e2ab508712f87dc2cacc82c8
|-
| sound/doors/runeuse.wav  ||style=text-align:right|  17364 || b4bcfd525a26f5b5ecc9d392430d9079
|-
| sound/doors/stndr1.wav  ||style=text-align:right|  12620 || 5bae2183885e18d65d69624e85249fd9
|-
| sound/doors/stndr2.wav  ||style=text-align:right|  11470 || f43a75c917effff09ef7be8a321c8b49
|-
| sound/doors/winch2.wav  ||style=text-align:right|  14872 || a4edffdfede7dbaed37db526c26e2b6d
|-
| sound/hknight/hit.wav  ||style=text-align:right|  6260 || fece24e2548f1d769e8fce39a5c87d01
|-
| sound/items/armor1.wav  ||style=text-align:right|  7714 || 186d29f2baf35b8c280bc97754606fad
|-
| sound/items/damage2.wav  ||style=text-align:right|  33012 || 14e53b7617ffe315a7c3f8d89652e51c
|-
| sound/items/damage3.wav  ||style=text-align:right|  12894 || baf754aec7ed4baba16760ac85513184
|-
| sound/items/damage.wav  ||style=text-align:right|  23374 || 8cde8b9278ca4922a4ec7ead6e5ee01b
|-
| sound/items/health1.wav  ||style=text-align:right|  7958 || 52a2c4f808db4edd8393de0de618c91f
|-
| sound/items/inv1.wav  ||style=text-align:right|  13728 || 5850cab55d6197d0e76d9f0a22ba10be
|-
| sound/items/inv2.wav  ||style=text-align:right|  33216 || 4edcd38a2c6adc5305636dd7afd5ef60
|-
| sound/items/inv3.wav  ||style=text-align:right|  33320 || 325c268be05b42a019ccb92e6993ab9e
|-
| sound/items/itembk2.wav  ||style=text-align:right|  9910 || 270c688b3cb884f5d4e5ffd8ccc934a1
|-
| sound/items/protect2.wav  ||style=text-align:right|  34012 || 25627a4bd2b4c6054cfd2fc4bf69ddc2
|-
| sound/items/protect3.wav  ||style=text-align:right|  23364 || 7b9374d67f6d59e524bba2af236ca30a
|-
| sound/items/protect.wav  ||style=text-align:right|  22536 || d839d5a84f811ce8a0e28616891bf1a7
|-
| sound/items/r_item1.wav  ||style=text-align:right|  6822 || 3fc0d0ae4a71c9fbfe548f38626c6a08
|-
| sound/items/r_item2.wav  ||style=text-align:right|  7448 || 384ffefe795d99df75f381596a0f1976
|-
| sound/items/suit2.wav  ||style=text-align:right|  33254 || 0a9d2766a5b805cb5794f9bea57e6585
|-
| sound/items/suit.wav  ||style=text-align:right|  15854 || da413f34023d219f1e34fde50a037be0
|-
| sound/knight/idle.wav  ||style=text-align:right|  11064 || 1b5c3981bee078318af346d8fe8090b9
|-
| sound/knight/kdeath.wav  ||style=text-align:right|  10688 || 11a96f48a8f2433c23beae299c8fb96e
|-
| sound/knight/khurt.wav  ||style=text-align:right|  5586 || 32c9f48dd4a6a87752aedf56fe8de668
|-
| sound/knight/ksight.wav  ||style=text-align:right|  13514 || eb75b4af348c88e84d8c87c19d5976fa
|-
| sound/knight/sword1.wav  ||style=text-align:right|  2306 || 93045b5f3178413dc6b01ec2869d1f73
|-
| sound/knight/sword2.wav  ||style=text-align:right|  2784 || 82d1a7c263cd3df7b060dee2f7f8b1fd
|-
| sound/misc/h2ohit1.wav  ||style=text-align:right|  12972 || 49ecb03f4f10862453656a67598f8b8a
|-
| sound/misc/medkey.wav  ||style=text-align:right|  10020 || 0e3ae5626a47d81e4166539e355e31bb
|-
| sound/misc/menu1.wav  ||style=text-align:right|  5738 || 12c36546601c385bc47c9ca9420b7eee
|-
| sound/misc/menu2.wav  ||style=text-align:right|  10672 || 39b01ea6feb3ec8dbd6d8ee3e5e966c4
|-
| sound/misc/menu3.wav  ||style=text-align:right|  3010 || 4a03dc2fd56831b855dab761eac4f7de
|-
| sound/misc/null.wav  ||style=text-align:right|  1244 || 811989e09124f54cb27fe6154b0f1018
|-
| sound/misc/outwater.wav  ||style=text-align:right|  5018 || 35732412412ddb5ed418633bb0123bbe
|-
| sound/misc/power.wav  ||style=text-align:right|  19832 || 9f2c3a18d9fc8d9cecfac6db3aad6bc6
|-
| sound/misc/r_tele1.wav  ||style=text-align:right|  8036 || c2194171b4c446e136ed7514fbb098a5
|-
| sound/misc/r_tele2.wav  ||style=text-align:right|  17324 || 0ce662ac90fb3658d69320d1be4025c1
|-
| sound/misc/r_tele3.wav  ||style=text-align:right|  18016 || 122ef44813edcfe7391578fd29e729d2
|-
| sound/misc/r_tele4.wav  ||style=text-align:right|  9068 || 0097b5747ccc70d5b12fc6838aff02c2
|-
| sound/misc/r_tele5.wav  ||style=text-align:right|  22042 || a82334cbb66d12f28cce9e71c90ea50b
|-
| sound/misc/runekey.wav  ||style=text-align:right|  14578 || 6b21a2e5878011da50fdee0a301d3e34
|-
| sound/misc/secret.wav  ||style=text-align:right|  6610 || a02ceefcc24b1ebf5c164a1e1acfb05f
|-
| sound/misc/talk.wav  ||style=text-align:right|  1810 || d5b25d4df59d92ac5016e88689ea60c1
|-
| sound/misc/trigger1.wav  ||style=text-align:right|  20230 || dc927c8a1d0a9bd59fbc5dd91ae1d812
|-
| sound/misc/water1.wav  ||style=text-align:right|  3926 || d8291c762acb1edf24927fdcc0f6a6cd
|-
| sound/misc/water2.wav  ||style=text-align:right|  3340 || 049e8e7e7b30d4d8038afb7248bdd977
|-
| sound/ogre/ogdrag.wav  ||style=text-align:right|  12396 || 658587dc89aaefae5ca3f058f7ff4227
|-
| sound/ogre/ogdth.wav  ||style=text-align:right|  13892 || de98e7bb9e70586edddd3308cfded3db
|-
| sound/ogre/ogidle2.wav  ||style=text-align:right|  11254 || 196ae9c33a4311160e1d5f3da878ab09
|-
| sound/ogre/ogidle.wav  ||style=text-align:right|  12894 || 177c829840a87c885bbc8951e7ce962e
|-
| sound/ogre/ogpain1.wav  ||style=text-align:right|  7898 || ac6d133d7720c12df49813fe10e683b5
|-
| sound/ogre/ogsawatk.wav  ||style=text-align:right|  16154 || 7257bdfd014bb61d778b8f88cb65d560
|-
| sound/ogre/ogwake.wav  ||style=text-align:right|  19356 || 3296459e495c4c12b31179d4eeffac19
|-
| sound/plats/medplat1.wav  ||style=text-align:right|  16378 || b73215aa6627c8b5b90fce8d260d48d0
|-
| sound/plats/medplat2.wav  ||style=text-align:right|  7338 || 1fc6c3772917a1a8155d04fa52e17005
|-
| sound/plats/plat1.wav  ||style=text-align:right|  20248 || 5d43ed85d896ba926f459e06ba6635d5
|-
| sound/plats/plat2.wav  ||style=text-align:right|  7338 || 49d7ab0fd726cd652eb6e5756fce61b9
|-
| sound/plats/train1.wav  ||style=text-align:right|  21430 || b589ae8262046361d9dca39d6b8f693a
|-
| sound/plats/train2.wav  ||style=text-align:right|  5870 || 640017e1b870d643e3bca29d499c72ee
|-
| sound/player/axhit1.wav  ||style=text-align:right|  6906 || 149b2371334da318386325182924eaca
|-
| sound/player/axhit2.wav  ||style=text-align:right|  2434 || fc01909318455f5310efa2457a370897
|-
| sound/player/death1.wav  ||style=text-align:right|  10170 || ba005f5488d4ee78dabf613a03f33a5f
|-
| sound/player/death2.wav  ||style=text-align:right|  8026 || 20477d2e7c84aac1bef95d32c9c702dd
|-
| sound/player/death3.wav  ||style=text-align:right|  10918 || 7b206ba8e1fa28d8605b50e3f3200f11
|-
| sound/player/death4.wav  ||style=text-align:right|  14126 || 1b0f27f4d41b748d3cc5c3d56bd917f8
|-
| sound/player/death5.wav  ||style=text-align:right|  14946 || 7efe84195cfa97515aad2d7f96f25346
|-
| sound/player/drown1.wav  ||style=text-align:right|  8908 || 732f0416af6990e028110380bcb36f0d
|-
| sound/player/drown2.wav  ||style=text-align:right|  3114 || 29ee1f287879acce29b15d4722668bc2
|-
| sound/player/gasp1.wav  ||style=text-align:right|  8702 || b06cbc370c8c2c163dc4d487e8b673c7
|-
| sound/player/gasp2.wav  ||style=text-align:right|  13134 || 30aece9d8779764620c7f866bfb06edb
|-
| sound/player/gib.wav  ||style=text-align:right|  14424 || 26fa9942078125388f34b71546615068
|-
| sound/player/h2odeath.wav  ||style=text-align:right|  18104 || 73b0f4dfae07f6e49112cadfe202735c
|-
| sound/player/h2ojump.wav  ||style=text-align:right|  11438 || cd421b96410971bb1a4f21d3936a3805
|-
| sound/player/inh2o.wav  ||style=text-align:right|  11340 || d4c1a27c4d07e8dfdf18a4b1a880c610
|-
| sound/player/inlava.wav  ||style=text-align:right|  10958 || c37875a082900716b7af88d2d990f55c
|-
| sound/player/land2.wav  ||style=text-align:right|  6204 || 6ba534256a779d66d9d9dabb90e63c8b
|-
| sound/player/land.wav  ||style=text-align:right|  2434 || e34328a40358d98f0f95403b9e27ec1e
|-
| sound/player/lburn1.wav  ||style=text-align:right|  6682 || 3c447c72385defe97c060771077d8ba0
|-
| sound/player/lburn2.wav  ||style=text-align:right|  6076 || 6849ee8dbd91ec82ece016fbd39b0a5c
|-
| sound/player/pain1.wav  ||style=text-align:right|  3394 || d7ac9df7540b791f952ca2a681c0265b
|-
| sound/player/pain2.wav  ||style=text-align:right|  2710 || 513e054b64d4fb61f31384d59e123020
|-
| sound/player/pain3.wav  ||style=text-align:right|  4854 || aafc61ad4e16cc5cdd2db2100796b494
|-
| sound/player/pain4.wav  ||style=text-align:right|  4840 || f655ef2045bc55473303b27546aa6fc0
|-
| sound/player/pain5.wav  ||style=text-align:right|  8020 || f8551a73cb89396042687baa8c68b5c2
|-
| sound/player/pain6.wav  ||style=text-align:right|  5462 || 70062eabf96288d307280fb601ce0ee2
|-
| sound/player/plyrjmp8.wav  ||style=text-align:right|  3888 || d4a552d8f627c7f3b933568c4a74c913
|-
| sound/player/slimbrn2.wav  ||style=text-align:right|  12468 || b17c18a9f81a952f2d41f65b5180f210
|-
| sound/player/teledth1.wav  ||style=text-align:right|  14414 || c226c7f041187ba058d8112cc0190b56
|-
| sound/player/tornoff2.wav  ||style=text-align:right|  7726 || 03ec1c805b307b8fe4c4052f8332a5e5
|-
| sound/player/udeath.wav  ||style=text-align:right|  16082 || afe674f287efb6197da2cea0c0b1d2f8
|-
| sound/shambler/melee1.wav  ||style=text-align:right|  4718 || 77fe6240973a204b757a427ebf66bcfd
|-
| sound/shambler/melee2.wav  ||style=text-align:right|  5966 || 3be31638d769e3d690c92311dfafdeac
|-
| sound/shambler/sattck1.wav  ||style=text-align:right|  8036 || ec8c3f79ea42d09154cb8975ada1b21c
|-
| sound/shambler/sboom.wav  ||style=text-align:right|  11672 || 9834601a645d7d1f62001b2a314ec18f
|-
| sound/shambler/sdeath.wav  ||style=text-align:right|  21106 || e0e62d229a985a6e39218c6488599059
|-
| sound/shambler/shurt2.wav  ||style=text-align:right|  4302 || 1e87631ede95e061a75f9c31629ac0b8
|-
| sound/shambler/sidle.wav  ||style=text-align:right|  5646 || 368a240e6c3e877793352a79c1828386
|-
| sound/shambler/smack.wav  ||style=text-align:right|  5300 || bd8c634c9894348360fec7b7419d1649
|-
| sound/shambler/ssight.wav  ||style=text-align:right|  15420 || 657107577460d5acf3157dec97e07a89
|-
| sound/soldier/death1.wav  ||style=text-align:right|  8434 || fe25952af40b536c3bb67bfca58062eb
|-
| sound/soldier/idle.wav  ||style=text-align:right|  9802 || 4cdfbdda8fb5f40b125c7bcddb6e8914
|-
| sound/soldier/pain1.wav  ||style=text-align:right|  5000 || 54d3b05fdcecf7480034858f2b22b06c
|-
| sound/soldier/pain2.wav  ||style=text-align:right|  7838 || e2bbc9d3405b9b9fdae76d2fc298fc2f
|-
| sound/soldier/sattck1.wav  ||style=text-align:right|  14302 || b76ac35f900f280a7a7996da7e404362
|-
| sound/soldier/sight1.wav  ||style=text-align:right|  12716 || e2a39533250ddd1b08053d5c4ebf7fd0
|-
| sound/weapons/ax1.wav  ||style=text-align:right|  3308 || 237d4d819d02ad37849a8a895cc410e1
|-
| sound/weapons/bounce.wav  ||style=text-align:right|  5864 || fced668c6558a9505abf5014d60528a6
|-
| sound/weapons/grenade.wav  ||style=text-align:right|  8364 || d2b6fa131933f203eba2a282276e88df
|-
| sound/weapons/guncock.wav  ||style=text-align:right|  14430 || 6a63452167cc106e756518536446844f
|-
| sound/weapons/lhit.wav  ||style=text-align:right|  26028 || fefd021d0bd35a1f8da8870f1c06abb9
|-
| sound/weapons/lock4.wav  ||style=text-align:right|  3876 || 3fd93222258d5b1500b150f021c94519
|-
| sound/weapons/lstart.wav  ||style=text-align:right|  56378 || abe1abf6dcadcda5930b0684c7ea820a
|-
| sound/weapons/pkup.wav  ||style=text-align:right|  5174 || 0aa6f0a7d609e1a56fd535a06d1bb56e
|-
| sound/weapons/r_exp3.wav  ||style=text-align:right|  17478 || 57db026474fc76ba7f38cea24eaaf8cf
|-
| sound/weapons/ric1.wav  ||style=text-align:right|  4308 || a31166b4bbb4509ac3004a01f7477ee9
|-
| sound/weapons/ric2.wav  ||style=text-align:right|  10838 || a180b447c0527e603cea54a9aefd6139
|-
| sound/weapons/ric3.wav  ||style=text-align:right|  12638 || 8a773bbb585540ddce256151162f3a2c
|-
| sound/weapons/rocket1i.wav  ||style=text-align:right|  9660 || fb4fdf345d805cf6980c4c695974effc
|-
| sound/weapons/sgun1.wav  ||style=text-align:right|  22992 || 95a14815e48deb323d0cf8251d728ac7
|-
| sound/weapons/shotgn2.wav  ||style=text-align:right|  8694 || cb561cefbf472232334b419af050e5a0
|-
| sound/weapons/spike2.wav  ||style=text-align:right|  12642 || 9189d811855f108da4a1e2d34dc7c633
|-
| sound/weapons/tink1.wav  ||style=text-align:right|  1252 || 297ba8706625fcf05887edb393e9a441
|-
| sound/wizard/hit.wav  ||style=text-align:right|  7332 || 6598d669334df977f1f97b95288edf11
|-
| sound/wizard/wattack.wav  ||style=text-align:right|  25912 || b3568a47439f81779d40335e76f5bc2d
|-
| sound/wizard/wdeath.wav  ||style=text-align:right|  20684 || 99d9c71343bc23222abb92119d404400
|-
| sound/wizard/widle1.wav  ||style=text-align:right|  13464 || b22b1dd9f66879b3447d36ab584316c7
|-
| sound/wizard/widle2.wav  ||style=text-align:right|  23094 || 7178fd83df227360564adef01bed92c6
|-
| sound/wizard/wpain.wav  ||style=text-align:right|  8686 || bd7e59ab7d7b835f9ed8ab51950914de
|-
| sound/wizard/wsight.wav  ||style=text-align:right|  13078 || df5949057c750528917c6cb32b7fd9fd
|-
| sound/zombie/idle_w2.wav  ||style=text-align:right|  17192 || d2bb59b9d7ac71097c07123a23525641
|-
| sound/zombie/z_fall.wav  ||style=text-align:right|  3062 || 6968318b2d196c6d54bc707d8a390547
|-
| sound/zombie/z_gib.wav  ||style=text-align:right|  16226 || 199dda66ade8d6f0ef4897e4d7608c0d
|-
| sound/zombie/z_hit.wav  ||style=text-align:right|  6166 || 6c66ab3e6b149bf35956a4bbc0057acb
|-
| sound/zombie/z_idle1.wav  ||style=text-align:right|  13244 || 21088a7b38b1124d7ec72e58d5ab93a6
|-
| sound/zombie/z_idle.wav  ||style=text-align:right|  16734 || e5e570e38c4405111004190a79f0e925
|-
| sound/zombie/z_miss.wav  ||style=text-align:right|  10734 || 96fad96a8c3bc6f7bcc5da6c82678da2
|-
| sound/zombie/z_pain1.wav  ||style=text-align:right|  15374 || fcd83b89a94b0cadbe1361a4df080ec0
|-
| sound/zombie/z_pain.wav  ||style=text-align:right|  12218 || 56637968b8309bd2f825153330bbdfc0
|-
| sound/zombie/z_shot1.wav  ||style=text-align:right|  3068 || 561afb69b7851923a8fb3b54e3e13c96
|-
|}&lt;/tt&gt;

{{todo|todo=Multiple to do items listed above, detail out the contents of various pak files}}
{{todo|todo=different releases have different pak0.pak files}}</text>
      <sha1>mjezlood2wd4ieg5ypwkw7ttder1rym</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2253</id>
      <parentid>2241</parentid>
      <timestamp>2013-03-26T14:45:14Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>collapsible table</comment>
      <text xml:space="preserve" bytes="33551">The '''''pak0.pak''''' file that comes with Quake is required by all Quake [[engines]]. It contains the maps, models, programs, sounds, and skins required to play Quake Episode 1, ''Dimension of the Doomed''. It is expected to be in the ID1 subfolder of the Quake root folder.

[[PAK file]]s are typically named ''pak0.pak'', ''pak1.pak'', ''pak2.pak'', and so on. Quake mission packs and other Quake-based games often have their own ''pak0.pak'' files, which live in a different folder, not the ID1 folder.

The ID1 ''pak0.pak'' is distributed with both the shareware and the registered/commercial editions of Quake.

In some editions, including the downloadable shareware (''quake106.zip'') from id Software, ''pak0.pak'' is embedded in another archive, ''[[resource.1]]''. The files in this archive are LZH-encoded using the lh5 algorithm. If you can't or don't want to run the DOS/Win32 Quake installer program it comes with, then you'll need a compatible extractor program to get ''pak0.pak'' out of the ''resource.1'' archive.

The ID1 ''pak0.pak'' with the md5sum 5906e5998fc3d896ddaf5e6a62e03abb contains the following folders &amp; files:
&lt;tt&gt;
{| class=&quot;wikitable collapsible&quot;
|-
! Path !! Size !! md5
|-
| default.cfg  ||style=text-align:right|  1914 || fc989b37572fae074e8ffda0ce4d5297
|-
| demo1.dem  ||style=text-align:right|  184471 || 85ec0141ab24d9732e487d1aafa791f0
|-
| demo2.dem  ||style=text-align:right|  152705 || fa5c3daf7a57954cd95f94b698a7e420
|-
| demo3.dem  ||style=text-align:right|  197679 || 691f37e5715ea2863c1d8092a6429824
|-
| end1.bin  ||style=text-align:right|  4000 || 92ae51961ec2f429dfe9bea1138fbd5d
|-
| gfx/bigbox.lmp  ||style=text-align:right|  5192 || e597771ac6149b2b071ebfd24981ea04
|-
| gfx/box_bl.lmp  ||style=text-align:right|  72 || 5b094c37c2c1c2eebe37f84117dea182
|-
| gfx/box_bm.lmp  ||style=text-align:right|  136 || 44621236738e2bf8d669e53dca887278
|-
| gfx/box_br.lmp  ||style=text-align:right|  72 || 86597d5325b472caf5644644033e5cab
|-
| gfx/box_ml.lmp  ||style=text-align:right|  72 || adcea286ba0ac01084fd0c131b16ffdd
|-
| gfx/box_mm2.lmp  ||style=text-align:right|  136 || b850bcec189d909e7a0f796111a11249
|-
| gfx/box_mm.lmp  ||style=text-align:right|  136 || 700b4884b1a3c6aa7356a43014261866
|-
| gfx/box_mr.lmp  ||style=text-align:right|  72 || e30d9ea783ef7dd50101682f03ba40d7
|-
| gfx/box_tl.lmp  ||style=text-align:right|  72 || 3903d3d814e37c55790ac0ccfef2b925
|-
| gfx/box_tm.lmp  ||style=text-align:right|  136 || 7cb85ccbf8e7d2532da2a839a7cef348
|-
| gfx/box_tr.lmp  ||style=text-align:right|  72 || 5c5e72746af821a4cf8437d8fecc53c7
|-
| gfx/colormap.lmp  ||style=text-align:right|  16385 || 0d793b70bffafbd666fc5c88d6e15e9d
|-
| gfx/complete.lmp  ||style=text-align:right|  4616 || db6a00dfbe2c62a43c261e5622297c4a
|-
| gfx/conback.lmp  ||style=text-align:right|  64008 || 9eb6f9c47870bf42985d9382958a5c12
|-
| gfx/dim_drct.lmp  ||style=text-align:right|  3352 || 50ea11fe8c4d9db92863bdcd03b89df5
|-
| gfx/dim_ipx.lmp  ||style=text-align:right|  3352 || 0bef9943487f0611225bf0a5c0fe5dd4
|-
| gfx/dim_modm.lmp  ||style=text-align:right|  3352 || 3288f03144f06b95cadafa9458a77b1d
|-
| gfx/dim_mult.lmp  ||style=text-align:right|  3352 || 348b7369227f2d7e9d0daccbf6c9344d
|-
| gfx/dim_tcp.lmp  ||style=text-align:right|  3352 || 7dc8bbb01d7c90cd51c28da0ff6ed900
|-
| gfx/finale.lmp  ||style=text-align:right|  6920 || b6e49409d344e0344273d86ea33fe35f
|-
| gfx/help0.lmp  ||style=text-align:right|  64008 || b392ac30ad49252b51ec934ed855c20f
|-
| gfx/help1.lmp  ||style=text-align:right|  64008 || 857543c69245117a606044ea63adac9a
|-
| gfx/help2.lmp  ||style=text-align:right|  64008 || 882dd5920ea9c19f637f32084de9788a
|-
| gfx/help3.lmp  ||style=text-align:right|  64008 || a89d169524920d896128009467deebfc
|-
| gfx/help4.lmp  ||style=text-align:right|  64008 || c72d67c84ae6b403fae5f08d3e5c3bc6
|-
| gfx/help5.lmp  ||style=text-align:right|  64008 || 12203d7cdec35c4f51622dd90ec92093
|-
| gfx/inter.lmp  ||style=text-align:right|  23048 || f6eabe0d742380c7b47a9ee44170993d
|-
| gfx/loading.lmp  ||style=text-align:right|  3464 || 3249bc994266529a1748c06bfbb24bfa
|-
| gfx/mainmenu.lmp  ||style=text-align:right|  26888 || 8122e2a0b8888f9d1ebef149551b6434
|-
| gfx/menudot1.lmp  ||style=text-align:right|  392 || bfdb08d84d580abcfbacc1c9abd62bfb
|-
| gfx/menudot2.lmp  ||style=text-align:right|  392 || 6c6d2176e00edbe530bb1db118aaa6dc
|-
| gfx/menudot3.lmp  ||style=text-align:right|  392 || 2527a05f6162efb3e4bc5311d9e010d5
|-
| gfx/menudot4.lmp  ||style=text-align:right|  392 || 90ea6be033b39b139b3779932d266f33
|-
| gfx/menudot5.lmp  ||style=text-align:right|  392 || c9beb9600c35e458d0f83b6cf1e1c692
|-
| gfx/menudot6.lmp  ||style=text-align:right|  392 || 31b9a6ec1d12a2bd56b955185a9e72d3
|-
| gfx/menuplyr.lmp  ||style=text-align:right|  2696 || 9eebe617ff51c4ce43f85ca1a6920d5b
|-
| gfx/mp_menu.lmp  ||style=text-align:right|  14856 || c6416b8f7f5262a5a19b9ce4be1fd9ce
|-
| gfx/netmen1.lmp  ||style=text-align:right|  3352 || 5bc6a8d8cfdfd7e940e933812954367a
|-
| gfx/netmen2.lmp  ||style=text-align:right|  3352 || c8aafb649a653e90fc5eb7b7a2b3ca2e
|-
| gfx/netmen3.lmp  ||style=text-align:right|  3352 || 11c9372d0e64057a1ec8251f596b820d
|-
| gfx/netmen4.lmp  ||style=text-align:right|  3352 || 74ec672b1312699be2eeaf25a68e4582
|-
| gfx/netmen5.lmp  ||style=text-align:right|  3352 || 231f8a9ea4ba364f517db0e9f7f1ba72
|-
| gfx/palette.lmp  ||style=text-align:right|  768 || 79bc149d4f2fb0bd68cd8400a3fd87d4
|-
| gfx/pause.lmp  ||style=text-align:right|  3080 || 5aa67f927719e4a9eb3e020e75fea969
|-
| gfx/p_load.lmp  ||style=text-align:right|  2504 || 27fe08071058385529b0b8ad746421e7
|-
| gfx/p_multi.lmp  ||style=text-align:right|  5192 || 5a307c7d11da20a4772ad9c00b9f4309
|-
| gfx/p_option.lmp  ||style=text-align:right|  3464 || 83a3bf4459bce3fe85857a0aa647b90a
|-
| gfx/p_save.lmp  ||style=text-align:right|  2120 || 0d2bb5fa5524e0180a85bf273094cd1f
|-
| gfx/qplaque.lmp  ||style=text-align:right|  4616 || f4de79557c75e26b85ea84fb6029a5f3
|-
| gfx/ranking.lmp  ||style=text-align:right|  4040 || 919b13d1f7fdd0082ec0f94699f3b681
|-
| gfx/sell.lmp  ||style=text-align:right|  64008 || 878db3866e8b38c5b8d951aef516358c
|-
| gfx/sp_menu.lmp  ||style=text-align:right|  14856 || f624aa79778970ecb8ef518b5ab435f6
|-
| gfx/ttl_cstm.lmp  ||style=text-align:right|  4424 || 4ee84e0e7fa93f0e93d26efb1e726a4d
|-
| gfx/ttl_main.lmp  ||style=text-align:right|  2312 || 07e1c8e189e2463befcfc44f5ecf8dcb
|-
| gfx/ttl_sgl.lmp  ||style=text-align:right|  3080 || 25d5360228da738f091063eaeb7c6aa8
|-
| gfx/vidmodes.lmp  ||style=text-align:right|  5192 || 18a97f403057777f262188903f485fe8
|-
| gfx.wad  ||style=text-align:right|  112828 || cde5b5890c8902c02a2f271abe8f4a1f
|-
| maps/b_batt0.bsp  ||style=text-align:right|  5044 || 00bc989f4c8d2570a2826a63c7356a27
|-
| maps/b_batt1.bsp  ||style=text-align:right|  4620 || 555bc0cb0b5c2ad2ed0110f307e70679
|-
| maps/b_bh100.bsp  ||style=text-align:right|  8820 || 62f78bb5143265f037b79ddd077c50ed
|-
| maps/b_bh10.bsp  ||style=text-align:right|  3936 || e80cde9f185612f669fc100f825ca84f
|-
| maps/b_bh25.bsp  ||style=text-align:right|  8872 || 032d70dbf8669b3627b82b41f31488bd
|-
| maps/b_explob.bsp  ||style=text-align:right|  10220 || d8c9db3cfa0264678afc580143f665ea
|-
| maps/b_nail0.bsp  ||style=text-align:right|  5044 || c8d7ec0bdee74e0c1e69e8dbe939117d
|-
| maps/b_nail1.bsp  ||style=text-align:right|  5044 || ea08b2bd6aa19ece0307f75c491e5d24
|-
| maps/b_rock0.bsp  ||style=text-align:right|  2956 || 19ce64cd248a4459bf37b45e6e7c1219
|-
| maps/b_rock1.bsp  ||style=text-align:right|  2944 || b4cdb75094cd7218ed2b0475aefabe80
|-
| maps/b_shell0.bsp  ||style=text-align:right|  5044 || 574824b3c52661959d633a76dc823859
|-
| maps/b_shell1.bsp  ||style=text-align:right|  5044 || dc8b8dcb490e204e615b2b9cdc673296
|-
| maps/e1m1.bsp  ||style=text-align:right|  1365176 || 84cae48010619bcc945426b91bc03ade
|-
| maps/e1m2.bsp  ||style=text-align:right|  1332228 || caff91afbe41f3eac4dda65cee0083c9
|-
| maps/e1m3.bsp  ||style=text-align:right|  1249944 || f20eaa5692e94ab889c4ade9e1c116c7
|-
| maps/e1m4.bsp  ||style=text-align:right|  1411452 || 29419f05ef647f83d0482502bb3f84f8
|-
| maps/e1m5.bsp  ||style=text-align:right|  1324060 || afd98cc890d748986186951b32fc9fcb
|-
| maps/e1m6.bsp  ||style=text-align:right|  1065080 || ec178e54ff68c4d8cf71e26775b2eb2d
|-
| maps/e1m7.bsp  ||style=text-align:right|  607420 || 0c1f55455e0f957291e21d211b689718
|-
| maps/e1m8.bsp  ||style=text-align:right|  924116 || 18c7ab2f922d5d586150afbc27c323a4
|-
| maps/start.bsp  ||style=text-align:right|  1433792 || 61a57bb4ca36368478f02b142d1b5291
|-
| progs/armor.mdl  ||style=text-align:right|  44076 || ca060166d7e4e4686995f05645dde593
|-
| progs/backpack.mdl  ||style=text-align:right|  19348 || 315b4ef42fb035aa3318e8d2d61961ce
|-
| progs/bolt2.mdl  ||style=text-align:right|  11860 || f59ce07cfbe01fcfc578258c573d2c31
|-
| progs/bolt3.mdl  ||style=text-align:right|  11860 || ff87579a424faa59ca2695b7434ea488
|-
| progs/bolt.mdl  ||style=text-align:right|  20644 || a176903954e9d8c7ab629f92784546c2
|-
| progs/boss.mdl  ||style=text-align:right|  211836 || 25da3b2bc30677e32ee3a3a878a4d3af
|-
| progs.dat  ||style=text-align:right|  413116 || 0c3ef3625df5883536f8da42c78b673a
|-
| progs/demon.mdl  ||style=text-align:right|  102120 || 4c73786e7cfb2083ca38cbc983cd6c4b
|-
| progs/dog.mdl  ||style=text-align:right|  146056 || e727fbc39acc652f812972612ce37565
|-
| progs/end1.mdl  ||style=text-align:right|  20820 || 67c0fcab33d3772c00bb462b0e749275
|-
| progs/eyes.mdl  ||style=text-align:right|  4372 || ed72f64a17c6909b2cb3034a734bca97
|-
| progs/flame2.mdl  ||style=text-align:right|  64572 || f2c8f8950ebd7a0edded6247655d325b
|-
| progs/flame.mdl  ||style=text-align:right|  46364 || 8593c05374d84354d4444c218e86fdb8
|-
| progs/gib1.mdl  ||style=text-align:right|  5716 || f5c5b799e895dc03036522a487e99913
|-
| progs/gib2.mdl  ||style=text-align:right|  16228 || cfa9e97a3542852418123e0bb12e4f86
|-
| progs/gib3.mdl  ||style=text-align:right|  22228 || d73be7b2881e0a5aacf2b332ac29086f
|-
| progs/g_light.mdl  ||style=text-align:right|  50276 || 61bba06ec3804b7f355a62fd4585ad8f
|-
| progs/g_nail2.mdl  ||style=text-align:right|  30720 || ed6d7bb5ff050ad5f2bf4be7739a16a5
|-
| progs/g_nail.mdl  ||style=text-align:right|  34700 || e2959ca741c764dd42025ef531a1b554
|-
| progs/grenade.mdl  ||style=text-align:right|  2244 || f492d6257c216306983a72f41db0d891
|-
| progs/g_rock2.mdl  ||style=text-align:right|  40756 || 68c047c97bab89afe2cb69e65b7c62e1
|-
| progs/g_rock.mdl  ||style=text-align:right|  48244 || 61346f842944795e0821e31e3d61b427
|-
| progs/g_shot.mdl  ||style=text-align:right|  32916 || 7facfec1a3cfb892cce871f398e9cb6b
|-
| progs/h_demon.mdl  ||style=text-align:right|  34884 || 5253a0ea93d9624d73fb984ee339b52f
|-
| progs/h_dog.mdl  ||style=text-align:right|  24436 || a0b5f87522b3a769548c46cf3bb4223e
|-
| progs/h_guard.mdl  ||style=text-align:right|  5428 || 18a629b53b87392030df63b7806eb833
|-
| progs/h_knight.mdl  ||style=text-align:right|  7156 || 46a03fa72b0cdebcf58045aba2fafc13
|-
| progs/h_ogre.mdl  ||style=text-align:right|  14900 || 14eb06611c769e254d0531c05919bdf5
|-
| progs/h_player.mdl  ||style=text-align:right|  14708 || bf1773df7d3e19c5b211a1ee408f6b05
|-
| progs/h_shams.mdl  ||style=text-align:right|  37060 || ff1e04e18c57667991341a011fb6c363
|-
| progs/h_wizard.mdl  ||style=text-align:right|  14804 || 4bc6be40128f313cf9ad06c347310735
|-
| progs/h_zombie.mdl  ||style=text-align:right|  4484 || 0fdef7f7cd05a3209e0a163e87f69f8b
|-
| progs/invisibl.mdl  ||style=text-align:right|  7092 || 1e87d86af02e69db9c9f27f5fddc7a47
|-
| progs/invulner.mdl  ||style=text-align:right|  23920 || 8c8d83e4d50c3282d009b333a1280422
|-
| progs/knight.mdl  ||style=text-align:right|  101404 || 5328915db5c53e85cf75d46e7b747fb9
|-
| progs/lavaball.mdl  ||style=text-align:right|  8788 || 92af53d2145681e37877dbc1d12801b2
|-
| progs/m_g_key.mdl  ||style=text-align:right|  12820 || 192c2650a115c91706f6fa8fe68beb45
|-
| progs/missile.mdl  ||style=text-align:right|  57796 || 47f19f9e34954b93443c9759dd2e7ba0
|-
| progs/m_s_key.mdl  ||style=text-align:right|  12820 || 20837376b391cdd5c92e57b84e05687f
|-
| progs/ogre.mdl  ||style=text-align:right|  162036 || fbb592ca3788a576dd2f31fcf8c80fab
|-
| progs/player.mdl  ||style=text-align:right|  191852 || 405cef9a10d96cdabffb5e91312f8e5c
|-
| progs/quaddama.mdl  ||style=text-align:right|  39992 || 00b177ff272a4779097ea08344da8aff
|-
| progs/s_bubble.spr  ||style=text-align:right|  588 || 7c0887630ed468205292d8cb7abcae93
|-
| progs/s_explod.spr  ||style=text-align:right|  18972 || 766c6a92c26b54f68f7ff87c90d71cf2
|-
| progs/shambler.mdl  ||style=text-align:right|  98556 || 9b09375a0f614dc4081e363cc34f1185
|-
| progs/s_light.mdl  ||style=text-align:right|  27596 || ee6649ea5673989f3aa06213a8d65f76
|-
| progs/s_light.spr  ||style=text-align:right|  1080 || aff44ba238f4e1d0d504d6f9700aadb4
|-
| progs/soldier.mdl  ||style=text-align:right|  146288 || 5b6c30a984872b4273dd5861412d35c5
|-
| progs/spike.mdl  ||style=text-align:right|  1684 || be4cb73125f939284376080acc9887dd
|-
| progs/s_spike.mdl  ||style=text-align:right|  1684 || ebb1d58242b64a703623c8a33fcbd9e6
|-
| progs/suit.mdl  ||style=text-align:right|  51236 || 882a61f5eea7f9cdbc04800b963cef85
|-
| progs/v_axe.mdl  ||style=text-align:right|  57908 || 577dadcca2700068995c808dc7dec76f
|-
| progs/v_light.mdl  ||style=text-align:right|  56204 || 68733d4c690de88b5c3ba33e52be1c15
|-
| progs/v_nail2.mdl  ||style=text-align:right|  68732 || aacd1002ab02662cc1d3ff46885b553e
|-
| progs/v_nail.mdl  ||style=text-align:right|  54472 || ec9ba028b346da2f9674c2a521ff0c2f
|-
| progs/v_rock2.mdl  ||style=text-align:right|  58188 || 96edf1a3c7629987c200361523f780d7
|-
| progs/v_rock.mdl  ||style=text-align:right|  58548 || 7bea46b2a75fd7cff2fb99420e4c4e25
|-
| progs/v_shot2.mdl  ||style=text-align:right|  50816 || 922b3b687766ae0d7aeb73d44dec7035
|-
| progs/v_shot.mdl  ||style=text-align:right|  43852 || 1fd140b6856843e83cd9bf3966f5d7dd
|-
| progs/w_g_key.mdl  ||style=text-align:right|  7252 || c5c5f0d14b022f57294ad9aded318250
|-
| progs/wizard.mdl  ||style=text-align:right|  64472 || bf60986594f045e60e8aa6339d553ee7
|-
| progs/w_s_key.mdl  ||style=text-align:right|  7252 || ec02314a7d12439d36b4eb2dd0a641a8
|-
| progs/w_spike.mdl  ||style=text-align:right|  14336 || 8cf9245df2164e8062b01a220b508d6b
|-
| progs/zombie.mdl  ||style=text-align:right|  186084 || a923b1d03b9d237dd5ead9bd56acc900
|-
| progs/zom_gib.mdl  ||style=text-align:right|  10196 || cf42c938caa5b19f719d1f110b1dc6d4
|-
| quake.rc  ||style=text-align:right|  293 || 411d42958aaeae141813f9ebfcf5233f
|-
| sound/ambience/buzz1.wav  ||style=text-align:right|  36308 || 346a00c795c6f1f1338ade6fc350b3fe
|-
| sound/ambience/comp1.wav  ||style=text-align:right|  62734 || f91a1120de804f7cd4dbba4f12c748e9
|-
| sound/ambience/drip1.wav  ||style=text-align:right|  137736 || 2306a76162eeda3d0812c516bc99aa7a
|-
| sound/ambience/drone6.wav  ||style=text-align:right|  18522 || 322853ddb42ad2a205579b5cca8e2e8c
|-
| sound/ambience/fire1.wav  ||style=text-align:right|  24064 || 610d3985ed8133988e8de3bec2b9cbbe
|-
| sound/ambience/fl_hum1.wav  ||style=text-align:right|  50154 || e4628499702e004c4bacd282a3ecb8c0
|-
| sound/ambience/hum1.wav  ||style=text-align:right|  40166 || 486bfa737c35b0c9dda57cbee2a540af
|-
| sound/ambience/suck1.wav  ||style=text-align:right|  110392 || 2e99e4d1fe1501d5191c8157d3063cb6
|-
| sound/ambience/swamp1.wav  ||style=text-align:right|  68524 || 29ffb678d78997eb6c227677c86ea4f8
|-
| sound/ambience/swamp2.wav  ||style=text-align:right|  68526 || 356aa1e875da846e72d8f17bbb699a5b
|-
| sound/ambience/thunder1.wav  ||style=text-align:right|  41492 || cefd6ced4b5bc79fcece1003238566f6
|-
| sound/ambience/water1.wav  ||style=text-align:right|  55784 || 6eeaae0a3450652d2be0782895297ee4
|-
| sound/ambience/wind2.wav  ||style=text-align:right|  28610 || 030cf8dd2b00a12454b5b35a89d03914
|-
| sound/ambience/windfly.wav  ||style=text-align:right|  22140 || c7be01e6d324e66883f70aa0072a99b0
|-
| sound/boss1/death.wav  ||style=text-align:right|  27600 || 43469b1acd35b67107da5da82e1df911
|-
| sound/boss1/out1.wav  ||style=text-align:right|  50344 || 847a6f971f6905dfaffd70b30d18a4b1
|-
| sound/boss1/pain.wav  ||style=text-align:right|  17700 || 49112740c0ff421f9272b9e8efc748cd
|-
| sound/boss1/sight1.wav  ||style=text-align:right|  24768 || 427dd600e6b28c9402212adcc5d652c7
|-
| sound/boss1/throw.wav  ||style=text-align:right|  11526 || 9b6e9ff2c8df448f7fd4b5315e60ddda
|-
| sound/buttons/airbut1.wav  ||style=text-align:right|  10672 || 9d2e14e7176842a0dce909a43d38873d
|-
| sound/buttons/switch02.wav  ||style=text-align:right|  3746 || d2e9cba3a353edc65115f6f5c574403c
|-
| sound/buttons/switch04.wav  ||style=text-align:right|  3666 || ff47857a58d3faefb2b94a37d7ba4f26
|-
| sound/buttons/switch21.wav  ||style=text-align:right|  6318 || 3605b0d061a9baf185c6ab7614534531
|-
| sound/demon/ddeath.wav  ||style=text-align:right|  9140 || 62a48dcd405ca55c9ce18497e36faa0e
|-
| sound/demon/dhit2.wav  ||style=text-align:right|  7142 || 9e741696e4d0d66e30e718fc70ec186e
|-
| sound/demon/djump.wav  ||style=text-align:right|  8494 || 791ac9d6b6593808316145443cb7e7a0
|-
| sound/demon/dland2.wav  ||style=text-align:right|  4400 || db14c7b01838f826b7a712075f9026fd
|-
| sound/demon/dpain1.wav  ||style=text-align:right|  6282 || 5e6c485878393c9bebb0d0e6659bc479
|-
| sound/demon/idle1.wav  ||style=text-align:right|  9098 || 7a83f8caf3d5b1172a7dc5afdc942988
|-
| sound/demon/sight2.wav  ||style=text-align:right|  8804 || 65171c355c22a5069520b0881677ae3c
|-
| sound/dog/dattack1.wav  ||style=text-align:right|  8154 || 0c47c9d4aaae0bf3159a288b674f4a35
|-
| sound/dog/ddeath.wav  ||style=text-align:right|  14912 || b0e7760b1d7286a028ff9773f6802958
|-
| sound/dog/dpain1.wav  ||style=text-align:right|  7240 || 28e5ab93b41e13e2916433283a5d1a46
|-
| sound/dog/dsight.wav  ||style=text-align:right|  6722 || 0edc290765bac1fb4fe03ca55bc7c225
|-
| sound/dog/idle.wav  ||style=text-align:right|  6870 || 42bd6026ff32bd94523ad9f8fe8362cc
|-
| sound/doors/airdoor1.wav  ||style=text-align:right|  13654 || 9b91930e8c2fdece31a2362296891122
|-
| sound/doors/airdoor2.wav  ||style=text-align:right|  8594 || 29fd823d1c14ca42a9a89c716b26f4cd
|-
| sound/doors/basesec1.wav  ||style=text-align:right|  13930 || eb2363fed42724f55e8f55f96c335bcf
|-
| sound/doors/basesec2.wav  ||style=text-align:right|  10238 || 8d163a56607c9cf64a270a156c1c5cef
|-
| sound/doors/basetry.wav  ||style=text-align:right|  10518 || a5108d5c51281ab55c0baf884cbe8cbe
|-
| sound/doors/baseuse.wav  ||style=text-align:right|  16486 || f43fee91efe813a5eb34e9d72918fdb9
|-
| sound/doors/ddoor1.wav  ||style=text-align:right|  7738 || dff86a26139cdd49a193d5ed7ebf6ae1
|-
| sound/doors/ddoor2.wav  ||style=text-align:right|  5904 || 4a9d0b0825d0302ce465569d1e35fbcf
|-
| sound/doors/doormv1.wav  ||style=text-align:right|  14036 || 3fd379aec80a2ad8105c0c89ba5b40e6
|-
| sound/doors/drclos4.wav  ||style=text-align:right|  12814 || 83df1865a0c9fa5d02c2f137564c57de
|-
| sound/doors/hydro1.wav  ||style=text-align:right|  11094 || b1703980a20e624bc3366ccf55ca617e
|-
| sound/doors/hydro2.wav  ||style=text-align:right|  10700 || b1866f5b3950788ccf4206444ab64bc7
|-
| sound/doors/latch2.wav  ||style=text-align:right|  7338 || ad2378ca21a0ca529df328261e07aed5
|-
| sound/doors/medtry.wav  ||style=text-align:right|  7828 || ebb536bec2cdfd22c25b35793c055339
|-
| sound/doors/meduse.wav  ||style=text-align:right|  10718 || 4522aada194b23eb33b541cbcc755cf6
|-
| sound/doors/runetry.wav  ||style=text-align:right|  13524 || c433bae9e2ab508712f87dc2cacc82c8
|-
| sound/doors/runeuse.wav  ||style=text-align:right|  17364 || b4bcfd525a26f5b5ecc9d392430d9079
|-
| sound/doors/stndr1.wav  ||style=text-align:right|  12620 || 5bae2183885e18d65d69624e85249fd9
|-
| sound/doors/stndr2.wav  ||style=text-align:right|  11470 || f43a75c917effff09ef7be8a321c8b49
|-
| sound/doors/winch2.wav  ||style=text-align:right|  14872 || a4edffdfede7dbaed37db526c26e2b6d
|-
| sound/hknight/hit.wav  ||style=text-align:right|  6260 || fece24e2548f1d769e8fce39a5c87d01
|-
| sound/items/armor1.wav  ||style=text-align:right|  7714 || 186d29f2baf35b8c280bc97754606fad
|-
| sound/items/damage2.wav  ||style=text-align:right|  33012 || 14e53b7617ffe315a7c3f8d89652e51c
|-
| sound/items/damage3.wav  ||style=text-align:right|  12894 || baf754aec7ed4baba16760ac85513184
|-
| sound/items/damage.wav  ||style=text-align:right|  23374 || 8cde8b9278ca4922a4ec7ead6e5ee01b
|-
| sound/items/health1.wav  ||style=text-align:right|  7958 || 52a2c4f808db4edd8393de0de618c91f
|-
| sound/items/inv1.wav  ||style=text-align:right|  13728 || 5850cab55d6197d0e76d9f0a22ba10be
|-
| sound/items/inv2.wav  ||style=text-align:right|  33216 || 4edcd38a2c6adc5305636dd7afd5ef60
|-
| sound/items/inv3.wav  ||style=text-align:right|  33320 || 325c268be05b42a019ccb92e6993ab9e
|-
| sound/items/itembk2.wav  ||style=text-align:right|  9910 || 270c688b3cb884f5d4e5ffd8ccc934a1
|-
| sound/items/protect2.wav  ||style=text-align:right|  34012 || 25627a4bd2b4c6054cfd2fc4bf69ddc2
|-
| sound/items/protect3.wav  ||style=text-align:right|  23364 || 7b9374d67f6d59e524bba2af236ca30a
|-
| sound/items/protect.wav  ||style=text-align:right|  22536 || d839d5a84f811ce8a0e28616891bf1a7
|-
| sound/items/r_item1.wav  ||style=text-align:right|  6822 || 3fc0d0ae4a71c9fbfe548f38626c6a08
|-
| sound/items/r_item2.wav  ||style=text-align:right|  7448 || 384ffefe795d99df75f381596a0f1976
|-
| sound/items/suit2.wav  ||style=text-align:right|  33254 || 0a9d2766a5b805cb5794f9bea57e6585
|-
| sound/items/suit.wav  ||style=text-align:right|  15854 || da413f34023d219f1e34fde50a037be0
|-
| sound/knight/idle.wav  ||style=text-align:right|  11064 || 1b5c3981bee078318af346d8fe8090b9
|-
| sound/knight/kdeath.wav  ||style=text-align:right|  10688 || 11a96f48a8f2433c23beae299c8fb96e
|-
| sound/knight/khurt.wav  ||style=text-align:right|  5586 || 32c9f48dd4a6a87752aedf56fe8de668
|-
| sound/knight/ksight.wav  ||style=text-align:right|  13514 || eb75b4af348c88e84d8c87c19d5976fa
|-
| sound/knight/sword1.wav  ||style=text-align:right|  2306 || 93045b5f3178413dc6b01ec2869d1f73
|-
| sound/knight/sword2.wav  ||style=text-align:right|  2784 || 82d1a7c263cd3df7b060dee2f7f8b1fd
|-
| sound/misc/h2ohit1.wav  ||style=text-align:right|  12972 || 49ecb03f4f10862453656a67598f8b8a
|-
| sound/misc/medkey.wav  ||style=text-align:right|  10020 || 0e3ae5626a47d81e4166539e355e31bb
|-
| sound/misc/menu1.wav  ||style=text-align:right|  5738 || 12c36546601c385bc47c9ca9420b7eee
|-
| sound/misc/menu2.wav  ||style=text-align:right|  10672 || 39b01ea6feb3ec8dbd6d8ee3e5e966c4
|-
| sound/misc/menu3.wav  ||style=text-align:right|  3010 || 4a03dc2fd56831b855dab761eac4f7de
|-
| sound/misc/null.wav  ||style=text-align:right|  1244 || 811989e09124f54cb27fe6154b0f1018
|-
| sound/misc/outwater.wav  ||style=text-align:right|  5018 || 35732412412ddb5ed418633bb0123bbe
|-
| sound/misc/power.wav  ||style=text-align:right|  19832 || 9f2c3a18d9fc8d9cecfac6db3aad6bc6
|-
| sound/misc/r_tele1.wav  ||style=text-align:right|  8036 || c2194171b4c446e136ed7514fbb098a5
|-
| sound/misc/r_tele2.wav  ||style=text-align:right|  17324 || 0ce662ac90fb3658d69320d1be4025c1
|-
| sound/misc/r_tele3.wav  ||style=text-align:right|  18016 || 122ef44813edcfe7391578fd29e729d2
|-
| sound/misc/r_tele4.wav  ||style=text-align:right|  9068 || 0097b5747ccc70d5b12fc6838aff02c2
|-
| sound/misc/r_tele5.wav  ||style=text-align:right|  22042 || a82334cbb66d12f28cce9e71c90ea50b
|-
| sound/misc/runekey.wav  ||style=text-align:right|  14578 || 6b21a2e5878011da50fdee0a301d3e34
|-
| sound/misc/secret.wav  ||style=text-align:right|  6610 || a02ceefcc24b1ebf5c164a1e1acfb05f
|-
| sound/misc/talk.wav  ||style=text-align:right|  1810 || d5b25d4df59d92ac5016e88689ea60c1
|-
| sound/misc/trigger1.wav  ||style=text-align:right|  20230 || dc927c8a1d0a9bd59fbc5dd91ae1d812
|-
| sound/misc/water1.wav  ||style=text-align:right|  3926 || d8291c762acb1edf24927fdcc0f6a6cd
|-
| sound/misc/water2.wav  ||style=text-align:right|  3340 || 049e8e7e7b30d4d8038afb7248bdd977
|-
| sound/ogre/ogdrag.wav  ||style=text-align:right|  12396 || 658587dc89aaefae5ca3f058f7ff4227
|-
| sound/ogre/ogdth.wav  ||style=text-align:right|  13892 || de98e7bb9e70586edddd3308cfded3db
|-
| sound/ogre/ogidle2.wav  ||style=text-align:right|  11254 || 196ae9c33a4311160e1d5f3da878ab09
|-
| sound/ogre/ogidle.wav  ||style=text-align:right|  12894 || 177c829840a87c885bbc8951e7ce962e
|-
| sound/ogre/ogpain1.wav  ||style=text-align:right|  7898 || ac6d133d7720c12df49813fe10e683b5
|-
| sound/ogre/ogsawatk.wav  ||style=text-align:right|  16154 || 7257bdfd014bb61d778b8f88cb65d560
|-
| sound/ogre/ogwake.wav  ||style=text-align:right|  19356 || 3296459e495c4c12b31179d4eeffac19
|-
| sound/plats/medplat1.wav  ||style=text-align:right|  16378 || b73215aa6627c8b5b90fce8d260d48d0
|-
| sound/plats/medplat2.wav  ||style=text-align:right|  7338 || 1fc6c3772917a1a8155d04fa52e17005
|-
| sound/plats/plat1.wav  ||style=text-align:right|  20248 || 5d43ed85d896ba926f459e06ba6635d5
|-
| sound/plats/plat2.wav  ||style=text-align:right|  7338 || 49d7ab0fd726cd652eb6e5756fce61b9
|-
| sound/plats/train1.wav  ||style=text-align:right|  21430 || b589ae8262046361d9dca39d6b8f693a
|-
| sound/plats/train2.wav  ||style=text-align:right|  5870 || 640017e1b870d643e3bca29d499c72ee
|-
| sound/player/axhit1.wav  ||style=text-align:right|  6906 || 149b2371334da318386325182924eaca
|-
| sound/player/axhit2.wav  ||style=text-align:right|  2434 || fc01909318455f5310efa2457a370897
|-
| sound/player/death1.wav  ||style=text-align:right|  10170 || ba005f5488d4ee78dabf613a03f33a5f
|-
| sound/player/death2.wav  ||style=text-align:right|  8026 || 20477d2e7c84aac1bef95d32c9c702dd
|-
| sound/player/death3.wav  ||style=text-align:right|  10918 || 7b206ba8e1fa28d8605b50e3f3200f11
|-
| sound/player/death4.wav  ||style=text-align:right|  14126 || 1b0f27f4d41b748d3cc5c3d56bd917f8
|-
| sound/player/death5.wav  ||style=text-align:right|  14946 || 7efe84195cfa97515aad2d7f96f25346
|-
| sound/player/drown1.wav  ||style=text-align:right|  8908 || 732f0416af6990e028110380bcb36f0d
|-
| sound/player/drown2.wav  ||style=text-align:right|  3114 || 29ee1f287879acce29b15d4722668bc2
|-
| sound/player/gasp1.wav  ||style=text-align:right|  8702 || b06cbc370c8c2c163dc4d487e8b673c7
|-
| sound/player/gasp2.wav  ||style=text-align:right|  13134 || 30aece9d8779764620c7f866bfb06edb
|-
| sound/player/gib.wav  ||style=text-align:right|  14424 || 26fa9942078125388f34b71546615068
|-
| sound/player/h2odeath.wav  ||style=text-align:right|  18104 || 73b0f4dfae07f6e49112cadfe202735c
|-
| sound/player/h2ojump.wav  ||style=text-align:right|  11438 || cd421b96410971bb1a4f21d3936a3805
|-
| sound/player/inh2o.wav  ||style=text-align:right|  11340 || d4c1a27c4d07e8dfdf18a4b1a880c610
|-
| sound/player/inlava.wav  ||style=text-align:right|  10958 || c37875a082900716b7af88d2d990f55c
|-
| sound/player/land2.wav  ||style=text-align:right|  6204 || 6ba534256a779d66d9d9dabb90e63c8b
|-
| sound/player/land.wav  ||style=text-align:right|  2434 || e34328a40358d98f0f95403b9e27ec1e
|-
| sound/player/lburn1.wav  ||style=text-align:right|  6682 || 3c447c72385defe97c060771077d8ba0
|-
| sound/player/lburn2.wav  ||style=text-align:right|  6076 || 6849ee8dbd91ec82ece016fbd39b0a5c
|-
| sound/player/pain1.wav  ||style=text-align:right|  3394 || d7ac9df7540b791f952ca2a681c0265b
|-
| sound/player/pain2.wav  ||style=text-align:right|  2710 || 513e054b64d4fb61f31384d59e123020
|-
| sound/player/pain3.wav  ||style=text-align:right|  4854 || aafc61ad4e16cc5cdd2db2100796b494
|-
| sound/player/pain4.wav  ||style=text-align:right|  4840 || f655ef2045bc55473303b27546aa6fc0
|-
| sound/player/pain5.wav  ||style=text-align:right|  8020 || f8551a73cb89396042687baa8c68b5c2
|-
| sound/player/pain6.wav  ||style=text-align:right|  5462 || 70062eabf96288d307280fb601ce0ee2
|-
| sound/player/plyrjmp8.wav  ||style=text-align:right|  3888 || d4a552d8f627c7f3b933568c4a74c913
|-
| sound/player/slimbrn2.wav  ||style=text-align:right|  12468 || b17c18a9f81a952f2d41f65b5180f210
|-
| sound/player/teledth1.wav  ||style=text-align:right|  14414 || c226c7f041187ba058d8112cc0190b56
|-
| sound/player/tornoff2.wav  ||style=text-align:right|  7726 || 03ec1c805b307b8fe4c4052f8332a5e5
|-
| sound/player/udeath.wav  ||style=text-align:right|  16082 || afe674f287efb6197da2cea0c0b1d2f8
|-
| sound/shambler/melee1.wav  ||style=text-align:right|  4718 || 77fe6240973a204b757a427ebf66bcfd
|-
| sound/shambler/melee2.wav  ||style=text-align:right|  5966 || 3be31638d769e3d690c92311dfafdeac
|-
| sound/shambler/sattck1.wav  ||style=text-align:right|  8036 || ec8c3f79ea42d09154cb8975ada1b21c
|-
| sound/shambler/sboom.wav  ||style=text-align:right|  11672 || 9834601a645d7d1f62001b2a314ec18f
|-
| sound/shambler/sdeath.wav  ||style=text-align:right|  21106 || e0e62d229a985a6e39218c6488599059
|-
| sound/shambler/shurt2.wav  ||style=text-align:right|  4302 || 1e87631ede95e061a75f9c31629ac0b8
|-
| sound/shambler/sidle.wav  ||style=text-align:right|  5646 || 368a240e6c3e877793352a79c1828386
|-
| sound/shambler/smack.wav  ||style=text-align:right|  5300 || bd8c634c9894348360fec7b7419d1649
|-
| sound/shambler/ssight.wav  ||style=text-align:right|  15420 || 657107577460d5acf3157dec97e07a89
|-
| sound/soldier/death1.wav  ||style=text-align:right|  8434 || fe25952af40b536c3bb67bfca58062eb
|-
| sound/soldier/idle.wav  ||style=text-align:right|  9802 || 4cdfbdda8fb5f40b125c7bcddb6e8914
|-
| sound/soldier/pain1.wav  ||style=text-align:right|  5000 || 54d3b05fdcecf7480034858f2b22b06c
|-
| sound/soldier/pain2.wav  ||style=text-align:right|  7838 || e2bbc9d3405b9b9fdae76d2fc298fc2f
|-
| sound/soldier/sattck1.wav  ||style=text-align:right|  14302 || b76ac35f900f280a7a7996da7e404362
|-
| sound/soldier/sight1.wav  ||style=text-align:right|  12716 || e2a39533250ddd1b08053d5c4ebf7fd0
|-
| sound/weapons/ax1.wav  ||style=text-align:right|  3308 || 237d4d819d02ad37849a8a895cc410e1
|-
| sound/weapons/bounce.wav  ||style=text-align:right|  5864 || fced668c6558a9505abf5014d60528a6
|-
| sound/weapons/grenade.wav  ||style=text-align:right|  8364 || d2b6fa131933f203eba2a282276e88df
|-
| sound/weapons/guncock.wav  ||style=text-align:right|  14430 || 6a63452167cc106e756518536446844f
|-
| sound/weapons/lhit.wav  ||style=text-align:right|  26028 || fefd021d0bd35a1f8da8870f1c06abb9
|-
| sound/weapons/lock4.wav  ||style=text-align:right|  3876 || 3fd93222258d5b1500b150f021c94519
|-
| sound/weapons/lstart.wav  ||style=text-align:right|  56378 || abe1abf6dcadcda5930b0684c7ea820a
|-
| sound/weapons/pkup.wav  ||style=text-align:right|  5174 || 0aa6f0a7d609e1a56fd535a06d1bb56e
|-
| sound/weapons/r_exp3.wav  ||style=text-align:right|  17478 || 57db026474fc76ba7f38cea24eaaf8cf
|-
| sound/weapons/ric1.wav  ||style=text-align:right|  4308 || a31166b4bbb4509ac3004a01f7477ee9
|-
| sound/weapons/ric2.wav  ||style=text-align:right|  10838 || a180b447c0527e603cea54a9aefd6139
|-
| sound/weapons/ric3.wav  ||style=text-align:right|  12638 || 8a773bbb585540ddce256151162f3a2c
|-
| sound/weapons/rocket1i.wav  ||style=text-align:right|  9660 || fb4fdf345d805cf6980c4c695974effc
|-
| sound/weapons/sgun1.wav  ||style=text-align:right|  22992 || 95a14815e48deb323d0cf8251d728ac7
|-
| sound/weapons/shotgn2.wav  ||style=text-align:right|  8694 || cb561cefbf472232334b419af050e5a0
|-
| sound/weapons/spike2.wav  ||style=text-align:right|  12642 || 9189d811855f108da4a1e2d34dc7c633
|-
| sound/weapons/tink1.wav  ||style=text-align:right|  1252 || 297ba8706625fcf05887edb393e9a441
|-
| sound/wizard/hit.wav  ||style=text-align:right|  7332 || 6598d669334df977f1f97b95288edf11
|-
| sound/wizard/wattack.wav  ||style=text-align:right|  25912 || b3568a47439f81779d40335e76f5bc2d
|-
| sound/wizard/wdeath.wav  ||style=text-align:right|  20684 || 99d9c71343bc23222abb92119d404400
|-
| sound/wizard/widle1.wav  ||style=text-align:right|  13464 || b22b1dd9f66879b3447d36ab584316c7
|-
| sound/wizard/widle2.wav  ||style=text-align:right|  23094 || 7178fd83df227360564adef01bed92c6
|-
| sound/wizard/wpain.wav  ||style=text-align:right|  8686 || bd7e59ab7d7b835f9ed8ab51950914de
|-
| sound/wizard/wsight.wav  ||style=text-align:right|  13078 || df5949057c750528917c6cb32b7fd9fd
|-
| sound/zombie/idle_w2.wav  ||style=text-align:right|  17192 || d2bb59b9d7ac71097c07123a23525641
|-
| sound/zombie/z_fall.wav  ||style=text-align:right|  3062 || 6968318b2d196c6d54bc707d8a390547
|-
| sound/zombie/z_gib.wav  ||style=text-align:right|  16226 || 199dda66ade8d6f0ef4897e4d7608c0d
|-
| sound/zombie/z_hit.wav  ||style=text-align:right|  6166 || 6c66ab3e6b149bf35956a4bbc0057acb
|-
| sound/zombie/z_idle1.wav  ||style=text-align:right|  13244 || 21088a7b38b1124d7ec72e58d5ab93a6
|-
| sound/zombie/z_idle.wav  ||style=text-align:right|  16734 || e5e570e38c4405111004190a79f0e925
|-
| sound/zombie/z_miss.wav  ||style=text-align:right|  10734 || 96fad96a8c3bc6f7bcc5da6c82678da2
|-
| sound/zombie/z_pain1.wav  ||style=text-align:right|  15374 || fcd83b89a94b0cadbe1361a4df080ec0
|-
| sound/zombie/z_pain.wav  ||style=text-align:right|  12218 || 56637968b8309bd2f825153330bbdfc0
|-
| sound/zombie/z_shot1.wav  ||style=text-align:right|  3068 || 561afb69b7851923a8fb3b54e3e13c96
|-
|}&lt;/tt&gt;

{{todo|todo=Multiple to do items listed above, detail out the contents of various pak files}}
{{todo|todo=different releases have different pak0.pak files}}</text>
      <sha1>qhsev3eojrlxru8l3ejubfwxt7vv7nx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2254</id>
      <parentid>2253</parentid>
      <timestamp>2013-03-26T14:46:36Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>cant get it to work</comment>
      <text xml:space="preserve" bytes="33558">The '''''pak0.pak''''' file that comes with Quake is required by all Quake [[engines]]. It contains the maps, models, programs, sounds, and skins required to play Quake Episode 1, ''Dimension of the Doomed''. It is expected to be in the ID1 subfolder of the Quake root folder.

[[PAK file]]s are typically named ''pak0.pak'', ''pak1.pak'', ''pak2.pak'', and so on. Quake mission packs and other Quake-based games often have their own ''pak0.pak'' files, which live in a different folder, not the ID1 folder.

The ID1 ''pak0.pak'' is distributed with both the shareware and the registered/commercial editions of Quake.

In some editions, including the downloadable shareware (''quake106.zip'') from id Software, ''pak0.pak'' is embedded in another archive, ''[[resource.1]]''. The files in this archive are LZH-encoded using the lh5 algorithm. If you can't or don't want to run the DOS/Win32 Quake installer program it comes with, then you'll need a compatible extractor program to get ''pak0.pak'' out of the ''resource.1'' archive.

The ID1 ''pak0.pak'' with the md5sum 5906e5998fc3d896ddaf5e6a62e03abb contains the following folders &amp; files:
&lt;tt&gt;
{| class=&quot;wikitable collapsible collapsed&quot;
! Path !! Size !! md5
|-
| default.cfg  ||style=text-align:right|  1914 || fc989b37572fae074e8ffda0ce4d5297
|-
| demo1.dem  ||style=text-align:right|  184471 || 85ec0141ab24d9732e487d1aafa791f0
|-
| demo2.dem  ||style=text-align:right|  152705 || fa5c3daf7a57954cd95f94b698a7e420
|-
| demo3.dem  ||style=text-align:right|  197679 || 691f37e5715ea2863c1d8092a6429824
|-
| end1.bin  ||style=text-align:right|  4000 || 92ae51961ec2f429dfe9bea1138fbd5d
|-
| gfx/bigbox.lmp  ||style=text-align:right|  5192 || e597771ac6149b2b071ebfd24981ea04
|-
| gfx/box_bl.lmp  ||style=text-align:right|  72 || 5b094c37c2c1c2eebe37f84117dea182
|-
| gfx/box_bm.lmp  ||style=text-align:right|  136 || 44621236738e2bf8d669e53dca887278
|-
| gfx/box_br.lmp  ||style=text-align:right|  72 || 86597d5325b472caf5644644033e5cab
|-
| gfx/box_ml.lmp  ||style=text-align:right|  72 || adcea286ba0ac01084fd0c131b16ffdd
|-
| gfx/box_mm2.lmp  ||style=text-align:right|  136 || b850bcec189d909e7a0f796111a11249
|-
| gfx/box_mm.lmp  ||style=text-align:right|  136 || 700b4884b1a3c6aa7356a43014261866
|-
| gfx/box_mr.lmp  ||style=text-align:right|  72 || e30d9ea783ef7dd50101682f03ba40d7
|-
| gfx/box_tl.lmp  ||style=text-align:right|  72 || 3903d3d814e37c55790ac0ccfef2b925
|-
| gfx/box_tm.lmp  ||style=text-align:right|  136 || 7cb85ccbf8e7d2532da2a839a7cef348
|-
| gfx/box_tr.lmp  ||style=text-align:right|  72 || 5c5e72746af821a4cf8437d8fecc53c7
|-
| gfx/colormap.lmp  ||style=text-align:right|  16385 || 0d793b70bffafbd666fc5c88d6e15e9d
|-
| gfx/complete.lmp  ||style=text-align:right|  4616 || db6a00dfbe2c62a43c261e5622297c4a
|-
| gfx/conback.lmp  ||style=text-align:right|  64008 || 9eb6f9c47870bf42985d9382958a5c12
|-
| gfx/dim_drct.lmp  ||style=text-align:right|  3352 || 50ea11fe8c4d9db92863bdcd03b89df5
|-
| gfx/dim_ipx.lmp  ||style=text-align:right|  3352 || 0bef9943487f0611225bf0a5c0fe5dd4
|-
| gfx/dim_modm.lmp  ||style=text-align:right|  3352 || 3288f03144f06b95cadafa9458a77b1d
|-
| gfx/dim_mult.lmp  ||style=text-align:right|  3352 || 348b7369227f2d7e9d0daccbf6c9344d
|-
| gfx/dim_tcp.lmp  ||style=text-align:right|  3352 || 7dc8bbb01d7c90cd51c28da0ff6ed900
|-
| gfx/finale.lmp  ||style=text-align:right|  6920 || b6e49409d344e0344273d86ea33fe35f
|-
| gfx/help0.lmp  ||style=text-align:right|  64008 || b392ac30ad49252b51ec934ed855c20f
|-
| gfx/help1.lmp  ||style=text-align:right|  64008 || 857543c69245117a606044ea63adac9a
|-
| gfx/help2.lmp  ||style=text-align:right|  64008 || 882dd5920ea9c19f637f32084de9788a
|-
| gfx/help3.lmp  ||style=text-align:right|  64008 || a89d169524920d896128009467deebfc
|-
| gfx/help4.lmp  ||style=text-align:right|  64008 || c72d67c84ae6b403fae5f08d3e5c3bc6
|-
| gfx/help5.lmp  ||style=text-align:right|  64008 || 12203d7cdec35c4f51622dd90ec92093
|-
| gfx/inter.lmp  ||style=text-align:right|  23048 || f6eabe0d742380c7b47a9ee44170993d
|-
| gfx/loading.lmp  ||style=text-align:right|  3464 || 3249bc994266529a1748c06bfbb24bfa
|-
| gfx/mainmenu.lmp  ||style=text-align:right|  26888 || 8122e2a0b8888f9d1ebef149551b6434
|-
| gfx/menudot1.lmp  ||style=text-align:right|  392 || bfdb08d84d580abcfbacc1c9abd62bfb
|-
| gfx/menudot2.lmp  ||style=text-align:right|  392 || 6c6d2176e00edbe530bb1db118aaa6dc
|-
| gfx/menudot3.lmp  ||style=text-align:right|  392 || 2527a05f6162efb3e4bc5311d9e010d5
|-
| gfx/menudot4.lmp  ||style=text-align:right|  392 || 90ea6be033b39b139b3779932d266f33
|-
| gfx/menudot5.lmp  ||style=text-align:right|  392 || c9beb9600c35e458d0f83b6cf1e1c692
|-
| gfx/menudot6.lmp  ||style=text-align:right|  392 || 31b9a6ec1d12a2bd56b955185a9e72d3
|-
| gfx/menuplyr.lmp  ||style=text-align:right|  2696 || 9eebe617ff51c4ce43f85ca1a6920d5b
|-
| gfx/mp_menu.lmp  ||style=text-align:right|  14856 || c6416b8f7f5262a5a19b9ce4be1fd9ce
|-
| gfx/netmen1.lmp  ||style=text-align:right|  3352 || 5bc6a8d8cfdfd7e940e933812954367a
|-
| gfx/netmen2.lmp  ||style=text-align:right|  3352 || c8aafb649a653e90fc5eb7b7a2b3ca2e
|-
| gfx/netmen3.lmp  ||style=text-align:right|  3352 || 11c9372d0e64057a1ec8251f596b820d
|-
| gfx/netmen4.lmp  ||style=text-align:right|  3352 || 74ec672b1312699be2eeaf25a68e4582
|-
| gfx/netmen5.lmp  ||style=text-align:right|  3352 || 231f8a9ea4ba364f517db0e9f7f1ba72
|-
| gfx/palette.lmp  ||style=text-align:right|  768 || 79bc149d4f2fb0bd68cd8400a3fd87d4
|-
| gfx/pause.lmp  ||style=text-align:right|  3080 || 5aa67f927719e4a9eb3e020e75fea969
|-
| gfx/p_load.lmp  ||style=text-align:right|  2504 || 27fe08071058385529b0b8ad746421e7
|-
| gfx/p_multi.lmp  ||style=text-align:right|  5192 || 5a307c7d11da20a4772ad9c00b9f4309
|-
| gfx/p_option.lmp  ||style=text-align:right|  3464 || 83a3bf4459bce3fe85857a0aa647b90a
|-
| gfx/p_save.lmp  ||style=text-align:right|  2120 || 0d2bb5fa5524e0180a85bf273094cd1f
|-
| gfx/qplaque.lmp  ||style=text-align:right|  4616 || f4de79557c75e26b85ea84fb6029a5f3
|-
| gfx/ranking.lmp  ||style=text-align:right|  4040 || 919b13d1f7fdd0082ec0f94699f3b681
|-
| gfx/sell.lmp  ||style=text-align:right|  64008 || 878db3866e8b38c5b8d951aef516358c
|-
| gfx/sp_menu.lmp  ||style=text-align:right|  14856 || f624aa79778970ecb8ef518b5ab435f6
|-
| gfx/ttl_cstm.lmp  ||style=text-align:right|  4424 || 4ee84e0e7fa93f0e93d26efb1e726a4d
|-
| gfx/ttl_main.lmp  ||style=text-align:right|  2312 || 07e1c8e189e2463befcfc44f5ecf8dcb
|-
| gfx/ttl_sgl.lmp  ||style=text-align:right|  3080 || 25d5360228da738f091063eaeb7c6aa8
|-
| gfx/vidmodes.lmp  ||style=text-align:right|  5192 || 18a97f403057777f262188903f485fe8
|-
| gfx.wad  ||style=text-align:right|  112828 || cde5b5890c8902c02a2f271abe8f4a1f
|-
| maps/b_batt0.bsp  ||style=text-align:right|  5044 || 00bc989f4c8d2570a2826a63c7356a27
|-
| maps/b_batt1.bsp  ||style=text-align:right|  4620 || 555bc0cb0b5c2ad2ed0110f307e70679
|-
| maps/b_bh100.bsp  ||style=text-align:right|  8820 || 62f78bb5143265f037b79ddd077c50ed
|-
| maps/b_bh10.bsp  ||style=text-align:right|  3936 || e80cde9f185612f669fc100f825ca84f
|-
| maps/b_bh25.bsp  ||style=text-align:right|  8872 || 032d70dbf8669b3627b82b41f31488bd
|-
| maps/b_explob.bsp  ||style=text-align:right|  10220 || d8c9db3cfa0264678afc580143f665ea
|-
| maps/b_nail0.bsp  ||style=text-align:right|  5044 || c8d7ec0bdee74e0c1e69e8dbe939117d
|-
| maps/b_nail1.bsp  ||style=text-align:right|  5044 || ea08b2bd6aa19ece0307f75c491e5d24
|-
| maps/b_rock0.bsp  ||style=text-align:right|  2956 || 19ce64cd248a4459bf37b45e6e7c1219
|-
| maps/b_rock1.bsp  ||style=text-align:right|  2944 || b4cdb75094cd7218ed2b0475aefabe80
|-
| maps/b_shell0.bsp  ||style=text-align:right|  5044 || 574824b3c52661959d633a76dc823859
|-
| maps/b_shell1.bsp  ||style=text-align:right|  5044 || dc8b8dcb490e204e615b2b9cdc673296
|-
| maps/e1m1.bsp  ||style=text-align:right|  1365176 || 84cae48010619bcc945426b91bc03ade
|-
| maps/e1m2.bsp  ||style=text-align:right|  1332228 || caff91afbe41f3eac4dda65cee0083c9
|-
| maps/e1m3.bsp  ||style=text-align:right|  1249944 || f20eaa5692e94ab889c4ade9e1c116c7
|-
| maps/e1m4.bsp  ||style=text-align:right|  1411452 || 29419f05ef647f83d0482502bb3f84f8
|-
| maps/e1m5.bsp  ||style=text-align:right|  1324060 || afd98cc890d748986186951b32fc9fcb
|-
| maps/e1m6.bsp  ||style=text-align:right|  1065080 || ec178e54ff68c4d8cf71e26775b2eb2d
|-
| maps/e1m7.bsp  ||style=text-align:right|  607420 || 0c1f55455e0f957291e21d211b689718
|-
| maps/e1m8.bsp  ||style=text-align:right|  924116 || 18c7ab2f922d5d586150afbc27c323a4
|-
| maps/start.bsp  ||style=text-align:right|  1433792 || 61a57bb4ca36368478f02b142d1b5291
|-
| progs/armor.mdl  ||style=text-align:right|  44076 || ca060166d7e4e4686995f05645dde593
|-
| progs/backpack.mdl  ||style=text-align:right|  19348 || 315b4ef42fb035aa3318e8d2d61961ce
|-
| progs/bolt2.mdl  ||style=text-align:right|  11860 || f59ce07cfbe01fcfc578258c573d2c31
|-
| progs/bolt3.mdl  ||style=text-align:right|  11860 || ff87579a424faa59ca2695b7434ea488
|-
| progs/bolt.mdl  ||style=text-align:right|  20644 || a176903954e9d8c7ab629f92784546c2
|-
| progs/boss.mdl  ||style=text-align:right|  211836 || 25da3b2bc30677e32ee3a3a878a4d3af
|-
| progs.dat  ||style=text-align:right|  413116 || 0c3ef3625df5883536f8da42c78b673a
|-
| progs/demon.mdl  ||style=text-align:right|  102120 || 4c73786e7cfb2083ca38cbc983cd6c4b
|-
| progs/dog.mdl  ||style=text-align:right|  146056 || e727fbc39acc652f812972612ce37565
|-
| progs/end1.mdl  ||style=text-align:right|  20820 || 67c0fcab33d3772c00bb462b0e749275
|-
| progs/eyes.mdl  ||style=text-align:right|  4372 || ed72f64a17c6909b2cb3034a734bca97
|-
| progs/flame2.mdl  ||style=text-align:right|  64572 || f2c8f8950ebd7a0edded6247655d325b
|-
| progs/flame.mdl  ||style=text-align:right|  46364 || 8593c05374d84354d4444c218e86fdb8
|-
| progs/gib1.mdl  ||style=text-align:right|  5716 || f5c5b799e895dc03036522a487e99913
|-
| progs/gib2.mdl  ||style=text-align:right|  16228 || cfa9e97a3542852418123e0bb12e4f86
|-
| progs/gib3.mdl  ||style=text-align:right|  22228 || d73be7b2881e0a5aacf2b332ac29086f
|-
| progs/g_light.mdl  ||style=text-align:right|  50276 || 61bba06ec3804b7f355a62fd4585ad8f
|-
| progs/g_nail2.mdl  ||style=text-align:right|  30720 || ed6d7bb5ff050ad5f2bf4be7739a16a5
|-
| progs/g_nail.mdl  ||style=text-align:right|  34700 || e2959ca741c764dd42025ef531a1b554
|-
| progs/grenade.mdl  ||style=text-align:right|  2244 || f492d6257c216306983a72f41db0d891
|-
| progs/g_rock2.mdl  ||style=text-align:right|  40756 || 68c047c97bab89afe2cb69e65b7c62e1
|-
| progs/g_rock.mdl  ||style=text-align:right|  48244 || 61346f842944795e0821e31e3d61b427
|-
| progs/g_shot.mdl  ||style=text-align:right|  32916 || 7facfec1a3cfb892cce871f398e9cb6b
|-
| progs/h_demon.mdl  ||style=text-align:right|  34884 || 5253a0ea93d9624d73fb984ee339b52f
|-
| progs/h_dog.mdl  ||style=text-align:right|  24436 || a0b5f87522b3a769548c46cf3bb4223e
|-
| progs/h_guard.mdl  ||style=text-align:right|  5428 || 18a629b53b87392030df63b7806eb833
|-
| progs/h_knight.mdl  ||style=text-align:right|  7156 || 46a03fa72b0cdebcf58045aba2fafc13
|-
| progs/h_ogre.mdl  ||style=text-align:right|  14900 || 14eb06611c769e254d0531c05919bdf5
|-
| progs/h_player.mdl  ||style=text-align:right|  14708 || bf1773df7d3e19c5b211a1ee408f6b05
|-
| progs/h_shams.mdl  ||style=text-align:right|  37060 || ff1e04e18c57667991341a011fb6c363
|-
| progs/h_wizard.mdl  ||style=text-align:right|  14804 || 4bc6be40128f313cf9ad06c347310735
|-
| progs/h_zombie.mdl  ||style=text-align:right|  4484 || 0fdef7f7cd05a3209e0a163e87f69f8b
|-
| progs/invisibl.mdl  ||style=text-align:right|  7092 || 1e87d86af02e69db9c9f27f5fddc7a47
|-
| progs/invulner.mdl  ||style=text-align:right|  23920 || 8c8d83e4d50c3282d009b333a1280422
|-
| progs/knight.mdl  ||style=text-align:right|  101404 || 5328915db5c53e85cf75d46e7b747fb9
|-
| progs/lavaball.mdl  ||style=text-align:right|  8788 || 92af53d2145681e37877dbc1d12801b2
|-
| progs/m_g_key.mdl  ||style=text-align:right|  12820 || 192c2650a115c91706f6fa8fe68beb45
|-
| progs/missile.mdl  ||style=text-align:right|  57796 || 47f19f9e34954b93443c9759dd2e7ba0
|-
| progs/m_s_key.mdl  ||style=text-align:right|  12820 || 20837376b391cdd5c92e57b84e05687f
|-
| progs/ogre.mdl  ||style=text-align:right|  162036 || fbb592ca3788a576dd2f31fcf8c80fab
|-
| progs/player.mdl  ||style=text-align:right|  191852 || 405cef9a10d96cdabffb5e91312f8e5c
|-
| progs/quaddama.mdl  ||style=text-align:right|  39992 || 00b177ff272a4779097ea08344da8aff
|-
| progs/s_bubble.spr  ||style=text-align:right|  588 || 7c0887630ed468205292d8cb7abcae93
|-
| progs/s_explod.spr  ||style=text-align:right|  18972 || 766c6a92c26b54f68f7ff87c90d71cf2
|-
| progs/shambler.mdl  ||style=text-align:right|  98556 || 9b09375a0f614dc4081e363cc34f1185
|-
| progs/s_light.mdl  ||style=text-align:right|  27596 || ee6649ea5673989f3aa06213a8d65f76
|-
| progs/s_light.spr  ||style=text-align:right|  1080 || aff44ba238f4e1d0d504d6f9700aadb4
|-
| progs/soldier.mdl  ||style=text-align:right|  146288 || 5b6c30a984872b4273dd5861412d35c5
|-
| progs/spike.mdl  ||style=text-align:right|  1684 || be4cb73125f939284376080acc9887dd
|-
| progs/s_spike.mdl  ||style=text-align:right|  1684 || ebb1d58242b64a703623c8a33fcbd9e6
|-
| progs/suit.mdl  ||style=text-align:right|  51236 || 882a61f5eea7f9cdbc04800b963cef85
|-
| progs/v_axe.mdl  ||style=text-align:right|  57908 || 577dadcca2700068995c808dc7dec76f
|-
| progs/v_light.mdl  ||style=text-align:right|  56204 || 68733d4c690de88b5c3ba33e52be1c15
|-
| progs/v_nail2.mdl  ||style=text-align:right|  68732 || aacd1002ab02662cc1d3ff46885b553e
|-
| progs/v_nail.mdl  ||style=text-align:right|  54472 || ec9ba028b346da2f9674c2a521ff0c2f
|-
| progs/v_rock2.mdl  ||style=text-align:right|  58188 || 96edf1a3c7629987c200361523f780d7
|-
| progs/v_rock.mdl  ||style=text-align:right|  58548 || 7bea46b2a75fd7cff2fb99420e4c4e25
|-
| progs/v_shot2.mdl  ||style=text-align:right|  50816 || 922b3b687766ae0d7aeb73d44dec7035
|-
| progs/v_shot.mdl  ||style=text-align:right|  43852 || 1fd140b6856843e83cd9bf3966f5d7dd
|-
| progs/w_g_key.mdl  ||style=text-align:right|  7252 || c5c5f0d14b022f57294ad9aded318250
|-
| progs/wizard.mdl  ||style=text-align:right|  64472 || bf60986594f045e60e8aa6339d553ee7
|-
| progs/w_s_key.mdl  ||style=text-align:right|  7252 || ec02314a7d12439d36b4eb2dd0a641a8
|-
| progs/w_spike.mdl  ||style=text-align:right|  14336 || 8cf9245df2164e8062b01a220b508d6b
|-
| progs/zombie.mdl  ||style=text-align:right|  186084 || a923b1d03b9d237dd5ead9bd56acc900
|-
| progs/zom_gib.mdl  ||style=text-align:right|  10196 || cf42c938caa5b19f719d1f110b1dc6d4
|-
| quake.rc  ||style=text-align:right|  293 || 411d42958aaeae141813f9ebfcf5233f
|-
| sound/ambience/buzz1.wav  ||style=text-align:right|  36308 || 346a00c795c6f1f1338ade6fc350b3fe
|-
| sound/ambience/comp1.wav  ||style=text-align:right|  62734 || f91a1120de804f7cd4dbba4f12c748e9
|-
| sound/ambience/drip1.wav  ||style=text-align:right|  137736 || 2306a76162eeda3d0812c516bc99aa7a
|-
| sound/ambience/drone6.wav  ||style=text-align:right|  18522 || 322853ddb42ad2a205579b5cca8e2e8c
|-
| sound/ambience/fire1.wav  ||style=text-align:right|  24064 || 610d3985ed8133988e8de3bec2b9cbbe
|-
| sound/ambience/fl_hum1.wav  ||style=text-align:right|  50154 || e4628499702e004c4bacd282a3ecb8c0
|-
| sound/ambience/hum1.wav  ||style=text-align:right|  40166 || 486bfa737c35b0c9dda57cbee2a540af
|-
| sound/ambience/suck1.wav  ||style=text-align:right|  110392 || 2e99e4d1fe1501d5191c8157d3063cb6
|-
| sound/ambience/swamp1.wav  ||style=text-align:right|  68524 || 29ffb678d78997eb6c227677c86ea4f8
|-
| sound/ambience/swamp2.wav  ||style=text-align:right|  68526 || 356aa1e875da846e72d8f17bbb699a5b
|-
| sound/ambience/thunder1.wav  ||style=text-align:right|  41492 || cefd6ced4b5bc79fcece1003238566f6
|-
| sound/ambience/water1.wav  ||style=text-align:right|  55784 || 6eeaae0a3450652d2be0782895297ee4
|-
| sound/ambience/wind2.wav  ||style=text-align:right|  28610 || 030cf8dd2b00a12454b5b35a89d03914
|-
| sound/ambience/windfly.wav  ||style=text-align:right|  22140 || c7be01e6d324e66883f70aa0072a99b0
|-
| sound/boss1/death.wav  ||style=text-align:right|  27600 || 43469b1acd35b67107da5da82e1df911
|-
| sound/boss1/out1.wav  ||style=text-align:right|  50344 || 847a6f971f6905dfaffd70b30d18a4b1
|-
| sound/boss1/pain.wav  ||style=text-align:right|  17700 || 49112740c0ff421f9272b9e8efc748cd
|-
| sound/boss1/sight1.wav  ||style=text-align:right|  24768 || 427dd600e6b28c9402212adcc5d652c7
|-
| sound/boss1/throw.wav  ||style=text-align:right|  11526 || 9b6e9ff2c8df448f7fd4b5315e60ddda
|-
| sound/buttons/airbut1.wav  ||style=text-align:right|  10672 || 9d2e14e7176842a0dce909a43d38873d
|-
| sound/buttons/switch02.wav  ||style=text-align:right|  3746 || d2e9cba3a353edc65115f6f5c574403c
|-
| sound/buttons/switch04.wav  ||style=text-align:right|  3666 || ff47857a58d3faefb2b94a37d7ba4f26
|-
| sound/buttons/switch21.wav  ||style=text-align:right|  6318 || 3605b0d061a9baf185c6ab7614534531
|-
| sound/demon/ddeath.wav  ||style=text-align:right|  9140 || 62a48dcd405ca55c9ce18497e36faa0e
|-
| sound/demon/dhit2.wav  ||style=text-align:right|  7142 || 9e741696e4d0d66e30e718fc70ec186e
|-
| sound/demon/djump.wav  ||style=text-align:right|  8494 || 791ac9d6b6593808316145443cb7e7a0
|-
| sound/demon/dland2.wav  ||style=text-align:right|  4400 || db14c7b01838f826b7a712075f9026fd
|-
| sound/demon/dpain1.wav  ||style=text-align:right|  6282 || 5e6c485878393c9bebb0d0e6659bc479
|-
| sound/demon/idle1.wav  ||style=text-align:right|  9098 || 7a83f8caf3d5b1172a7dc5afdc942988
|-
| sound/demon/sight2.wav  ||style=text-align:right|  8804 || 65171c355c22a5069520b0881677ae3c
|-
| sound/dog/dattack1.wav  ||style=text-align:right|  8154 || 0c47c9d4aaae0bf3159a288b674f4a35
|-
| sound/dog/ddeath.wav  ||style=text-align:right|  14912 || b0e7760b1d7286a028ff9773f6802958
|-
| sound/dog/dpain1.wav  ||style=text-align:right|  7240 || 28e5ab93b41e13e2916433283a5d1a46
|-
| sound/dog/dsight.wav  ||style=text-align:right|  6722 || 0edc290765bac1fb4fe03ca55bc7c225
|-
| sound/dog/idle.wav  ||style=text-align:right|  6870 || 42bd6026ff32bd94523ad9f8fe8362cc
|-
| sound/doors/airdoor1.wav  ||style=text-align:right|  13654 || 9b91930e8c2fdece31a2362296891122
|-
| sound/doors/airdoor2.wav  ||style=text-align:right|  8594 || 29fd823d1c14ca42a9a89c716b26f4cd
|-
| sound/doors/basesec1.wav  ||style=text-align:right|  13930 || eb2363fed42724f55e8f55f96c335bcf
|-
| sound/doors/basesec2.wav  ||style=text-align:right|  10238 || 8d163a56607c9cf64a270a156c1c5cef
|-
| sound/doors/basetry.wav  ||style=text-align:right|  10518 || a5108d5c51281ab55c0baf884cbe8cbe
|-
| sound/doors/baseuse.wav  ||style=text-align:right|  16486 || f43fee91efe813a5eb34e9d72918fdb9
|-
| sound/doors/ddoor1.wav  ||style=text-align:right|  7738 || dff86a26139cdd49a193d5ed7ebf6ae1
|-
| sound/doors/ddoor2.wav  ||style=text-align:right|  5904 || 4a9d0b0825d0302ce465569d1e35fbcf
|-
| sound/doors/doormv1.wav  ||style=text-align:right|  14036 || 3fd379aec80a2ad8105c0c89ba5b40e6
|-
| sound/doors/drclos4.wav  ||style=text-align:right|  12814 || 83df1865a0c9fa5d02c2f137564c57de
|-
| sound/doors/hydro1.wav  ||style=text-align:right|  11094 || b1703980a20e624bc3366ccf55ca617e
|-
| sound/doors/hydro2.wav  ||style=text-align:right|  10700 || b1866f5b3950788ccf4206444ab64bc7
|-
| sound/doors/latch2.wav  ||style=text-align:right|  7338 || ad2378ca21a0ca529df328261e07aed5
|-
| sound/doors/medtry.wav  ||style=text-align:right|  7828 || ebb536bec2cdfd22c25b35793c055339
|-
| sound/doors/meduse.wav  ||style=text-align:right|  10718 || 4522aada194b23eb33b541cbcc755cf6
|-
| sound/doors/runetry.wav  ||style=text-align:right|  13524 || c433bae9e2ab508712f87dc2cacc82c8
|-
| sound/doors/runeuse.wav  ||style=text-align:right|  17364 || b4bcfd525a26f5b5ecc9d392430d9079
|-
| sound/doors/stndr1.wav  ||style=text-align:right|  12620 || 5bae2183885e18d65d69624e85249fd9
|-
| sound/doors/stndr2.wav  ||style=text-align:right|  11470 || f43a75c917effff09ef7be8a321c8b49
|-
| sound/doors/winch2.wav  ||style=text-align:right|  14872 || a4edffdfede7dbaed37db526c26e2b6d
|-
| sound/hknight/hit.wav  ||style=text-align:right|  6260 || fece24e2548f1d769e8fce39a5c87d01
|-
| sound/items/armor1.wav  ||style=text-align:right|  7714 || 186d29f2baf35b8c280bc97754606fad
|-
| sound/items/damage2.wav  ||style=text-align:right|  33012 || 14e53b7617ffe315a7c3f8d89652e51c
|-
| sound/items/damage3.wav  ||style=text-align:right|  12894 || baf754aec7ed4baba16760ac85513184
|-
| sound/items/damage.wav  ||style=text-align:right|  23374 || 8cde8b9278ca4922a4ec7ead6e5ee01b
|-
| sound/items/health1.wav  ||style=text-align:right|  7958 || 52a2c4f808db4edd8393de0de618c91f
|-
| sound/items/inv1.wav  ||style=text-align:right|  13728 || 5850cab55d6197d0e76d9f0a22ba10be
|-
| sound/items/inv2.wav  ||style=text-align:right|  33216 || 4edcd38a2c6adc5305636dd7afd5ef60
|-
| sound/items/inv3.wav  ||style=text-align:right|  33320 || 325c268be05b42a019ccb92e6993ab9e
|-
| sound/items/itembk2.wav  ||style=text-align:right|  9910 || 270c688b3cb884f5d4e5ffd8ccc934a1
|-
| sound/items/protect2.wav  ||style=text-align:right|  34012 || 25627a4bd2b4c6054cfd2fc4bf69ddc2
|-
| sound/items/protect3.wav  ||style=text-align:right|  23364 || 7b9374d67f6d59e524bba2af236ca30a
|-
| sound/items/protect.wav  ||style=text-align:right|  22536 || d839d5a84f811ce8a0e28616891bf1a7
|-
| sound/items/r_item1.wav  ||style=text-align:right|  6822 || 3fc0d0ae4a71c9fbfe548f38626c6a08
|-
| sound/items/r_item2.wav  ||style=text-align:right|  7448 || 384ffefe795d99df75f381596a0f1976
|-
| sound/items/suit2.wav  ||style=text-align:right|  33254 || 0a9d2766a5b805cb5794f9bea57e6585
|-
| sound/items/suit.wav  ||style=text-align:right|  15854 || da413f34023d219f1e34fde50a037be0
|-
| sound/knight/idle.wav  ||style=text-align:right|  11064 || 1b5c3981bee078318af346d8fe8090b9
|-
| sound/knight/kdeath.wav  ||style=text-align:right|  10688 || 11a96f48a8f2433c23beae299c8fb96e
|-
| sound/knight/khurt.wav  ||style=text-align:right|  5586 || 32c9f48dd4a6a87752aedf56fe8de668
|-
| sound/knight/ksight.wav  ||style=text-align:right|  13514 || eb75b4af348c88e84d8c87c19d5976fa
|-
| sound/knight/sword1.wav  ||style=text-align:right|  2306 || 93045b5f3178413dc6b01ec2869d1f73
|-
| sound/knight/sword2.wav  ||style=text-align:right|  2784 || 82d1a7c263cd3df7b060dee2f7f8b1fd
|-
| sound/misc/h2ohit1.wav  ||style=text-align:right|  12972 || 49ecb03f4f10862453656a67598f8b8a
|-
| sound/misc/medkey.wav  ||style=text-align:right|  10020 || 0e3ae5626a47d81e4166539e355e31bb
|-
| sound/misc/menu1.wav  ||style=text-align:right|  5738 || 12c36546601c385bc47c9ca9420b7eee
|-
| sound/misc/menu2.wav  ||style=text-align:right|  10672 || 39b01ea6feb3ec8dbd6d8ee3e5e966c4
|-
| sound/misc/menu3.wav  ||style=text-align:right|  3010 || 4a03dc2fd56831b855dab761eac4f7de
|-
| sound/misc/null.wav  ||style=text-align:right|  1244 || 811989e09124f54cb27fe6154b0f1018
|-
| sound/misc/outwater.wav  ||style=text-align:right|  5018 || 35732412412ddb5ed418633bb0123bbe
|-
| sound/misc/power.wav  ||style=text-align:right|  19832 || 9f2c3a18d9fc8d9cecfac6db3aad6bc6
|-
| sound/misc/r_tele1.wav  ||style=text-align:right|  8036 || c2194171b4c446e136ed7514fbb098a5
|-
| sound/misc/r_tele2.wav  ||style=text-align:right|  17324 || 0ce662ac90fb3658d69320d1be4025c1
|-
| sound/misc/r_tele3.wav  ||style=text-align:right|  18016 || 122ef44813edcfe7391578fd29e729d2
|-
| sound/misc/r_tele4.wav  ||style=text-align:right|  9068 || 0097b5747ccc70d5b12fc6838aff02c2
|-
| sound/misc/r_tele5.wav  ||style=text-align:right|  22042 || a82334cbb66d12f28cce9e71c90ea50b
|-
| sound/misc/runekey.wav  ||style=text-align:right|  14578 || 6b21a2e5878011da50fdee0a301d3e34
|-
| sound/misc/secret.wav  ||style=text-align:right|  6610 || a02ceefcc24b1ebf5c164a1e1acfb05f
|-
| sound/misc/talk.wav  ||style=text-align:right|  1810 || d5b25d4df59d92ac5016e88689ea60c1
|-
| sound/misc/trigger1.wav  ||style=text-align:right|  20230 || dc927c8a1d0a9bd59fbc5dd91ae1d812
|-
| sound/misc/water1.wav  ||style=text-align:right|  3926 || d8291c762acb1edf24927fdcc0f6a6cd
|-
| sound/misc/water2.wav  ||style=text-align:right|  3340 || 049e8e7e7b30d4d8038afb7248bdd977
|-
| sound/ogre/ogdrag.wav  ||style=text-align:right|  12396 || 658587dc89aaefae5ca3f058f7ff4227
|-
| sound/ogre/ogdth.wav  ||style=text-align:right|  13892 || de98e7bb9e70586edddd3308cfded3db
|-
| sound/ogre/ogidle2.wav  ||style=text-align:right|  11254 || 196ae9c33a4311160e1d5f3da878ab09
|-
| sound/ogre/ogidle.wav  ||style=text-align:right|  12894 || 177c829840a87c885bbc8951e7ce962e
|-
| sound/ogre/ogpain1.wav  ||style=text-align:right|  7898 || ac6d133d7720c12df49813fe10e683b5
|-
| sound/ogre/ogsawatk.wav  ||style=text-align:right|  16154 || 7257bdfd014bb61d778b8f88cb65d560
|-
| sound/ogre/ogwake.wav  ||style=text-align:right|  19356 || 3296459e495c4c12b31179d4eeffac19
|-
| sound/plats/medplat1.wav  ||style=text-align:right|  16378 || b73215aa6627c8b5b90fce8d260d48d0
|-
| sound/plats/medplat2.wav  ||style=text-align:right|  7338 || 1fc6c3772917a1a8155d04fa52e17005
|-
| sound/plats/plat1.wav  ||style=text-align:right|  20248 || 5d43ed85d896ba926f459e06ba6635d5
|-
| sound/plats/plat2.wav  ||style=text-align:right|  7338 || 49d7ab0fd726cd652eb6e5756fce61b9
|-
| sound/plats/train1.wav  ||style=text-align:right|  21430 || b589ae8262046361d9dca39d6b8f693a
|-
| sound/plats/train2.wav  ||style=text-align:right|  5870 || 640017e1b870d643e3bca29d499c72ee
|-
| sound/player/axhit1.wav  ||style=text-align:right|  6906 || 149b2371334da318386325182924eaca
|-
| sound/player/axhit2.wav  ||style=text-align:right|  2434 || fc01909318455f5310efa2457a370897
|-
| sound/player/death1.wav  ||style=text-align:right|  10170 || ba005f5488d4ee78dabf613a03f33a5f
|-
| sound/player/death2.wav  ||style=text-align:right|  8026 || 20477d2e7c84aac1bef95d32c9c702dd
|-
| sound/player/death3.wav  ||style=text-align:right|  10918 || 7b206ba8e1fa28d8605b50e3f3200f11
|-
| sound/player/death4.wav  ||style=text-align:right|  14126 || 1b0f27f4d41b748d3cc5c3d56bd917f8
|-
| sound/player/death5.wav  ||style=text-align:right|  14946 || 7efe84195cfa97515aad2d7f96f25346
|-
| sound/player/drown1.wav  ||style=text-align:right|  8908 || 732f0416af6990e028110380bcb36f0d
|-
| sound/player/drown2.wav  ||style=text-align:right|  3114 || 29ee1f287879acce29b15d4722668bc2
|-
| sound/player/gasp1.wav  ||style=text-align:right|  8702 || b06cbc370c8c2c163dc4d487e8b673c7
|-
| sound/player/gasp2.wav  ||style=text-align:right|  13134 || 30aece9d8779764620c7f866bfb06edb
|-
| sound/player/gib.wav  ||style=text-align:right|  14424 || 26fa9942078125388f34b71546615068
|-
| sound/player/h2odeath.wav  ||style=text-align:right|  18104 || 73b0f4dfae07f6e49112cadfe202735c
|-
| sound/player/h2ojump.wav  ||style=text-align:right|  11438 || cd421b96410971bb1a4f21d3936a3805
|-
| sound/player/inh2o.wav  ||style=text-align:right|  11340 || d4c1a27c4d07e8dfdf18a4b1a880c610
|-
| sound/player/inlava.wav  ||style=text-align:right|  10958 || c37875a082900716b7af88d2d990f55c
|-
| sound/player/land2.wav  ||style=text-align:right|  6204 || 6ba534256a779d66d9d9dabb90e63c8b
|-
| sound/player/land.wav  ||style=text-align:right|  2434 || e34328a40358d98f0f95403b9e27ec1e
|-
| sound/player/lburn1.wav  ||style=text-align:right|  6682 || 3c447c72385defe97c060771077d8ba0
|-
| sound/player/lburn2.wav  ||style=text-align:right|  6076 || 6849ee8dbd91ec82ece016fbd39b0a5c
|-
| sound/player/pain1.wav  ||style=text-align:right|  3394 || d7ac9df7540b791f952ca2a681c0265b
|-
| sound/player/pain2.wav  ||style=text-align:right|  2710 || 513e054b64d4fb61f31384d59e123020
|-
| sound/player/pain3.wav  ||style=text-align:right|  4854 || aafc61ad4e16cc5cdd2db2100796b494
|-
| sound/player/pain4.wav  ||style=text-align:right|  4840 || f655ef2045bc55473303b27546aa6fc0
|-
| sound/player/pain5.wav  ||style=text-align:right|  8020 || f8551a73cb89396042687baa8c68b5c2
|-
| sound/player/pain6.wav  ||style=text-align:right|  5462 || 70062eabf96288d307280fb601ce0ee2
|-
| sound/player/plyrjmp8.wav  ||style=text-align:right|  3888 || d4a552d8f627c7f3b933568c4a74c913
|-
| sound/player/slimbrn2.wav  ||style=text-align:right|  12468 || b17c18a9f81a952f2d41f65b5180f210
|-
| sound/player/teledth1.wav  ||style=text-align:right|  14414 || c226c7f041187ba058d8112cc0190b56
|-
| sound/player/tornoff2.wav  ||style=text-align:right|  7726 || 03ec1c805b307b8fe4c4052f8332a5e5
|-
| sound/player/udeath.wav  ||style=text-align:right|  16082 || afe674f287efb6197da2cea0c0b1d2f8
|-
| sound/shambler/melee1.wav  ||style=text-align:right|  4718 || 77fe6240973a204b757a427ebf66bcfd
|-
| sound/shambler/melee2.wav  ||style=text-align:right|  5966 || 3be31638d769e3d690c92311dfafdeac
|-
| sound/shambler/sattck1.wav  ||style=text-align:right|  8036 || ec8c3f79ea42d09154cb8975ada1b21c
|-
| sound/shambler/sboom.wav  ||style=text-align:right|  11672 || 9834601a645d7d1f62001b2a314ec18f
|-
| sound/shambler/sdeath.wav  ||style=text-align:right|  21106 || e0e62d229a985a6e39218c6488599059
|-
| sound/shambler/shurt2.wav  ||style=text-align:right|  4302 || 1e87631ede95e061a75f9c31629ac0b8
|-
| sound/shambler/sidle.wav  ||style=text-align:right|  5646 || 368a240e6c3e877793352a79c1828386
|-
| sound/shambler/smack.wav  ||style=text-align:right|  5300 || bd8c634c9894348360fec7b7419d1649
|-
| sound/shambler/ssight.wav  ||style=text-align:right|  15420 || 657107577460d5acf3157dec97e07a89
|-
| sound/soldier/death1.wav  ||style=text-align:right|  8434 || fe25952af40b536c3bb67bfca58062eb
|-
| sound/soldier/idle.wav  ||style=text-align:right|  9802 || 4cdfbdda8fb5f40b125c7bcddb6e8914
|-
| sound/soldier/pain1.wav  ||style=text-align:right|  5000 || 54d3b05fdcecf7480034858f2b22b06c
|-
| sound/soldier/pain2.wav  ||style=text-align:right|  7838 || e2bbc9d3405b9b9fdae76d2fc298fc2f
|-
| sound/soldier/sattck1.wav  ||style=text-align:right|  14302 || b76ac35f900f280a7a7996da7e404362
|-
| sound/soldier/sight1.wav  ||style=text-align:right|  12716 || e2a39533250ddd1b08053d5c4ebf7fd0
|-
| sound/weapons/ax1.wav  ||style=text-align:right|  3308 || 237d4d819d02ad37849a8a895cc410e1
|-
| sound/weapons/bounce.wav  ||style=text-align:right|  5864 || fced668c6558a9505abf5014d60528a6
|-
| sound/weapons/grenade.wav  ||style=text-align:right|  8364 || d2b6fa131933f203eba2a282276e88df
|-
| sound/weapons/guncock.wav  ||style=text-align:right|  14430 || 6a63452167cc106e756518536446844f
|-
| sound/weapons/lhit.wav  ||style=text-align:right|  26028 || fefd021d0bd35a1f8da8870f1c06abb9
|-
| sound/weapons/lock4.wav  ||style=text-align:right|  3876 || 3fd93222258d5b1500b150f021c94519
|-
| sound/weapons/lstart.wav  ||style=text-align:right|  56378 || abe1abf6dcadcda5930b0684c7ea820a
|-
| sound/weapons/pkup.wav  ||style=text-align:right|  5174 || 0aa6f0a7d609e1a56fd535a06d1bb56e
|-
| sound/weapons/r_exp3.wav  ||style=text-align:right|  17478 || 57db026474fc76ba7f38cea24eaaf8cf
|-
| sound/weapons/ric1.wav  ||style=text-align:right|  4308 || a31166b4bbb4509ac3004a01f7477ee9
|-
| sound/weapons/ric2.wav  ||style=text-align:right|  10838 || a180b447c0527e603cea54a9aefd6139
|-
| sound/weapons/ric3.wav  ||style=text-align:right|  12638 || 8a773bbb585540ddce256151162f3a2c
|-
| sound/weapons/rocket1i.wav  ||style=text-align:right|  9660 || fb4fdf345d805cf6980c4c695974effc
|-
| sound/weapons/sgun1.wav  ||style=text-align:right|  22992 || 95a14815e48deb323d0cf8251d728ac7
|-
| sound/weapons/shotgn2.wav  ||style=text-align:right|  8694 || cb561cefbf472232334b419af050e5a0
|-
| sound/weapons/spike2.wav  ||style=text-align:right|  12642 || 9189d811855f108da4a1e2d34dc7c633
|-
| sound/weapons/tink1.wav  ||style=text-align:right|  1252 || 297ba8706625fcf05887edb393e9a441
|-
| sound/wizard/hit.wav  ||style=text-align:right|  7332 || 6598d669334df977f1f97b95288edf11
|-
| sound/wizard/wattack.wav  ||style=text-align:right|  25912 || b3568a47439f81779d40335e76f5bc2d
|-
| sound/wizard/wdeath.wav  ||style=text-align:right|  20684 || 99d9c71343bc23222abb92119d404400
|-
| sound/wizard/widle1.wav  ||style=text-align:right|  13464 || b22b1dd9f66879b3447d36ab584316c7
|-
| sound/wizard/widle2.wav  ||style=text-align:right|  23094 || 7178fd83df227360564adef01bed92c6
|-
| sound/wizard/wpain.wav  ||style=text-align:right|  8686 || bd7e59ab7d7b835f9ed8ab51950914de
|-
| sound/wizard/wsight.wav  ||style=text-align:right|  13078 || df5949057c750528917c6cb32b7fd9fd
|-
| sound/zombie/idle_w2.wav  ||style=text-align:right|  17192 || d2bb59b9d7ac71097c07123a23525641
|-
| sound/zombie/z_fall.wav  ||style=text-align:right|  3062 || 6968318b2d196c6d54bc707d8a390547
|-
| sound/zombie/z_gib.wav  ||style=text-align:right|  16226 || 199dda66ade8d6f0ef4897e4d7608c0d
|-
| sound/zombie/z_hit.wav  ||style=text-align:right|  6166 || 6c66ab3e6b149bf35956a4bbc0057acb
|-
| sound/zombie/z_idle1.wav  ||style=text-align:right|  13244 || 21088a7b38b1124d7ec72e58d5ab93a6
|-
| sound/zombie/z_idle.wav  ||style=text-align:right|  16734 || e5e570e38c4405111004190a79f0e925
|-
| sound/zombie/z_miss.wav  ||style=text-align:right|  10734 || 96fad96a8c3bc6f7bcc5da6c82678da2
|-
| sound/zombie/z_pain1.wav  ||style=text-align:right|  15374 || fcd83b89a94b0cadbe1361a4df080ec0
|-
| sound/zombie/z_pain.wav  ||style=text-align:right|  12218 || 56637968b8309bd2f825153330bbdfc0
|-
| sound/zombie/z_shot1.wav  ||style=text-align:right|  3068 || 561afb69b7851923a8fb3b54e3e13c96
|-
|}&lt;/tt&gt;

{{todo|todo=Multiple to do items listed above, detail out the contents of various pak files}}
{{todo|todo=different releases have different pak0.pak files}}</text>
      <sha1>6bu8f0q5rk25jsxjkzag04ypml411qk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2588</id>
      <parentid>2254</parentid>
      <timestamp>2013-03-29T14:22:15Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Pak0.pak]] to [[pak0.pak]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="33558">The '''''pak0.pak''''' file that comes with Quake is required by all Quake [[engines]]. It contains the maps, models, programs, sounds, and skins required to play Quake Episode 1, ''Dimension of the Doomed''. It is expected to be in the ID1 subfolder of the Quake root folder.

[[PAK file]]s are typically named ''pak0.pak'', ''pak1.pak'', ''pak2.pak'', and so on. Quake mission packs and other Quake-based games often have their own ''pak0.pak'' files, which live in a different folder, not the ID1 folder.

The ID1 ''pak0.pak'' is distributed with both the shareware and the registered/commercial editions of Quake.

In some editions, including the downloadable shareware (''quake106.zip'') from id Software, ''pak0.pak'' is embedded in another archive, ''[[resource.1]]''. The files in this archive are LZH-encoded using the lh5 algorithm. If you can't or don't want to run the DOS/Win32 Quake installer program it comes with, then you'll need a compatible extractor program to get ''pak0.pak'' out of the ''resource.1'' archive.

The ID1 ''pak0.pak'' with the md5sum 5906e5998fc3d896ddaf5e6a62e03abb contains the following folders &amp; files:
&lt;tt&gt;
{| class=&quot;wikitable collapsible collapsed&quot;
! Path !! Size !! md5
|-
| default.cfg  ||style=text-align:right|  1914 || fc989b37572fae074e8ffda0ce4d5297
|-
| demo1.dem  ||style=text-align:right|  184471 || 85ec0141ab24d9732e487d1aafa791f0
|-
| demo2.dem  ||style=text-align:right|  152705 || fa5c3daf7a57954cd95f94b698a7e420
|-
| demo3.dem  ||style=text-align:right|  197679 || 691f37e5715ea2863c1d8092a6429824
|-
| end1.bin  ||style=text-align:right|  4000 || 92ae51961ec2f429dfe9bea1138fbd5d
|-
| gfx/bigbox.lmp  ||style=text-align:right|  5192 || e597771ac6149b2b071ebfd24981ea04
|-
| gfx/box_bl.lmp  ||style=text-align:right|  72 || 5b094c37c2c1c2eebe37f84117dea182
|-
| gfx/box_bm.lmp  ||style=text-align:right|  136 || 44621236738e2bf8d669e53dca887278
|-
| gfx/box_br.lmp  ||style=text-align:right|  72 || 86597d5325b472caf5644644033e5cab
|-
| gfx/box_ml.lmp  ||style=text-align:right|  72 || adcea286ba0ac01084fd0c131b16ffdd
|-
| gfx/box_mm2.lmp  ||style=text-align:right|  136 || b850bcec189d909e7a0f796111a11249
|-
| gfx/box_mm.lmp  ||style=text-align:right|  136 || 700b4884b1a3c6aa7356a43014261866
|-
| gfx/box_mr.lmp  ||style=text-align:right|  72 || e30d9ea783ef7dd50101682f03ba40d7
|-
| gfx/box_tl.lmp  ||style=text-align:right|  72 || 3903d3d814e37c55790ac0ccfef2b925
|-
| gfx/box_tm.lmp  ||style=text-align:right|  136 || 7cb85ccbf8e7d2532da2a839a7cef348
|-
| gfx/box_tr.lmp  ||style=text-align:right|  72 || 5c5e72746af821a4cf8437d8fecc53c7
|-
| gfx/colormap.lmp  ||style=text-align:right|  16385 || 0d793b70bffafbd666fc5c88d6e15e9d
|-
| gfx/complete.lmp  ||style=text-align:right|  4616 || db6a00dfbe2c62a43c261e5622297c4a
|-
| gfx/conback.lmp  ||style=text-align:right|  64008 || 9eb6f9c47870bf42985d9382958a5c12
|-
| gfx/dim_drct.lmp  ||style=text-align:right|  3352 || 50ea11fe8c4d9db92863bdcd03b89df5
|-
| gfx/dim_ipx.lmp  ||style=text-align:right|  3352 || 0bef9943487f0611225bf0a5c0fe5dd4
|-
| gfx/dim_modm.lmp  ||style=text-align:right|  3352 || 3288f03144f06b95cadafa9458a77b1d
|-
| gfx/dim_mult.lmp  ||style=text-align:right|  3352 || 348b7369227f2d7e9d0daccbf6c9344d
|-
| gfx/dim_tcp.lmp  ||style=text-align:right|  3352 || 7dc8bbb01d7c90cd51c28da0ff6ed900
|-
| gfx/finale.lmp  ||style=text-align:right|  6920 || b6e49409d344e0344273d86ea33fe35f
|-
| gfx/help0.lmp  ||style=text-align:right|  64008 || b392ac30ad49252b51ec934ed855c20f
|-
| gfx/help1.lmp  ||style=text-align:right|  64008 || 857543c69245117a606044ea63adac9a
|-
| gfx/help2.lmp  ||style=text-align:right|  64008 || 882dd5920ea9c19f637f32084de9788a
|-
| gfx/help3.lmp  ||style=text-align:right|  64008 || a89d169524920d896128009467deebfc
|-
| gfx/help4.lmp  ||style=text-align:right|  64008 || c72d67c84ae6b403fae5f08d3e5c3bc6
|-
| gfx/help5.lmp  ||style=text-align:right|  64008 || 12203d7cdec35c4f51622dd90ec92093
|-
| gfx/inter.lmp  ||style=text-align:right|  23048 || f6eabe0d742380c7b47a9ee44170993d
|-
| gfx/loading.lmp  ||style=text-align:right|  3464 || 3249bc994266529a1748c06bfbb24bfa
|-
| gfx/mainmenu.lmp  ||style=text-align:right|  26888 || 8122e2a0b8888f9d1ebef149551b6434
|-
| gfx/menudot1.lmp  ||style=text-align:right|  392 || bfdb08d84d580abcfbacc1c9abd62bfb
|-
| gfx/menudot2.lmp  ||style=text-align:right|  392 || 6c6d2176e00edbe530bb1db118aaa6dc
|-
| gfx/menudot3.lmp  ||style=text-align:right|  392 || 2527a05f6162efb3e4bc5311d9e010d5
|-
| gfx/menudot4.lmp  ||style=text-align:right|  392 || 90ea6be033b39b139b3779932d266f33
|-
| gfx/menudot5.lmp  ||style=text-align:right|  392 || c9beb9600c35e458d0f83b6cf1e1c692
|-
| gfx/menudot6.lmp  ||style=text-align:right|  392 || 31b9a6ec1d12a2bd56b955185a9e72d3
|-
| gfx/menuplyr.lmp  ||style=text-align:right|  2696 || 9eebe617ff51c4ce43f85ca1a6920d5b
|-
| gfx/mp_menu.lmp  ||style=text-align:right|  14856 || c6416b8f7f5262a5a19b9ce4be1fd9ce
|-
| gfx/netmen1.lmp  ||style=text-align:right|  3352 || 5bc6a8d8cfdfd7e940e933812954367a
|-
| gfx/netmen2.lmp  ||style=text-align:right|  3352 || c8aafb649a653e90fc5eb7b7a2b3ca2e
|-
| gfx/netmen3.lmp  ||style=text-align:right|  3352 || 11c9372d0e64057a1ec8251f596b820d
|-
| gfx/netmen4.lmp  ||style=text-align:right|  3352 || 74ec672b1312699be2eeaf25a68e4582
|-
| gfx/netmen5.lmp  ||style=text-align:right|  3352 || 231f8a9ea4ba364f517db0e9f7f1ba72
|-
| gfx/palette.lmp  ||style=text-align:right|  768 || 79bc149d4f2fb0bd68cd8400a3fd87d4
|-
| gfx/pause.lmp  ||style=text-align:right|  3080 || 5aa67f927719e4a9eb3e020e75fea969
|-
| gfx/p_load.lmp  ||style=text-align:right|  2504 || 27fe08071058385529b0b8ad746421e7
|-
| gfx/p_multi.lmp  ||style=text-align:right|  5192 || 5a307c7d11da20a4772ad9c00b9f4309
|-
| gfx/p_option.lmp  ||style=text-align:right|  3464 || 83a3bf4459bce3fe85857a0aa647b90a
|-
| gfx/p_save.lmp  ||style=text-align:right|  2120 || 0d2bb5fa5524e0180a85bf273094cd1f
|-
| gfx/qplaque.lmp  ||style=text-align:right|  4616 || f4de79557c75e26b85ea84fb6029a5f3
|-
| gfx/ranking.lmp  ||style=text-align:right|  4040 || 919b13d1f7fdd0082ec0f94699f3b681
|-
| gfx/sell.lmp  ||style=text-align:right|  64008 || 878db3866e8b38c5b8d951aef516358c
|-
| gfx/sp_menu.lmp  ||style=text-align:right|  14856 || f624aa79778970ecb8ef518b5ab435f6
|-
| gfx/ttl_cstm.lmp  ||style=text-align:right|  4424 || 4ee84e0e7fa93f0e93d26efb1e726a4d
|-
| gfx/ttl_main.lmp  ||style=text-align:right|  2312 || 07e1c8e189e2463befcfc44f5ecf8dcb
|-
| gfx/ttl_sgl.lmp  ||style=text-align:right|  3080 || 25d5360228da738f091063eaeb7c6aa8
|-
| gfx/vidmodes.lmp  ||style=text-align:right|  5192 || 18a97f403057777f262188903f485fe8
|-
| gfx.wad  ||style=text-align:right|  112828 || cde5b5890c8902c02a2f271abe8f4a1f
|-
| maps/b_batt0.bsp  ||style=text-align:right|  5044 || 00bc989f4c8d2570a2826a63c7356a27
|-
| maps/b_batt1.bsp  ||style=text-align:right|  4620 || 555bc0cb0b5c2ad2ed0110f307e70679
|-
| maps/b_bh100.bsp  ||style=text-align:right|  8820 || 62f78bb5143265f037b79ddd077c50ed
|-
| maps/b_bh10.bsp  ||style=text-align:right|  3936 || e80cde9f185612f669fc100f825ca84f
|-
| maps/b_bh25.bsp  ||style=text-align:right|  8872 || 032d70dbf8669b3627b82b41f31488bd
|-
| maps/b_explob.bsp  ||style=text-align:right|  10220 || d8c9db3cfa0264678afc580143f665ea
|-
| maps/b_nail0.bsp  ||style=text-align:right|  5044 || c8d7ec0bdee74e0c1e69e8dbe939117d
|-
| maps/b_nail1.bsp  ||style=text-align:right|  5044 || ea08b2bd6aa19ece0307f75c491e5d24
|-
| maps/b_rock0.bsp  ||style=text-align:right|  2956 || 19ce64cd248a4459bf37b45e6e7c1219
|-
| maps/b_rock1.bsp  ||style=text-align:right|  2944 || b4cdb75094cd7218ed2b0475aefabe80
|-
| maps/b_shell0.bsp  ||style=text-align:right|  5044 || 574824b3c52661959d633a76dc823859
|-
| maps/b_shell1.bsp  ||style=text-align:right|  5044 || dc8b8dcb490e204e615b2b9cdc673296
|-
| maps/e1m1.bsp  ||style=text-align:right|  1365176 || 84cae48010619bcc945426b91bc03ade
|-
| maps/e1m2.bsp  ||style=text-align:right|  1332228 || caff91afbe41f3eac4dda65cee0083c9
|-
| maps/e1m3.bsp  ||style=text-align:right|  1249944 || f20eaa5692e94ab889c4ade9e1c116c7
|-
| maps/e1m4.bsp  ||style=text-align:right|  1411452 || 29419f05ef647f83d0482502bb3f84f8
|-
| maps/e1m5.bsp  ||style=text-align:right|  1324060 || afd98cc890d748986186951b32fc9fcb
|-
| maps/e1m6.bsp  ||style=text-align:right|  1065080 || ec178e54ff68c4d8cf71e26775b2eb2d
|-
| maps/e1m7.bsp  ||style=text-align:right|  607420 || 0c1f55455e0f957291e21d211b689718
|-
| maps/e1m8.bsp  ||style=text-align:right|  924116 || 18c7ab2f922d5d586150afbc27c323a4
|-
| maps/start.bsp  ||style=text-align:right|  1433792 || 61a57bb4ca36368478f02b142d1b5291
|-
| progs/armor.mdl  ||style=text-align:right|  44076 || ca060166d7e4e4686995f05645dde593
|-
| progs/backpack.mdl  ||style=text-align:right|  19348 || 315b4ef42fb035aa3318e8d2d61961ce
|-
| progs/bolt2.mdl  ||style=text-align:right|  11860 || f59ce07cfbe01fcfc578258c573d2c31
|-
| progs/bolt3.mdl  ||style=text-align:right|  11860 || ff87579a424faa59ca2695b7434ea488
|-
| progs/bolt.mdl  ||style=text-align:right|  20644 || a176903954e9d8c7ab629f92784546c2
|-
| progs/boss.mdl  ||style=text-align:right|  211836 || 25da3b2bc30677e32ee3a3a878a4d3af
|-
| progs.dat  ||style=text-align:right|  413116 || 0c3ef3625df5883536f8da42c78b673a
|-
| progs/demon.mdl  ||style=text-align:right|  102120 || 4c73786e7cfb2083ca38cbc983cd6c4b
|-
| progs/dog.mdl  ||style=text-align:right|  146056 || e727fbc39acc652f812972612ce37565
|-
| progs/end1.mdl  ||style=text-align:right|  20820 || 67c0fcab33d3772c00bb462b0e749275
|-
| progs/eyes.mdl  ||style=text-align:right|  4372 || ed72f64a17c6909b2cb3034a734bca97
|-
| progs/flame2.mdl  ||style=text-align:right|  64572 || f2c8f8950ebd7a0edded6247655d325b
|-
| progs/flame.mdl  ||style=text-align:right|  46364 || 8593c05374d84354d4444c218e86fdb8
|-
| progs/gib1.mdl  ||style=text-align:right|  5716 || f5c5b799e895dc03036522a487e99913
|-
| progs/gib2.mdl  ||style=text-align:right|  16228 || cfa9e97a3542852418123e0bb12e4f86
|-
| progs/gib3.mdl  ||style=text-align:right|  22228 || d73be7b2881e0a5aacf2b332ac29086f
|-
| progs/g_light.mdl  ||style=text-align:right|  50276 || 61bba06ec3804b7f355a62fd4585ad8f
|-
| progs/g_nail2.mdl  ||style=text-align:right|  30720 || ed6d7bb5ff050ad5f2bf4be7739a16a5
|-
| progs/g_nail.mdl  ||style=text-align:right|  34700 || e2959ca741c764dd42025ef531a1b554
|-
| progs/grenade.mdl  ||style=text-align:right|  2244 || f492d6257c216306983a72f41db0d891
|-
| progs/g_rock2.mdl  ||style=text-align:right|  40756 || 68c047c97bab89afe2cb69e65b7c62e1
|-
| progs/g_rock.mdl  ||style=text-align:right|  48244 || 61346f842944795e0821e31e3d61b427
|-
| progs/g_shot.mdl  ||style=text-align:right|  32916 || 7facfec1a3cfb892cce871f398e9cb6b
|-
| progs/h_demon.mdl  ||style=text-align:right|  34884 || 5253a0ea93d9624d73fb984ee339b52f
|-
| progs/h_dog.mdl  ||style=text-align:right|  24436 || a0b5f87522b3a769548c46cf3bb4223e
|-
| progs/h_guard.mdl  ||style=text-align:right|  5428 || 18a629b53b87392030df63b7806eb833
|-
| progs/h_knight.mdl  ||style=text-align:right|  7156 || 46a03fa72b0cdebcf58045aba2fafc13
|-
| progs/h_ogre.mdl  ||style=text-align:right|  14900 || 14eb06611c769e254d0531c05919bdf5
|-
| progs/h_player.mdl  ||style=text-align:right|  14708 || bf1773df7d3e19c5b211a1ee408f6b05
|-
| progs/h_shams.mdl  ||style=text-align:right|  37060 || ff1e04e18c57667991341a011fb6c363
|-
| progs/h_wizard.mdl  ||style=text-align:right|  14804 || 4bc6be40128f313cf9ad06c347310735
|-
| progs/h_zombie.mdl  ||style=text-align:right|  4484 || 0fdef7f7cd05a3209e0a163e87f69f8b
|-
| progs/invisibl.mdl  ||style=text-align:right|  7092 || 1e87d86af02e69db9c9f27f5fddc7a47
|-
| progs/invulner.mdl  ||style=text-align:right|  23920 || 8c8d83e4d50c3282d009b333a1280422
|-
| progs/knight.mdl  ||style=text-align:right|  101404 || 5328915db5c53e85cf75d46e7b747fb9
|-
| progs/lavaball.mdl  ||style=text-align:right|  8788 || 92af53d2145681e37877dbc1d12801b2
|-
| progs/m_g_key.mdl  ||style=text-align:right|  12820 || 192c2650a115c91706f6fa8fe68beb45
|-
| progs/missile.mdl  ||style=text-align:right|  57796 || 47f19f9e34954b93443c9759dd2e7ba0
|-
| progs/m_s_key.mdl  ||style=text-align:right|  12820 || 20837376b391cdd5c92e57b84e05687f
|-
| progs/ogre.mdl  ||style=text-align:right|  162036 || fbb592ca3788a576dd2f31fcf8c80fab
|-
| progs/player.mdl  ||style=text-align:right|  191852 || 405cef9a10d96cdabffb5e91312f8e5c
|-
| progs/quaddama.mdl  ||style=text-align:right|  39992 || 00b177ff272a4779097ea08344da8aff
|-
| progs/s_bubble.spr  ||style=text-align:right|  588 || 7c0887630ed468205292d8cb7abcae93
|-
| progs/s_explod.spr  ||style=text-align:right|  18972 || 766c6a92c26b54f68f7ff87c90d71cf2
|-
| progs/shambler.mdl  ||style=text-align:right|  98556 || 9b09375a0f614dc4081e363cc34f1185
|-
| progs/s_light.mdl  ||style=text-align:right|  27596 || ee6649ea5673989f3aa06213a8d65f76
|-
| progs/s_light.spr  ||style=text-align:right|  1080 || aff44ba238f4e1d0d504d6f9700aadb4
|-
| progs/soldier.mdl  ||style=text-align:right|  146288 || 5b6c30a984872b4273dd5861412d35c5
|-
| progs/spike.mdl  ||style=text-align:right|  1684 || be4cb73125f939284376080acc9887dd
|-
| progs/s_spike.mdl  ||style=text-align:right|  1684 || ebb1d58242b64a703623c8a33fcbd9e6
|-
| progs/suit.mdl  ||style=text-align:right|  51236 || 882a61f5eea7f9cdbc04800b963cef85
|-
| progs/v_axe.mdl  ||style=text-align:right|  57908 || 577dadcca2700068995c808dc7dec76f
|-
| progs/v_light.mdl  ||style=text-align:right|  56204 || 68733d4c690de88b5c3ba33e52be1c15
|-
| progs/v_nail2.mdl  ||style=text-align:right|  68732 || aacd1002ab02662cc1d3ff46885b553e
|-
| progs/v_nail.mdl  ||style=text-align:right|  54472 || ec9ba028b346da2f9674c2a521ff0c2f
|-
| progs/v_rock2.mdl  ||style=text-align:right|  58188 || 96edf1a3c7629987c200361523f780d7
|-
| progs/v_rock.mdl  ||style=text-align:right|  58548 || 7bea46b2a75fd7cff2fb99420e4c4e25
|-
| progs/v_shot2.mdl  ||style=text-align:right|  50816 || 922b3b687766ae0d7aeb73d44dec7035
|-
| progs/v_shot.mdl  ||style=text-align:right|  43852 || 1fd140b6856843e83cd9bf3966f5d7dd
|-
| progs/w_g_key.mdl  ||style=text-align:right|  7252 || c5c5f0d14b022f57294ad9aded318250
|-
| progs/wizard.mdl  ||style=text-align:right|  64472 || bf60986594f045e60e8aa6339d553ee7
|-
| progs/w_s_key.mdl  ||style=text-align:right|  7252 || ec02314a7d12439d36b4eb2dd0a641a8
|-
| progs/w_spike.mdl  ||style=text-align:right|  14336 || 8cf9245df2164e8062b01a220b508d6b
|-
| progs/zombie.mdl  ||style=text-align:right|  186084 || a923b1d03b9d237dd5ead9bd56acc900
|-
| progs/zom_gib.mdl  ||style=text-align:right|  10196 || cf42c938caa5b19f719d1f110b1dc6d4
|-
| quake.rc  ||style=text-align:right|  293 || 411d42958aaeae141813f9ebfcf5233f
|-
| sound/ambience/buzz1.wav  ||style=text-align:right|  36308 || 346a00c795c6f1f1338ade6fc350b3fe
|-
| sound/ambience/comp1.wav  ||style=text-align:right|  62734 || f91a1120de804f7cd4dbba4f12c748e9
|-
| sound/ambience/drip1.wav  ||style=text-align:right|  137736 || 2306a76162eeda3d0812c516bc99aa7a
|-
| sound/ambience/drone6.wav  ||style=text-align:right|  18522 || 322853ddb42ad2a205579b5cca8e2e8c
|-
| sound/ambience/fire1.wav  ||style=text-align:right|  24064 || 610d3985ed8133988e8de3bec2b9cbbe
|-
| sound/ambience/fl_hum1.wav  ||style=text-align:right|  50154 || e4628499702e004c4bacd282a3ecb8c0
|-
| sound/ambience/hum1.wav  ||style=text-align:right|  40166 || 486bfa737c35b0c9dda57cbee2a540af
|-
| sound/ambience/suck1.wav  ||style=text-align:right|  110392 || 2e99e4d1fe1501d5191c8157d3063cb6
|-
| sound/ambience/swamp1.wav  ||style=text-align:right|  68524 || 29ffb678d78997eb6c227677c86ea4f8
|-
| sound/ambience/swamp2.wav  ||style=text-align:right|  68526 || 356aa1e875da846e72d8f17bbb699a5b
|-
| sound/ambience/thunder1.wav  ||style=text-align:right|  41492 || cefd6ced4b5bc79fcece1003238566f6
|-
| sound/ambience/water1.wav  ||style=text-align:right|  55784 || 6eeaae0a3450652d2be0782895297ee4
|-
| sound/ambience/wind2.wav  ||style=text-align:right|  28610 || 030cf8dd2b00a12454b5b35a89d03914
|-
| sound/ambience/windfly.wav  ||style=text-align:right|  22140 || c7be01e6d324e66883f70aa0072a99b0
|-
| sound/boss1/death.wav  ||style=text-align:right|  27600 || 43469b1acd35b67107da5da82e1df911
|-
| sound/boss1/out1.wav  ||style=text-align:right|  50344 || 847a6f971f6905dfaffd70b30d18a4b1
|-
| sound/boss1/pain.wav  ||style=text-align:right|  17700 || 49112740c0ff421f9272b9e8efc748cd
|-
| sound/boss1/sight1.wav  ||style=text-align:right|  24768 || 427dd600e6b28c9402212adcc5d652c7
|-
| sound/boss1/throw.wav  ||style=text-align:right|  11526 || 9b6e9ff2c8df448f7fd4b5315e60ddda
|-
| sound/buttons/airbut1.wav  ||style=text-align:right|  10672 || 9d2e14e7176842a0dce909a43d38873d
|-
| sound/buttons/switch02.wav  ||style=text-align:right|  3746 || d2e9cba3a353edc65115f6f5c574403c
|-
| sound/buttons/switch04.wav  ||style=text-align:right|  3666 || ff47857a58d3faefb2b94a37d7ba4f26
|-
| sound/buttons/switch21.wav  ||style=text-align:right|  6318 || 3605b0d061a9baf185c6ab7614534531
|-
| sound/demon/ddeath.wav  ||style=text-align:right|  9140 || 62a48dcd405ca55c9ce18497e36faa0e
|-
| sound/demon/dhit2.wav  ||style=text-align:right|  7142 || 9e741696e4d0d66e30e718fc70ec186e
|-
| sound/demon/djump.wav  ||style=text-align:right|  8494 || 791ac9d6b6593808316145443cb7e7a0
|-
| sound/demon/dland2.wav  ||style=text-align:right|  4400 || db14c7b01838f826b7a712075f9026fd
|-
| sound/demon/dpain1.wav  ||style=text-align:right|  6282 || 5e6c485878393c9bebb0d0e6659bc479
|-
| sound/demon/idle1.wav  ||style=text-align:right|  9098 || 7a83f8caf3d5b1172a7dc5afdc942988
|-
| sound/demon/sight2.wav  ||style=text-align:right|  8804 || 65171c355c22a5069520b0881677ae3c
|-
| sound/dog/dattack1.wav  ||style=text-align:right|  8154 || 0c47c9d4aaae0bf3159a288b674f4a35
|-
| sound/dog/ddeath.wav  ||style=text-align:right|  14912 || b0e7760b1d7286a028ff9773f6802958
|-
| sound/dog/dpain1.wav  ||style=text-align:right|  7240 || 28e5ab93b41e13e2916433283a5d1a46
|-
| sound/dog/dsight.wav  ||style=text-align:right|  6722 || 0edc290765bac1fb4fe03ca55bc7c225
|-
| sound/dog/idle.wav  ||style=text-align:right|  6870 || 42bd6026ff32bd94523ad9f8fe8362cc
|-
| sound/doors/airdoor1.wav  ||style=text-align:right|  13654 || 9b91930e8c2fdece31a2362296891122
|-
| sound/doors/airdoor2.wav  ||style=text-align:right|  8594 || 29fd823d1c14ca42a9a89c716b26f4cd
|-
| sound/doors/basesec1.wav  ||style=text-align:right|  13930 || eb2363fed42724f55e8f55f96c335bcf
|-
| sound/doors/basesec2.wav  ||style=text-align:right|  10238 || 8d163a56607c9cf64a270a156c1c5cef
|-
| sound/doors/basetry.wav  ||style=text-align:right|  10518 || a5108d5c51281ab55c0baf884cbe8cbe
|-
| sound/doors/baseuse.wav  ||style=text-align:right|  16486 || f43fee91efe813a5eb34e9d72918fdb9
|-
| sound/doors/ddoor1.wav  ||style=text-align:right|  7738 || dff86a26139cdd49a193d5ed7ebf6ae1
|-
| sound/doors/ddoor2.wav  ||style=text-align:right|  5904 || 4a9d0b0825d0302ce465569d1e35fbcf
|-
| sound/doors/doormv1.wav  ||style=text-align:right|  14036 || 3fd379aec80a2ad8105c0c89ba5b40e6
|-
| sound/doors/drclos4.wav  ||style=text-align:right|  12814 || 83df1865a0c9fa5d02c2f137564c57de
|-
| sound/doors/hydro1.wav  ||style=text-align:right|  11094 || b1703980a20e624bc3366ccf55ca617e
|-
| sound/doors/hydro2.wav  ||style=text-align:right|  10700 || b1866f5b3950788ccf4206444ab64bc7
|-
| sound/doors/latch2.wav  ||style=text-align:right|  7338 || ad2378ca21a0ca529df328261e07aed5
|-
| sound/doors/medtry.wav  ||style=text-align:right|  7828 || ebb536bec2cdfd22c25b35793c055339
|-
| sound/doors/meduse.wav  ||style=text-align:right|  10718 || 4522aada194b23eb33b541cbcc755cf6
|-
| sound/doors/runetry.wav  ||style=text-align:right|  13524 || c433bae9e2ab508712f87dc2cacc82c8
|-
| sound/doors/runeuse.wav  ||style=text-align:right|  17364 || b4bcfd525a26f5b5ecc9d392430d9079
|-
| sound/doors/stndr1.wav  ||style=text-align:right|  12620 || 5bae2183885e18d65d69624e85249fd9
|-
| sound/doors/stndr2.wav  ||style=text-align:right|  11470 || f43a75c917effff09ef7be8a321c8b49
|-
| sound/doors/winch2.wav  ||style=text-align:right|  14872 || a4edffdfede7dbaed37db526c26e2b6d
|-
| sound/hknight/hit.wav  ||style=text-align:right|  6260 || fece24e2548f1d769e8fce39a5c87d01
|-
| sound/items/armor1.wav  ||style=text-align:right|  7714 || 186d29f2baf35b8c280bc97754606fad
|-
| sound/items/damage2.wav  ||style=text-align:right|  33012 || 14e53b7617ffe315a7c3f8d89652e51c
|-
| sound/items/damage3.wav  ||style=text-align:right|  12894 || baf754aec7ed4baba16760ac85513184
|-
| sound/items/damage.wav  ||style=text-align:right|  23374 || 8cde8b9278ca4922a4ec7ead6e5ee01b
|-
| sound/items/health1.wav  ||style=text-align:right|  7958 || 52a2c4f808db4edd8393de0de618c91f
|-
| sound/items/inv1.wav  ||style=text-align:right|  13728 || 5850cab55d6197d0e76d9f0a22ba10be
|-
| sound/items/inv2.wav  ||style=text-align:right|  33216 || 4edcd38a2c6adc5305636dd7afd5ef60
|-
| sound/items/inv3.wav  ||style=text-align:right|  33320 || 325c268be05b42a019ccb92e6993ab9e
|-
| sound/items/itembk2.wav  ||style=text-align:right|  9910 || 270c688b3cb884f5d4e5ffd8ccc934a1
|-
| sound/items/protect2.wav  ||style=text-align:right|  34012 || 25627a4bd2b4c6054cfd2fc4bf69ddc2
|-
| sound/items/protect3.wav  ||style=text-align:right|  23364 || 7b9374d67f6d59e524bba2af236ca30a
|-
| sound/items/protect.wav  ||style=text-align:right|  22536 || d839d5a84f811ce8a0e28616891bf1a7
|-
| sound/items/r_item1.wav  ||style=text-align:right|  6822 || 3fc0d0ae4a71c9fbfe548f38626c6a08
|-
| sound/items/r_item2.wav  ||style=text-align:right|  7448 || 384ffefe795d99df75f381596a0f1976
|-
| sound/items/suit2.wav  ||style=text-align:right|  33254 || 0a9d2766a5b805cb5794f9bea57e6585
|-
| sound/items/suit.wav  ||style=text-align:right|  15854 || da413f34023d219f1e34fde50a037be0
|-
| sound/knight/idle.wav  ||style=text-align:right|  11064 || 1b5c3981bee078318af346d8fe8090b9
|-
| sound/knight/kdeath.wav  ||style=text-align:right|  10688 || 11a96f48a8f2433c23beae299c8fb96e
|-
| sound/knight/khurt.wav  ||style=text-align:right|  5586 || 32c9f48dd4a6a87752aedf56fe8de668
|-
| sound/knight/ksight.wav  ||style=text-align:right|  13514 || eb75b4af348c88e84d8c87c19d5976fa
|-
| sound/knight/sword1.wav  ||style=text-align:right|  2306 || 93045b5f3178413dc6b01ec2869d1f73
|-
| sound/knight/sword2.wav  ||style=text-align:right|  2784 || 82d1a7c263cd3df7b060dee2f7f8b1fd
|-
| sound/misc/h2ohit1.wav  ||style=text-align:right|  12972 || 49ecb03f4f10862453656a67598f8b8a
|-
| sound/misc/medkey.wav  ||style=text-align:right|  10020 || 0e3ae5626a47d81e4166539e355e31bb
|-
| sound/misc/menu1.wav  ||style=text-align:right|  5738 || 12c36546601c385bc47c9ca9420b7eee
|-
| sound/misc/menu2.wav  ||style=text-align:right|  10672 || 39b01ea6feb3ec8dbd6d8ee3e5e966c4
|-
| sound/misc/menu3.wav  ||style=text-align:right|  3010 || 4a03dc2fd56831b855dab761eac4f7de
|-
| sound/misc/null.wav  ||style=text-align:right|  1244 || 811989e09124f54cb27fe6154b0f1018
|-
| sound/misc/outwater.wav  ||style=text-align:right|  5018 || 35732412412ddb5ed418633bb0123bbe
|-
| sound/misc/power.wav  ||style=text-align:right|  19832 || 9f2c3a18d9fc8d9cecfac6db3aad6bc6
|-
| sound/misc/r_tele1.wav  ||style=text-align:right|  8036 || c2194171b4c446e136ed7514fbb098a5
|-
| sound/misc/r_tele2.wav  ||style=text-align:right|  17324 || 0ce662ac90fb3658d69320d1be4025c1
|-
| sound/misc/r_tele3.wav  ||style=text-align:right|  18016 || 122ef44813edcfe7391578fd29e729d2
|-
| sound/misc/r_tele4.wav  ||style=text-align:right|  9068 || 0097b5747ccc70d5b12fc6838aff02c2
|-
| sound/misc/r_tele5.wav  ||style=text-align:right|  22042 || a82334cbb66d12f28cce9e71c90ea50b
|-
| sound/misc/runekey.wav  ||style=text-align:right|  14578 || 6b21a2e5878011da50fdee0a301d3e34
|-
| sound/misc/secret.wav  ||style=text-align:right|  6610 || a02ceefcc24b1ebf5c164a1e1acfb05f
|-
| sound/misc/talk.wav  ||style=text-align:right|  1810 || d5b25d4df59d92ac5016e88689ea60c1
|-
| sound/misc/trigger1.wav  ||style=text-align:right|  20230 || dc927c8a1d0a9bd59fbc5dd91ae1d812
|-
| sound/misc/water1.wav  ||style=text-align:right|  3926 || d8291c762acb1edf24927fdcc0f6a6cd
|-
| sound/misc/water2.wav  ||style=text-align:right|  3340 || 049e8e7e7b30d4d8038afb7248bdd977
|-
| sound/ogre/ogdrag.wav  ||style=text-align:right|  12396 || 658587dc89aaefae5ca3f058f7ff4227
|-
| sound/ogre/ogdth.wav  ||style=text-align:right|  13892 || de98e7bb9e70586edddd3308cfded3db
|-
| sound/ogre/ogidle2.wav  ||style=text-align:right|  11254 || 196ae9c33a4311160e1d5f3da878ab09
|-
| sound/ogre/ogidle.wav  ||style=text-align:right|  12894 || 177c829840a87c885bbc8951e7ce962e
|-
| sound/ogre/ogpain1.wav  ||style=text-align:right|  7898 || ac6d133d7720c12df49813fe10e683b5
|-
| sound/ogre/ogsawatk.wav  ||style=text-align:right|  16154 || 7257bdfd014bb61d778b8f88cb65d560
|-
| sound/ogre/ogwake.wav  ||style=text-align:right|  19356 || 3296459e495c4c12b31179d4eeffac19
|-
| sound/plats/medplat1.wav  ||style=text-align:right|  16378 || b73215aa6627c8b5b90fce8d260d48d0
|-
| sound/plats/medplat2.wav  ||style=text-align:right|  7338 || 1fc6c3772917a1a8155d04fa52e17005
|-
| sound/plats/plat1.wav  ||style=text-align:right|  20248 || 5d43ed85d896ba926f459e06ba6635d5
|-
| sound/plats/plat2.wav  ||style=text-align:right|  7338 || 49d7ab0fd726cd652eb6e5756fce61b9
|-
| sound/plats/train1.wav  ||style=text-align:right|  21430 || b589ae8262046361d9dca39d6b8f693a
|-
| sound/plats/train2.wav  ||style=text-align:right|  5870 || 640017e1b870d643e3bca29d499c72ee
|-
| sound/player/axhit1.wav  ||style=text-align:right|  6906 || 149b2371334da318386325182924eaca
|-
| sound/player/axhit2.wav  ||style=text-align:right|  2434 || fc01909318455f5310efa2457a370897
|-
| sound/player/death1.wav  ||style=text-align:right|  10170 || ba005f5488d4ee78dabf613a03f33a5f
|-
| sound/player/death2.wav  ||style=text-align:right|  8026 || 20477d2e7c84aac1bef95d32c9c702dd
|-
| sound/player/death3.wav  ||style=text-align:right|  10918 || 7b206ba8e1fa28d8605b50e3f3200f11
|-
| sound/player/death4.wav  ||style=text-align:right|  14126 || 1b0f27f4d41b748d3cc5c3d56bd917f8
|-
| sound/player/death5.wav  ||style=text-align:right|  14946 || 7efe84195cfa97515aad2d7f96f25346
|-
| sound/player/drown1.wav  ||style=text-align:right|  8908 || 732f0416af6990e028110380bcb36f0d
|-
| sound/player/drown2.wav  ||style=text-align:right|  3114 || 29ee1f287879acce29b15d4722668bc2
|-
| sound/player/gasp1.wav  ||style=text-align:right|  8702 || b06cbc370c8c2c163dc4d487e8b673c7
|-
| sound/player/gasp2.wav  ||style=text-align:right|  13134 || 30aece9d8779764620c7f866bfb06edb
|-
| sound/player/gib.wav  ||style=text-align:right|  14424 || 26fa9942078125388f34b71546615068
|-
| sound/player/h2odeath.wav  ||style=text-align:right|  18104 || 73b0f4dfae07f6e49112cadfe202735c
|-
| sound/player/h2ojump.wav  ||style=text-align:right|  11438 || cd421b96410971bb1a4f21d3936a3805
|-
| sound/player/inh2o.wav  ||style=text-align:right|  11340 || d4c1a27c4d07e8dfdf18a4b1a880c610
|-
| sound/player/inlava.wav  ||style=text-align:right|  10958 || c37875a082900716b7af88d2d990f55c
|-
| sound/player/land2.wav  ||style=text-align:right|  6204 || 6ba534256a779d66d9d9dabb90e63c8b
|-
| sound/player/land.wav  ||style=text-align:right|  2434 || e34328a40358d98f0f95403b9e27ec1e
|-
| sound/player/lburn1.wav  ||style=text-align:right|  6682 || 3c447c72385defe97c060771077d8ba0
|-
| sound/player/lburn2.wav  ||style=text-align:right|  6076 || 6849ee8dbd91ec82ece016fbd39b0a5c
|-
| sound/player/pain1.wav  ||style=text-align:right|  3394 || d7ac9df7540b791f952ca2a681c0265b
|-
| sound/player/pain2.wav  ||style=text-align:right|  2710 || 513e054b64d4fb61f31384d59e123020
|-
| sound/player/pain3.wav  ||style=text-align:right|  4854 || aafc61ad4e16cc5cdd2db2100796b494
|-
| sound/player/pain4.wav  ||style=text-align:right|  4840 || f655ef2045bc55473303b27546aa6fc0
|-
| sound/player/pain5.wav  ||style=text-align:right|  8020 || f8551a73cb89396042687baa8c68b5c2
|-
| sound/player/pain6.wav  ||style=text-align:right|  5462 || 70062eabf96288d307280fb601ce0ee2
|-
| sound/player/plyrjmp8.wav  ||style=text-align:right|  3888 || d4a552d8f627c7f3b933568c4a74c913
|-
| sound/player/slimbrn2.wav  ||style=text-align:right|  12468 || b17c18a9f81a952f2d41f65b5180f210
|-
| sound/player/teledth1.wav  ||style=text-align:right|  14414 || c226c7f041187ba058d8112cc0190b56
|-
| sound/player/tornoff2.wav  ||style=text-align:right|  7726 || 03ec1c805b307b8fe4c4052f8332a5e5
|-
| sound/player/udeath.wav  ||style=text-align:right|  16082 || afe674f287efb6197da2cea0c0b1d2f8
|-
| sound/shambler/melee1.wav  ||style=text-align:right|  4718 || 77fe6240973a204b757a427ebf66bcfd
|-
| sound/shambler/melee2.wav  ||style=text-align:right|  5966 || 3be31638d769e3d690c92311dfafdeac
|-
| sound/shambler/sattck1.wav  ||style=text-align:right|  8036 || ec8c3f79ea42d09154cb8975ada1b21c
|-
| sound/shambler/sboom.wav  ||style=text-align:right|  11672 || 9834601a645d7d1f62001b2a314ec18f
|-
| sound/shambler/sdeath.wav  ||style=text-align:right|  21106 || e0e62d229a985a6e39218c6488599059
|-
| sound/shambler/shurt2.wav  ||style=text-align:right|  4302 || 1e87631ede95e061a75f9c31629ac0b8
|-
| sound/shambler/sidle.wav  ||style=text-align:right|  5646 || 368a240e6c3e877793352a79c1828386
|-
| sound/shambler/smack.wav  ||style=text-align:right|  5300 || bd8c634c9894348360fec7b7419d1649
|-
| sound/shambler/ssight.wav  ||style=text-align:right|  15420 || 657107577460d5acf3157dec97e07a89
|-
| sound/soldier/death1.wav  ||style=text-align:right|  8434 || fe25952af40b536c3bb67bfca58062eb
|-
| sound/soldier/idle.wav  ||style=text-align:right|  9802 || 4cdfbdda8fb5f40b125c7bcddb6e8914
|-
| sound/soldier/pain1.wav  ||style=text-align:right|  5000 || 54d3b05fdcecf7480034858f2b22b06c
|-
| sound/soldier/pain2.wav  ||style=text-align:right|  7838 || e2bbc9d3405b9b9fdae76d2fc298fc2f
|-
| sound/soldier/sattck1.wav  ||style=text-align:right|  14302 || b76ac35f900f280a7a7996da7e404362
|-
| sound/soldier/sight1.wav  ||style=text-align:right|  12716 || e2a39533250ddd1b08053d5c4ebf7fd0
|-
| sound/weapons/ax1.wav  ||style=text-align:right|  3308 || 237d4d819d02ad37849a8a895cc410e1
|-
| sound/weapons/bounce.wav  ||style=text-align:right|  5864 || fced668c6558a9505abf5014d60528a6
|-
| sound/weapons/grenade.wav  ||style=text-align:right|  8364 || d2b6fa131933f203eba2a282276e88df
|-
| sound/weapons/guncock.wav  ||style=text-align:right|  14430 || 6a63452167cc106e756518536446844f
|-
| sound/weapons/lhit.wav  ||style=text-align:right|  26028 || fefd021d0bd35a1f8da8870f1c06abb9
|-
| sound/weapons/lock4.wav  ||style=text-align:right|  3876 || 3fd93222258d5b1500b150f021c94519
|-
| sound/weapons/lstart.wav  ||style=text-align:right|  56378 || abe1abf6dcadcda5930b0684c7ea820a
|-
| sound/weapons/pkup.wav  ||style=text-align:right|  5174 || 0aa6f0a7d609e1a56fd535a06d1bb56e
|-
| sound/weapons/r_exp3.wav  ||style=text-align:right|  17478 || 57db026474fc76ba7f38cea24eaaf8cf
|-
| sound/weapons/ric1.wav  ||style=text-align:right|  4308 || a31166b4bbb4509ac3004a01f7477ee9
|-
| sound/weapons/ric2.wav  ||style=text-align:right|  10838 || a180b447c0527e603cea54a9aefd6139
|-
| sound/weapons/ric3.wav  ||style=text-align:right|  12638 || 8a773bbb585540ddce256151162f3a2c
|-
| sound/weapons/rocket1i.wav  ||style=text-align:right|  9660 || fb4fdf345d805cf6980c4c695974effc
|-
| sound/weapons/sgun1.wav  ||style=text-align:right|  22992 || 95a14815e48deb323d0cf8251d728ac7
|-
| sound/weapons/shotgn2.wav  ||style=text-align:right|  8694 || cb561cefbf472232334b419af050e5a0
|-
| sound/weapons/spike2.wav  ||style=text-align:right|  12642 || 9189d811855f108da4a1e2d34dc7c633
|-
| sound/weapons/tink1.wav  ||style=text-align:right|  1252 || 297ba8706625fcf05887edb393e9a441
|-
| sound/wizard/hit.wav  ||style=text-align:right|  7332 || 6598d669334df977f1f97b95288edf11
|-
| sound/wizard/wattack.wav  ||style=text-align:right|  25912 || b3568a47439f81779d40335e76f5bc2d
|-
| sound/wizard/wdeath.wav  ||style=text-align:right|  20684 || 99d9c71343bc23222abb92119d404400
|-
| sound/wizard/widle1.wav  ||style=text-align:right|  13464 || b22b1dd9f66879b3447d36ab584316c7
|-
| sound/wizard/widle2.wav  ||style=text-align:right|  23094 || 7178fd83df227360564adef01bed92c6
|-
| sound/wizard/wpain.wav  ||style=text-align:right|  8686 || bd7e59ab7d7b835f9ed8ab51950914de
|-
| sound/wizard/wsight.wav  ||style=text-align:right|  13078 || df5949057c750528917c6cb32b7fd9fd
|-
| sound/zombie/idle_w2.wav  ||style=text-align:right|  17192 || d2bb59b9d7ac71097c07123a23525641
|-
| sound/zombie/z_fall.wav  ||style=text-align:right|  3062 || 6968318b2d196c6d54bc707d8a390547
|-
| sound/zombie/z_gib.wav  ||style=text-align:right|  16226 || 199dda66ade8d6f0ef4897e4d7608c0d
|-
| sound/zombie/z_hit.wav  ||style=text-align:right|  6166 || 6c66ab3e6b149bf35956a4bbc0057acb
|-
| sound/zombie/z_idle1.wav  ||style=text-align:right|  13244 || 21088a7b38b1124d7ec72e58d5ab93a6
|-
| sound/zombie/z_idle.wav  ||style=text-align:right|  16734 || e5e570e38c4405111004190a79f0e925
|-
| sound/zombie/z_miss.wav  ||style=text-align:right|  10734 || 96fad96a8c3bc6f7bcc5da6c82678da2
|-
| sound/zombie/z_pain1.wav  ||style=text-align:right|  15374 || fcd83b89a94b0cadbe1361a4df080ec0
|-
| sound/zombie/z_pain.wav  ||style=text-align:right|  12218 || 56637968b8309bd2f825153330bbdfc0
|-
| sound/zombie/z_shot1.wav  ||style=text-align:right|  3068 || 561afb69b7851923a8fb3b54e3e13c96
|-
|}&lt;/tt&gt;

{{todo|todo=Multiple to do items listed above, detail out the contents of various pak files}}
{{todo|todo=different releases have different pak0.pak files}}</text>
      <sha1>6bu8f0q5rk25jsxjkzag04ypml411qk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3261</id>
      <parentid>2588</parentid>
      <timestamp>2014-09-24T16:29:08Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>v1.01</comment>
      <text xml:space="preserve" bytes="33751">The '''''pak0.pak''''' file that comes with Quake is required by all Quake [[engines]]. It contains the maps, models, programs, sounds, and skins required to play Quake Episode 1, ''Dimension of the Doomed''. It is expected to be in the ID1 subfolder of the Quake root folder.

[[PAK file]]s are typically named ''pak0.pak'', ''pak1.pak'', ''pak2.pak'', and so on. Quake mission packs and other Quake-based games often have their own ''pak0.pak'' files, which live in a different folder, not the ID1 folder.

The ID1 ''pak0.pak'' is distributed with both the shareware and the registered/commercial editions of Quake.

In some editions, including the downloadable shareware (''quake106.zip'') from id Software, ''pak0.pak'' is embedded in another archive, ''[[resource.1]]''. The files in this archive are LZH-encoded using the lh5 algorithm. If you can't or don't want to run the DOS/Win32 Quake installer program it comes with, then you'll need a compatible extractor program to get ''pak0.pak'' out of the ''resource.1'' archive.


== Versions ==
&lt;tt&gt;
{| class=&quot;wikitable&quot;
! Version !! Size !! md5
|-
| Shareware or Registered Version 1.01 ||style=text-align:right|  18276119 || fc989b37572fae074e8ffda0ce4d5297
|-
|}&lt;/tt&gt;

The ID1 ''pak0.pak'' with the md5sum 5906e5998fc3d896ddaf5e6a62e03abb contains the following folders &amp; files:
&lt;tt&gt;
{| class=&quot;wikitable collapsible collapsed&quot;
! Path !! Size !! md5
|-
| default.cfg  ||style=text-align:right|  1914 || fc989b37572fae074e8ffda0ce4d5297
|-
| demo1.dem  ||style=text-align:right|  184471 || 85ec0141ab24d9732e487d1aafa791f0
|-
| demo2.dem  ||style=text-align:right|  152705 || fa5c3daf7a57954cd95f94b698a7e420
|-
| demo3.dem  ||style=text-align:right|  197679 || 691f37e5715ea2863c1d8092a6429824
|-
| end1.bin  ||style=text-align:right|  4000 || 92ae51961ec2f429dfe9bea1138fbd5d
|-
| gfx/bigbox.lmp  ||style=text-align:right|  5192 || e597771ac6149b2b071ebfd24981ea04
|-
| gfx/box_bl.lmp  ||style=text-align:right|  72 || 5b094c37c2c1c2eebe37f84117dea182
|-
| gfx/box_bm.lmp  ||style=text-align:right|  136 || 44621236738e2bf8d669e53dca887278
|-
| gfx/box_br.lmp  ||style=text-align:right|  72 || 86597d5325b472caf5644644033e5cab
|-
| gfx/box_ml.lmp  ||style=text-align:right|  72 || adcea286ba0ac01084fd0c131b16ffdd
|-
| gfx/box_mm2.lmp  ||style=text-align:right|  136 || b850bcec189d909e7a0f796111a11249
|-
| gfx/box_mm.lmp  ||style=text-align:right|  136 || 700b4884b1a3c6aa7356a43014261866
|-
| gfx/box_mr.lmp  ||style=text-align:right|  72 || e30d9ea783ef7dd50101682f03ba40d7
|-
| gfx/box_tl.lmp  ||style=text-align:right|  72 || 3903d3d814e37c55790ac0ccfef2b925
|-
| gfx/box_tm.lmp  ||style=text-align:right|  136 || 7cb85ccbf8e7d2532da2a839a7cef348
|-
| gfx/box_tr.lmp  ||style=text-align:right|  72 || 5c5e72746af821a4cf8437d8fecc53c7
|-
| gfx/colormap.lmp  ||style=text-align:right|  16385 || 0d793b70bffafbd666fc5c88d6e15e9d
|-
| gfx/complete.lmp  ||style=text-align:right|  4616 || db6a00dfbe2c62a43c261e5622297c4a
|-
| gfx/conback.lmp  ||style=text-align:right|  64008 || 9eb6f9c47870bf42985d9382958a5c12
|-
| gfx/dim_drct.lmp  ||style=text-align:right|  3352 || 50ea11fe8c4d9db92863bdcd03b89df5
|-
| gfx/dim_ipx.lmp  ||style=text-align:right|  3352 || 0bef9943487f0611225bf0a5c0fe5dd4
|-
| gfx/dim_modm.lmp  ||style=text-align:right|  3352 || 3288f03144f06b95cadafa9458a77b1d
|-
| gfx/dim_mult.lmp  ||style=text-align:right|  3352 || 348b7369227f2d7e9d0daccbf6c9344d
|-
| gfx/dim_tcp.lmp  ||style=text-align:right|  3352 || 7dc8bbb01d7c90cd51c28da0ff6ed900
|-
| gfx/finale.lmp  ||style=text-align:right|  6920 || b6e49409d344e0344273d86ea33fe35f
|-
| gfx/help0.lmp  ||style=text-align:right|  64008 || b392ac30ad49252b51ec934ed855c20f
|-
| gfx/help1.lmp  ||style=text-align:right|  64008 || 857543c69245117a606044ea63adac9a
|-
| gfx/help2.lmp  ||style=text-align:right|  64008 || 882dd5920ea9c19f637f32084de9788a
|-
| gfx/help3.lmp  ||style=text-align:right|  64008 || a89d169524920d896128009467deebfc
|-
| gfx/help4.lmp  ||style=text-align:right|  64008 || c72d67c84ae6b403fae5f08d3e5c3bc6
|-
| gfx/help5.lmp  ||style=text-align:right|  64008 || 12203d7cdec35c4f51622dd90ec92093
|-
| gfx/inter.lmp  ||style=text-align:right|  23048 || f6eabe0d742380c7b47a9ee44170993d
|-
| gfx/loading.lmp  ||style=text-align:right|  3464 || 3249bc994266529a1748c06bfbb24bfa
|-
| gfx/mainmenu.lmp  ||style=text-align:right|  26888 || 8122e2a0b8888f9d1ebef149551b6434
|-
| gfx/menudot1.lmp  ||style=text-align:right|  392 || bfdb08d84d580abcfbacc1c9abd62bfb
|-
| gfx/menudot2.lmp  ||style=text-align:right|  392 || 6c6d2176e00edbe530bb1db118aaa6dc
|-
| gfx/menudot3.lmp  ||style=text-align:right|  392 || 2527a05f6162efb3e4bc5311d9e010d5
|-
| gfx/menudot4.lmp  ||style=text-align:right|  392 || 90ea6be033b39b139b3779932d266f33
|-
| gfx/menudot5.lmp  ||style=text-align:right|  392 || c9beb9600c35e458d0f83b6cf1e1c692
|-
| gfx/menudot6.lmp  ||style=text-align:right|  392 || 31b9a6ec1d12a2bd56b955185a9e72d3
|-
| gfx/menuplyr.lmp  ||style=text-align:right|  2696 || 9eebe617ff51c4ce43f85ca1a6920d5b
|-
| gfx/mp_menu.lmp  ||style=text-align:right|  14856 || c6416b8f7f5262a5a19b9ce4be1fd9ce
|-
| gfx/netmen1.lmp  ||style=text-align:right|  3352 || 5bc6a8d8cfdfd7e940e933812954367a
|-
| gfx/netmen2.lmp  ||style=text-align:right|  3352 || c8aafb649a653e90fc5eb7b7a2b3ca2e
|-
| gfx/netmen3.lmp  ||style=text-align:right|  3352 || 11c9372d0e64057a1ec8251f596b820d
|-
| gfx/netmen4.lmp  ||style=text-align:right|  3352 || 74ec672b1312699be2eeaf25a68e4582
|-
| gfx/netmen5.lmp  ||style=text-align:right|  3352 || 231f8a9ea4ba364f517db0e9f7f1ba72
|-
| gfx/palette.lmp  ||style=text-align:right|  768 || 79bc149d4f2fb0bd68cd8400a3fd87d4
|-
| gfx/pause.lmp  ||style=text-align:right|  3080 || 5aa67f927719e4a9eb3e020e75fea969
|-
| gfx/p_load.lmp  ||style=text-align:right|  2504 || 27fe08071058385529b0b8ad746421e7
|-
| gfx/p_multi.lmp  ||style=text-align:right|  5192 || 5a307c7d11da20a4772ad9c00b9f4309
|-
| gfx/p_option.lmp  ||style=text-align:right|  3464 || 83a3bf4459bce3fe85857a0aa647b90a
|-
| gfx/p_save.lmp  ||style=text-align:right|  2120 || 0d2bb5fa5524e0180a85bf273094cd1f
|-
| gfx/qplaque.lmp  ||style=text-align:right|  4616 || f4de79557c75e26b85ea84fb6029a5f3
|-
| gfx/ranking.lmp  ||style=text-align:right|  4040 || 919b13d1f7fdd0082ec0f94699f3b681
|-
| gfx/sell.lmp  ||style=text-align:right|  64008 || 878db3866e8b38c5b8d951aef516358c
|-
| gfx/sp_menu.lmp  ||style=text-align:right|  14856 || f624aa79778970ecb8ef518b5ab435f6
|-
| gfx/ttl_cstm.lmp  ||style=text-align:right|  4424 || 4ee84e0e7fa93f0e93d26efb1e726a4d
|-
| gfx/ttl_main.lmp  ||style=text-align:right|  2312 || 07e1c8e189e2463befcfc44f5ecf8dcb
|-
| gfx/ttl_sgl.lmp  ||style=text-align:right|  3080 || 25d5360228da738f091063eaeb7c6aa8
|-
| gfx/vidmodes.lmp  ||style=text-align:right|  5192 || 18a97f403057777f262188903f485fe8
|-
| gfx.wad  ||style=text-align:right|  112828 || cde5b5890c8902c02a2f271abe8f4a1f
|-
| maps/b_batt0.bsp  ||style=text-align:right|  5044 || 00bc989f4c8d2570a2826a63c7356a27
|-
| maps/b_batt1.bsp  ||style=text-align:right|  4620 || 555bc0cb0b5c2ad2ed0110f307e70679
|-
| maps/b_bh100.bsp  ||style=text-align:right|  8820 || 62f78bb5143265f037b79ddd077c50ed
|-
| maps/b_bh10.bsp  ||style=text-align:right|  3936 || e80cde9f185612f669fc100f825ca84f
|-
| maps/b_bh25.bsp  ||style=text-align:right|  8872 || 032d70dbf8669b3627b82b41f31488bd
|-
| maps/b_explob.bsp  ||style=text-align:right|  10220 || d8c9db3cfa0264678afc580143f665ea
|-
| maps/b_nail0.bsp  ||style=text-align:right|  5044 || c8d7ec0bdee74e0c1e69e8dbe939117d
|-
| maps/b_nail1.bsp  ||style=text-align:right|  5044 || ea08b2bd6aa19ece0307f75c491e5d24
|-
| maps/b_rock0.bsp  ||style=text-align:right|  2956 || 19ce64cd248a4459bf37b45e6e7c1219
|-
| maps/b_rock1.bsp  ||style=text-align:right|  2944 || b4cdb75094cd7218ed2b0475aefabe80
|-
| maps/b_shell0.bsp  ||style=text-align:right|  5044 || 574824b3c52661959d633a76dc823859
|-
| maps/b_shell1.bsp  ||style=text-align:right|  5044 || dc8b8dcb490e204e615b2b9cdc673296
|-
| maps/e1m1.bsp  ||style=text-align:right|  1365176 || 84cae48010619bcc945426b91bc03ade
|-
| maps/e1m2.bsp  ||style=text-align:right|  1332228 || caff91afbe41f3eac4dda65cee0083c9
|-
| maps/e1m3.bsp  ||style=text-align:right|  1249944 || f20eaa5692e94ab889c4ade9e1c116c7
|-
| maps/e1m4.bsp  ||style=text-align:right|  1411452 || 29419f05ef647f83d0482502bb3f84f8
|-
| maps/e1m5.bsp  ||style=text-align:right|  1324060 || afd98cc890d748986186951b32fc9fcb
|-
| maps/e1m6.bsp  ||style=text-align:right|  1065080 || ec178e54ff68c4d8cf71e26775b2eb2d
|-
| maps/e1m7.bsp  ||style=text-align:right|  607420 || 0c1f55455e0f957291e21d211b689718
|-
| maps/e1m8.bsp  ||style=text-align:right|  924116 || 18c7ab2f922d5d586150afbc27c323a4
|-
| maps/start.bsp  ||style=text-align:right|  1433792 || 61a57bb4ca36368478f02b142d1b5291
|-
| progs/armor.mdl  ||style=text-align:right|  44076 || ca060166d7e4e4686995f05645dde593
|-
| progs/backpack.mdl  ||style=text-align:right|  19348 || 315b4ef42fb035aa3318e8d2d61961ce
|-
| progs/bolt2.mdl  ||style=text-align:right|  11860 || f59ce07cfbe01fcfc578258c573d2c31
|-
| progs/bolt3.mdl  ||style=text-align:right|  11860 || ff87579a424faa59ca2695b7434ea488
|-
| progs/bolt.mdl  ||style=text-align:right|  20644 || a176903954e9d8c7ab629f92784546c2
|-
| progs/boss.mdl  ||style=text-align:right|  211836 || 25da3b2bc30677e32ee3a3a878a4d3af
|-
| progs.dat  ||style=text-align:right|  413116 || 0c3ef3625df5883536f8da42c78b673a
|-
| progs/demon.mdl  ||style=text-align:right|  102120 || 4c73786e7cfb2083ca38cbc983cd6c4b
|-
| progs/dog.mdl  ||style=text-align:right|  146056 || e727fbc39acc652f812972612ce37565
|-
| progs/end1.mdl  ||style=text-align:right|  20820 || 67c0fcab33d3772c00bb462b0e749275
|-
| progs/eyes.mdl  ||style=text-align:right|  4372 || ed72f64a17c6909b2cb3034a734bca97
|-
| progs/flame2.mdl  ||style=text-align:right|  64572 || f2c8f8950ebd7a0edded6247655d325b
|-
| progs/flame.mdl  ||style=text-align:right|  46364 || 8593c05374d84354d4444c218e86fdb8
|-
| progs/gib1.mdl  ||style=text-align:right|  5716 || f5c5b799e895dc03036522a487e99913
|-
| progs/gib2.mdl  ||style=text-align:right|  16228 || cfa9e97a3542852418123e0bb12e4f86
|-
| progs/gib3.mdl  ||style=text-align:right|  22228 || d73be7b2881e0a5aacf2b332ac29086f
|-
| progs/g_light.mdl  ||style=text-align:right|  50276 || 61bba06ec3804b7f355a62fd4585ad8f
|-
| progs/g_nail2.mdl  ||style=text-align:right|  30720 || ed6d7bb5ff050ad5f2bf4be7739a16a5
|-
| progs/g_nail.mdl  ||style=text-align:right|  34700 || e2959ca741c764dd42025ef531a1b554
|-
| progs/grenade.mdl  ||style=text-align:right|  2244 || f492d6257c216306983a72f41db0d891
|-
| progs/g_rock2.mdl  ||style=text-align:right|  40756 || 68c047c97bab89afe2cb69e65b7c62e1
|-
| progs/g_rock.mdl  ||style=text-align:right|  48244 || 61346f842944795e0821e31e3d61b427
|-
| progs/g_shot.mdl  ||style=text-align:right|  32916 || 7facfec1a3cfb892cce871f398e9cb6b
|-
| progs/h_demon.mdl  ||style=text-align:right|  34884 || 5253a0ea93d9624d73fb984ee339b52f
|-
| progs/h_dog.mdl  ||style=text-align:right|  24436 || a0b5f87522b3a769548c46cf3bb4223e
|-
| progs/h_guard.mdl  ||style=text-align:right|  5428 || 18a629b53b87392030df63b7806eb833
|-
| progs/h_knight.mdl  ||style=text-align:right|  7156 || 46a03fa72b0cdebcf58045aba2fafc13
|-
| progs/h_ogre.mdl  ||style=text-align:right|  14900 || 14eb06611c769e254d0531c05919bdf5
|-
| progs/h_player.mdl  ||style=text-align:right|  14708 || bf1773df7d3e19c5b211a1ee408f6b05
|-
| progs/h_shams.mdl  ||style=text-align:right|  37060 || ff1e04e18c57667991341a011fb6c363
|-
| progs/h_wizard.mdl  ||style=text-align:right|  14804 || 4bc6be40128f313cf9ad06c347310735
|-
| progs/h_zombie.mdl  ||style=text-align:right|  4484 || 0fdef7f7cd05a3209e0a163e87f69f8b
|-
| progs/invisibl.mdl  ||style=text-align:right|  7092 || 1e87d86af02e69db9c9f27f5fddc7a47
|-
| progs/invulner.mdl  ||style=text-align:right|  23920 || 8c8d83e4d50c3282d009b333a1280422
|-
| progs/knight.mdl  ||style=text-align:right|  101404 || 5328915db5c53e85cf75d46e7b747fb9
|-
| progs/lavaball.mdl  ||style=text-align:right|  8788 || 92af53d2145681e37877dbc1d12801b2
|-
| progs/m_g_key.mdl  ||style=text-align:right|  12820 || 192c2650a115c91706f6fa8fe68beb45
|-
| progs/missile.mdl  ||style=text-align:right|  57796 || 47f19f9e34954b93443c9759dd2e7ba0
|-
| progs/m_s_key.mdl  ||style=text-align:right|  12820 || 20837376b391cdd5c92e57b84e05687f
|-
| progs/ogre.mdl  ||style=text-align:right|  162036 || fbb592ca3788a576dd2f31fcf8c80fab
|-
| progs/player.mdl  ||style=text-align:right|  191852 || 405cef9a10d96cdabffb5e91312f8e5c
|-
| progs/quaddama.mdl  ||style=text-align:right|  39992 || 00b177ff272a4779097ea08344da8aff
|-
| progs/s_bubble.spr  ||style=text-align:right|  588 || 7c0887630ed468205292d8cb7abcae93
|-
| progs/s_explod.spr  ||style=text-align:right|  18972 || 766c6a92c26b54f68f7ff87c90d71cf2
|-
| progs/shambler.mdl  ||style=text-align:right|  98556 || 9b09375a0f614dc4081e363cc34f1185
|-
| progs/s_light.mdl  ||style=text-align:right|  27596 || ee6649ea5673989f3aa06213a8d65f76
|-
| progs/s_light.spr  ||style=text-align:right|  1080 || aff44ba238f4e1d0d504d6f9700aadb4
|-
| progs/soldier.mdl  ||style=text-align:right|  146288 || 5b6c30a984872b4273dd5861412d35c5
|-
| progs/spike.mdl  ||style=text-align:right|  1684 || be4cb73125f939284376080acc9887dd
|-
| progs/s_spike.mdl  ||style=text-align:right|  1684 || ebb1d58242b64a703623c8a33fcbd9e6
|-
| progs/suit.mdl  ||style=text-align:right|  51236 || 882a61f5eea7f9cdbc04800b963cef85
|-
| progs/v_axe.mdl  ||style=text-align:right|  57908 || 577dadcca2700068995c808dc7dec76f
|-
| progs/v_light.mdl  ||style=text-align:right|  56204 || 68733d4c690de88b5c3ba33e52be1c15
|-
| progs/v_nail2.mdl  ||style=text-align:right|  68732 || aacd1002ab02662cc1d3ff46885b553e
|-
| progs/v_nail.mdl  ||style=text-align:right|  54472 || ec9ba028b346da2f9674c2a521ff0c2f
|-
| progs/v_rock2.mdl  ||style=text-align:right|  58188 || 96edf1a3c7629987c200361523f780d7
|-
| progs/v_rock.mdl  ||style=text-align:right|  58548 || 7bea46b2a75fd7cff2fb99420e4c4e25
|-
| progs/v_shot2.mdl  ||style=text-align:right|  50816 || 922b3b687766ae0d7aeb73d44dec7035
|-
| progs/v_shot.mdl  ||style=text-align:right|  43852 || 1fd140b6856843e83cd9bf3966f5d7dd
|-
| progs/w_g_key.mdl  ||style=text-align:right|  7252 || c5c5f0d14b022f57294ad9aded318250
|-
| progs/wizard.mdl  ||style=text-align:right|  64472 || bf60986594f045e60e8aa6339d553ee7
|-
| progs/w_s_key.mdl  ||style=text-align:right|  7252 || ec02314a7d12439d36b4eb2dd0a641a8
|-
| progs/w_spike.mdl  ||style=text-align:right|  14336 || 8cf9245df2164e8062b01a220b508d6b
|-
| progs/zombie.mdl  ||style=text-align:right|  186084 || a923b1d03b9d237dd5ead9bd56acc900
|-
| progs/zom_gib.mdl  ||style=text-align:right|  10196 || cf42c938caa5b19f719d1f110b1dc6d4
|-
| quake.rc  ||style=text-align:right|  293 || 411d42958aaeae141813f9ebfcf5233f
|-
| sound/ambience/buzz1.wav  ||style=text-align:right|  36308 || 346a00c795c6f1f1338ade6fc350b3fe
|-
| sound/ambience/comp1.wav  ||style=text-align:right|  62734 || f91a1120de804f7cd4dbba4f12c748e9
|-
| sound/ambience/drip1.wav  ||style=text-align:right|  137736 || 2306a76162eeda3d0812c516bc99aa7a
|-
| sound/ambience/drone6.wav  ||style=text-align:right|  18522 || 322853ddb42ad2a205579b5cca8e2e8c
|-
| sound/ambience/fire1.wav  ||style=text-align:right|  24064 || 610d3985ed8133988e8de3bec2b9cbbe
|-
| sound/ambience/fl_hum1.wav  ||style=text-align:right|  50154 || e4628499702e004c4bacd282a3ecb8c0
|-
| sound/ambience/hum1.wav  ||style=text-align:right|  40166 || 486bfa737c35b0c9dda57cbee2a540af
|-
| sound/ambience/suck1.wav  ||style=text-align:right|  110392 || 2e99e4d1fe1501d5191c8157d3063cb6
|-
| sound/ambience/swamp1.wav  ||style=text-align:right|  68524 || 29ffb678d78997eb6c227677c86ea4f8
|-
| sound/ambience/swamp2.wav  ||style=text-align:right|  68526 || 356aa1e875da846e72d8f17bbb699a5b
|-
| sound/ambience/thunder1.wav  ||style=text-align:right|  41492 || cefd6ced4b5bc79fcece1003238566f6
|-
| sound/ambience/water1.wav  ||style=text-align:right|  55784 || 6eeaae0a3450652d2be0782895297ee4
|-
| sound/ambience/wind2.wav  ||style=text-align:right|  28610 || 030cf8dd2b00a12454b5b35a89d03914
|-
| sound/ambience/windfly.wav  ||style=text-align:right|  22140 || c7be01e6d324e66883f70aa0072a99b0
|-
| sound/boss1/death.wav  ||style=text-align:right|  27600 || 43469b1acd35b67107da5da82e1df911
|-
| sound/boss1/out1.wav  ||style=text-align:right|  50344 || 847a6f971f6905dfaffd70b30d18a4b1
|-
| sound/boss1/pain.wav  ||style=text-align:right|  17700 || 49112740c0ff421f9272b9e8efc748cd
|-
| sound/boss1/sight1.wav  ||style=text-align:right|  24768 || 427dd600e6b28c9402212adcc5d652c7
|-
| sound/boss1/throw.wav  ||style=text-align:right|  11526 || 9b6e9ff2c8df448f7fd4b5315e60ddda
|-
| sound/buttons/airbut1.wav  ||style=text-align:right|  10672 || 9d2e14e7176842a0dce909a43d38873d
|-
| sound/buttons/switch02.wav  ||style=text-align:right|  3746 || d2e9cba3a353edc65115f6f5c574403c
|-
| sound/buttons/switch04.wav  ||style=text-align:right|  3666 || ff47857a58d3faefb2b94a37d7ba4f26
|-
| sound/buttons/switch21.wav  ||style=text-align:right|  6318 || 3605b0d061a9baf185c6ab7614534531
|-
| sound/demon/ddeath.wav  ||style=text-align:right|  9140 || 62a48dcd405ca55c9ce18497e36faa0e
|-
| sound/demon/dhit2.wav  ||style=text-align:right|  7142 || 9e741696e4d0d66e30e718fc70ec186e
|-
| sound/demon/djump.wav  ||style=text-align:right|  8494 || 791ac9d6b6593808316145443cb7e7a0
|-
| sound/demon/dland2.wav  ||style=text-align:right|  4400 || db14c7b01838f826b7a712075f9026fd
|-
| sound/demon/dpain1.wav  ||style=text-align:right|  6282 || 5e6c485878393c9bebb0d0e6659bc479
|-
| sound/demon/idle1.wav  ||style=text-align:right|  9098 || 7a83f8caf3d5b1172a7dc5afdc942988
|-
| sound/demon/sight2.wav  ||style=text-align:right|  8804 || 65171c355c22a5069520b0881677ae3c
|-
| sound/dog/dattack1.wav  ||style=text-align:right|  8154 || 0c47c9d4aaae0bf3159a288b674f4a35
|-
| sound/dog/ddeath.wav  ||style=text-align:right|  14912 || b0e7760b1d7286a028ff9773f6802958
|-
| sound/dog/dpain1.wav  ||style=text-align:right|  7240 || 28e5ab93b41e13e2916433283a5d1a46
|-
| sound/dog/dsight.wav  ||style=text-align:right|  6722 || 0edc290765bac1fb4fe03ca55bc7c225
|-
| sound/dog/idle.wav  ||style=text-align:right|  6870 || 42bd6026ff32bd94523ad9f8fe8362cc
|-
| sound/doors/airdoor1.wav  ||style=text-align:right|  13654 || 9b91930e8c2fdece31a2362296891122
|-
| sound/doors/airdoor2.wav  ||style=text-align:right|  8594 || 29fd823d1c14ca42a9a89c716b26f4cd
|-
| sound/doors/basesec1.wav  ||style=text-align:right|  13930 || eb2363fed42724f55e8f55f96c335bcf
|-
| sound/doors/basesec2.wav  ||style=text-align:right|  10238 || 8d163a56607c9cf64a270a156c1c5cef
|-
| sound/doors/basetry.wav  ||style=text-align:right|  10518 || a5108d5c51281ab55c0baf884cbe8cbe
|-
| sound/doors/baseuse.wav  ||style=text-align:right|  16486 || f43fee91efe813a5eb34e9d72918fdb9
|-
| sound/doors/ddoor1.wav  ||style=text-align:right|  7738 || dff86a26139cdd49a193d5ed7ebf6ae1
|-
| sound/doors/ddoor2.wav  ||style=text-align:right|  5904 || 4a9d0b0825d0302ce465569d1e35fbcf
|-
| sound/doors/doormv1.wav  ||style=text-align:right|  14036 || 3fd379aec80a2ad8105c0c89ba5b40e6
|-
| sound/doors/drclos4.wav  ||style=text-align:right|  12814 || 83df1865a0c9fa5d02c2f137564c57de
|-
| sound/doors/hydro1.wav  ||style=text-align:right|  11094 || b1703980a20e624bc3366ccf55ca617e
|-
| sound/doors/hydro2.wav  ||style=text-align:right|  10700 || b1866f5b3950788ccf4206444ab64bc7
|-
| sound/doors/latch2.wav  ||style=text-align:right|  7338 || ad2378ca21a0ca529df328261e07aed5
|-
| sound/doors/medtry.wav  ||style=text-align:right|  7828 || ebb536bec2cdfd22c25b35793c055339
|-
| sound/doors/meduse.wav  ||style=text-align:right|  10718 || 4522aada194b23eb33b541cbcc755cf6
|-
| sound/doors/runetry.wav  ||style=text-align:right|  13524 || c433bae9e2ab508712f87dc2cacc82c8
|-
| sound/doors/runeuse.wav  ||style=text-align:right|  17364 || b4bcfd525a26f5b5ecc9d392430d9079
|-
| sound/doors/stndr1.wav  ||style=text-align:right|  12620 || 5bae2183885e18d65d69624e85249fd9
|-
| sound/doors/stndr2.wav  ||style=text-align:right|  11470 || f43a75c917effff09ef7be8a321c8b49
|-
| sound/doors/winch2.wav  ||style=text-align:right|  14872 || a4edffdfede7dbaed37db526c26e2b6d
|-
| sound/hknight/hit.wav  ||style=text-align:right|  6260 || fece24e2548f1d769e8fce39a5c87d01
|-
| sound/items/armor1.wav  ||style=text-align:right|  7714 || 186d29f2baf35b8c280bc97754606fad
|-
| sound/items/damage2.wav  ||style=text-align:right|  33012 || 14e53b7617ffe315a7c3f8d89652e51c
|-
| sound/items/damage3.wav  ||style=text-align:right|  12894 || baf754aec7ed4baba16760ac85513184
|-
| sound/items/damage.wav  ||style=text-align:right|  23374 || 8cde8b9278ca4922a4ec7ead6e5ee01b
|-
| sound/items/health1.wav  ||style=text-align:right|  7958 || 52a2c4f808db4edd8393de0de618c91f
|-
| sound/items/inv1.wav  ||style=text-align:right|  13728 || 5850cab55d6197d0e76d9f0a22ba10be
|-
| sound/items/inv2.wav  ||style=text-align:right|  33216 || 4edcd38a2c6adc5305636dd7afd5ef60
|-
| sound/items/inv3.wav  ||style=text-align:right|  33320 || 325c268be05b42a019ccb92e6993ab9e
|-
| sound/items/itembk2.wav  ||style=text-align:right|  9910 || 270c688b3cb884f5d4e5ffd8ccc934a1
|-
| sound/items/protect2.wav  ||style=text-align:right|  34012 || 25627a4bd2b4c6054cfd2fc4bf69ddc2
|-
| sound/items/protect3.wav  ||style=text-align:right|  23364 || 7b9374d67f6d59e524bba2af236ca30a
|-
| sound/items/protect.wav  ||style=text-align:right|  22536 || d839d5a84f811ce8a0e28616891bf1a7
|-
| sound/items/r_item1.wav  ||style=text-align:right|  6822 || 3fc0d0ae4a71c9fbfe548f38626c6a08
|-
| sound/items/r_item2.wav  ||style=text-align:right|  7448 || 384ffefe795d99df75f381596a0f1976
|-
| sound/items/suit2.wav  ||style=text-align:right|  33254 || 0a9d2766a5b805cb5794f9bea57e6585
|-
| sound/items/suit.wav  ||style=text-align:right|  15854 || da413f34023d219f1e34fde50a037be0
|-
| sound/knight/idle.wav  ||style=text-align:right|  11064 || 1b5c3981bee078318af346d8fe8090b9
|-
| sound/knight/kdeath.wav  ||style=text-align:right|  10688 || 11a96f48a8f2433c23beae299c8fb96e
|-
| sound/knight/khurt.wav  ||style=text-align:right|  5586 || 32c9f48dd4a6a87752aedf56fe8de668
|-
| sound/knight/ksight.wav  ||style=text-align:right|  13514 || eb75b4af348c88e84d8c87c19d5976fa
|-
| sound/knight/sword1.wav  ||style=text-align:right|  2306 || 93045b5f3178413dc6b01ec2869d1f73
|-
| sound/knight/sword2.wav  ||style=text-align:right|  2784 || 82d1a7c263cd3df7b060dee2f7f8b1fd
|-
| sound/misc/h2ohit1.wav  ||style=text-align:right|  12972 || 49ecb03f4f10862453656a67598f8b8a
|-
| sound/misc/medkey.wav  ||style=text-align:right|  10020 || 0e3ae5626a47d81e4166539e355e31bb
|-
| sound/misc/menu1.wav  ||style=text-align:right|  5738 || 12c36546601c385bc47c9ca9420b7eee
|-
| sound/misc/menu2.wav  ||style=text-align:right|  10672 || 39b01ea6feb3ec8dbd6d8ee3e5e966c4
|-
| sound/misc/menu3.wav  ||style=text-align:right|  3010 || 4a03dc2fd56831b855dab761eac4f7de
|-
| sound/misc/null.wav  ||style=text-align:right|  1244 || 811989e09124f54cb27fe6154b0f1018
|-
| sound/misc/outwater.wav  ||style=text-align:right|  5018 || 35732412412ddb5ed418633bb0123bbe
|-
| sound/misc/power.wav  ||style=text-align:right|  19832 || 9f2c3a18d9fc8d9cecfac6db3aad6bc6
|-
| sound/misc/r_tele1.wav  ||style=text-align:right|  8036 || c2194171b4c446e136ed7514fbb098a5
|-
| sound/misc/r_tele2.wav  ||style=text-align:right|  17324 || 0ce662ac90fb3658d69320d1be4025c1
|-
| sound/misc/r_tele3.wav  ||style=text-align:right|  18016 || 122ef44813edcfe7391578fd29e729d2
|-
| sound/misc/r_tele4.wav  ||style=text-align:right|  9068 || 0097b5747ccc70d5b12fc6838aff02c2
|-
| sound/misc/r_tele5.wav  ||style=text-align:right|  22042 || a82334cbb66d12f28cce9e71c90ea50b
|-
| sound/misc/runekey.wav  ||style=text-align:right|  14578 || 6b21a2e5878011da50fdee0a301d3e34
|-
| sound/misc/secret.wav  ||style=text-align:right|  6610 || a02ceefcc24b1ebf5c164a1e1acfb05f
|-
| sound/misc/talk.wav  ||style=text-align:right|  1810 || d5b25d4df59d92ac5016e88689ea60c1
|-
| sound/misc/trigger1.wav  ||style=text-align:right|  20230 || dc927c8a1d0a9bd59fbc5dd91ae1d812
|-
| sound/misc/water1.wav  ||style=text-align:right|  3926 || d8291c762acb1edf24927fdcc0f6a6cd
|-
| sound/misc/water2.wav  ||style=text-align:right|  3340 || 049e8e7e7b30d4d8038afb7248bdd977
|-
| sound/ogre/ogdrag.wav  ||style=text-align:right|  12396 || 658587dc89aaefae5ca3f058f7ff4227
|-
| sound/ogre/ogdth.wav  ||style=text-align:right|  13892 || de98e7bb9e70586edddd3308cfded3db
|-
| sound/ogre/ogidle2.wav  ||style=text-align:right|  11254 || 196ae9c33a4311160e1d5f3da878ab09
|-
| sound/ogre/ogidle.wav  ||style=text-align:right|  12894 || 177c829840a87c885bbc8951e7ce962e
|-
| sound/ogre/ogpain1.wav  ||style=text-align:right|  7898 || ac6d133d7720c12df49813fe10e683b5
|-
| sound/ogre/ogsawatk.wav  ||style=text-align:right|  16154 || 7257bdfd014bb61d778b8f88cb65d560
|-
| sound/ogre/ogwake.wav  ||style=text-align:right|  19356 || 3296459e495c4c12b31179d4eeffac19
|-
| sound/plats/medplat1.wav  ||style=text-align:right|  16378 || b73215aa6627c8b5b90fce8d260d48d0
|-
| sound/plats/medplat2.wav  ||style=text-align:right|  7338 || 1fc6c3772917a1a8155d04fa52e17005
|-
| sound/plats/plat1.wav  ||style=text-align:right|  20248 || 5d43ed85d896ba926f459e06ba6635d5
|-
| sound/plats/plat2.wav  ||style=text-align:right|  7338 || 49d7ab0fd726cd652eb6e5756fce61b9
|-
| sound/plats/train1.wav  ||style=text-align:right|  21430 || b589ae8262046361d9dca39d6b8f693a
|-
| sound/plats/train2.wav  ||style=text-align:right|  5870 || 640017e1b870d643e3bca29d499c72ee
|-
| sound/player/axhit1.wav  ||style=text-align:right|  6906 || 149b2371334da318386325182924eaca
|-
| sound/player/axhit2.wav  ||style=text-align:right|  2434 || fc01909318455f5310efa2457a370897
|-
| sound/player/death1.wav  ||style=text-align:right|  10170 || ba005f5488d4ee78dabf613a03f33a5f
|-
| sound/player/death2.wav  ||style=text-align:right|  8026 || 20477d2e7c84aac1bef95d32c9c702dd
|-
| sound/player/death3.wav  ||style=text-align:right|  10918 || 7b206ba8e1fa28d8605b50e3f3200f11
|-
| sound/player/death4.wav  ||style=text-align:right|  14126 || 1b0f27f4d41b748d3cc5c3d56bd917f8
|-
| sound/player/death5.wav  ||style=text-align:right|  14946 || 7efe84195cfa97515aad2d7f96f25346
|-
| sound/player/drown1.wav  ||style=text-align:right|  8908 || 732f0416af6990e028110380bcb36f0d
|-
| sound/player/drown2.wav  ||style=text-align:right|  3114 || 29ee1f287879acce29b15d4722668bc2
|-
| sound/player/gasp1.wav  ||style=text-align:right|  8702 || b06cbc370c8c2c163dc4d487e8b673c7
|-
| sound/player/gasp2.wav  ||style=text-align:right|  13134 || 30aece9d8779764620c7f866bfb06edb
|-
| sound/player/gib.wav  ||style=text-align:right|  14424 || 26fa9942078125388f34b71546615068
|-
| sound/player/h2odeath.wav  ||style=text-align:right|  18104 || 73b0f4dfae07f6e49112cadfe202735c
|-
| sound/player/h2ojump.wav  ||style=text-align:right|  11438 || cd421b96410971bb1a4f21d3936a3805
|-
| sound/player/inh2o.wav  ||style=text-align:right|  11340 || d4c1a27c4d07e8dfdf18a4b1a880c610
|-
| sound/player/inlava.wav  ||style=text-align:right|  10958 || c37875a082900716b7af88d2d990f55c
|-
| sound/player/land2.wav  ||style=text-align:right|  6204 || 6ba534256a779d66d9d9dabb90e63c8b
|-
| sound/player/land.wav  ||style=text-align:right|  2434 || e34328a40358d98f0f95403b9e27ec1e
|-
| sound/player/lburn1.wav  ||style=text-align:right|  6682 || 3c447c72385defe97c060771077d8ba0
|-
| sound/player/lburn2.wav  ||style=text-align:right|  6076 || 6849ee8dbd91ec82ece016fbd39b0a5c
|-
| sound/player/pain1.wav  ||style=text-align:right|  3394 || d7ac9df7540b791f952ca2a681c0265b
|-
| sound/player/pain2.wav  ||style=text-align:right|  2710 || 513e054b64d4fb61f31384d59e123020
|-
| sound/player/pain3.wav  ||style=text-align:right|  4854 || aafc61ad4e16cc5cdd2db2100796b494
|-
| sound/player/pain4.wav  ||style=text-align:right|  4840 || f655ef2045bc55473303b27546aa6fc0
|-
| sound/player/pain5.wav  ||style=text-align:right|  8020 || f8551a73cb89396042687baa8c68b5c2
|-
| sound/player/pain6.wav  ||style=text-align:right|  5462 || 70062eabf96288d307280fb601ce0ee2
|-
| sound/player/plyrjmp8.wav  ||style=text-align:right|  3888 || d4a552d8f627c7f3b933568c4a74c913
|-
| sound/player/slimbrn2.wav  ||style=text-align:right|  12468 || b17c18a9f81a952f2d41f65b5180f210
|-
| sound/player/teledth1.wav  ||style=text-align:right|  14414 || c226c7f041187ba058d8112cc0190b56
|-
| sound/player/tornoff2.wav  ||style=text-align:right|  7726 || 03ec1c805b307b8fe4c4052f8332a5e5
|-
| sound/player/udeath.wav  ||style=text-align:right|  16082 || afe674f287efb6197da2cea0c0b1d2f8
|-
| sound/shambler/melee1.wav  ||style=text-align:right|  4718 || 77fe6240973a204b757a427ebf66bcfd
|-
| sound/shambler/melee2.wav  ||style=text-align:right|  5966 || 3be31638d769e3d690c92311dfafdeac
|-
| sound/shambler/sattck1.wav  ||style=text-align:right|  8036 || ec8c3f79ea42d09154cb8975ada1b21c
|-
| sound/shambler/sboom.wav  ||style=text-align:right|  11672 || 9834601a645d7d1f62001b2a314ec18f
|-
| sound/shambler/sdeath.wav  ||style=text-align:right|  21106 || e0e62d229a985a6e39218c6488599059
|-
| sound/shambler/shurt2.wav  ||style=text-align:right|  4302 || 1e87631ede95e061a75f9c31629ac0b8
|-
| sound/shambler/sidle.wav  ||style=text-align:right|  5646 || 368a240e6c3e877793352a79c1828386
|-
| sound/shambler/smack.wav  ||style=text-align:right|  5300 || bd8c634c9894348360fec7b7419d1649
|-
| sound/shambler/ssight.wav  ||style=text-align:right|  15420 || 657107577460d5acf3157dec97e07a89
|-
| sound/soldier/death1.wav  ||style=text-align:right|  8434 || fe25952af40b536c3bb67bfca58062eb
|-
| sound/soldier/idle.wav  ||style=text-align:right|  9802 || 4cdfbdda8fb5f40b125c7bcddb6e8914
|-
| sound/soldier/pain1.wav  ||style=text-align:right|  5000 || 54d3b05fdcecf7480034858f2b22b06c
|-
| sound/soldier/pain2.wav  ||style=text-align:right|  7838 || e2bbc9d3405b9b9fdae76d2fc298fc2f
|-
| sound/soldier/sattck1.wav  ||style=text-align:right|  14302 || b76ac35f900f280a7a7996da7e404362
|-
| sound/soldier/sight1.wav  ||style=text-align:right|  12716 || e2a39533250ddd1b08053d5c4ebf7fd0
|-
| sound/weapons/ax1.wav  ||style=text-align:right|  3308 || 237d4d819d02ad37849a8a895cc410e1
|-
| sound/weapons/bounce.wav  ||style=text-align:right|  5864 || fced668c6558a9505abf5014d60528a6
|-
| sound/weapons/grenade.wav  ||style=text-align:right|  8364 || d2b6fa131933f203eba2a282276e88df
|-
| sound/weapons/guncock.wav  ||style=text-align:right|  14430 || 6a63452167cc106e756518536446844f
|-
| sound/weapons/lhit.wav  ||style=text-align:right|  26028 || fefd021d0bd35a1f8da8870f1c06abb9
|-
| sound/weapons/lock4.wav  ||style=text-align:right|  3876 || 3fd93222258d5b1500b150f021c94519
|-
| sound/weapons/lstart.wav  ||style=text-align:right|  56378 || abe1abf6dcadcda5930b0684c7ea820a
|-
| sound/weapons/pkup.wav  ||style=text-align:right|  5174 || 0aa6f0a7d609e1a56fd535a06d1bb56e
|-
| sound/weapons/r_exp3.wav  ||style=text-align:right|  17478 || 57db026474fc76ba7f38cea24eaaf8cf
|-
| sound/weapons/ric1.wav  ||style=text-align:right|  4308 || a31166b4bbb4509ac3004a01f7477ee9
|-
| sound/weapons/ric2.wav  ||style=text-align:right|  10838 || a180b447c0527e603cea54a9aefd6139
|-
| sound/weapons/ric3.wav  ||style=text-align:right|  12638 || 8a773bbb585540ddce256151162f3a2c
|-
| sound/weapons/rocket1i.wav  ||style=text-align:right|  9660 || fb4fdf345d805cf6980c4c695974effc
|-
| sound/weapons/sgun1.wav  ||style=text-align:right|  22992 || 95a14815e48deb323d0cf8251d728ac7
|-
| sound/weapons/shotgn2.wav  ||style=text-align:right|  8694 || cb561cefbf472232334b419af050e5a0
|-
| sound/weapons/spike2.wav  ||style=text-align:right|  12642 || 9189d811855f108da4a1e2d34dc7c633
|-
| sound/weapons/tink1.wav  ||style=text-align:right|  1252 || 297ba8706625fcf05887edb393e9a441
|-
| sound/wizard/hit.wav  ||style=text-align:right|  7332 || 6598d669334df977f1f97b95288edf11
|-
| sound/wizard/wattack.wav  ||style=text-align:right|  25912 || b3568a47439f81779d40335e76f5bc2d
|-
| sound/wizard/wdeath.wav  ||style=text-align:right|  20684 || 99d9c71343bc23222abb92119d404400
|-
| sound/wizard/widle1.wav  ||style=text-align:right|  13464 || b22b1dd9f66879b3447d36ab584316c7
|-
| sound/wizard/widle2.wav  ||style=text-align:right|  23094 || 7178fd83df227360564adef01bed92c6
|-
| sound/wizard/wpain.wav  ||style=text-align:right|  8686 || bd7e59ab7d7b835f9ed8ab51950914de
|-
| sound/wizard/wsight.wav  ||style=text-align:right|  13078 || df5949057c750528917c6cb32b7fd9fd
|-
| sound/zombie/idle_w2.wav  ||style=text-align:right|  17192 || d2bb59b9d7ac71097c07123a23525641
|-
| sound/zombie/z_fall.wav  ||style=text-align:right|  3062 || 6968318b2d196c6d54bc707d8a390547
|-
| sound/zombie/z_gib.wav  ||style=text-align:right|  16226 || 199dda66ade8d6f0ef4897e4d7608c0d
|-
| sound/zombie/z_hit.wav  ||style=text-align:right|  6166 || 6c66ab3e6b149bf35956a4bbc0057acb
|-
| sound/zombie/z_idle1.wav  ||style=text-align:right|  13244 || 21088a7b38b1124d7ec72e58d5ab93a6
|-
| sound/zombie/z_idle.wav  ||style=text-align:right|  16734 || e5e570e38c4405111004190a79f0e925
|-
| sound/zombie/z_miss.wav  ||style=text-align:right|  10734 || 96fad96a8c3bc6f7bcc5da6c82678da2
|-
| sound/zombie/z_pain1.wav  ||style=text-align:right|  15374 || fcd83b89a94b0cadbe1361a4df080ec0
|-
| sound/zombie/z_pain.wav  ||style=text-align:right|  12218 || 56637968b8309bd2f825153330bbdfc0
|-
| sound/zombie/z_shot1.wav  ||style=text-align:right|  3068 || 561afb69b7851923a8fb3b54e3e13c96
|-
|}&lt;/tt&gt;

{{todo|todo=Multiple to do items listed above, detail out the contents of various pak files}}
{{todo|todo=different releases have different pak0.pak files}}</text>
      <sha1>l6pvf6tyvhsv07jzhm7a1rk27y0suod</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3263</id>
      <parentid>3261</parentid>
      <timestamp>2014-09-24T16:43:38Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>/* Versions */</comment>
      <text xml:space="preserve" bytes="66430">The '''''pak0.pak''''' file that comes with Quake is required by all Quake [[engines]]. It contains the maps, models, programs, sounds, and skins required to play Quake Episode 1, ''Dimension of the Doomed''. It is expected to be in the ID1 subfolder of the Quake root folder.

[[PAK file]]s are typically named ''pak0.pak'', ''pak1.pak'', ''pak2.pak'', and so on. Quake mission packs and other Quake-based games often have their own ''pak0.pak'' files, which live in a different folder, not the ID1 folder.

The ID1 ''pak0.pak'' is distributed with both the shareware and the registered/commercial editions of Quake.

In some editions, including the downloadable shareware (''quake106.zip'') from id Software, ''pak0.pak'' is embedded in another archive, ''[[resource.1]]''. The files in this archive are LZH-encoded using the lh5 algorithm. If you can't or don't want to run the DOS/Win32 Quake installer program it comes with, then you'll need a compatible extractor program to get ''pak0.pak'' out of the ''resource.1'' archive.


== Versions ==
&lt;tt&gt;
{| class=&quot;wikitable&quot;
! Version !! Timestamp !! Size !! md5
|-
| Shareware or Registered Version 1.01 || Unknown ||style=text-align:right|  18276119 || fc989b37572fae074e8ffda0ce4d5297
|-
| Unknown || 1996-10-01 14:25:58 ||style=text-align:right|  18689235 || 5906e5998fc3d896ddaf5e6a62e03abb
|-
|}&lt;/tt&gt;

=== fc989b37572fae074e8ffda0ce4d5297 ===
The [[id1]] ''pak0.pak'' with the md5sum fc989b37572fae074e8ffda0ce4d5297 contains the following folders &amp; files:
&lt;tt&gt;
{| class=&quot;wikitable collapsible collapsed&quot;
|-
! Path !! Size !! md5
|-
| default.cfg  ||style=text-align:right|  1914 || fc989b37572fae074e8ffda0ce4d5297
|-
| demo1.dem  ||style=text-align:right|  184471 || 85ec0141ab24d9732e487d1aafa791f0
|-
| demo2.dem  ||style=text-align:right|  152705 || fa5c3daf7a57954cd95f94b698a7e420
|-
| demo3.dem  ||style=text-align:right|  197679 || 691f37e5715ea2863c1d8092a6429824
|-
| end1.bin  ||style=text-align:right|  4000 || 92ae51961ec2f429dfe9bea1138fbd5d
|-
| gfx/bigbox.lmp  ||style=text-align:right|  5192 || e597771ac6149b2b071ebfd24981ea04
|-
| gfx/box_bl.lmp  ||style=text-align:right|  72 || 5b094c37c2c1c2eebe37f84117dea182
|-
| gfx/box_bm.lmp  ||style=text-align:right|  136 || 44621236738e2bf8d669e53dca887278
|-
| gfx/box_br.lmp  ||style=text-align:right|  72 || 86597d5325b472caf5644644033e5cab
|-
| gfx/box_ml.lmp  ||style=text-align:right|  72 || adcea286ba0ac01084fd0c131b16ffdd
|-
| gfx/box_mm2.lmp  ||style=text-align:right|  136 || b850bcec189d909e7a0f796111a11249
|-
| gfx/box_mm.lmp  ||style=text-align:right|  136 || 700b4884b1a3c6aa7356a43014261866
|-
| gfx/box_mr.lmp  ||style=text-align:right|  72 || e30d9ea783ef7dd50101682f03ba40d7
|-
| gfx/box_tl.lmp  ||style=text-align:right|  72 || 3903d3d814e37c55790ac0ccfef2b925
|-
| gfx/box_tm.lmp  ||style=text-align:right|  136 || 7cb85ccbf8e7d2532da2a839a7cef348
|-
| gfx/box_tr.lmp  ||style=text-align:right|  72 || 5c5e72746af821a4cf8437d8fecc53c7
|-
| gfx/colormap.lmp  ||style=text-align:right|  16385 || 0d793b70bffafbd666fc5c88d6e15e9d
|-
| gfx/complete.lmp  ||style=text-align:right|  4616 || db6a00dfbe2c62a43c261e5622297c4a
|-
| gfx/conback.lmp  ||style=text-align:right|  64008 || 9eb6f9c47870bf42985d9382958a5c12
|-
| gfx/dim_drct.lmp  ||style=text-align:right|  3352 || 50ea11fe8c4d9db92863bdcd03b89df5
|-
| gfx/dim_ipx.lmp  ||style=text-align:right|  3352 || 0bef9943487f0611225bf0a5c0fe5dd4
|-
| gfx/dim_modm.lmp  ||style=text-align:right|  3352 || 3288f03144f06b95cadafa9458a77b1d
|-
| gfx/dim_mult.lmp  ||style=text-align:right|  3352 || 348b7369227f2d7e9d0daccbf6c9344d
|-
| gfx/dim_tcp.lmp  ||style=text-align:right|  3352 || 7dc8bbb01d7c90cd51c28da0ff6ed900
|-
| gfx/finale.lmp  ||style=text-align:right|  6920 || b6e49409d344e0344273d86ea33fe35f
|-
| gfx/help0.lmp  ||style=text-align:right|  64008 || b392ac30ad49252b51ec934ed855c20f
|-
| gfx/help1.lmp  ||style=text-align:right|  64008 || 857543c69245117a606044ea63adac9a
|-
| gfx/help2.lmp  ||style=text-align:right|  64008 || 882dd5920ea9c19f637f32084de9788a
|-
| gfx/help3.lmp  ||style=text-align:right|  64008 || a89d169524920d896128009467deebfc
|-
| gfx/help4.lmp  ||style=text-align:right|  64008 || c72d67c84ae6b403fae5f08d3e5c3bc6
|-
| gfx/help5.lmp  ||style=text-align:right|  64008 || 12203d7cdec35c4f51622dd90ec92093
|-
| gfx/inter.lmp  ||style=text-align:right|  23048 || f6eabe0d742380c7b47a9ee44170993d
|-
| gfx/loading.lmp  ||style=text-align:right|  3464 || 3249bc994266529a1748c06bfbb24bfa
|-
| gfx/mainmenu.lmp  ||style=text-align:right|  26888 || 8122e2a0b8888f9d1ebef149551b6434
|-
| gfx/menudot1.lmp  ||style=text-align:right|  392 || bfdb08d84d580abcfbacc1c9abd62bfb
|-
| gfx/menudot2.lmp  ||style=text-align:right|  392 || 6c6d2176e00edbe530bb1db118aaa6dc
|-
| gfx/menudot3.lmp  ||style=text-align:right|  392 || 2527a05f6162efb3e4bc5311d9e010d5
|-
| gfx/menudot4.lmp  ||style=text-align:right|  392 || 90ea6be033b39b139b3779932d266f33
|-
| gfx/menudot5.lmp  ||style=text-align:right|  392 || c9beb9600c35e458d0f83b6cf1e1c692
|-
| gfx/menudot6.lmp  ||style=text-align:right|  392 || 31b9a6ec1d12a2bd56b955185a9e72d3
|-
| gfx/menuplyr.lmp  ||style=text-align:right|  2696 || 9eebe617ff51c4ce43f85ca1a6920d5b
|-
| gfx/mp_menu.lmp  ||style=text-align:right|  14856 || c6416b8f7f5262a5a19b9ce4be1fd9ce
|-
| gfx/netmen1.lmp  ||style=text-align:right|  3352 || 5bc6a8d8cfdfd7e940e933812954367a
|-
| gfx/netmen2.lmp  ||style=text-align:right|  3352 || c8aafb649a653e90fc5eb7b7a2b3ca2e
|-
| gfx/netmen3.lmp  ||style=text-align:right|  3352 || 11c9372d0e64057a1ec8251f596b820d
|-
| gfx/netmen4.lmp  ||style=text-align:right|  3352 || 74ec672b1312699be2eeaf25a68e4582
|-
| gfx/netmen5.lmp  ||style=text-align:right|  3352 || 231f8a9ea4ba364f517db0e9f7f1ba72
|-
| gfx/palette.lmp  ||style=text-align:right|  768 || 79bc149d4f2fb0bd68cd8400a3fd87d4
|-
| gfx/pause.lmp  ||style=text-align:right|  3080 || 5aa67f927719e4a9eb3e020e75fea969
|-
| gfx/p_load.lmp  ||style=text-align:right|  2504 || 27fe08071058385529b0b8ad746421e7
|-
| gfx/p_multi.lmp  ||style=text-align:right|  5192 || 5a307c7d11da20a4772ad9c00b9f4309
|-
| gfx/p_option.lmp  ||style=text-align:right|  3464 || 83a3bf4459bce3fe85857a0aa647b90a
|-
| gfx/p_save.lmp  ||style=text-align:right|  2120 || 0d2bb5fa5524e0180a85bf273094cd1f
|-
| gfx/qplaque.lmp  ||style=text-align:right|  4616 || f4de79557c75e26b85ea84fb6029a5f3
|-
| gfx/ranking.lmp  ||style=text-align:right|  4040 || 919b13d1f7fdd0082ec0f94699f3b681
|-
| gfx/sell.lmp  ||style=text-align:right|  64008 || 878db3866e8b38c5b8d951aef516358c
|-
| gfx/sp_menu.lmp  ||style=text-align:right|  14856 || f624aa79778970ecb8ef518b5ab435f6
|-
| gfx/ttl_cstm.lmp  ||style=text-align:right|  4424 || 4ee84e0e7fa93f0e93d26efb1e726a4d
|-
| gfx/ttl_main.lmp  ||style=text-align:right|  2312 || 07e1c8e189e2463befcfc44f5ecf8dcb
|-
| gfx/ttl_sgl.lmp  ||style=text-align:right|  3080 || 25d5360228da738f091063eaeb7c6aa8
|-
| gfx/vidmodes.lmp  ||style=text-align:right|  5192 || 18a97f403057777f262188903f485fe8
|-
| gfx.wad  ||style=text-align:right|  112828 || cde5b5890c8902c02a2f271abe8f4a1f
|-
| Index.txt  ||style=text-align:right|  15176 || 1d48fe1d8518d8ea87c0c4c8333494eb
|-
| maps/b_batt0.bsp  ||style=text-align:right|  5044 || 00bc989f4c8d2570a2826a63c7356a27
|-
| maps/b_batt1.bsp  ||style=text-align:right|  4620 || 555bc0cb0b5c2ad2ed0110f307e70679
|-
| maps/b_bh100.bsp  ||style=text-align:right|  8820 || 62f78bb5143265f037b79ddd077c50ed
|-
| maps/b_bh10.bsp  ||style=text-align:right|  3936 || e80cde9f185612f669fc100f825ca84f
|-
| maps/b_bh25.bsp  ||style=text-align:right|  8872 || 032d70dbf8669b3627b82b41f31488bd
|-
| maps/b_explob.bsp  ||style=text-align:right|  10220 || d8c9db3cfa0264678afc580143f665ea
|-
| maps/b_nail0.bsp  ||style=text-align:right|  5044 || c8d7ec0bdee74e0c1e69e8dbe939117d
|-
| maps/b_nail1.bsp  ||style=text-align:right|  5044 || ea08b2bd6aa19ece0307f75c491e5d24
|-
| maps/b_rock0.bsp  ||style=text-align:right|  2956 || 19ce64cd248a4459bf37b45e6e7c1219
|-
| maps/b_rock1.bsp  ||style=text-align:right|  2944 || b4cdb75094cd7218ed2b0475aefabe80
|-
| maps/b_shell0.bsp  ||style=text-align:right|  5044 || 574824b3c52661959d633a76dc823859
|-
| maps/b_shell1.bsp  ||style=text-align:right|  5044 || dc8b8dcb490e204e615b2b9cdc673296
|-
| maps/e1m1.bsp  ||style=text-align:right|  1365176 || 84cae48010619bcc945426b91bc03ade
|-
| maps/e1m2.bsp  ||style=text-align:right|  1332228 || caff91afbe41f3eac4dda65cee0083c9
|-
| maps/e1m3.bsp  ||style=text-align:right|  1249944 || f20eaa5692e94ab889c4ade9e1c116c7
|-
| maps/e1m4.bsp  ||style=text-align:right|  1411452 || 29419f05ef647f83d0482502bb3f84f8
|-
| maps/e1m5.bsp  ||style=text-align:right|  1324060 || afd98cc890d748986186951b32fc9fcb
|-
| maps/e1m6.bsp  ||style=text-align:right|  1065080 || ec178e54ff68c4d8cf71e26775b2eb2d
|-
| maps/e1m7.bsp  ||style=text-align:right|  607420 || 0c1f55455e0f957291e21d211b689718
|-
| maps/e1m8.bsp  ||style=text-align:right|  924116 || 18c7ab2f922d5d586150afbc27c323a4
|-
| maps/start.bsp  ||style=text-align:right|  1433792 || 61a57bb4ca36368478f02b142d1b5291
|-
| progs/armor.mdl  ||style=text-align:right|  44076 || ca060166d7e4e4686995f05645dde593
|-
| progs/backpack.mdl  ||style=text-align:right|  19348 || 315b4ef42fb035aa3318e8d2d61961ce
|-
| progs/bolt2.mdl  ||style=text-align:right|  11860 || f59ce07cfbe01fcfc578258c573d2c31
|-
| progs/bolt3.mdl  ||style=text-align:right|  11860 || ff87579a424faa59ca2695b7434ea488
|-
| progs/bolt.mdl  ||style=text-align:right|  20644 || a176903954e9d8c7ab629f92784546c2
|-
| progs/boss.mdl  ||style=text-align:right|  211836 || 25da3b2bc30677e32ee3a3a878a4d3af
|-
| progs.dat  ||style=text-align:right|  410616 || cb04964a1952169e03392ee83a9edb91
|-
| progs/demon.mdl  ||style=text-align:right|  102120 || 4c73786e7cfb2083ca38cbc983cd6c4b
|-
| progs/dog.mdl  ||style=text-align:right|  146056 || e727fbc39acc652f812972612ce37565
|-
| progs/end1.mdl  ||style=text-align:right|  20820 || 67c0fcab33d3772c00bb462b0e749275
|-
| progs/eyes.mdl  ||style=text-align:right|  4372 || ed72f64a17c6909b2cb3034a734bca97
|-
| progs/flame2.mdl  ||style=text-align:right|  64572 || f2c8f8950ebd7a0edded6247655d325b
|-
| progs/flame.mdl  ||style=text-align:right|  46364 || 8593c05374d84354d4444c218e86fdb8
|-
| progs/gib1.mdl  ||style=text-align:right|  5716 || f5c5b799e895dc03036522a487e99913
|-
| progs/gib2.mdl  ||style=text-align:right|  16228 || cfa9e97a3542852418123e0bb12e4f86
|-
| progs/gib3.mdl  ||style=text-align:right|  22228 || d73be7b2881e0a5aacf2b332ac29086f
|-
| progs/g_light.mdl  ||style=text-align:right|  50276 || 61bba06ec3804b7f355a62fd4585ad8f
|-
| progs/g_nail2.mdl  ||style=text-align:right|  30720 || ed6d7bb5ff050ad5f2bf4be7739a16a5
|-
| progs/g_nail.mdl  ||style=text-align:right|  34700 || e2959ca741c764dd42025ef531a1b554
|-
| progs/grenade.mdl  ||style=text-align:right|  2244 || f492d6257c216306983a72f41db0d891
|-
| progs/g_rock2.mdl  ||style=text-align:right|  40756 || 68c047c97bab89afe2cb69e65b7c62e1
|-
| progs/g_rock.mdl  ||style=text-align:right|  48244 || 61346f842944795e0821e31e3d61b427
|-
| progs/g_shot.mdl  ||style=text-align:right|  32916 || 7facfec1a3cfb892cce871f398e9cb6b
|-
| progs/h_demon.mdl  ||style=text-align:right|  34884 || 5253a0ea93d9624d73fb984ee339b52f
|-
| progs/h_dog.mdl  ||style=text-align:right|  24436 || a0b5f87522b3a769548c46cf3bb4223e
|-
| progs/h_guard.mdl  ||style=text-align:right|  5428 || 18a629b53b87392030df63b7806eb833
|-
| progs/h_knight.mdl  ||style=text-align:right|  7156 || 46a03fa72b0cdebcf58045aba2fafc13
|-
| progs/h_ogre.mdl  ||style=text-align:right|  14900 || 14eb06611c769e254d0531c05919bdf5
|-
| progs/h_player.mdl  ||style=text-align:right|  14708 || bf1773df7d3e19c5b211a1ee408f6b05
|-
| progs/h_shams.mdl  ||style=text-align:right|  37060 || ff1e04e18c57667991341a011fb6c363
|-
| progs/h_wizard.mdl  ||style=text-align:right|  14804 || 4bc6be40128f313cf9ad06c347310735
|-
| progs/h_zombie.mdl  ||style=text-align:right|  4484 || 0fdef7f7cd05a3209e0a163e87f69f8b
|-
| progs/invisibl.mdl  ||style=text-align:right|  7092 || 1e87d86af02e69db9c9f27f5fddc7a47
|-
| progs/invulner.mdl  ||style=text-align:right|  23920 || 8c8d83e4d50c3282d009b333a1280422
|-
| progs/knight.mdl  ||style=text-align:right|  101404 || 5328915db5c53e85cf75d46e7b747fb9
|-
| progs/lavaball.mdl  ||style=text-align:right|  8788 || 92af53d2145681e37877dbc1d12801b2
|-
| progs/m_g_key.mdl  ||style=text-align:right|  12820 || 192c2650a115c91706f6fa8fe68beb45
|-
| progs/missile.mdl  ||style=text-align:right|  57796 || 47f19f9e34954b93443c9759dd2e7ba0
|-
| progs/m_s_key.mdl  ||style=text-align:right|  12820 || 20837376b391cdd5c92e57b84e05687f
|-
| progs/ogre.mdl  ||style=text-align:right|  162036 || fbb592ca3788a576dd2f31fcf8c80fab
|-
| progs/player.mdl  ||style=text-align:right|  191852 || 405cef9a10d96cdabffb5e91312f8e5c
|-
| progs/quaddama.mdl  ||style=text-align:right|  39992 || 00b177ff272a4779097ea08344da8aff
|-
| progs/s_bubble.spr  ||style=text-align:right|  588 || 7c0887630ed468205292d8cb7abcae93
|-
| progs/s_explod.spr  ||style=text-align:right|  18972 || 766c6a92c26b54f68f7ff87c90d71cf2
|-
| progs/shambler.mdl  ||style=text-align:right|  98556 || 9b09375a0f614dc4081e363cc34f1185
|-
| progs/s_light.mdl  ||style=text-align:right|  27596 || ee6649ea5673989f3aa06213a8d65f76
|-
| progs/s_light.spr  ||style=text-align:right|  1080 || aff44ba238f4e1d0d504d6f9700aadb4
|-
| progs/soldier.mdl  ||style=text-align:right|  146288 || 5b6c30a984872b4273dd5861412d35c5
|-
| progs/spike.mdl  ||style=text-align:right|  1684 || be4cb73125f939284376080acc9887dd
|-
| progs/s_spike.mdl  ||style=text-align:right|  1684 || ebb1d58242b64a703623c8a33fcbd9e6
|-
| progs/suit.mdl  ||style=text-align:right|  51236 || 882a61f5eea7f9cdbc04800b963cef85
|-
| progs/v_axe.mdl  ||style=text-align:right|  57908 || 577dadcca2700068995c808dc7dec76f
|-
| progs/v_light.mdl  ||style=text-align:right|  56204 || 68733d4c690de88b5c3ba33e52be1c15
|-
| progs/v_nail2.mdl  ||style=text-align:right|  68732 || aacd1002ab02662cc1d3ff46885b553e
|-
| progs/v_nail.mdl  ||style=text-align:right|  54472 || ec9ba028b346da2f9674c2a521ff0c2f
|-
| progs/v_rock2.mdl  ||style=text-align:right|  58188 || 96edf1a3c7629987c200361523f780d7
|-
| progs/v_rock.mdl  ||style=text-align:right|  58548 || 7bea46b2a75fd7cff2fb99420e4c4e25
|-
| progs/v_shot2.mdl  ||style=text-align:right|  50816 || 922b3b687766ae0d7aeb73d44dec7035
|-
| progs/v_shot.mdl  ||style=text-align:right|  43852 || 1fd140b6856843e83cd9bf3966f5d7dd
|-
| progs/w_g_key.mdl  ||style=text-align:right|  7252 || c5c5f0d14b022f57294ad9aded318250
|-
| progs/wizard.mdl  ||style=text-align:right|  64472 || bf60986594f045e60e8aa6339d553ee7
|-
| progs/w_s_key.mdl  ||style=text-align:right|  7252 || ec02314a7d12439d36b4eb2dd0a641a8
|-
| progs/w_spike.mdl  ||style=text-align:right|  14336 || 8cf9245df2164e8062b01a220b508d6b
|-
| progs/zombie.mdl  ||style=text-align:right|  186084 || a923b1d03b9d237dd5ead9bd56acc900
|-
| progs/zom_gib.mdl  ||style=text-align:right|  10196 || cf42c938caa5b19f719d1f110b1dc6d4
|-
| quake.rc  ||style=text-align:right|  293 || 411d42958aaeae141813f9ebfcf5233f
|-
| sound/ambience/buzz1.wav  ||style=text-align:right|  36308 || 346a00c795c6f1f1338ade6fc350b3fe
|-
| sound/ambience/comp1.wav  ||style=text-align:right|  62734 || f91a1120de804f7cd4dbba4f12c748e9
|-
| sound/ambience/drip1.wav  ||style=text-align:right|  137736 || 2306a76162eeda3d0812c516bc99aa7a
|-
| sound/ambience/drone6.wav  ||style=text-align:right|  18522 || 322853ddb42ad2a205579b5cca8e2e8c
|-
| sound/ambience/fire1.wav  ||style=text-align:right|  24064 || 610d3985ed8133988e8de3bec2b9cbbe
|-
| sound/ambience/fl_hum1.wav  ||style=text-align:right|  50154 || e4628499702e004c4bacd282a3ecb8c0
|-
| sound/ambience/hum1.wav  ||style=text-align:right|  40166 || 486bfa737c35b0c9dda57cbee2a540af
|-
| sound/ambience/suck1.wav  ||style=text-align:right|  110392 || 2e99e4d1fe1501d5191c8157d3063cb6
|-
| sound/ambience/swamp1.wav  ||style=text-align:right|  68524 || 29ffb678d78997eb6c227677c86ea4f8
|-
| sound/ambience/swamp2.wav  ||style=text-align:right|  68526 || 356aa1e875da846e72d8f17bbb699a5b
|-
| sound/ambience/thunder1.wav  ||style=text-align:right|  41492 || cefd6ced4b5bc79fcece1003238566f6
|-
| sound/ambience/water1.wav  ||style=text-align:right|  55784 || 6eeaae0a3450652d2be0782895297ee4
|-
| sound/ambience/wind2.wav  ||style=text-align:right|  28610 || 030cf8dd2b00a12454b5b35a89d03914
|-
| sound/ambience/windfly.wav  ||style=text-align:right|  22140 || c7be01e6d324e66883f70aa0072a99b0
|-
| sound/boss1/death.wav  ||style=text-align:right|  27600 || 43469b1acd35b67107da5da82e1df911
|-
| sound/boss1/out1.wav  ||style=text-align:right|  50344 || 847a6f971f6905dfaffd70b30d18a4b1
|-
| sound/boss1/pain.wav  ||style=text-align:right|  17700 || 49112740c0ff421f9272b9e8efc748cd
|-
| sound/boss1/sight1.wav  ||style=text-align:right|  24768 || 427dd600e6b28c9402212adcc5d652c7
|-
| sound/boss1/throw.wav  ||style=text-align:right|  11526 || 9b6e9ff2c8df448f7fd4b5315e60ddda
|-
| sound/buttons/airbut1.wav  ||style=text-align:right|  10672 || 9d2e14e7176842a0dce909a43d38873d
|-
| sound/buttons/switch02.wav  ||style=text-align:right|  3746 || d2e9cba3a353edc65115f6f5c574403c
|-
| sound/buttons/switch04.wav  ||style=text-align:right|  3666 || ff47857a58d3faefb2b94a37d7ba4f26
|-
| sound/buttons/switch21.wav  ||style=text-align:right|  6318 || 3605b0d061a9baf185c6ab7614534531
|-
| sound/demon/ddeath.wav  ||style=text-align:right|  9140 || 62a48dcd405ca55c9ce18497e36faa0e
|-
| sound/demon/dhit2.wav  ||style=text-align:right|  7142 || 9e741696e4d0d66e30e718fc70ec186e
|-
| sound/demon/djump.wav  ||style=text-align:right|  8494 || 791ac9d6b6593808316145443cb7e7a0
|-
| sound/demon/dland2.wav  ||style=text-align:right|  4400 || db14c7b01838f826b7a712075f9026fd
|-
| sound/demon/dpain1.wav  ||style=text-align:right|  6282 || 5e6c485878393c9bebb0d0e6659bc479
|-
| sound/demon/idle1.wav  ||style=text-align:right|  9098 || 7a83f8caf3d5b1172a7dc5afdc942988
|-
| sound/demon/sight2.wav  ||style=text-align:right|  8804 || 65171c355c22a5069520b0881677ae3c
|-
| sound/dog/dattack1.wav  ||style=text-align:right|  8154 || 0c47c9d4aaae0bf3159a288b674f4a35
|-
| sound/dog/ddeath.wav  ||style=text-align:right|  14912 || b0e7760b1d7286a028ff9773f6802958
|-
| sound/dog/dpain1.wav  ||style=text-align:right|  7240 || 28e5ab93b41e13e2916433283a5d1a46
|-
| sound/dog/dsight.wav  ||style=text-align:right|  6722 || 0edc290765bac1fb4fe03ca55bc7c225
|-
| sound/dog/idle.wav  ||style=text-align:right|  6870 || 42bd6026ff32bd94523ad9f8fe8362cc
|-
| sound/doors/airdoor1.wav  ||style=text-align:right|  13654 || 9b91930e8c2fdece31a2362296891122
|-
| sound/doors/airdoor2.wav  ||style=text-align:right|  8594 || 29fd823d1c14ca42a9a89c716b26f4cd
|-
| sound/doors/basesec1.wav  ||style=text-align:right|  13930 || eb2363fed42724f55e8f55f96c335bcf
|-
| sound/doors/basesec2.wav  ||style=text-align:right|  10238 || 8d163a56607c9cf64a270a156c1c5cef
|-
| sound/doors/basetry.wav  ||style=text-align:right|  10518 || a5108d5c51281ab55c0baf884cbe8cbe
|-
| sound/doors/baseuse.wav  ||style=text-align:right|  16486 || f43fee91efe813a5eb34e9d72918fdb9
|-
| sound/doors/ddoor1.wav  ||style=text-align:right|  7738 || dff86a26139cdd49a193d5ed7ebf6ae1
|-
| sound/doors/ddoor2.wav  ||style=text-align:right|  5904 || 4a9d0b0825d0302ce465569d1e35fbcf
|-
| sound/doors/doormv1.wav  ||style=text-align:right|  14036 || 3fd379aec80a2ad8105c0c89ba5b40e6
|-
| sound/doors/drclos4.wav  ||style=text-align:right|  12814 || 83df1865a0c9fa5d02c2f137564c57de
|-
| sound/doors/hydro1.wav  ||style=text-align:right|  11094 || b1703980a20e624bc3366ccf55ca617e
|-
| sound/doors/hydro2.wav  ||style=text-align:right|  10700 || b1866f5b3950788ccf4206444ab64bc7
|-
| sound/doors/latch2.wav  ||style=text-align:right|  7338 || ad2378ca21a0ca529df328261e07aed5
|-
| sound/doors/medtry.wav  ||style=text-align:right|  7828 || ebb536bec2cdfd22c25b35793c055339
|-
| sound/doors/meduse.wav  ||style=text-align:right|  10718 || 4522aada194b23eb33b541cbcc755cf6
|-
| sound/doors/runetry.wav  ||style=text-align:right|  13524 || c433bae9e2ab508712f87dc2cacc82c8
|-
| sound/doors/runeuse.wav  ||style=text-align:right|  17364 || b4bcfd525a26f5b5ecc9d392430d9079
|-
| sound/doors/stndr1.wav  ||style=text-align:right|  12620 || 5bae2183885e18d65d69624e85249fd9
|-
| sound/doors/stndr2.wav  ||style=text-align:right|  11470 || f43a75c917effff09ef7be8a321c8b49
|-
| sound/doors/winch2.wav  ||style=text-align:right|  14872 || a4edffdfede7dbaed37db526c26e2b6d
|-
| sound/hknight/hit.wav  ||style=text-align:right|  6260 || fece24e2548f1d769e8fce39a5c87d01
|-
| sound/items/armor1.wav  ||style=text-align:right|  7714 || 186d29f2baf35b8c280bc97754606fad
|-
| sound/items/damage2.wav  ||style=text-align:right|  33012 || 14e53b7617ffe315a7c3f8d89652e51c
|-
| sound/items/damage3.wav  ||style=text-align:right|  12894 || baf754aec7ed4baba16760ac85513184
|-
| sound/items/damage.wav  ||style=text-align:right|  23374 || 8cde8b9278ca4922a4ec7ead6e5ee01b
|-
| sound/items/health1.wav  ||style=text-align:right|  7958 || 52a2c4f808db4edd8393de0de618c91f
|-
| sound/items/inv1.wav  ||style=text-align:right|  13728 || 5850cab55d6197d0e76d9f0a22ba10be
|-
| sound/items/inv2.wav  ||style=text-align:right|  33216 || 4edcd38a2c6adc5305636dd7afd5ef60
|-
| sound/items/inv3.wav  ||style=text-align:right|  33320 || 325c268be05b42a019ccb92e6993ab9e
|-
| sound/items/itembk2.wav  ||style=text-align:right|  9910 || 270c688b3cb884f5d4e5ffd8ccc934a1
|-
| sound/items/protect2.wav  ||style=text-align:right|  34012 || 25627a4bd2b4c6054cfd2fc4bf69ddc2
|-
| sound/items/protect3.wav  ||style=text-align:right|  23364 || 7b9374d67f6d59e524bba2af236ca30a
|-
| sound/items/protect.wav  ||style=text-align:right|  22536 || d839d5a84f811ce8a0e28616891bf1a7
|-
| sound/items/r_item1.wav  ||style=text-align:right|  6822 || 3fc0d0ae4a71c9fbfe548f38626c6a08
|-
| sound/items/r_item2.wav  ||style=text-align:right|  7448 || 384ffefe795d99df75f381596a0f1976
|-
| sound/items/suit2.wav  ||style=text-align:right|  33254 || 0a9d2766a5b805cb5794f9bea57e6585
|-
| sound/items/suit.wav  ||style=text-align:right|  15854 || da413f34023d219f1e34fde50a037be0
|-
| sound/knight/idle.wav  ||style=text-align:right|  11064 || 1b5c3981bee078318af346d8fe8090b9
|-
| sound/knight/kdeath.wav  ||style=text-align:right|  10688 || 11a96f48a8f2433c23beae299c8fb96e
|-
| sound/knight/khurt.wav  ||style=text-align:right|  5586 || 32c9f48dd4a6a87752aedf56fe8de668
|-
| sound/knight/ksight.wav  ||style=text-align:right|  13514 || eb75b4af348c88e84d8c87c19d5976fa
|-
| sound/knight/sword1.wav  ||style=text-align:right|  2306 || 93045b5f3178413dc6b01ec2869d1f73
|-
| sound/knight/sword2.wav  ||style=text-align:right|  2784 || 82d1a7c263cd3df7b060dee2f7f8b1fd
|-
| sound/misc/h2ohit1.wav  ||style=text-align:right|  12972 || 49ecb03f4f10862453656a67598f8b8a
|-
| sound/misc/medkey.wav  ||style=text-align:right|  10020 || 0e3ae5626a47d81e4166539e355e31bb
|-
| sound/misc/menu1.wav  ||style=text-align:right|  5738 || 12c36546601c385bc47c9ca9420b7eee
|-
| sound/misc/menu2.wav  ||style=text-align:right|  10672 || 39b01ea6feb3ec8dbd6d8ee3e5e966c4
|-
| sound/misc/menu3.wav  ||style=text-align:right|  3010 || 4a03dc2fd56831b855dab761eac4f7de
|-
| sound/misc/null.wav  ||style=text-align:right|  1244 || 811989e09124f54cb27fe6154b0f1018
|-
| sound/misc/outwater.wav  ||style=text-align:right|  5018 || 35732412412ddb5ed418633bb0123bbe
|-
| sound/misc/power.wav  ||style=text-align:right|  19832 || 9f2c3a18d9fc8d9cecfac6db3aad6bc6
|-
| sound/misc/r_tele1.wav  ||style=text-align:right|  8036 || c2194171b4c446e136ed7514fbb098a5
|-
| sound/misc/r_tele2.wav  ||style=text-align:right|  17324 || 0ce662ac90fb3658d69320d1be4025c1
|-
| sound/misc/r_tele3.wav  ||style=text-align:right|  18016 || 122ef44813edcfe7391578fd29e729d2
|-
| sound/misc/r_tele4.wav  ||style=text-align:right|  9068 || 0097b5747ccc70d5b12fc6838aff02c2
|-
| sound/misc/r_tele5.wav  ||style=text-align:right|  22042 || a82334cbb66d12f28cce9e71c90ea50b
|-
| sound/misc/runekey.wav  ||style=text-align:right|  14578 || 6b21a2e5878011da50fdee0a301d3e34
|-
| sound/misc/secret.wav  ||style=text-align:right|  6610 || a02ceefcc24b1ebf5c164a1e1acfb05f
|-
| sound/misc/talk.wav  ||style=text-align:right|  1810 || d5b25d4df59d92ac5016e88689ea60c1
|-
| sound/misc/trigger1.wav  ||style=text-align:right|  20230 || dc927c8a1d0a9bd59fbc5dd91ae1d812
|-
| sound/misc/water1.wav  ||style=text-align:right|  3926 || d8291c762acb1edf24927fdcc0f6a6cd
|-
| sound/misc/water2.wav  ||style=text-align:right|  3340 || 049e8e7e7b30d4d8038afb7248bdd977
|-
| sound/ogre/ogdrag.wav  ||style=text-align:right|  12396 || 658587dc89aaefae5ca3f058f7ff4227
|-
| sound/ogre/ogdth.wav  ||style=text-align:right|  13892 || de98e7bb9e70586edddd3308cfded3db
|-
| sound/ogre/ogidle2.wav  ||style=text-align:right|  11254 || 196ae9c33a4311160e1d5f3da878ab09
|-
| sound/ogre/ogidle.wav  ||style=text-align:right|  12894 || 177c829840a87c885bbc8951e7ce962e
|-
| sound/ogre/ogpain1.wav  ||style=text-align:right|  7898 || ac6d133d7720c12df49813fe10e683b5
|-
| sound/ogre/ogsawatk.wav  ||style=text-align:right|  16154 || 7257bdfd014bb61d778b8f88cb65d560
|-
| sound/ogre/ogwake.wav  ||style=text-align:right|  19356 || 3296459e495c4c12b31179d4eeffac19
|-
| sound/plats/medplat1.wav  ||style=text-align:right|  16378 || b73215aa6627c8b5b90fce8d260d48d0
|-
| sound/plats/medplat2.wav  ||style=text-align:right|  7338 || 1fc6c3772917a1a8155d04fa52e17005
|-
| sound/plats/plat1.wav  ||style=text-align:right|  20248 || 5d43ed85d896ba926f459e06ba6635d5
|-
| sound/plats/plat2.wav  ||style=text-align:right|  7338 || 49d7ab0fd726cd652eb6e5756fce61b9
|-
| sound/plats/train1.wav  ||style=text-align:right|  21430 || b589ae8262046361d9dca39d6b8f693a
|-
| sound/plats/train2.wav  ||style=text-align:right|  5870 || 640017e1b870d643e3bca29d499c72ee
|-
| sound/player/axhit1.wav  ||style=text-align:right|  6906 || 149b2371334da318386325182924eaca
|-
| sound/player/axhit2.wav  ||style=text-align:right|  2434 || fc01909318455f5310efa2457a370897
|-
| sound/player/death1.wav  ||style=text-align:right|  10170 || ba005f5488d4ee78dabf613a03f33a5f
|-
| sound/player/death2.wav  ||style=text-align:right|  8026 || 20477d2e7c84aac1bef95d32c9c702dd
|-
| sound/player/death3.wav  ||style=text-align:right|  10918 || 7b206ba8e1fa28d8605b50e3f3200f11
|-
| sound/player/death4.wav  ||style=text-align:right|  14126 || 1b0f27f4d41b748d3cc5c3d56bd917f8
|-
| sound/player/death5.wav  ||style=text-align:right|  14946 || 7efe84195cfa97515aad2d7f96f25346
|-
| sound/player/drown1.wav  ||style=text-align:right|  8908 || 732f0416af6990e028110380bcb36f0d
|-
| sound/player/drown2.wav  ||style=text-align:right|  3114 || 29ee1f287879acce29b15d4722668bc2
|-
| sound/player/gasp1.wav  ||style=text-align:right|  8702 || b06cbc370c8c2c163dc4d487e8b673c7
|-
| sound/player/gasp2.wav  ||style=text-align:right|  13134 || 30aece9d8779764620c7f866bfb06edb
|-
| sound/player/gib.wav  ||style=text-align:right|  14424 || 26fa9942078125388f34b71546615068
|-
| sound/player/h2odeath.wav  ||style=text-align:right|  18104 || 73b0f4dfae07f6e49112cadfe202735c
|-
| sound/player/h2ojump.wav  ||style=text-align:right|  11438 || cd421b96410971bb1a4f21d3936a3805
|-
| sound/player/inh2o.wav  ||style=text-align:right|  11340 || d4c1a27c4d07e8dfdf18a4b1a880c610
|-
| sound/player/inlava.wav  ||style=text-align:right|  10958 || c37875a082900716b7af88d2d990f55c
|-
| sound/player/land2.wav  ||style=text-align:right|  6204 || 6ba534256a779d66d9d9dabb90e63c8b
|-
| sound/player/land.wav  ||style=text-align:right|  2434 || e34328a40358d98f0f95403b9e27ec1e
|-
| sound/player/lburn1.wav  ||style=text-align:right|  6682 || 3c447c72385defe97c060771077d8ba0
|-
| sound/player/lburn2.wav  ||style=text-align:right|  6076 || 6849ee8dbd91ec82ece016fbd39b0a5c
|-
| sound/player/pain1.wav  ||style=text-align:right|  3394 || d7ac9df7540b791f952ca2a681c0265b
|-
| sound/player/pain2.wav  ||style=text-align:right|  2710 || 513e054b64d4fb61f31384d59e123020
|-
| sound/player/pain3.wav  ||style=text-align:right|  4854 || aafc61ad4e16cc5cdd2db2100796b494
|-
| sound/player/pain4.wav  ||style=text-align:right|  4840 || f655ef2045bc55473303b27546aa6fc0
|-
| sound/player/pain5.wav  ||style=text-align:right|  8020 || f8551a73cb89396042687baa8c68b5c2
|-
| sound/player/pain6.wav  ||style=text-align:right|  5462 || 70062eabf96288d307280fb601ce0ee2
|-
| sound/player/plyrjmp8.wav  ||style=text-align:right|  3888 || d4a552d8f627c7f3b933568c4a74c913
|-
| sound/player/slimbrn2.wav  ||style=text-align:right|  12468 || b17c18a9f81a952f2d41f65b5180f210
|-
| sound/player/teledth1.wav  ||style=text-align:right|  14414 || c226c7f041187ba058d8112cc0190b56
|-
| sound/player/tornoff2.wav  ||style=text-align:right|  7726 || 03ec1c805b307b8fe4c4052f8332a5e5
|-
| sound/player/udeath.wav  ||style=text-align:right|  16082 || afe674f287efb6197da2cea0c0b1d2f8
|-
| sound/shambler/melee1.wav  ||style=text-align:right|  4718 || 77fe6240973a204b757a427ebf66bcfd
|-
| sound/shambler/melee2.wav  ||style=text-align:right|  5966 || 3be31638d769e3d690c92311dfafdeac
|-
| sound/shambler/sattck1.wav  ||style=text-align:right|  8036 || ec8c3f79ea42d09154cb8975ada1b21c
|-
| sound/shambler/sboom.wav  ||style=text-align:right|  11672 || 9834601a645d7d1f62001b2a314ec18f
|-
| sound/shambler/sdeath.wav  ||style=text-align:right|  21106 || e0e62d229a985a6e39218c6488599059
|-
| sound/shambler/shurt2.wav  ||style=text-align:right|  4302 || 1e87631ede95e061a75f9c31629ac0b8
|-
| sound/shambler/sidle.wav  ||style=text-align:right|  5646 || 368a240e6c3e877793352a79c1828386
|-
| sound/shambler/smack.wav  ||style=text-align:right|  5300 || bd8c634c9894348360fec7b7419d1649
|-
| sound/shambler/ssight.wav  ||style=text-align:right|  15420 || 657107577460d5acf3157dec97e07a89
|-
| sound/soldier/death1.wav  ||style=text-align:right|  8434 || fe25952af40b536c3bb67bfca58062eb
|-
| sound/soldier/idle.wav  ||style=text-align:right|  9802 || 4cdfbdda8fb5f40b125c7bcddb6e8914
|-
| sound/soldier/pain1.wav  ||style=text-align:right|  5000 || 54d3b05fdcecf7480034858f2b22b06c
|-
| sound/soldier/pain2.wav  ||style=text-align:right|  7838 || e2bbc9d3405b9b9fdae76d2fc298fc2f
|-
| sound/soldier/sattck1.wav  ||style=text-align:right|  14302 || b76ac35f900f280a7a7996da7e404362
|-
| sound/soldier/sight1.wav  ||style=text-align:right|  12716 || e2a39533250ddd1b08053d5c4ebf7fd0
|-
| sound/weapons/ax1.wav  ||style=text-align:right|  3308 || 237d4d819d02ad37849a8a895cc410e1
|-
| sound/weapons/bounce.wav  ||style=text-align:right|  5864 || fced668c6558a9505abf5014d60528a6
|-
| sound/weapons/grenade.wav  ||style=text-align:right|  8364 || d2b6fa131933f203eba2a282276e88df
|-
| sound/weapons/guncock.wav  ||style=text-align:right|  14430 || 6a63452167cc106e756518536446844f
|-
| sound/weapons/lhit.wav  ||style=text-align:right|  26028 || fefd021d0bd35a1f8da8870f1c06abb9
|-
| sound/weapons/lock4.wav  ||style=text-align:right|  3876 || 3fd93222258d5b1500b150f021c94519
|-
| sound/weapons/lstart.wav  ||style=text-align:right|  56378 || abe1abf6dcadcda5930b0684c7ea820a
|-
| sound/weapons/pkup.wav  ||style=text-align:right|  5174 || 0aa6f0a7d609e1a56fd535a06d1bb56e
|-
| sound/weapons/r_exp3.wav  ||style=text-align:right|  17478 || 57db026474fc76ba7f38cea24eaaf8cf
|-
| sound/weapons/ric1.wav  ||style=text-align:right|  4308 || a31166b4bbb4509ac3004a01f7477ee9
|-
| sound/weapons/ric2.wav  ||style=text-align:right|  10838 || a180b447c0527e603cea54a9aefd6139
|-
| sound/weapons/ric3.wav  ||style=text-align:right|  12638 || 8a773bbb585540ddce256151162f3a2c
|-
| sound/weapons/rocket1i.wav  ||style=text-align:right|  9660 || fb4fdf345d805cf6980c4c695974effc
|-
| sound/weapons/sgun1.wav  ||style=text-align:right|  22992 || 95a14815e48deb323d0cf8251d728ac7
|-
| sound/weapons/shotgn2.wav  ||style=text-align:right|  8694 || cb561cefbf472232334b419af050e5a0
|-
| sound/weapons/spike2.wav  ||style=text-align:right|  12642 || 9189d811855f108da4a1e2d34dc7c633
|-
| sound/weapons/tink1.wav  ||style=text-align:right|  1252 || 297ba8706625fcf05887edb393e9a441
|-
| sound/wizard/hit.wav  ||style=text-align:right|  7332 || 6598d669334df977f1f97b95288edf11
|-
| sound/wizard/wattack.wav  ||style=text-align:right|  25912 || b3568a47439f81779d40335e76f5bc2d
|-
| sound/wizard/wdeath.wav  ||style=text-align:right|  20684 || 99d9c71343bc23222abb92119d404400
|-
| sound/wizard/widle1.wav  ||style=text-align:right|  13464 || b22b1dd9f66879b3447d36ab584316c7
|-
| sound/wizard/widle2.wav  ||style=text-align:right|  23094 || 7178fd83df227360564adef01bed92c6
|-
| sound/wizard/wpain.wav  ||style=text-align:right|  8686 || bd7e59ab7d7b835f9ed8ab51950914de
|-
| sound/wizard/wsight.wav  ||style=text-align:right|  13078 || df5949057c750528917c6cb32b7fd9fd
|-
| sound/zombie/idle_w2.wav  ||style=text-align:right|  17192 || d2bb59b9d7ac71097c07123a23525641
|-
| sound/zombie/z_fall.wav  ||style=text-align:right|  3062 || 6968318b2d196c6d54bc707d8a390547
|-
| sound/zombie/z_gib.wav  ||style=text-align:right|  16226 || 199dda66ade8d6f0ef4897e4d7608c0d
|-
| sound/zombie/z_hit.wav  ||style=text-align:right|  6166 || 6c66ab3e6b149bf35956a4bbc0057acb
|-
| sound/zombie/z_idle1.wav  ||style=text-align:right|  13244 || 21088a7b38b1124d7ec72e58d5ab93a6
|-
| sound/zombie/z_idle.wav  ||style=text-align:right|  16734 || e5e570e38c4405111004190a79f0e925
|-
| sound/zombie/z_miss.wav  ||style=text-align:right|  10734 || 96fad96a8c3bc6f7bcc5da6c82678da2
|-
| sound/zombie/z_pain1.wav  ||style=text-align:right|  15374 || fcd83b89a94b0cadbe1361a4df080ec0
|-
| sound/zombie/z_pain.wav  ||style=text-align:right|  12218 || 56637968b8309bd2f825153330bbdfc0
|-
| sound/zombie/z_shot1.wav  ||style=text-align:right|  3068 || 561afb69b7851923a8fb3b54e3e13c96
|-
|}
&lt;/tt&gt;

=== 5906e5998fc3d896ddaf5e6a62e03abb ===
The [[id1]] ''pak0.pak'' with the md5sum 5906e5998fc3d896ddaf5e6a62e03abb contains the following folders &amp; files:
&lt;tt&gt;
{| class=&quot;wikitable collapsible collapsed&quot;
! Path !! Size !! md5
|-
| default.cfg  ||style=text-align:right|  1914 || fc989b37572fae074e8ffda0ce4d5297
|-
| demo1.dem  ||style=text-align:right|  184471 || 85ec0141ab24d9732e487d1aafa791f0
|-
| demo2.dem  ||style=text-align:right|  152705 || fa5c3daf7a57954cd95f94b698a7e420
|-
| demo3.dem  ||style=text-align:right|  197679 || 691f37e5715ea2863c1d8092a6429824
|-
| end1.bin  ||style=text-align:right|  4000 || 92ae51961ec2f429dfe9bea1138fbd5d
|-
| gfx/bigbox.lmp  ||style=text-align:right|  5192 || e597771ac6149b2b071ebfd24981ea04
|-
| gfx/box_bl.lmp  ||style=text-align:right|  72 || 5b094c37c2c1c2eebe37f84117dea182
|-
| gfx/box_bm.lmp  ||style=text-align:right|  136 || 44621236738e2bf8d669e53dca887278
|-
| gfx/box_br.lmp  ||style=text-align:right|  72 || 86597d5325b472caf5644644033e5cab
|-
| gfx/box_ml.lmp  ||style=text-align:right|  72 || adcea286ba0ac01084fd0c131b16ffdd
|-
| gfx/box_mm2.lmp  ||style=text-align:right|  136 || b850bcec189d909e7a0f796111a11249
|-
| gfx/box_mm.lmp  ||style=text-align:right|  136 || 700b4884b1a3c6aa7356a43014261866
|-
| gfx/box_mr.lmp  ||style=text-align:right|  72 || e30d9ea783ef7dd50101682f03ba40d7
|-
| gfx/box_tl.lmp  ||style=text-align:right|  72 || 3903d3d814e37c55790ac0ccfef2b925
|-
| gfx/box_tm.lmp  ||style=text-align:right|  136 || 7cb85ccbf8e7d2532da2a839a7cef348
|-
| gfx/box_tr.lmp  ||style=text-align:right|  72 || 5c5e72746af821a4cf8437d8fecc53c7
|-
| gfx/colormap.lmp  ||style=text-align:right|  16385 || 0d793b70bffafbd666fc5c88d6e15e9d
|-
| gfx/complete.lmp  ||style=text-align:right|  4616 || db6a00dfbe2c62a43c261e5622297c4a
|-
| gfx/conback.lmp  ||style=text-align:right|  64008 || 9eb6f9c47870bf42985d9382958a5c12
|-
| gfx/dim_drct.lmp  ||style=text-align:right|  3352 || 50ea11fe8c4d9db92863bdcd03b89df5
|-
| gfx/dim_ipx.lmp  ||style=text-align:right|  3352 || 0bef9943487f0611225bf0a5c0fe5dd4
|-
| gfx/dim_modm.lmp  ||style=text-align:right|  3352 || 3288f03144f06b95cadafa9458a77b1d
|-
| gfx/dim_mult.lmp  ||style=text-align:right|  3352 || 348b7369227f2d7e9d0daccbf6c9344d
|-
| gfx/dim_tcp.lmp  ||style=text-align:right|  3352 || 7dc8bbb01d7c90cd51c28da0ff6ed900
|-
| gfx/finale.lmp  ||style=text-align:right|  6920 || b6e49409d344e0344273d86ea33fe35f
|-
| gfx/help0.lmp  ||style=text-align:right|  64008 || b392ac30ad49252b51ec934ed855c20f
|-
| gfx/help1.lmp  ||style=text-align:right|  64008 || 857543c69245117a606044ea63adac9a
|-
| gfx/help2.lmp  ||style=text-align:right|  64008 || 882dd5920ea9c19f637f32084de9788a
|-
| gfx/help3.lmp  ||style=text-align:right|  64008 || a89d169524920d896128009467deebfc
|-
| gfx/help4.lmp  ||style=text-align:right|  64008 || c72d67c84ae6b403fae5f08d3e5c3bc6
|-
| gfx/help5.lmp  ||style=text-align:right|  64008 || 12203d7cdec35c4f51622dd90ec92093
|-
| gfx/inter.lmp  ||style=text-align:right|  23048 || f6eabe0d742380c7b47a9ee44170993d
|-
| gfx/loading.lmp  ||style=text-align:right|  3464 || 3249bc994266529a1748c06bfbb24bfa
|-
| gfx/mainmenu.lmp  ||style=text-align:right|  26888 || 8122e2a0b8888f9d1ebef149551b6434
|-
| gfx/menudot1.lmp  ||style=text-align:right|  392 || bfdb08d84d580abcfbacc1c9abd62bfb
|-
| gfx/menudot2.lmp  ||style=text-align:right|  392 || 6c6d2176e00edbe530bb1db118aaa6dc
|-
| gfx/menudot3.lmp  ||style=text-align:right|  392 || 2527a05f6162efb3e4bc5311d9e010d5
|-
| gfx/menudot4.lmp  ||style=text-align:right|  392 || 90ea6be033b39b139b3779932d266f33
|-
| gfx/menudot5.lmp  ||style=text-align:right|  392 || c9beb9600c35e458d0f83b6cf1e1c692
|-
| gfx/menudot6.lmp  ||style=text-align:right|  392 || 31b9a6ec1d12a2bd56b955185a9e72d3
|-
| gfx/menuplyr.lmp  ||style=text-align:right|  2696 || 9eebe617ff51c4ce43f85ca1a6920d5b
|-
| gfx/mp_menu.lmp  ||style=text-align:right|  14856 || c6416b8f7f5262a5a19b9ce4be1fd9ce
|-
| gfx/netmen1.lmp  ||style=text-align:right|  3352 || 5bc6a8d8cfdfd7e940e933812954367a
|-
| gfx/netmen2.lmp  ||style=text-align:right|  3352 || c8aafb649a653e90fc5eb7b7a2b3ca2e
|-
| gfx/netmen3.lmp  ||style=text-align:right|  3352 || 11c9372d0e64057a1ec8251f596b820d
|-
| gfx/netmen4.lmp  ||style=text-align:right|  3352 || 74ec672b1312699be2eeaf25a68e4582
|-
| gfx/netmen5.lmp  ||style=text-align:right|  3352 || 231f8a9ea4ba364f517db0e9f7f1ba72
|-
| gfx/palette.lmp  ||style=text-align:right|  768 || 79bc149d4f2fb0bd68cd8400a3fd87d4
|-
| gfx/pause.lmp  ||style=text-align:right|  3080 || 5aa67f927719e4a9eb3e020e75fea969
|-
| gfx/p_load.lmp  ||style=text-align:right|  2504 || 27fe08071058385529b0b8ad746421e7
|-
| gfx/p_multi.lmp  ||style=text-align:right|  5192 || 5a307c7d11da20a4772ad9c00b9f4309
|-
| gfx/p_option.lmp  ||style=text-align:right|  3464 || 83a3bf4459bce3fe85857a0aa647b90a
|-
| gfx/p_save.lmp  ||style=text-align:right|  2120 || 0d2bb5fa5524e0180a85bf273094cd1f
|-
| gfx/qplaque.lmp  ||style=text-align:right|  4616 || f4de79557c75e26b85ea84fb6029a5f3
|-
| gfx/ranking.lmp  ||style=text-align:right|  4040 || 919b13d1f7fdd0082ec0f94699f3b681
|-
| gfx/sell.lmp  ||style=text-align:right|  64008 || 878db3866e8b38c5b8d951aef516358c
|-
| gfx/sp_menu.lmp  ||style=text-align:right|  14856 || f624aa79778970ecb8ef518b5ab435f6
|-
| gfx/ttl_cstm.lmp  ||style=text-align:right|  4424 || 4ee84e0e7fa93f0e93d26efb1e726a4d
|-
| gfx/ttl_main.lmp  ||style=text-align:right|  2312 || 07e1c8e189e2463befcfc44f5ecf8dcb
|-
| gfx/ttl_sgl.lmp  ||style=text-align:right|  3080 || 25d5360228da738f091063eaeb7c6aa8
|-
| gfx/vidmodes.lmp  ||style=text-align:right|  5192 || 18a97f403057777f262188903f485fe8
|-
| gfx.wad  ||style=text-align:right|  112828 || cde5b5890c8902c02a2f271abe8f4a1f
|-
| maps/b_batt0.bsp  ||style=text-align:right|  5044 || 00bc989f4c8d2570a2826a63c7356a27
|-
| maps/b_batt1.bsp  ||style=text-align:right|  4620 || 555bc0cb0b5c2ad2ed0110f307e70679
|-
| maps/b_bh100.bsp  ||style=text-align:right|  8820 || 62f78bb5143265f037b79ddd077c50ed
|-
| maps/b_bh10.bsp  ||style=text-align:right|  3936 || e80cde9f185612f669fc100f825ca84f
|-
| maps/b_bh25.bsp  ||style=text-align:right|  8872 || 032d70dbf8669b3627b82b41f31488bd
|-
| maps/b_explob.bsp  ||style=text-align:right|  10220 || d8c9db3cfa0264678afc580143f665ea
|-
| maps/b_nail0.bsp  ||style=text-align:right|  5044 || c8d7ec0bdee74e0c1e69e8dbe939117d
|-
| maps/b_nail1.bsp  ||style=text-align:right|  5044 || ea08b2bd6aa19ece0307f75c491e5d24
|-
| maps/b_rock0.bsp  ||style=text-align:right|  2956 || 19ce64cd248a4459bf37b45e6e7c1219
|-
| maps/b_rock1.bsp  ||style=text-align:right|  2944 || b4cdb75094cd7218ed2b0475aefabe80
|-
| maps/b_shell0.bsp  ||style=text-align:right|  5044 || 574824b3c52661959d633a76dc823859
|-
| maps/b_shell1.bsp  ||style=text-align:right|  5044 || dc8b8dcb490e204e615b2b9cdc673296
|-
| maps/e1m1.bsp  ||style=text-align:right|  1365176 || 84cae48010619bcc945426b91bc03ade
|-
| maps/e1m2.bsp  ||style=text-align:right|  1332228 || caff91afbe41f3eac4dda65cee0083c9
|-
| maps/e1m3.bsp  ||style=text-align:right|  1249944 || f20eaa5692e94ab889c4ade9e1c116c7
|-
| maps/e1m4.bsp  ||style=text-align:right|  1411452 || 29419f05ef647f83d0482502bb3f84f8
|-
| maps/e1m5.bsp  ||style=text-align:right|  1324060 || afd98cc890d748986186951b32fc9fcb
|-
| maps/e1m6.bsp  ||style=text-align:right|  1065080 || ec178e54ff68c4d8cf71e26775b2eb2d
|-
| maps/e1m7.bsp  ||style=text-align:right|  607420 || 0c1f55455e0f957291e21d211b689718
|-
| maps/e1m8.bsp  ||style=text-align:right|  924116 || 18c7ab2f922d5d586150afbc27c323a4
|-
| maps/start.bsp  ||style=text-align:right|  1433792 || 61a57bb4ca36368478f02b142d1b5291
|-
| progs/armor.mdl  ||style=text-align:right|  44076 || ca060166d7e4e4686995f05645dde593
|-
| progs/backpack.mdl  ||style=text-align:right|  19348 || 315b4ef42fb035aa3318e8d2d61961ce
|-
| progs/bolt2.mdl  ||style=text-align:right|  11860 || f59ce07cfbe01fcfc578258c573d2c31
|-
| progs/bolt3.mdl  ||style=text-align:right|  11860 || ff87579a424faa59ca2695b7434ea488
|-
| progs/bolt.mdl  ||style=text-align:right|  20644 || a176903954e9d8c7ab629f92784546c2
|-
| progs/boss.mdl  ||style=text-align:right|  211836 || 25da3b2bc30677e32ee3a3a878a4d3af
|-
| progs.dat  ||style=text-align:right|  413116 || 0c3ef3625df5883536f8da42c78b673a
|-
| progs/demon.mdl  ||style=text-align:right|  102120 || 4c73786e7cfb2083ca38cbc983cd6c4b
|-
| progs/dog.mdl  ||style=text-align:right|  146056 || e727fbc39acc652f812972612ce37565
|-
| progs/end1.mdl  ||style=text-align:right|  20820 || 67c0fcab33d3772c00bb462b0e749275
|-
| progs/eyes.mdl  ||style=text-align:right|  4372 || ed72f64a17c6909b2cb3034a734bca97
|-
| progs/flame2.mdl  ||style=text-align:right|  64572 || f2c8f8950ebd7a0edded6247655d325b
|-
| progs/flame.mdl  ||style=text-align:right|  46364 || 8593c05374d84354d4444c218e86fdb8
|-
| progs/gib1.mdl  ||style=text-align:right|  5716 || f5c5b799e895dc03036522a487e99913
|-
| progs/gib2.mdl  ||style=text-align:right|  16228 || cfa9e97a3542852418123e0bb12e4f86
|-
| progs/gib3.mdl  ||style=text-align:right|  22228 || d73be7b2881e0a5aacf2b332ac29086f
|-
| progs/g_light.mdl  ||style=text-align:right|  50276 || 61bba06ec3804b7f355a62fd4585ad8f
|-
| progs/g_nail2.mdl  ||style=text-align:right|  30720 || ed6d7bb5ff050ad5f2bf4be7739a16a5
|-
| progs/g_nail.mdl  ||style=text-align:right|  34700 || e2959ca741c764dd42025ef531a1b554
|-
| progs/grenade.mdl  ||style=text-align:right|  2244 || f492d6257c216306983a72f41db0d891
|-
| progs/g_rock2.mdl  ||style=text-align:right|  40756 || 68c047c97bab89afe2cb69e65b7c62e1
|-
| progs/g_rock.mdl  ||style=text-align:right|  48244 || 61346f842944795e0821e31e3d61b427
|-
| progs/g_shot.mdl  ||style=text-align:right|  32916 || 7facfec1a3cfb892cce871f398e9cb6b
|-
| progs/h_demon.mdl  ||style=text-align:right|  34884 || 5253a0ea93d9624d73fb984ee339b52f
|-
| progs/h_dog.mdl  ||style=text-align:right|  24436 || a0b5f87522b3a769548c46cf3bb4223e
|-
| progs/h_guard.mdl  ||style=text-align:right|  5428 || 18a629b53b87392030df63b7806eb833
|-
| progs/h_knight.mdl  ||style=text-align:right|  7156 || 46a03fa72b0cdebcf58045aba2fafc13
|-
| progs/h_ogre.mdl  ||style=text-align:right|  14900 || 14eb06611c769e254d0531c05919bdf5
|-
| progs/h_player.mdl  ||style=text-align:right|  14708 || bf1773df7d3e19c5b211a1ee408f6b05
|-
| progs/h_shams.mdl  ||style=text-align:right|  37060 || ff1e04e18c57667991341a011fb6c363
|-
| progs/h_wizard.mdl  ||style=text-align:right|  14804 || 4bc6be40128f313cf9ad06c347310735
|-
| progs/h_zombie.mdl  ||style=text-align:right|  4484 || 0fdef7f7cd05a3209e0a163e87f69f8b
|-
| progs/invisibl.mdl  ||style=text-align:right|  7092 || 1e87d86af02e69db9c9f27f5fddc7a47
|-
| progs/invulner.mdl  ||style=text-align:right|  23920 || 8c8d83e4d50c3282d009b333a1280422
|-
| progs/knight.mdl  ||style=text-align:right|  101404 || 5328915db5c53e85cf75d46e7b747fb9
|-
| progs/lavaball.mdl  ||style=text-align:right|  8788 || 92af53d2145681e37877dbc1d12801b2
|-
| progs/m_g_key.mdl  ||style=text-align:right|  12820 || 192c2650a115c91706f6fa8fe68beb45
|-
| progs/missile.mdl  ||style=text-align:right|  57796 || 47f19f9e34954b93443c9759dd2e7ba0
|-
| progs/m_s_key.mdl  ||style=text-align:right|  12820 || 20837376b391cdd5c92e57b84e05687f
|-
| progs/ogre.mdl  ||style=text-align:right|  162036 || fbb592ca3788a576dd2f31fcf8c80fab
|-
| progs/player.mdl  ||style=text-align:right|  191852 || 405cef9a10d96cdabffb5e91312f8e5c
|-
| progs/quaddama.mdl  ||style=text-align:right|  39992 || 00b177ff272a4779097ea08344da8aff
|-
| progs/s_bubble.spr  ||style=text-align:right|  588 || 7c0887630ed468205292d8cb7abcae93
|-
| progs/s_explod.spr  ||style=text-align:right|  18972 || 766c6a92c26b54f68f7ff87c90d71cf2
|-
| progs/shambler.mdl  ||style=text-align:right|  98556 || 9b09375a0f614dc4081e363cc34f1185
|-
| progs/s_light.mdl  ||style=text-align:right|  27596 || ee6649ea5673989f3aa06213a8d65f76
|-
| progs/s_light.spr  ||style=text-align:right|  1080 || aff44ba238f4e1d0d504d6f9700aadb4
|-
| progs/soldier.mdl  ||style=text-align:right|  146288 || 5b6c30a984872b4273dd5861412d35c5
|-
| progs/spike.mdl  ||style=text-align:right|  1684 || be4cb73125f939284376080acc9887dd
|-
| progs/s_spike.mdl  ||style=text-align:right|  1684 || ebb1d58242b64a703623c8a33fcbd9e6
|-
| progs/suit.mdl  ||style=text-align:right|  51236 || 882a61f5eea7f9cdbc04800b963cef85
|-
| progs/v_axe.mdl  ||style=text-align:right|  57908 || 577dadcca2700068995c808dc7dec76f
|-
| progs/v_light.mdl  ||style=text-align:right|  56204 || 68733d4c690de88b5c3ba33e52be1c15
|-
| progs/v_nail2.mdl  ||style=text-align:right|  68732 || aacd1002ab02662cc1d3ff46885b553e
|-
| progs/v_nail.mdl  ||style=text-align:right|  54472 || ec9ba028b346da2f9674c2a521ff0c2f
|-
| progs/v_rock2.mdl  ||style=text-align:right|  58188 || 96edf1a3c7629987c200361523f780d7
|-
| progs/v_rock.mdl  ||style=text-align:right|  58548 || 7bea46b2a75fd7cff2fb99420e4c4e25
|-
| progs/v_shot2.mdl  ||style=text-align:right|  50816 || 922b3b687766ae0d7aeb73d44dec7035
|-
| progs/v_shot.mdl  ||style=text-align:right|  43852 || 1fd140b6856843e83cd9bf3966f5d7dd
|-
| progs/w_g_key.mdl  ||style=text-align:right|  7252 || c5c5f0d14b022f57294ad9aded318250
|-
| progs/wizard.mdl  ||style=text-align:right|  64472 || bf60986594f045e60e8aa6339d553ee7
|-
| progs/w_s_key.mdl  ||style=text-align:right|  7252 || ec02314a7d12439d36b4eb2dd0a641a8
|-
| progs/w_spike.mdl  ||style=text-align:right|  14336 || 8cf9245df2164e8062b01a220b508d6b
|-
| progs/zombie.mdl  ||style=text-align:right|  186084 || a923b1d03b9d237dd5ead9bd56acc900
|-
| progs/zom_gib.mdl  ||style=text-align:right|  10196 || cf42c938caa5b19f719d1f110b1dc6d4
|-
| quake.rc  ||style=text-align:right|  293 || 411d42958aaeae141813f9ebfcf5233f
|-
| sound/ambience/buzz1.wav  ||style=text-align:right|  36308 || 346a00c795c6f1f1338ade6fc350b3fe
|-
| sound/ambience/comp1.wav  ||style=text-align:right|  62734 || f91a1120de804f7cd4dbba4f12c748e9
|-
| sound/ambience/drip1.wav  ||style=text-align:right|  137736 || 2306a76162eeda3d0812c516bc99aa7a
|-
| sound/ambience/drone6.wav  ||style=text-align:right|  18522 || 322853ddb42ad2a205579b5cca8e2e8c
|-
| sound/ambience/fire1.wav  ||style=text-align:right|  24064 || 610d3985ed8133988e8de3bec2b9cbbe
|-
| sound/ambience/fl_hum1.wav  ||style=text-align:right|  50154 || e4628499702e004c4bacd282a3ecb8c0
|-
| sound/ambience/hum1.wav  ||style=text-align:right|  40166 || 486bfa737c35b0c9dda57cbee2a540af
|-
| sound/ambience/suck1.wav  ||style=text-align:right|  110392 || 2e99e4d1fe1501d5191c8157d3063cb6
|-
| sound/ambience/swamp1.wav  ||style=text-align:right|  68524 || 29ffb678d78997eb6c227677c86ea4f8
|-
| sound/ambience/swamp2.wav  ||style=text-align:right|  68526 || 356aa1e875da846e72d8f17bbb699a5b
|-
| sound/ambience/thunder1.wav  ||style=text-align:right|  41492 || cefd6ced4b5bc79fcece1003238566f6
|-
| sound/ambience/water1.wav  ||style=text-align:right|  55784 || 6eeaae0a3450652d2be0782895297ee4
|-
| sound/ambience/wind2.wav  ||style=text-align:right|  28610 || 030cf8dd2b00a12454b5b35a89d03914
|-
| sound/ambience/windfly.wav  ||style=text-align:right|  22140 || c7be01e6d324e66883f70aa0072a99b0
|-
| sound/boss1/death.wav  ||style=text-align:right|  27600 || 43469b1acd35b67107da5da82e1df911
|-
| sound/boss1/out1.wav  ||style=text-align:right|  50344 || 847a6f971f6905dfaffd70b30d18a4b1
|-
| sound/boss1/pain.wav  ||style=text-align:right|  17700 || 49112740c0ff421f9272b9e8efc748cd
|-
| sound/boss1/sight1.wav  ||style=text-align:right|  24768 || 427dd600e6b28c9402212adcc5d652c7
|-
| sound/boss1/throw.wav  ||style=text-align:right|  11526 || 9b6e9ff2c8df448f7fd4b5315e60ddda
|-
| sound/buttons/airbut1.wav  ||style=text-align:right|  10672 || 9d2e14e7176842a0dce909a43d38873d
|-
| sound/buttons/switch02.wav  ||style=text-align:right|  3746 || d2e9cba3a353edc65115f6f5c574403c
|-
| sound/buttons/switch04.wav  ||style=text-align:right|  3666 || ff47857a58d3faefb2b94a37d7ba4f26
|-
| sound/buttons/switch21.wav  ||style=text-align:right|  6318 || 3605b0d061a9baf185c6ab7614534531
|-
| sound/demon/ddeath.wav  ||style=text-align:right|  9140 || 62a48dcd405ca55c9ce18497e36faa0e
|-
| sound/demon/dhit2.wav  ||style=text-align:right|  7142 || 9e741696e4d0d66e30e718fc70ec186e
|-
| sound/demon/djump.wav  ||style=text-align:right|  8494 || 791ac9d6b6593808316145443cb7e7a0
|-
| sound/demon/dland2.wav  ||style=text-align:right|  4400 || db14c7b01838f826b7a712075f9026fd
|-
| sound/demon/dpain1.wav  ||style=text-align:right|  6282 || 5e6c485878393c9bebb0d0e6659bc479
|-
| sound/demon/idle1.wav  ||style=text-align:right|  9098 || 7a83f8caf3d5b1172a7dc5afdc942988
|-
| sound/demon/sight2.wav  ||style=text-align:right|  8804 || 65171c355c22a5069520b0881677ae3c
|-
| sound/dog/dattack1.wav  ||style=text-align:right|  8154 || 0c47c9d4aaae0bf3159a288b674f4a35
|-
| sound/dog/ddeath.wav  ||style=text-align:right|  14912 || b0e7760b1d7286a028ff9773f6802958
|-
| sound/dog/dpain1.wav  ||style=text-align:right|  7240 || 28e5ab93b41e13e2916433283a5d1a46
|-
| sound/dog/dsight.wav  ||style=text-align:right|  6722 || 0edc290765bac1fb4fe03ca55bc7c225
|-
| sound/dog/idle.wav  ||style=text-align:right|  6870 || 42bd6026ff32bd94523ad9f8fe8362cc
|-
| sound/doors/airdoor1.wav  ||style=text-align:right|  13654 || 9b91930e8c2fdece31a2362296891122
|-
| sound/doors/airdoor2.wav  ||style=text-align:right|  8594 || 29fd823d1c14ca42a9a89c716b26f4cd
|-
| sound/doors/basesec1.wav  ||style=text-align:right|  13930 || eb2363fed42724f55e8f55f96c335bcf
|-
| sound/doors/basesec2.wav  ||style=text-align:right|  10238 || 8d163a56607c9cf64a270a156c1c5cef
|-
| sound/doors/basetry.wav  ||style=text-align:right|  10518 || a5108d5c51281ab55c0baf884cbe8cbe
|-
| sound/doors/baseuse.wav  ||style=text-align:right|  16486 || f43fee91efe813a5eb34e9d72918fdb9
|-
| sound/doors/ddoor1.wav  ||style=text-align:right|  7738 || dff86a26139cdd49a193d5ed7ebf6ae1
|-
| sound/doors/ddoor2.wav  ||style=text-align:right|  5904 || 4a9d0b0825d0302ce465569d1e35fbcf
|-
| sound/doors/doormv1.wav  ||style=text-align:right|  14036 || 3fd379aec80a2ad8105c0c89ba5b40e6
|-
| sound/doors/drclos4.wav  ||style=text-align:right|  12814 || 83df1865a0c9fa5d02c2f137564c57de
|-
| sound/doors/hydro1.wav  ||style=text-align:right|  11094 || b1703980a20e624bc3366ccf55ca617e
|-
| sound/doors/hydro2.wav  ||style=text-align:right|  10700 || b1866f5b3950788ccf4206444ab64bc7
|-
| sound/doors/latch2.wav  ||style=text-align:right|  7338 || ad2378ca21a0ca529df328261e07aed5
|-
| sound/doors/medtry.wav  ||style=text-align:right|  7828 || ebb536bec2cdfd22c25b35793c055339
|-
| sound/doors/meduse.wav  ||style=text-align:right|  10718 || 4522aada194b23eb33b541cbcc755cf6
|-
| sound/doors/runetry.wav  ||style=text-align:right|  13524 || c433bae9e2ab508712f87dc2cacc82c8
|-
| sound/doors/runeuse.wav  ||style=text-align:right|  17364 || b4bcfd525a26f5b5ecc9d392430d9079
|-
| sound/doors/stndr1.wav  ||style=text-align:right|  12620 || 5bae2183885e18d65d69624e85249fd9
|-
| sound/doors/stndr2.wav  ||style=text-align:right|  11470 || f43a75c917effff09ef7be8a321c8b49
|-
| sound/doors/winch2.wav  ||style=text-align:right|  14872 || a4edffdfede7dbaed37db526c26e2b6d
|-
| sound/hknight/hit.wav  ||style=text-align:right|  6260 || fece24e2548f1d769e8fce39a5c87d01
|-
| sound/items/armor1.wav  ||style=text-align:right|  7714 || 186d29f2baf35b8c280bc97754606fad
|-
| sound/items/damage2.wav  ||style=text-align:right|  33012 || 14e53b7617ffe315a7c3f8d89652e51c
|-
| sound/items/damage3.wav  ||style=text-align:right|  12894 || baf754aec7ed4baba16760ac85513184
|-
| sound/items/damage.wav  ||style=text-align:right|  23374 || 8cde8b9278ca4922a4ec7ead6e5ee01b
|-
| sound/items/health1.wav  ||style=text-align:right|  7958 || 52a2c4f808db4edd8393de0de618c91f
|-
| sound/items/inv1.wav  ||style=text-align:right|  13728 || 5850cab55d6197d0e76d9f0a22ba10be
|-
| sound/items/inv2.wav  ||style=text-align:right|  33216 || 4edcd38a2c6adc5305636dd7afd5ef60
|-
| sound/items/inv3.wav  ||style=text-align:right|  33320 || 325c268be05b42a019ccb92e6993ab9e
|-
| sound/items/itembk2.wav  ||style=text-align:right|  9910 || 270c688b3cb884f5d4e5ffd8ccc934a1
|-
| sound/items/protect2.wav  ||style=text-align:right|  34012 || 25627a4bd2b4c6054cfd2fc4bf69ddc2
|-
| sound/items/protect3.wav  ||style=text-align:right|  23364 || 7b9374d67f6d59e524bba2af236ca30a
|-
| sound/items/protect.wav  ||style=text-align:right|  22536 || d839d5a84f811ce8a0e28616891bf1a7
|-
| sound/items/r_item1.wav  ||style=text-align:right|  6822 || 3fc0d0ae4a71c9fbfe548f38626c6a08
|-
| sound/items/r_item2.wav  ||style=text-align:right|  7448 || 384ffefe795d99df75f381596a0f1976
|-
| sound/items/suit2.wav  ||style=text-align:right|  33254 || 0a9d2766a5b805cb5794f9bea57e6585
|-
| sound/items/suit.wav  ||style=text-align:right|  15854 || da413f34023d219f1e34fde50a037be0
|-
| sound/knight/idle.wav  ||style=text-align:right|  11064 || 1b5c3981bee078318af346d8fe8090b9
|-
| sound/knight/kdeath.wav  ||style=text-align:right|  10688 || 11a96f48a8f2433c23beae299c8fb96e
|-
| sound/knight/khurt.wav  ||style=text-align:right|  5586 || 32c9f48dd4a6a87752aedf56fe8de668
|-
| sound/knight/ksight.wav  ||style=text-align:right|  13514 || eb75b4af348c88e84d8c87c19d5976fa
|-
| sound/knight/sword1.wav  ||style=text-align:right|  2306 || 93045b5f3178413dc6b01ec2869d1f73
|-
| sound/knight/sword2.wav  ||style=text-align:right|  2784 || 82d1a7c263cd3df7b060dee2f7f8b1fd
|-
| sound/misc/h2ohit1.wav  ||style=text-align:right|  12972 || 49ecb03f4f10862453656a67598f8b8a
|-
| sound/misc/medkey.wav  ||style=text-align:right|  10020 || 0e3ae5626a47d81e4166539e355e31bb
|-
| sound/misc/menu1.wav  ||style=text-align:right|  5738 || 12c36546601c385bc47c9ca9420b7eee
|-
| sound/misc/menu2.wav  ||style=text-align:right|  10672 || 39b01ea6feb3ec8dbd6d8ee3e5e966c4
|-
| sound/misc/menu3.wav  ||style=text-align:right|  3010 || 4a03dc2fd56831b855dab761eac4f7de
|-
| sound/misc/null.wav  ||style=text-align:right|  1244 || 811989e09124f54cb27fe6154b0f1018
|-
| sound/misc/outwater.wav  ||style=text-align:right|  5018 || 35732412412ddb5ed418633bb0123bbe
|-
| sound/misc/power.wav  ||style=text-align:right|  19832 || 9f2c3a18d9fc8d9cecfac6db3aad6bc6
|-
| sound/misc/r_tele1.wav  ||style=text-align:right|  8036 || c2194171b4c446e136ed7514fbb098a5
|-
| sound/misc/r_tele2.wav  ||style=text-align:right|  17324 || 0ce662ac90fb3658d69320d1be4025c1
|-
| sound/misc/r_tele3.wav  ||style=text-align:right|  18016 || 122ef44813edcfe7391578fd29e729d2
|-
| sound/misc/r_tele4.wav  ||style=text-align:right|  9068 || 0097b5747ccc70d5b12fc6838aff02c2
|-
| sound/misc/r_tele5.wav  ||style=text-align:right|  22042 || a82334cbb66d12f28cce9e71c90ea50b
|-
| sound/misc/runekey.wav  ||style=text-align:right|  14578 || 6b21a2e5878011da50fdee0a301d3e34
|-
| sound/misc/secret.wav  ||style=text-align:right|  6610 || a02ceefcc24b1ebf5c164a1e1acfb05f
|-
| sound/misc/talk.wav  ||style=text-align:right|  1810 || d5b25d4df59d92ac5016e88689ea60c1
|-
| sound/misc/trigger1.wav  ||style=text-align:right|  20230 || dc927c8a1d0a9bd59fbc5dd91ae1d812
|-
| sound/misc/water1.wav  ||style=text-align:right|  3926 || d8291c762acb1edf24927fdcc0f6a6cd
|-
| sound/misc/water2.wav  ||style=text-align:right|  3340 || 049e8e7e7b30d4d8038afb7248bdd977
|-
| sound/ogre/ogdrag.wav  ||style=text-align:right|  12396 || 658587dc89aaefae5ca3f058f7ff4227
|-
| sound/ogre/ogdth.wav  ||style=text-align:right|  13892 || de98e7bb9e70586edddd3308cfded3db
|-
| sound/ogre/ogidle2.wav  ||style=text-align:right|  11254 || 196ae9c33a4311160e1d5f3da878ab09
|-
| sound/ogre/ogidle.wav  ||style=text-align:right|  12894 || 177c829840a87c885bbc8951e7ce962e
|-
| sound/ogre/ogpain1.wav  ||style=text-align:right|  7898 || ac6d133d7720c12df49813fe10e683b5
|-
| sound/ogre/ogsawatk.wav  ||style=text-align:right|  16154 || 7257bdfd014bb61d778b8f88cb65d560
|-
| sound/ogre/ogwake.wav  ||style=text-align:right|  19356 || 3296459e495c4c12b31179d4eeffac19
|-
| sound/plats/medplat1.wav  ||style=text-align:right|  16378 || b73215aa6627c8b5b90fce8d260d48d0
|-
| sound/plats/medplat2.wav  ||style=text-align:right|  7338 || 1fc6c3772917a1a8155d04fa52e17005
|-
| sound/plats/plat1.wav  ||style=text-align:right|  20248 || 5d43ed85d896ba926f459e06ba6635d5
|-
| sound/plats/plat2.wav  ||style=text-align:right|  7338 || 49d7ab0fd726cd652eb6e5756fce61b9
|-
| sound/plats/train1.wav  ||style=text-align:right|  21430 || b589ae8262046361d9dca39d6b8f693a
|-
| sound/plats/train2.wav  ||style=text-align:right|  5870 || 640017e1b870d643e3bca29d499c72ee
|-
| sound/player/axhit1.wav  ||style=text-align:right|  6906 || 149b2371334da318386325182924eaca
|-
| sound/player/axhit2.wav  ||style=text-align:right|  2434 || fc01909318455f5310efa2457a370897
|-
| sound/player/death1.wav  ||style=text-align:right|  10170 || ba005f5488d4ee78dabf613a03f33a5f
|-
| sound/player/death2.wav  ||style=text-align:right|  8026 || 20477d2e7c84aac1bef95d32c9c702dd
|-
| sound/player/death3.wav  ||style=text-align:right|  10918 || 7b206ba8e1fa28d8605b50e3f3200f11
|-
| sound/player/death4.wav  ||style=text-align:right|  14126 || 1b0f27f4d41b748d3cc5c3d56bd917f8
|-
| sound/player/death5.wav  ||style=text-align:right|  14946 || 7efe84195cfa97515aad2d7f96f25346
|-
| sound/player/drown1.wav  ||style=text-align:right|  8908 || 732f0416af6990e028110380bcb36f0d
|-
| sound/player/drown2.wav  ||style=text-align:right|  3114 || 29ee1f287879acce29b15d4722668bc2
|-
| sound/player/gasp1.wav  ||style=text-align:right|  8702 || b06cbc370c8c2c163dc4d487e8b673c7
|-
| sound/player/gasp2.wav  ||style=text-align:right|  13134 || 30aece9d8779764620c7f866bfb06edb
|-
| sound/player/gib.wav  ||style=text-align:right|  14424 || 26fa9942078125388f34b71546615068
|-
| sound/player/h2odeath.wav  ||style=text-align:right|  18104 || 73b0f4dfae07f6e49112cadfe202735c
|-
| sound/player/h2ojump.wav  ||style=text-align:right|  11438 || cd421b96410971bb1a4f21d3936a3805
|-
| sound/player/inh2o.wav  ||style=text-align:right|  11340 || d4c1a27c4d07e8dfdf18a4b1a880c610
|-
| sound/player/inlava.wav  ||style=text-align:right|  10958 || c37875a082900716b7af88d2d990f55c
|-
| sound/player/land2.wav  ||style=text-align:right|  6204 || 6ba534256a779d66d9d9dabb90e63c8b
|-
| sound/player/land.wav  ||style=text-align:right|  2434 || e34328a40358d98f0f95403b9e27ec1e
|-
| sound/player/lburn1.wav  ||style=text-align:right|  6682 || 3c447c72385defe97c060771077d8ba0
|-
| sound/player/lburn2.wav  ||style=text-align:right|  6076 || 6849ee8dbd91ec82ece016fbd39b0a5c
|-
| sound/player/pain1.wav  ||style=text-align:right|  3394 || d7ac9df7540b791f952ca2a681c0265b
|-
| sound/player/pain2.wav  ||style=text-align:right|  2710 || 513e054b64d4fb61f31384d59e123020
|-
| sound/player/pain3.wav  ||style=text-align:right|  4854 || aafc61ad4e16cc5cdd2db2100796b494
|-
| sound/player/pain4.wav  ||style=text-align:right|  4840 || f655ef2045bc55473303b27546aa6fc0
|-
| sound/player/pain5.wav  ||style=text-align:right|  8020 || f8551a73cb89396042687baa8c68b5c2
|-
| sound/player/pain6.wav  ||style=text-align:right|  5462 || 70062eabf96288d307280fb601ce0ee2
|-
| sound/player/plyrjmp8.wav  ||style=text-align:right|  3888 || d4a552d8f627c7f3b933568c4a74c913
|-
| sound/player/slimbrn2.wav  ||style=text-align:right|  12468 || b17c18a9f81a952f2d41f65b5180f210
|-
| sound/player/teledth1.wav  ||style=text-align:right|  14414 || c226c7f041187ba058d8112cc0190b56
|-
| sound/player/tornoff2.wav  ||style=text-align:right|  7726 || 03ec1c805b307b8fe4c4052f8332a5e5
|-
| sound/player/udeath.wav  ||style=text-align:right|  16082 || afe674f287efb6197da2cea0c0b1d2f8
|-
| sound/shambler/melee1.wav  ||style=text-align:right|  4718 || 77fe6240973a204b757a427ebf66bcfd
|-
| sound/shambler/melee2.wav  ||style=text-align:right|  5966 || 3be31638d769e3d690c92311dfafdeac
|-
| sound/shambler/sattck1.wav  ||style=text-align:right|  8036 || ec8c3f79ea42d09154cb8975ada1b21c
|-
| sound/shambler/sboom.wav  ||style=text-align:right|  11672 || 9834601a645d7d1f62001b2a314ec18f
|-
| sound/shambler/sdeath.wav  ||style=text-align:right|  21106 || e0e62d229a985a6e39218c6488599059
|-
| sound/shambler/shurt2.wav  ||style=text-align:right|  4302 || 1e87631ede95e061a75f9c31629ac0b8
|-
| sound/shambler/sidle.wav  ||style=text-align:right|  5646 || 368a240e6c3e877793352a79c1828386
|-
| sound/shambler/smack.wav  ||style=text-align:right|  5300 || bd8c634c9894348360fec7b7419d1649
|-
| sound/shambler/ssight.wav  ||style=text-align:right|  15420 || 657107577460d5acf3157dec97e07a89
|-
| sound/soldier/death1.wav  ||style=text-align:right|  8434 || fe25952af40b536c3bb67bfca58062eb
|-
| sound/soldier/idle.wav  ||style=text-align:right|  9802 || 4cdfbdda8fb5f40b125c7bcddb6e8914
|-
| sound/soldier/pain1.wav  ||style=text-align:right|  5000 || 54d3b05fdcecf7480034858f2b22b06c
|-
| sound/soldier/pain2.wav  ||style=text-align:right|  7838 || e2bbc9d3405b9b9fdae76d2fc298fc2f
|-
| sound/soldier/sattck1.wav  ||style=text-align:right|  14302 || b76ac35f900f280a7a7996da7e404362
|-
| sound/soldier/sight1.wav  ||style=text-align:right|  12716 || e2a39533250ddd1b08053d5c4ebf7fd0
|-
| sound/weapons/ax1.wav  ||style=text-align:right|  3308 || 237d4d819d02ad37849a8a895cc410e1
|-
| sound/weapons/bounce.wav  ||style=text-align:right|  5864 || fced668c6558a9505abf5014d60528a6
|-
| sound/weapons/grenade.wav  ||style=text-align:right|  8364 || d2b6fa131933f203eba2a282276e88df
|-
| sound/weapons/guncock.wav  ||style=text-align:right|  14430 || 6a63452167cc106e756518536446844f
|-
| sound/weapons/lhit.wav  ||style=text-align:right|  26028 || fefd021d0bd35a1f8da8870f1c06abb9
|-
| sound/weapons/lock4.wav  ||style=text-align:right|  3876 || 3fd93222258d5b1500b150f021c94519
|-
| sound/weapons/lstart.wav  ||style=text-align:right|  56378 || abe1abf6dcadcda5930b0684c7ea820a
|-
| sound/weapons/pkup.wav  ||style=text-align:right|  5174 || 0aa6f0a7d609e1a56fd535a06d1bb56e
|-
| sound/weapons/r_exp3.wav  ||style=text-align:right|  17478 || 57db026474fc76ba7f38cea24eaaf8cf
|-
| sound/weapons/ric1.wav  ||style=text-align:right|  4308 || a31166b4bbb4509ac3004a01f7477ee9
|-
| sound/weapons/ric2.wav  ||style=text-align:right|  10838 || a180b447c0527e603cea54a9aefd6139
|-
| sound/weapons/ric3.wav  ||style=text-align:right|  12638 || 8a773bbb585540ddce256151162f3a2c
|-
| sound/weapons/rocket1i.wav  ||style=text-align:right|  9660 || fb4fdf345d805cf6980c4c695974effc
|-
| sound/weapons/sgun1.wav  ||style=text-align:right|  22992 || 95a14815e48deb323d0cf8251d728ac7
|-
| sound/weapons/shotgn2.wav  ||style=text-align:right|  8694 || cb561cefbf472232334b419af050e5a0
|-
| sound/weapons/spike2.wav  ||style=text-align:right|  12642 || 9189d811855f108da4a1e2d34dc7c633
|-
| sound/weapons/tink1.wav  ||style=text-align:right|  1252 || 297ba8706625fcf05887edb393e9a441
|-
| sound/wizard/hit.wav  ||style=text-align:right|  7332 || 6598d669334df977f1f97b95288edf11
|-
| sound/wizard/wattack.wav  ||style=text-align:right|  25912 || b3568a47439f81779d40335e76f5bc2d
|-
| sound/wizard/wdeath.wav  ||style=text-align:right|  20684 || 99d9c71343bc23222abb92119d404400
|-
| sound/wizard/widle1.wav  ||style=text-align:right|  13464 || b22b1dd9f66879b3447d36ab584316c7
|-
| sound/wizard/widle2.wav  ||style=text-align:right|  23094 || 7178fd83df227360564adef01bed92c6
|-
| sound/wizard/wpain.wav  ||style=text-align:right|  8686 || bd7e59ab7d7b835f9ed8ab51950914de
|-
| sound/wizard/wsight.wav  ||style=text-align:right|  13078 || df5949057c750528917c6cb32b7fd9fd
|-
| sound/zombie/idle_w2.wav  ||style=text-align:right|  17192 || d2bb59b9d7ac71097c07123a23525641
|-
| sound/zombie/z_fall.wav  ||style=text-align:right|  3062 || 6968318b2d196c6d54bc707d8a390547
|-
| sound/zombie/z_gib.wav  ||style=text-align:right|  16226 || 199dda66ade8d6f0ef4897e4d7608c0d
|-
| sound/zombie/z_hit.wav  ||style=text-align:right|  6166 || 6c66ab3e6b149bf35956a4bbc0057acb
|-
| sound/zombie/z_idle1.wav  ||style=text-align:right|  13244 || 21088a7b38b1124d7ec72e58d5ab93a6
|-
| sound/zombie/z_idle.wav  ||style=text-align:right|  16734 || e5e570e38c4405111004190a79f0e925
|-
| sound/zombie/z_miss.wav  ||style=text-align:right|  10734 || 96fad96a8c3bc6f7bcc5da6c82678da2
|-
| sound/zombie/z_pain1.wav  ||style=text-align:right|  15374 || fcd83b89a94b0cadbe1361a4df080ec0
|-
| sound/zombie/z_pain.wav  ||style=text-align:right|  12218 || 56637968b8309bd2f825153330bbdfc0
|-
| sound/zombie/z_shot1.wav  ||style=text-align:right|  3068 || 561afb69b7851923a8fb3b54e3e13c96
|-
|}&lt;/tt&gt;

{{todo|todo=Multiple to do items listed above, detail out the contents of various pak files}}
{{todo|todo=different releases have different pak0.pak files}}</text>
      <sha1>6z993f0k7vqsdvum4as1imnq238izi8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3265</id>
      <parentid>3263</parentid>
      <timestamp>2014-09-24T16:48:24Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>/* fc989b37572fae074e8ffda0ce4d5297 */ removed unpak artifact</comment>
      <text xml:space="preserve" bytes="66345">The '''''pak0.pak''''' file that comes with Quake is required by all Quake [[engines]]. It contains the maps, models, programs, sounds, and skins required to play Quake Episode 1, ''Dimension of the Doomed''. It is expected to be in the ID1 subfolder of the Quake root folder.

[[PAK file]]s are typically named ''pak0.pak'', ''pak1.pak'', ''pak2.pak'', and so on. Quake mission packs and other Quake-based games often have their own ''pak0.pak'' files, which live in a different folder, not the ID1 folder.

The ID1 ''pak0.pak'' is distributed with both the shareware and the registered/commercial editions of Quake.

In some editions, including the downloadable shareware (''quake106.zip'') from id Software, ''pak0.pak'' is embedded in another archive, ''[[resource.1]]''. The files in this archive are LZH-encoded using the lh5 algorithm. If you can't or don't want to run the DOS/Win32 Quake installer program it comes with, then you'll need a compatible extractor program to get ''pak0.pak'' out of the ''resource.1'' archive.


== Versions ==
&lt;tt&gt;
{| class=&quot;wikitable&quot;
! Version !! Timestamp !! Size !! md5
|-
| Shareware or Registered Version 1.01 || Unknown ||style=text-align:right|  18276119 || fc989b37572fae074e8ffda0ce4d5297
|-
| Unknown || 1996-10-01 14:25:58 ||style=text-align:right|  18689235 || 5906e5998fc3d896ddaf5e6a62e03abb
|-
|}&lt;/tt&gt;

=== fc989b37572fae074e8ffda0ce4d5297 ===
The [[id1]] ''pak0.pak'' with the md5sum fc989b37572fae074e8ffda0ce4d5297 contains the following folders &amp; files:
&lt;tt&gt;
{| class=&quot;wikitable collapsible collapsed&quot;
|-
! Path !! Size !! md5
|-
| default.cfg  ||style=text-align:right|  1914 || fc989b37572fae074e8ffda0ce4d5297
|-
| demo1.dem  ||style=text-align:right|  184471 || 85ec0141ab24d9732e487d1aafa791f0
|-
| demo2.dem  ||style=text-align:right|  152705 || fa5c3daf7a57954cd95f94b698a7e420
|-
| demo3.dem  ||style=text-align:right|  197679 || 691f37e5715ea2863c1d8092a6429824
|-
| end1.bin  ||style=text-align:right|  4000 || 92ae51961ec2f429dfe9bea1138fbd5d
|-
| gfx/bigbox.lmp  ||style=text-align:right|  5192 || e597771ac6149b2b071ebfd24981ea04
|-
| gfx/box_bl.lmp  ||style=text-align:right|  72 || 5b094c37c2c1c2eebe37f84117dea182
|-
| gfx/box_bm.lmp  ||style=text-align:right|  136 || 44621236738e2bf8d669e53dca887278
|-
| gfx/box_br.lmp  ||style=text-align:right|  72 || 86597d5325b472caf5644644033e5cab
|-
| gfx/box_ml.lmp  ||style=text-align:right|  72 || adcea286ba0ac01084fd0c131b16ffdd
|-
| gfx/box_mm2.lmp  ||style=text-align:right|  136 || b850bcec189d909e7a0f796111a11249
|-
| gfx/box_mm.lmp  ||style=text-align:right|  136 || 700b4884b1a3c6aa7356a43014261866
|-
| gfx/box_mr.lmp  ||style=text-align:right|  72 || e30d9ea783ef7dd50101682f03ba40d7
|-
| gfx/box_tl.lmp  ||style=text-align:right|  72 || 3903d3d814e37c55790ac0ccfef2b925
|-
| gfx/box_tm.lmp  ||style=text-align:right|  136 || 7cb85ccbf8e7d2532da2a839a7cef348
|-
| gfx/box_tr.lmp  ||style=text-align:right|  72 || 5c5e72746af821a4cf8437d8fecc53c7
|-
| gfx/colormap.lmp  ||style=text-align:right|  16385 || 0d793b70bffafbd666fc5c88d6e15e9d
|-
| gfx/complete.lmp  ||style=text-align:right|  4616 || db6a00dfbe2c62a43c261e5622297c4a
|-
| gfx/conback.lmp  ||style=text-align:right|  64008 || 9eb6f9c47870bf42985d9382958a5c12
|-
| gfx/dim_drct.lmp  ||style=text-align:right|  3352 || 50ea11fe8c4d9db92863bdcd03b89df5
|-
| gfx/dim_ipx.lmp  ||style=text-align:right|  3352 || 0bef9943487f0611225bf0a5c0fe5dd4
|-
| gfx/dim_modm.lmp  ||style=text-align:right|  3352 || 3288f03144f06b95cadafa9458a77b1d
|-
| gfx/dim_mult.lmp  ||style=text-align:right|  3352 || 348b7369227f2d7e9d0daccbf6c9344d
|-
| gfx/dim_tcp.lmp  ||style=text-align:right|  3352 || 7dc8bbb01d7c90cd51c28da0ff6ed900
|-
| gfx/finale.lmp  ||style=text-align:right|  6920 || b6e49409d344e0344273d86ea33fe35f
|-
| gfx/help0.lmp  ||style=text-align:right|  64008 || b392ac30ad49252b51ec934ed855c20f
|-
| gfx/help1.lmp  ||style=text-align:right|  64008 || 857543c69245117a606044ea63adac9a
|-
| gfx/help2.lmp  ||style=text-align:right|  64008 || 882dd5920ea9c19f637f32084de9788a
|-
| gfx/help3.lmp  ||style=text-align:right|  64008 || a89d169524920d896128009467deebfc
|-
| gfx/help4.lmp  ||style=text-align:right|  64008 || c72d67c84ae6b403fae5f08d3e5c3bc6
|-
| gfx/help5.lmp  ||style=text-align:right|  64008 || 12203d7cdec35c4f51622dd90ec92093
|-
| gfx/inter.lmp  ||style=text-align:right|  23048 || f6eabe0d742380c7b47a9ee44170993d
|-
| gfx/loading.lmp  ||style=text-align:right|  3464 || 3249bc994266529a1748c06bfbb24bfa
|-
| gfx/mainmenu.lmp  ||style=text-align:right|  26888 || 8122e2a0b8888f9d1ebef149551b6434
|-
| gfx/menudot1.lmp  ||style=text-align:right|  392 || bfdb08d84d580abcfbacc1c9abd62bfb
|-
| gfx/menudot2.lmp  ||style=text-align:right|  392 || 6c6d2176e00edbe530bb1db118aaa6dc
|-
| gfx/menudot3.lmp  ||style=text-align:right|  392 || 2527a05f6162efb3e4bc5311d9e010d5
|-
| gfx/menudot4.lmp  ||style=text-align:right|  392 || 90ea6be033b39b139b3779932d266f33
|-
| gfx/menudot5.lmp  ||style=text-align:right|  392 || c9beb9600c35e458d0f83b6cf1e1c692
|-
| gfx/menudot6.lmp  ||style=text-align:right|  392 || 31b9a6ec1d12a2bd56b955185a9e72d3
|-
| gfx/menuplyr.lmp  ||style=text-align:right|  2696 || 9eebe617ff51c4ce43f85ca1a6920d5b
|-
| gfx/mp_menu.lmp  ||style=text-align:right|  14856 || c6416b8f7f5262a5a19b9ce4be1fd9ce
|-
| gfx/netmen1.lmp  ||style=text-align:right|  3352 || 5bc6a8d8cfdfd7e940e933812954367a
|-
| gfx/netmen2.lmp  ||style=text-align:right|  3352 || c8aafb649a653e90fc5eb7b7a2b3ca2e
|-
| gfx/netmen3.lmp  ||style=text-align:right|  3352 || 11c9372d0e64057a1ec8251f596b820d
|-
| gfx/netmen4.lmp  ||style=text-align:right|  3352 || 74ec672b1312699be2eeaf25a68e4582
|-
| gfx/netmen5.lmp  ||style=text-align:right|  3352 || 231f8a9ea4ba364f517db0e9f7f1ba72
|-
| gfx/palette.lmp  ||style=text-align:right|  768 || 79bc149d4f2fb0bd68cd8400a3fd87d4
|-
| gfx/pause.lmp  ||style=text-align:right|  3080 || 5aa67f927719e4a9eb3e020e75fea969
|-
| gfx/p_load.lmp  ||style=text-align:right|  2504 || 27fe08071058385529b0b8ad746421e7
|-
| gfx/p_multi.lmp  ||style=text-align:right|  5192 || 5a307c7d11da20a4772ad9c00b9f4309
|-
| gfx/p_option.lmp  ||style=text-align:right|  3464 || 83a3bf4459bce3fe85857a0aa647b90a
|-
| gfx/p_save.lmp  ||style=text-align:right|  2120 || 0d2bb5fa5524e0180a85bf273094cd1f
|-
| gfx/qplaque.lmp  ||style=text-align:right|  4616 || f4de79557c75e26b85ea84fb6029a5f3
|-
| gfx/ranking.lmp  ||style=text-align:right|  4040 || 919b13d1f7fdd0082ec0f94699f3b681
|-
| gfx/sell.lmp  ||style=text-align:right|  64008 || 878db3866e8b38c5b8d951aef516358c
|-
| gfx/sp_menu.lmp  ||style=text-align:right|  14856 || f624aa79778970ecb8ef518b5ab435f6
|-
| gfx/ttl_cstm.lmp  ||style=text-align:right|  4424 || 4ee84e0e7fa93f0e93d26efb1e726a4d
|-
| gfx/ttl_main.lmp  ||style=text-align:right|  2312 || 07e1c8e189e2463befcfc44f5ecf8dcb
|-
| gfx/ttl_sgl.lmp  ||style=text-align:right|  3080 || 25d5360228da738f091063eaeb7c6aa8
|-
| gfx/vidmodes.lmp  ||style=text-align:right|  5192 || 18a97f403057777f262188903f485fe8
|-
| gfx.wad  ||style=text-align:right|  112828 || cde5b5890c8902c02a2f271abe8f4a1f
|-
| maps/b_batt0.bsp  ||style=text-align:right|  5044 || 00bc989f4c8d2570a2826a63c7356a27
|-
| maps/b_batt1.bsp  ||style=text-align:right|  4620 || 555bc0cb0b5c2ad2ed0110f307e70679
|-
| maps/b_bh100.bsp  ||style=text-align:right|  8820 || 62f78bb5143265f037b79ddd077c50ed
|-
| maps/b_bh10.bsp  ||style=text-align:right|  3936 || e80cde9f185612f669fc100f825ca84f
|-
| maps/b_bh25.bsp  ||style=text-align:right|  8872 || 032d70dbf8669b3627b82b41f31488bd
|-
| maps/b_explob.bsp  ||style=text-align:right|  10220 || d8c9db3cfa0264678afc580143f665ea
|-
| maps/b_nail0.bsp  ||style=text-align:right|  5044 || c8d7ec0bdee74e0c1e69e8dbe939117d
|-
| maps/b_nail1.bsp  ||style=text-align:right|  5044 || ea08b2bd6aa19ece0307f75c491e5d24
|-
| maps/b_rock0.bsp  ||style=text-align:right|  2956 || 19ce64cd248a4459bf37b45e6e7c1219
|-
| maps/b_rock1.bsp  ||style=text-align:right|  2944 || b4cdb75094cd7218ed2b0475aefabe80
|-
| maps/b_shell0.bsp  ||style=text-align:right|  5044 || 574824b3c52661959d633a76dc823859
|-
| maps/b_shell1.bsp  ||style=text-align:right|  5044 || dc8b8dcb490e204e615b2b9cdc673296
|-
| maps/e1m1.bsp  ||style=text-align:right|  1365176 || 84cae48010619bcc945426b91bc03ade
|-
| maps/e1m2.bsp  ||style=text-align:right|  1332228 || caff91afbe41f3eac4dda65cee0083c9
|-
| maps/e1m3.bsp  ||style=text-align:right|  1249944 || f20eaa5692e94ab889c4ade9e1c116c7
|-
| maps/e1m4.bsp  ||style=text-align:right|  1411452 || 29419f05ef647f83d0482502bb3f84f8
|-
| maps/e1m5.bsp  ||style=text-align:right|  1324060 || afd98cc890d748986186951b32fc9fcb
|-
| maps/e1m6.bsp  ||style=text-align:right|  1065080 || ec178e54ff68c4d8cf71e26775b2eb2d
|-
| maps/e1m7.bsp  ||style=text-align:right|  607420 || 0c1f55455e0f957291e21d211b689718
|-
| maps/e1m8.bsp  ||style=text-align:right|  924116 || 18c7ab2f922d5d586150afbc27c323a4
|-
| maps/start.bsp  ||style=text-align:right|  1433792 || 61a57bb4ca36368478f02b142d1b5291
|-
| progs/armor.mdl  ||style=text-align:right|  44076 || ca060166d7e4e4686995f05645dde593
|-
| progs/backpack.mdl  ||style=text-align:right|  19348 || 315b4ef42fb035aa3318e8d2d61961ce
|-
| progs/bolt2.mdl  ||style=text-align:right|  11860 || f59ce07cfbe01fcfc578258c573d2c31
|-
| progs/bolt3.mdl  ||style=text-align:right|  11860 || ff87579a424faa59ca2695b7434ea488
|-
| progs/bolt.mdl  ||style=text-align:right|  20644 || a176903954e9d8c7ab629f92784546c2
|-
| progs/boss.mdl  ||style=text-align:right|  211836 || 25da3b2bc30677e32ee3a3a878a4d3af
|-
| progs.dat  ||style=text-align:right|  410616 || cb04964a1952169e03392ee83a9edb91
|-
| progs/demon.mdl  ||style=text-align:right|  102120 || 4c73786e7cfb2083ca38cbc983cd6c4b
|-
| progs/dog.mdl  ||style=text-align:right|  146056 || e727fbc39acc652f812972612ce37565
|-
| progs/end1.mdl  ||style=text-align:right|  20820 || 67c0fcab33d3772c00bb462b0e749275
|-
| progs/eyes.mdl  ||style=text-align:right|  4372 || ed72f64a17c6909b2cb3034a734bca97
|-
| progs/flame2.mdl  ||style=text-align:right|  64572 || f2c8f8950ebd7a0edded6247655d325b
|-
| progs/flame.mdl  ||style=text-align:right|  46364 || 8593c05374d84354d4444c218e86fdb8
|-
| progs/gib1.mdl  ||style=text-align:right|  5716 || f5c5b799e895dc03036522a487e99913
|-
| progs/gib2.mdl  ||style=text-align:right|  16228 || cfa9e97a3542852418123e0bb12e4f86
|-
| progs/gib3.mdl  ||style=text-align:right|  22228 || d73be7b2881e0a5aacf2b332ac29086f
|-
| progs/g_light.mdl  ||style=text-align:right|  50276 || 61bba06ec3804b7f355a62fd4585ad8f
|-
| progs/g_nail2.mdl  ||style=text-align:right|  30720 || ed6d7bb5ff050ad5f2bf4be7739a16a5
|-
| progs/g_nail.mdl  ||style=text-align:right|  34700 || e2959ca741c764dd42025ef531a1b554
|-
| progs/grenade.mdl  ||style=text-align:right|  2244 || f492d6257c216306983a72f41db0d891
|-
| progs/g_rock2.mdl  ||style=text-align:right|  40756 || 68c047c97bab89afe2cb69e65b7c62e1
|-
| progs/g_rock.mdl  ||style=text-align:right|  48244 || 61346f842944795e0821e31e3d61b427
|-
| progs/g_shot.mdl  ||style=text-align:right|  32916 || 7facfec1a3cfb892cce871f398e9cb6b
|-
| progs/h_demon.mdl  ||style=text-align:right|  34884 || 5253a0ea93d9624d73fb984ee339b52f
|-
| progs/h_dog.mdl  ||style=text-align:right|  24436 || a0b5f87522b3a769548c46cf3bb4223e
|-
| progs/h_guard.mdl  ||style=text-align:right|  5428 || 18a629b53b87392030df63b7806eb833
|-
| progs/h_knight.mdl  ||style=text-align:right|  7156 || 46a03fa72b0cdebcf58045aba2fafc13
|-
| progs/h_ogre.mdl  ||style=text-align:right|  14900 || 14eb06611c769e254d0531c05919bdf5
|-
| progs/h_player.mdl  ||style=text-align:right|  14708 || bf1773df7d3e19c5b211a1ee408f6b05
|-
| progs/h_shams.mdl  ||style=text-align:right|  37060 || ff1e04e18c57667991341a011fb6c363
|-
| progs/h_wizard.mdl  ||style=text-align:right|  14804 || 4bc6be40128f313cf9ad06c347310735
|-
| progs/h_zombie.mdl  ||style=text-align:right|  4484 || 0fdef7f7cd05a3209e0a163e87f69f8b
|-
| progs/invisibl.mdl  ||style=text-align:right|  7092 || 1e87d86af02e69db9c9f27f5fddc7a47
|-
| progs/invulner.mdl  ||style=text-align:right|  23920 || 8c8d83e4d50c3282d009b333a1280422
|-
| progs/knight.mdl  ||style=text-align:right|  101404 || 5328915db5c53e85cf75d46e7b747fb9
|-
| progs/lavaball.mdl  ||style=text-align:right|  8788 || 92af53d2145681e37877dbc1d12801b2
|-
| progs/m_g_key.mdl  ||style=text-align:right|  12820 || 192c2650a115c91706f6fa8fe68beb45
|-
| progs/missile.mdl  ||style=text-align:right|  57796 || 47f19f9e34954b93443c9759dd2e7ba0
|-
| progs/m_s_key.mdl  ||style=text-align:right|  12820 || 20837376b391cdd5c92e57b84e05687f
|-
| progs/ogre.mdl  ||style=text-align:right|  162036 || fbb592ca3788a576dd2f31fcf8c80fab
|-
| progs/player.mdl  ||style=text-align:right|  191852 || 405cef9a10d96cdabffb5e91312f8e5c
|-
| progs/quaddama.mdl  ||style=text-align:right|  39992 || 00b177ff272a4779097ea08344da8aff
|-
| progs/s_bubble.spr  ||style=text-align:right|  588 || 7c0887630ed468205292d8cb7abcae93
|-
| progs/s_explod.spr  ||style=text-align:right|  18972 || 766c6a92c26b54f68f7ff87c90d71cf2
|-
| progs/shambler.mdl  ||style=text-align:right|  98556 || 9b09375a0f614dc4081e363cc34f1185
|-
| progs/s_light.mdl  ||style=text-align:right|  27596 || ee6649ea5673989f3aa06213a8d65f76
|-
| progs/s_light.spr  ||style=text-align:right|  1080 || aff44ba238f4e1d0d504d6f9700aadb4
|-
| progs/soldier.mdl  ||style=text-align:right|  146288 || 5b6c30a984872b4273dd5861412d35c5
|-
| progs/spike.mdl  ||style=text-align:right|  1684 || be4cb73125f939284376080acc9887dd
|-
| progs/s_spike.mdl  ||style=text-align:right|  1684 || ebb1d58242b64a703623c8a33fcbd9e6
|-
| progs/suit.mdl  ||style=text-align:right|  51236 || 882a61f5eea7f9cdbc04800b963cef85
|-
| progs/v_axe.mdl  ||style=text-align:right|  57908 || 577dadcca2700068995c808dc7dec76f
|-
| progs/v_light.mdl  ||style=text-align:right|  56204 || 68733d4c690de88b5c3ba33e52be1c15
|-
| progs/v_nail2.mdl  ||style=text-align:right|  68732 || aacd1002ab02662cc1d3ff46885b553e
|-
| progs/v_nail.mdl  ||style=text-align:right|  54472 || ec9ba028b346da2f9674c2a521ff0c2f
|-
| progs/v_rock2.mdl  ||style=text-align:right|  58188 || 96edf1a3c7629987c200361523f780d7
|-
| progs/v_rock.mdl  ||style=text-align:right|  58548 || 7bea46b2a75fd7cff2fb99420e4c4e25
|-
| progs/v_shot2.mdl  ||style=text-align:right|  50816 || 922b3b687766ae0d7aeb73d44dec7035
|-
| progs/v_shot.mdl  ||style=text-align:right|  43852 || 1fd140b6856843e83cd9bf3966f5d7dd
|-
| progs/w_g_key.mdl  ||style=text-align:right|  7252 || c5c5f0d14b022f57294ad9aded318250
|-
| progs/wizard.mdl  ||style=text-align:right|  64472 || bf60986594f045e60e8aa6339d553ee7
|-
| progs/w_s_key.mdl  ||style=text-align:right|  7252 || ec02314a7d12439d36b4eb2dd0a641a8
|-
| progs/w_spike.mdl  ||style=text-align:right|  14336 || 8cf9245df2164e8062b01a220b508d6b
|-
| progs/zombie.mdl  ||style=text-align:right|  186084 || a923b1d03b9d237dd5ead9bd56acc900
|-
| progs/zom_gib.mdl  ||style=text-align:right|  10196 || cf42c938caa5b19f719d1f110b1dc6d4
|-
| quake.rc  ||style=text-align:right|  293 || 411d42958aaeae141813f9ebfcf5233f
|-
| sound/ambience/buzz1.wav  ||style=text-align:right|  36308 || 346a00c795c6f1f1338ade6fc350b3fe
|-
| sound/ambience/comp1.wav  ||style=text-align:right|  62734 || f91a1120de804f7cd4dbba4f12c748e9
|-
| sound/ambience/drip1.wav  ||style=text-align:right|  137736 || 2306a76162eeda3d0812c516bc99aa7a
|-
| sound/ambience/drone6.wav  ||style=text-align:right|  18522 || 322853ddb42ad2a205579b5cca8e2e8c
|-
| sound/ambience/fire1.wav  ||style=text-align:right|  24064 || 610d3985ed8133988e8de3bec2b9cbbe
|-
| sound/ambience/fl_hum1.wav  ||style=text-align:right|  50154 || e4628499702e004c4bacd282a3ecb8c0
|-
| sound/ambience/hum1.wav  ||style=text-align:right|  40166 || 486bfa737c35b0c9dda57cbee2a540af
|-
| sound/ambience/suck1.wav  ||style=text-align:right|  110392 || 2e99e4d1fe1501d5191c8157d3063cb6
|-
| sound/ambience/swamp1.wav  ||style=text-align:right|  68524 || 29ffb678d78997eb6c227677c86ea4f8
|-
| sound/ambience/swamp2.wav  ||style=text-align:right|  68526 || 356aa1e875da846e72d8f17bbb699a5b
|-
| sound/ambience/thunder1.wav  ||style=text-align:right|  41492 || cefd6ced4b5bc79fcece1003238566f6
|-
| sound/ambience/water1.wav  ||style=text-align:right|  55784 || 6eeaae0a3450652d2be0782895297ee4
|-
| sound/ambience/wind2.wav  ||style=text-align:right|  28610 || 030cf8dd2b00a12454b5b35a89d03914
|-
| sound/ambience/windfly.wav  ||style=text-align:right|  22140 || c7be01e6d324e66883f70aa0072a99b0
|-
| sound/boss1/death.wav  ||style=text-align:right|  27600 || 43469b1acd35b67107da5da82e1df911
|-
| sound/boss1/out1.wav  ||style=text-align:right|  50344 || 847a6f971f6905dfaffd70b30d18a4b1
|-
| sound/boss1/pain.wav  ||style=text-align:right|  17700 || 49112740c0ff421f9272b9e8efc748cd
|-
| sound/boss1/sight1.wav  ||style=text-align:right|  24768 || 427dd600e6b28c9402212adcc5d652c7
|-
| sound/boss1/throw.wav  ||style=text-align:right|  11526 || 9b6e9ff2c8df448f7fd4b5315e60ddda
|-
| sound/buttons/airbut1.wav  ||style=text-align:right|  10672 || 9d2e14e7176842a0dce909a43d38873d
|-
| sound/buttons/switch02.wav  ||style=text-align:right|  3746 || d2e9cba3a353edc65115f6f5c574403c
|-
| sound/buttons/switch04.wav  ||style=text-align:right|  3666 || ff47857a58d3faefb2b94a37d7ba4f26
|-
| sound/buttons/switch21.wav  ||style=text-align:right|  6318 || 3605b0d061a9baf185c6ab7614534531
|-
| sound/demon/ddeath.wav  ||style=text-align:right|  9140 || 62a48dcd405ca55c9ce18497e36faa0e
|-
| sound/demon/dhit2.wav  ||style=text-align:right|  7142 || 9e741696e4d0d66e30e718fc70ec186e
|-
| sound/demon/djump.wav  ||style=text-align:right|  8494 || 791ac9d6b6593808316145443cb7e7a0
|-
| sound/demon/dland2.wav  ||style=text-align:right|  4400 || db14c7b01838f826b7a712075f9026fd
|-
| sound/demon/dpain1.wav  ||style=text-align:right|  6282 || 5e6c485878393c9bebb0d0e6659bc479
|-
| sound/demon/idle1.wav  ||style=text-align:right|  9098 || 7a83f8caf3d5b1172a7dc5afdc942988
|-
| sound/demon/sight2.wav  ||style=text-align:right|  8804 || 65171c355c22a5069520b0881677ae3c
|-
| sound/dog/dattack1.wav  ||style=text-align:right|  8154 || 0c47c9d4aaae0bf3159a288b674f4a35
|-
| sound/dog/ddeath.wav  ||style=text-align:right|  14912 || b0e7760b1d7286a028ff9773f6802958
|-
| sound/dog/dpain1.wav  ||style=text-align:right|  7240 || 28e5ab93b41e13e2916433283a5d1a46
|-
| sound/dog/dsight.wav  ||style=text-align:right|  6722 || 0edc290765bac1fb4fe03ca55bc7c225
|-
| sound/dog/idle.wav  ||style=text-align:right|  6870 || 42bd6026ff32bd94523ad9f8fe8362cc
|-
| sound/doors/airdoor1.wav  ||style=text-align:right|  13654 || 9b91930e8c2fdece31a2362296891122
|-
| sound/doors/airdoor2.wav  ||style=text-align:right|  8594 || 29fd823d1c14ca42a9a89c716b26f4cd
|-
| sound/doors/basesec1.wav  ||style=text-align:right|  13930 || eb2363fed42724f55e8f55f96c335bcf
|-
| sound/doors/basesec2.wav  ||style=text-align:right|  10238 || 8d163a56607c9cf64a270a156c1c5cef
|-
| sound/doors/basetry.wav  ||style=text-align:right|  10518 || a5108d5c51281ab55c0baf884cbe8cbe
|-
| sound/doors/baseuse.wav  ||style=text-align:right|  16486 || f43fee91efe813a5eb34e9d72918fdb9
|-
| sound/doors/ddoor1.wav  ||style=text-align:right|  7738 || dff86a26139cdd49a193d5ed7ebf6ae1
|-
| sound/doors/ddoor2.wav  ||style=text-align:right|  5904 || 4a9d0b0825d0302ce465569d1e35fbcf
|-
| sound/doors/doormv1.wav  ||style=text-align:right|  14036 || 3fd379aec80a2ad8105c0c89ba5b40e6
|-
| sound/doors/drclos4.wav  ||style=text-align:right|  12814 || 83df1865a0c9fa5d02c2f137564c57de
|-
| sound/doors/hydro1.wav  ||style=text-align:right|  11094 || b1703980a20e624bc3366ccf55ca617e
|-
| sound/doors/hydro2.wav  ||style=text-align:right|  10700 || b1866f5b3950788ccf4206444ab64bc7
|-
| sound/doors/latch2.wav  ||style=text-align:right|  7338 || ad2378ca21a0ca529df328261e07aed5
|-
| sound/doors/medtry.wav  ||style=text-align:right|  7828 || ebb536bec2cdfd22c25b35793c055339
|-
| sound/doors/meduse.wav  ||style=text-align:right|  10718 || 4522aada194b23eb33b541cbcc755cf6
|-
| sound/doors/runetry.wav  ||style=text-align:right|  13524 || c433bae9e2ab508712f87dc2cacc82c8
|-
| sound/doors/runeuse.wav  ||style=text-align:right|  17364 || b4bcfd525a26f5b5ecc9d392430d9079
|-
| sound/doors/stndr1.wav  ||style=text-align:right|  12620 || 5bae2183885e18d65d69624e85249fd9
|-
| sound/doors/stndr2.wav  ||style=text-align:right|  11470 || f43a75c917effff09ef7be8a321c8b49
|-
| sound/doors/winch2.wav  ||style=text-align:right|  14872 || a4edffdfede7dbaed37db526c26e2b6d
|-
| sound/hknight/hit.wav  ||style=text-align:right|  6260 || fece24e2548f1d769e8fce39a5c87d01
|-
| sound/items/armor1.wav  ||style=text-align:right|  7714 || 186d29f2baf35b8c280bc97754606fad
|-
| sound/items/damage2.wav  ||style=text-align:right|  33012 || 14e53b7617ffe315a7c3f8d89652e51c
|-
| sound/items/damage3.wav  ||style=text-align:right|  12894 || baf754aec7ed4baba16760ac85513184
|-
| sound/items/damage.wav  ||style=text-align:right|  23374 || 8cde8b9278ca4922a4ec7ead6e5ee01b
|-
| sound/items/health1.wav  ||style=text-align:right|  7958 || 52a2c4f808db4edd8393de0de618c91f
|-
| sound/items/inv1.wav  ||style=text-align:right|  13728 || 5850cab55d6197d0e76d9f0a22ba10be
|-
| sound/items/inv2.wav  ||style=text-align:right|  33216 || 4edcd38a2c6adc5305636dd7afd5ef60
|-
| sound/items/inv3.wav  ||style=text-align:right|  33320 || 325c268be05b42a019ccb92e6993ab9e
|-
| sound/items/itembk2.wav  ||style=text-align:right|  9910 || 270c688b3cb884f5d4e5ffd8ccc934a1
|-
| sound/items/protect2.wav  ||style=text-align:right|  34012 || 25627a4bd2b4c6054cfd2fc4bf69ddc2
|-
| sound/items/protect3.wav  ||style=text-align:right|  23364 || 7b9374d67f6d59e524bba2af236ca30a
|-
| sound/items/protect.wav  ||style=text-align:right|  22536 || d839d5a84f811ce8a0e28616891bf1a7
|-
| sound/items/r_item1.wav  ||style=text-align:right|  6822 || 3fc0d0ae4a71c9fbfe548f38626c6a08
|-
| sound/items/r_item2.wav  ||style=text-align:right|  7448 || 384ffefe795d99df75f381596a0f1976
|-
| sound/items/suit2.wav  ||style=text-align:right|  33254 || 0a9d2766a5b805cb5794f9bea57e6585
|-
| sound/items/suit.wav  ||style=text-align:right|  15854 || da413f34023d219f1e34fde50a037be0
|-
| sound/knight/idle.wav  ||style=text-align:right|  11064 || 1b5c3981bee078318af346d8fe8090b9
|-
| sound/knight/kdeath.wav  ||style=text-align:right|  10688 || 11a96f48a8f2433c23beae299c8fb96e
|-
| sound/knight/khurt.wav  ||style=text-align:right|  5586 || 32c9f48dd4a6a87752aedf56fe8de668
|-
| sound/knight/ksight.wav  ||style=text-align:right|  13514 || eb75b4af348c88e84d8c87c19d5976fa
|-
| sound/knight/sword1.wav  ||style=text-align:right|  2306 || 93045b5f3178413dc6b01ec2869d1f73
|-
| sound/knight/sword2.wav  ||style=text-align:right|  2784 || 82d1a7c263cd3df7b060dee2f7f8b1fd
|-
| sound/misc/h2ohit1.wav  ||style=text-align:right|  12972 || 49ecb03f4f10862453656a67598f8b8a
|-
| sound/misc/medkey.wav  ||style=text-align:right|  10020 || 0e3ae5626a47d81e4166539e355e31bb
|-
| sound/misc/menu1.wav  ||style=text-align:right|  5738 || 12c36546601c385bc47c9ca9420b7eee
|-
| sound/misc/menu2.wav  ||style=text-align:right|  10672 || 39b01ea6feb3ec8dbd6d8ee3e5e966c4
|-
| sound/misc/menu3.wav  ||style=text-align:right|  3010 || 4a03dc2fd56831b855dab761eac4f7de
|-
| sound/misc/null.wav  ||style=text-align:right|  1244 || 811989e09124f54cb27fe6154b0f1018
|-
| sound/misc/outwater.wav  ||style=text-align:right|  5018 || 35732412412ddb5ed418633bb0123bbe
|-
| sound/misc/power.wav  ||style=text-align:right|  19832 || 9f2c3a18d9fc8d9cecfac6db3aad6bc6
|-
| sound/misc/r_tele1.wav  ||style=text-align:right|  8036 || c2194171b4c446e136ed7514fbb098a5
|-
| sound/misc/r_tele2.wav  ||style=text-align:right|  17324 || 0ce662ac90fb3658d69320d1be4025c1
|-
| sound/misc/r_tele3.wav  ||style=text-align:right|  18016 || 122ef44813edcfe7391578fd29e729d2
|-
| sound/misc/r_tele4.wav  ||style=text-align:right|  9068 || 0097b5747ccc70d5b12fc6838aff02c2
|-
| sound/misc/r_tele5.wav  ||style=text-align:right|  22042 || a82334cbb66d12f28cce9e71c90ea50b
|-
| sound/misc/runekey.wav  ||style=text-align:right|  14578 || 6b21a2e5878011da50fdee0a301d3e34
|-
| sound/misc/secret.wav  ||style=text-align:right|  6610 || a02ceefcc24b1ebf5c164a1e1acfb05f
|-
| sound/misc/talk.wav  ||style=text-align:right|  1810 || d5b25d4df59d92ac5016e88689ea60c1
|-
| sound/misc/trigger1.wav  ||style=text-align:right|  20230 || dc927c8a1d0a9bd59fbc5dd91ae1d812
|-
| sound/misc/water1.wav  ||style=text-align:right|  3926 || d8291c762acb1edf24927fdcc0f6a6cd
|-
| sound/misc/water2.wav  ||style=text-align:right|  3340 || 049e8e7e7b30d4d8038afb7248bdd977
|-
| sound/ogre/ogdrag.wav  ||style=text-align:right|  12396 || 658587dc89aaefae5ca3f058f7ff4227
|-
| sound/ogre/ogdth.wav  ||style=text-align:right|  13892 || de98e7bb9e70586edddd3308cfded3db
|-
| sound/ogre/ogidle2.wav  ||style=text-align:right|  11254 || 196ae9c33a4311160e1d5f3da878ab09
|-
| sound/ogre/ogidle.wav  ||style=text-align:right|  12894 || 177c829840a87c885bbc8951e7ce962e
|-
| sound/ogre/ogpain1.wav  ||style=text-align:right|  7898 || ac6d133d7720c12df49813fe10e683b5
|-
| sound/ogre/ogsawatk.wav  ||style=text-align:right|  16154 || 7257bdfd014bb61d778b8f88cb65d560
|-
| sound/ogre/ogwake.wav  ||style=text-align:right|  19356 || 3296459e495c4c12b31179d4eeffac19
|-
| sound/plats/medplat1.wav  ||style=text-align:right|  16378 || b73215aa6627c8b5b90fce8d260d48d0
|-
| sound/plats/medplat2.wav  ||style=text-align:right|  7338 || 1fc6c3772917a1a8155d04fa52e17005
|-
| sound/plats/plat1.wav  ||style=text-align:right|  20248 || 5d43ed85d896ba926f459e06ba6635d5
|-
| sound/plats/plat2.wav  ||style=text-align:right|  7338 || 49d7ab0fd726cd652eb6e5756fce61b9
|-
| sound/plats/train1.wav  ||style=text-align:right|  21430 || b589ae8262046361d9dca39d6b8f693a
|-
| sound/plats/train2.wav  ||style=text-align:right|  5870 || 640017e1b870d643e3bca29d499c72ee
|-
| sound/player/axhit1.wav  ||style=text-align:right|  6906 || 149b2371334da318386325182924eaca
|-
| sound/player/axhit2.wav  ||style=text-align:right|  2434 || fc01909318455f5310efa2457a370897
|-
| sound/player/death1.wav  ||style=text-align:right|  10170 || ba005f5488d4ee78dabf613a03f33a5f
|-
| sound/player/death2.wav  ||style=text-align:right|  8026 || 20477d2e7c84aac1bef95d32c9c702dd
|-
| sound/player/death3.wav  ||style=text-align:right|  10918 || 7b206ba8e1fa28d8605b50e3f3200f11
|-
| sound/player/death4.wav  ||style=text-align:right|  14126 || 1b0f27f4d41b748d3cc5c3d56bd917f8
|-
| sound/player/death5.wav  ||style=text-align:right|  14946 || 7efe84195cfa97515aad2d7f96f25346
|-
| sound/player/drown1.wav  ||style=text-align:right|  8908 || 732f0416af6990e028110380bcb36f0d
|-
| sound/player/drown2.wav  ||style=text-align:right|  3114 || 29ee1f287879acce29b15d4722668bc2
|-
| sound/player/gasp1.wav  ||style=text-align:right|  8702 || b06cbc370c8c2c163dc4d487e8b673c7
|-
| sound/player/gasp2.wav  ||style=text-align:right|  13134 || 30aece9d8779764620c7f866bfb06edb
|-
| sound/player/gib.wav  ||style=text-align:right|  14424 || 26fa9942078125388f34b71546615068
|-
| sound/player/h2odeath.wav  ||style=text-align:right|  18104 || 73b0f4dfae07f6e49112cadfe202735c
|-
| sound/player/h2ojump.wav  ||style=text-align:right|  11438 || cd421b96410971bb1a4f21d3936a3805
|-
| sound/player/inh2o.wav  ||style=text-align:right|  11340 || d4c1a27c4d07e8dfdf18a4b1a880c610
|-
| sound/player/inlava.wav  ||style=text-align:right|  10958 || c37875a082900716b7af88d2d990f55c
|-
| sound/player/land2.wav  ||style=text-align:right|  6204 || 6ba534256a779d66d9d9dabb90e63c8b
|-
| sound/player/land.wav  ||style=text-align:right|  2434 || e34328a40358d98f0f95403b9e27ec1e
|-
| sound/player/lburn1.wav  ||style=text-align:right|  6682 || 3c447c72385defe97c060771077d8ba0
|-
| sound/player/lburn2.wav  ||style=text-align:right|  6076 || 6849ee8dbd91ec82ece016fbd39b0a5c
|-
| sound/player/pain1.wav  ||style=text-align:right|  3394 || d7ac9df7540b791f952ca2a681c0265b
|-
| sound/player/pain2.wav  ||style=text-align:right|  2710 || 513e054b64d4fb61f31384d59e123020
|-
| sound/player/pain3.wav  ||style=text-align:right|  4854 || aafc61ad4e16cc5cdd2db2100796b494
|-
| sound/player/pain4.wav  ||style=text-align:right|  4840 || f655ef2045bc55473303b27546aa6fc0
|-
| sound/player/pain5.wav  ||style=text-align:right|  8020 || f8551a73cb89396042687baa8c68b5c2
|-
| sound/player/pain6.wav  ||style=text-align:right|  5462 || 70062eabf96288d307280fb601ce0ee2
|-
| sound/player/plyrjmp8.wav  ||style=text-align:right|  3888 || d4a552d8f627c7f3b933568c4a74c913
|-
| sound/player/slimbrn2.wav  ||style=text-align:right|  12468 || b17c18a9f81a952f2d41f65b5180f210
|-
| sound/player/teledth1.wav  ||style=text-align:right|  14414 || c226c7f041187ba058d8112cc0190b56
|-
| sound/player/tornoff2.wav  ||style=text-align:right|  7726 || 03ec1c805b307b8fe4c4052f8332a5e5
|-
| sound/player/udeath.wav  ||style=text-align:right|  16082 || afe674f287efb6197da2cea0c0b1d2f8
|-
| sound/shambler/melee1.wav  ||style=text-align:right|  4718 || 77fe6240973a204b757a427ebf66bcfd
|-
| sound/shambler/melee2.wav  ||style=text-align:right|  5966 || 3be31638d769e3d690c92311dfafdeac
|-
| sound/shambler/sattck1.wav  ||style=text-align:right|  8036 || ec8c3f79ea42d09154cb8975ada1b21c
|-
| sound/shambler/sboom.wav  ||style=text-align:right|  11672 || 9834601a645d7d1f62001b2a314ec18f
|-
| sound/shambler/sdeath.wav  ||style=text-align:right|  21106 || e0e62d229a985a6e39218c6488599059
|-
| sound/shambler/shurt2.wav  ||style=text-align:right|  4302 || 1e87631ede95e061a75f9c31629ac0b8
|-
| sound/shambler/sidle.wav  ||style=text-align:right|  5646 || 368a240e6c3e877793352a79c1828386
|-
| sound/shambler/smack.wav  ||style=text-align:right|  5300 || bd8c634c9894348360fec7b7419d1649
|-
| sound/shambler/ssight.wav  ||style=text-align:right|  15420 || 657107577460d5acf3157dec97e07a89
|-
| sound/soldier/death1.wav  ||style=text-align:right|  8434 || fe25952af40b536c3bb67bfca58062eb
|-
| sound/soldier/idle.wav  ||style=text-align:right|  9802 || 4cdfbdda8fb5f40b125c7bcddb6e8914
|-
| sound/soldier/pain1.wav  ||style=text-align:right|  5000 || 54d3b05fdcecf7480034858f2b22b06c
|-
| sound/soldier/pain2.wav  ||style=text-align:right|  7838 || e2bbc9d3405b9b9fdae76d2fc298fc2f
|-
| sound/soldier/sattck1.wav  ||style=text-align:right|  14302 || b76ac35f900f280a7a7996da7e404362
|-
| sound/soldier/sight1.wav  ||style=text-align:right|  12716 || e2a39533250ddd1b08053d5c4ebf7fd0
|-
| sound/weapons/ax1.wav  ||style=text-align:right|  3308 || 237d4d819d02ad37849a8a895cc410e1
|-
| sound/weapons/bounce.wav  ||style=text-align:right|  5864 || fced668c6558a9505abf5014d60528a6
|-
| sound/weapons/grenade.wav  ||style=text-align:right|  8364 || d2b6fa131933f203eba2a282276e88df
|-
| sound/weapons/guncock.wav  ||style=text-align:right|  14430 || 6a63452167cc106e756518536446844f
|-
| sound/weapons/lhit.wav  ||style=text-align:right|  26028 || fefd021d0bd35a1f8da8870f1c06abb9
|-
| sound/weapons/lock4.wav  ||style=text-align:right|  3876 || 3fd93222258d5b1500b150f021c94519
|-
| sound/weapons/lstart.wav  ||style=text-align:right|  56378 || abe1abf6dcadcda5930b0684c7ea820a
|-
| sound/weapons/pkup.wav  ||style=text-align:right|  5174 || 0aa6f0a7d609e1a56fd535a06d1bb56e
|-
| sound/weapons/r_exp3.wav  ||style=text-align:right|  17478 || 57db026474fc76ba7f38cea24eaaf8cf
|-
| sound/weapons/ric1.wav  ||style=text-align:right|  4308 || a31166b4bbb4509ac3004a01f7477ee9
|-
| sound/weapons/ric2.wav  ||style=text-align:right|  10838 || a180b447c0527e603cea54a9aefd6139
|-
| sound/weapons/ric3.wav  ||style=text-align:right|  12638 || 8a773bbb585540ddce256151162f3a2c
|-
| sound/weapons/rocket1i.wav  ||style=text-align:right|  9660 || fb4fdf345d805cf6980c4c695974effc
|-
| sound/weapons/sgun1.wav  ||style=text-align:right|  22992 || 95a14815e48deb323d0cf8251d728ac7
|-
| sound/weapons/shotgn2.wav  ||style=text-align:right|  8694 || cb561cefbf472232334b419af050e5a0
|-
| sound/weapons/spike2.wav  ||style=text-align:right|  12642 || 9189d811855f108da4a1e2d34dc7c633
|-
| sound/weapons/tink1.wav  ||style=text-align:right|  1252 || 297ba8706625fcf05887edb393e9a441
|-
| sound/wizard/hit.wav  ||style=text-align:right|  7332 || 6598d669334df977f1f97b95288edf11
|-
| sound/wizard/wattack.wav  ||style=text-align:right|  25912 || b3568a47439f81779d40335e76f5bc2d
|-
| sound/wizard/wdeath.wav  ||style=text-align:right|  20684 || 99d9c71343bc23222abb92119d404400
|-
| sound/wizard/widle1.wav  ||style=text-align:right|  13464 || b22b1dd9f66879b3447d36ab584316c7
|-
| sound/wizard/widle2.wav  ||style=text-align:right|  23094 || 7178fd83df227360564adef01bed92c6
|-
| sound/wizard/wpain.wav  ||style=text-align:right|  8686 || bd7e59ab7d7b835f9ed8ab51950914de
|-
| sound/wizard/wsight.wav  ||style=text-align:right|  13078 || df5949057c750528917c6cb32b7fd9fd
|-
| sound/zombie/idle_w2.wav  ||style=text-align:right|  17192 || d2bb59b9d7ac71097c07123a23525641
|-
| sound/zombie/z_fall.wav  ||style=text-align:right|  3062 || 6968318b2d196c6d54bc707d8a390547
|-
| sound/zombie/z_gib.wav  ||style=text-align:right|  16226 || 199dda66ade8d6f0ef4897e4d7608c0d
|-
| sound/zombie/z_hit.wav  ||style=text-align:right|  6166 || 6c66ab3e6b149bf35956a4bbc0057acb
|-
| sound/zombie/z_idle1.wav  ||style=text-align:right|  13244 || 21088a7b38b1124d7ec72e58d5ab93a6
|-
| sound/zombie/z_idle.wav  ||style=text-align:right|  16734 || e5e570e38c4405111004190a79f0e925
|-
| sound/zombie/z_miss.wav  ||style=text-align:right|  10734 || 96fad96a8c3bc6f7bcc5da6c82678da2
|-
| sound/zombie/z_pain1.wav  ||style=text-align:right|  15374 || fcd83b89a94b0cadbe1361a4df080ec0
|-
| sound/zombie/z_pain.wav  ||style=text-align:right|  12218 || 56637968b8309bd2f825153330bbdfc0
|-
| sound/zombie/z_shot1.wav  ||style=text-align:right|  3068 || 561afb69b7851923a8fb3b54e3e13c96
|-
|}
&lt;/tt&gt;

=== 5906e5998fc3d896ddaf5e6a62e03abb ===
The [[id1]] ''pak0.pak'' with the md5sum 5906e5998fc3d896ddaf5e6a62e03abb contains the following folders &amp; files:
&lt;tt&gt;
{| class=&quot;wikitable collapsible collapsed&quot;
! Path !! Size !! md5
|-
| default.cfg  ||style=text-align:right|  1914 || fc989b37572fae074e8ffda0ce4d5297
|-
| demo1.dem  ||style=text-align:right|  184471 || 85ec0141ab24d9732e487d1aafa791f0
|-
| demo2.dem  ||style=text-align:right|  152705 || fa5c3daf7a57954cd95f94b698a7e420
|-
| demo3.dem  ||style=text-align:right|  197679 || 691f37e5715ea2863c1d8092a6429824
|-
| end1.bin  ||style=text-align:right|  4000 || 92ae51961ec2f429dfe9bea1138fbd5d
|-
| gfx/bigbox.lmp  ||style=text-align:right|  5192 || e597771ac6149b2b071ebfd24981ea04
|-
| gfx/box_bl.lmp  ||style=text-align:right|  72 || 5b094c37c2c1c2eebe37f84117dea182
|-
| gfx/box_bm.lmp  ||style=text-align:right|  136 || 44621236738e2bf8d669e53dca887278
|-
| gfx/box_br.lmp  ||style=text-align:right|  72 || 86597d5325b472caf5644644033e5cab
|-
| gfx/box_ml.lmp  ||style=text-align:right|  72 || adcea286ba0ac01084fd0c131b16ffdd
|-
| gfx/box_mm2.lmp  ||style=text-align:right|  136 || b850bcec189d909e7a0f796111a11249
|-
| gfx/box_mm.lmp  ||style=text-align:right|  136 || 700b4884b1a3c6aa7356a43014261866
|-
| gfx/box_mr.lmp  ||style=text-align:right|  72 || e30d9ea783ef7dd50101682f03ba40d7
|-
| gfx/box_tl.lmp  ||style=text-align:right|  72 || 3903d3d814e37c55790ac0ccfef2b925
|-
| gfx/box_tm.lmp  ||style=text-align:right|  136 || 7cb85ccbf8e7d2532da2a839a7cef348
|-
| gfx/box_tr.lmp  ||style=text-align:right|  72 || 5c5e72746af821a4cf8437d8fecc53c7
|-
| gfx/colormap.lmp  ||style=text-align:right|  16385 || 0d793b70bffafbd666fc5c88d6e15e9d
|-
| gfx/complete.lmp  ||style=text-align:right|  4616 || db6a00dfbe2c62a43c261e5622297c4a
|-
| gfx/conback.lmp  ||style=text-align:right|  64008 || 9eb6f9c47870bf42985d9382958a5c12
|-
| gfx/dim_drct.lmp  ||style=text-align:right|  3352 || 50ea11fe8c4d9db92863bdcd03b89df5
|-
| gfx/dim_ipx.lmp  ||style=text-align:right|  3352 || 0bef9943487f0611225bf0a5c0fe5dd4
|-
| gfx/dim_modm.lmp  ||style=text-align:right|  3352 || 3288f03144f06b95cadafa9458a77b1d
|-
| gfx/dim_mult.lmp  ||style=text-align:right|  3352 || 348b7369227f2d7e9d0daccbf6c9344d
|-
| gfx/dim_tcp.lmp  ||style=text-align:right|  3352 || 7dc8bbb01d7c90cd51c28da0ff6ed900
|-
| gfx/finale.lmp  ||style=text-align:right|  6920 || b6e49409d344e0344273d86ea33fe35f
|-
| gfx/help0.lmp  ||style=text-align:right|  64008 || b392ac30ad49252b51ec934ed855c20f
|-
| gfx/help1.lmp  ||style=text-align:right|  64008 || 857543c69245117a606044ea63adac9a
|-
| gfx/help2.lmp  ||style=text-align:right|  64008 || 882dd5920ea9c19f637f32084de9788a
|-
| gfx/help3.lmp  ||style=text-align:right|  64008 || a89d169524920d896128009467deebfc
|-
| gfx/help4.lmp  ||style=text-align:right|  64008 || c72d67c84ae6b403fae5f08d3e5c3bc6
|-
| gfx/help5.lmp  ||style=text-align:right|  64008 || 12203d7cdec35c4f51622dd90ec92093
|-
| gfx/inter.lmp  ||style=text-align:right|  23048 || f6eabe0d742380c7b47a9ee44170993d
|-
| gfx/loading.lmp  ||style=text-align:right|  3464 || 3249bc994266529a1748c06bfbb24bfa
|-
| gfx/mainmenu.lmp  ||style=text-align:right|  26888 || 8122e2a0b8888f9d1ebef149551b6434
|-
| gfx/menudot1.lmp  ||style=text-align:right|  392 || bfdb08d84d580abcfbacc1c9abd62bfb
|-
| gfx/menudot2.lmp  ||style=text-align:right|  392 || 6c6d2176e00edbe530bb1db118aaa6dc
|-
| gfx/menudot3.lmp  ||style=text-align:right|  392 || 2527a05f6162efb3e4bc5311d9e010d5
|-
| gfx/menudot4.lmp  ||style=text-align:right|  392 || 90ea6be033b39b139b3779932d266f33
|-
| gfx/menudot5.lmp  ||style=text-align:right|  392 || c9beb9600c35e458d0f83b6cf1e1c692
|-
| gfx/menudot6.lmp  ||style=text-align:right|  392 || 31b9a6ec1d12a2bd56b955185a9e72d3
|-
| gfx/menuplyr.lmp  ||style=text-align:right|  2696 || 9eebe617ff51c4ce43f85ca1a6920d5b
|-
| gfx/mp_menu.lmp  ||style=text-align:right|  14856 || c6416b8f7f5262a5a19b9ce4be1fd9ce
|-
| gfx/netmen1.lmp  ||style=text-align:right|  3352 || 5bc6a8d8cfdfd7e940e933812954367a
|-
| gfx/netmen2.lmp  ||style=text-align:right|  3352 || c8aafb649a653e90fc5eb7b7a2b3ca2e
|-
| gfx/netmen3.lmp  ||style=text-align:right|  3352 || 11c9372d0e64057a1ec8251f596b820d
|-
| gfx/netmen4.lmp  ||style=text-align:right|  3352 || 74ec672b1312699be2eeaf25a68e4582
|-
| gfx/netmen5.lmp  ||style=text-align:right|  3352 || 231f8a9ea4ba364f517db0e9f7f1ba72
|-
| gfx/palette.lmp  ||style=text-align:right|  768 || 79bc149d4f2fb0bd68cd8400a3fd87d4
|-
| gfx/pause.lmp  ||style=text-align:right|  3080 || 5aa67f927719e4a9eb3e020e75fea969
|-
| gfx/p_load.lmp  ||style=text-align:right|  2504 || 27fe08071058385529b0b8ad746421e7
|-
| gfx/p_multi.lmp  ||style=text-align:right|  5192 || 5a307c7d11da20a4772ad9c00b9f4309
|-
| gfx/p_option.lmp  ||style=text-align:right|  3464 || 83a3bf4459bce3fe85857a0aa647b90a
|-
| gfx/p_save.lmp  ||style=text-align:right|  2120 || 0d2bb5fa5524e0180a85bf273094cd1f
|-
| gfx/qplaque.lmp  ||style=text-align:right|  4616 || f4de79557c75e26b85ea84fb6029a5f3
|-
| gfx/ranking.lmp  ||style=text-align:right|  4040 || 919b13d1f7fdd0082ec0f94699f3b681
|-
| gfx/sell.lmp  ||style=text-align:right|  64008 || 878db3866e8b38c5b8d951aef516358c
|-
| gfx/sp_menu.lmp  ||style=text-align:right|  14856 || f624aa79778970ecb8ef518b5ab435f6
|-
| gfx/ttl_cstm.lmp  ||style=text-align:right|  4424 || 4ee84e0e7fa93f0e93d26efb1e726a4d
|-
| gfx/ttl_main.lmp  ||style=text-align:right|  2312 || 07e1c8e189e2463befcfc44f5ecf8dcb
|-
| gfx/ttl_sgl.lmp  ||style=text-align:right|  3080 || 25d5360228da738f091063eaeb7c6aa8
|-
| gfx/vidmodes.lmp  ||style=text-align:right|  5192 || 18a97f403057777f262188903f485fe8
|-
| gfx.wad  ||style=text-align:right|  112828 || cde5b5890c8902c02a2f271abe8f4a1f
|-
| maps/b_batt0.bsp  ||style=text-align:right|  5044 || 00bc989f4c8d2570a2826a63c7356a27
|-
| maps/b_batt1.bsp  ||style=text-align:right|  4620 || 555bc0cb0b5c2ad2ed0110f307e70679
|-
| maps/b_bh100.bsp  ||style=text-align:right|  8820 || 62f78bb5143265f037b79ddd077c50ed
|-
| maps/b_bh10.bsp  ||style=text-align:right|  3936 || e80cde9f185612f669fc100f825ca84f
|-
| maps/b_bh25.bsp  ||style=text-align:right|  8872 || 032d70dbf8669b3627b82b41f31488bd
|-
| maps/b_explob.bsp  ||style=text-align:right|  10220 || d8c9db3cfa0264678afc580143f665ea
|-
| maps/b_nail0.bsp  ||style=text-align:right|  5044 || c8d7ec0bdee74e0c1e69e8dbe939117d
|-
| maps/b_nail1.bsp  ||style=text-align:right|  5044 || ea08b2bd6aa19ece0307f75c491e5d24
|-
| maps/b_rock0.bsp  ||style=text-align:right|  2956 || 19ce64cd248a4459bf37b45e6e7c1219
|-
| maps/b_rock1.bsp  ||style=text-align:right|  2944 || b4cdb75094cd7218ed2b0475aefabe80
|-
| maps/b_shell0.bsp  ||style=text-align:right|  5044 || 574824b3c52661959d633a76dc823859
|-
| maps/b_shell1.bsp  ||style=text-align:right|  5044 || dc8b8dcb490e204e615b2b9cdc673296
|-
| maps/e1m1.bsp  ||style=text-align:right|  1365176 || 84cae48010619bcc945426b91bc03ade
|-
| maps/e1m2.bsp  ||style=text-align:right|  1332228 || caff91afbe41f3eac4dda65cee0083c9
|-
| maps/e1m3.bsp  ||style=text-align:right|  1249944 || f20eaa5692e94ab889c4ade9e1c116c7
|-
| maps/e1m4.bsp  ||style=text-align:right|  1411452 || 29419f05ef647f83d0482502bb3f84f8
|-
| maps/e1m5.bsp  ||style=text-align:right|  1324060 || afd98cc890d748986186951b32fc9fcb
|-
| maps/e1m6.bsp  ||style=text-align:right|  1065080 || ec178e54ff68c4d8cf71e26775b2eb2d
|-
| maps/e1m7.bsp  ||style=text-align:right|  607420 || 0c1f55455e0f957291e21d211b689718
|-
| maps/e1m8.bsp  ||style=text-align:right|  924116 || 18c7ab2f922d5d586150afbc27c323a4
|-
| maps/start.bsp  ||style=text-align:right|  1433792 || 61a57bb4ca36368478f02b142d1b5291
|-
| progs/armor.mdl  ||style=text-align:right|  44076 || ca060166d7e4e4686995f05645dde593
|-
| progs/backpack.mdl  ||style=text-align:right|  19348 || 315b4ef42fb035aa3318e8d2d61961ce
|-
| progs/bolt2.mdl  ||style=text-align:right|  11860 || f59ce07cfbe01fcfc578258c573d2c31
|-
| progs/bolt3.mdl  ||style=text-align:right|  11860 || ff87579a424faa59ca2695b7434ea488
|-
| progs/bolt.mdl  ||style=text-align:right|  20644 || a176903954e9d8c7ab629f92784546c2
|-
| progs/boss.mdl  ||style=text-align:right|  211836 || 25da3b2bc30677e32ee3a3a878a4d3af
|-
| progs.dat  ||style=text-align:right|  413116 || 0c3ef3625df5883536f8da42c78b673a
|-
| progs/demon.mdl  ||style=text-align:right|  102120 || 4c73786e7cfb2083ca38cbc983cd6c4b
|-
| progs/dog.mdl  ||style=text-align:right|  146056 || e727fbc39acc652f812972612ce37565
|-
| progs/end1.mdl  ||style=text-align:right|  20820 || 67c0fcab33d3772c00bb462b0e749275
|-
| progs/eyes.mdl  ||style=text-align:right|  4372 || ed72f64a17c6909b2cb3034a734bca97
|-
| progs/flame2.mdl  ||style=text-align:right|  64572 || f2c8f8950ebd7a0edded6247655d325b
|-
| progs/flame.mdl  ||style=text-align:right|  46364 || 8593c05374d84354d4444c218e86fdb8
|-
| progs/gib1.mdl  ||style=text-align:right|  5716 || f5c5b799e895dc03036522a487e99913
|-
| progs/gib2.mdl  ||style=text-align:right|  16228 || cfa9e97a3542852418123e0bb12e4f86
|-
| progs/gib3.mdl  ||style=text-align:right|  22228 || d73be7b2881e0a5aacf2b332ac29086f
|-
| progs/g_light.mdl  ||style=text-align:right|  50276 || 61bba06ec3804b7f355a62fd4585ad8f
|-
| progs/g_nail2.mdl  ||style=text-align:right|  30720 || ed6d7bb5ff050ad5f2bf4be7739a16a5
|-
| progs/g_nail.mdl  ||style=text-align:right|  34700 || e2959ca741c764dd42025ef531a1b554
|-
| progs/grenade.mdl  ||style=text-align:right|  2244 || f492d6257c216306983a72f41db0d891
|-
| progs/g_rock2.mdl  ||style=text-align:right|  40756 || 68c047c97bab89afe2cb69e65b7c62e1
|-
| progs/g_rock.mdl  ||style=text-align:right|  48244 || 61346f842944795e0821e31e3d61b427
|-
| progs/g_shot.mdl  ||style=text-align:right|  32916 || 7facfec1a3cfb892cce871f398e9cb6b
|-
| progs/h_demon.mdl  ||style=text-align:right|  34884 || 5253a0ea93d9624d73fb984ee339b52f
|-
| progs/h_dog.mdl  ||style=text-align:right|  24436 || a0b5f87522b3a769548c46cf3bb4223e
|-
| progs/h_guard.mdl  ||style=text-align:right|  5428 || 18a629b53b87392030df63b7806eb833
|-
| progs/h_knight.mdl  ||style=text-align:right|  7156 || 46a03fa72b0cdebcf58045aba2fafc13
|-
| progs/h_ogre.mdl  ||style=text-align:right|  14900 || 14eb06611c769e254d0531c05919bdf5
|-
| progs/h_player.mdl  ||style=text-align:right|  14708 || bf1773df7d3e19c5b211a1ee408f6b05
|-
| progs/h_shams.mdl  ||style=text-align:right|  37060 || ff1e04e18c57667991341a011fb6c363
|-
| progs/h_wizard.mdl  ||style=text-align:right|  14804 || 4bc6be40128f313cf9ad06c347310735
|-
| progs/h_zombie.mdl  ||style=text-align:right|  4484 || 0fdef7f7cd05a3209e0a163e87f69f8b
|-
| progs/invisibl.mdl  ||style=text-align:right|  7092 || 1e87d86af02e69db9c9f27f5fddc7a47
|-
| progs/invulner.mdl  ||style=text-align:right|  23920 || 8c8d83e4d50c3282d009b333a1280422
|-
| progs/knight.mdl  ||style=text-align:right|  101404 || 5328915db5c53e85cf75d46e7b747fb9
|-
| progs/lavaball.mdl  ||style=text-align:right|  8788 || 92af53d2145681e37877dbc1d12801b2
|-
| progs/m_g_key.mdl  ||style=text-align:right|  12820 || 192c2650a115c91706f6fa8fe68beb45
|-
| progs/missile.mdl  ||style=text-align:right|  57796 || 47f19f9e34954b93443c9759dd2e7ba0
|-
| progs/m_s_key.mdl  ||style=text-align:right|  12820 || 20837376b391cdd5c92e57b84e05687f
|-
| progs/ogre.mdl  ||style=text-align:right|  162036 || fbb592ca3788a576dd2f31fcf8c80fab
|-
| progs/player.mdl  ||style=text-align:right|  191852 || 405cef9a10d96cdabffb5e91312f8e5c
|-
| progs/quaddama.mdl  ||style=text-align:right|  39992 || 00b177ff272a4779097ea08344da8aff
|-
| progs/s_bubble.spr  ||style=text-align:right|  588 || 7c0887630ed468205292d8cb7abcae93
|-
| progs/s_explod.spr  ||style=text-align:right|  18972 || 766c6a92c26b54f68f7ff87c90d71cf2
|-
| progs/shambler.mdl  ||style=text-align:right|  98556 || 9b09375a0f614dc4081e363cc34f1185
|-
| progs/s_light.mdl  ||style=text-align:right|  27596 || ee6649ea5673989f3aa06213a8d65f76
|-
| progs/s_light.spr  ||style=text-align:right|  1080 || aff44ba238f4e1d0d504d6f9700aadb4
|-
| progs/soldier.mdl  ||style=text-align:right|  146288 || 5b6c30a984872b4273dd5861412d35c5
|-
| progs/spike.mdl  ||style=text-align:right|  1684 || be4cb73125f939284376080acc9887dd
|-
| progs/s_spike.mdl  ||style=text-align:right|  1684 || ebb1d58242b64a703623c8a33fcbd9e6
|-
| progs/suit.mdl  ||style=text-align:right|  51236 || 882a61f5eea7f9cdbc04800b963cef85
|-
| progs/v_axe.mdl  ||style=text-align:right|  57908 || 577dadcca2700068995c808dc7dec76f
|-
| progs/v_light.mdl  ||style=text-align:right|  56204 || 68733d4c690de88b5c3ba33e52be1c15
|-
| progs/v_nail2.mdl  ||style=text-align:right|  68732 || aacd1002ab02662cc1d3ff46885b553e
|-
| progs/v_nail.mdl  ||style=text-align:right|  54472 || ec9ba028b346da2f9674c2a521ff0c2f
|-
| progs/v_rock2.mdl  ||style=text-align:right|  58188 || 96edf1a3c7629987c200361523f780d7
|-
| progs/v_rock.mdl  ||style=text-align:right|  58548 || 7bea46b2a75fd7cff2fb99420e4c4e25
|-
| progs/v_shot2.mdl  ||style=text-align:right|  50816 || 922b3b687766ae0d7aeb73d44dec7035
|-
| progs/v_shot.mdl  ||style=text-align:right|  43852 || 1fd140b6856843e83cd9bf3966f5d7dd
|-
| progs/w_g_key.mdl  ||style=text-align:right|  7252 || c5c5f0d14b022f57294ad9aded318250
|-
| progs/wizard.mdl  ||style=text-align:right|  64472 || bf60986594f045e60e8aa6339d553ee7
|-
| progs/w_s_key.mdl  ||style=text-align:right|  7252 || ec02314a7d12439d36b4eb2dd0a641a8
|-
| progs/w_spike.mdl  ||style=text-align:right|  14336 || 8cf9245df2164e8062b01a220b508d6b
|-
| progs/zombie.mdl  ||style=text-align:right|  186084 || a923b1d03b9d237dd5ead9bd56acc900
|-
| progs/zom_gib.mdl  ||style=text-align:right|  10196 || cf42c938caa5b19f719d1f110b1dc6d4
|-
| quake.rc  ||style=text-align:right|  293 || 411d42958aaeae141813f9ebfcf5233f
|-
| sound/ambience/buzz1.wav  ||style=text-align:right|  36308 || 346a00c795c6f1f1338ade6fc350b3fe
|-
| sound/ambience/comp1.wav  ||style=text-align:right|  62734 || f91a1120de804f7cd4dbba4f12c748e9
|-
| sound/ambience/drip1.wav  ||style=text-align:right|  137736 || 2306a76162eeda3d0812c516bc99aa7a
|-
| sound/ambience/drone6.wav  ||style=text-align:right|  18522 || 322853ddb42ad2a205579b5cca8e2e8c
|-
| sound/ambience/fire1.wav  ||style=text-align:right|  24064 || 610d3985ed8133988e8de3bec2b9cbbe
|-
| sound/ambience/fl_hum1.wav  ||style=text-align:right|  50154 || e4628499702e004c4bacd282a3ecb8c0
|-
| sound/ambience/hum1.wav  ||style=text-align:right|  40166 || 486bfa737c35b0c9dda57cbee2a540af
|-
| sound/ambience/suck1.wav  ||style=text-align:right|  110392 || 2e99e4d1fe1501d5191c8157d3063cb6
|-
| sound/ambience/swamp1.wav  ||style=text-align:right|  68524 || 29ffb678d78997eb6c227677c86ea4f8
|-
| sound/ambience/swamp2.wav  ||style=text-align:right|  68526 || 356aa1e875da846e72d8f17bbb699a5b
|-
| sound/ambience/thunder1.wav  ||style=text-align:right|  41492 || cefd6ced4b5bc79fcece1003238566f6
|-
| sound/ambience/water1.wav  ||style=text-align:right|  55784 || 6eeaae0a3450652d2be0782895297ee4
|-
| sound/ambience/wind2.wav  ||style=text-align:right|  28610 || 030cf8dd2b00a12454b5b35a89d03914
|-
| sound/ambience/windfly.wav  ||style=text-align:right|  22140 || c7be01e6d324e66883f70aa0072a99b0
|-
| sound/boss1/death.wav  ||style=text-align:right|  27600 || 43469b1acd35b67107da5da82e1df911
|-
| sound/boss1/out1.wav  ||style=text-align:right|  50344 || 847a6f971f6905dfaffd70b30d18a4b1
|-
| sound/boss1/pain.wav  ||style=text-align:right|  17700 || 49112740c0ff421f9272b9e8efc748cd
|-
| sound/boss1/sight1.wav  ||style=text-align:right|  24768 || 427dd600e6b28c9402212adcc5d652c7
|-
| sound/boss1/throw.wav  ||style=text-align:right|  11526 || 9b6e9ff2c8df448f7fd4b5315e60ddda
|-
| sound/buttons/airbut1.wav  ||style=text-align:right|  10672 || 9d2e14e7176842a0dce909a43d38873d
|-
| sound/buttons/switch02.wav  ||style=text-align:right|  3746 || d2e9cba3a353edc65115f6f5c574403c
|-
| sound/buttons/switch04.wav  ||style=text-align:right|  3666 || ff47857a58d3faefb2b94a37d7ba4f26
|-
| sound/buttons/switch21.wav  ||style=text-align:right|  6318 || 3605b0d061a9baf185c6ab7614534531
|-
| sound/demon/ddeath.wav  ||style=text-align:right|  9140 || 62a48dcd405ca55c9ce18497e36faa0e
|-
| sound/demon/dhit2.wav  ||style=text-align:right|  7142 || 9e741696e4d0d66e30e718fc70ec186e
|-
| sound/demon/djump.wav  ||style=text-align:right|  8494 || 791ac9d6b6593808316145443cb7e7a0
|-
| sound/demon/dland2.wav  ||style=text-align:right|  4400 || db14c7b01838f826b7a712075f9026fd
|-
| sound/demon/dpain1.wav  ||style=text-align:right|  6282 || 5e6c485878393c9bebb0d0e6659bc479
|-
| sound/demon/idle1.wav  ||style=text-align:right|  9098 || 7a83f8caf3d5b1172a7dc5afdc942988
|-
| sound/demon/sight2.wav  ||style=text-align:right|  8804 || 65171c355c22a5069520b0881677ae3c
|-
| sound/dog/dattack1.wav  ||style=text-align:right|  8154 || 0c47c9d4aaae0bf3159a288b674f4a35
|-
| sound/dog/ddeath.wav  ||style=text-align:right|  14912 || b0e7760b1d7286a028ff9773f6802958
|-
| sound/dog/dpain1.wav  ||style=text-align:right|  7240 || 28e5ab93b41e13e2916433283a5d1a46
|-
| sound/dog/dsight.wav  ||style=text-align:right|  6722 || 0edc290765bac1fb4fe03ca55bc7c225
|-
| sound/dog/idle.wav  ||style=text-align:right|  6870 || 42bd6026ff32bd94523ad9f8fe8362cc
|-
| sound/doors/airdoor1.wav  ||style=text-align:right|  13654 || 9b91930e8c2fdece31a2362296891122
|-
| sound/doors/airdoor2.wav  ||style=text-align:right|  8594 || 29fd823d1c14ca42a9a89c716b26f4cd
|-
| sound/doors/basesec1.wav  ||style=text-align:right|  13930 || eb2363fed42724f55e8f55f96c335bcf
|-
| sound/doors/basesec2.wav  ||style=text-align:right|  10238 || 8d163a56607c9cf64a270a156c1c5cef
|-
| sound/doors/basetry.wav  ||style=text-align:right|  10518 || a5108d5c51281ab55c0baf884cbe8cbe
|-
| sound/doors/baseuse.wav  ||style=text-align:right|  16486 || f43fee91efe813a5eb34e9d72918fdb9
|-
| sound/doors/ddoor1.wav  ||style=text-align:right|  7738 || dff86a26139cdd49a193d5ed7ebf6ae1
|-
| sound/doors/ddoor2.wav  ||style=text-align:right|  5904 || 4a9d0b0825d0302ce465569d1e35fbcf
|-
| sound/doors/doormv1.wav  ||style=text-align:right|  14036 || 3fd379aec80a2ad8105c0c89ba5b40e6
|-
| sound/doors/drclos4.wav  ||style=text-align:right|  12814 || 83df1865a0c9fa5d02c2f137564c57de
|-
| sound/doors/hydro1.wav  ||style=text-align:right|  11094 || b1703980a20e624bc3366ccf55ca617e
|-
| sound/doors/hydro2.wav  ||style=text-align:right|  10700 || b1866f5b3950788ccf4206444ab64bc7
|-
| sound/doors/latch2.wav  ||style=text-align:right|  7338 || ad2378ca21a0ca529df328261e07aed5
|-
| sound/doors/medtry.wav  ||style=text-align:right|  7828 || ebb536bec2cdfd22c25b35793c055339
|-
| sound/doors/meduse.wav  ||style=text-align:right|  10718 || 4522aada194b23eb33b541cbcc755cf6
|-
| sound/doors/runetry.wav  ||style=text-align:right|  13524 || c433bae9e2ab508712f87dc2cacc82c8
|-
| sound/doors/runeuse.wav  ||style=text-align:right|  17364 || b4bcfd525a26f5b5ecc9d392430d9079
|-
| sound/doors/stndr1.wav  ||style=text-align:right|  12620 || 5bae2183885e18d65d69624e85249fd9
|-
| sound/doors/stndr2.wav  ||style=text-align:right|  11470 || f43a75c917effff09ef7be8a321c8b49
|-
| sound/doors/winch2.wav  ||style=text-align:right|  14872 || a4edffdfede7dbaed37db526c26e2b6d
|-
| sound/hknight/hit.wav  ||style=text-align:right|  6260 || fece24e2548f1d769e8fce39a5c87d01
|-
| sound/items/armor1.wav  ||style=text-align:right|  7714 || 186d29f2baf35b8c280bc97754606fad
|-
| sound/items/damage2.wav  ||style=text-align:right|  33012 || 14e53b7617ffe315a7c3f8d89652e51c
|-
| sound/items/damage3.wav  ||style=text-align:right|  12894 || baf754aec7ed4baba16760ac85513184
|-
| sound/items/damage.wav  ||style=text-align:right|  23374 || 8cde8b9278ca4922a4ec7ead6e5ee01b
|-
| sound/items/health1.wav  ||style=text-align:right|  7958 || 52a2c4f808db4edd8393de0de618c91f
|-
| sound/items/inv1.wav  ||style=text-align:right|  13728 || 5850cab55d6197d0e76d9f0a22ba10be
|-
| sound/items/inv2.wav  ||style=text-align:right|  33216 || 4edcd38a2c6adc5305636dd7afd5ef60
|-
| sound/items/inv3.wav  ||style=text-align:right|  33320 || 325c268be05b42a019ccb92e6993ab9e
|-
| sound/items/itembk2.wav  ||style=text-align:right|  9910 || 270c688b3cb884f5d4e5ffd8ccc934a1
|-
| sound/items/protect2.wav  ||style=text-align:right|  34012 || 25627a4bd2b4c6054cfd2fc4bf69ddc2
|-
| sound/items/protect3.wav  ||style=text-align:right|  23364 || 7b9374d67f6d59e524bba2af236ca30a
|-
| sound/items/protect.wav  ||style=text-align:right|  22536 || d839d5a84f811ce8a0e28616891bf1a7
|-
| sound/items/r_item1.wav  ||style=text-align:right|  6822 || 3fc0d0ae4a71c9fbfe548f38626c6a08
|-
| sound/items/r_item2.wav  ||style=text-align:right|  7448 || 384ffefe795d99df75f381596a0f1976
|-
| sound/items/suit2.wav  ||style=text-align:right|  33254 || 0a9d2766a5b805cb5794f9bea57e6585
|-
| sound/items/suit.wav  ||style=text-align:right|  15854 || da413f34023d219f1e34fde50a037be0
|-
| sound/knight/idle.wav  ||style=text-align:right|  11064 || 1b5c3981bee078318af346d8fe8090b9
|-
| sound/knight/kdeath.wav  ||style=text-align:right|  10688 || 11a96f48a8f2433c23beae299c8fb96e
|-
| sound/knight/khurt.wav  ||style=text-align:right|  5586 || 32c9f48dd4a6a87752aedf56fe8de668
|-
| sound/knight/ksight.wav  ||style=text-align:right|  13514 || eb75b4af348c88e84d8c87c19d5976fa
|-
| sound/knight/sword1.wav  ||style=text-align:right|  2306 || 93045b5f3178413dc6b01ec2869d1f73
|-
| sound/knight/sword2.wav  ||style=text-align:right|  2784 || 82d1a7c263cd3df7b060dee2f7f8b1fd
|-
| sound/misc/h2ohit1.wav  ||style=text-align:right|  12972 || 49ecb03f4f10862453656a67598f8b8a
|-
| sound/misc/medkey.wav  ||style=text-align:right|  10020 || 0e3ae5626a47d81e4166539e355e31bb
|-
| sound/misc/menu1.wav  ||style=text-align:right|  5738 || 12c36546601c385bc47c9ca9420b7eee
|-
| sound/misc/menu2.wav  ||style=text-align:right|  10672 || 39b01ea6feb3ec8dbd6d8ee3e5e966c4
|-
| sound/misc/menu3.wav  ||style=text-align:right|  3010 || 4a03dc2fd56831b855dab761eac4f7de
|-
| sound/misc/null.wav  ||style=text-align:right|  1244 || 811989e09124f54cb27fe6154b0f1018
|-
| sound/misc/outwater.wav  ||style=text-align:right|  5018 || 35732412412ddb5ed418633bb0123bbe
|-
| sound/misc/power.wav  ||style=text-align:right|  19832 || 9f2c3a18d9fc8d9cecfac6db3aad6bc6
|-
| sound/misc/r_tele1.wav  ||style=text-align:right|  8036 || c2194171b4c446e136ed7514fbb098a5
|-
| sound/misc/r_tele2.wav  ||style=text-align:right|  17324 || 0ce662ac90fb3658d69320d1be4025c1
|-
| sound/misc/r_tele3.wav  ||style=text-align:right|  18016 || 122ef44813edcfe7391578fd29e729d2
|-
| sound/misc/r_tele4.wav  ||style=text-align:right|  9068 || 0097b5747ccc70d5b12fc6838aff02c2
|-
| sound/misc/r_tele5.wav  ||style=text-align:right|  22042 || a82334cbb66d12f28cce9e71c90ea50b
|-
| sound/misc/runekey.wav  ||style=text-align:right|  14578 || 6b21a2e5878011da50fdee0a301d3e34
|-
| sound/misc/secret.wav  ||style=text-align:right|  6610 || a02ceefcc24b1ebf5c164a1e1acfb05f
|-
| sound/misc/talk.wav  ||style=text-align:right|  1810 || d5b25d4df59d92ac5016e88689ea60c1
|-
| sound/misc/trigger1.wav  ||style=text-align:right|  20230 || dc927c8a1d0a9bd59fbc5dd91ae1d812
|-
| sound/misc/water1.wav  ||style=text-align:right|  3926 || d8291c762acb1edf24927fdcc0f6a6cd
|-
| sound/misc/water2.wav  ||style=text-align:right|  3340 || 049e8e7e7b30d4d8038afb7248bdd977
|-
| sound/ogre/ogdrag.wav  ||style=text-align:right|  12396 || 658587dc89aaefae5ca3f058f7ff4227
|-
| sound/ogre/ogdth.wav  ||style=text-align:right|  13892 || de98e7bb9e70586edddd3308cfded3db
|-
| sound/ogre/ogidle2.wav  ||style=text-align:right|  11254 || 196ae9c33a4311160e1d5f3da878ab09
|-
| sound/ogre/ogidle.wav  ||style=text-align:right|  12894 || 177c829840a87c885bbc8951e7ce962e
|-
| sound/ogre/ogpain1.wav  ||style=text-align:right|  7898 || ac6d133d7720c12df49813fe10e683b5
|-
| sound/ogre/ogsawatk.wav  ||style=text-align:right|  16154 || 7257bdfd014bb61d778b8f88cb65d560
|-
| sound/ogre/ogwake.wav  ||style=text-align:right|  19356 || 3296459e495c4c12b31179d4eeffac19
|-
| sound/plats/medplat1.wav  ||style=text-align:right|  16378 || b73215aa6627c8b5b90fce8d260d48d0
|-
| sound/plats/medplat2.wav  ||style=text-align:right|  7338 || 1fc6c3772917a1a8155d04fa52e17005
|-
| sound/plats/plat1.wav  ||style=text-align:right|  20248 || 5d43ed85d896ba926f459e06ba6635d5
|-
| sound/plats/plat2.wav  ||style=text-align:right|  7338 || 49d7ab0fd726cd652eb6e5756fce61b9
|-
| sound/plats/train1.wav  ||style=text-align:right|  21430 || b589ae8262046361d9dca39d6b8f693a
|-
| sound/plats/train2.wav  ||style=text-align:right|  5870 || 640017e1b870d643e3bca29d499c72ee
|-
| sound/player/axhit1.wav  ||style=text-align:right|  6906 || 149b2371334da318386325182924eaca
|-
| sound/player/axhit2.wav  ||style=text-align:right|  2434 || fc01909318455f5310efa2457a370897
|-
| sound/player/death1.wav  ||style=text-align:right|  10170 || ba005f5488d4ee78dabf613a03f33a5f
|-
| sound/player/death2.wav  ||style=text-align:right|  8026 || 20477d2e7c84aac1bef95d32c9c702dd
|-
| sound/player/death3.wav  ||style=text-align:right|  10918 || 7b206ba8e1fa28d8605b50e3f3200f11
|-
| sound/player/death4.wav  ||style=text-align:right|  14126 || 1b0f27f4d41b748d3cc5c3d56bd917f8
|-
| sound/player/death5.wav  ||style=text-align:right|  14946 || 7efe84195cfa97515aad2d7f96f25346
|-
| sound/player/drown1.wav  ||style=text-align:right|  8908 || 732f0416af6990e028110380bcb36f0d
|-
| sound/player/drown2.wav  ||style=text-align:right|  3114 || 29ee1f287879acce29b15d4722668bc2
|-
| sound/player/gasp1.wav  ||style=text-align:right|  8702 || b06cbc370c8c2c163dc4d487e8b673c7
|-
| sound/player/gasp2.wav  ||style=text-align:right|  13134 || 30aece9d8779764620c7f866bfb06edb
|-
| sound/player/gib.wav  ||style=text-align:right|  14424 || 26fa9942078125388f34b71546615068
|-
| sound/player/h2odeath.wav  ||style=text-align:right|  18104 || 73b0f4dfae07f6e49112cadfe202735c
|-
| sound/player/h2ojump.wav  ||style=text-align:right|  11438 || cd421b96410971bb1a4f21d3936a3805
|-
| sound/player/inh2o.wav  ||style=text-align:right|  11340 || d4c1a27c4d07e8dfdf18a4b1a880c610
|-
| sound/player/inlava.wav  ||style=text-align:right|  10958 || c37875a082900716b7af88d2d990f55c
|-
| sound/player/land2.wav  ||style=text-align:right|  6204 || 6ba534256a779d66d9d9dabb90e63c8b
|-
| sound/player/land.wav  ||style=text-align:right|  2434 || e34328a40358d98f0f95403b9e27ec1e
|-
| sound/player/lburn1.wav  ||style=text-align:right|  6682 || 3c447c72385defe97c060771077d8ba0
|-
| sound/player/lburn2.wav  ||style=text-align:right|  6076 || 6849ee8dbd91ec82ece016fbd39b0a5c
|-
| sound/player/pain1.wav  ||style=text-align:right|  3394 || d7ac9df7540b791f952ca2a681c0265b
|-
| sound/player/pain2.wav  ||style=text-align:right|  2710 || 513e054b64d4fb61f31384d59e123020
|-
| sound/player/pain3.wav  ||style=text-align:right|  4854 || aafc61ad4e16cc5cdd2db2100796b494
|-
| sound/player/pain4.wav  ||style=text-align:right|  4840 || f655ef2045bc55473303b27546aa6fc0
|-
| sound/player/pain5.wav  ||style=text-align:right|  8020 || f8551a73cb89396042687baa8c68b5c2
|-
| sound/player/pain6.wav  ||style=text-align:right|  5462 || 70062eabf96288d307280fb601ce0ee2
|-
| sound/player/plyrjmp8.wav  ||style=text-align:right|  3888 || d4a552d8f627c7f3b933568c4a74c913
|-
| sound/player/slimbrn2.wav  ||style=text-align:right|  12468 || b17c18a9f81a952f2d41f65b5180f210
|-
| sound/player/teledth1.wav  ||style=text-align:right|  14414 || c226c7f041187ba058d8112cc0190b56
|-
| sound/player/tornoff2.wav  ||style=text-align:right|  7726 || 03ec1c805b307b8fe4c4052f8332a5e5
|-
| sound/player/udeath.wav  ||style=text-align:right|  16082 || afe674f287efb6197da2cea0c0b1d2f8
|-
| sound/shambler/melee1.wav  ||style=text-align:right|  4718 || 77fe6240973a204b757a427ebf66bcfd
|-
| sound/shambler/melee2.wav  ||style=text-align:right|  5966 || 3be31638d769e3d690c92311dfafdeac
|-
| sound/shambler/sattck1.wav  ||style=text-align:right|  8036 || ec8c3f79ea42d09154cb8975ada1b21c
|-
| sound/shambler/sboom.wav  ||style=text-align:right|  11672 || 9834601a645d7d1f62001b2a314ec18f
|-
| sound/shambler/sdeath.wav  ||style=text-align:right|  21106 || e0e62d229a985a6e39218c6488599059
|-
| sound/shambler/shurt2.wav  ||style=text-align:right|  4302 || 1e87631ede95e061a75f9c31629ac0b8
|-
| sound/shambler/sidle.wav  ||style=text-align:right|  5646 || 368a240e6c3e877793352a79c1828386
|-
| sound/shambler/smack.wav  ||style=text-align:right|  5300 || bd8c634c9894348360fec7b7419d1649
|-
| sound/shambler/ssight.wav  ||style=text-align:right|  15420 || 657107577460d5acf3157dec97e07a89
|-
| sound/soldier/death1.wav  ||style=text-align:right|  8434 || fe25952af40b536c3bb67bfca58062eb
|-
| sound/soldier/idle.wav  ||style=text-align:right|  9802 || 4cdfbdda8fb5f40b125c7bcddb6e8914
|-
| sound/soldier/pain1.wav  ||style=text-align:right|  5000 || 54d3b05fdcecf7480034858f2b22b06c
|-
| sound/soldier/pain2.wav  ||style=text-align:right|  7838 || e2bbc9d3405b9b9fdae76d2fc298fc2f
|-
| sound/soldier/sattck1.wav  ||style=text-align:right|  14302 || b76ac35f900f280a7a7996da7e404362
|-
| sound/soldier/sight1.wav  ||style=text-align:right|  12716 || e2a39533250ddd1b08053d5c4ebf7fd0
|-
| sound/weapons/ax1.wav  ||style=text-align:right|  3308 || 237d4d819d02ad37849a8a895cc410e1
|-
| sound/weapons/bounce.wav  ||style=text-align:right|  5864 || fced668c6558a9505abf5014d60528a6
|-
| sound/weapons/grenade.wav  ||style=text-align:right|  8364 || d2b6fa131933f203eba2a282276e88df
|-
| sound/weapons/guncock.wav  ||style=text-align:right|  14430 || 6a63452167cc106e756518536446844f
|-
| sound/weapons/lhit.wav  ||style=text-align:right|  26028 || fefd021d0bd35a1f8da8870f1c06abb9
|-
| sound/weapons/lock4.wav  ||style=text-align:right|  3876 || 3fd93222258d5b1500b150f021c94519
|-
| sound/weapons/lstart.wav  ||style=text-align:right|  56378 || abe1abf6dcadcda5930b0684c7ea820a
|-
| sound/weapons/pkup.wav  ||style=text-align:right|  5174 || 0aa6f0a7d609e1a56fd535a06d1bb56e
|-
| sound/weapons/r_exp3.wav  ||style=text-align:right|  17478 || 57db026474fc76ba7f38cea24eaaf8cf
|-
| sound/weapons/ric1.wav  ||style=text-align:right|  4308 || a31166b4bbb4509ac3004a01f7477ee9
|-
| sound/weapons/ric2.wav  ||style=text-align:right|  10838 || a180b447c0527e603cea54a9aefd6139
|-
| sound/weapons/ric3.wav  ||style=text-align:right|  12638 || 8a773bbb585540ddce256151162f3a2c
|-
| sound/weapons/rocket1i.wav  ||style=text-align:right|  9660 || fb4fdf345d805cf6980c4c695974effc
|-
| sound/weapons/sgun1.wav  ||style=text-align:right|  22992 || 95a14815e48deb323d0cf8251d728ac7
|-
| sound/weapons/shotgn2.wav  ||style=text-align:right|  8694 || cb561cefbf472232334b419af050e5a0
|-
| sound/weapons/spike2.wav  ||style=text-align:right|  12642 || 9189d811855f108da4a1e2d34dc7c633
|-
| sound/weapons/tink1.wav  ||style=text-align:right|  1252 || 297ba8706625fcf05887edb393e9a441
|-
| sound/wizard/hit.wav  ||style=text-align:right|  7332 || 6598d669334df977f1f97b95288edf11
|-
| sound/wizard/wattack.wav  ||style=text-align:right|  25912 || b3568a47439f81779d40335e76f5bc2d
|-
| sound/wizard/wdeath.wav  ||style=text-align:right|  20684 || 99d9c71343bc23222abb92119d404400
|-
| sound/wizard/widle1.wav  ||style=text-align:right|  13464 || b22b1dd9f66879b3447d36ab584316c7
|-
| sound/wizard/widle2.wav  ||style=text-align:right|  23094 || 7178fd83df227360564adef01bed92c6
|-
| sound/wizard/wpain.wav  ||style=text-align:right|  8686 || bd7e59ab7d7b835f9ed8ab51950914de
|-
| sound/wizard/wsight.wav  ||style=text-align:right|  13078 || df5949057c750528917c6cb32b7fd9fd
|-
| sound/zombie/idle_w2.wav  ||style=text-align:right|  17192 || d2bb59b9d7ac71097c07123a23525641
|-
| sound/zombie/z_fall.wav  ||style=text-align:right|  3062 || 6968318b2d196c6d54bc707d8a390547
|-
| sound/zombie/z_gib.wav  ||style=text-align:right|  16226 || 199dda66ade8d6f0ef4897e4d7608c0d
|-
| sound/zombie/z_hit.wav  ||style=text-align:right|  6166 || 6c66ab3e6b149bf35956a4bbc0057acb
|-
| sound/zombie/z_idle1.wav  ||style=text-align:right|  13244 || 21088a7b38b1124d7ec72e58d5ab93a6
|-
| sound/zombie/z_idle.wav  ||style=text-align:right|  16734 || e5e570e38c4405111004190a79f0e925
|-
| sound/zombie/z_miss.wav  ||style=text-align:right|  10734 || 96fad96a8c3bc6f7bcc5da6c82678da2
|-
| sound/zombie/z_pain1.wav  ||style=text-align:right|  15374 || fcd83b89a94b0cadbe1361a4df080ec0
|-
| sound/zombie/z_pain.wav  ||style=text-align:right|  12218 || 56637968b8309bd2f825153330bbdfc0
|-
| sound/zombie/z_shot1.wav  ||style=text-align:right|  3068 || 561afb69b7851923a8fb3b54e3e13c96
|-
|}&lt;/tt&gt;

{{todo|todo=Multiple to do items listed above, detail out the contents of various pak files}}
{{todo|todo=different releases have different pak0.pak files}}</text>
      <sha1>0tt5fzhmow3gm6vuqmp4qlfz68q947m</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3267</id>
      <parentid>3265</parentid>
      <timestamp>2014-09-24T17:04:08Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>/* Versions */ 85fc9cee2035b66290da1e33be2ac86b</comment>
      <text xml:space="preserve" bytes="66829">The '''''pak0.pak''''' file that comes with Quake is required by all Quake [[engines]]. It contains the maps, models, programs, sounds, and skins required to play Quake Episode 1, ''Dimension of the Doomed''. It is expected to be in the ID1 subfolder of the Quake root folder.

[[PAK file]]s are typically named ''pak0.pak'', ''pak1.pak'', ''pak2.pak'', and so on. Quake mission packs and other Quake-based games often have their own ''pak0.pak'' files, which live in a different folder, not the ID1 folder.

The ID1 ''pak0.pak'' is distributed with both the shareware and the registered/commercial editions of Quake.

In some editions, including the downloadable shareware (''quake106.zip'') from id Software, ''pak0.pak'' is embedded in another archive, ''[[resource.1]]''. The files in this archive are LZH-encoded using the lh5 algorithm. If you can't or don't want to run the DOS/Win32 Quake installer program it comes with, then you'll need a compatible extractor program to get ''pak0.pak'' out of the ''resource.1'' archive.


== Versions ==
&lt;tt&gt;
{| class=&quot;wikitable&quot;
! Version !! Timestamp !! Size !! md5
|-
| Registered Version 1.01 (as well as Shareware Version 1.01 on that [https://www.quaddicted.com/library/quake_registered_1.01_id disc]) || Unknown ||style=text-align:right|  18276119 || fc989b37572fae074e8ffda0ce4d5297
|-
| Shareware Version 1.01 ([https://www.quaddicted.com/library/quake_episode_1_shareware Shareware disc]) || Unknown ||style=text-align:right|  18276119 || 85fc9cee2035b66290da1e33be2ac86b
|-
| Unknown || 1996-10-01 14:25:58 ||style=text-align:right|  18689235 || 5906e5998fc3d896ddaf5e6a62e03abb
|-
|}&lt;/tt&gt;

=== fc989b37572fae074e8ffda0ce4d5297 ===
The [[id1]] ''pak0.pak'' with the md5sum fc989b37572fae074e8ffda0ce4d5297 contains the following folders &amp; files:
&lt;tt&gt;
{| class=&quot;wikitable collapsible collapsed&quot;
|-
! Path !! Size !! md5
|-
| default.cfg  ||style=text-align:right|  1914 || fc989b37572fae074e8ffda0ce4d5297
|-
| demo1.dem  ||style=text-align:right|  184471 || 85ec0141ab24d9732e487d1aafa791f0
|-
| demo2.dem  ||style=text-align:right|  152705 || fa5c3daf7a57954cd95f94b698a7e420
|-
| demo3.dem  ||style=text-align:right|  197679 || 691f37e5715ea2863c1d8092a6429824
|-
| end1.bin  ||style=text-align:right|  4000 || 92ae51961ec2f429dfe9bea1138fbd5d
|-
| gfx/bigbox.lmp  ||style=text-align:right|  5192 || e597771ac6149b2b071ebfd24981ea04
|-
| gfx/box_bl.lmp  ||style=text-align:right|  72 || 5b094c37c2c1c2eebe37f84117dea182
|-
| gfx/box_bm.lmp  ||style=text-align:right|  136 || 44621236738e2bf8d669e53dca887278
|-
| gfx/box_br.lmp  ||style=text-align:right|  72 || 86597d5325b472caf5644644033e5cab
|-
| gfx/box_ml.lmp  ||style=text-align:right|  72 || adcea286ba0ac01084fd0c131b16ffdd
|-
| gfx/box_mm2.lmp  ||style=text-align:right|  136 || b850bcec189d909e7a0f796111a11249
|-
| gfx/box_mm.lmp  ||style=text-align:right|  136 || 700b4884b1a3c6aa7356a43014261866
|-
| gfx/box_mr.lmp  ||style=text-align:right|  72 || e30d9ea783ef7dd50101682f03ba40d7
|-
| gfx/box_tl.lmp  ||style=text-align:right|  72 || 3903d3d814e37c55790ac0ccfef2b925
|-
| gfx/box_tm.lmp  ||style=text-align:right|  136 || 7cb85ccbf8e7d2532da2a839a7cef348
|-
| gfx/box_tr.lmp  ||style=text-align:right|  72 || 5c5e72746af821a4cf8437d8fecc53c7
|-
| gfx/colormap.lmp  ||style=text-align:right|  16385 || 0d793b70bffafbd666fc5c88d6e15e9d
|-
| gfx/complete.lmp  ||style=text-align:right|  4616 || db6a00dfbe2c62a43c261e5622297c4a
|-
| gfx/conback.lmp  ||style=text-align:right|  64008 || 9eb6f9c47870bf42985d9382958a5c12
|-
| gfx/dim_drct.lmp  ||style=text-align:right|  3352 || 50ea11fe8c4d9db92863bdcd03b89df5
|-
| gfx/dim_ipx.lmp  ||style=text-align:right|  3352 || 0bef9943487f0611225bf0a5c0fe5dd4
|-
| gfx/dim_modm.lmp  ||style=text-align:right|  3352 || 3288f03144f06b95cadafa9458a77b1d
|-
| gfx/dim_mult.lmp  ||style=text-align:right|  3352 || 348b7369227f2d7e9d0daccbf6c9344d
|-
| gfx/dim_tcp.lmp  ||style=text-align:right|  3352 || 7dc8bbb01d7c90cd51c28da0ff6ed900
|-
| gfx/finale.lmp  ||style=text-align:right|  6920 || b6e49409d344e0344273d86ea33fe35f
|-
| gfx/help0.lmp  ||style=text-align:right|  64008 || b392ac30ad49252b51ec934ed855c20f
|-
| gfx/help1.lmp  ||style=text-align:right|  64008 || 857543c69245117a606044ea63adac9a
|-
| gfx/help2.lmp  ||style=text-align:right|  64008 || 882dd5920ea9c19f637f32084de9788a
|-
| gfx/help3.lmp  ||style=text-align:right|  64008 || a89d169524920d896128009467deebfc
|-
| gfx/help4.lmp  ||style=text-align:right|  64008 || c72d67c84ae6b403fae5f08d3e5c3bc6
|-
| gfx/help5.lmp  ||style=text-align:right|  64008 || 12203d7cdec35c4f51622dd90ec92093
|-
| gfx/inter.lmp  ||style=text-align:right|  23048 || f6eabe0d742380c7b47a9ee44170993d
|-
| gfx/loading.lmp  ||style=text-align:right|  3464 || 3249bc994266529a1748c06bfbb24bfa
|-
| gfx/mainmenu.lmp  ||style=text-align:right|  26888 || 8122e2a0b8888f9d1ebef149551b6434
|-
| gfx/menudot1.lmp  ||style=text-align:right|  392 || bfdb08d84d580abcfbacc1c9abd62bfb
|-
| gfx/menudot2.lmp  ||style=text-align:right|  392 || 6c6d2176e00edbe530bb1db118aaa6dc
|-
| gfx/menudot3.lmp  ||style=text-align:right|  392 || 2527a05f6162efb3e4bc5311d9e010d5
|-
| gfx/menudot4.lmp  ||style=text-align:right|  392 || 90ea6be033b39b139b3779932d266f33
|-
| gfx/menudot5.lmp  ||style=text-align:right|  392 || c9beb9600c35e458d0f83b6cf1e1c692
|-
| gfx/menudot6.lmp  ||style=text-align:right|  392 || 31b9a6ec1d12a2bd56b955185a9e72d3
|-
| gfx/menuplyr.lmp  ||style=text-align:right|  2696 || 9eebe617ff51c4ce43f85ca1a6920d5b
|-
| gfx/mp_menu.lmp  ||style=text-align:right|  14856 || c6416b8f7f5262a5a19b9ce4be1fd9ce
|-
| gfx/netmen1.lmp  ||style=text-align:right|  3352 || 5bc6a8d8cfdfd7e940e933812954367a
|-
| gfx/netmen2.lmp  ||style=text-align:right|  3352 || c8aafb649a653e90fc5eb7b7a2b3ca2e
|-
| gfx/netmen3.lmp  ||style=text-align:right|  3352 || 11c9372d0e64057a1ec8251f596b820d
|-
| gfx/netmen4.lmp  ||style=text-align:right|  3352 || 74ec672b1312699be2eeaf25a68e4582
|-
| gfx/netmen5.lmp  ||style=text-align:right|  3352 || 231f8a9ea4ba364f517db0e9f7f1ba72
|-
| gfx/palette.lmp  ||style=text-align:right|  768 || 79bc149d4f2fb0bd68cd8400a3fd87d4
|-
| gfx/pause.lmp  ||style=text-align:right|  3080 || 5aa67f927719e4a9eb3e020e75fea969
|-
| gfx/p_load.lmp  ||style=text-align:right|  2504 || 27fe08071058385529b0b8ad746421e7
|-
| gfx/p_multi.lmp  ||style=text-align:right|  5192 || 5a307c7d11da20a4772ad9c00b9f4309
|-
| gfx/p_option.lmp  ||style=text-align:right|  3464 || 83a3bf4459bce3fe85857a0aa647b90a
|-
| gfx/p_save.lmp  ||style=text-align:right|  2120 || 0d2bb5fa5524e0180a85bf273094cd1f
|-
| gfx/qplaque.lmp  ||style=text-align:right|  4616 || f4de79557c75e26b85ea84fb6029a5f3
|-
| gfx/ranking.lmp  ||style=text-align:right|  4040 || 919b13d1f7fdd0082ec0f94699f3b681
|-
| gfx/sell.lmp  ||style=text-align:right|  64008 || 878db3866e8b38c5b8d951aef516358c
|-
| gfx/sp_menu.lmp  ||style=text-align:right|  14856 || f624aa79778970ecb8ef518b5ab435f6
|-
| gfx/ttl_cstm.lmp  ||style=text-align:right|  4424 || 4ee84e0e7fa93f0e93d26efb1e726a4d
|-
| gfx/ttl_main.lmp  ||style=text-align:right|  2312 || 07e1c8e189e2463befcfc44f5ecf8dcb
|-
| gfx/ttl_sgl.lmp  ||style=text-align:right|  3080 || 25d5360228da738f091063eaeb7c6aa8
|-
| gfx/vidmodes.lmp  ||style=text-align:right|  5192 || 18a97f403057777f262188903f485fe8
|-
| gfx.wad  ||style=text-align:right|  112828 || cde5b5890c8902c02a2f271abe8f4a1f
|-
| maps/b_batt0.bsp  ||style=text-align:right|  5044 || 00bc989f4c8d2570a2826a63c7356a27
|-
| maps/b_batt1.bsp  ||style=text-align:right|  4620 || 555bc0cb0b5c2ad2ed0110f307e70679
|-
| maps/b_bh100.bsp  ||style=text-align:right|  8820 || 62f78bb5143265f037b79ddd077c50ed
|-
| maps/b_bh10.bsp  ||style=text-align:right|  3936 || e80cde9f185612f669fc100f825ca84f
|-
| maps/b_bh25.bsp  ||style=text-align:right|  8872 || 032d70dbf8669b3627b82b41f31488bd
|-
| maps/b_explob.bsp  ||style=text-align:right|  10220 || d8c9db3cfa0264678afc580143f665ea
|-
| maps/b_nail0.bsp  ||style=text-align:right|  5044 || c8d7ec0bdee74e0c1e69e8dbe939117d
|-
| maps/b_nail1.bsp  ||style=text-align:right|  5044 || ea08b2bd6aa19ece0307f75c491e5d24
|-
| maps/b_rock0.bsp  ||style=text-align:right|  2956 || 19ce64cd248a4459bf37b45e6e7c1219
|-
| maps/b_rock1.bsp  ||style=text-align:right|  2944 || b4cdb75094cd7218ed2b0475aefabe80
|-
| maps/b_shell0.bsp  ||style=text-align:right|  5044 || 574824b3c52661959d633a76dc823859
|-
| maps/b_shell1.bsp  ||style=text-align:right|  5044 || dc8b8dcb490e204e615b2b9cdc673296
|-
| maps/e1m1.bsp  ||style=text-align:right|  1365176 || 84cae48010619bcc945426b91bc03ade
|-
| maps/e1m2.bsp  ||style=text-align:right|  1332228 || caff91afbe41f3eac4dda65cee0083c9
|-
| maps/e1m3.bsp  ||style=text-align:right|  1249944 || f20eaa5692e94ab889c4ade9e1c116c7
|-
| maps/e1m4.bsp  ||style=text-align:right|  1411452 || 29419f05ef647f83d0482502bb3f84f8
|-
| maps/e1m5.bsp  ||style=text-align:right|  1324060 || afd98cc890d748986186951b32fc9fcb
|-
| maps/e1m6.bsp  ||style=text-align:right|  1065080 || ec178e54ff68c4d8cf71e26775b2eb2d
|-
| maps/e1m7.bsp  ||style=text-align:right|  607420 || 0c1f55455e0f957291e21d211b689718
|-
| maps/e1m8.bsp  ||style=text-align:right|  924116 || 18c7ab2f922d5d586150afbc27c323a4
|-
| maps/start.bsp  ||style=text-align:right|  1433792 || 61a57bb4ca36368478f02b142d1b5291
|-
| progs/armor.mdl  ||style=text-align:right|  44076 || ca060166d7e4e4686995f05645dde593
|-
| progs/backpack.mdl  ||style=text-align:right|  19348 || 315b4ef42fb035aa3318e8d2d61961ce
|-
| progs/bolt2.mdl  ||style=text-align:right|  11860 || f59ce07cfbe01fcfc578258c573d2c31
|-
| progs/bolt3.mdl  ||style=text-align:right|  11860 || ff87579a424faa59ca2695b7434ea488
|-
| progs/bolt.mdl  ||style=text-align:right|  20644 || a176903954e9d8c7ab629f92784546c2
|-
| progs/boss.mdl  ||style=text-align:right|  211836 || 25da3b2bc30677e32ee3a3a878a4d3af
|-
| progs.dat  ||style=text-align:right|  410616 || cb04964a1952169e03392ee83a9edb91
|-
| progs/demon.mdl  ||style=text-align:right|  102120 || 4c73786e7cfb2083ca38cbc983cd6c4b
|-
| progs/dog.mdl  ||style=text-align:right|  146056 || e727fbc39acc652f812972612ce37565
|-
| progs/end1.mdl  ||style=text-align:right|  20820 || 67c0fcab33d3772c00bb462b0e749275
|-
| progs/eyes.mdl  ||style=text-align:right|  4372 || ed72f64a17c6909b2cb3034a734bca97
|-
| progs/flame2.mdl  ||style=text-align:right|  64572 || f2c8f8950ebd7a0edded6247655d325b
|-
| progs/flame.mdl  ||style=text-align:right|  46364 || 8593c05374d84354d4444c218e86fdb8
|-
| progs/gib1.mdl  ||style=text-align:right|  5716 || f5c5b799e895dc03036522a487e99913
|-
| progs/gib2.mdl  ||style=text-align:right|  16228 || cfa9e97a3542852418123e0bb12e4f86
|-
| progs/gib3.mdl  ||style=text-align:right|  22228 || d73be7b2881e0a5aacf2b332ac29086f
|-
| progs/g_light.mdl  ||style=text-align:right|  50276 || 61bba06ec3804b7f355a62fd4585ad8f
|-
| progs/g_nail2.mdl  ||style=text-align:right|  30720 || ed6d7bb5ff050ad5f2bf4be7739a16a5
|-
| progs/g_nail.mdl  ||style=text-align:right|  34700 || e2959ca741c764dd42025ef531a1b554
|-
| progs/grenade.mdl  ||style=text-align:right|  2244 || f492d6257c216306983a72f41db0d891
|-
| progs/g_rock2.mdl  ||style=text-align:right|  40756 || 68c047c97bab89afe2cb69e65b7c62e1
|-
| progs/g_rock.mdl  ||style=text-align:right|  48244 || 61346f842944795e0821e31e3d61b427
|-
| progs/g_shot.mdl  ||style=text-align:right|  32916 || 7facfec1a3cfb892cce871f398e9cb6b
|-
| progs/h_demon.mdl  ||style=text-align:right|  34884 || 5253a0ea93d9624d73fb984ee339b52f
|-
| progs/h_dog.mdl  ||style=text-align:right|  24436 || a0b5f87522b3a769548c46cf3bb4223e
|-
| progs/h_guard.mdl  ||style=text-align:right|  5428 || 18a629b53b87392030df63b7806eb833
|-
| progs/h_knight.mdl  ||style=text-align:right|  7156 || 46a03fa72b0cdebcf58045aba2fafc13
|-
| progs/h_ogre.mdl  ||style=text-align:right|  14900 || 14eb06611c769e254d0531c05919bdf5
|-
| progs/h_player.mdl  ||style=text-align:right|  14708 || bf1773df7d3e19c5b211a1ee408f6b05
|-
| progs/h_shams.mdl  ||style=text-align:right|  37060 || ff1e04e18c57667991341a011fb6c363
|-
| progs/h_wizard.mdl  ||style=text-align:right|  14804 || 4bc6be40128f313cf9ad06c347310735
|-
| progs/h_zombie.mdl  ||style=text-align:right|  4484 || 0fdef7f7cd05a3209e0a163e87f69f8b
|-
| progs/invisibl.mdl  ||style=text-align:right|  7092 || 1e87d86af02e69db9c9f27f5fddc7a47
|-
| progs/invulner.mdl  ||style=text-align:right|  23920 || 8c8d83e4d50c3282d009b333a1280422
|-
| progs/knight.mdl  ||style=text-align:right|  101404 || 5328915db5c53e85cf75d46e7b747fb9
|-
| progs/lavaball.mdl  ||style=text-align:right|  8788 || 92af53d2145681e37877dbc1d12801b2
|-
| progs/m_g_key.mdl  ||style=text-align:right|  12820 || 192c2650a115c91706f6fa8fe68beb45
|-
| progs/missile.mdl  ||style=text-align:right|  57796 || 47f19f9e34954b93443c9759dd2e7ba0
|-
| progs/m_s_key.mdl  ||style=text-align:right|  12820 || 20837376b391cdd5c92e57b84e05687f
|-
| progs/ogre.mdl  ||style=text-align:right|  162036 || fbb592ca3788a576dd2f31fcf8c80fab
|-
| progs/player.mdl  ||style=text-align:right|  191852 || 405cef9a10d96cdabffb5e91312f8e5c
|-
| progs/quaddama.mdl  ||style=text-align:right|  39992 || 00b177ff272a4779097ea08344da8aff
|-
| progs/s_bubble.spr  ||style=text-align:right|  588 || 7c0887630ed468205292d8cb7abcae93
|-
| progs/s_explod.spr  ||style=text-align:right|  18972 || 766c6a92c26b54f68f7ff87c90d71cf2
|-
| progs/shambler.mdl  ||style=text-align:right|  98556 || 9b09375a0f614dc4081e363cc34f1185
|-
| progs/s_light.mdl  ||style=text-align:right|  27596 || ee6649ea5673989f3aa06213a8d65f76
|-
| progs/s_light.spr  ||style=text-align:right|  1080 || aff44ba238f4e1d0d504d6f9700aadb4
|-
| progs/soldier.mdl  ||style=text-align:right|  146288 || 5b6c30a984872b4273dd5861412d35c5
|-
| progs/spike.mdl  ||style=text-align:right|  1684 || be4cb73125f939284376080acc9887dd
|-
| progs/s_spike.mdl  ||style=text-align:right|  1684 || ebb1d58242b64a703623c8a33fcbd9e6
|-
| progs/suit.mdl  ||style=text-align:right|  51236 || 882a61f5eea7f9cdbc04800b963cef85
|-
| progs/v_axe.mdl  ||style=text-align:right|  57908 || 577dadcca2700068995c808dc7dec76f
|-
| progs/v_light.mdl  ||style=text-align:right|  56204 || 68733d4c690de88b5c3ba33e52be1c15
|-
| progs/v_nail2.mdl  ||style=text-align:right|  68732 || aacd1002ab02662cc1d3ff46885b553e
|-
| progs/v_nail.mdl  ||style=text-align:right|  54472 || ec9ba028b346da2f9674c2a521ff0c2f
|-
| progs/v_rock2.mdl  ||style=text-align:right|  58188 || 96edf1a3c7629987c200361523f780d7
|-
| progs/v_rock.mdl  ||style=text-align:right|  58548 || 7bea46b2a75fd7cff2fb99420e4c4e25
|-
| progs/v_shot2.mdl  ||style=text-align:right|  50816 || 922b3b687766ae0d7aeb73d44dec7035
|-
| progs/v_shot.mdl  ||style=text-align:right|  43852 || 1fd140b6856843e83cd9bf3966f5d7dd
|-
| progs/w_g_key.mdl  ||style=text-align:right|  7252 || c5c5f0d14b022f57294ad9aded318250
|-
| progs/wizard.mdl  ||style=text-align:right|  64472 || bf60986594f045e60e8aa6339d553ee7
|-
| progs/w_s_key.mdl  ||style=text-align:right|  7252 || ec02314a7d12439d36b4eb2dd0a641a8
|-
| progs/w_spike.mdl  ||style=text-align:right|  14336 || 8cf9245df2164e8062b01a220b508d6b
|-
| progs/zombie.mdl  ||style=text-align:right|  186084 || a923b1d03b9d237dd5ead9bd56acc900
|-
| progs/zom_gib.mdl  ||style=text-align:right|  10196 || cf42c938caa5b19f719d1f110b1dc6d4
|-
| quake.rc  ||style=text-align:right|  293 || 411d42958aaeae141813f9ebfcf5233f
|-
| sound/ambience/buzz1.wav  ||style=text-align:right|  36308 || 346a00c795c6f1f1338ade6fc350b3fe
|-
| sound/ambience/comp1.wav  ||style=text-align:right|  62734 || f91a1120de804f7cd4dbba4f12c748e9
|-
| sound/ambience/drip1.wav  ||style=text-align:right|  137736 || 2306a76162eeda3d0812c516bc99aa7a
|-
| sound/ambience/drone6.wav  ||style=text-align:right|  18522 || 322853ddb42ad2a205579b5cca8e2e8c
|-
| sound/ambience/fire1.wav  ||style=text-align:right|  24064 || 610d3985ed8133988e8de3bec2b9cbbe
|-
| sound/ambience/fl_hum1.wav  ||style=text-align:right|  50154 || e4628499702e004c4bacd282a3ecb8c0
|-
| sound/ambience/hum1.wav  ||style=text-align:right|  40166 || 486bfa737c35b0c9dda57cbee2a540af
|-
| sound/ambience/suck1.wav  ||style=text-align:right|  110392 || 2e99e4d1fe1501d5191c8157d3063cb6
|-
| sound/ambience/swamp1.wav  ||style=text-align:right|  68524 || 29ffb678d78997eb6c227677c86ea4f8
|-
| sound/ambience/swamp2.wav  ||style=text-align:right|  68526 || 356aa1e875da846e72d8f17bbb699a5b
|-
| sound/ambience/thunder1.wav  ||style=text-align:right|  41492 || cefd6ced4b5bc79fcece1003238566f6
|-
| sound/ambience/water1.wav  ||style=text-align:right|  55784 || 6eeaae0a3450652d2be0782895297ee4
|-
| sound/ambience/wind2.wav  ||style=text-align:right|  28610 || 030cf8dd2b00a12454b5b35a89d03914
|-
| sound/ambience/windfly.wav  ||style=text-align:right|  22140 || c7be01e6d324e66883f70aa0072a99b0
|-
| sound/boss1/death.wav  ||style=text-align:right|  27600 || 43469b1acd35b67107da5da82e1df911
|-
| sound/boss1/out1.wav  ||style=text-align:right|  50344 || 847a6f971f6905dfaffd70b30d18a4b1
|-
| sound/boss1/pain.wav  ||style=text-align:right|  17700 || 49112740c0ff421f9272b9e8efc748cd
|-
| sound/boss1/sight1.wav  ||style=text-align:right|  24768 || 427dd600e6b28c9402212adcc5d652c7
|-
| sound/boss1/throw.wav  ||style=text-align:right|  11526 || 9b6e9ff2c8df448f7fd4b5315e60ddda
|-
| sound/buttons/airbut1.wav  ||style=text-align:right|  10672 || 9d2e14e7176842a0dce909a43d38873d
|-
| sound/buttons/switch02.wav  ||style=text-align:right|  3746 || d2e9cba3a353edc65115f6f5c574403c
|-
| sound/buttons/switch04.wav  ||style=text-align:right|  3666 || ff47857a58d3faefb2b94a37d7ba4f26
|-
| sound/buttons/switch21.wav  ||style=text-align:right|  6318 || 3605b0d061a9baf185c6ab7614534531
|-
| sound/demon/ddeath.wav  ||style=text-align:right|  9140 || 62a48dcd405ca55c9ce18497e36faa0e
|-
| sound/demon/dhit2.wav  ||style=text-align:right|  7142 || 9e741696e4d0d66e30e718fc70ec186e
|-
| sound/demon/djump.wav  ||style=text-align:right|  8494 || 791ac9d6b6593808316145443cb7e7a0
|-
| sound/demon/dland2.wav  ||style=text-align:right|  4400 || db14c7b01838f826b7a712075f9026fd
|-
| sound/demon/dpain1.wav  ||style=text-align:right|  6282 || 5e6c485878393c9bebb0d0e6659bc479
|-
| sound/demon/idle1.wav  ||style=text-align:right|  9098 || 7a83f8caf3d5b1172a7dc5afdc942988
|-
| sound/demon/sight2.wav  ||style=text-align:right|  8804 || 65171c355c22a5069520b0881677ae3c
|-
| sound/dog/dattack1.wav  ||style=text-align:right|  8154 || 0c47c9d4aaae0bf3159a288b674f4a35
|-
| sound/dog/ddeath.wav  ||style=text-align:right|  14912 || b0e7760b1d7286a028ff9773f6802958
|-
| sound/dog/dpain1.wav  ||style=text-align:right|  7240 || 28e5ab93b41e13e2916433283a5d1a46
|-
| sound/dog/dsight.wav  ||style=text-align:right|  6722 || 0edc290765bac1fb4fe03ca55bc7c225
|-
| sound/dog/idle.wav  ||style=text-align:right|  6870 || 42bd6026ff32bd94523ad9f8fe8362cc
|-
| sound/doors/airdoor1.wav  ||style=text-align:right|  13654 || 9b91930e8c2fdece31a2362296891122
|-
| sound/doors/airdoor2.wav  ||style=text-align:right|  8594 || 29fd823d1c14ca42a9a89c716b26f4cd
|-
| sound/doors/basesec1.wav  ||style=text-align:right|  13930 || eb2363fed42724f55e8f55f96c335bcf
|-
| sound/doors/basesec2.wav  ||style=text-align:right|  10238 || 8d163a56607c9cf64a270a156c1c5cef
|-
| sound/doors/basetry.wav  ||style=text-align:right|  10518 || a5108d5c51281ab55c0baf884cbe8cbe
|-
| sound/doors/baseuse.wav  ||style=text-align:right|  16486 || f43fee91efe813a5eb34e9d72918fdb9
|-
| sound/doors/ddoor1.wav  ||style=text-align:right|  7738 || dff86a26139cdd49a193d5ed7ebf6ae1
|-
| sound/doors/ddoor2.wav  ||style=text-align:right|  5904 || 4a9d0b0825d0302ce465569d1e35fbcf
|-
| sound/doors/doormv1.wav  ||style=text-align:right|  14036 || 3fd379aec80a2ad8105c0c89ba5b40e6
|-
| sound/doors/drclos4.wav  ||style=text-align:right|  12814 || 83df1865a0c9fa5d02c2f137564c57de
|-
| sound/doors/hydro1.wav  ||style=text-align:right|  11094 || b1703980a20e624bc3366ccf55ca617e
|-
| sound/doors/hydro2.wav  ||style=text-align:right|  10700 || b1866f5b3950788ccf4206444ab64bc7
|-
| sound/doors/latch2.wav  ||style=text-align:right|  7338 || ad2378ca21a0ca529df328261e07aed5
|-
| sound/doors/medtry.wav  ||style=text-align:right|  7828 || ebb536bec2cdfd22c25b35793c055339
|-
| sound/doors/meduse.wav  ||style=text-align:right|  10718 || 4522aada194b23eb33b541cbcc755cf6
|-
| sound/doors/runetry.wav  ||style=text-align:right|  13524 || c433bae9e2ab508712f87dc2cacc82c8
|-
| sound/doors/runeuse.wav  ||style=text-align:right|  17364 || b4bcfd525a26f5b5ecc9d392430d9079
|-
| sound/doors/stndr1.wav  ||style=text-align:right|  12620 || 5bae2183885e18d65d69624e85249fd9
|-
| sound/doors/stndr2.wav  ||style=text-align:right|  11470 || f43a75c917effff09ef7be8a321c8b49
|-
| sound/doors/winch2.wav  ||style=text-align:right|  14872 || a4edffdfede7dbaed37db526c26e2b6d
|-
| sound/hknight/hit.wav  ||style=text-align:right|  6260 || fece24e2548f1d769e8fce39a5c87d01
|-
| sound/items/armor1.wav  ||style=text-align:right|  7714 || 186d29f2baf35b8c280bc97754606fad
|-
| sound/items/damage2.wav  ||style=text-align:right|  33012 || 14e53b7617ffe315a7c3f8d89652e51c
|-
| sound/items/damage3.wav  ||style=text-align:right|  12894 || baf754aec7ed4baba16760ac85513184
|-
| sound/items/damage.wav  ||style=text-align:right|  23374 || 8cde8b9278ca4922a4ec7ead6e5ee01b
|-
| sound/items/health1.wav  ||style=text-align:right|  7958 || 52a2c4f808db4edd8393de0de618c91f
|-
| sound/items/inv1.wav  ||style=text-align:right|  13728 || 5850cab55d6197d0e76d9f0a22ba10be
|-
| sound/items/inv2.wav  ||style=text-align:right|  33216 || 4edcd38a2c6adc5305636dd7afd5ef60
|-
| sound/items/inv3.wav  ||style=text-align:right|  33320 || 325c268be05b42a019ccb92e6993ab9e
|-
| sound/items/itembk2.wav  ||style=text-align:right|  9910 || 270c688b3cb884f5d4e5ffd8ccc934a1
|-
| sound/items/protect2.wav  ||style=text-align:right|  34012 || 25627a4bd2b4c6054cfd2fc4bf69ddc2
|-
| sound/items/protect3.wav  ||style=text-align:right|  23364 || 7b9374d67f6d59e524bba2af236ca30a
|-
| sound/items/protect.wav  ||style=text-align:right|  22536 || d839d5a84f811ce8a0e28616891bf1a7
|-
| sound/items/r_item1.wav  ||style=text-align:right|  6822 || 3fc0d0ae4a71c9fbfe548f38626c6a08
|-
| sound/items/r_item2.wav  ||style=text-align:right|  7448 || 384ffefe795d99df75f381596a0f1976
|-
| sound/items/suit2.wav  ||style=text-align:right|  33254 || 0a9d2766a5b805cb5794f9bea57e6585
|-
| sound/items/suit.wav  ||style=text-align:right|  15854 || da413f34023d219f1e34fde50a037be0
|-
| sound/knight/idle.wav  ||style=text-align:right|  11064 || 1b5c3981bee078318af346d8fe8090b9
|-
| sound/knight/kdeath.wav  ||style=text-align:right|  10688 || 11a96f48a8f2433c23beae299c8fb96e
|-
| sound/knight/khurt.wav  ||style=text-align:right|  5586 || 32c9f48dd4a6a87752aedf56fe8de668
|-
| sound/knight/ksight.wav  ||style=text-align:right|  13514 || eb75b4af348c88e84d8c87c19d5976fa
|-
| sound/knight/sword1.wav  ||style=text-align:right|  2306 || 93045b5f3178413dc6b01ec2869d1f73
|-
| sound/knight/sword2.wav  ||style=text-align:right|  2784 || 82d1a7c263cd3df7b060dee2f7f8b1fd
|-
| sound/misc/h2ohit1.wav  ||style=text-align:right|  12972 || 49ecb03f4f10862453656a67598f8b8a
|-
| sound/misc/medkey.wav  ||style=text-align:right|  10020 || 0e3ae5626a47d81e4166539e355e31bb
|-
| sound/misc/menu1.wav  ||style=text-align:right|  5738 || 12c36546601c385bc47c9ca9420b7eee
|-
| sound/misc/menu2.wav  ||style=text-align:right|  10672 || 39b01ea6feb3ec8dbd6d8ee3e5e966c4
|-
| sound/misc/menu3.wav  ||style=text-align:right|  3010 || 4a03dc2fd56831b855dab761eac4f7de
|-
| sound/misc/null.wav  ||style=text-align:right|  1244 || 811989e09124f54cb27fe6154b0f1018
|-
| sound/misc/outwater.wav  ||style=text-align:right|  5018 || 35732412412ddb5ed418633bb0123bbe
|-
| sound/misc/power.wav  ||style=text-align:right|  19832 || 9f2c3a18d9fc8d9cecfac6db3aad6bc6
|-
| sound/misc/r_tele1.wav  ||style=text-align:right|  8036 || c2194171b4c446e136ed7514fbb098a5
|-
| sound/misc/r_tele2.wav  ||style=text-align:right|  17324 || 0ce662ac90fb3658d69320d1be4025c1
|-
| sound/misc/r_tele3.wav  ||style=text-align:right|  18016 || 122ef44813edcfe7391578fd29e729d2
|-
| sound/misc/r_tele4.wav  ||style=text-align:right|  9068 || 0097b5747ccc70d5b12fc6838aff02c2
|-
| sound/misc/r_tele5.wav  ||style=text-align:right|  22042 || a82334cbb66d12f28cce9e71c90ea50b
|-
| sound/misc/runekey.wav  ||style=text-align:right|  14578 || 6b21a2e5878011da50fdee0a301d3e34
|-
| sound/misc/secret.wav  ||style=text-align:right|  6610 || a02ceefcc24b1ebf5c164a1e1acfb05f
|-
| sound/misc/talk.wav  ||style=text-align:right|  1810 || d5b25d4df59d92ac5016e88689ea60c1
|-
| sound/misc/trigger1.wav  ||style=text-align:right|  20230 || dc927c8a1d0a9bd59fbc5dd91ae1d812
|-
| sound/misc/water1.wav  ||style=text-align:right|  3926 || d8291c762acb1edf24927fdcc0f6a6cd
|-
| sound/misc/water2.wav  ||style=text-align:right|  3340 || 049e8e7e7b30d4d8038afb7248bdd977
|-
| sound/ogre/ogdrag.wav  ||style=text-align:right|  12396 || 658587dc89aaefae5ca3f058f7ff4227
|-
| sound/ogre/ogdth.wav  ||style=text-align:right|  13892 || de98e7bb9e70586edddd3308cfded3db
|-
| sound/ogre/ogidle2.wav  ||style=text-align:right|  11254 || 196ae9c33a4311160e1d5f3da878ab09
|-
| sound/ogre/ogidle.wav  ||style=text-align:right|  12894 || 177c829840a87c885bbc8951e7ce962e
|-
| sound/ogre/ogpain1.wav  ||style=text-align:right|  7898 || ac6d133d7720c12df49813fe10e683b5
|-
| sound/ogre/ogsawatk.wav  ||style=text-align:right|  16154 || 7257bdfd014bb61d778b8f88cb65d560
|-
| sound/ogre/ogwake.wav  ||style=text-align:right|  19356 || 3296459e495c4c12b31179d4eeffac19
|-
| sound/plats/medplat1.wav  ||style=text-align:right|  16378 || b73215aa6627c8b5b90fce8d260d48d0
|-
| sound/plats/medplat2.wav  ||style=text-align:right|  7338 || 1fc6c3772917a1a8155d04fa52e17005
|-
| sound/plats/plat1.wav  ||style=text-align:right|  20248 || 5d43ed85d896ba926f459e06ba6635d5
|-
| sound/plats/plat2.wav  ||style=text-align:right|  7338 || 49d7ab0fd726cd652eb6e5756fce61b9
|-
| sound/plats/train1.wav  ||style=text-align:right|  21430 || b589ae8262046361d9dca39d6b8f693a
|-
| sound/plats/train2.wav  ||style=text-align:right|  5870 || 640017e1b870d643e3bca29d499c72ee
|-
| sound/player/axhit1.wav  ||style=text-align:right|  6906 || 149b2371334da318386325182924eaca
|-
| sound/player/axhit2.wav  ||style=text-align:right|  2434 || fc01909318455f5310efa2457a370897
|-
| sound/player/death1.wav  ||style=text-align:right|  10170 || ba005f5488d4ee78dabf613a03f33a5f
|-
| sound/player/death2.wav  ||style=text-align:right|  8026 || 20477d2e7c84aac1bef95d32c9c702dd
|-
| sound/player/death3.wav  ||style=text-align:right|  10918 || 7b206ba8e1fa28d8605b50e3f3200f11
|-
| sound/player/death4.wav  ||style=text-align:right|  14126 || 1b0f27f4d41b748d3cc5c3d56bd917f8
|-
| sound/player/death5.wav  ||style=text-align:right|  14946 || 7efe84195cfa97515aad2d7f96f25346
|-
| sound/player/drown1.wav  ||style=text-align:right|  8908 || 732f0416af6990e028110380bcb36f0d
|-
| sound/player/drown2.wav  ||style=text-align:right|  3114 || 29ee1f287879acce29b15d4722668bc2
|-
| sound/player/gasp1.wav  ||style=text-align:right|  8702 || b06cbc370c8c2c163dc4d487e8b673c7
|-
| sound/player/gasp2.wav  ||style=text-align:right|  13134 || 30aece9d8779764620c7f866bfb06edb
|-
| sound/player/gib.wav  ||style=text-align:right|  14424 || 26fa9942078125388f34b71546615068
|-
| sound/player/h2odeath.wav  ||style=text-align:right|  18104 || 73b0f4dfae07f6e49112cadfe202735c
|-
| sound/player/h2ojump.wav  ||style=text-align:right|  11438 || cd421b96410971bb1a4f21d3936a3805
|-
| sound/player/inh2o.wav  ||style=text-align:right|  11340 || d4c1a27c4d07e8dfdf18a4b1a880c610
|-
| sound/player/inlava.wav  ||style=text-align:right|  10958 || c37875a082900716b7af88d2d990f55c
|-
| sound/player/land2.wav  ||style=text-align:right|  6204 || 6ba534256a779d66d9d9dabb90e63c8b
|-
| sound/player/land.wav  ||style=text-align:right|  2434 || e34328a40358d98f0f95403b9e27ec1e
|-
| sound/player/lburn1.wav  ||style=text-align:right|  6682 || 3c447c72385defe97c060771077d8ba0
|-
| sound/player/lburn2.wav  ||style=text-align:right|  6076 || 6849ee8dbd91ec82ece016fbd39b0a5c
|-
| sound/player/pain1.wav  ||style=text-align:right|  3394 || d7ac9df7540b791f952ca2a681c0265b
|-
| sound/player/pain2.wav  ||style=text-align:right|  2710 || 513e054b64d4fb61f31384d59e123020
|-
| sound/player/pain3.wav  ||style=text-align:right|  4854 || aafc61ad4e16cc5cdd2db2100796b494
|-
| sound/player/pain4.wav  ||style=text-align:right|  4840 || f655ef2045bc55473303b27546aa6fc0
|-
| sound/player/pain5.wav  ||style=text-align:right|  8020 || f8551a73cb89396042687baa8c68b5c2
|-
| sound/player/pain6.wav  ||style=text-align:right|  5462 || 70062eabf96288d307280fb601ce0ee2
|-
| sound/player/plyrjmp8.wav  ||style=text-align:right|  3888 || d4a552d8f627c7f3b933568c4a74c913
|-
| sound/player/slimbrn2.wav  ||style=text-align:right|  12468 || b17c18a9f81a952f2d41f65b5180f210
|-
| sound/player/teledth1.wav  ||style=text-align:right|  14414 || c226c7f041187ba058d8112cc0190b56
|-
| sound/player/tornoff2.wav  ||style=text-align:right|  7726 || 03ec1c805b307b8fe4c4052f8332a5e5
|-
| sound/player/udeath.wav  ||style=text-align:right|  16082 || afe674f287efb6197da2cea0c0b1d2f8
|-
| sound/shambler/melee1.wav  ||style=text-align:right|  4718 || 77fe6240973a204b757a427ebf66bcfd
|-
| sound/shambler/melee2.wav  ||style=text-align:right|  5966 || 3be31638d769e3d690c92311dfafdeac
|-
| sound/shambler/sattck1.wav  ||style=text-align:right|  8036 || ec8c3f79ea42d09154cb8975ada1b21c
|-
| sound/shambler/sboom.wav  ||style=text-align:right|  11672 || 9834601a645d7d1f62001b2a314ec18f
|-
| sound/shambler/sdeath.wav  ||style=text-align:right|  21106 || e0e62d229a985a6e39218c6488599059
|-
| sound/shambler/shurt2.wav  ||style=text-align:right|  4302 || 1e87631ede95e061a75f9c31629ac0b8
|-
| sound/shambler/sidle.wav  ||style=text-align:right|  5646 || 368a240e6c3e877793352a79c1828386
|-
| sound/shambler/smack.wav  ||style=text-align:right|  5300 || bd8c634c9894348360fec7b7419d1649
|-
| sound/shambler/ssight.wav  ||style=text-align:right|  15420 || 657107577460d5acf3157dec97e07a89
|-
| sound/soldier/death1.wav  ||style=text-align:right|  8434 || fe25952af40b536c3bb67bfca58062eb
|-
| sound/soldier/idle.wav  ||style=text-align:right|  9802 || 4cdfbdda8fb5f40b125c7bcddb6e8914
|-
| sound/soldier/pain1.wav  ||style=text-align:right|  5000 || 54d3b05fdcecf7480034858f2b22b06c
|-
| sound/soldier/pain2.wav  ||style=text-align:right|  7838 || e2bbc9d3405b9b9fdae76d2fc298fc2f
|-
| sound/soldier/sattck1.wav  ||style=text-align:right|  14302 || b76ac35f900f280a7a7996da7e404362
|-
| sound/soldier/sight1.wav  ||style=text-align:right|  12716 || e2a39533250ddd1b08053d5c4ebf7fd0
|-
| sound/weapons/ax1.wav  ||style=text-align:right|  3308 || 237d4d819d02ad37849a8a895cc410e1
|-
| sound/weapons/bounce.wav  ||style=text-align:right|  5864 || fced668c6558a9505abf5014d60528a6
|-
| sound/weapons/grenade.wav  ||style=text-align:right|  8364 || d2b6fa131933f203eba2a282276e88df
|-
| sound/weapons/guncock.wav  ||style=text-align:right|  14430 || 6a63452167cc106e756518536446844f
|-
| sound/weapons/lhit.wav  ||style=text-align:right|  26028 || fefd021d0bd35a1f8da8870f1c06abb9
|-
| sound/weapons/lock4.wav  ||style=text-align:right|  3876 || 3fd93222258d5b1500b150f021c94519
|-
| sound/weapons/lstart.wav  ||style=text-align:right|  56378 || abe1abf6dcadcda5930b0684c7ea820a
|-
| sound/weapons/pkup.wav  ||style=text-align:right|  5174 || 0aa6f0a7d609e1a56fd535a06d1bb56e
|-
| sound/weapons/r_exp3.wav  ||style=text-align:right|  17478 || 57db026474fc76ba7f38cea24eaaf8cf
|-
| sound/weapons/ric1.wav  ||style=text-align:right|  4308 || a31166b4bbb4509ac3004a01f7477ee9
|-
| sound/weapons/ric2.wav  ||style=text-align:right|  10838 || a180b447c0527e603cea54a9aefd6139
|-
| sound/weapons/ric3.wav  ||style=text-align:right|  12638 || 8a773bbb585540ddce256151162f3a2c
|-
| sound/weapons/rocket1i.wav  ||style=text-align:right|  9660 || fb4fdf345d805cf6980c4c695974effc
|-
| sound/weapons/sgun1.wav  ||style=text-align:right|  22992 || 95a14815e48deb323d0cf8251d728ac7
|-
| sound/weapons/shotgn2.wav  ||style=text-align:right|  8694 || cb561cefbf472232334b419af050e5a0
|-
| sound/weapons/spike2.wav  ||style=text-align:right|  12642 || 9189d811855f108da4a1e2d34dc7c633
|-
| sound/weapons/tink1.wav  ||style=text-align:right|  1252 || 297ba8706625fcf05887edb393e9a441
|-
| sound/wizard/hit.wav  ||style=text-align:right|  7332 || 6598d669334df977f1f97b95288edf11
|-
| sound/wizard/wattack.wav  ||style=text-align:right|  25912 || b3568a47439f81779d40335e76f5bc2d
|-
| sound/wizard/wdeath.wav  ||style=text-align:right|  20684 || 99d9c71343bc23222abb92119d404400
|-
| sound/wizard/widle1.wav  ||style=text-align:right|  13464 || b22b1dd9f66879b3447d36ab584316c7
|-
| sound/wizard/widle2.wav  ||style=text-align:right|  23094 || 7178fd83df227360564adef01bed92c6
|-
| sound/wizard/wpain.wav  ||style=text-align:right|  8686 || bd7e59ab7d7b835f9ed8ab51950914de
|-
| sound/wizard/wsight.wav  ||style=text-align:right|  13078 || df5949057c750528917c6cb32b7fd9fd
|-
| sound/zombie/idle_w2.wav  ||style=text-align:right|  17192 || d2bb59b9d7ac71097c07123a23525641
|-
| sound/zombie/z_fall.wav  ||style=text-align:right|  3062 || 6968318b2d196c6d54bc707d8a390547
|-
| sound/zombie/z_gib.wav  ||style=text-align:right|  16226 || 199dda66ade8d6f0ef4897e4d7608c0d
|-
| sound/zombie/z_hit.wav  ||style=text-align:right|  6166 || 6c66ab3e6b149bf35956a4bbc0057acb
|-
| sound/zombie/z_idle1.wav  ||style=text-align:right|  13244 || 21088a7b38b1124d7ec72e58d5ab93a6
|-
| sound/zombie/z_idle.wav  ||style=text-align:right|  16734 || e5e570e38c4405111004190a79f0e925
|-
| sound/zombie/z_miss.wav  ||style=text-align:right|  10734 || 96fad96a8c3bc6f7bcc5da6c82678da2
|-
| sound/zombie/z_pain1.wav  ||style=text-align:right|  15374 || fcd83b89a94b0cadbe1361a4df080ec0
|-
| sound/zombie/z_pain.wav  ||style=text-align:right|  12218 || 56637968b8309bd2f825153330bbdfc0
|-
| sound/zombie/z_shot1.wav  ||style=text-align:right|  3068 || 561afb69b7851923a8fb3b54e3e13c96
|-
|}
&lt;/tt&gt;

=== 85fc9cee2035b66290da1e33be2ac86b ===
The [[id1]] ''pak0.pak'' with the md5sum 85fc9cee2035b66290da1e33be2ac86b contains exactly the same folders &amp; files as fc989b37572fae074e8ffda0ce4d5297.

=== 5906e5998fc3d896ddaf5e6a62e03abb ===
The [[id1]] ''pak0.pak'' with the md5sum 5906e5998fc3d896ddaf5e6a62e03abb contains the following folders &amp; files:
&lt;tt&gt;
{| class=&quot;wikitable collapsible collapsed&quot;
! Path !! Size !! md5
|-
| default.cfg  ||style=text-align:right|  1914 || fc989b37572fae074e8ffda0ce4d5297
|-
| demo1.dem  ||style=text-align:right|  184471 || 85ec0141ab24d9732e487d1aafa791f0
|-
| demo2.dem  ||style=text-align:right|  152705 || fa5c3daf7a57954cd95f94b698a7e420
|-
| demo3.dem  ||style=text-align:right|  197679 || 691f37e5715ea2863c1d8092a6429824
|-
| end1.bin  ||style=text-align:right|  4000 || 92ae51961ec2f429dfe9bea1138fbd5d
|-
| gfx/bigbox.lmp  ||style=text-align:right|  5192 || e597771ac6149b2b071ebfd24981ea04
|-
| gfx/box_bl.lmp  ||style=text-align:right|  72 || 5b094c37c2c1c2eebe37f84117dea182
|-
| gfx/box_bm.lmp  ||style=text-align:right|  136 || 44621236738e2bf8d669e53dca887278
|-
| gfx/box_br.lmp  ||style=text-align:right|  72 || 86597d5325b472caf5644644033e5cab
|-
| gfx/box_ml.lmp  ||style=text-align:right|  72 || adcea286ba0ac01084fd0c131b16ffdd
|-
| gfx/box_mm2.lmp  ||style=text-align:right|  136 || b850bcec189d909e7a0f796111a11249
|-
| gfx/box_mm.lmp  ||style=text-align:right|  136 || 700b4884b1a3c6aa7356a43014261866
|-
| gfx/box_mr.lmp  ||style=text-align:right|  72 || e30d9ea783ef7dd50101682f03ba40d7
|-
| gfx/box_tl.lmp  ||style=text-align:right|  72 || 3903d3d814e37c55790ac0ccfef2b925
|-
| gfx/box_tm.lmp  ||style=text-align:right|  136 || 7cb85ccbf8e7d2532da2a839a7cef348
|-
| gfx/box_tr.lmp  ||style=text-align:right|  72 || 5c5e72746af821a4cf8437d8fecc53c7
|-
| gfx/colormap.lmp  ||style=text-align:right|  16385 || 0d793b70bffafbd666fc5c88d6e15e9d
|-
| gfx/complete.lmp  ||style=text-align:right|  4616 || db6a00dfbe2c62a43c261e5622297c4a
|-
| gfx/conback.lmp  ||style=text-align:right|  64008 || 9eb6f9c47870bf42985d9382958a5c12
|-
| gfx/dim_drct.lmp  ||style=text-align:right|  3352 || 50ea11fe8c4d9db92863bdcd03b89df5
|-
| gfx/dim_ipx.lmp  ||style=text-align:right|  3352 || 0bef9943487f0611225bf0a5c0fe5dd4
|-
| gfx/dim_modm.lmp  ||style=text-align:right|  3352 || 3288f03144f06b95cadafa9458a77b1d
|-
| gfx/dim_mult.lmp  ||style=text-align:right|  3352 || 348b7369227f2d7e9d0daccbf6c9344d
|-
| gfx/dim_tcp.lmp  ||style=text-align:right|  3352 || 7dc8bbb01d7c90cd51c28da0ff6ed900
|-
| gfx/finale.lmp  ||style=text-align:right|  6920 || b6e49409d344e0344273d86ea33fe35f
|-
| gfx/help0.lmp  ||style=text-align:right|  64008 || b392ac30ad49252b51ec934ed855c20f
|-
| gfx/help1.lmp  ||style=text-align:right|  64008 || 857543c69245117a606044ea63adac9a
|-
| gfx/help2.lmp  ||style=text-align:right|  64008 || 882dd5920ea9c19f637f32084de9788a
|-
| gfx/help3.lmp  ||style=text-align:right|  64008 || a89d169524920d896128009467deebfc
|-
| gfx/help4.lmp  ||style=text-align:right|  64008 || c72d67c84ae6b403fae5f08d3e5c3bc6
|-
| gfx/help5.lmp  ||style=text-align:right|  64008 || 12203d7cdec35c4f51622dd90ec92093
|-
| gfx/inter.lmp  ||style=text-align:right|  23048 || f6eabe0d742380c7b47a9ee44170993d
|-
| gfx/loading.lmp  ||style=text-align:right|  3464 || 3249bc994266529a1748c06bfbb24bfa
|-
| gfx/mainmenu.lmp  ||style=text-align:right|  26888 || 8122e2a0b8888f9d1ebef149551b6434
|-
| gfx/menudot1.lmp  ||style=text-align:right|  392 || bfdb08d84d580abcfbacc1c9abd62bfb
|-
| gfx/menudot2.lmp  ||style=text-align:right|  392 || 6c6d2176e00edbe530bb1db118aaa6dc
|-
| gfx/menudot3.lmp  ||style=text-align:right|  392 || 2527a05f6162efb3e4bc5311d9e010d5
|-
| gfx/menudot4.lmp  ||style=text-align:right|  392 || 90ea6be033b39b139b3779932d266f33
|-
| gfx/menudot5.lmp  ||style=text-align:right|  392 || c9beb9600c35e458d0f83b6cf1e1c692
|-
| gfx/menudot6.lmp  ||style=text-align:right|  392 || 31b9a6ec1d12a2bd56b955185a9e72d3
|-
| gfx/menuplyr.lmp  ||style=text-align:right|  2696 || 9eebe617ff51c4ce43f85ca1a6920d5b
|-
| gfx/mp_menu.lmp  ||style=text-align:right|  14856 || c6416b8f7f5262a5a19b9ce4be1fd9ce
|-
| gfx/netmen1.lmp  ||style=text-align:right|  3352 || 5bc6a8d8cfdfd7e940e933812954367a
|-
| gfx/netmen2.lmp  ||style=text-align:right|  3352 || c8aafb649a653e90fc5eb7b7a2b3ca2e
|-
| gfx/netmen3.lmp  ||style=text-align:right|  3352 || 11c9372d0e64057a1ec8251f596b820d
|-
| gfx/netmen4.lmp  ||style=text-align:right|  3352 || 74ec672b1312699be2eeaf25a68e4582
|-
| gfx/netmen5.lmp  ||style=text-align:right|  3352 || 231f8a9ea4ba364f517db0e9f7f1ba72
|-
| gfx/palette.lmp  ||style=text-align:right|  768 || 79bc149d4f2fb0bd68cd8400a3fd87d4
|-
| gfx/pause.lmp  ||style=text-align:right|  3080 || 5aa67f927719e4a9eb3e020e75fea969
|-
| gfx/p_load.lmp  ||style=text-align:right|  2504 || 27fe08071058385529b0b8ad746421e7
|-
| gfx/p_multi.lmp  ||style=text-align:right|  5192 || 5a307c7d11da20a4772ad9c00b9f4309
|-
| gfx/p_option.lmp  ||style=text-align:right|  3464 || 83a3bf4459bce3fe85857a0aa647b90a
|-
| gfx/p_save.lmp  ||style=text-align:right|  2120 || 0d2bb5fa5524e0180a85bf273094cd1f
|-
| gfx/qplaque.lmp  ||style=text-align:right|  4616 || f4de79557c75e26b85ea84fb6029a5f3
|-
| gfx/ranking.lmp  ||style=text-align:right|  4040 || 919b13d1f7fdd0082ec0f94699f3b681
|-
| gfx/sell.lmp  ||style=text-align:right|  64008 || 878db3866e8b38c5b8d951aef516358c
|-
| gfx/sp_menu.lmp  ||style=text-align:right|  14856 || f624aa79778970ecb8ef518b5ab435f6
|-
| gfx/ttl_cstm.lmp  ||style=text-align:right|  4424 || 4ee84e0e7fa93f0e93d26efb1e726a4d
|-
| gfx/ttl_main.lmp  ||style=text-align:right|  2312 || 07e1c8e189e2463befcfc44f5ecf8dcb
|-
| gfx/ttl_sgl.lmp  ||style=text-align:right|  3080 || 25d5360228da738f091063eaeb7c6aa8
|-
| gfx/vidmodes.lmp  ||style=text-align:right|  5192 || 18a97f403057777f262188903f485fe8
|-
| gfx.wad  ||style=text-align:right|  112828 || cde5b5890c8902c02a2f271abe8f4a1f
|-
| maps/b_batt0.bsp  ||style=text-align:right|  5044 || 00bc989f4c8d2570a2826a63c7356a27
|-
| maps/b_batt1.bsp  ||style=text-align:right|  4620 || 555bc0cb0b5c2ad2ed0110f307e70679
|-
| maps/b_bh100.bsp  ||style=text-align:right|  8820 || 62f78bb5143265f037b79ddd077c50ed
|-
| maps/b_bh10.bsp  ||style=text-align:right|  3936 || e80cde9f185612f669fc100f825ca84f
|-
| maps/b_bh25.bsp  ||style=text-align:right|  8872 || 032d70dbf8669b3627b82b41f31488bd
|-
| maps/b_explob.bsp  ||style=text-align:right|  10220 || d8c9db3cfa0264678afc580143f665ea
|-
| maps/b_nail0.bsp  ||style=text-align:right|  5044 || c8d7ec0bdee74e0c1e69e8dbe939117d
|-
| maps/b_nail1.bsp  ||style=text-align:right|  5044 || ea08b2bd6aa19ece0307f75c491e5d24
|-
| maps/b_rock0.bsp  ||style=text-align:right|  2956 || 19ce64cd248a4459bf37b45e6e7c1219
|-
| maps/b_rock1.bsp  ||style=text-align:right|  2944 || b4cdb75094cd7218ed2b0475aefabe80
|-
| maps/b_shell0.bsp  ||style=text-align:right|  5044 || 574824b3c52661959d633a76dc823859
|-
| maps/b_shell1.bsp  ||style=text-align:right|  5044 || dc8b8dcb490e204e615b2b9cdc673296
|-
| maps/e1m1.bsp  ||style=text-align:right|  1365176 || 84cae48010619bcc945426b91bc03ade
|-
| maps/e1m2.bsp  ||style=text-align:right|  1332228 || caff91afbe41f3eac4dda65cee0083c9
|-
| maps/e1m3.bsp  ||style=text-align:right|  1249944 || f20eaa5692e94ab889c4ade9e1c116c7
|-
| maps/e1m4.bsp  ||style=text-align:right|  1411452 || 29419f05ef647f83d0482502bb3f84f8
|-
| maps/e1m5.bsp  ||style=text-align:right|  1324060 || afd98cc890d748986186951b32fc9fcb
|-
| maps/e1m6.bsp  ||style=text-align:right|  1065080 || ec178e54ff68c4d8cf71e26775b2eb2d
|-
| maps/e1m7.bsp  ||style=text-align:right|  607420 || 0c1f55455e0f957291e21d211b689718
|-
| maps/e1m8.bsp  ||style=text-align:right|  924116 || 18c7ab2f922d5d586150afbc27c323a4
|-
| maps/start.bsp  ||style=text-align:right|  1433792 || 61a57bb4ca36368478f02b142d1b5291
|-
| progs/armor.mdl  ||style=text-align:right|  44076 || ca060166d7e4e4686995f05645dde593
|-
| progs/backpack.mdl  ||style=text-align:right|  19348 || 315b4ef42fb035aa3318e8d2d61961ce
|-
| progs/bolt2.mdl  ||style=text-align:right|  11860 || f59ce07cfbe01fcfc578258c573d2c31
|-
| progs/bolt3.mdl  ||style=text-align:right|  11860 || ff87579a424faa59ca2695b7434ea488
|-
| progs/bolt.mdl  ||style=text-align:right|  20644 || a176903954e9d8c7ab629f92784546c2
|-
| progs/boss.mdl  ||style=text-align:right|  211836 || 25da3b2bc30677e32ee3a3a878a4d3af
|-
| progs.dat  ||style=text-align:right|  413116 || 0c3ef3625df5883536f8da42c78b673a
|-
| progs/demon.mdl  ||style=text-align:right|  102120 || 4c73786e7cfb2083ca38cbc983cd6c4b
|-
| progs/dog.mdl  ||style=text-align:right|  146056 || e727fbc39acc652f812972612ce37565
|-
| progs/end1.mdl  ||style=text-align:right|  20820 || 67c0fcab33d3772c00bb462b0e749275
|-
| progs/eyes.mdl  ||style=text-align:right|  4372 || ed72f64a17c6909b2cb3034a734bca97
|-
| progs/flame2.mdl  ||style=text-align:right|  64572 || f2c8f8950ebd7a0edded6247655d325b
|-
| progs/flame.mdl  ||style=text-align:right|  46364 || 8593c05374d84354d4444c218e86fdb8
|-
| progs/gib1.mdl  ||style=text-align:right|  5716 || f5c5b799e895dc03036522a487e99913
|-
| progs/gib2.mdl  ||style=text-align:right|  16228 || cfa9e97a3542852418123e0bb12e4f86
|-
| progs/gib3.mdl  ||style=text-align:right|  22228 || d73be7b2881e0a5aacf2b332ac29086f
|-
| progs/g_light.mdl  ||style=text-align:right|  50276 || 61bba06ec3804b7f355a62fd4585ad8f
|-
| progs/g_nail2.mdl  ||style=text-align:right|  30720 || ed6d7bb5ff050ad5f2bf4be7739a16a5
|-
| progs/g_nail.mdl  ||style=text-align:right|  34700 || e2959ca741c764dd42025ef531a1b554
|-
| progs/grenade.mdl  ||style=text-align:right|  2244 || f492d6257c216306983a72f41db0d891
|-
| progs/g_rock2.mdl  ||style=text-align:right|  40756 || 68c047c97bab89afe2cb69e65b7c62e1
|-
| progs/g_rock.mdl  ||style=text-align:right|  48244 || 61346f842944795e0821e31e3d61b427
|-
| progs/g_shot.mdl  ||style=text-align:right|  32916 || 7facfec1a3cfb892cce871f398e9cb6b
|-
| progs/h_demon.mdl  ||style=text-align:right|  34884 || 5253a0ea93d9624d73fb984ee339b52f
|-
| progs/h_dog.mdl  ||style=text-align:right|  24436 || a0b5f87522b3a769548c46cf3bb4223e
|-
| progs/h_guard.mdl  ||style=text-align:right|  5428 || 18a629b53b87392030df63b7806eb833
|-
| progs/h_knight.mdl  ||style=text-align:right|  7156 || 46a03fa72b0cdebcf58045aba2fafc13
|-
| progs/h_ogre.mdl  ||style=text-align:right|  14900 || 14eb06611c769e254d0531c05919bdf5
|-
| progs/h_player.mdl  ||style=text-align:right|  14708 || bf1773df7d3e19c5b211a1ee408f6b05
|-
| progs/h_shams.mdl  ||style=text-align:right|  37060 || ff1e04e18c57667991341a011fb6c363
|-
| progs/h_wizard.mdl  ||style=text-align:right|  14804 || 4bc6be40128f313cf9ad06c347310735
|-
| progs/h_zombie.mdl  ||style=text-align:right|  4484 || 0fdef7f7cd05a3209e0a163e87f69f8b
|-
| progs/invisibl.mdl  ||style=text-align:right|  7092 || 1e87d86af02e69db9c9f27f5fddc7a47
|-
| progs/invulner.mdl  ||style=text-align:right|  23920 || 8c8d83e4d50c3282d009b333a1280422
|-
| progs/knight.mdl  ||style=text-align:right|  101404 || 5328915db5c53e85cf75d46e7b747fb9
|-
| progs/lavaball.mdl  ||style=text-align:right|  8788 || 92af53d2145681e37877dbc1d12801b2
|-
| progs/m_g_key.mdl  ||style=text-align:right|  12820 || 192c2650a115c91706f6fa8fe68beb45
|-
| progs/missile.mdl  ||style=text-align:right|  57796 || 47f19f9e34954b93443c9759dd2e7ba0
|-
| progs/m_s_key.mdl  ||style=text-align:right|  12820 || 20837376b391cdd5c92e57b84e05687f
|-
| progs/ogre.mdl  ||style=text-align:right|  162036 || fbb592ca3788a576dd2f31fcf8c80fab
|-
| progs/player.mdl  ||style=text-align:right|  191852 || 405cef9a10d96cdabffb5e91312f8e5c
|-
| progs/quaddama.mdl  ||style=text-align:right|  39992 || 00b177ff272a4779097ea08344da8aff
|-
| progs/s_bubble.spr  ||style=text-align:right|  588 || 7c0887630ed468205292d8cb7abcae93
|-
| progs/s_explod.spr  ||style=text-align:right|  18972 || 766c6a92c26b54f68f7ff87c90d71cf2
|-
| progs/shambler.mdl  ||style=text-align:right|  98556 || 9b09375a0f614dc4081e363cc34f1185
|-
| progs/s_light.mdl  ||style=text-align:right|  27596 || ee6649ea5673989f3aa06213a8d65f76
|-
| progs/s_light.spr  ||style=text-align:right|  1080 || aff44ba238f4e1d0d504d6f9700aadb4
|-
| progs/soldier.mdl  ||style=text-align:right|  146288 || 5b6c30a984872b4273dd5861412d35c5
|-
| progs/spike.mdl  ||style=text-align:right|  1684 || be4cb73125f939284376080acc9887dd
|-
| progs/s_spike.mdl  ||style=text-align:right|  1684 || ebb1d58242b64a703623c8a33fcbd9e6
|-
| progs/suit.mdl  ||style=text-align:right|  51236 || 882a61f5eea7f9cdbc04800b963cef85
|-
| progs/v_axe.mdl  ||style=text-align:right|  57908 || 577dadcca2700068995c808dc7dec76f
|-
| progs/v_light.mdl  ||style=text-align:right|  56204 || 68733d4c690de88b5c3ba33e52be1c15
|-
| progs/v_nail2.mdl  ||style=text-align:right|  68732 || aacd1002ab02662cc1d3ff46885b553e
|-
| progs/v_nail.mdl  ||style=text-align:right|  54472 || ec9ba028b346da2f9674c2a521ff0c2f
|-
| progs/v_rock2.mdl  ||style=text-align:right|  58188 || 96edf1a3c7629987c200361523f780d7
|-
| progs/v_rock.mdl  ||style=text-align:right|  58548 || 7bea46b2a75fd7cff2fb99420e4c4e25
|-
| progs/v_shot2.mdl  ||style=text-align:right|  50816 || 922b3b687766ae0d7aeb73d44dec7035
|-
| progs/v_shot.mdl  ||style=text-align:right|  43852 || 1fd140b6856843e83cd9bf3966f5d7dd
|-
| progs/w_g_key.mdl  ||style=text-align:right|  7252 || c5c5f0d14b022f57294ad9aded318250
|-
| progs/wizard.mdl  ||style=text-align:right|  64472 || bf60986594f045e60e8aa6339d553ee7
|-
| progs/w_s_key.mdl  ||style=text-align:right|  7252 || ec02314a7d12439d36b4eb2dd0a641a8
|-
| progs/w_spike.mdl  ||style=text-align:right|  14336 || 8cf9245df2164e8062b01a220b508d6b
|-
| progs/zombie.mdl  ||style=text-align:right|  186084 || a923b1d03b9d237dd5ead9bd56acc900
|-
| progs/zom_gib.mdl  ||style=text-align:right|  10196 || cf42c938caa5b19f719d1f110b1dc6d4
|-
| quake.rc  ||style=text-align:right|  293 || 411d42958aaeae141813f9ebfcf5233f
|-
| sound/ambience/buzz1.wav  ||style=text-align:right|  36308 || 346a00c795c6f1f1338ade6fc350b3fe
|-
| sound/ambience/comp1.wav  ||style=text-align:right|  62734 || f91a1120de804f7cd4dbba4f12c748e9
|-
| sound/ambience/drip1.wav  ||style=text-align:right|  137736 || 2306a76162eeda3d0812c516bc99aa7a
|-
| sound/ambience/drone6.wav  ||style=text-align:right|  18522 || 322853ddb42ad2a205579b5cca8e2e8c
|-
| sound/ambience/fire1.wav  ||style=text-align:right|  24064 || 610d3985ed8133988e8de3bec2b9cbbe
|-
| sound/ambience/fl_hum1.wav  ||style=text-align:right|  50154 || e4628499702e004c4bacd282a3ecb8c0
|-
| sound/ambience/hum1.wav  ||style=text-align:right|  40166 || 486bfa737c35b0c9dda57cbee2a540af
|-
| sound/ambience/suck1.wav  ||style=text-align:right|  110392 || 2e99e4d1fe1501d5191c8157d3063cb6
|-
| sound/ambience/swamp1.wav  ||style=text-align:right|  68524 || 29ffb678d78997eb6c227677c86ea4f8
|-
| sound/ambience/swamp2.wav  ||style=text-align:right|  68526 || 356aa1e875da846e72d8f17bbb699a5b
|-
| sound/ambience/thunder1.wav  ||style=text-align:right|  41492 || cefd6ced4b5bc79fcece1003238566f6
|-
| sound/ambience/water1.wav  ||style=text-align:right|  55784 || 6eeaae0a3450652d2be0782895297ee4
|-
| sound/ambience/wind2.wav  ||style=text-align:right|  28610 || 030cf8dd2b00a12454b5b35a89d03914
|-
| sound/ambience/windfly.wav  ||style=text-align:right|  22140 || c7be01e6d324e66883f70aa0072a99b0
|-
| sound/boss1/death.wav  ||style=text-align:right|  27600 || 43469b1acd35b67107da5da82e1df911
|-
| sound/boss1/out1.wav  ||style=text-align:right|  50344 || 847a6f971f6905dfaffd70b30d18a4b1
|-
| sound/boss1/pain.wav  ||style=text-align:right|  17700 || 49112740c0ff421f9272b9e8efc748cd
|-
| sound/boss1/sight1.wav  ||style=text-align:right|  24768 || 427dd600e6b28c9402212adcc5d652c7
|-
| sound/boss1/throw.wav  ||style=text-align:right|  11526 || 9b6e9ff2c8df448f7fd4b5315e60ddda
|-
| sound/buttons/airbut1.wav  ||style=text-align:right|  10672 || 9d2e14e7176842a0dce909a43d38873d
|-
| sound/buttons/switch02.wav  ||style=text-align:right|  3746 || d2e9cba3a353edc65115f6f5c574403c
|-
| sound/buttons/switch04.wav  ||style=text-align:right|  3666 || ff47857a58d3faefb2b94a37d7ba4f26
|-
| sound/buttons/switch21.wav  ||style=text-align:right|  6318 || 3605b0d061a9baf185c6ab7614534531
|-
| sound/demon/ddeath.wav  ||style=text-align:right|  9140 || 62a48dcd405ca55c9ce18497e36faa0e
|-
| sound/demon/dhit2.wav  ||style=text-align:right|  7142 || 9e741696e4d0d66e30e718fc70ec186e
|-
| sound/demon/djump.wav  ||style=text-align:right|  8494 || 791ac9d6b6593808316145443cb7e7a0
|-
| sound/demon/dland2.wav  ||style=text-align:right|  4400 || db14c7b01838f826b7a712075f9026fd
|-
| sound/demon/dpain1.wav  ||style=text-align:right|  6282 || 5e6c485878393c9bebb0d0e6659bc479
|-
| sound/demon/idle1.wav  ||style=text-align:right|  9098 || 7a83f8caf3d5b1172a7dc5afdc942988
|-
| sound/demon/sight2.wav  ||style=text-align:right|  8804 || 65171c355c22a5069520b0881677ae3c
|-
| sound/dog/dattack1.wav  ||style=text-align:right|  8154 || 0c47c9d4aaae0bf3159a288b674f4a35
|-
| sound/dog/ddeath.wav  ||style=text-align:right|  14912 || b0e7760b1d7286a028ff9773f6802958
|-
| sound/dog/dpain1.wav  ||style=text-align:right|  7240 || 28e5ab93b41e13e2916433283a5d1a46
|-
| sound/dog/dsight.wav  ||style=text-align:right|  6722 || 0edc290765bac1fb4fe03ca55bc7c225
|-
| sound/dog/idle.wav  ||style=text-align:right|  6870 || 42bd6026ff32bd94523ad9f8fe8362cc
|-
| sound/doors/airdoor1.wav  ||style=text-align:right|  13654 || 9b91930e8c2fdece31a2362296891122
|-
| sound/doors/airdoor2.wav  ||style=text-align:right|  8594 || 29fd823d1c14ca42a9a89c716b26f4cd
|-
| sound/doors/basesec1.wav  ||style=text-align:right|  13930 || eb2363fed42724f55e8f55f96c335bcf
|-
| sound/doors/basesec2.wav  ||style=text-align:right|  10238 || 8d163a56607c9cf64a270a156c1c5cef
|-
| sound/doors/basetry.wav  ||style=text-align:right|  10518 || a5108d5c51281ab55c0baf884cbe8cbe
|-
| sound/doors/baseuse.wav  ||style=text-align:right|  16486 || f43fee91efe813a5eb34e9d72918fdb9
|-
| sound/doors/ddoor1.wav  ||style=text-align:right|  7738 || dff86a26139cdd49a193d5ed7ebf6ae1
|-
| sound/doors/ddoor2.wav  ||style=text-align:right|  5904 || 4a9d0b0825d0302ce465569d1e35fbcf
|-
| sound/doors/doormv1.wav  ||style=text-align:right|  14036 || 3fd379aec80a2ad8105c0c89ba5b40e6
|-
| sound/doors/drclos4.wav  ||style=text-align:right|  12814 || 83df1865a0c9fa5d02c2f137564c57de
|-
| sound/doors/hydro1.wav  ||style=text-align:right|  11094 || b1703980a20e624bc3366ccf55ca617e
|-
| sound/doors/hydro2.wav  ||style=text-align:right|  10700 || b1866f5b3950788ccf4206444ab64bc7
|-
| sound/doors/latch2.wav  ||style=text-align:right|  7338 || ad2378ca21a0ca529df328261e07aed5
|-
| sound/doors/medtry.wav  ||style=text-align:right|  7828 || ebb536bec2cdfd22c25b35793c055339
|-
| sound/doors/meduse.wav  ||style=text-align:right|  10718 || 4522aada194b23eb33b541cbcc755cf6
|-
| sound/doors/runetry.wav  ||style=text-align:right|  13524 || c433bae9e2ab508712f87dc2cacc82c8
|-
| sound/doors/runeuse.wav  ||style=text-align:right|  17364 || b4bcfd525a26f5b5ecc9d392430d9079
|-
| sound/doors/stndr1.wav  ||style=text-align:right|  12620 || 5bae2183885e18d65d69624e85249fd9
|-
| sound/doors/stndr2.wav  ||style=text-align:right|  11470 || f43a75c917effff09ef7be8a321c8b49
|-
| sound/doors/winch2.wav  ||style=text-align:right|  14872 || a4edffdfede7dbaed37db526c26e2b6d
|-
| sound/hknight/hit.wav  ||style=text-align:right|  6260 || fece24e2548f1d769e8fce39a5c87d01
|-
| sound/items/armor1.wav  ||style=text-align:right|  7714 || 186d29f2baf35b8c280bc97754606fad
|-
| sound/items/damage2.wav  ||style=text-align:right|  33012 || 14e53b7617ffe315a7c3f8d89652e51c
|-
| sound/items/damage3.wav  ||style=text-align:right|  12894 || baf754aec7ed4baba16760ac85513184
|-
| sound/items/damage.wav  ||style=text-align:right|  23374 || 8cde8b9278ca4922a4ec7ead6e5ee01b
|-
| sound/items/health1.wav  ||style=text-align:right|  7958 || 52a2c4f808db4edd8393de0de618c91f
|-
| sound/items/inv1.wav  ||style=text-align:right|  13728 || 5850cab55d6197d0e76d9f0a22ba10be
|-
| sound/items/inv2.wav  ||style=text-align:right|  33216 || 4edcd38a2c6adc5305636dd7afd5ef60
|-
| sound/items/inv3.wav  ||style=text-align:right|  33320 || 325c268be05b42a019ccb92e6993ab9e
|-
| sound/items/itembk2.wav  ||style=text-align:right|  9910 || 270c688b3cb884f5d4e5ffd8ccc934a1
|-
| sound/items/protect2.wav  ||style=text-align:right|  34012 || 25627a4bd2b4c6054cfd2fc4bf69ddc2
|-
| sound/items/protect3.wav  ||style=text-align:right|  23364 || 7b9374d67f6d59e524bba2af236ca30a
|-
| sound/items/protect.wav  ||style=text-align:right|  22536 || d839d5a84f811ce8a0e28616891bf1a7
|-
| sound/items/r_item1.wav  ||style=text-align:right|  6822 || 3fc0d0ae4a71c9fbfe548f38626c6a08
|-
| sound/items/r_item2.wav  ||style=text-align:right|  7448 || 384ffefe795d99df75f381596a0f1976
|-
| sound/items/suit2.wav  ||style=text-align:right|  33254 || 0a9d2766a5b805cb5794f9bea57e6585
|-
| sound/items/suit.wav  ||style=text-align:right|  15854 || da413f34023d219f1e34fde50a037be0
|-
| sound/knight/idle.wav  ||style=text-align:right|  11064 || 1b5c3981bee078318af346d8fe8090b9
|-
| sound/knight/kdeath.wav  ||style=text-align:right|  10688 || 11a96f48a8f2433c23beae299c8fb96e
|-
| sound/knight/khurt.wav  ||style=text-align:right|  5586 || 32c9f48dd4a6a87752aedf56fe8de668
|-
| sound/knight/ksight.wav  ||style=text-align:right|  13514 || eb75b4af348c88e84d8c87c19d5976fa
|-
| sound/knight/sword1.wav  ||style=text-align:right|  2306 || 93045b5f3178413dc6b01ec2869d1f73
|-
| sound/knight/sword2.wav  ||style=text-align:right|  2784 || 82d1a7c263cd3df7b060dee2f7f8b1fd
|-
| sound/misc/h2ohit1.wav  ||style=text-align:right|  12972 || 49ecb03f4f10862453656a67598f8b8a
|-
| sound/misc/medkey.wav  ||style=text-align:right|  10020 || 0e3ae5626a47d81e4166539e355e31bb
|-
| sound/misc/menu1.wav  ||style=text-align:right|  5738 || 12c36546601c385bc47c9ca9420b7eee
|-
| sound/misc/menu2.wav  ||style=text-align:right|  10672 || 39b01ea6feb3ec8dbd6d8ee3e5e966c4
|-
| sound/misc/menu3.wav  ||style=text-align:right|  3010 || 4a03dc2fd56831b855dab761eac4f7de
|-
| sound/misc/null.wav  ||style=text-align:right|  1244 || 811989e09124f54cb27fe6154b0f1018
|-
| sound/misc/outwater.wav  ||style=text-align:right|  5018 || 35732412412ddb5ed418633bb0123bbe
|-
| sound/misc/power.wav  ||style=text-align:right|  19832 || 9f2c3a18d9fc8d9cecfac6db3aad6bc6
|-
| sound/misc/r_tele1.wav  ||style=text-align:right|  8036 || c2194171b4c446e136ed7514fbb098a5
|-
| sound/misc/r_tele2.wav  ||style=text-align:right|  17324 || 0ce662ac90fb3658d69320d1be4025c1
|-
| sound/misc/r_tele3.wav  ||style=text-align:right|  18016 || 122ef44813edcfe7391578fd29e729d2
|-
| sound/misc/r_tele4.wav  ||style=text-align:right|  9068 || 0097b5747ccc70d5b12fc6838aff02c2
|-
| sound/misc/r_tele5.wav  ||style=text-align:right|  22042 || a82334cbb66d12f28cce9e71c90ea50b
|-
| sound/misc/runekey.wav  ||style=text-align:right|  14578 || 6b21a2e5878011da50fdee0a301d3e34
|-
| sound/misc/secret.wav  ||style=text-align:right|  6610 || a02ceefcc24b1ebf5c164a1e1acfb05f
|-
| sound/misc/talk.wav  ||style=text-align:right|  1810 || d5b25d4df59d92ac5016e88689ea60c1
|-
| sound/misc/trigger1.wav  ||style=text-align:right|  20230 || dc927c8a1d0a9bd59fbc5dd91ae1d812
|-
| sound/misc/water1.wav  ||style=text-align:right|  3926 || d8291c762acb1edf24927fdcc0f6a6cd
|-
| sound/misc/water2.wav  ||style=text-align:right|  3340 || 049e8e7e7b30d4d8038afb7248bdd977
|-
| sound/ogre/ogdrag.wav  ||style=text-align:right|  12396 || 658587dc89aaefae5ca3f058f7ff4227
|-
| sound/ogre/ogdth.wav  ||style=text-align:right|  13892 || de98e7bb9e70586edddd3308cfded3db
|-
| sound/ogre/ogidle2.wav  ||style=text-align:right|  11254 || 196ae9c33a4311160e1d5f3da878ab09
|-
| sound/ogre/ogidle.wav  ||style=text-align:right|  12894 || 177c829840a87c885bbc8951e7ce962e
|-
| sound/ogre/ogpain1.wav  ||style=text-align:right|  7898 || ac6d133d7720c12df49813fe10e683b5
|-
| sound/ogre/ogsawatk.wav  ||style=text-align:right|  16154 || 7257bdfd014bb61d778b8f88cb65d560
|-
| sound/ogre/ogwake.wav  ||style=text-align:right|  19356 || 3296459e495c4c12b31179d4eeffac19
|-
| sound/plats/medplat1.wav  ||style=text-align:right|  16378 || b73215aa6627c8b5b90fce8d260d48d0
|-
| sound/plats/medplat2.wav  ||style=text-align:right|  7338 || 1fc6c3772917a1a8155d04fa52e17005
|-
| sound/plats/plat1.wav  ||style=text-align:right|  20248 || 5d43ed85d896ba926f459e06ba6635d5
|-
| sound/plats/plat2.wav  ||style=text-align:right|  7338 || 49d7ab0fd726cd652eb6e5756fce61b9
|-
| sound/plats/train1.wav  ||style=text-align:right|  21430 || b589ae8262046361d9dca39d6b8f693a
|-
| sound/plats/train2.wav  ||style=text-align:right|  5870 || 640017e1b870d643e3bca29d499c72ee
|-
| sound/player/axhit1.wav  ||style=text-align:right|  6906 || 149b2371334da318386325182924eaca
|-
| sound/player/axhit2.wav  ||style=text-align:right|  2434 || fc01909318455f5310efa2457a370897
|-
| sound/player/death1.wav  ||style=text-align:right|  10170 || ba005f5488d4ee78dabf613a03f33a5f
|-
| sound/player/death2.wav  ||style=text-align:right|  8026 || 20477d2e7c84aac1bef95d32c9c702dd
|-
| sound/player/death3.wav  ||style=text-align:right|  10918 || 7b206ba8e1fa28d8605b50e3f3200f11
|-
| sound/player/death4.wav  ||style=text-align:right|  14126 || 1b0f27f4d41b748d3cc5c3d56bd917f8
|-
| sound/player/death5.wav  ||style=text-align:right|  14946 || 7efe84195cfa97515aad2d7f96f25346
|-
| sound/player/drown1.wav  ||style=text-align:right|  8908 || 732f0416af6990e028110380bcb36f0d
|-
| sound/player/drown2.wav  ||style=text-align:right|  3114 || 29ee1f287879acce29b15d4722668bc2
|-
| sound/player/gasp1.wav  ||style=text-align:right|  8702 || b06cbc370c8c2c163dc4d487e8b673c7
|-
| sound/player/gasp2.wav  ||style=text-align:right|  13134 || 30aece9d8779764620c7f866bfb06edb
|-
| sound/player/gib.wav  ||style=text-align:right|  14424 || 26fa9942078125388f34b71546615068
|-
| sound/player/h2odeath.wav  ||style=text-align:right|  18104 || 73b0f4dfae07f6e49112cadfe202735c
|-
| sound/player/h2ojump.wav  ||style=text-align:right|  11438 || cd421b96410971bb1a4f21d3936a3805
|-
| sound/player/inh2o.wav  ||style=text-align:right|  11340 || d4c1a27c4d07e8dfdf18a4b1a880c610
|-
| sound/player/inlava.wav  ||style=text-align:right|  10958 || c37875a082900716b7af88d2d990f55c
|-
| sound/player/land2.wav  ||style=text-align:right|  6204 || 6ba534256a779d66d9d9dabb90e63c8b
|-
| sound/player/land.wav  ||style=text-align:right|  2434 || e34328a40358d98f0f95403b9e27ec1e
|-
| sound/player/lburn1.wav  ||style=text-align:right|  6682 || 3c447c72385defe97c060771077d8ba0
|-
| sound/player/lburn2.wav  ||style=text-align:right|  6076 || 6849ee8dbd91ec82ece016fbd39b0a5c
|-
| sound/player/pain1.wav  ||style=text-align:right|  3394 || d7ac9df7540b791f952ca2a681c0265b
|-
| sound/player/pain2.wav  ||style=text-align:right|  2710 || 513e054b64d4fb61f31384d59e123020
|-
| sound/player/pain3.wav  ||style=text-align:right|  4854 || aafc61ad4e16cc5cdd2db2100796b494
|-
| sound/player/pain4.wav  ||style=text-align:right|  4840 || f655ef2045bc55473303b27546aa6fc0
|-
| sound/player/pain5.wav  ||style=text-align:right|  8020 || f8551a73cb89396042687baa8c68b5c2
|-
| sound/player/pain6.wav  ||style=text-align:right|  5462 || 70062eabf96288d307280fb601ce0ee2
|-
| sound/player/plyrjmp8.wav  ||style=text-align:right|  3888 || d4a552d8f627c7f3b933568c4a74c913
|-
| sound/player/slimbrn2.wav  ||style=text-align:right|  12468 || b17c18a9f81a952f2d41f65b5180f210
|-
| sound/player/teledth1.wav  ||style=text-align:right|  14414 || c226c7f041187ba058d8112cc0190b56
|-
| sound/player/tornoff2.wav  ||style=text-align:right|  7726 || 03ec1c805b307b8fe4c4052f8332a5e5
|-
| sound/player/udeath.wav  ||style=text-align:right|  16082 || afe674f287efb6197da2cea0c0b1d2f8
|-
| sound/shambler/melee1.wav  ||style=text-align:right|  4718 || 77fe6240973a204b757a427ebf66bcfd
|-
| sound/shambler/melee2.wav  ||style=text-align:right|  5966 || 3be31638d769e3d690c92311dfafdeac
|-
| sound/shambler/sattck1.wav  ||style=text-align:right|  8036 || ec8c3f79ea42d09154cb8975ada1b21c
|-
| sound/shambler/sboom.wav  ||style=text-align:right|  11672 || 9834601a645d7d1f62001b2a314ec18f
|-
| sound/shambler/sdeath.wav  ||style=text-align:right|  21106 || e0e62d229a985a6e39218c6488599059
|-
| sound/shambler/shurt2.wav  ||style=text-align:right|  4302 || 1e87631ede95e061a75f9c31629ac0b8
|-
| sound/shambler/sidle.wav  ||style=text-align:right|  5646 || 368a240e6c3e877793352a79c1828386
|-
| sound/shambler/smack.wav  ||style=text-align:right|  5300 || bd8c634c9894348360fec7b7419d1649
|-
| sound/shambler/ssight.wav  ||style=text-align:right|  15420 || 657107577460d5acf3157dec97e07a89
|-
| sound/soldier/death1.wav  ||style=text-align:right|  8434 || fe25952af40b536c3bb67bfca58062eb
|-
| sound/soldier/idle.wav  ||style=text-align:right|  9802 || 4cdfbdda8fb5f40b125c7bcddb6e8914
|-
| sound/soldier/pain1.wav  ||style=text-align:right|  5000 || 54d3b05fdcecf7480034858f2b22b06c
|-
| sound/soldier/pain2.wav  ||style=text-align:right|  7838 || e2bbc9d3405b9b9fdae76d2fc298fc2f
|-
| sound/soldier/sattck1.wav  ||style=text-align:right|  14302 || b76ac35f900f280a7a7996da7e404362
|-
| sound/soldier/sight1.wav  ||style=text-align:right|  12716 || e2a39533250ddd1b08053d5c4ebf7fd0
|-
| sound/weapons/ax1.wav  ||style=text-align:right|  3308 || 237d4d819d02ad37849a8a895cc410e1
|-
| sound/weapons/bounce.wav  ||style=text-align:right|  5864 || fced668c6558a9505abf5014d60528a6
|-
| sound/weapons/grenade.wav  ||style=text-align:right|  8364 || d2b6fa131933f203eba2a282276e88df
|-
| sound/weapons/guncock.wav  ||style=text-align:right|  14430 || 6a63452167cc106e756518536446844f
|-
| sound/weapons/lhit.wav  ||style=text-align:right|  26028 || fefd021d0bd35a1f8da8870f1c06abb9
|-
| sound/weapons/lock4.wav  ||style=text-align:right|  3876 || 3fd93222258d5b1500b150f021c94519
|-
| sound/weapons/lstart.wav  ||style=text-align:right|  56378 || abe1abf6dcadcda5930b0684c7ea820a
|-
| sound/weapons/pkup.wav  ||style=text-align:right|  5174 || 0aa6f0a7d609e1a56fd535a06d1bb56e
|-
| sound/weapons/r_exp3.wav  ||style=text-align:right|  17478 || 57db026474fc76ba7f38cea24eaaf8cf
|-
| sound/weapons/ric1.wav  ||style=text-align:right|  4308 || a31166b4bbb4509ac3004a01f7477ee9
|-
| sound/weapons/ric2.wav  ||style=text-align:right|  10838 || a180b447c0527e603cea54a9aefd6139
|-
| sound/weapons/ric3.wav  ||style=text-align:right|  12638 || 8a773bbb585540ddce256151162f3a2c
|-
| sound/weapons/rocket1i.wav  ||style=text-align:right|  9660 || fb4fdf345d805cf6980c4c695974effc
|-
| sound/weapons/sgun1.wav  ||style=text-align:right|  22992 || 95a14815e48deb323d0cf8251d728ac7
|-
| sound/weapons/shotgn2.wav  ||style=text-align:right|  8694 || cb561cefbf472232334b419af050e5a0
|-
| sound/weapons/spike2.wav  ||style=text-align:right|  12642 || 9189d811855f108da4a1e2d34dc7c633
|-
| sound/weapons/tink1.wav  ||style=text-align:right|  1252 || 297ba8706625fcf05887edb393e9a441
|-
| sound/wizard/hit.wav  ||style=text-align:right|  7332 || 6598d669334df977f1f97b95288edf11
|-
| sound/wizard/wattack.wav  ||style=text-align:right|  25912 || b3568a47439f81779d40335e76f5bc2d
|-
| sound/wizard/wdeath.wav  ||style=text-align:right|  20684 || 99d9c71343bc23222abb92119d404400
|-
| sound/wizard/widle1.wav  ||style=text-align:right|  13464 || b22b1dd9f66879b3447d36ab584316c7
|-
| sound/wizard/widle2.wav  ||style=text-align:right|  23094 || 7178fd83df227360564adef01bed92c6
|-
| sound/wizard/wpain.wav  ||style=text-align:right|  8686 || bd7e59ab7d7b835f9ed8ab51950914de
|-
| sound/wizard/wsight.wav  ||style=text-align:right|  13078 || df5949057c750528917c6cb32b7fd9fd
|-
| sound/zombie/idle_w2.wav  ||style=text-align:right|  17192 || d2bb59b9d7ac71097c07123a23525641
|-
| sound/zombie/z_fall.wav  ||style=text-align:right|  3062 || 6968318b2d196c6d54bc707d8a390547
|-
| sound/zombie/z_gib.wav  ||style=text-align:right|  16226 || 199dda66ade8d6f0ef4897e4d7608c0d
|-
| sound/zombie/z_hit.wav  ||style=text-align:right|  6166 || 6c66ab3e6b149bf35956a4bbc0057acb
|-
| sound/zombie/z_idle1.wav  ||style=text-align:right|  13244 || 21088a7b38b1124d7ec72e58d5ab93a6
|-
| sound/zombie/z_idle.wav  ||style=text-align:right|  16734 || e5e570e38c4405111004190a79f0e925
|-
| sound/zombie/z_miss.wav  ||style=text-align:right|  10734 || 96fad96a8c3bc6f7bcc5da6c82678da2
|-
| sound/zombie/z_pain1.wav  ||style=text-align:right|  15374 || fcd83b89a94b0cadbe1361a4df080ec0
|-
| sound/zombie/z_pain.wav  ||style=text-align:right|  12218 || 56637968b8309bd2f825153330bbdfc0
|-
| sound/zombie/z_shot1.wav  ||style=text-align:right|  3068 || 561afb69b7851923a8fb3b54e3e13c96
|-
|}&lt;/tt&gt;

{{todo|todo=Multiple to do items listed above, detail out the contents of various pak files}}
{{todo|todo=different releases have different pak0.pak files}}</text>
      <sha1>otm51emw94mbfcfswe8ihljnn464fuq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3268</id>
      <parentid>3267</parentid>
      <timestamp>2014-09-24T17:22:38Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>/* Versions */ 1.06</comment>
      <text xml:space="preserve" bytes="66845">The '''''pak0.pak''''' file that comes with Quake is required by all Quake [[engines]]. It contains the maps, models, programs, sounds, and skins required to play Quake Episode 1, ''Dimension of the Doomed''. It is expected to be in the ID1 subfolder of the Quake root folder.

[[PAK file]]s are typically named ''pak0.pak'', ''pak1.pak'', ''pak2.pak'', and so on. Quake mission packs and other Quake-based games often have their own ''pak0.pak'' files, which live in a different folder, not the ID1 folder.

The ID1 ''pak0.pak'' is distributed with both the shareware and the registered/commercial editions of Quake.

In some editions, including the downloadable shareware (''quake106.zip'') from id Software, ''pak0.pak'' is embedded in another archive, ''[[resource.1]]''. The files in this archive are LZH-encoded using the lh5 algorithm. If you can't or don't want to run the DOS/Win32 Quake installer program it comes with, then you'll need a compatible extractor program to get ''pak0.pak'' out of the ''resource.1'' archive.


== Versions ==
&lt;tt&gt;
{| class=&quot;wikitable&quot;
! Version !! Timestamp !! Size !! md5
|-
| Registered Version 1.01 (as well as Shareware Version 1.01 on that [https://www.quaddicted.com/library/quake_registered_1.01_id disc]) || Unknown ||style=text-align:right|  18276119 || fc989b37572fae074e8ffda0ce4d5297
|-
| Shareware Version 1.01 ([https://www.quaddicted.com/library/quake_episode_1_shareware Shareware disc]) || Unknown ||style=text-align:right|  18276119 || 85fc9cee2035b66290da1e33be2ac86b
|-
| Registered Version 1.06 || 1996-10-01 14:25:58 ||style=text-align:right|  18689235 || 5906e5998fc3d896ddaf5e6a62e03abb
|-
|}&lt;/tt&gt;

=== fc989b37572fae074e8ffda0ce4d5297 ===
The [[id1]] ''pak0.pak'' with the md5sum fc989b37572fae074e8ffda0ce4d5297 contains the following folders &amp; files:
&lt;tt&gt;
{| class=&quot;wikitable collapsible collapsed&quot;
|-
! Path !! Size !! md5
|-
| default.cfg  ||style=text-align:right|  1914 || fc989b37572fae074e8ffda0ce4d5297
|-
| demo1.dem  ||style=text-align:right|  184471 || 85ec0141ab24d9732e487d1aafa791f0
|-
| demo2.dem  ||style=text-align:right|  152705 || fa5c3daf7a57954cd95f94b698a7e420
|-
| demo3.dem  ||style=text-align:right|  197679 || 691f37e5715ea2863c1d8092a6429824
|-
| end1.bin  ||style=text-align:right|  4000 || 92ae51961ec2f429dfe9bea1138fbd5d
|-
| gfx/bigbox.lmp  ||style=text-align:right|  5192 || e597771ac6149b2b071ebfd24981ea04
|-
| gfx/box_bl.lmp  ||style=text-align:right|  72 || 5b094c37c2c1c2eebe37f84117dea182
|-
| gfx/box_bm.lmp  ||style=text-align:right|  136 || 44621236738e2bf8d669e53dca887278
|-
| gfx/box_br.lmp  ||style=text-align:right|  72 || 86597d5325b472caf5644644033e5cab
|-
| gfx/box_ml.lmp  ||style=text-align:right|  72 || adcea286ba0ac01084fd0c131b16ffdd
|-
| gfx/box_mm2.lmp  ||style=text-align:right|  136 || b850bcec189d909e7a0f796111a11249
|-
| gfx/box_mm.lmp  ||style=text-align:right|  136 || 700b4884b1a3c6aa7356a43014261866
|-
| gfx/box_mr.lmp  ||style=text-align:right|  72 || e30d9ea783ef7dd50101682f03ba40d7
|-
| gfx/box_tl.lmp  ||style=text-align:right|  72 || 3903d3d814e37c55790ac0ccfef2b925
|-
| gfx/box_tm.lmp  ||style=text-align:right|  136 || 7cb85ccbf8e7d2532da2a839a7cef348
|-
| gfx/box_tr.lmp  ||style=text-align:right|  72 || 5c5e72746af821a4cf8437d8fecc53c7
|-
| gfx/colormap.lmp  ||style=text-align:right|  16385 || 0d793b70bffafbd666fc5c88d6e15e9d
|-
| gfx/complete.lmp  ||style=text-align:right|  4616 || db6a00dfbe2c62a43c261e5622297c4a
|-
| gfx/conback.lmp  ||style=text-align:right|  64008 || 9eb6f9c47870bf42985d9382958a5c12
|-
| gfx/dim_drct.lmp  ||style=text-align:right|  3352 || 50ea11fe8c4d9db92863bdcd03b89df5
|-
| gfx/dim_ipx.lmp  ||style=text-align:right|  3352 || 0bef9943487f0611225bf0a5c0fe5dd4
|-
| gfx/dim_modm.lmp  ||style=text-align:right|  3352 || 3288f03144f06b95cadafa9458a77b1d
|-
| gfx/dim_mult.lmp  ||style=text-align:right|  3352 || 348b7369227f2d7e9d0daccbf6c9344d
|-
| gfx/dim_tcp.lmp  ||style=text-align:right|  3352 || 7dc8bbb01d7c90cd51c28da0ff6ed900
|-
| gfx/finale.lmp  ||style=text-align:right|  6920 || b6e49409d344e0344273d86ea33fe35f
|-
| gfx/help0.lmp  ||style=text-align:right|  64008 || b392ac30ad49252b51ec934ed855c20f
|-
| gfx/help1.lmp  ||style=text-align:right|  64008 || 857543c69245117a606044ea63adac9a
|-
| gfx/help2.lmp  ||style=text-align:right|  64008 || 882dd5920ea9c19f637f32084de9788a
|-
| gfx/help3.lmp  ||style=text-align:right|  64008 || a89d169524920d896128009467deebfc
|-
| gfx/help4.lmp  ||style=text-align:right|  64008 || c72d67c84ae6b403fae5f08d3e5c3bc6
|-
| gfx/help5.lmp  ||style=text-align:right|  64008 || 12203d7cdec35c4f51622dd90ec92093
|-
| gfx/inter.lmp  ||style=text-align:right|  23048 || f6eabe0d742380c7b47a9ee44170993d
|-
| gfx/loading.lmp  ||style=text-align:right|  3464 || 3249bc994266529a1748c06bfbb24bfa
|-
| gfx/mainmenu.lmp  ||style=text-align:right|  26888 || 8122e2a0b8888f9d1ebef149551b6434
|-
| gfx/menudot1.lmp  ||style=text-align:right|  392 || bfdb08d84d580abcfbacc1c9abd62bfb
|-
| gfx/menudot2.lmp  ||style=text-align:right|  392 || 6c6d2176e00edbe530bb1db118aaa6dc
|-
| gfx/menudot3.lmp  ||style=text-align:right|  392 || 2527a05f6162efb3e4bc5311d9e010d5
|-
| gfx/menudot4.lmp  ||style=text-align:right|  392 || 90ea6be033b39b139b3779932d266f33
|-
| gfx/menudot5.lmp  ||style=text-align:right|  392 || c9beb9600c35e458d0f83b6cf1e1c692
|-
| gfx/menudot6.lmp  ||style=text-align:right|  392 || 31b9a6ec1d12a2bd56b955185a9e72d3
|-
| gfx/menuplyr.lmp  ||style=text-align:right|  2696 || 9eebe617ff51c4ce43f85ca1a6920d5b
|-
| gfx/mp_menu.lmp  ||style=text-align:right|  14856 || c6416b8f7f5262a5a19b9ce4be1fd9ce
|-
| gfx/netmen1.lmp  ||style=text-align:right|  3352 || 5bc6a8d8cfdfd7e940e933812954367a
|-
| gfx/netmen2.lmp  ||style=text-align:right|  3352 || c8aafb649a653e90fc5eb7b7a2b3ca2e
|-
| gfx/netmen3.lmp  ||style=text-align:right|  3352 || 11c9372d0e64057a1ec8251f596b820d
|-
| gfx/netmen4.lmp  ||style=text-align:right|  3352 || 74ec672b1312699be2eeaf25a68e4582
|-
| gfx/netmen5.lmp  ||style=text-align:right|  3352 || 231f8a9ea4ba364f517db0e9f7f1ba72
|-
| gfx/palette.lmp  ||style=text-align:right|  768 || 79bc149d4f2fb0bd68cd8400a3fd87d4
|-
| gfx/pause.lmp  ||style=text-align:right|  3080 || 5aa67f927719e4a9eb3e020e75fea969
|-
| gfx/p_load.lmp  ||style=text-align:right|  2504 || 27fe08071058385529b0b8ad746421e7
|-
| gfx/p_multi.lmp  ||style=text-align:right|  5192 || 5a307c7d11da20a4772ad9c00b9f4309
|-
| gfx/p_option.lmp  ||style=text-align:right|  3464 || 83a3bf4459bce3fe85857a0aa647b90a
|-
| gfx/p_save.lmp  ||style=text-align:right|  2120 || 0d2bb5fa5524e0180a85bf273094cd1f
|-
| gfx/qplaque.lmp  ||style=text-align:right|  4616 || f4de79557c75e26b85ea84fb6029a5f3
|-
| gfx/ranking.lmp  ||style=text-align:right|  4040 || 919b13d1f7fdd0082ec0f94699f3b681
|-
| gfx/sell.lmp  ||style=text-align:right|  64008 || 878db3866e8b38c5b8d951aef516358c
|-
| gfx/sp_menu.lmp  ||style=text-align:right|  14856 || f624aa79778970ecb8ef518b5ab435f6
|-
| gfx/ttl_cstm.lmp  ||style=text-align:right|  4424 || 4ee84e0e7fa93f0e93d26efb1e726a4d
|-
| gfx/ttl_main.lmp  ||style=text-align:right|  2312 || 07e1c8e189e2463befcfc44f5ecf8dcb
|-
| gfx/ttl_sgl.lmp  ||style=text-align:right|  3080 || 25d5360228da738f091063eaeb7c6aa8
|-
| gfx/vidmodes.lmp  ||style=text-align:right|  5192 || 18a97f403057777f262188903f485fe8
|-
| gfx.wad  ||style=text-align:right|  112828 || cde5b5890c8902c02a2f271abe8f4a1f
|-
| maps/b_batt0.bsp  ||style=text-align:right|  5044 || 00bc989f4c8d2570a2826a63c7356a27
|-
| maps/b_batt1.bsp  ||style=text-align:right|  4620 || 555bc0cb0b5c2ad2ed0110f307e70679
|-
| maps/b_bh100.bsp  ||style=text-align:right|  8820 || 62f78bb5143265f037b79ddd077c50ed
|-
| maps/b_bh10.bsp  ||style=text-align:right|  3936 || e80cde9f185612f669fc100f825ca84f
|-
| maps/b_bh25.bsp  ||style=text-align:right|  8872 || 032d70dbf8669b3627b82b41f31488bd
|-
| maps/b_explob.bsp  ||style=text-align:right|  10220 || d8c9db3cfa0264678afc580143f665ea
|-
| maps/b_nail0.bsp  ||style=text-align:right|  5044 || c8d7ec0bdee74e0c1e69e8dbe939117d
|-
| maps/b_nail1.bsp  ||style=text-align:right|  5044 || ea08b2bd6aa19ece0307f75c491e5d24
|-
| maps/b_rock0.bsp  ||style=text-align:right|  2956 || 19ce64cd248a4459bf37b45e6e7c1219
|-
| maps/b_rock1.bsp  ||style=text-align:right|  2944 || b4cdb75094cd7218ed2b0475aefabe80
|-
| maps/b_shell0.bsp  ||style=text-align:right|  5044 || 574824b3c52661959d633a76dc823859
|-
| maps/b_shell1.bsp  ||style=text-align:right|  5044 || dc8b8dcb490e204e615b2b9cdc673296
|-
| maps/e1m1.bsp  ||style=text-align:right|  1365176 || 84cae48010619bcc945426b91bc03ade
|-
| maps/e1m2.bsp  ||style=text-align:right|  1332228 || caff91afbe41f3eac4dda65cee0083c9
|-
| maps/e1m3.bsp  ||style=text-align:right|  1249944 || f20eaa5692e94ab889c4ade9e1c116c7
|-
| maps/e1m4.bsp  ||style=text-align:right|  1411452 || 29419f05ef647f83d0482502bb3f84f8
|-
| maps/e1m5.bsp  ||style=text-align:right|  1324060 || afd98cc890d748986186951b32fc9fcb
|-
| maps/e1m6.bsp  ||style=text-align:right|  1065080 || ec178e54ff68c4d8cf71e26775b2eb2d
|-
| maps/e1m7.bsp  ||style=text-align:right|  607420 || 0c1f55455e0f957291e21d211b689718
|-
| maps/e1m8.bsp  ||style=text-align:right|  924116 || 18c7ab2f922d5d586150afbc27c323a4
|-
| maps/start.bsp  ||style=text-align:right|  1433792 || 61a57bb4ca36368478f02b142d1b5291
|-
| progs/armor.mdl  ||style=text-align:right|  44076 || ca060166d7e4e4686995f05645dde593
|-
| progs/backpack.mdl  ||style=text-align:right|  19348 || 315b4ef42fb035aa3318e8d2d61961ce
|-
| progs/bolt2.mdl  ||style=text-align:right|  11860 || f59ce07cfbe01fcfc578258c573d2c31
|-
| progs/bolt3.mdl  ||style=text-align:right|  11860 || ff87579a424faa59ca2695b7434ea488
|-
| progs/bolt.mdl  ||style=text-align:right|  20644 || a176903954e9d8c7ab629f92784546c2
|-
| progs/boss.mdl  ||style=text-align:right|  211836 || 25da3b2bc30677e32ee3a3a878a4d3af
|-
| progs.dat  ||style=text-align:right|  410616 || cb04964a1952169e03392ee83a9edb91
|-
| progs/demon.mdl  ||style=text-align:right|  102120 || 4c73786e7cfb2083ca38cbc983cd6c4b
|-
| progs/dog.mdl  ||style=text-align:right|  146056 || e727fbc39acc652f812972612ce37565
|-
| progs/end1.mdl  ||style=text-align:right|  20820 || 67c0fcab33d3772c00bb462b0e749275
|-
| progs/eyes.mdl  ||style=text-align:right|  4372 || ed72f64a17c6909b2cb3034a734bca97
|-
| progs/flame2.mdl  ||style=text-align:right|  64572 || f2c8f8950ebd7a0edded6247655d325b
|-
| progs/flame.mdl  ||style=text-align:right|  46364 || 8593c05374d84354d4444c218e86fdb8
|-
| progs/gib1.mdl  ||style=text-align:right|  5716 || f5c5b799e895dc03036522a487e99913
|-
| progs/gib2.mdl  ||style=text-align:right|  16228 || cfa9e97a3542852418123e0bb12e4f86
|-
| progs/gib3.mdl  ||style=text-align:right|  22228 || d73be7b2881e0a5aacf2b332ac29086f
|-
| progs/g_light.mdl  ||style=text-align:right|  50276 || 61bba06ec3804b7f355a62fd4585ad8f
|-
| progs/g_nail2.mdl  ||style=text-align:right|  30720 || ed6d7bb5ff050ad5f2bf4be7739a16a5
|-
| progs/g_nail.mdl  ||style=text-align:right|  34700 || e2959ca741c764dd42025ef531a1b554
|-
| progs/grenade.mdl  ||style=text-align:right|  2244 || f492d6257c216306983a72f41db0d891
|-
| progs/g_rock2.mdl  ||style=text-align:right|  40756 || 68c047c97bab89afe2cb69e65b7c62e1
|-
| progs/g_rock.mdl  ||style=text-align:right|  48244 || 61346f842944795e0821e31e3d61b427
|-
| progs/g_shot.mdl  ||style=text-align:right|  32916 || 7facfec1a3cfb892cce871f398e9cb6b
|-
| progs/h_demon.mdl  ||style=text-align:right|  34884 || 5253a0ea93d9624d73fb984ee339b52f
|-
| progs/h_dog.mdl  ||style=text-align:right|  24436 || a0b5f87522b3a769548c46cf3bb4223e
|-
| progs/h_guard.mdl  ||style=text-align:right|  5428 || 18a629b53b87392030df63b7806eb833
|-
| progs/h_knight.mdl  ||style=text-align:right|  7156 || 46a03fa72b0cdebcf58045aba2fafc13
|-
| progs/h_ogre.mdl  ||style=text-align:right|  14900 || 14eb06611c769e254d0531c05919bdf5
|-
| progs/h_player.mdl  ||style=text-align:right|  14708 || bf1773df7d3e19c5b211a1ee408f6b05
|-
| progs/h_shams.mdl  ||style=text-align:right|  37060 || ff1e04e18c57667991341a011fb6c363
|-
| progs/h_wizard.mdl  ||style=text-align:right|  14804 || 4bc6be40128f313cf9ad06c347310735
|-
| progs/h_zombie.mdl  ||style=text-align:right|  4484 || 0fdef7f7cd05a3209e0a163e87f69f8b
|-
| progs/invisibl.mdl  ||style=text-align:right|  7092 || 1e87d86af02e69db9c9f27f5fddc7a47
|-
| progs/invulner.mdl  ||style=text-align:right|  23920 || 8c8d83e4d50c3282d009b333a1280422
|-
| progs/knight.mdl  ||style=text-align:right|  101404 || 5328915db5c53e85cf75d46e7b747fb9
|-
| progs/lavaball.mdl  ||style=text-align:right|  8788 || 92af53d2145681e37877dbc1d12801b2
|-
| progs/m_g_key.mdl  ||style=text-align:right|  12820 || 192c2650a115c91706f6fa8fe68beb45
|-
| progs/missile.mdl  ||style=text-align:right|  57796 || 47f19f9e34954b93443c9759dd2e7ba0
|-
| progs/m_s_key.mdl  ||style=text-align:right|  12820 || 20837376b391cdd5c92e57b84e05687f
|-
| progs/ogre.mdl  ||style=text-align:right|  162036 || fbb592ca3788a576dd2f31fcf8c80fab
|-
| progs/player.mdl  ||style=text-align:right|  191852 || 405cef9a10d96cdabffb5e91312f8e5c
|-
| progs/quaddama.mdl  ||style=text-align:right|  39992 || 00b177ff272a4779097ea08344da8aff
|-
| progs/s_bubble.spr  ||style=text-align:right|  588 || 7c0887630ed468205292d8cb7abcae93
|-
| progs/s_explod.spr  ||style=text-align:right|  18972 || 766c6a92c26b54f68f7ff87c90d71cf2
|-
| progs/shambler.mdl  ||style=text-align:right|  98556 || 9b09375a0f614dc4081e363cc34f1185
|-
| progs/s_light.mdl  ||style=text-align:right|  27596 || ee6649ea5673989f3aa06213a8d65f76
|-
| progs/s_light.spr  ||style=text-align:right|  1080 || aff44ba238f4e1d0d504d6f9700aadb4
|-
| progs/soldier.mdl  ||style=text-align:right|  146288 || 5b6c30a984872b4273dd5861412d35c5
|-
| progs/spike.mdl  ||style=text-align:right|  1684 || be4cb73125f939284376080acc9887dd
|-
| progs/s_spike.mdl  ||style=text-align:right|  1684 || ebb1d58242b64a703623c8a33fcbd9e6
|-
| progs/suit.mdl  ||style=text-align:right|  51236 || 882a61f5eea7f9cdbc04800b963cef85
|-
| progs/v_axe.mdl  ||style=text-align:right|  57908 || 577dadcca2700068995c808dc7dec76f
|-
| progs/v_light.mdl  ||style=text-align:right|  56204 || 68733d4c690de88b5c3ba33e52be1c15
|-
| progs/v_nail2.mdl  ||style=text-align:right|  68732 || aacd1002ab02662cc1d3ff46885b553e
|-
| progs/v_nail.mdl  ||style=text-align:right|  54472 || ec9ba028b346da2f9674c2a521ff0c2f
|-
| progs/v_rock2.mdl  ||style=text-align:right|  58188 || 96edf1a3c7629987c200361523f780d7
|-
| progs/v_rock.mdl  ||style=text-align:right|  58548 || 7bea46b2a75fd7cff2fb99420e4c4e25
|-
| progs/v_shot2.mdl  ||style=text-align:right|  50816 || 922b3b687766ae0d7aeb73d44dec7035
|-
| progs/v_shot.mdl  ||style=text-align:right|  43852 || 1fd140b6856843e83cd9bf3966f5d7dd
|-
| progs/w_g_key.mdl  ||style=text-align:right|  7252 || c5c5f0d14b022f57294ad9aded318250
|-
| progs/wizard.mdl  ||style=text-align:right|  64472 || bf60986594f045e60e8aa6339d553ee7
|-
| progs/w_s_key.mdl  ||style=text-align:right|  7252 || ec02314a7d12439d36b4eb2dd0a641a8
|-
| progs/w_spike.mdl  ||style=text-align:right|  14336 || 8cf9245df2164e8062b01a220b508d6b
|-
| progs/zombie.mdl  ||style=text-align:right|  186084 || a923b1d03b9d237dd5ead9bd56acc900
|-
| progs/zom_gib.mdl  ||style=text-align:right|  10196 || cf42c938caa5b19f719d1f110b1dc6d4
|-
| quake.rc  ||style=text-align:right|  293 || 411d42958aaeae141813f9ebfcf5233f
|-
| sound/ambience/buzz1.wav  ||style=text-align:right|  36308 || 346a00c795c6f1f1338ade6fc350b3fe
|-
| sound/ambience/comp1.wav  ||style=text-align:right|  62734 || f91a1120de804f7cd4dbba4f12c748e9
|-
| sound/ambience/drip1.wav  ||style=text-align:right|  137736 || 2306a76162eeda3d0812c516bc99aa7a
|-
| sound/ambience/drone6.wav  ||style=text-align:right|  18522 || 322853ddb42ad2a205579b5cca8e2e8c
|-
| sound/ambience/fire1.wav  ||style=text-align:right|  24064 || 610d3985ed8133988e8de3bec2b9cbbe
|-
| sound/ambience/fl_hum1.wav  ||style=text-align:right|  50154 || e4628499702e004c4bacd282a3ecb8c0
|-
| sound/ambience/hum1.wav  ||style=text-align:right|  40166 || 486bfa737c35b0c9dda57cbee2a540af
|-
| sound/ambience/suck1.wav  ||style=text-align:right|  110392 || 2e99e4d1fe1501d5191c8157d3063cb6
|-
| sound/ambience/swamp1.wav  ||style=text-align:right|  68524 || 29ffb678d78997eb6c227677c86ea4f8
|-
| sound/ambience/swamp2.wav  ||style=text-align:right|  68526 || 356aa1e875da846e72d8f17bbb699a5b
|-
| sound/ambience/thunder1.wav  ||style=text-align:right|  41492 || cefd6ced4b5bc79fcece1003238566f6
|-
| sound/ambience/water1.wav  ||style=text-align:right|  55784 || 6eeaae0a3450652d2be0782895297ee4
|-
| sound/ambience/wind2.wav  ||style=text-align:right|  28610 || 030cf8dd2b00a12454b5b35a89d03914
|-
| sound/ambience/windfly.wav  ||style=text-align:right|  22140 || c7be01e6d324e66883f70aa0072a99b0
|-
| sound/boss1/death.wav  ||style=text-align:right|  27600 || 43469b1acd35b67107da5da82e1df911
|-
| sound/boss1/out1.wav  ||style=text-align:right|  50344 || 847a6f971f6905dfaffd70b30d18a4b1
|-
| sound/boss1/pain.wav  ||style=text-align:right|  17700 || 49112740c0ff421f9272b9e8efc748cd
|-
| sound/boss1/sight1.wav  ||style=text-align:right|  24768 || 427dd600e6b28c9402212adcc5d652c7
|-
| sound/boss1/throw.wav  ||style=text-align:right|  11526 || 9b6e9ff2c8df448f7fd4b5315e60ddda
|-
| sound/buttons/airbut1.wav  ||style=text-align:right|  10672 || 9d2e14e7176842a0dce909a43d38873d
|-
| sound/buttons/switch02.wav  ||style=text-align:right|  3746 || d2e9cba3a353edc65115f6f5c574403c
|-
| sound/buttons/switch04.wav  ||style=text-align:right|  3666 || ff47857a58d3faefb2b94a37d7ba4f26
|-
| sound/buttons/switch21.wav  ||style=text-align:right|  6318 || 3605b0d061a9baf185c6ab7614534531
|-
| sound/demon/ddeath.wav  ||style=text-align:right|  9140 || 62a48dcd405ca55c9ce18497e36faa0e
|-
| sound/demon/dhit2.wav  ||style=text-align:right|  7142 || 9e741696e4d0d66e30e718fc70ec186e
|-
| sound/demon/djump.wav  ||style=text-align:right|  8494 || 791ac9d6b6593808316145443cb7e7a0
|-
| sound/demon/dland2.wav  ||style=text-align:right|  4400 || db14c7b01838f826b7a712075f9026fd
|-
| sound/demon/dpain1.wav  ||style=text-align:right|  6282 || 5e6c485878393c9bebb0d0e6659bc479
|-
| sound/demon/idle1.wav  ||style=text-align:right|  9098 || 7a83f8caf3d5b1172a7dc5afdc942988
|-
| sound/demon/sight2.wav  ||style=text-align:right|  8804 || 65171c355c22a5069520b0881677ae3c
|-
| sound/dog/dattack1.wav  ||style=text-align:right|  8154 || 0c47c9d4aaae0bf3159a288b674f4a35
|-
| sound/dog/ddeath.wav  ||style=text-align:right|  14912 || b0e7760b1d7286a028ff9773f6802958
|-
| sound/dog/dpain1.wav  ||style=text-align:right|  7240 || 28e5ab93b41e13e2916433283a5d1a46
|-
| sound/dog/dsight.wav  ||style=text-align:right|  6722 || 0edc290765bac1fb4fe03ca55bc7c225
|-
| sound/dog/idle.wav  ||style=text-align:right|  6870 || 42bd6026ff32bd94523ad9f8fe8362cc
|-
| sound/doors/airdoor1.wav  ||style=text-align:right|  13654 || 9b91930e8c2fdece31a2362296891122
|-
| sound/doors/airdoor2.wav  ||style=text-align:right|  8594 || 29fd823d1c14ca42a9a89c716b26f4cd
|-
| sound/doors/basesec1.wav  ||style=text-align:right|  13930 || eb2363fed42724f55e8f55f96c335bcf
|-
| sound/doors/basesec2.wav  ||style=text-align:right|  10238 || 8d163a56607c9cf64a270a156c1c5cef
|-
| sound/doors/basetry.wav  ||style=text-align:right|  10518 || a5108d5c51281ab55c0baf884cbe8cbe
|-
| sound/doors/baseuse.wav  ||style=text-align:right|  16486 || f43fee91efe813a5eb34e9d72918fdb9
|-
| sound/doors/ddoor1.wav  ||style=text-align:right|  7738 || dff86a26139cdd49a193d5ed7ebf6ae1
|-
| sound/doors/ddoor2.wav  ||style=text-align:right|  5904 || 4a9d0b0825d0302ce465569d1e35fbcf
|-
| sound/doors/doormv1.wav  ||style=text-align:right|  14036 || 3fd379aec80a2ad8105c0c89ba5b40e6
|-
| sound/doors/drclos4.wav  ||style=text-align:right|  12814 || 83df1865a0c9fa5d02c2f137564c57de
|-
| sound/doors/hydro1.wav  ||style=text-align:right|  11094 || b1703980a20e624bc3366ccf55ca617e
|-
| sound/doors/hydro2.wav  ||style=text-align:right|  10700 || b1866f5b3950788ccf4206444ab64bc7
|-
| sound/doors/latch2.wav  ||style=text-align:right|  7338 || ad2378ca21a0ca529df328261e07aed5
|-
| sound/doors/medtry.wav  ||style=text-align:right|  7828 || ebb536bec2cdfd22c25b35793c055339
|-
| sound/doors/meduse.wav  ||style=text-align:right|  10718 || 4522aada194b23eb33b541cbcc755cf6
|-
| sound/doors/runetry.wav  ||style=text-align:right|  13524 || c433bae9e2ab508712f87dc2cacc82c8
|-
| sound/doors/runeuse.wav  ||style=text-align:right|  17364 || b4bcfd525a26f5b5ecc9d392430d9079
|-
| sound/doors/stndr1.wav  ||style=text-align:right|  12620 || 5bae2183885e18d65d69624e85249fd9
|-
| sound/doors/stndr2.wav  ||style=text-align:right|  11470 || f43a75c917effff09ef7be8a321c8b49
|-
| sound/doors/winch2.wav  ||style=text-align:right|  14872 || a4edffdfede7dbaed37db526c26e2b6d
|-
| sound/hknight/hit.wav  ||style=text-align:right|  6260 || fece24e2548f1d769e8fce39a5c87d01
|-
| sound/items/armor1.wav  ||style=text-align:right|  7714 || 186d29f2baf35b8c280bc97754606fad
|-
| sound/items/damage2.wav  ||style=text-align:right|  33012 || 14e53b7617ffe315a7c3f8d89652e51c
|-
| sound/items/damage3.wav  ||style=text-align:right|  12894 || baf754aec7ed4baba16760ac85513184
|-
| sound/items/damage.wav  ||style=text-align:right|  23374 || 8cde8b9278ca4922a4ec7ead6e5ee01b
|-
| sound/items/health1.wav  ||style=text-align:right|  7958 || 52a2c4f808db4edd8393de0de618c91f
|-
| sound/items/inv1.wav  ||style=text-align:right|  13728 || 5850cab55d6197d0e76d9f0a22ba10be
|-
| sound/items/inv2.wav  ||style=text-align:right|  33216 || 4edcd38a2c6adc5305636dd7afd5ef60
|-
| sound/items/inv3.wav  ||style=text-align:right|  33320 || 325c268be05b42a019ccb92e6993ab9e
|-
| sound/items/itembk2.wav  ||style=text-align:right|  9910 || 270c688b3cb884f5d4e5ffd8ccc934a1
|-
| sound/items/protect2.wav  ||style=text-align:right|  34012 || 25627a4bd2b4c6054cfd2fc4bf69ddc2
|-
| sound/items/protect3.wav  ||style=text-align:right|  23364 || 7b9374d67f6d59e524bba2af236ca30a
|-
| sound/items/protect.wav  ||style=text-align:right|  22536 || d839d5a84f811ce8a0e28616891bf1a7
|-
| sound/items/r_item1.wav  ||style=text-align:right|  6822 || 3fc0d0ae4a71c9fbfe548f38626c6a08
|-
| sound/items/r_item2.wav  ||style=text-align:right|  7448 || 384ffefe795d99df75f381596a0f1976
|-
| sound/items/suit2.wav  ||style=text-align:right|  33254 || 0a9d2766a5b805cb5794f9bea57e6585
|-
| sound/items/suit.wav  ||style=text-align:right|  15854 || da413f34023d219f1e34fde50a037be0
|-
| sound/knight/idle.wav  ||style=text-align:right|  11064 || 1b5c3981bee078318af346d8fe8090b9
|-
| sound/knight/kdeath.wav  ||style=text-align:right|  10688 || 11a96f48a8f2433c23beae299c8fb96e
|-
| sound/knight/khurt.wav  ||style=text-align:right|  5586 || 32c9f48dd4a6a87752aedf56fe8de668
|-
| sound/knight/ksight.wav  ||style=text-align:right|  13514 || eb75b4af348c88e84d8c87c19d5976fa
|-
| sound/knight/sword1.wav  ||style=text-align:right|  2306 || 93045b5f3178413dc6b01ec2869d1f73
|-
| sound/knight/sword2.wav  ||style=text-align:right|  2784 || 82d1a7c263cd3df7b060dee2f7f8b1fd
|-
| sound/misc/h2ohit1.wav  ||style=text-align:right|  12972 || 49ecb03f4f10862453656a67598f8b8a
|-
| sound/misc/medkey.wav  ||style=text-align:right|  10020 || 0e3ae5626a47d81e4166539e355e31bb
|-
| sound/misc/menu1.wav  ||style=text-align:right|  5738 || 12c36546601c385bc47c9ca9420b7eee
|-
| sound/misc/menu2.wav  ||style=text-align:right|  10672 || 39b01ea6feb3ec8dbd6d8ee3e5e966c4
|-
| sound/misc/menu3.wav  ||style=text-align:right|  3010 || 4a03dc2fd56831b855dab761eac4f7de
|-
| sound/misc/null.wav  ||style=text-align:right|  1244 || 811989e09124f54cb27fe6154b0f1018
|-
| sound/misc/outwater.wav  ||style=text-align:right|  5018 || 35732412412ddb5ed418633bb0123bbe
|-
| sound/misc/power.wav  ||style=text-align:right|  19832 || 9f2c3a18d9fc8d9cecfac6db3aad6bc6
|-
| sound/misc/r_tele1.wav  ||style=text-align:right|  8036 || c2194171b4c446e136ed7514fbb098a5
|-
| sound/misc/r_tele2.wav  ||style=text-align:right|  17324 || 0ce662ac90fb3658d69320d1be4025c1
|-
| sound/misc/r_tele3.wav  ||style=text-align:right|  18016 || 122ef44813edcfe7391578fd29e729d2
|-
| sound/misc/r_tele4.wav  ||style=text-align:right|  9068 || 0097b5747ccc70d5b12fc6838aff02c2
|-
| sound/misc/r_tele5.wav  ||style=text-align:right|  22042 || a82334cbb66d12f28cce9e71c90ea50b
|-
| sound/misc/runekey.wav  ||style=text-align:right|  14578 || 6b21a2e5878011da50fdee0a301d3e34
|-
| sound/misc/secret.wav  ||style=text-align:right|  6610 || a02ceefcc24b1ebf5c164a1e1acfb05f
|-
| sound/misc/talk.wav  ||style=text-align:right|  1810 || d5b25d4df59d92ac5016e88689ea60c1
|-
| sound/misc/trigger1.wav  ||style=text-align:right|  20230 || dc927c8a1d0a9bd59fbc5dd91ae1d812
|-
| sound/misc/water1.wav  ||style=text-align:right|  3926 || d8291c762acb1edf24927fdcc0f6a6cd
|-
| sound/misc/water2.wav  ||style=text-align:right|  3340 || 049e8e7e7b30d4d8038afb7248bdd977
|-
| sound/ogre/ogdrag.wav  ||style=text-align:right|  12396 || 658587dc89aaefae5ca3f058f7ff4227
|-
| sound/ogre/ogdth.wav  ||style=text-align:right|  13892 || de98e7bb9e70586edddd3308cfded3db
|-
| sound/ogre/ogidle2.wav  ||style=text-align:right|  11254 || 196ae9c33a4311160e1d5f3da878ab09
|-
| sound/ogre/ogidle.wav  ||style=text-align:right|  12894 || 177c829840a87c885bbc8951e7ce962e
|-
| sound/ogre/ogpain1.wav  ||style=text-align:right|  7898 || ac6d133d7720c12df49813fe10e683b5
|-
| sound/ogre/ogsawatk.wav  ||style=text-align:right|  16154 || 7257bdfd014bb61d778b8f88cb65d560
|-
| sound/ogre/ogwake.wav  ||style=text-align:right|  19356 || 3296459e495c4c12b31179d4eeffac19
|-
| sound/plats/medplat1.wav  ||style=text-align:right|  16378 || b73215aa6627c8b5b90fce8d260d48d0
|-
| sound/plats/medplat2.wav  ||style=text-align:right|  7338 || 1fc6c3772917a1a8155d04fa52e17005
|-
| sound/plats/plat1.wav  ||style=text-align:right|  20248 || 5d43ed85d896ba926f459e06ba6635d5
|-
| sound/plats/plat2.wav  ||style=text-align:right|  7338 || 49d7ab0fd726cd652eb6e5756fce61b9
|-
| sound/plats/train1.wav  ||style=text-align:right|  21430 || b589ae8262046361d9dca39d6b8f693a
|-
| sound/plats/train2.wav  ||style=text-align:right|  5870 || 640017e1b870d643e3bca29d499c72ee
|-
| sound/player/axhit1.wav  ||style=text-align:right|  6906 || 149b2371334da318386325182924eaca
|-
| sound/player/axhit2.wav  ||style=text-align:right|  2434 || fc01909318455f5310efa2457a370897
|-
| sound/player/death1.wav  ||style=text-align:right|  10170 || ba005f5488d4ee78dabf613a03f33a5f
|-
| sound/player/death2.wav  ||style=text-align:right|  8026 || 20477d2e7c84aac1bef95d32c9c702dd
|-
| sound/player/death3.wav  ||style=text-align:right|  10918 || 7b206ba8e1fa28d8605b50e3f3200f11
|-
| sound/player/death4.wav  ||style=text-align:right|  14126 || 1b0f27f4d41b748d3cc5c3d56bd917f8
|-
| sound/player/death5.wav  ||style=text-align:right|  14946 || 7efe84195cfa97515aad2d7f96f25346
|-
| sound/player/drown1.wav  ||style=text-align:right|  8908 || 732f0416af6990e028110380bcb36f0d
|-
| sound/player/drown2.wav  ||style=text-align:right|  3114 || 29ee1f287879acce29b15d4722668bc2
|-
| sound/player/gasp1.wav  ||style=text-align:right|  8702 || b06cbc370c8c2c163dc4d487e8b673c7
|-
| sound/player/gasp2.wav  ||style=text-align:right|  13134 || 30aece9d8779764620c7f866bfb06edb
|-
| sound/player/gib.wav  ||style=text-align:right|  14424 || 26fa9942078125388f34b71546615068
|-
| sound/player/h2odeath.wav  ||style=text-align:right|  18104 || 73b0f4dfae07f6e49112cadfe202735c
|-
| sound/player/h2ojump.wav  ||style=text-align:right|  11438 || cd421b96410971bb1a4f21d3936a3805
|-
| sound/player/inh2o.wav  ||style=text-align:right|  11340 || d4c1a27c4d07e8dfdf18a4b1a880c610
|-
| sound/player/inlava.wav  ||style=text-align:right|  10958 || c37875a082900716b7af88d2d990f55c
|-
| sound/player/land2.wav  ||style=text-align:right|  6204 || 6ba534256a779d66d9d9dabb90e63c8b
|-
| sound/player/land.wav  ||style=text-align:right|  2434 || e34328a40358d98f0f95403b9e27ec1e
|-
| sound/player/lburn1.wav  ||style=text-align:right|  6682 || 3c447c72385defe97c060771077d8ba0
|-
| sound/player/lburn2.wav  ||style=text-align:right|  6076 || 6849ee8dbd91ec82ece016fbd39b0a5c
|-
| sound/player/pain1.wav  ||style=text-align:right|  3394 || d7ac9df7540b791f952ca2a681c0265b
|-
| sound/player/pain2.wav  ||style=text-align:right|  2710 || 513e054b64d4fb61f31384d59e123020
|-
| sound/player/pain3.wav  ||style=text-align:right|  4854 || aafc61ad4e16cc5cdd2db2100796b494
|-
| sound/player/pain4.wav  ||style=text-align:right|  4840 || f655ef2045bc55473303b27546aa6fc0
|-
| sound/player/pain5.wav  ||style=text-align:right|  8020 || f8551a73cb89396042687baa8c68b5c2
|-
| sound/player/pain6.wav  ||style=text-align:right|  5462 || 70062eabf96288d307280fb601ce0ee2
|-
| sound/player/plyrjmp8.wav  ||style=text-align:right|  3888 || d4a552d8f627c7f3b933568c4a74c913
|-
| sound/player/slimbrn2.wav  ||style=text-align:right|  12468 || b17c18a9f81a952f2d41f65b5180f210
|-
| sound/player/teledth1.wav  ||style=text-align:right|  14414 || c226c7f041187ba058d8112cc0190b56
|-
| sound/player/tornoff2.wav  ||style=text-align:right|  7726 || 03ec1c805b307b8fe4c4052f8332a5e5
|-
| sound/player/udeath.wav  ||style=text-align:right|  16082 || afe674f287efb6197da2cea0c0b1d2f8
|-
| sound/shambler/melee1.wav  ||style=text-align:right|  4718 || 77fe6240973a204b757a427ebf66bcfd
|-
| sound/shambler/melee2.wav  ||style=text-align:right|  5966 || 3be31638d769e3d690c92311dfafdeac
|-
| sound/shambler/sattck1.wav  ||style=text-align:right|  8036 || ec8c3f79ea42d09154cb8975ada1b21c
|-
| sound/shambler/sboom.wav  ||style=text-align:right|  11672 || 9834601a645d7d1f62001b2a314ec18f
|-
| sound/shambler/sdeath.wav  ||style=text-align:right|  21106 || e0e62d229a985a6e39218c6488599059
|-
| sound/shambler/shurt2.wav  ||style=text-align:right|  4302 || 1e87631ede95e061a75f9c31629ac0b8
|-
| sound/shambler/sidle.wav  ||style=text-align:right|  5646 || 368a240e6c3e877793352a79c1828386
|-
| sound/shambler/smack.wav  ||style=text-align:right|  5300 || bd8c634c9894348360fec7b7419d1649
|-
| sound/shambler/ssight.wav  ||style=text-align:right|  15420 || 657107577460d5acf3157dec97e07a89
|-
| sound/soldier/death1.wav  ||style=text-align:right|  8434 || fe25952af40b536c3bb67bfca58062eb
|-
| sound/soldier/idle.wav  ||style=text-align:right|  9802 || 4cdfbdda8fb5f40b125c7bcddb6e8914
|-
| sound/soldier/pain1.wav  ||style=text-align:right|  5000 || 54d3b05fdcecf7480034858f2b22b06c
|-
| sound/soldier/pain2.wav  ||style=text-align:right|  7838 || e2bbc9d3405b9b9fdae76d2fc298fc2f
|-
| sound/soldier/sattck1.wav  ||style=text-align:right|  14302 || b76ac35f900f280a7a7996da7e404362
|-
| sound/soldier/sight1.wav  ||style=text-align:right|  12716 || e2a39533250ddd1b08053d5c4ebf7fd0
|-
| sound/weapons/ax1.wav  ||style=text-align:right|  3308 || 237d4d819d02ad37849a8a895cc410e1
|-
| sound/weapons/bounce.wav  ||style=text-align:right|  5864 || fced668c6558a9505abf5014d60528a6
|-
| sound/weapons/grenade.wav  ||style=text-align:right|  8364 || d2b6fa131933f203eba2a282276e88df
|-
| sound/weapons/guncock.wav  ||style=text-align:right|  14430 || 6a63452167cc106e756518536446844f
|-
| sound/weapons/lhit.wav  ||style=text-align:right|  26028 || fefd021d0bd35a1f8da8870f1c06abb9
|-
| sound/weapons/lock4.wav  ||style=text-align:right|  3876 || 3fd93222258d5b1500b150f021c94519
|-
| sound/weapons/lstart.wav  ||style=text-align:right|  56378 || abe1abf6dcadcda5930b0684c7ea820a
|-
| sound/weapons/pkup.wav  ||style=text-align:right|  5174 || 0aa6f0a7d609e1a56fd535a06d1bb56e
|-
| sound/weapons/r_exp3.wav  ||style=text-align:right|  17478 || 57db026474fc76ba7f38cea24eaaf8cf
|-
| sound/weapons/ric1.wav  ||style=text-align:right|  4308 || a31166b4bbb4509ac3004a01f7477ee9
|-
| sound/weapons/ric2.wav  ||style=text-align:right|  10838 || a180b447c0527e603cea54a9aefd6139
|-
| sound/weapons/ric3.wav  ||style=text-align:right|  12638 || 8a773bbb585540ddce256151162f3a2c
|-
| sound/weapons/rocket1i.wav  ||style=text-align:right|  9660 || fb4fdf345d805cf6980c4c695974effc
|-
| sound/weapons/sgun1.wav  ||style=text-align:right|  22992 || 95a14815e48deb323d0cf8251d728ac7
|-
| sound/weapons/shotgn2.wav  ||style=text-align:right|  8694 || cb561cefbf472232334b419af050e5a0
|-
| sound/weapons/spike2.wav  ||style=text-align:right|  12642 || 9189d811855f108da4a1e2d34dc7c633
|-
| sound/weapons/tink1.wav  ||style=text-align:right|  1252 || 297ba8706625fcf05887edb393e9a441
|-
| sound/wizard/hit.wav  ||style=text-align:right|  7332 || 6598d669334df977f1f97b95288edf11
|-
| sound/wizard/wattack.wav  ||style=text-align:right|  25912 || b3568a47439f81779d40335e76f5bc2d
|-
| sound/wizard/wdeath.wav  ||style=text-align:right|  20684 || 99d9c71343bc23222abb92119d404400
|-
| sound/wizard/widle1.wav  ||style=text-align:right|  13464 || b22b1dd9f66879b3447d36ab584316c7
|-
| sound/wizard/widle2.wav  ||style=text-align:right|  23094 || 7178fd83df227360564adef01bed92c6
|-
| sound/wizard/wpain.wav  ||style=text-align:right|  8686 || bd7e59ab7d7b835f9ed8ab51950914de
|-
| sound/wizard/wsight.wav  ||style=text-align:right|  13078 || df5949057c750528917c6cb32b7fd9fd
|-
| sound/zombie/idle_w2.wav  ||style=text-align:right|  17192 || d2bb59b9d7ac71097c07123a23525641
|-
| sound/zombie/z_fall.wav  ||style=text-align:right|  3062 || 6968318b2d196c6d54bc707d8a390547
|-
| sound/zombie/z_gib.wav  ||style=text-align:right|  16226 || 199dda66ade8d6f0ef4897e4d7608c0d
|-
| sound/zombie/z_hit.wav  ||style=text-align:right|  6166 || 6c66ab3e6b149bf35956a4bbc0057acb
|-
| sound/zombie/z_idle1.wav  ||style=text-align:right|  13244 || 21088a7b38b1124d7ec72e58d5ab93a6
|-
| sound/zombie/z_idle.wav  ||style=text-align:right|  16734 || e5e570e38c4405111004190a79f0e925
|-
| sound/zombie/z_miss.wav  ||style=text-align:right|  10734 || 96fad96a8c3bc6f7bcc5da6c82678da2
|-
| sound/zombie/z_pain1.wav  ||style=text-align:right|  15374 || fcd83b89a94b0cadbe1361a4df080ec0
|-
| sound/zombie/z_pain.wav  ||style=text-align:right|  12218 || 56637968b8309bd2f825153330bbdfc0
|-
| sound/zombie/z_shot1.wav  ||style=text-align:right|  3068 || 561afb69b7851923a8fb3b54e3e13c96
|-
|}
&lt;/tt&gt;

=== 85fc9cee2035b66290da1e33be2ac86b ===
The [[id1]] ''pak0.pak'' with the md5sum 85fc9cee2035b66290da1e33be2ac86b contains exactly the same folders &amp; files as fc989b37572fae074e8ffda0ce4d5297.

=== 5906e5998fc3d896ddaf5e6a62e03abb ===
The [[id1]] ''pak0.pak'' with the md5sum 5906e5998fc3d896ddaf5e6a62e03abb contains the following folders &amp; files:
&lt;tt&gt;
{| class=&quot;wikitable collapsible collapsed&quot;
! Path !! Size !! md5
|-
| default.cfg  ||style=text-align:right|  1914 || fc989b37572fae074e8ffda0ce4d5297
|-
| demo1.dem  ||style=text-align:right|  184471 || 85ec0141ab24d9732e487d1aafa791f0
|-
| demo2.dem  ||style=text-align:right|  152705 || fa5c3daf7a57954cd95f94b698a7e420
|-
| demo3.dem  ||style=text-align:right|  197679 || 691f37e5715ea2863c1d8092a6429824
|-
| end1.bin  ||style=text-align:right|  4000 || 92ae51961ec2f429dfe9bea1138fbd5d
|-
| gfx/bigbox.lmp  ||style=text-align:right|  5192 || e597771ac6149b2b071ebfd24981ea04
|-
| gfx/box_bl.lmp  ||style=text-align:right|  72 || 5b094c37c2c1c2eebe37f84117dea182
|-
| gfx/box_bm.lmp  ||style=text-align:right|  136 || 44621236738e2bf8d669e53dca887278
|-
| gfx/box_br.lmp  ||style=text-align:right|  72 || 86597d5325b472caf5644644033e5cab
|-
| gfx/box_ml.lmp  ||style=text-align:right|  72 || adcea286ba0ac01084fd0c131b16ffdd
|-
| gfx/box_mm2.lmp  ||style=text-align:right|  136 || b850bcec189d909e7a0f796111a11249
|-
| gfx/box_mm.lmp  ||style=text-align:right|  136 || 700b4884b1a3c6aa7356a43014261866
|-
| gfx/box_mr.lmp  ||style=text-align:right|  72 || e30d9ea783ef7dd50101682f03ba40d7
|-
| gfx/box_tl.lmp  ||style=text-align:right|  72 || 3903d3d814e37c55790ac0ccfef2b925
|-
| gfx/box_tm.lmp  ||style=text-align:right|  136 || 7cb85ccbf8e7d2532da2a839a7cef348
|-
| gfx/box_tr.lmp  ||style=text-align:right|  72 || 5c5e72746af821a4cf8437d8fecc53c7
|-
| gfx/colormap.lmp  ||style=text-align:right|  16385 || 0d793b70bffafbd666fc5c88d6e15e9d
|-
| gfx/complete.lmp  ||style=text-align:right|  4616 || db6a00dfbe2c62a43c261e5622297c4a
|-
| gfx/conback.lmp  ||style=text-align:right|  64008 || 9eb6f9c47870bf42985d9382958a5c12
|-
| gfx/dim_drct.lmp  ||style=text-align:right|  3352 || 50ea11fe8c4d9db92863bdcd03b89df5
|-
| gfx/dim_ipx.lmp  ||style=text-align:right|  3352 || 0bef9943487f0611225bf0a5c0fe5dd4
|-
| gfx/dim_modm.lmp  ||style=text-align:right|  3352 || 3288f03144f06b95cadafa9458a77b1d
|-
| gfx/dim_mult.lmp  ||style=text-align:right|  3352 || 348b7369227f2d7e9d0daccbf6c9344d
|-
| gfx/dim_tcp.lmp  ||style=text-align:right|  3352 || 7dc8bbb01d7c90cd51c28da0ff6ed900
|-
| gfx/finale.lmp  ||style=text-align:right|  6920 || b6e49409d344e0344273d86ea33fe35f
|-
| gfx/help0.lmp  ||style=text-align:right|  64008 || b392ac30ad49252b51ec934ed855c20f
|-
| gfx/help1.lmp  ||style=text-align:right|  64008 || 857543c69245117a606044ea63adac9a
|-
| gfx/help2.lmp  ||style=text-align:right|  64008 || 882dd5920ea9c19f637f32084de9788a
|-
| gfx/help3.lmp  ||style=text-align:right|  64008 || a89d169524920d896128009467deebfc
|-
| gfx/help4.lmp  ||style=text-align:right|  64008 || c72d67c84ae6b403fae5f08d3e5c3bc6
|-
| gfx/help5.lmp  ||style=text-align:right|  64008 || 12203d7cdec35c4f51622dd90ec92093
|-
| gfx/inter.lmp  ||style=text-align:right|  23048 || f6eabe0d742380c7b47a9ee44170993d
|-
| gfx/loading.lmp  ||style=text-align:right|  3464 || 3249bc994266529a1748c06bfbb24bfa
|-
| gfx/mainmenu.lmp  ||style=text-align:right|  26888 || 8122e2a0b8888f9d1ebef149551b6434
|-
| gfx/menudot1.lmp  ||style=text-align:right|  392 || bfdb08d84d580abcfbacc1c9abd62bfb
|-
| gfx/menudot2.lmp  ||style=text-align:right|  392 || 6c6d2176e00edbe530bb1db118aaa6dc
|-
| gfx/menudot3.lmp  ||style=text-align:right|  392 || 2527a05f6162efb3e4bc5311d9e010d5
|-
| gfx/menudot4.lmp  ||style=text-align:right|  392 || 90ea6be033b39b139b3779932d266f33
|-
| gfx/menudot5.lmp  ||style=text-align:right|  392 || c9beb9600c35e458d0f83b6cf1e1c692
|-
| gfx/menudot6.lmp  ||style=text-align:right|  392 || 31b9a6ec1d12a2bd56b955185a9e72d3
|-
| gfx/menuplyr.lmp  ||style=text-align:right|  2696 || 9eebe617ff51c4ce43f85ca1a6920d5b
|-
| gfx/mp_menu.lmp  ||style=text-align:right|  14856 || c6416b8f7f5262a5a19b9ce4be1fd9ce
|-
| gfx/netmen1.lmp  ||style=text-align:right|  3352 || 5bc6a8d8cfdfd7e940e933812954367a
|-
| gfx/netmen2.lmp  ||style=text-align:right|  3352 || c8aafb649a653e90fc5eb7b7a2b3ca2e
|-
| gfx/netmen3.lmp  ||style=text-align:right|  3352 || 11c9372d0e64057a1ec8251f596b820d
|-
| gfx/netmen4.lmp  ||style=text-align:right|  3352 || 74ec672b1312699be2eeaf25a68e4582
|-
| gfx/netmen5.lmp  ||style=text-align:right|  3352 || 231f8a9ea4ba364f517db0e9f7f1ba72
|-
| gfx/palette.lmp  ||style=text-align:right|  768 || 79bc149d4f2fb0bd68cd8400a3fd87d4
|-
| gfx/pause.lmp  ||style=text-align:right|  3080 || 5aa67f927719e4a9eb3e020e75fea969
|-
| gfx/p_load.lmp  ||style=text-align:right|  2504 || 27fe08071058385529b0b8ad746421e7
|-
| gfx/p_multi.lmp  ||style=text-align:right|  5192 || 5a307c7d11da20a4772ad9c00b9f4309
|-
| gfx/p_option.lmp  ||style=text-align:right|  3464 || 83a3bf4459bce3fe85857a0aa647b90a
|-
| gfx/p_save.lmp  ||style=text-align:right|  2120 || 0d2bb5fa5524e0180a85bf273094cd1f
|-
| gfx/qplaque.lmp  ||style=text-align:right|  4616 || f4de79557c75e26b85ea84fb6029a5f3
|-
| gfx/ranking.lmp  ||style=text-align:right|  4040 || 919b13d1f7fdd0082ec0f94699f3b681
|-
| gfx/sell.lmp  ||style=text-align:right|  64008 || 878db3866e8b38c5b8d951aef516358c
|-
| gfx/sp_menu.lmp  ||style=text-align:right|  14856 || f624aa79778970ecb8ef518b5ab435f6
|-
| gfx/ttl_cstm.lmp  ||style=text-align:right|  4424 || 4ee84e0e7fa93f0e93d26efb1e726a4d
|-
| gfx/ttl_main.lmp  ||style=text-align:right|  2312 || 07e1c8e189e2463befcfc44f5ecf8dcb
|-
| gfx/ttl_sgl.lmp  ||style=text-align:right|  3080 || 25d5360228da738f091063eaeb7c6aa8
|-
| gfx/vidmodes.lmp  ||style=text-align:right|  5192 || 18a97f403057777f262188903f485fe8
|-
| gfx.wad  ||style=text-align:right|  112828 || cde5b5890c8902c02a2f271abe8f4a1f
|-
| maps/b_batt0.bsp  ||style=text-align:right|  5044 || 00bc989f4c8d2570a2826a63c7356a27
|-
| maps/b_batt1.bsp  ||style=text-align:right|  4620 || 555bc0cb0b5c2ad2ed0110f307e70679
|-
| maps/b_bh100.bsp  ||style=text-align:right|  8820 || 62f78bb5143265f037b79ddd077c50ed
|-
| maps/b_bh10.bsp  ||style=text-align:right|  3936 || e80cde9f185612f669fc100f825ca84f
|-
| maps/b_bh25.bsp  ||style=text-align:right|  8872 || 032d70dbf8669b3627b82b41f31488bd
|-
| maps/b_explob.bsp  ||style=text-align:right|  10220 || d8c9db3cfa0264678afc580143f665ea
|-
| maps/b_nail0.bsp  ||style=text-align:right|  5044 || c8d7ec0bdee74e0c1e69e8dbe939117d
|-
| maps/b_nail1.bsp  ||style=text-align:right|  5044 || ea08b2bd6aa19ece0307f75c491e5d24
|-
| maps/b_rock0.bsp  ||style=text-align:right|  2956 || 19ce64cd248a4459bf37b45e6e7c1219
|-
| maps/b_rock1.bsp  ||style=text-align:right|  2944 || b4cdb75094cd7218ed2b0475aefabe80
|-
| maps/b_shell0.bsp  ||style=text-align:right|  5044 || 574824b3c52661959d633a76dc823859
|-
| maps/b_shell1.bsp  ||style=text-align:right|  5044 || dc8b8dcb490e204e615b2b9cdc673296
|-
| maps/e1m1.bsp  ||style=text-align:right|  1365176 || 84cae48010619bcc945426b91bc03ade
|-
| maps/e1m2.bsp  ||style=text-align:right|  1332228 || caff91afbe41f3eac4dda65cee0083c9
|-
| maps/e1m3.bsp  ||style=text-align:right|  1249944 || f20eaa5692e94ab889c4ade9e1c116c7
|-
| maps/e1m4.bsp  ||style=text-align:right|  1411452 || 29419f05ef647f83d0482502bb3f84f8
|-
| maps/e1m5.bsp  ||style=text-align:right|  1324060 || afd98cc890d748986186951b32fc9fcb
|-
| maps/e1m6.bsp  ||style=text-align:right|  1065080 || ec178e54ff68c4d8cf71e26775b2eb2d
|-
| maps/e1m7.bsp  ||style=text-align:right|  607420 || 0c1f55455e0f957291e21d211b689718
|-
| maps/e1m8.bsp  ||style=text-align:right|  924116 || 18c7ab2f922d5d586150afbc27c323a4
|-
| maps/start.bsp  ||style=text-align:right|  1433792 || 61a57bb4ca36368478f02b142d1b5291
|-
| progs/armor.mdl  ||style=text-align:right|  44076 || ca060166d7e4e4686995f05645dde593
|-
| progs/backpack.mdl  ||style=text-align:right|  19348 || 315b4ef42fb035aa3318e8d2d61961ce
|-
| progs/bolt2.mdl  ||style=text-align:right|  11860 || f59ce07cfbe01fcfc578258c573d2c31
|-
| progs/bolt3.mdl  ||style=text-align:right|  11860 || ff87579a424faa59ca2695b7434ea488
|-
| progs/bolt.mdl  ||style=text-align:right|  20644 || a176903954e9d8c7ab629f92784546c2
|-
| progs/boss.mdl  ||style=text-align:right|  211836 || 25da3b2bc30677e32ee3a3a878a4d3af
|-
| progs.dat  ||style=text-align:right|  413116 || 0c3ef3625df5883536f8da42c78b673a
|-
| progs/demon.mdl  ||style=text-align:right|  102120 || 4c73786e7cfb2083ca38cbc983cd6c4b
|-
| progs/dog.mdl  ||style=text-align:right|  146056 || e727fbc39acc652f812972612ce37565
|-
| progs/end1.mdl  ||style=text-align:right|  20820 || 67c0fcab33d3772c00bb462b0e749275
|-
| progs/eyes.mdl  ||style=text-align:right|  4372 || ed72f64a17c6909b2cb3034a734bca97
|-
| progs/flame2.mdl  ||style=text-align:right|  64572 || f2c8f8950ebd7a0edded6247655d325b
|-
| progs/flame.mdl  ||style=text-align:right|  46364 || 8593c05374d84354d4444c218e86fdb8
|-
| progs/gib1.mdl  ||style=text-align:right|  5716 || f5c5b799e895dc03036522a487e99913
|-
| progs/gib2.mdl  ||style=text-align:right|  16228 || cfa9e97a3542852418123e0bb12e4f86
|-
| progs/gib3.mdl  ||style=text-align:right|  22228 || d73be7b2881e0a5aacf2b332ac29086f
|-
| progs/g_light.mdl  ||style=text-align:right|  50276 || 61bba06ec3804b7f355a62fd4585ad8f
|-
| progs/g_nail2.mdl  ||style=text-align:right|  30720 || ed6d7bb5ff050ad5f2bf4be7739a16a5
|-
| progs/g_nail.mdl  ||style=text-align:right|  34700 || e2959ca741c764dd42025ef531a1b554
|-
| progs/grenade.mdl  ||style=text-align:right|  2244 || f492d6257c216306983a72f41db0d891
|-
| progs/g_rock2.mdl  ||style=text-align:right|  40756 || 68c047c97bab89afe2cb69e65b7c62e1
|-
| progs/g_rock.mdl  ||style=text-align:right|  48244 || 61346f842944795e0821e31e3d61b427
|-
| progs/g_shot.mdl  ||style=text-align:right|  32916 || 7facfec1a3cfb892cce871f398e9cb6b
|-
| progs/h_demon.mdl  ||style=text-align:right|  34884 || 5253a0ea93d9624d73fb984ee339b52f
|-
| progs/h_dog.mdl  ||style=text-align:right|  24436 || a0b5f87522b3a769548c46cf3bb4223e
|-
| progs/h_guard.mdl  ||style=text-align:right|  5428 || 18a629b53b87392030df63b7806eb833
|-
| progs/h_knight.mdl  ||style=text-align:right|  7156 || 46a03fa72b0cdebcf58045aba2fafc13
|-
| progs/h_ogre.mdl  ||style=text-align:right|  14900 || 14eb06611c769e254d0531c05919bdf5
|-
| progs/h_player.mdl  ||style=text-align:right|  14708 || bf1773df7d3e19c5b211a1ee408f6b05
|-
| progs/h_shams.mdl  ||style=text-align:right|  37060 || ff1e04e18c57667991341a011fb6c363
|-
| progs/h_wizard.mdl  ||style=text-align:right|  14804 || 4bc6be40128f313cf9ad06c347310735
|-
| progs/h_zombie.mdl  ||style=text-align:right|  4484 || 0fdef7f7cd05a3209e0a163e87f69f8b
|-
| progs/invisibl.mdl  ||style=text-align:right|  7092 || 1e87d86af02e69db9c9f27f5fddc7a47
|-
| progs/invulner.mdl  ||style=text-align:right|  23920 || 8c8d83e4d50c3282d009b333a1280422
|-
| progs/knight.mdl  ||style=text-align:right|  101404 || 5328915db5c53e85cf75d46e7b747fb9
|-
| progs/lavaball.mdl  ||style=text-align:right|  8788 || 92af53d2145681e37877dbc1d12801b2
|-
| progs/m_g_key.mdl  ||style=text-align:right|  12820 || 192c2650a115c91706f6fa8fe68beb45
|-
| progs/missile.mdl  ||style=text-align:right|  57796 || 47f19f9e34954b93443c9759dd2e7ba0
|-
| progs/m_s_key.mdl  ||style=text-align:right|  12820 || 20837376b391cdd5c92e57b84e05687f
|-
| progs/ogre.mdl  ||style=text-align:right|  162036 || fbb592ca3788a576dd2f31fcf8c80fab
|-
| progs/player.mdl  ||style=text-align:right|  191852 || 405cef9a10d96cdabffb5e91312f8e5c
|-
| progs/quaddama.mdl  ||style=text-align:right|  39992 || 00b177ff272a4779097ea08344da8aff
|-
| progs/s_bubble.spr  ||style=text-align:right|  588 || 7c0887630ed468205292d8cb7abcae93
|-
| progs/s_explod.spr  ||style=text-align:right|  18972 || 766c6a92c26b54f68f7ff87c90d71cf2
|-
| progs/shambler.mdl  ||style=text-align:right|  98556 || 9b09375a0f614dc4081e363cc34f1185
|-
| progs/s_light.mdl  ||style=text-align:right|  27596 || ee6649ea5673989f3aa06213a8d65f76
|-
| progs/s_light.spr  ||style=text-align:right|  1080 || aff44ba238f4e1d0d504d6f9700aadb4
|-
| progs/soldier.mdl  ||style=text-align:right|  146288 || 5b6c30a984872b4273dd5861412d35c5
|-
| progs/spike.mdl  ||style=text-align:right|  1684 || be4cb73125f939284376080acc9887dd
|-
| progs/s_spike.mdl  ||style=text-align:right|  1684 || ebb1d58242b64a703623c8a33fcbd9e6
|-
| progs/suit.mdl  ||style=text-align:right|  51236 || 882a61f5eea7f9cdbc04800b963cef85
|-
| progs/v_axe.mdl  ||style=text-align:right|  57908 || 577dadcca2700068995c808dc7dec76f
|-
| progs/v_light.mdl  ||style=text-align:right|  56204 || 68733d4c690de88b5c3ba33e52be1c15
|-
| progs/v_nail2.mdl  ||style=text-align:right|  68732 || aacd1002ab02662cc1d3ff46885b553e
|-
| progs/v_nail.mdl  ||style=text-align:right|  54472 || ec9ba028b346da2f9674c2a521ff0c2f
|-
| progs/v_rock2.mdl  ||style=text-align:right|  58188 || 96edf1a3c7629987c200361523f780d7
|-
| progs/v_rock.mdl  ||style=text-align:right|  58548 || 7bea46b2a75fd7cff2fb99420e4c4e25
|-
| progs/v_shot2.mdl  ||style=text-align:right|  50816 || 922b3b687766ae0d7aeb73d44dec7035
|-
| progs/v_shot.mdl  ||style=text-align:right|  43852 || 1fd140b6856843e83cd9bf3966f5d7dd
|-
| progs/w_g_key.mdl  ||style=text-align:right|  7252 || c5c5f0d14b022f57294ad9aded318250
|-
| progs/wizard.mdl  ||style=text-align:right|  64472 || bf60986594f045e60e8aa6339d553ee7
|-
| progs/w_s_key.mdl  ||style=text-align:right|  7252 || ec02314a7d12439d36b4eb2dd0a641a8
|-
| progs/w_spike.mdl  ||style=text-align:right|  14336 || 8cf9245df2164e8062b01a220b508d6b
|-
| progs/zombie.mdl  ||style=text-align:right|  186084 || a923b1d03b9d237dd5ead9bd56acc900
|-
| progs/zom_gib.mdl  ||style=text-align:right|  10196 || cf42c938caa5b19f719d1f110b1dc6d4
|-
| quake.rc  ||style=text-align:right|  293 || 411d42958aaeae141813f9ebfcf5233f
|-
| sound/ambience/buzz1.wav  ||style=text-align:right|  36308 || 346a00c795c6f1f1338ade6fc350b3fe
|-
| sound/ambience/comp1.wav  ||style=text-align:right|  62734 || f91a1120de804f7cd4dbba4f12c748e9
|-
| sound/ambience/drip1.wav  ||style=text-align:right|  137736 || 2306a76162eeda3d0812c516bc99aa7a
|-
| sound/ambience/drone6.wav  ||style=text-align:right|  18522 || 322853ddb42ad2a205579b5cca8e2e8c
|-
| sound/ambience/fire1.wav  ||style=text-align:right|  24064 || 610d3985ed8133988e8de3bec2b9cbbe
|-
| sound/ambience/fl_hum1.wav  ||style=text-align:right|  50154 || e4628499702e004c4bacd282a3ecb8c0
|-
| sound/ambience/hum1.wav  ||style=text-align:right|  40166 || 486bfa737c35b0c9dda57cbee2a540af
|-
| sound/ambience/suck1.wav  ||style=text-align:right|  110392 || 2e99e4d1fe1501d5191c8157d3063cb6
|-
| sound/ambience/swamp1.wav  ||style=text-align:right|  68524 || 29ffb678d78997eb6c227677c86ea4f8
|-
| sound/ambience/swamp2.wav  ||style=text-align:right|  68526 || 356aa1e875da846e72d8f17bbb699a5b
|-
| sound/ambience/thunder1.wav  ||style=text-align:right|  41492 || cefd6ced4b5bc79fcece1003238566f6
|-
| sound/ambience/water1.wav  ||style=text-align:right|  55784 || 6eeaae0a3450652d2be0782895297ee4
|-
| sound/ambience/wind2.wav  ||style=text-align:right|  28610 || 030cf8dd2b00a12454b5b35a89d03914
|-
| sound/ambience/windfly.wav  ||style=text-align:right|  22140 || c7be01e6d324e66883f70aa0072a99b0
|-
| sound/boss1/death.wav  ||style=text-align:right|  27600 || 43469b1acd35b67107da5da82e1df911
|-
| sound/boss1/out1.wav  ||style=text-align:right|  50344 || 847a6f971f6905dfaffd70b30d18a4b1
|-
| sound/boss1/pain.wav  ||style=text-align:right|  17700 || 49112740c0ff421f9272b9e8efc748cd
|-
| sound/boss1/sight1.wav  ||style=text-align:right|  24768 || 427dd600e6b28c9402212adcc5d652c7
|-
| sound/boss1/throw.wav  ||style=text-align:right|  11526 || 9b6e9ff2c8df448f7fd4b5315e60ddda
|-
| sound/buttons/airbut1.wav  ||style=text-align:right|  10672 || 9d2e14e7176842a0dce909a43d38873d
|-
| sound/buttons/switch02.wav  ||style=text-align:right|  3746 || d2e9cba3a353edc65115f6f5c574403c
|-
| sound/buttons/switch04.wav  ||style=text-align:right|  3666 || ff47857a58d3faefb2b94a37d7ba4f26
|-
| sound/buttons/switch21.wav  ||style=text-align:right|  6318 || 3605b0d061a9baf185c6ab7614534531
|-
| sound/demon/ddeath.wav  ||style=text-align:right|  9140 || 62a48dcd405ca55c9ce18497e36faa0e
|-
| sound/demon/dhit2.wav  ||style=text-align:right|  7142 || 9e741696e4d0d66e30e718fc70ec186e
|-
| sound/demon/djump.wav  ||style=text-align:right|  8494 || 791ac9d6b6593808316145443cb7e7a0
|-
| sound/demon/dland2.wav  ||style=text-align:right|  4400 || db14c7b01838f826b7a712075f9026fd
|-
| sound/demon/dpain1.wav  ||style=text-align:right|  6282 || 5e6c485878393c9bebb0d0e6659bc479
|-
| sound/demon/idle1.wav  ||style=text-align:right|  9098 || 7a83f8caf3d5b1172a7dc5afdc942988
|-
| sound/demon/sight2.wav  ||style=text-align:right|  8804 || 65171c355c22a5069520b0881677ae3c
|-
| sound/dog/dattack1.wav  ||style=text-align:right|  8154 || 0c47c9d4aaae0bf3159a288b674f4a35
|-
| sound/dog/ddeath.wav  ||style=text-align:right|  14912 || b0e7760b1d7286a028ff9773f6802958
|-
| sound/dog/dpain1.wav  ||style=text-align:right|  7240 || 28e5ab93b41e13e2916433283a5d1a46
|-
| sound/dog/dsight.wav  ||style=text-align:right|  6722 || 0edc290765bac1fb4fe03ca55bc7c225
|-
| sound/dog/idle.wav  ||style=text-align:right|  6870 || 42bd6026ff32bd94523ad9f8fe8362cc
|-
| sound/doors/airdoor1.wav  ||style=text-align:right|  13654 || 9b91930e8c2fdece31a2362296891122
|-
| sound/doors/airdoor2.wav  ||style=text-align:right|  8594 || 29fd823d1c14ca42a9a89c716b26f4cd
|-
| sound/doors/basesec1.wav  ||style=text-align:right|  13930 || eb2363fed42724f55e8f55f96c335bcf
|-
| sound/doors/basesec2.wav  ||style=text-align:right|  10238 || 8d163a56607c9cf64a270a156c1c5cef
|-
| sound/doors/basetry.wav  ||style=text-align:right|  10518 || a5108d5c51281ab55c0baf884cbe8cbe
|-
| sound/doors/baseuse.wav  ||style=text-align:right|  16486 || f43fee91efe813a5eb34e9d72918fdb9
|-
| sound/doors/ddoor1.wav  ||style=text-align:right|  7738 || dff86a26139cdd49a193d5ed7ebf6ae1
|-
| sound/doors/ddoor2.wav  ||style=text-align:right|  5904 || 4a9d0b0825d0302ce465569d1e35fbcf
|-
| sound/doors/doormv1.wav  ||style=text-align:right|  14036 || 3fd379aec80a2ad8105c0c89ba5b40e6
|-
| sound/doors/drclos4.wav  ||style=text-align:right|  12814 || 83df1865a0c9fa5d02c2f137564c57de
|-
| sound/doors/hydro1.wav  ||style=text-align:right|  11094 || b1703980a20e624bc3366ccf55ca617e
|-
| sound/doors/hydro2.wav  ||style=text-align:right|  10700 || b1866f5b3950788ccf4206444ab64bc7
|-
| sound/doors/latch2.wav  ||style=text-align:right|  7338 || ad2378ca21a0ca529df328261e07aed5
|-
| sound/doors/medtry.wav  ||style=text-align:right|  7828 || ebb536bec2cdfd22c25b35793c055339
|-
| sound/doors/meduse.wav  ||style=text-align:right|  10718 || 4522aada194b23eb33b541cbcc755cf6
|-
| sound/doors/runetry.wav  ||style=text-align:right|  13524 || c433bae9e2ab508712f87dc2cacc82c8
|-
| sound/doors/runeuse.wav  ||style=text-align:right|  17364 || b4bcfd525a26f5b5ecc9d392430d9079
|-
| sound/doors/stndr1.wav  ||style=text-align:right|  12620 || 5bae2183885e18d65d69624e85249fd9
|-
| sound/doors/stndr2.wav  ||style=text-align:right|  11470 || f43a75c917effff09ef7be8a321c8b49
|-
| sound/doors/winch2.wav  ||style=text-align:right|  14872 || a4edffdfede7dbaed37db526c26e2b6d
|-
| sound/hknight/hit.wav  ||style=text-align:right|  6260 || fece24e2548f1d769e8fce39a5c87d01
|-
| sound/items/armor1.wav  ||style=text-align:right|  7714 || 186d29f2baf35b8c280bc97754606fad
|-
| sound/items/damage2.wav  ||style=text-align:right|  33012 || 14e53b7617ffe315a7c3f8d89652e51c
|-
| sound/items/damage3.wav  ||style=text-align:right|  12894 || baf754aec7ed4baba16760ac85513184
|-
| sound/items/damage.wav  ||style=text-align:right|  23374 || 8cde8b9278ca4922a4ec7ead6e5ee01b
|-
| sound/items/health1.wav  ||style=text-align:right|  7958 || 52a2c4f808db4edd8393de0de618c91f
|-
| sound/items/inv1.wav  ||style=text-align:right|  13728 || 5850cab55d6197d0e76d9f0a22ba10be
|-
| sound/items/inv2.wav  ||style=text-align:right|  33216 || 4edcd38a2c6adc5305636dd7afd5ef60
|-
| sound/items/inv3.wav  ||style=text-align:right|  33320 || 325c268be05b42a019ccb92e6993ab9e
|-
| sound/items/itembk2.wav  ||style=text-align:right|  9910 || 270c688b3cb884f5d4e5ffd8ccc934a1
|-
| sound/items/protect2.wav  ||style=text-align:right|  34012 || 25627a4bd2b4c6054cfd2fc4bf69ddc2
|-
| sound/items/protect3.wav  ||style=text-align:right|  23364 || 7b9374d67f6d59e524bba2af236ca30a
|-
| sound/items/protect.wav  ||style=text-align:right|  22536 || d839d5a84f811ce8a0e28616891bf1a7
|-
| sound/items/r_item1.wav  ||style=text-align:right|  6822 || 3fc0d0ae4a71c9fbfe548f38626c6a08
|-
| sound/items/r_item2.wav  ||style=text-align:right|  7448 || 384ffefe795d99df75f381596a0f1976
|-
| sound/items/suit2.wav  ||style=text-align:right|  33254 || 0a9d2766a5b805cb5794f9bea57e6585
|-
| sound/items/suit.wav  ||style=text-align:right|  15854 || da413f34023d219f1e34fde50a037be0
|-
| sound/knight/idle.wav  ||style=text-align:right|  11064 || 1b5c3981bee078318af346d8fe8090b9
|-
| sound/knight/kdeath.wav  ||style=text-align:right|  10688 || 11a96f48a8f2433c23beae299c8fb96e
|-
| sound/knight/khurt.wav  ||style=text-align:right|  5586 || 32c9f48dd4a6a87752aedf56fe8de668
|-
| sound/knight/ksight.wav  ||style=text-align:right|  13514 || eb75b4af348c88e84d8c87c19d5976fa
|-
| sound/knight/sword1.wav  ||style=text-align:right|  2306 || 93045b5f3178413dc6b01ec2869d1f73
|-
| sound/knight/sword2.wav  ||style=text-align:right|  2784 || 82d1a7c263cd3df7b060dee2f7f8b1fd
|-
| sound/misc/h2ohit1.wav  ||style=text-align:right|  12972 || 49ecb03f4f10862453656a67598f8b8a
|-
| sound/misc/medkey.wav  ||style=text-align:right|  10020 || 0e3ae5626a47d81e4166539e355e31bb
|-
| sound/misc/menu1.wav  ||style=text-align:right|  5738 || 12c36546601c385bc47c9ca9420b7eee
|-
| sound/misc/menu2.wav  ||style=text-align:right|  10672 || 39b01ea6feb3ec8dbd6d8ee3e5e966c4
|-
| sound/misc/menu3.wav  ||style=text-align:right|  3010 || 4a03dc2fd56831b855dab761eac4f7de
|-
| sound/misc/null.wav  ||style=text-align:right|  1244 || 811989e09124f54cb27fe6154b0f1018
|-
| sound/misc/outwater.wav  ||style=text-align:right|  5018 || 35732412412ddb5ed418633bb0123bbe
|-
| sound/misc/power.wav  ||style=text-align:right|  19832 || 9f2c3a18d9fc8d9cecfac6db3aad6bc6
|-
| sound/misc/r_tele1.wav  ||style=text-align:right|  8036 || c2194171b4c446e136ed7514fbb098a5
|-
| sound/misc/r_tele2.wav  ||style=text-align:right|  17324 || 0ce662ac90fb3658d69320d1be4025c1
|-
| sound/misc/r_tele3.wav  ||style=text-align:right|  18016 || 122ef44813edcfe7391578fd29e729d2
|-
| sound/misc/r_tele4.wav  ||style=text-align:right|  9068 || 0097b5747ccc70d5b12fc6838aff02c2
|-
| sound/misc/r_tele5.wav  ||style=text-align:right|  22042 || a82334cbb66d12f28cce9e71c90ea50b
|-
| sound/misc/runekey.wav  ||style=text-align:right|  14578 || 6b21a2e5878011da50fdee0a301d3e34
|-
| sound/misc/secret.wav  ||style=text-align:right|  6610 || a02ceefcc24b1ebf5c164a1e1acfb05f
|-
| sound/misc/talk.wav  ||style=text-align:right|  1810 || d5b25d4df59d92ac5016e88689ea60c1
|-
| sound/misc/trigger1.wav  ||style=text-align:right|  20230 || dc927c8a1d0a9bd59fbc5dd91ae1d812
|-
| sound/misc/water1.wav  ||style=text-align:right|  3926 || d8291c762acb1edf24927fdcc0f6a6cd
|-
| sound/misc/water2.wav  ||style=text-align:right|  3340 || 049e8e7e7b30d4d8038afb7248bdd977
|-
| sound/ogre/ogdrag.wav  ||style=text-align:right|  12396 || 658587dc89aaefae5ca3f058f7ff4227
|-
| sound/ogre/ogdth.wav  ||style=text-align:right|  13892 || de98e7bb9e70586edddd3308cfded3db
|-
| sound/ogre/ogidle2.wav  ||style=text-align:right|  11254 || 196ae9c33a4311160e1d5f3da878ab09
|-
| sound/ogre/ogidle.wav  ||style=text-align:right|  12894 || 177c829840a87c885bbc8951e7ce962e
|-
| sound/ogre/ogpain1.wav  ||style=text-align:right|  7898 || ac6d133d7720c12df49813fe10e683b5
|-
| sound/ogre/ogsawatk.wav  ||style=text-align:right|  16154 || 7257bdfd014bb61d778b8f88cb65d560
|-
| sound/ogre/ogwake.wav  ||style=text-align:right|  19356 || 3296459e495c4c12b31179d4eeffac19
|-
| sound/plats/medplat1.wav  ||style=text-align:right|  16378 || b73215aa6627c8b5b90fce8d260d48d0
|-
| sound/plats/medplat2.wav  ||style=text-align:right|  7338 || 1fc6c3772917a1a8155d04fa52e17005
|-
| sound/plats/plat1.wav  ||style=text-align:right|  20248 || 5d43ed85d896ba926f459e06ba6635d5
|-
| sound/plats/plat2.wav  ||style=text-align:right|  7338 || 49d7ab0fd726cd652eb6e5756fce61b9
|-
| sound/plats/train1.wav  ||style=text-align:right|  21430 || b589ae8262046361d9dca39d6b8f693a
|-
| sound/plats/train2.wav  ||style=text-align:right|  5870 || 640017e1b870d643e3bca29d499c72ee
|-
| sound/player/axhit1.wav  ||style=text-align:right|  6906 || 149b2371334da318386325182924eaca
|-
| sound/player/axhit2.wav  ||style=text-align:right|  2434 || fc01909318455f5310efa2457a370897
|-
| sound/player/death1.wav  ||style=text-align:right|  10170 || ba005f5488d4ee78dabf613a03f33a5f
|-
| sound/player/death2.wav  ||style=text-align:right|  8026 || 20477d2e7c84aac1bef95d32c9c702dd
|-
| sound/player/death3.wav  ||style=text-align:right|  10918 || 7b206ba8e1fa28d8605b50e3f3200f11
|-
| sound/player/death4.wav  ||style=text-align:right|  14126 || 1b0f27f4d41b748d3cc5c3d56bd917f8
|-
| sound/player/death5.wav  ||style=text-align:right|  14946 || 7efe84195cfa97515aad2d7f96f25346
|-
| sound/player/drown1.wav  ||style=text-align:right|  8908 || 732f0416af6990e028110380bcb36f0d
|-
| sound/player/drown2.wav  ||style=text-align:right|  3114 || 29ee1f287879acce29b15d4722668bc2
|-
| sound/player/gasp1.wav  ||style=text-align:right|  8702 || b06cbc370c8c2c163dc4d487e8b673c7
|-
| sound/player/gasp2.wav  ||style=text-align:right|  13134 || 30aece9d8779764620c7f866bfb06edb
|-
| sound/player/gib.wav  ||style=text-align:right|  14424 || 26fa9942078125388f34b71546615068
|-
| sound/player/h2odeath.wav  ||style=text-align:right|  18104 || 73b0f4dfae07f6e49112cadfe202735c
|-
| sound/player/h2ojump.wav  ||style=text-align:right|  11438 || cd421b96410971bb1a4f21d3936a3805
|-
| sound/player/inh2o.wav  ||style=text-align:right|  11340 || d4c1a27c4d07e8dfdf18a4b1a880c610
|-
| sound/player/inlava.wav  ||style=text-align:right|  10958 || c37875a082900716b7af88d2d990f55c
|-
| sound/player/land2.wav  ||style=text-align:right|  6204 || 6ba534256a779d66d9d9dabb90e63c8b
|-
| sound/player/land.wav  ||style=text-align:right|  2434 || e34328a40358d98f0f95403b9e27ec1e
|-
| sound/player/lburn1.wav  ||style=text-align:right|  6682 || 3c447c72385defe97c060771077d8ba0
|-
| sound/player/lburn2.wav  ||style=text-align:right|  6076 || 6849ee8dbd91ec82ece016fbd39b0a5c
|-
| sound/player/pain1.wav  ||style=text-align:right|  3394 || d7ac9df7540b791f952ca2a681c0265b
|-
| sound/player/pain2.wav  ||style=text-align:right|  2710 || 513e054b64d4fb61f31384d59e123020
|-
| sound/player/pain3.wav  ||style=text-align:right|  4854 || aafc61ad4e16cc5cdd2db2100796b494
|-
| sound/player/pain4.wav  ||style=text-align:right|  4840 || f655ef2045bc55473303b27546aa6fc0
|-
| sound/player/pain5.wav  ||style=text-align:right|  8020 || f8551a73cb89396042687baa8c68b5c2
|-
| sound/player/pain6.wav  ||style=text-align:right|  5462 || 70062eabf96288d307280fb601ce0ee2
|-
| sound/player/plyrjmp8.wav  ||style=text-align:right|  3888 || d4a552d8f627c7f3b933568c4a74c913
|-
| sound/player/slimbrn2.wav  ||style=text-align:right|  12468 || b17c18a9f81a952f2d41f65b5180f210
|-
| sound/player/teledth1.wav  ||style=text-align:right|  14414 || c226c7f041187ba058d8112cc0190b56
|-
| sound/player/tornoff2.wav  ||style=text-align:right|  7726 || 03ec1c805b307b8fe4c4052f8332a5e5
|-
| sound/player/udeath.wav  ||style=text-align:right|  16082 || afe674f287efb6197da2cea0c0b1d2f8
|-
| sound/shambler/melee1.wav  ||style=text-align:right|  4718 || 77fe6240973a204b757a427ebf66bcfd
|-
| sound/shambler/melee2.wav  ||style=text-align:right|  5966 || 3be31638d769e3d690c92311dfafdeac
|-
| sound/shambler/sattck1.wav  ||style=text-align:right|  8036 || ec8c3f79ea42d09154cb8975ada1b21c
|-
| sound/shambler/sboom.wav  ||style=text-align:right|  11672 || 9834601a645d7d1f62001b2a314ec18f
|-
| sound/shambler/sdeath.wav  ||style=text-align:right|  21106 || e0e62d229a985a6e39218c6488599059
|-
| sound/shambler/shurt2.wav  ||style=text-align:right|  4302 || 1e87631ede95e061a75f9c31629ac0b8
|-
| sound/shambler/sidle.wav  ||style=text-align:right|  5646 || 368a240e6c3e877793352a79c1828386
|-
| sound/shambler/smack.wav  ||style=text-align:right|  5300 || bd8c634c9894348360fec7b7419d1649
|-
| sound/shambler/ssight.wav  ||style=text-align:right|  15420 || 657107577460d5acf3157dec97e07a89
|-
| sound/soldier/death1.wav  ||style=text-align:right|  8434 || fe25952af40b536c3bb67bfca58062eb
|-
| sound/soldier/idle.wav  ||style=text-align:right|  9802 || 4cdfbdda8fb5f40b125c7bcddb6e8914
|-
| sound/soldier/pain1.wav  ||style=text-align:right|  5000 || 54d3b05fdcecf7480034858f2b22b06c
|-
| sound/soldier/pain2.wav  ||style=text-align:right|  7838 || e2bbc9d3405b9b9fdae76d2fc298fc2f
|-
| sound/soldier/sattck1.wav  ||style=text-align:right|  14302 || b76ac35f900f280a7a7996da7e404362
|-
| sound/soldier/sight1.wav  ||style=text-align:right|  12716 || e2a39533250ddd1b08053d5c4ebf7fd0
|-
| sound/weapons/ax1.wav  ||style=text-align:right|  3308 || 237d4d819d02ad37849a8a895cc410e1
|-
| sound/weapons/bounce.wav  ||style=text-align:right|  5864 || fced668c6558a9505abf5014d60528a6
|-
| sound/weapons/grenade.wav  ||style=text-align:right|  8364 || d2b6fa131933f203eba2a282276e88df
|-
| sound/weapons/guncock.wav  ||style=text-align:right|  14430 || 6a63452167cc106e756518536446844f
|-
| sound/weapons/lhit.wav  ||style=text-align:right|  26028 || fefd021d0bd35a1f8da8870f1c06abb9
|-
| sound/weapons/lock4.wav  ||style=text-align:right|  3876 || 3fd93222258d5b1500b150f021c94519
|-
| sound/weapons/lstart.wav  ||style=text-align:right|  56378 || abe1abf6dcadcda5930b0684c7ea820a
|-
| sound/weapons/pkup.wav  ||style=text-align:right|  5174 || 0aa6f0a7d609e1a56fd535a06d1bb56e
|-
| sound/weapons/r_exp3.wav  ||style=text-align:right|  17478 || 57db026474fc76ba7f38cea24eaaf8cf
|-
| sound/weapons/ric1.wav  ||style=text-align:right|  4308 || a31166b4bbb4509ac3004a01f7477ee9
|-
| sound/weapons/ric2.wav  ||style=text-align:right|  10838 || a180b447c0527e603cea54a9aefd6139
|-
| sound/weapons/ric3.wav  ||style=text-align:right|  12638 || 8a773bbb585540ddce256151162f3a2c
|-
| sound/weapons/rocket1i.wav  ||style=text-align:right|  9660 || fb4fdf345d805cf6980c4c695974effc
|-
| sound/weapons/sgun1.wav  ||style=text-align:right|  22992 || 95a14815e48deb323d0cf8251d728ac7
|-
| sound/weapons/shotgn2.wav  ||style=text-align:right|  8694 || cb561cefbf472232334b419af050e5a0
|-
| sound/weapons/spike2.wav  ||style=text-align:right|  12642 || 9189d811855f108da4a1e2d34dc7c633
|-
| sound/weapons/tink1.wav  ||style=text-align:right|  1252 || 297ba8706625fcf05887edb393e9a441
|-
| sound/wizard/hit.wav  ||style=text-align:right|  7332 || 6598d669334df977f1f97b95288edf11
|-
| sound/wizard/wattack.wav  ||style=text-align:right|  25912 || b3568a47439f81779d40335e76f5bc2d
|-
| sound/wizard/wdeath.wav  ||style=text-align:right|  20684 || 99d9c71343bc23222abb92119d404400
|-
| sound/wizard/widle1.wav  ||style=text-align:right|  13464 || b22b1dd9f66879b3447d36ab584316c7
|-
| sound/wizard/widle2.wav  ||style=text-align:right|  23094 || 7178fd83df227360564adef01bed92c6
|-
| sound/wizard/wpain.wav  ||style=text-align:right|  8686 || bd7e59ab7d7b835f9ed8ab51950914de
|-
| sound/wizard/wsight.wav  ||style=text-align:right|  13078 || df5949057c750528917c6cb32b7fd9fd
|-
| sound/zombie/idle_w2.wav  ||style=text-align:right|  17192 || d2bb59b9d7ac71097c07123a23525641
|-
| sound/zombie/z_fall.wav  ||style=text-align:right|  3062 || 6968318b2d196c6d54bc707d8a390547
|-
| sound/zombie/z_gib.wav  ||style=text-align:right|  16226 || 199dda66ade8d6f0ef4897e4d7608c0d
|-
| sound/zombie/z_hit.wav  ||style=text-align:right|  6166 || 6c66ab3e6b149bf35956a4bbc0057acb
|-
| sound/zombie/z_idle1.wav  ||style=text-align:right|  13244 || 21088a7b38b1124d7ec72e58d5ab93a6
|-
| sound/zombie/z_idle.wav  ||style=text-align:right|  16734 || e5e570e38c4405111004190a79f0e925
|-
| sound/zombie/z_miss.wav  ||style=text-align:right|  10734 || 96fad96a8c3bc6f7bcc5da6c82678da2
|-
| sound/zombie/z_pain1.wav  ||style=text-align:right|  15374 || fcd83b89a94b0cadbe1361a4df080ec0
|-
| sound/zombie/z_pain.wav  ||style=text-align:right|  12218 || 56637968b8309bd2f825153330bbdfc0
|-
| sound/zombie/z_shot1.wav  ||style=text-align:right|  3068 || 561afb69b7851923a8fb3b54e3e13c96
|-
|}&lt;/tt&gt;

{{todo|todo=Multiple to do items listed above, detail out the contents of various pak files}}
{{todo|todo=different releases have different pak0.pak files}}</text>
      <sha1>ma74kn96nxxrw9irn7udhsngot8r9xd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3269</id>
      <parentid>3268</parentid>
      <timestamp>2014-09-24T17:24:59Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>/* 5906e5998fc3d896ddaf5e6a62e03abb */</comment>
      <text xml:space="preserve" bytes="66927">The '''''pak0.pak''''' file that comes with Quake is required by all Quake [[engines]]. It contains the maps, models, programs, sounds, and skins required to play Quake Episode 1, ''Dimension of the Doomed''. It is expected to be in the ID1 subfolder of the Quake root folder.

[[PAK file]]s are typically named ''pak0.pak'', ''pak1.pak'', ''pak2.pak'', and so on. Quake mission packs and other Quake-based games often have their own ''pak0.pak'' files, which live in a different folder, not the ID1 folder.

The ID1 ''pak0.pak'' is distributed with both the shareware and the registered/commercial editions of Quake.

In some editions, including the downloadable shareware (''quake106.zip'') from id Software, ''pak0.pak'' is embedded in another archive, ''[[resource.1]]''. The files in this archive are LZH-encoded using the lh5 algorithm. If you can't or don't want to run the DOS/Win32 Quake installer program it comes with, then you'll need a compatible extractor program to get ''pak0.pak'' out of the ''resource.1'' archive.


== Versions ==
&lt;tt&gt;
{| class=&quot;wikitable&quot;
! Version !! Timestamp !! Size !! md5
|-
| Registered Version 1.01 (as well as Shareware Version 1.01 on that [https://www.quaddicted.com/library/quake_registered_1.01_id disc]) || Unknown ||style=text-align:right|  18276119 || fc989b37572fae074e8ffda0ce4d5297
|-
| Shareware Version 1.01 ([https://www.quaddicted.com/library/quake_episode_1_shareware Shareware disc]) || Unknown ||style=text-align:right|  18276119 || 85fc9cee2035b66290da1e33be2ac86b
|-
| Registered Version 1.06 || 1996-10-01 14:25:58 ||style=text-align:right|  18689235 || 5906e5998fc3d896ddaf5e6a62e03abb
|-
|}&lt;/tt&gt;

=== fc989b37572fae074e8ffda0ce4d5297 ===
The [[id1]] ''pak0.pak'' with the md5sum fc989b37572fae074e8ffda0ce4d5297 contains the following folders &amp; files:
&lt;tt&gt;
{| class=&quot;wikitable collapsible collapsed&quot;
|-
! Path !! Size !! md5
|-
| default.cfg  ||style=text-align:right|  1914 || fc989b37572fae074e8ffda0ce4d5297
|-
| demo1.dem  ||style=text-align:right|  184471 || 85ec0141ab24d9732e487d1aafa791f0
|-
| demo2.dem  ||style=text-align:right|  152705 || fa5c3daf7a57954cd95f94b698a7e420
|-
| demo3.dem  ||style=text-align:right|  197679 || 691f37e5715ea2863c1d8092a6429824
|-
| end1.bin  ||style=text-align:right|  4000 || 92ae51961ec2f429dfe9bea1138fbd5d
|-
| gfx/bigbox.lmp  ||style=text-align:right|  5192 || e597771ac6149b2b071ebfd24981ea04
|-
| gfx/box_bl.lmp  ||style=text-align:right|  72 || 5b094c37c2c1c2eebe37f84117dea182
|-
| gfx/box_bm.lmp  ||style=text-align:right|  136 || 44621236738e2bf8d669e53dca887278
|-
| gfx/box_br.lmp  ||style=text-align:right|  72 || 86597d5325b472caf5644644033e5cab
|-
| gfx/box_ml.lmp  ||style=text-align:right|  72 || adcea286ba0ac01084fd0c131b16ffdd
|-
| gfx/box_mm2.lmp  ||style=text-align:right|  136 || b850bcec189d909e7a0f796111a11249
|-
| gfx/box_mm.lmp  ||style=text-align:right|  136 || 700b4884b1a3c6aa7356a43014261866
|-
| gfx/box_mr.lmp  ||style=text-align:right|  72 || e30d9ea783ef7dd50101682f03ba40d7
|-
| gfx/box_tl.lmp  ||style=text-align:right|  72 || 3903d3d814e37c55790ac0ccfef2b925
|-
| gfx/box_tm.lmp  ||style=text-align:right|  136 || 7cb85ccbf8e7d2532da2a839a7cef348
|-
| gfx/box_tr.lmp  ||style=text-align:right|  72 || 5c5e72746af821a4cf8437d8fecc53c7
|-
| gfx/colormap.lmp  ||style=text-align:right|  16385 || 0d793b70bffafbd666fc5c88d6e15e9d
|-
| gfx/complete.lmp  ||style=text-align:right|  4616 || db6a00dfbe2c62a43c261e5622297c4a
|-
| gfx/conback.lmp  ||style=text-align:right|  64008 || 9eb6f9c47870bf42985d9382958a5c12
|-
| gfx/dim_drct.lmp  ||style=text-align:right|  3352 || 50ea11fe8c4d9db92863bdcd03b89df5
|-
| gfx/dim_ipx.lmp  ||style=text-align:right|  3352 || 0bef9943487f0611225bf0a5c0fe5dd4
|-
| gfx/dim_modm.lmp  ||style=text-align:right|  3352 || 3288f03144f06b95cadafa9458a77b1d
|-
| gfx/dim_mult.lmp  ||style=text-align:right|  3352 || 348b7369227f2d7e9d0daccbf6c9344d
|-
| gfx/dim_tcp.lmp  ||style=text-align:right|  3352 || 7dc8bbb01d7c90cd51c28da0ff6ed900
|-
| gfx/finale.lmp  ||style=text-align:right|  6920 || b6e49409d344e0344273d86ea33fe35f
|-
| gfx/help0.lmp  ||style=text-align:right|  64008 || b392ac30ad49252b51ec934ed855c20f
|-
| gfx/help1.lmp  ||style=text-align:right|  64008 || 857543c69245117a606044ea63adac9a
|-
| gfx/help2.lmp  ||style=text-align:right|  64008 || 882dd5920ea9c19f637f32084de9788a
|-
| gfx/help3.lmp  ||style=text-align:right|  64008 || a89d169524920d896128009467deebfc
|-
| gfx/help4.lmp  ||style=text-align:right|  64008 || c72d67c84ae6b403fae5f08d3e5c3bc6
|-
| gfx/help5.lmp  ||style=text-align:right|  64008 || 12203d7cdec35c4f51622dd90ec92093
|-
| gfx/inter.lmp  ||style=text-align:right|  23048 || f6eabe0d742380c7b47a9ee44170993d
|-
| gfx/loading.lmp  ||style=text-align:right|  3464 || 3249bc994266529a1748c06bfbb24bfa
|-
| gfx/mainmenu.lmp  ||style=text-align:right|  26888 || 8122e2a0b8888f9d1ebef149551b6434
|-
| gfx/menudot1.lmp  ||style=text-align:right|  392 || bfdb08d84d580abcfbacc1c9abd62bfb
|-
| gfx/menudot2.lmp  ||style=text-align:right|  392 || 6c6d2176e00edbe530bb1db118aaa6dc
|-
| gfx/menudot3.lmp  ||style=text-align:right|  392 || 2527a05f6162efb3e4bc5311d9e010d5
|-
| gfx/menudot4.lmp  ||style=text-align:right|  392 || 90ea6be033b39b139b3779932d266f33
|-
| gfx/menudot5.lmp  ||style=text-align:right|  392 || c9beb9600c35e458d0f83b6cf1e1c692
|-
| gfx/menudot6.lmp  ||style=text-align:right|  392 || 31b9a6ec1d12a2bd56b955185a9e72d3
|-
| gfx/menuplyr.lmp  ||style=text-align:right|  2696 || 9eebe617ff51c4ce43f85ca1a6920d5b
|-
| gfx/mp_menu.lmp  ||style=text-align:right|  14856 || c6416b8f7f5262a5a19b9ce4be1fd9ce
|-
| gfx/netmen1.lmp  ||style=text-align:right|  3352 || 5bc6a8d8cfdfd7e940e933812954367a
|-
| gfx/netmen2.lmp  ||style=text-align:right|  3352 || c8aafb649a653e90fc5eb7b7a2b3ca2e
|-
| gfx/netmen3.lmp  ||style=text-align:right|  3352 || 11c9372d0e64057a1ec8251f596b820d
|-
| gfx/netmen4.lmp  ||style=text-align:right|  3352 || 74ec672b1312699be2eeaf25a68e4582
|-
| gfx/netmen5.lmp  ||style=text-align:right|  3352 || 231f8a9ea4ba364f517db0e9f7f1ba72
|-
| gfx/palette.lmp  ||style=text-align:right|  768 || 79bc149d4f2fb0bd68cd8400a3fd87d4
|-
| gfx/pause.lmp  ||style=text-align:right|  3080 || 5aa67f927719e4a9eb3e020e75fea969
|-
| gfx/p_load.lmp  ||style=text-align:right|  2504 || 27fe08071058385529b0b8ad746421e7
|-
| gfx/p_multi.lmp  ||style=text-align:right|  5192 || 5a307c7d11da20a4772ad9c00b9f4309
|-
| gfx/p_option.lmp  ||style=text-align:right|  3464 || 83a3bf4459bce3fe85857a0aa647b90a
|-
| gfx/p_save.lmp  ||style=text-align:right|  2120 || 0d2bb5fa5524e0180a85bf273094cd1f
|-
| gfx/qplaque.lmp  ||style=text-align:right|  4616 || f4de79557c75e26b85ea84fb6029a5f3
|-
| gfx/ranking.lmp  ||style=text-align:right|  4040 || 919b13d1f7fdd0082ec0f94699f3b681
|-
| gfx/sell.lmp  ||style=text-align:right|  64008 || 878db3866e8b38c5b8d951aef516358c
|-
| gfx/sp_menu.lmp  ||style=text-align:right|  14856 || f624aa79778970ecb8ef518b5ab435f6
|-
| gfx/ttl_cstm.lmp  ||style=text-align:right|  4424 || 4ee84e0e7fa93f0e93d26efb1e726a4d
|-
| gfx/ttl_main.lmp  ||style=text-align:right|  2312 || 07e1c8e189e2463befcfc44f5ecf8dcb
|-
| gfx/ttl_sgl.lmp  ||style=text-align:right|  3080 || 25d5360228da738f091063eaeb7c6aa8
|-
| gfx/vidmodes.lmp  ||style=text-align:right|  5192 || 18a97f403057777f262188903f485fe8
|-
| gfx.wad  ||style=text-align:right|  112828 || cde5b5890c8902c02a2f271abe8f4a1f
|-
| maps/b_batt0.bsp  ||style=text-align:right|  5044 || 00bc989f4c8d2570a2826a63c7356a27
|-
| maps/b_batt1.bsp  ||style=text-align:right|  4620 || 555bc0cb0b5c2ad2ed0110f307e70679
|-
| maps/b_bh100.bsp  ||style=text-align:right|  8820 || 62f78bb5143265f037b79ddd077c50ed
|-
| maps/b_bh10.bsp  ||style=text-align:right|  3936 || e80cde9f185612f669fc100f825ca84f
|-
| maps/b_bh25.bsp  ||style=text-align:right|  8872 || 032d70dbf8669b3627b82b41f31488bd
|-
| maps/b_explob.bsp  ||style=text-align:right|  10220 || d8c9db3cfa0264678afc580143f665ea
|-
| maps/b_nail0.bsp  ||style=text-align:right|  5044 || c8d7ec0bdee74e0c1e69e8dbe939117d
|-
| maps/b_nail1.bsp  ||style=text-align:right|  5044 || ea08b2bd6aa19ece0307f75c491e5d24
|-
| maps/b_rock0.bsp  ||style=text-align:right|  2956 || 19ce64cd248a4459bf37b45e6e7c1219
|-
| maps/b_rock1.bsp  ||style=text-align:right|  2944 || b4cdb75094cd7218ed2b0475aefabe80
|-
| maps/b_shell0.bsp  ||style=text-align:right|  5044 || 574824b3c52661959d633a76dc823859
|-
| maps/b_shell1.bsp  ||style=text-align:right|  5044 || dc8b8dcb490e204e615b2b9cdc673296
|-
| maps/e1m1.bsp  ||style=text-align:right|  1365176 || 84cae48010619bcc945426b91bc03ade
|-
| maps/e1m2.bsp  ||style=text-align:right|  1332228 || caff91afbe41f3eac4dda65cee0083c9
|-
| maps/e1m3.bsp  ||style=text-align:right|  1249944 || f20eaa5692e94ab889c4ade9e1c116c7
|-
| maps/e1m4.bsp  ||style=text-align:right|  1411452 || 29419f05ef647f83d0482502bb3f84f8
|-
| maps/e1m5.bsp  ||style=text-align:right|  1324060 || afd98cc890d748986186951b32fc9fcb
|-
| maps/e1m6.bsp  ||style=text-align:right|  1065080 || ec178e54ff68c4d8cf71e26775b2eb2d
|-
| maps/e1m7.bsp  ||style=text-align:right|  607420 || 0c1f55455e0f957291e21d211b689718
|-
| maps/e1m8.bsp  ||style=text-align:right|  924116 || 18c7ab2f922d5d586150afbc27c323a4
|-
| maps/start.bsp  ||style=text-align:right|  1433792 || 61a57bb4ca36368478f02b142d1b5291
|-
| progs/armor.mdl  ||style=text-align:right|  44076 || ca060166d7e4e4686995f05645dde593
|-
| progs/backpack.mdl  ||style=text-align:right|  19348 || 315b4ef42fb035aa3318e8d2d61961ce
|-
| progs/bolt2.mdl  ||style=text-align:right|  11860 || f59ce07cfbe01fcfc578258c573d2c31
|-
| progs/bolt3.mdl  ||style=text-align:right|  11860 || ff87579a424faa59ca2695b7434ea488
|-
| progs/bolt.mdl  ||style=text-align:right|  20644 || a176903954e9d8c7ab629f92784546c2
|-
| progs/boss.mdl  ||style=text-align:right|  211836 || 25da3b2bc30677e32ee3a3a878a4d3af
|-
| progs.dat  ||style=text-align:right|  410616 || cb04964a1952169e03392ee83a9edb91
|-
| progs/demon.mdl  ||style=text-align:right|  102120 || 4c73786e7cfb2083ca38cbc983cd6c4b
|-
| progs/dog.mdl  ||style=text-align:right|  146056 || e727fbc39acc652f812972612ce37565
|-
| progs/end1.mdl  ||style=text-align:right|  20820 || 67c0fcab33d3772c00bb462b0e749275
|-
| progs/eyes.mdl  ||style=text-align:right|  4372 || ed72f64a17c6909b2cb3034a734bca97
|-
| progs/flame2.mdl  ||style=text-align:right|  64572 || f2c8f8950ebd7a0edded6247655d325b
|-
| progs/flame.mdl  ||style=text-align:right|  46364 || 8593c05374d84354d4444c218e86fdb8
|-
| progs/gib1.mdl  ||style=text-align:right|  5716 || f5c5b799e895dc03036522a487e99913
|-
| progs/gib2.mdl  ||style=text-align:right|  16228 || cfa9e97a3542852418123e0bb12e4f86
|-
| progs/gib3.mdl  ||style=text-align:right|  22228 || d73be7b2881e0a5aacf2b332ac29086f
|-
| progs/g_light.mdl  ||style=text-align:right|  50276 || 61bba06ec3804b7f355a62fd4585ad8f
|-
| progs/g_nail2.mdl  ||style=text-align:right|  30720 || ed6d7bb5ff050ad5f2bf4be7739a16a5
|-
| progs/g_nail.mdl  ||style=text-align:right|  34700 || e2959ca741c764dd42025ef531a1b554
|-
| progs/grenade.mdl  ||style=text-align:right|  2244 || f492d6257c216306983a72f41db0d891
|-
| progs/g_rock2.mdl  ||style=text-align:right|  40756 || 68c047c97bab89afe2cb69e65b7c62e1
|-
| progs/g_rock.mdl  ||style=text-align:right|  48244 || 61346f842944795e0821e31e3d61b427
|-
| progs/g_shot.mdl  ||style=text-align:right|  32916 || 7facfec1a3cfb892cce871f398e9cb6b
|-
| progs/h_demon.mdl  ||style=text-align:right|  34884 || 5253a0ea93d9624d73fb984ee339b52f
|-
| progs/h_dog.mdl  ||style=text-align:right|  24436 || a0b5f87522b3a769548c46cf3bb4223e
|-
| progs/h_guard.mdl  ||style=text-align:right|  5428 || 18a629b53b87392030df63b7806eb833
|-
| progs/h_knight.mdl  ||style=text-align:right|  7156 || 46a03fa72b0cdebcf58045aba2fafc13
|-
| progs/h_ogre.mdl  ||style=text-align:right|  14900 || 14eb06611c769e254d0531c05919bdf5
|-
| progs/h_player.mdl  ||style=text-align:right|  14708 || bf1773df7d3e19c5b211a1ee408f6b05
|-
| progs/h_shams.mdl  ||style=text-align:right|  37060 || ff1e04e18c57667991341a011fb6c363
|-
| progs/h_wizard.mdl  ||style=text-align:right|  14804 || 4bc6be40128f313cf9ad06c347310735
|-
| progs/h_zombie.mdl  ||style=text-align:right|  4484 || 0fdef7f7cd05a3209e0a163e87f69f8b
|-
| progs/invisibl.mdl  ||style=text-align:right|  7092 || 1e87d86af02e69db9c9f27f5fddc7a47
|-
| progs/invulner.mdl  ||style=text-align:right|  23920 || 8c8d83e4d50c3282d009b333a1280422
|-
| progs/knight.mdl  ||style=text-align:right|  101404 || 5328915db5c53e85cf75d46e7b747fb9
|-
| progs/lavaball.mdl  ||style=text-align:right|  8788 || 92af53d2145681e37877dbc1d12801b2
|-
| progs/m_g_key.mdl  ||style=text-align:right|  12820 || 192c2650a115c91706f6fa8fe68beb45
|-
| progs/missile.mdl  ||style=text-align:right|  57796 || 47f19f9e34954b93443c9759dd2e7ba0
|-
| progs/m_s_key.mdl  ||style=text-align:right|  12820 || 20837376b391cdd5c92e57b84e05687f
|-
| progs/ogre.mdl  ||style=text-align:right|  162036 || fbb592ca3788a576dd2f31fcf8c80fab
|-
| progs/player.mdl  ||style=text-align:right|  191852 || 405cef9a10d96cdabffb5e91312f8e5c
|-
| progs/quaddama.mdl  ||style=text-align:right|  39992 || 00b177ff272a4779097ea08344da8aff
|-
| progs/s_bubble.spr  ||style=text-align:right|  588 || 7c0887630ed468205292d8cb7abcae93
|-
| progs/s_explod.spr  ||style=text-align:right|  18972 || 766c6a92c26b54f68f7ff87c90d71cf2
|-
| progs/shambler.mdl  ||style=text-align:right|  98556 || 9b09375a0f614dc4081e363cc34f1185
|-
| progs/s_light.mdl  ||style=text-align:right|  27596 || ee6649ea5673989f3aa06213a8d65f76
|-
| progs/s_light.spr  ||style=text-align:right|  1080 || aff44ba238f4e1d0d504d6f9700aadb4
|-
| progs/soldier.mdl  ||style=text-align:right|  146288 || 5b6c30a984872b4273dd5861412d35c5
|-
| progs/spike.mdl  ||style=text-align:right|  1684 || be4cb73125f939284376080acc9887dd
|-
| progs/s_spike.mdl  ||style=text-align:right|  1684 || ebb1d58242b64a703623c8a33fcbd9e6
|-
| progs/suit.mdl  ||style=text-align:right|  51236 || 882a61f5eea7f9cdbc04800b963cef85
|-
| progs/v_axe.mdl  ||style=text-align:right|  57908 || 577dadcca2700068995c808dc7dec76f
|-
| progs/v_light.mdl  ||style=text-align:right|  56204 || 68733d4c690de88b5c3ba33e52be1c15
|-
| progs/v_nail2.mdl  ||style=text-align:right|  68732 || aacd1002ab02662cc1d3ff46885b553e
|-
| progs/v_nail.mdl  ||style=text-align:right|  54472 || ec9ba028b346da2f9674c2a521ff0c2f
|-
| progs/v_rock2.mdl  ||style=text-align:right|  58188 || 96edf1a3c7629987c200361523f780d7
|-
| progs/v_rock.mdl  ||style=text-align:right|  58548 || 7bea46b2a75fd7cff2fb99420e4c4e25
|-
| progs/v_shot2.mdl  ||style=text-align:right|  50816 || 922b3b687766ae0d7aeb73d44dec7035
|-
| progs/v_shot.mdl  ||style=text-align:right|  43852 || 1fd140b6856843e83cd9bf3966f5d7dd
|-
| progs/w_g_key.mdl  ||style=text-align:right|  7252 || c5c5f0d14b022f57294ad9aded318250
|-
| progs/wizard.mdl  ||style=text-align:right|  64472 || bf60986594f045e60e8aa6339d553ee7
|-
| progs/w_s_key.mdl  ||style=text-align:right|  7252 || ec02314a7d12439d36b4eb2dd0a641a8
|-
| progs/w_spike.mdl  ||style=text-align:right|  14336 || 8cf9245df2164e8062b01a220b508d6b
|-
| progs/zombie.mdl  ||style=text-align:right|  186084 || a923b1d03b9d237dd5ead9bd56acc900
|-
| progs/zom_gib.mdl  ||style=text-align:right|  10196 || cf42c938caa5b19f719d1f110b1dc6d4
|-
| quake.rc  ||style=text-align:right|  293 || 411d42958aaeae141813f9ebfcf5233f
|-
| sound/ambience/buzz1.wav  ||style=text-align:right|  36308 || 346a00c795c6f1f1338ade6fc350b3fe
|-
| sound/ambience/comp1.wav  ||style=text-align:right|  62734 || f91a1120de804f7cd4dbba4f12c748e9
|-
| sound/ambience/drip1.wav  ||style=text-align:right|  137736 || 2306a76162eeda3d0812c516bc99aa7a
|-
| sound/ambience/drone6.wav  ||style=text-align:right|  18522 || 322853ddb42ad2a205579b5cca8e2e8c
|-
| sound/ambience/fire1.wav  ||style=text-align:right|  24064 || 610d3985ed8133988e8de3bec2b9cbbe
|-
| sound/ambience/fl_hum1.wav  ||style=text-align:right|  50154 || e4628499702e004c4bacd282a3ecb8c0
|-
| sound/ambience/hum1.wav  ||style=text-align:right|  40166 || 486bfa737c35b0c9dda57cbee2a540af
|-
| sound/ambience/suck1.wav  ||style=text-align:right|  110392 || 2e99e4d1fe1501d5191c8157d3063cb6
|-
| sound/ambience/swamp1.wav  ||style=text-align:right|  68524 || 29ffb678d78997eb6c227677c86ea4f8
|-
| sound/ambience/swamp2.wav  ||style=text-align:right|  68526 || 356aa1e875da846e72d8f17bbb699a5b
|-
| sound/ambience/thunder1.wav  ||style=text-align:right|  41492 || cefd6ced4b5bc79fcece1003238566f6
|-
| sound/ambience/water1.wav  ||style=text-align:right|  55784 || 6eeaae0a3450652d2be0782895297ee4
|-
| sound/ambience/wind2.wav  ||style=text-align:right|  28610 || 030cf8dd2b00a12454b5b35a89d03914
|-
| sound/ambience/windfly.wav  ||style=text-align:right|  22140 || c7be01e6d324e66883f70aa0072a99b0
|-
| sound/boss1/death.wav  ||style=text-align:right|  27600 || 43469b1acd35b67107da5da82e1df911
|-
| sound/boss1/out1.wav  ||style=text-align:right|  50344 || 847a6f971f6905dfaffd70b30d18a4b1
|-
| sound/boss1/pain.wav  ||style=text-align:right|  17700 || 49112740c0ff421f9272b9e8efc748cd
|-
| sound/boss1/sight1.wav  ||style=text-align:right|  24768 || 427dd600e6b28c9402212adcc5d652c7
|-
| sound/boss1/throw.wav  ||style=text-align:right|  11526 || 9b6e9ff2c8df448f7fd4b5315e60ddda
|-
| sound/buttons/airbut1.wav  ||style=text-align:right|  10672 || 9d2e14e7176842a0dce909a43d38873d
|-
| sound/buttons/switch02.wav  ||style=text-align:right|  3746 || d2e9cba3a353edc65115f6f5c574403c
|-
| sound/buttons/switch04.wav  ||style=text-align:right|  3666 || ff47857a58d3faefb2b94a37d7ba4f26
|-
| sound/buttons/switch21.wav  ||style=text-align:right|  6318 || 3605b0d061a9baf185c6ab7614534531
|-
| sound/demon/ddeath.wav  ||style=text-align:right|  9140 || 62a48dcd405ca55c9ce18497e36faa0e
|-
| sound/demon/dhit2.wav  ||style=text-align:right|  7142 || 9e741696e4d0d66e30e718fc70ec186e
|-
| sound/demon/djump.wav  ||style=text-align:right|  8494 || 791ac9d6b6593808316145443cb7e7a0
|-
| sound/demon/dland2.wav  ||style=text-align:right|  4400 || db14c7b01838f826b7a712075f9026fd
|-
| sound/demon/dpain1.wav  ||style=text-align:right|  6282 || 5e6c485878393c9bebb0d0e6659bc479
|-
| sound/demon/idle1.wav  ||style=text-align:right|  9098 || 7a83f8caf3d5b1172a7dc5afdc942988
|-
| sound/demon/sight2.wav  ||style=text-align:right|  8804 || 65171c355c22a5069520b0881677ae3c
|-
| sound/dog/dattack1.wav  ||style=text-align:right|  8154 || 0c47c9d4aaae0bf3159a288b674f4a35
|-
| sound/dog/ddeath.wav  ||style=text-align:right|  14912 || b0e7760b1d7286a028ff9773f6802958
|-
| sound/dog/dpain1.wav  ||style=text-align:right|  7240 || 28e5ab93b41e13e2916433283a5d1a46
|-
| sound/dog/dsight.wav  ||style=text-align:right|  6722 || 0edc290765bac1fb4fe03ca55bc7c225
|-
| sound/dog/idle.wav  ||style=text-align:right|  6870 || 42bd6026ff32bd94523ad9f8fe8362cc
|-
| sound/doors/airdoor1.wav  ||style=text-align:right|  13654 || 9b91930e8c2fdece31a2362296891122
|-
| sound/doors/airdoor2.wav  ||style=text-align:right|  8594 || 29fd823d1c14ca42a9a89c716b26f4cd
|-
| sound/doors/basesec1.wav  ||style=text-align:right|  13930 || eb2363fed42724f55e8f55f96c335bcf
|-
| sound/doors/basesec2.wav  ||style=text-align:right|  10238 || 8d163a56607c9cf64a270a156c1c5cef
|-
| sound/doors/basetry.wav  ||style=text-align:right|  10518 || a5108d5c51281ab55c0baf884cbe8cbe
|-
| sound/doors/baseuse.wav  ||style=text-align:right|  16486 || f43fee91efe813a5eb34e9d72918fdb9
|-
| sound/doors/ddoor1.wav  ||style=text-align:right|  7738 || dff86a26139cdd49a193d5ed7ebf6ae1
|-
| sound/doors/ddoor2.wav  ||style=text-align:right|  5904 || 4a9d0b0825d0302ce465569d1e35fbcf
|-
| sound/doors/doormv1.wav  ||style=text-align:right|  14036 || 3fd379aec80a2ad8105c0c89ba5b40e6
|-
| sound/doors/drclos4.wav  ||style=text-align:right|  12814 || 83df1865a0c9fa5d02c2f137564c57de
|-
| sound/doors/hydro1.wav  ||style=text-align:right|  11094 || b1703980a20e624bc3366ccf55ca617e
|-
| sound/doors/hydro2.wav  ||style=text-align:right|  10700 || b1866f5b3950788ccf4206444ab64bc7
|-
| sound/doors/latch2.wav  ||style=text-align:right|  7338 || ad2378ca21a0ca529df328261e07aed5
|-
| sound/doors/medtry.wav  ||style=text-align:right|  7828 || ebb536bec2cdfd22c25b35793c055339
|-
| sound/doors/meduse.wav  ||style=text-align:right|  10718 || 4522aada194b23eb33b541cbcc755cf6
|-
| sound/doors/runetry.wav  ||style=text-align:right|  13524 || c433bae9e2ab508712f87dc2cacc82c8
|-
| sound/doors/runeuse.wav  ||style=text-align:right|  17364 || b4bcfd525a26f5b5ecc9d392430d9079
|-
| sound/doors/stndr1.wav  ||style=text-align:right|  12620 || 5bae2183885e18d65d69624e85249fd9
|-
| sound/doors/stndr2.wav  ||style=text-align:right|  11470 || f43a75c917effff09ef7be8a321c8b49
|-
| sound/doors/winch2.wav  ||style=text-align:right|  14872 || a4edffdfede7dbaed37db526c26e2b6d
|-
| sound/hknight/hit.wav  ||style=text-align:right|  6260 || fece24e2548f1d769e8fce39a5c87d01
|-
| sound/items/armor1.wav  ||style=text-align:right|  7714 || 186d29f2baf35b8c280bc97754606fad
|-
| sound/items/damage2.wav  ||style=text-align:right|  33012 || 14e53b7617ffe315a7c3f8d89652e51c
|-
| sound/items/damage3.wav  ||style=text-align:right|  12894 || baf754aec7ed4baba16760ac85513184
|-
| sound/items/damage.wav  ||style=text-align:right|  23374 || 8cde8b9278ca4922a4ec7ead6e5ee01b
|-
| sound/items/health1.wav  ||style=text-align:right|  7958 || 52a2c4f808db4edd8393de0de618c91f
|-
| sound/items/inv1.wav  ||style=text-align:right|  13728 || 5850cab55d6197d0e76d9f0a22ba10be
|-
| sound/items/inv2.wav  ||style=text-align:right|  33216 || 4edcd38a2c6adc5305636dd7afd5ef60
|-
| sound/items/inv3.wav  ||style=text-align:right|  33320 || 325c268be05b42a019ccb92e6993ab9e
|-
| sound/items/itembk2.wav  ||style=text-align:right|  9910 || 270c688b3cb884f5d4e5ffd8ccc934a1
|-
| sound/items/protect2.wav  ||style=text-align:right|  34012 || 25627a4bd2b4c6054cfd2fc4bf69ddc2
|-
| sound/items/protect3.wav  ||style=text-align:right|  23364 || 7b9374d67f6d59e524bba2af236ca30a
|-
| sound/items/protect.wav  ||style=text-align:right|  22536 || d839d5a84f811ce8a0e28616891bf1a7
|-
| sound/items/r_item1.wav  ||style=text-align:right|  6822 || 3fc0d0ae4a71c9fbfe548f38626c6a08
|-
| sound/items/r_item2.wav  ||style=text-align:right|  7448 || 384ffefe795d99df75f381596a0f1976
|-
| sound/items/suit2.wav  ||style=text-align:right|  33254 || 0a9d2766a5b805cb5794f9bea57e6585
|-
| sound/items/suit.wav  ||style=text-align:right|  15854 || da413f34023d219f1e34fde50a037be0
|-
| sound/knight/idle.wav  ||style=text-align:right|  11064 || 1b5c3981bee078318af346d8fe8090b9
|-
| sound/knight/kdeath.wav  ||style=text-align:right|  10688 || 11a96f48a8f2433c23beae299c8fb96e
|-
| sound/knight/khurt.wav  ||style=text-align:right|  5586 || 32c9f48dd4a6a87752aedf56fe8de668
|-
| sound/knight/ksight.wav  ||style=text-align:right|  13514 || eb75b4af348c88e84d8c87c19d5976fa
|-
| sound/knight/sword1.wav  ||style=text-align:right|  2306 || 93045b5f3178413dc6b01ec2869d1f73
|-
| sound/knight/sword2.wav  ||style=text-align:right|  2784 || 82d1a7c263cd3df7b060dee2f7f8b1fd
|-
| sound/misc/h2ohit1.wav  ||style=text-align:right|  12972 || 49ecb03f4f10862453656a67598f8b8a
|-
| sound/misc/medkey.wav  ||style=text-align:right|  10020 || 0e3ae5626a47d81e4166539e355e31bb
|-
| sound/misc/menu1.wav  ||style=text-align:right|  5738 || 12c36546601c385bc47c9ca9420b7eee
|-
| sound/misc/menu2.wav  ||style=text-align:right|  10672 || 39b01ea6feb3ec8dbd6d8ee3e5e966c4
|-
| sound/misc/menu3.wav  ||style=text-align:right|  3010 || 4a03dc2fd56831b855dab761eac4f7de
|-
| sound/misc/null.wav  ||style=text-align:right|  1244 || 811989e09124f54cb27fe6154b0f1018
|-
| sound/misc/outwater.wav  ||style=text-align:right|  5018 || 35732412412ddb5ed418633bb0123bbe
|-
| sound/misc/power.wav  ||style=text-align:right|  19832 || 9f2c3a18d9fc8d9cecfac6db3aad6bc6
|-
| sound/misc/r_tele1.wav  ||style=text-align:right|  8036 || c2194171b4c446e136ed7514fbb098a5
|-
| sound/misc/r_tele2.wav  ||style=text-align:right|  17324 || 0ce662ac90fb3658d69320d1be4025c1
|-
| sound/misc/r_tele3.wav  ||style=text-align:right|  18016 || 122ef44813edcfe7391578fd29e729d2
|-
| sound/misc/r_tele4.wav  ||style=text-align:right|  9068 || 0097b5747ccc70d5b12fc6838aff02c2
|-
| sound/misc/r_tele5.wav  ||style=text-align:right|  22042 || a82334cbb66d12f28cce9e71c90ea50b
|-
| sound/misc/runekey.wav  ||style=text-align:right|  14578 || 6b21a2e5878011da50fdee0a301d3e34
|-
| sound/misc/secret.wav  ||style=text-align:right|  6610 || a02ceefcc24b1ebf5c164a1e1acfb05f
|-
| sound/misc/talk.wav  ||style=text-align:right|  1810 || d5b25d4df59d92ac5016e88689ea60c1
|-
| sound/misc/trigger1.wav  ||style=text-align:right|  20230 || dc927c8a1d0a9bd59fbc5dd91ae1d812
|-
| sound/misc/water1.wav  ||style=text-align:right|  3926 || d8291c762acb1edf24927fdcc0f6a6cd
|-
| sound/misc/water2.wav  ||style=text-align:right|  3340 || 049e8e7e7b30d4d8038afb7248bdd977
|-
| sound/ogre/ogdrag.wav  ||style=text-align:right|  12396 || 658587dc89aaefae5ca3f058f7ff4227
|-
| sound/ogre/ogdth.wav  ||style=text-align:right|  13892 || de98e7bb9e70586edddd3308cfded3db
|-
| sound/ogre/ogidle2.wav  ||style=text-align:right|  11254 || 196ae9c33a4311160e1d5f3da878ab09
|-
| sound/ogre/ogidle.wav  ||style=text-align:right|  12894 || 177c829840a87c885bbc8951e7ce962e
|-
| sound/ogre/ogpain1.wav  ||style=text-align:right|  7898 || ac6d133d7720c12df49813fe10e683b5
|-
| sound/ogre/ogsawatk.wav  ||style=text-align:right|  16154 || 7257bdfd014bb61d778b8f88cb65d560
|-
| sound/ogre/ogwake.wav  ||style=text-align:right|  19356 || 3296459e495c4c12b31179d4eeffac19
|-
| sound/plats/medplat1.wav  ||style=text-align:right|  16378 || b73215aa6627c8b5b90fce8d260d48d0
|-
| sound/plats/medplat2.wav  ||style=text-align:right|  7338 || 1fc6c3772917a1a8155d04fa52e17005
|-
| sound/plats/plat1.wav  ||style=text-align:right|  20248 || 5d43ed85d896ba926f459e06ba6635d5
|-
| sound/plats/plat2.wav  ||style=text-align:right|  7338 || 49d7ab0fd726cd652eb6e5756fce61b9
|-
| sound/plats/train1.wav  ||style=text-align:right|  21430 || b589ae8262046361d9dca39d6b8f693a
|-
| sound/plats/train2.wav  ||style=text-align:right|  5870 || 640017e1b870d643e3bca29d499c72ee
|-
| sound/player/axhit1.wav  ||style=text-align:right|  6906 || 149b2371334da318386325182924eaca
|-
| sound/player/axhit2.wav  ||style=text-align:right|  2434 || fc01909318455f5310efa2457a370897
|-
| sound/player/death1.wav  ||style=text-align:right|  10170 || ba005f5488d4ee78dabf613a03f33a5f
|-
| sound/player/death2.wav  ||style=text-align:right|  8026 || 20477d2e7c84aac1bef95d32c9c702dd
|-
| sound/player/death3.wav  ||style=text-align:right|  10918 || 7b206ba8e1fa28d8605b50e3f3200f11
|-
| sound/player/death4.wav  ||style=text-align:right|  14126 || 1b0f27f4d41b748d3cc5c3d56bd917f8
|-
| sound/player/death5.wav  ||style=text-align:right|  14946 || 7efe84195cfa97515aad2d7f96f25346
|-
| sound/player/drown1.wav  ||style=text-align:right|  8908 || 732f0416af6990e028110380bcb36f0d
|-
| sound/player/drown2.wav  ||style=text-align:right|  3114 || 29ee1f287879acce29b15d4722668bc2
|-
| sound/player/gasp1.wav  ||style=text-align:right|  8702 || b06cbc370c8c2c163dc4d487e8b673c7
|-
| sound/player/gasp2.wav  ||style=text-align:right|  13134 || 30aece9d8779764620c7f866bfb06edb
|-
| sound/player/gib.wav  ||style=text-align:right|  14424 || 26fa9942078125388f34b71546615068
|-
| sound/player/h2odeath.wav  ||style=text-align:right|  18104 || 73b0f4dfae07f6e49112cadfe202735c
|-
| sound/player/h2ojump.wav  ||style=text-align:right|  11438 || cd421b96410971bb1a4f21d3936a3805
|-
| sound/player/inh2o.wav  ||style=text-align:right|  11340 || d4c1a27c4d07e8dfdf18a4b1a880c610
|-
| sound/player/inlava.wav  ||style=text-align:right|  10958 || c37875a082900716b7af88d2d990f55c
|-
| sound/player/land2.wav  ||style=text-align:right|  6204 || 6ba534256a779d66d9d9dabb90e63c8b
|-
| sound/player/land.wav  ||style=text-align:right|  2434 || e34328a40358d98f0f95403b9e27ec1e
|-
| sound/player/lburn1.wav  ||style=text-align:right|  6682 || 3c447c72385defe97c060771077d8ba0
|-
| sound/player/lburn2.wav  ||style=text-align:right|  6076 || 6849ee8dbd91ec82ece016fbd39b0a5c
|-
| sound/player/pain1.wav  ||style=text-align:right|  3394 || d7ac9df7540b791f952ca2a681c0265b
|-
| sound/player/pain2.wav  ||style=text-align:right|  2710 || 513e054b64d4fb61f31384d59e123020
|-
| sound/player/pain3.wav  ||style=text-align:right|  4854 || aafc61ad4e16cc5cdd2db2100796b494
|-
| sound/player/pain4.wav  ||style=text-align:right|  4840 || f655ef2045bc55473303b27546aa6fc0
|-
| sound/player/pain5.wav  ||style=text-align:right|  8020 || f8551a73cb89396042687baa8c68b5c2
|-
| sound/player/pain6.wav  ||style=text-align:right|  5462 || 70062eabf96288d307280fb601ce0ee2
|-
| sound/player/plyrjmp8.wav  ||style=text-align:right|  3888 || d4a552d8f627c7f3b933568c4a74c913
|-
| sound/player/slimbrn2.wav  ||style=text-align:right|  12468 || b17c18a9f81a952f2d41f65b5180f210
|-
| sound/player/teledth1.wav  ||style=text-align:right|  14414 || c226c7f041187ba058d8112cc0190b56
|-
| sound/player/tornoff2.wav  ||style=text-align:right|  7726 || 03ec1c805b307b8fe4c4052f8332a5e5
|-
| sound/player/udeath.wav  ||style=text-align:right|  16082 || afe674f287efb6197da2cea0c0b1d2f8
|-
| sound/shambler/melee1.wav  ||style=text-align:right|  4718 || 77fe6240973a204b757a427ebf66bcfd
|-
| sound/shambler/melee2.wav  ||style=text-align:right|  5966 || 3be31638d769e3d690c92311dfafdeac
|-
| sound/shambler/sattck1.wav  ||style=text-align:right|  8036 || ec8c3f79ea42d09154cb8975ada1b21c
|-
| sound/shambler/sboom.wav  ||style=text-align:right|  11672 || 9834601a645d7d1f62001b2a314ec18f
|-
| sound/shambler/sdeath.wav  ||style=text-align:right|  21106 || e0e62d229a985a6e39218c6488599059
|-
| sound/shambler/shurt2.wav  ||style=text-align:right|  4302 || 1e87631ede95e061a75f9c31629ac0b8
|-
| sound/shambler/sidle.wav  ||style=text-align:right|  5646 || 368a240e6c3e877793352a79c1828386
|-
| sound/shambler/smack.wav  ||style=text-align:right|  5300 || bd8c634c9894348360fec7b7419d1649
|-
| sound/shambler/ssight.wav  ||style=text-align:right|  15420 || 657107577460d5acf3157dec97e07a89
|-
| sound/soldier/death1.wav  ||style=text-align:right|  8434 || fe25952af40b536c3bb67bfca58062eb
|-
| sound/soldier/idle.wav  ||style=text-align:right|  9802 || 4cdfbdda8fb5f40b125c7bcddb6e8914
|-
| sound/soldier/pain1.wav  ||style=text-align:right|  5000 || 54d3b05fdcecf7480034858f2b22b06c
|-
| sound/soldier/pain2.wav  ||style=text-align:right|  7838 || e2bbc9d3405b9b9fdae76d2fc298fc2f
|-
| sound/soldier/sattck1.wav  ||style=text-align:right|  14302 || b76ac35f900f280a7a7996da7e404362
|-
| sound/soldier/sight1.wav  ||style=text-align:right|  12716 || e2a39533250ddd1b08053d5c4ebf7fd0
|-
| sound/weapons/ax1.wav  ||style=text-align:right|  3308 || 237d4d819d02ad37849a8a895cc410e1
|-
| sound/weapons/bounce.wav  ||style=text-align:right|  5864 || fced668c6558a9505abf5014d60528a6
|-
| sound/weapons/grenade.wav  ||style=text-align:right|  8364 || d2b6fa131933f203eba2a282276e88df
|-
| sound/weapons/guncock.wav  ||style=text-align:right|  14430 || 6a63452167cc106e756518536446844f
|-
| sound/weapons/lhit.wav  ||style=text-align:right|  26028 || fefd021d0bd35a1f8da8870f1c06abb9
|-
| sound/weapons/lock4.wav  ||style=text-align:right|  3876 || 3fd93222258d5b1500b150f021c94519
|-
| sound/weapons/lstart.wav  ||style=text-align:right|  56378 || abe1abf6dcadcda5930b0684c7ea820a
|-
| sound/weapons/pkup.wav  ||style=text-align:right|  5174 || 0aa6f0a7d609e1a56fd535a06d1bb56e
|-
| sound/weapons/r_exp3.wav  ||style=text-align:right|  17478 || 57db026474fc76ba7f38cea24eaaf8cf
|-
| sound/weapons/ric1.wav  ||style=text-align:right|  4308 || a31166b4bbb4509ac3004a01f7477ee9
|-
| sound/weapons/ric2.wav  ||style=text-align:right|  10838 || a180b447c0527e603cea54a9aefd6139
|-
| sound/weapons/ric3.wav  ||style=text-align:right|  12638 || 8a773bbb585540ddce256151162f3a2c
|-
| sound/weapons/rocket1i.wav  ||style=text-align:right|  9660 || fb4fdf345d805cf6980c4c695974effc
|-
| sound/weapons/sgun1.wav  ||style=text-align:right|  22992 || 95a14815e48deb323d0cf8251d728ac7
|-
| sound/weapons/shotgn2.wav  ||style=text-align:right|  8694 || cb561cefbf472232334b419af050e5a0
|-
| sound/weapons/spike2.wav  ||style=text-align:right|  12642 || 9189d811855f108da4a1e2d34dc7c633
|-
| sound/weapons/tink1.wav  ||style=text-align:right|  1252 || 297ba8706625fcf05887edb393e9a441
|-
| sound/wizard/hit.wav  ||style=text-align:right|  7332 || 6598d669334df977f1f97b95288edf11
|-
| sound/wizard/wattack.wav  ||style=text-align:right|  25912 || b3568a47439f81779d40335e76f5bc2d
|-
| sound/wizard/wdeath.wav  ||style=text-align:right|  20684 || 99d9c71343bc23222abb92119d404400
|-
| sound/wizard/widle1.wav  ||style=text-align:right|  13464 || b22b1dd9f66879b3447d36ab584316c7
|-
| sound/wizard/widle2.wav  ||style=text-align:right|  23094 || 7178fd83df227360564adef01bed92c6
|-
| sound/wizard/wpain.wav  ||style=text-align:right|  8686 || bd7e59ab7d7b835f9ed8ab51950914de
|-
| sound/wizard/wsight.wav  ||style=text-align:right|  13078 || df5949057c750528917c6cb32b7fd9fd
|-
| sound/zombie/idle_w2.wav  ||style=text-align:right|  17192 || d2bb59b9d7ac71097c07123a23525641
|-
| sound/zombie/z_fall.wav  ||style=text-align:right|  3062 || 6968318b2d196c6d54bc707d8a390547
|-
| sound/zombie/z_gib.wav  ||style=text-align:right|  16226 || 199dda66ade8d6f0ef4897e4d7608c0d
|-
| sound/zombie/z_hit.wav  ||style=text-align:right|  6166 || 6c66ab3e6b149bf35956a4bbc0057acb
|-
| sound/zombie/z_idle1.wav  ||style=text-align:right|  13244 || 21088a7b38b1124d7ec72e58d5ab93a6
|-
| sound/zombie/z_idle.wav  ||style=text-align:right|  16734 || e5e570e38c4405111004190a79f0e925
|-
| sound/zombie/z_miss.wav  ||style=text-align:right|  10734 || 96fad96a8c3bc6f7bcc5da6c82678da2
|-
| sound/zombie/z_pain1.wav  ||style=text-align:right|  15374 || fcd83b89a94b0cadbe1361a4df080ec0
|-
| sound/zombie/z_pain.wav  ||style=text-align:right|  12218 || 56637968b8309bd2f825153330bbdfc0
|-
| sound/zombie/z_shot1.wav  ||style=text-align:right|  3068 || 561afb69b7851923a8fb3b54e3e13c96
|-
|}
&lt;/tt&gt;

=== 85fc9cee2035b66290da1e33be2ac86b ===
The [[id1]] ''pak0.pak'' with the md5sum 85fc9cee2035b66290da1e33be2ac86b contains exactly the same folders &amp; files as fc989b37572fae074e8ffda0ce4d5297.

=== 5906e5998fc3d896ddaf5e6a62e03abb ===
The [[id1]] ''pak0.pak'' with the md5sum 5906e5998fc3d896ddaf5e6a62e03abb contains the following folders &amp; files:
&lt;tt&gt;
{| class=&quot;wikitable collapsible collapsed&quot;
! Path !! Size !! md5
|-
| default.cfg  ||style=text-align:right|  1914 || fc989b37572fae074e8ffda0ce4d5297
|-
| demo1.dem  ||style=text-align:right|  184471 || 85ec0141ab24d9732e487d1aafa791f0
|-
| demo2.dem  ||style=text-align:right|  152705 || fa5c3daf7a57954cd95f94b698a7e420
|-
| demo3.dem  ||style=text-align:right|  197679 || 691f37e5715ea2863c1d8092a6429824
|-
| end1.bin  ||style=text-align:right|  4000 || 92ae51961ec2f429dfe9bea1138fbd5d
|-
| gfx/bigbox.lmp  ||style=text-align:right|  5192 || e597771ac6149b2b071ebfd24981ea04
|-
| gfx/box_bl.lmp  ||style=text-align:right|  72 || 5b094c37c2c1c2eebe37f84117dea182
|-
| gfx/box_bm.lmp  ||style=text-align:right|  136 || 44621236738e2bf8d669e53dca887278
|-
| gfx/box_br.lmp  ||style=text-align:right|  72 || 86597d5325b472caf5644644033e5cab
|-
| gfx/box_ml.lmp  ||style=text-align:right|  72 || adcea286ba0ac01084fd0c131b16ffdd
|-
| gfx/box_mm2.lmp  ||style=text-align:right|  136 || b850bcec189d909e7a0f796111a11249
|-
| gfx/box_mm.lmp  ||style=text-align:right|  136 || 700b4884b1a3c6aa7356a43014261866
|-
| gfx/box_mr.lmp  ||style=text-align:right|  72 || e30d9ea783ef7dd50101682f03ba40d7
|-
| gfx/box_tl.lmp  ||style=text-align:right|  72 || 3903d3d814e37c55790ac0ccfef2b925
|-
| gfx/box_tm.lmp  ||style=text-align:right|  136 || 7cb85ccbf8e7d2532da2a839a7cef348
|-
| gfx/box_tr.lmp  ||style=text-align:right|  72 || 5c5e72746af821a4cf8437d8fecc53c7
|-
| gfx/colormap.lmp  ||style=text-align:right|  16385 || 0d793b70bffafbd666fc5c88d6e15e9d
|-
| gfx/complete.lmp  ||style=text-align:right|  4616 || db6a00dfbe2c62a43c261e5622297c4a
|-
| gfx/conback.lmp  ||style=text-align:right|  64008 || 9eb6f9c47870bf42985d9382958a5c12
|-
| gfx/dim_drct.lmp  ||style=text-align:right|  3352 || 50ea11fe8c4d9db92863bdcd03b89df5
|-
| gfx/dim_ipx.lmp  ||style=text-align:right|  3352 || 0bef9943487f0611225bf0a5c0fe5dd4
|-
| gfx/dim_modm.lmp  ||style=text-align:right|  3352 || 3288f03144f06b95cadafa9458a77b1d
|-
| gfx/dim_mult.lmp  ||style=text-align:right|  3352 || 348b7369227f2d7e9d0daccbf6c9344d
|-
| gfx/dim_tcp.lmp  ||style=text-align:right|  3352 || 7dc8bbb01d7c90cd51c28da0ff6ed900
|-
| gfx/finale.lmp  ||style=text-align:right|  6920 || b6e49409d344e0344273d86ea33fe35f
|-
| gfx/help0.lmp  ||style=text-align:right|  64008 || b392ac30ad49252b51ec934ed855c20f
|-
| gfx/help1.lmp  ||style=text-align:right|  64008 || 857543c69245117a606044ea63adac9a
|-
| gfx/help2.lmp  ||style=text-align:right|  64008 || 882dd5920ea9c19f637f32084de9788a
|-
| gfx/help3.lmp  ||style=text-align:right|  64008 || a89d169524920d896128009467deebfc
|-
| gfx/help4.lmp  ||style=text-align:right|  64008 || c72d67c84ae6b403fae5f08d3e5c3bc6
|-
| gfx/help5.lmp  ||style=text-align:right|  64008 || 12203d7cdec35c4f51622dd90ec92093
|-
| gfx/inter.lmp  ||style=text-align:right|  23048 || f6eabe0d742380c7b47a9ee44170993d
|-
| gfx/loading.lmp  ||style=text-align:right|  3464 || 3249bc994266529a1748c06bfbb24bfa
|-
| gfx/mainmenu.lmp  ||style=text-align:right|  26888 || 8122e2a0b8888f9d1ebef149551b6434
|-
| gfx/menudot1.lmp  ||style=text-align:right|  392 || bfdb08d84d580abcfbacc1c9abd62bfb
|-
| gfx/menudot2.lmp  ||style=text-align:right|  392 || 6c6d2176e00edbe530bb1db118aaa6dc
|-
| gfx/menudot3.lmp  ||style=text-align:right|  392 || 2527a05f6162efb3e4bc5311d9e010d5
|-
| gfx/menudot4.lmp  ||style=text-align:right|  392 || 90ea6be033b39b139b3779932d266f33
|-
| gfx/menudot5.lmp  ||style=text-align:right|  392 || c9beb9600c35e458d0f83b6cf1e1c692
|-
| gfx/menudot6.lmp  ||style=text-align:right|  392 || 31b9a6ec1d12a2bd56b955185a9e72d3
|-
| gfx/menuplyr.lmp  ||style=text-align:right|  2696 || 9eebe617ff51c4ce43f85ca1a6920d5b
|-
| gfx/mp_menu.lmp  ||style=text-align:right|  14856 || c6416b8f7f5262a5a19b9ce4be1fd9ce
|-
| gfx/netmen1.lmp  ||style=text-align:right|  3352 || 5bc6a8d8cfdfd7e940e933812954367a
|-
| gfx/netmen2.lmp  ||style=text-align:right|  3352 || c8aafb649a653e90fc5eb7b7a2b3ca2e
|-
| gfx/netmen3.lmp  ||style=text-align:right|  3352 || 11c9372d0e64057a1ec8251f596b820d
|-
| gfx/netmen4.lmp  ||style=text-align:right|  3352 || 74ec672b1312699be2eeaf25a68e4582
|-
| gfx/netmen5.lmp  ||style=text-align:right|  3352 || 231f8a9ea4ba364f517db0e9f7f1ba72
|-
| gfx/palette.lmp  ||style=text-align:right|  768 || 79bc149d4f2fb0bd68cd8400a3fd87d4
|-
| gfx/pause.lmp  ||style=text-align:right|  3080 || 5aa67f927719e4a9eb3e020e75fea969
|-
| gfx/p_load.lmp  ||style=text-align:right|  2504 || 27fe08071058385529b0b8ad746421e7
|-
| gfx/p_multi.lmp  ||style=text-align:right|  5192 || 5a307c7d11da20a4772ad9c00b9f4309
|-
| gfx/p_option.lmp  ||style=text-align:right|  3464 || 83a3bf4459bce3fe85857a0aa647b90a
|-
| gfx/p_save.lmp  ||style=text-align:right|  2120 || 0d2bb5fa5524e0180a85bf273094cd1f
|-
| gfx/qplaque.lmp  ||style=text-align:right|  4616 || f4de79557c75e26b85ea84fb6029a5f3
|-
| gfx/ranking.lmp  ||style=text-align:right|  4040 || 919b13d1f7fdd0082ec0f94699f3b681
|-
| gfx/sell.lmp  ||style=text-align:right|  64008 || 878db3866e8b38c5b8d951aef516358c
|-
| gfx/sp_menu.lmp  ||style=text-align:right|  14856 || f624aa79778970ecb8ef518b5ab435f6
|-
| gfx/ttl_cstm.lmp  ||style=text-align:right|  4424 || 4ee84e0e7fa93f0e93d26efb1e726a4d
|-
| gfx/ttl_main.lmp  ||style=text-align:right|  2312 || 07e1c8e189e2463befcfc44f5ecf8dcb
|-
| gfx/ttl_sgl.lmp  ||style=text-align:right|  3080 || 25d5360228da738f091063eaeb7c6aa8
|-
| gfx/vidmodes.lmp  ||style=text-align:right|  5192 || 18a97f403057777f262188903f485fe8
|-
| gfx.wad  ||style=text-align:right|  112828 || cde5b5890c8902c02a2f271abe8f4a1f
|-
| maps/b_batt0.bsp  ||style=text-align:right|  5044 || 00bc989f4c8d2570a2826a63c7356a27
|-
| maps/b_batt1.bsp  ||style=text-align:right|  4620 || 555bc0cb0b5c2ad2ed0110f307e70679
|-
| maps/b_bh100.bsp  ||style=text-align:right|  8820 || 62f78bb5143265f037b79ddd077c50ed
|-
| maps/b_bh10.bsp  ||style=text-align:right|  3936 || e80cde9f185612f669fc100f825ca84f
|-
| maps/b_bh25.bsp  ||style=text-align:right|  8872 || 032d70dbf8669b3627b82b41f31488bd
|-
| maps/b_explob.bsp  ||style=text-align:right|  10220 || d8c9db3cfa0264678afc580143f665ea
|-
| maps/b_nail0.bsp  ||style=text-align:right|  5044 || c8d7ec0bdee74e0c1e69e8dbe939117d
|-
| maps/b_nail1.bsp  ||style=text-align:right|  5044 || ea08b2bd6aa19ece0307f75c491e5d24
|-
| maps/b_rock0.bsp  ||style=text-align:right|  2956 || 19ce64cd248a4459bf37b45e6e7c1219
|-
| maps/b_rock1.bsp  ||style=text-align:right|  2944 || b4cdb75094cd7218ed2b0475aefabe80
|-
| maps/b_shell0.bsp  ||style=text-align:right|  5044 || 574824b3c52661959d633a76dc823859
|-
| maps/b_shell1.bsp  ||style=text-align:right|  5044 || dc8b8dcb490e204e615b2b9cdc673296
|-
| maps/e1m1.bsp  ||style=text-align:right|  1365176 || 84cae48010619bcc945426b91bc03ade
|-
| maps/e1m2.bsp  ||style=text-align:right|  1332228 || caff91afbe41f3eac4dda65cee0083c9
|-
| maps/e1m3.bsp  ||style=text-align:right|  1249944 || f20eaa5692e94ab889c4ade9e1c116c7
|-
| maps/e1m4.bsp  ||style=text-align:right|  1411452 || 29419f05ef647f83d0482502bb3f84f8
|-
| maps/e1m5.bsp  ||style=text-align:right|  1324060 || afd98cc890d748986186951b32fc9fcb
|-
| maps/e1m6.bsp  ||style=text-align:right|  1065080 || ec178e54ff68c4d8cf71e26775b2eb2d
|-
| maps/e1m7.bsp  ||style=text-align:right|  607420 || 0c1f55455e0f957291e21d211b689718
|-
| maps/e1m8.bsp  ||style=text-align:right|  924116 || 18c7ab2f922d5d586150afbc27c323a4
|-
| maps/start.bsp  ||style=text-align:right|  1433792 || 61a57bb4ca36368478f02b142d1b5291
|-
| progs/armor.mdl  ||style=text-align:right|  44076 || ca060166d7e4e4686995f05645dde593
|-
| progs/backpack.mdl  ||style=text-align:right|  19348 || 315b4ef42fb035aa3318e8d2d61961ce
|-
| progs/bolt2.mdl  ||style=text-align:right|  11860 || f59ce07cfbe01fcfc578258c573d2c31
|-
| progs/bolt3.mdl  ||style=text-align:right|  11860 || ff87579a424faa59ca2695b7434ea488
|-
| progs/bolt.mdl  ||style=text-align:right|  20644 || a176903954e9d8c7ab629f92784546c2
|-
| progs/boss.mdl  ||style=text-align:right|  211836 || 25da3b2bc30677e32ee3a3a878a4d3af
|-
| progs.dat  ||style=text-align:right|  413116 || 0c3ef3625df5883536f8da42c78b673a
|-
| progs/demon.mdl  ||style=text-align:right|  102120 || 4c73786e7cfb2083ca38cbc983cd6c4b
|-
| progs/dog.mdl  ||style=text-align:right|  146056 || e727fbc39acc652f812972612ce37565
|-
| progs/end1.mdl  ||style=text-align:right|  20820 || 67c0fcab33d3772c00bb462b0e749275
|-
| progs/eyes.mdl  ||style=text-align:right|  4372 || ed72f64a17c6909b2cb3034a734bca97
|-
| progs/flame2.mdl  ||style=text-align:right|  64572 || f2c8f8950ebd7a0edded6247655d325b
|-
| progs/flame.mdl  ||style=text-align:right|  46364 || 8593c05374d84354d4444c218e86fdb8
|-
| progs/gib1.mdl  ||style=text-align:right|  5716 || f5c5b799e895dc03036522a487e99913
|-
| progs/gib2.mdl  ||style=text-align:right|  16228 || cfa9e97a3542852418123e0bb12e4f86
|-
| progs/gib3.mdl  ||style=text-align:right|  22228 || d73be7b2881e0a5aacf2b332ac29086f
|-
| progs/g_light.mdl  ||style=text-align:right|  50276 || 61bba06ec3804b7f355a62fd4585ad8f
|-
| progs/g_nail2.mdl  ||style=text-align:right|  30720 || ed6d7bb5ff050ad5f2bf4be7739a16a5
|-
| progs/g_nail.mdl  ||style=text-align:right|  34700 || e2959ca741c764dd42025ef531a1b554
|-
| progs/grenade.mdl  ||style=text-align:right|  2244 || f492d6257c216306983a72f41db0d891
|-
| progs/g_rock2.mdl  ||style=text-align:right|  40756 || 68c047c97bab89afe2cb69e65b7c62e1
|-
| progs/g_rock.mdl  ||style=text-align:right|  48244 || 61346f842944795e0821e31e3d61b427
|-
| progs/g_shot.mdl  ||style=text-align:right|  32916 || 7facfec1a3cfb892cce871f398e9cb6b
|-
| progs/h_demon.mdl  ||style=text-align:right|  34884 || 5253a0ea93d9624d73fb984ee339b52f
|-
| progs/h_dog.mdl  ||style=text-align:right|  24436 || a0b5f87522b3a769548c46cf3bb4223e
|-
| progs/h_guard.mdl  ||style=text-align:right|  5428 || 18a629b53b87392030df63b7806eb833
|-
| progs/h_knight.mdl  ||style=text-align:right|  7156 || 46a03fa72b0cdebcf58045aba2fafc13
|-
| progs/h_ogre.mdl  ||style=text-align:right|  14900 || 14eb06611c769e254d0531c05919bdf5
|-
| progs/h_player.mdl  ||style=text-align:right|  14708 || bf1773df7d3e19c5b211a1ee408f6b05
|-
| progs/h_shams.mdl  ||style=text-align:right|  37060 || ff1e04e18c57667991341a011fb6c363
|-
| progs/h_wizard.mdl  ||style=text-align:right|  14804 || 4bc6be40128f313cf9ad06c347310735
|-
| progs/h_zombie.mdl  ||style=text-align:right|  4484 || 0fdef7f7cd05a3209e0a163e87f69f8b
|-
| progs/invisibl.mdl  ||style=text-align:right|  7092 || 1e87d86af02e69db9c9f27f5fddc7a47
|-
| progs/invulner.mdl  ||style=text-align:right|  23920 || 8c8d83e4d50c3282d009b333a1280422
|-
| progs/knight.mdl  ||style=text-align:right|  101404 || 5328915db5c53e85cf75d46e7b747fb9
|-
| progs/lavaball.mdl  ||style=text-align:right|  8788 || 92af53d2145681e37877dbc1d12801b2
|-
| progs/m_g_key.mdl  ||style=text-align:right|  12820 || 192c2650a115c91706f6fa8fe68beb45
|-
| progs/missile.mdl  ||style=text-align:right|  57796 || 47f19f9e34954b93443c9759dd2e7ba0
|-
| progs/m_s_key.mdl  ||style=text-align:right|  12820 || 20837376b391cdd5c92e57b84e05687f
|-
| progs/ogre.mdl  ||style=text-align:right|  162036 || fbb592ca3788a576dd2f31fcf8c80fab
|-
| progs/player.mdl  ||style=text-align:right|  191852 || 405cef9a10d96cdabffb5e91312f8e5c
|-
| progs/quaddama.mdl  ||style=text-align:right|  39992 || 00b177ff272a4779097ea08344da8aff
|-
| progs/s_bubble.spr  ||style=text-align:right|  588 || 7c0887630ed468205292d8cb7abcae93
|-
| progs/s_explod.spr  ||style=text-align:right|  18972 || 766c6a92c26b54f68f7ff87c90d71cf2
|-
| progs/shambler.mdl  ||style=text-align:right|  98556 || 9b09375a0f614dc4081e363cc34f1185
|-
| progs/s_light.mdl  ||style=text-align:right|  27596 || ee6649ea5673989f3aa06213a8d65f76
|-
| progs/s_light.spr  ||style=text-align:right|  1080 || aff44ba238f4e1d0d504d6f9700aadb4
|-
| progs/soldier.mdl  ||style=text-align:right|  146288 || 5b6c30a984872b4273dd5861412d35c5
|-
| progs/spike.mdl  ||style=text-align:right|  1684 || be4cb73125f939284376080acc9887dd
|-
| progs/s_spike.mdl  ||style=text-align:right|  1684 || ebb1d58242b64a703623c8a33fcbd9e6
|-
| progs/suit.mdl  ||style=text-align:right|  51236 || 882a61f5eea7f9cdbc04800b963cef85
|-
| progs/v_axe.mdl  ||style=text-align:right|  57908 || 577dadcca2700068995c808dc7dec76f
|-
| progs/v_light.mdl  ||style=text-align:right|  56204 || 68733d4c690de88b5c3ba33e52be1c15
|-
| progs/v_nail2.mdl  ||style=text-align:right|  68732 || aacd1002ab02662cc1d3ff46885b553e
|-
| progs/v_nail.mdl  ||style=text-align:right|  54472 || ec9ba028b346da2f9674c2a521ff0c2f
|-
| progs/v_rock2.mdl  ||style=text-align:right|  58188 || 96edf1a3c7629987c200361523f780d7
|-
| progs/v_rock.mdl  ||style=text-align:right|  58548 || 7bea46b2a75fd7cff2fb99420e4c4e25
|-
| progs/v_shot2.mdl  ||style=text-align:right|  50816 || 922b3b687766ae0d7aeb73d44dec7035
|-
| progs/v_shot.mdl  ||style=text-align:right|  43852 || 1fd140b6856843e83cd9bf3966f5d7dd
|-
| progs/w_g_key.mdl  ||style=text-align:right|  7252 || c5c5f0d14b022f57294ad9aded318250
|-
| progs/wizard.mdl  ||style=text-align:right|  64472 || bf60986594f045e60e8aa6339d553ee7
|-
| progs/w_s_key.mdl  ||style=text-align:right|  7252 || ec02314a7d12439d36b4eb2dd0a641a8
|-
| progs/w_spike.mdl  ||style=text-align:right|  14336 || 8cf9245df2164e8062b01a220b508d6b
|-
| progs/zombie.mdl  ||style=text-align:right|  186084 || a923b1d03b9d237dd5ead9bd56acc900
|-
| progs/zom_gib.mdl  ||style=text-align:right|  10196 || cf42c938caa5b19f719d1f110b1dc6d4
|-
| quake.rc  ||style=text-align:right|  293 || 411d42958aaeae141813f9ebfcf5233f
|-
| sound/ambience/buzz1.wav  ||style=text-align:right|  36308 || 346a00c795c6f1f1338ade6fc350b3fe
|-
| sound/ambience/comp1.wav  ||style=text-align:right|  62734 || f91a1120de804f7cd4dbba4f12c748e9
|-
| sound/ambience/drip1.wav  ||style=text-align:right|  137736 || 2306a76162eeda3d0812c516bc99aa7a
|-
| sound/ambience/drone6.wav  ||style=text-align:right|  18522 || 322853ddb42ad2a205579b5cca8e2e8c
|-
| sound/ambience/fire1.wav  ||style=text-align:right|  24064 || 610d3985ed8133988e8de3bec2b9cbbe
|-
| sound/ambience/fl_hum1.wav  ||style=text-align:right|  50154 || e4628499702e004c4bacd282a3ecb8c0
|-
| sound/ambience/hum1.wav  ||style=text-align:right|  40166 || 486bfa737c35b0c9dda57cbee2a540af
|-
| sound/ambience/suck1.wav  ||style=text-align:right|  110392 || 2e99e4d1fe1501d5191c8157d3063cb6
|-
| sound/ambience/swamp1.wav  ||style=text-align:right|  68524 || 29ffb678d78997eb6c227677c86ea4f8
|-
| sound/ambience/swamp2.wav  ||style=text-align:right|  68526 || 356aa1e875da846e72d8f17bbb699a5b
|-
| sound/ambience/thunder1.wav  ||style=text-align:right|  41492 || cefd6ced4b5bc79fcece1003238566f6
|-
| sound/ambience/water1.wav  ||style=text-align:right|  55784 || 6eeaae0a3450652d2be0782895297ee4
|-
| sound/ambience/wind2.wav  ||style=text-align:right|  28610 || 030cf8dd2b00a12454b5b35a89d03914
|-
| sound/ambience/windfly.wav  ||style=text-align:right|  22140 || c7be01e6d324e66883f70aa0072a99b0
|-
| sound/boss1/death.wav  ||style=text-align:right|  27600 || 43469b1acd35b67107da5da82e1df911
|-
| sound/boss1/out1.wav  ||style=text-align:right|  50344 || 847a6f971f6905dfaffd70b30d18a4b1
|-
| sound/boss1/pain.wav  ||style=text-align:right|  17700 || 49112740c0ff421f9272b9e8efc748cd
|-
| sound/boss1/sight1.wav  ||style=text-align:right|  24768 || 427dd600e6b28c9402212adcc5d652c7
|-
| sound/boss1/throw.wav  ||style=text-align:right|  11526 || 9b6e9ff2c8df448f7fd4b5315e60ddda
|-
| sound/buttons/airbut1.wav  ||style=text-align:right|  10672 || 9d2e14e7176842a0dce909a43d38873d
|-
| sound/buttons/switch02.wav  ||style=text-align:right|  3746 || d2e9cba3a353edc65115f6f5c574403c
|-
| sound/buttons/switch04.wav  ||style=text-align:right|  3666 || ff47857a58d3faefb2b94a37d7ba4f26
|-
| sound/buttons/switch21.wav  ||style=text-align:right|  6318 || 3605b0d061a9baf185c6ab7614534531
|-
| sound/demon/ddeath.wav  ||style=text-align:right|  9140 || 62a48dcd405ca55c9ce18497e36faa0e
|-
| sound/demon/dhit2.wav  ||style=text-align:right|  7142 || 9e741696e4d0d66e30e718fc70ec186e
|-
| sound/demon/djump.wav  ||style=text-align:right|  8494 || 791ac9d6b6593808316145443cb7e7a0
|-
| sound/demon/dland2.wav  ||style=text-align:right|  4400 || db14c7b01838f826b7a712075f9026fd
|-
| sound/demon/dpain1.wav  ||style=text-align:right|  6282 || 5e6c485878393c9bebb0d0e6659bc479
|-
| sound/demon/idle1.wav  ||style=text-align:right|  9098 || 7a83f8caf3d5b1172a7dc5afdc942988
|-
| sound/demon/sight2.wav  ||style=text-align:right|  8804 || 65171c355c22a5069520b0881677ae3c
|-
| sound/dog/dattack1.wav  ||style=text-align:right|  8154 || 0c47c9d4aaae0bf3159a288b674f4a35
|-
| sound/dog/ddeath.wav  ||style=text-align:right|  14912 || b0e7760b1d7286a028ff9773f6802958
|-
| sound/dog/dpain1.wav  ||style=text-align:right|  7240 || 28e5ab93b41e13e2916433283a5d1a46
|-
| sound/dog/dsight.wav  ||style=text-align:right|  6722 || 0edc290765bac1fb4fe03ca55bc7c225
|-
| sound/dog/idle.wav  ||style=text-align:right|  6870 || 42bd6026ff32bd94523ad9f8fe8362cc
|-
| sound/doors/airdoor1.wav  ||style=text-align:right|  13654 || 9b91930e8c2fdece31a2362296891122
|-
| sound/doors/airdoor2.wav  ||style=text-align:right|  8594 || 29fd823d1c14ca42a9a89c716b26f4cd
|-
| sound/doors/basesec1.wav  ||style=text-align:right|  13930 || eb2363fed42724f55e8f55f96c335bcf
|-
| sound/doors/basesec2.wav  ||style=text-align:right|  10238 || 8d163a56607c9cf64a270a156c1c5cef
|-
| sound/doors/basetry.wav  ||style=text-align:right|  10518 || a5108d5c51281ab55c0baf884cbe8cbe
|-
| sound/doors/baseuse.wav  ||style=text-align:right|  16486 || f43fee91efe813a5eb34e9d72918fdb9
|-
| sound/doors/ddoor1.wav  ||style=text-align:right|  7738 || dff86a26139cdd49a193d5ed7ebf6ae1
|-
| sound/doors/ddoor2.wav  ||style=text-align:right|  5904 || 4a9d0b0825d0302ce465569d1e35fbcf
|-
| sound/doors/doormv1.wav  ||style=text-align:right|  14036 || 3fd379aec80a2ad8105c0c89ba5b40e6
|-
| sound/doors/drclos4.wav  ||style=text-align:right|  12814 || 83df1865a0c9fa5d02c2f137564c57de
|-
| sound/doors/hydro1.wav  ||style=text-align:right|  11094 || b1703980a20e624bc3366ccf55ca617e
|-
| sound/doors/hydro2.wav  ||style=text-align:right|  10700 || b1866f5b3950788ccf4206444ab64bc7
|-
| sound/doors/latch2.wav  ||style=text-align:right|  7338 || ad2378ca21a0ca529df328261e07aed5
|-
| sound/doors/medtry.wav  ||style=text-align:right|  7828 || ebb536bec2cdfd22c25b35793c055339
|-
| sound/doors/meduse.wav  ||style=text-align:right|  10718 || 4522aada194b23eb33b541cbcc755cf6
|-
| sound/doors/runetry.wav  ||style=text-align:right|  13524 || c433bae9e2ab508712f87dc2cacc82c8
|-
| sound/doors/runeuse.wav  ||style=text-align:right|  17364 || b4bcfd525a26f5b5ecc9d392430d9079
|-
| sound/doors/stndr1.wav  ||style=text-align:right|  12620 || 5bae2183885e18d65d69624e85249fd9
|-
| sound/doors/stndr2.wav  ||style=text-align:right|  11470 || f43a75c917effff09ef7be8a321c8b49
|-
| sound/doors/winch2.wav  ||style=text-align:right|  14872 || a4edffdfede7dbaed37db526c26e2b6d
|-
| sound/hknight/hit.wav  ||style=text-align:right|  6260 || fece24e2548f1d769e8fce39a5c87d01
|-
| sound/items/armor1.wav  ||style=text-align:right|  7714 || 186d29f2baf35b8c280bc97754606fad
|-
| sound/items/damage2.wav  ||style=text-align:right|  33012 || 14e53b7617ffe315a7c3f8d89652e51c
|-
| sound/items/damage3.wav  ||style=text-align:right|  12894 || baf754aec7ed4baba16760ac85513184
|-
| sound/items/damage.wav  ||style=text-align:right|  23374 || 8cde8b9278ca4922a4ec7ead6e5ee01b
|-
| sound/items/health1.wav  ||style=text-align:right|  7958 || 52a2c4f808db4edd8393de0de618c91f
|-
| sound/items/inv1.wav  ||style=text-align:right|  13728 || 5850cab55d6197d0e76d9f0a22ba10be
|-
| sound/items/inv2.wav  ||style=text-align:right|  33216 || 4edcd38a2c6adc5305636dd7afd5ef60
|-
| sound/items/inv3.wav  ||style=text-align:right|  33320 || 325c268be05b42a019ccb92e6993ab9e
|-
| sound/items/itembk2.wav  ||style=text-align:right|  9910 || 270c688b3cb884f5d4e5ffd8ccc934a1
|-
| sound/items/protect2.wav  ||style=text-align:right|  34012 || 25627a4bd2b4c6054cfd2fc4bf69ddc2
|-
| sound/items/protect3.wav  ||style=text-align:right|  23364 || 7b9374d67f6d59e524bba2af236ca30a
|-
| sound/items/protect.wav  ||style=text-align:right|  22536 || d839d5a84f811ce8a0e28616891bf1a7
|-
| sound/items/r_item1.wav  ||style=text-align:right|  6822 || 3fc0d0ae4a71c9fbfe548f38626c6a08
|-
| sound/items/r_item2.wav  ||style=text-align:right|  7448 || 384ffefe795d99df75f381596a0f1976
|-
| sound/items/suit2.wav  ||style=text-align:right|  33254 || 0a9d2766a5b805cb5794f9bea57e6585
|-
| sound/items/suit.wav  ||style=text-align:right|  15854 || da413f34023d219f1e34fde50a037be0
|-
| sound/knight/idle.wav  ||style=text-align:right|  11064 || 1b5c3981bee078318af346d8fe8090b9
|-
| sound/knight/kdeath.wav  ||style=text-align:right|  10688 || 11a96f48a8f2433c23beae299c8fb96e
|-
| sound/knight/khurt.wav  ||style=text-align:right|  5586 || 32c9f48dd4a6a87752aedf56fe8de668
|-
| sound/knight/ksight.wav  ||style=text-align:right|  13514 || eb75b4af348c88e84d8c87c19d5976fa
|-
| sound/knight/sword1.wav  ||style=text-align:right|  2306 || 93045b5f3178413dc6b01ec2869d1f73
|-
| sound/knight/sword2.wav  ||style=text-align:right|  2784 || 82d1a7c263cd3df7b060dee2f7f8b1fd
|-
| sound/misc/h2ohit1.wav  ||style=text-align:right|  12972 || 49ecb03f4f10862453656a67598f8b8a
|-
| sound/misc/medkey.wav  ||style=text-align:right|  10020 || 0e3ae5626a47d81e4166539e355e31bb
|-
| sound/misc/menu1.wav  ||style=text-align:right|  5738 || 12c36546601c385bc47c9ca9420b7eee
|-
| sound/misc/menu2.wav  ||style=text-align:right|  10672 || 39b01ea6feb3ec8dbd6d8ee3e5e966c4
|-
| sound/misc/menu3.wav  ||style=text-align:right|  3010 || 4a03dc2fd56831b855dab761eac4f7de
|-
| sound/misc/null.wav  ||style=text-align:right|  1244 || 811989e09124f54cb27fe6154b0f1018
|-
| sound/misc/outwater.wav  ||style=text-align:right|  5018 || 35732412412ddb5ed418633bb0123bbe
|-
| sound/misc/power.wav  ||style=text-align:right|  19832 || 9f2c3a18d9fc8d9cecfac6db3aad6bc6
|-
| sound/misc/r_tele1.wav  ||style=text-align:right|  8036 || c2194171b4c446e136ed7514fbb098a5
|-
| sound/misc/r_tele2.wav  ||style=text-align:right|  17324 || 0ce662ac90fb3658d69320d1be4025c1
|-
| sound/misc/r_tele3.wav  ||style=text-align:right|  18016 || 122ef44813edcfe7391578fd29e729d2
|-
| sound/misc/r_tele4.wav  ||style=text-align:right|  9068 || 0097b5747ccc70d5b12fc6838aff02c2
|-
| sound/misc/r_tele5.wav  ||style=text-align:right|  22042 || a82334cbb66d12f28cce9e71c90ea50b
|-
| sound/misc/runekey.wav  ||style=text-align:right|  14578 || 6b21a2e5878011da50fdee0a301d3e34
|-
| sound/misc/secret.wav  ||style=text-align:right|  6610 || a02ceefcc24b1ebf5c164a1e1acfb05f
|-
| sound/misc/talk.wav  ||style=text-align:right|  1810 || d5b25d4df59d92ac5016e88689ea60c1
|-
| sound/misc/trigger1.wav  ||style=text-align:right|  20230 || dc927c8a1d0a9bd59fbc5dd91ae1d812
|-
| sound/misc/water1.wav  ||style=text-align:right|  3926 || d8291c762acb1edf24927fdcc0f6a6cd
|-
| sound/misc/water2.wav  ||style=text-align:right|  3340 || 049e8e7e7b30d4d8038afb7248bdd977
|-
| sound/ogre/ogdrag.wav  ||style=text-align:right|  12396 || 658587dc89aaefae5ca3f058f7ff4227
|-
| sound/ogre/ogdth.wav  ||style=text-align:right|  13892 || de98e7bb9e70586edddd3308cfded3db
|-
| sound/ogre/ogidle2.wav  ||style=text-align:right|  11254 || 196ae9c33a4311160e1d5f3da878ab09
|-
| sound/ogre/ogidle.wav  ||style=text-align:right|  12894 || 177c829840a87c885bbc8951e7ce962e
|-
| sound/ogre/ogpain1.wav  ||style=text-align:right|  7898 || ac6d133d7720c12df49813fe10e683b5
|-
| sound/ogre/ogsawatk.wav  ||style=text-align:right|  16154 || 7257bdfd014bb61d778b8f88cb65d560
|-
| sound/ogre/ogwake.wav  ||style=text-align:right|  19356 || 3296459e495c4c12b31179d4eeffac19
|-
| sound/plats/medplat1.wav  ||style=text-align:right|  16378 || b73215aa6627c8b5b90fce8d260d48d0
|-
| sound/plats/medplat2.wav  ||style=text-align:right|  7338 || 1fc6c3772917a1a8155d04fa52e17005
|-
| sound/plats/plat1.wav  ||style=text-align:right|  20248 || 5d43ed85d896ba926f459e06ba6635d5
|-
| sound/plats/plat2.wav  ||style=text-align:right|  7338 || 49d7ab0fd726cd652eb6e5756fce61b9
|-
| sound/plats/train1.wav  ||style=text-align:right|  21430 || b589ae8262046361d9dca39d6b8f693a
|-
| sound/plats/train2.wav  ||style=text-align:right|  5870 || 640017e1b870d643e3bca29d499c72ee
|-
| sound/player/axhit1.wav  ||style=text-align:right|  6906 || 149b2371334da318386325182924eaca
|-
| sound/player/axhit2.wav  ||style=text-align:right|  2434 || fc01909318455f5310efa2457a370897
|-
| sound/player/death1.wav  ||style=text-align:right|  10170 || ba005f5488d4ee78dabf613a03f33a5f
|-
| sound/player/death2.wav  ||style=text-align:right|  8026 || 20477d2e7c84aac1bef95d32c9c702dd
|-
| sound/player/death3.wav  ||style=text-align:right|  10918 || 7b206ba8e1fa28d8605b50e3f3200f11
|-
| sound/player/death4.wav  ||style=text-align:right|  14126 || 1b0f27f4d41b748d3cc5c3d56bd917f8
|-
| sound/player/death5.wav  ||style=text-align:right|  14946 || 7efe84195cfa97515aad2d7f96f25346
|-
| sound/player/drown1.wav  ||style=text-align:right|  8908 || 732f0416af6990e028110380bcb36f0d
|-
| sound/player/drown2.wav  ||style=text-align:right|  3114 || 29ee1f287879acce29b15d4722668bc2
|-
| sound/player/gasp1.wav  ||style=text-align:right|  8702 || b06cbc370c8c2c163dc4d487e8b673c7
|-
| sound/player/gasp2.wav  ||style=text-align:right|  13134 || 30aece9d8779764620c7f866bfb06edb
|-
| sound/player/gib.wav  ||style=text-align:right|  14424 || 26fa9942078125388f34b71546615068
|-
| sound/player/h2odeath.wav  ||style=text-align:right|  18104 || 73b0f4dfae07f6e49112cadfe202735c
|-
| sound/player/h2ojump.wav  ||style=text-align:right|  11438 || cd421b96410971bb1a4f21d3936a3805
|-
| sound/player/inh2o.wav  ||style=text-align:right|  11340 || d4c1a27c4d07e8dfdf18a4b1a880c610
|-
| sound/player/inlava.wav  ||style=text-align:right|  10958 || c37875a082900716b7af88d2d990f55c
|-
| sound/player/land2.wav  ||style=text-align:right|  6204 || 6ba534256a779d66d9d9dabb90e63c8b
|-
| sound/player/land.wav  ||style=text-align:right|  2434 || e34328a40358d98f0f95403b9e27ec1e
|-
| sound/player/lburn1.wav  ||style=text-align:right|  6682 || 3c447c72385defe97c060771077d8ba0
|-
| sound/player/lburn2.wav  ||style=text-align:right|  6076 || 6849ee8dbd91ec82ece016fbd39b0a5c
|-
| sound/player/pain1.wav  ||style=text-align:right|  3394 || d7ac9df7540b791f952ca2a681c0265b
|-
| sound/player/pain2.wav  ||style=text-align:right|  2710 || 513e054b64d4fb61f31384d59e123020
|-
| sound/player/pain3.wav  ||style=text-align:right|  4854 || aafc61ad4e16cc5cdd2db2100796b494
|-
| sound/player/pain4.wav  ||style=text-align:right|  4840 || f655ef2045bc55473303b27546aa6fc0
|-
| sound/player/pain5.wav  ||style=text-align:right|  8020 || f8551a73cb89396042687baa8c68b5c2
|-
| sound/player/pain6.wav  ||style=text-align:right|  5462 || 70062eabf96288d307280fb601ce0ee2
|-
| sound/player/plyrjmp8.wav  ||style=text-align:right|  3888 || d4a552d8f627c7f3b933568c4a74c913
|-
| sound/player/slimbrn2.wav  ||style=text-align:right|  12468 || b17c18a9f81a952f2d41f65b5180f210
|-
| sound/player/teledth1.wav  ||style=text-align:right|  14414 || c226c7f041187ba058d8112cc0190b56
|-
| sound/player/tornoff2.wav  ||style=text-align:right|  7726 || 03ec1c805b307b8fe4c4052f8332a5e5
|-
| sound/player/udeath.wav  ||style=text-align:right|  16082 || afe674f287efb6197da2cea0c0b1d2f8
|-
| sound/shambler/melee1.wav  ||style=text-align:right|  4718 || 77fe6240973a204b757a427ebf66bcfd
|-
| sound/shambler/melee2.wav  ||style=text-align:right|  5966 || 3be31638d769e3d690c92311dfafdeac
|-
| sound/shambler/sattck1.wav  ||style=text-align:right|  8036 || ec8c3f79ea42d09154cb8975ada1b21c
|-
| sound/shambler/sboom.wav  ||style=text-align:right|  11672 || 9834601a645d7d1f62001b2a314ec18f
|-
| sound/shambler/sdeath.wav  ||style=text-align:right|  21106 || e0e62d229a985a6e39218c6488599059
|-
| sound/shambler/shurt2.wav  ||style=text-align:right|  4302 || 1e87631ede95e061a75f9c31629ac0b8
|-
| sound/shambler/sidle.wav  ||style=text-align:right|  5646 || 368a240e6c3e877793352a79c1828386
|-
| sound/shambler/smack.wav  ||style=text-align:right|  5300 || bd8c634c9894348360fec7b7419d1649
|-
| sound/shambler/ssight.wav  ||style=text-align:right|  15420 || 657107577460d5acf3157dec97e07a89
|-
| sound/soldier/death1.wav  ||style=text-align:right|  8434 || fe25952af40b536c3bb67bfca58062eb
|-
| sound/soldier/idle.wav  ||style=text-align:right|  9802 || 4cdfbdda8fb5f40b125c7bcddb6e8914
|-
| sound/soldier/pain1.wav  ||style=text-align:right|  5000 || 54d3b05fdcecf7480034858f2b22b06c
|-
| sound/soldier/pain2.wav  ||style=text-align:right|  7838 || e2bbc9d3405b9b9fdae76d2fc298fc2f
|-
| sound/soldier/sattck1.wav  ||style=text-align:right|  14302 || b76ac35f900f280a7a7996da7e404362
|-
| sound/soldier/sight1.wav  ||style=text-align:right|  12716 || e2a39533250ddd1b08053d5c4ebf7fd0
|-
| sound/weapons/ax1.wav  ||style=text-align:right|  3308 || 237d4d819d02ad37849a8a895cc410e1
|-
| sound/weapons/bounce.wav  ||style=text-align:right|  5864 || fced668c6558a9505abf5014d60528a6
|-
| sound/weapons/grenade.wav  ||style=text-align:right|  8364 || d2b6fa131933f203eba2a282276e88df
|-
| sound/weapons/guncock.wav  ||style=text-align:right|  14430 || 6a63452167cc106e756518536446844f
|-
| sound/weapons/lhit.wav  ||style=text-align:right|  26028 || fefd021d0bd35a1f8da8870f1c06abb9
|-
| sound/weapons/lock4.wav  ||style=text-align:right|  3876 || 3fd93222258d5b1500b150f021c94519
|-
| sound/weapons/lstart.wav  ||style=text-align:right|  56378 || abe1abf6dcadcda5930b0684c7ea820a
|-
| sound/weapons/pkup.wav  ||style=text-align:right|  5174 || 0aa6f0a7d609e1a56fd535a06d1bb56e
|-
| sound/weapons/r_exp3.wav  ||style=text-align:right|  17478 || 57db026474fc76ba7f38cea24eaaf8cf
|-
| sound/weapons/ric1.wav  ||style=text-align:right|  4308 || a31166b4bbb4509ac3004a01f7477ee9
|-
| sound/weapons/ric2.wav  ||style=text-align:right|  10838 || a180b447c0527e603cea54a9aefd6139
|-
| sound/weapons/ric3.wav  ||style=text-align:right|  12638 || 8a773bbb585540ddce256151162f3a2c
|-
| sound/weapons/rocket1i.wav  ||style=text-align:right|  9660 || fb4fdf345d805cf6980c4c695974effc
|-
| sound/weapons/sgun1.wav  ||style=text-align:right|  22992 || 95a14815e48deb323d0cf8251d728ac7
|-
| sound/weapons/shotgn2.wav  ||style=text-align:right|  8694 || cb561cefbf472232334b419af050e5a0
|-
| sound/weapons/spike2.wav  ||style=text-align:right|  12642 || 9189d811855f108da4a1e2d34dc7c633
|-
| sound/weapons/tink1.wav  ||style=text-align:right|  1252 || 297ba8706625fcf05887edb393e9a441
|-
| sound/wizard/hit.wav  ||style=text-align:right|  7332 || 6598d669334df977f1f97b95288edf11
|-
| sound/wizard/wattack.wav  ||style=text-align:right|  25912 || b3568a47439f81779d40335e76f5bc2d
|-
| sound/wizard/wdeath.wav  ||style=text-align:right|  20684 || 99d9c71343bc23222abb92119d404400
|-
| sound/wizard/widle1.wav  ||style=text-align:right|  13464 || b22b1dd9f66879b3447d36ab584316c7
|-
| sound/wizard/widle2.wav  ||style=text-align:right|  23094 || 7178fd83df227360564adef01bed92c6
|-
| sound/wizard/wpain.wav  ||style=text-align:right|  8686 || bd7e59ab7d7b835f9ed8ab51950914de
|-
| sound/wizard/wsight.wav  ||style=text-align:right|  13078 || df5949057c750528917c6cb32b7fd9fd
|-
| sound/zombie/idle_w2.wav  ||style=text-align:right|  17192 || d2bb59b9d7ac71097c07123a23525641
|-
| sound/zombie/z_fall.wav  ||style=text-align:right|  3062 || 6968318b2d196c6d54bc707d8a390547
|-
| sound/zombie/z_gib.wav  ||style=text-align:right|  16226 || 199dda66ade8d6f0ef4897e4d7608c0d
|-
| sound/zombie/z_hit.wav  ||style=text-align:right|  6166 || 6c66ab3e6b149bf35956a4bbc0057acb
|-
| sound/zombie/z_idle1.wav  ||style=text-align:right|  13244 || 21088a7b38b1124d7ec72e58d5ab93a6
|-
| sound/zombie/z_idle.wav  ||style=text-align:right|  16734 || e5e570e38c4405111004190a79f0e925
|-
| sound/zombie/z_miss.wav  ||style=text-align:right|  10734 || 96fad96a8c3bc6f7bcc5da6c82678da2
|-
| sound/zombie/z_pain1.wav  ||style=text-align:right|  15374 || fcd83b89a94b0cadbe1361a4df080ec0
|-
| sound/zombie/z_pain.wav  ||style=text-align:right|  12218 || 56637968b8309bd2f825153330bbdfc0
|-
| sound/zombie/z_shot1.wav  ||style=text-align:right|  3068 || 561afb69b7851923a8fb3b54e3e13c96
|-
|}&lt;/tt&gt;

The only difference to fc989b37572fae074e8ffda0ce4d5297 is an updated progs.dat.

{{todo|todo=Multiple to do items listed above, detail out the contents of various pak files}}
{{todo|todo=different releases have different pak0.pak files}}</text>
      <sha1>qsgqokuem4icj2neh5j9jx8jm9tycxp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3271</id>
      <parentid>3269</parentid>
      <timestamp>2014-09-24T17:34:15Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>/* Versions */</comment>
      <text xml:space="preserve" bytes="66933">The '''''pak0.pak''''' file that comes with Quake is required by all Quake [[engines]]. It contains the maps, models, programs, sounds, and skins required to play Quake Episode 1, ''Dimension of the Doomed''. It is expected to be in the ID1 subfolder of the Quake root folder.

[[PAK file]]s are typically named ''pak0.pak'', ''pak1.pak'', ''pak2.pak'', and so on. Quake mission packs and other Quake-based games often have their own ''pak0.pak'' files, which live in a different folder, not the ID1 folder.

The ID1 ''pak0.pak'' is distributed with both the shareware and the registered/commercial editions of Quake.

In some editions, including the downloadable shareware (''quake106.zip'') from id Software, ''pak0.pak'' is embedded in another archive, ''[[resource.1]]''. The files in this archive are LZH-encoded using the lh5 algorithm. If you can't or don't want to run the DOS/Win32 Quake installer program it comes with, then you'll need a compatible extractor program to get ''pak0.pak'' out of the ''resource.1'' archive.


== Versions ==
&lt;tt&gt;
{| class=&quot;wikitable&quot;
! Version !! Timestamp !! Size !! md5
|-
| Registered Version 1.01 (as well as Shareware Version 1.01 on that [https://www.quaddicted.com/library/quake_registered_1.01_id disc]) || 1996-07-12 ||style=text-align:right|  18276119 || fc989b37572fae074e8ffda0ce4d5297
|-
| Shareware Version 1.01 ([https://www.quaddicted.com/library/quake_episode_1_shareware Shareware disc]) || 1996-07-12 ||style=text-align:right|  18276119 || 85fc9cee2035b66290da1e33be2ac86b
|-
| Registered Version 1.06 || 1996-10-01 14:25:58 ||style=text-align:right|  18689235 || 5906e5998fc3d896ddaf5e6a62e03abb
|-
|}&lt;/tt&gt;

=== fc989b37572fae074e8ffda0ce4d5297 ===
The [[id1]] ''pak0.pak'' with the md5sum fc989b37572fae074e8ffda0ce4d5297 contains the following folders &amp; files:
&lt;tt&gt;
{| class=&quot;wikitable collapsible collapsed&quot;
|-
! Path !! Size !! md5
|-
| default.cfg  ||style=text-align:right|  1914 || fc989b37572fae074e8ffda0ce4d5297
|-
| demo1.dem  ||style=text-align:right|  184471 || 85ec0141ab24d9732e487d1aafa791f0
|-
| demo2.dem  ||style=text-align:right|  152705 || fa5c3daf7a57954cd95f94b698a7e420
|-
| demo3.dem  ||style=text-align:right|  197679 || 691f37e5715ea2863c1d8092a6429824
|-
| end1.bin  ||style=text-align:right|  4000 || 92ae51961ec2f429dfe9bea1138fbd5d
|-
| gfx/bigbox.lmp  ||style=text-align:right|  5192 || e597771ac6149b2b071ebfd24981ea04
|-
| gfx/box_bl.lmp  ||style=text-align:right|  72 || 5b094c37c2c1c2eebe37f84117dea182
|-
| gfx/box_bm.lmp  ||style=text-align:right|  136 || 44621236738e2bf8d669e53dca887278
|-
| gfx/box_br.lmp  ||style=text-align:right|  72 || 86597d5325b472caf5644644033e5cab
|-
| gfx/box_ml.lmp  ||style=text-align:right|  72 || adcea286ba0ac01084fd0c131b16ffdd
|-
| gfx/box_mm2.lmp  ||style=text-align:right|  136 || b850bcec189d909e7a0f796111a11249
|-
| gfx/box_mm.lmp  ||style=text-align:right|  136 || 700b4884b1a3c6aa7356a43014261866
|-
| gfx/box_mr.lmp  ||style=text-align:right|  72 || e30d9ea783ef7dd50101682f03ba40d7
|-
| gfx/box_tl.lmp  ||style=text-align:right|  72 || 3903d3d814e37c55790ac0ccfef2b925
|-
| gfx/box_tm.lmp  ||style=text-align:right|  136 || 7cb85ccbf8e7d2532da2a839a7cef348
|-
| gfx/box_tr.lmp  ||style=text-align:right|  72 || 5c5e72746af821a4cf8437d8fecc53c7
|-
| gfx/colormap.lmp  ||style=text-align:right|  16385 || 0d793b70bffafbd666fc5c88d6e15e9d
|-
| gfx/complete.lmp  ||style=text-align:right|  4616 || db6a00dfbe2c62a43c261e5622297c4a
|-
| gfx/conback.lmp  ||style=text-align:right|  64008 || 9eb6f9c47870bf42985d9382958a5c12
|-
| gfx/dim_drct.lmp  ||style=text-align:right|  3352 || 50ea11fe8c4d9db92863bdcd03b89df5
|-
| gfx/dim_ipx.lmp  ||style=text-align:right|  3352 || 0bef9943487f0611225bf0a5c0fe5dd4
|-
| gfx/dim_modm.lmp  ||style=text-align:right|  3352 || 3288f03144f06b95cadafa9458a77b1d
|-
| gfx/dim_mult.lmp  ||style=text-align:right|  3352 || 348b7369227f2d7e9d0daccbf6c9344d
|-
| gfx/dim_tcp.lmp  ||style=text-align:right|  3352 || 7dc8bbb01d7c90cd51c28da0ff6ed900
|-
| gfx/finale.lmp  ||style=text-align:right|  6920 || b6e49409d344e0344273d86ea33fe35f
|-
| gfx/help0.lmp  ||style=text-align:right|  64008 || b392ac30ad49252b51ec934ed855c20f
|-
| gfx/help1.lmp  ||style=text-align:right|  64008 || 857543c69245117a606044ea63adac9a
|-
| gfx/help2.lmp  ||style=text-align:right|  64008 || 882dd5920ea9c19f637f32084de9788a
|-
| gfx/help3.lmp  ||style=text-align:right|  64008 || a89d169524920d896128009467deebfc
|-
| gfx/help4.lmp  ||style=text-align:right|  64008 || c72d67c84ae6b403fae5f08d3e5c3bc6
|-
| gfx/help5.lmp  ||style=text-align:right|  64008 || 12203d7cdec35c4f51622dd90ec92093
|-
| gfx/inter.lmp  ||style=text-align:right|  23048 || f6eabe0d742380c7b47a9ee44170993d
|-
| gfx/loading.lmp  ||style=text-align:right|  3464 || 3249bc994266529a1748c06bfbb24bfa
|-
| gfx/mainmenu.lmp  ||style=text-align:right|  26888 || 8122e2a0b8888f9d1ebef149551b6434
|-
| gfx/menudot1.lmp  ||style=text-align:right|  392 || bfdb08d84d580abcfbacc1c9abd62bfb
|-
| gfx/menudot2.lmp  ||style=text-align:right|  392 || 6c6d2176e00edbe530bb1db118aaa6dc
|-
| gfx/menudot3.lmp  ||style=text-align:right|  392 || 2527a05f6162efb3e4bc5311d9e010d5
|-
| gfx/menudot4.lmp  ||style=text-align:right|  392 || 90ea6be033b39b139b3779932d266f33
|-
| gfx/menudot5.lmp  ||style=text-align:right|  392 || c9beb9600c35e458d0f83b6cf1e1c692
|-
| gfx/menudot6.lmp  ||style=text-align:right|  392 || 31b9a6ec1d12a2bd56b955185a9e72d3
|-
| gfx/menuplyr.lmp  ||style=text-align:right|  2696 || 9eebe617ff51c4ce43f85ca1a6920d5b
|-
| gfx/mp_menu.lmp  ||style=text-align:right|  14856 || c6416b8f7f5262a5a19b9ce4be1fd9ce
|-
| gfx/netmen1.lmp  ||style=text-align:right|  3352 || 5bc6a8d8cfdfd7e940e933812954367a
|-
| gfx/netmen2.lmp  ||style=text-align:right|  3352 || c8aafb649a653e90fc5eb7b7a2b3ca2e
|-
| gfx/netmen3.lmp  ||style=text-align:right|  3352 || 11c9372d0e64057a1ec8251f596b820d
|-
| gfx/netmen4.lmp  ||style=text-align:right|  3352 || 74ec672b1312699be2eeaf25a68e4582
|-
| gfx/netmen5.lmp  ||style=text-align:right|  3352 || 231f8a9ea4ba364f517db0e9f7f1ba72
|-
| gfx/palette.lmp  ||style=text-align:right|  768 || 79bc149d4f2fb0bd68cd8400a3fd87d4
|-
| gfx/pause.lmp  ||style=text-align:right|  3080 || 5aa67f927719e4a9eb3e020e75fea969
|-
| gfx/p_load.lmp  ||style=text-align:right|  2504 || 27fe08071058385529b0b8ad746421e7
|-
| gfx/p_multi.lmp  ||style=text-align:right|  5192 || 5a307c7d11da20a4772ad9c00b9f4309
|-
| gfx/p_option.lmp  ||style=text-align:right|  3464 || 83a3bf4459bce3fe85857a0aa647b90a
|-
| gfx/p_save.lmp  ||style=text-align:right|  2120 || 0d2bb5fa5524e0180a85bf273094cd1f
|-
| gfx/qplaque.lmp  ||style=text-align:right|  4616 || f4de79557c75e26b85ea84fb6029a5f3
|-
| gfx/ranking.lmp  ||style=text-align:right|  4040 || 919b13d1f7fdd0082ec0f94699f3b681
|-
| gfx/sell.lmp  ||style=text-align:right|  64008 || 878db3866e8b38c5b8d951aef516358c
|-
| gfx/sp_menu.lmp  ||style=text-align:right|  14856 || f624aa79778970ecb8ef518b5ab435f6
|-
| gfx/ttl_cstm.lmp  ||style=text-align:right|  4424 || 4ee84e0e7fa93f0e93d26efb1e726a4d
|-
| gfx/ttl_main.lmp  ||style=text-align:right|  2312 || 07e1c8e189e2463befcfc44f5ecf8dcb
|-
| gfx/ttl_sgl.lmp  ||style=text-align:right|  3080 || 25d5360228da738f091063eaeb7c6aa8
|-
| gfx/vidmodes.lmp  ||style=text-align:right|  5192 || 18a97f403057777f262188903f485fe8
|-
| gfx.wad  ||style=text-align:right|  112828 || cde5b5890c8902c02a2f271abe8f4a1f
|-
| maps/b_batt0.bsp  ||style=text-align:right|  5044 || 00bc989f4c8d2570a2826a63c7356a27
|-
| maps/b_batt1.bsp  ||style=text-align:right|  4620 || 555bc0cb0b5c2ad2ed0110f307e70679
|-
| maps/b_bh100.bsp  ||style=text-align:right|  8820 || 62f78bb5143265f037b79ddd077c50ed
|-
| maps/b_bh10.bsp  ||style=text-align:right|  3936 || e80cde9f185612f669fc100f825ca84f
|-
| maps/b_bh25.bsp  ||style=text-align:right|  8872 || 032d70dbf8669b3627b82b41f31488bd
|-
| maps/b_explob.bsp  ||style=text-align:right|  10220 || d8c9db3cfa0264678afc580143f665ea
|-
| maps/b_nail0.bsp  ||style=text-align:right|  5044 || c8d7ec0bdee74e0c1e69e8dbe939117d
|-
| maps/b_nail1.bsp  ||style=text-align:right|  5044 || ea08b2bd6aa19ece0307f75c491e5d24
|-
| maps/b_rock0.bsp  ||style=text-align:right|  2956 || 19ce64cd248a4459bf37b45e6e7c1219
|-
| maps/b_rock1.bsp  ||style=text-align:right|  2944 || b4cdb75094cd7218ed2b0475aefabe80
|-
| maps/b_shell0.bsp  ||style=text-align:right|  5044 || 574824b3c52661959d633a76dc823859
|-
| maps/b_shell1.bsp  ||style=text-align:right|  5044 || dc8b8dcb490e204e615b2b9cdc673296
|-
| maps/e1m1.bsp  ||style=text-align:right|  1365176 || 84cae48010619bcc945426b91bc03ade
|-
| maps/e1m2.bsp  ||style=text-align:right|  1332228 || caff91afbe41f3eac4dda65cee0083c9
|-
| maps/e1m3.bsp  ||style=text-align:right|  1249944 || f20eaa5692e94ab889c4ade9e1c116c7
|-
| maps/e1m4.bsp  ||style=text-align:right|  1411452 || 29419f05ef647f83d0482502bb3f84f8
|-
| maps/e1m5.bsp  ||style=text-align:right|  1324060 || afd98cc890d748986186951b32fc9fcb
|-
| maps/e1m6.bsp  ||style=text-align:right|  1065080 || ec178e54ff68c4d8cf71e26775b2eb2d
|-
| maps/e1m7.bsp  ||style=text-align:right|  607420 || 0c1f55455e0f957291e21d211b689718
|-
| maps/e1m8.bsp  ||style=text-align:right|  924116 || 18c7ab2f922d5d586150afbc27c323a4
|-
| maps/start.bsp  ||style=text-align:right|  1433792 || 61a57bb4ca36368478f02b142d1b5291
|-
| progs/armor.mdl  ||style=text-align:right|  44076 || ca060166d7e4e4686995f05645dde593
|-
| progs/backpack.mdl  ||style=text-align:right|  19348 || 315b4ef42fb035aa3318e8d2d61961ce
|-
| progs/bolt2.mdl  ||style=text-align:right|  11860 || f59ce07cfbe01fcfc578258c573d2c31
|-
| progs/bolt3.mdl  ||style=text-align:right|  11860 || ff87579a424faa59ca2695b7434ea488
|-
| progs/bolt.mdl  ||style=text-align:right|  20644 || a176903954e9d8c7ab629f92784546c2
|-
| progs/boss.mdl  ||style=text-align:right|  211836 || 25da3b2bc30677e32ee3a3a878a4d3af
|-
| progs.dat  ||style=text-align:right|  410616 || cb04964a1952169e03392ee83a9edb91
|-
| progs/demon.mdl  ||style=text-align:right|  102120 || 4c73786e7cfb2083ca38cbc983cd6c4b
|-
| progs/dog.mdl  ||style=text-align:right|  146056 || e727fbc39acc652f812972612ce37565
|-
| progs/end1.mdl  ||style=text-align:right|  20820 || 67c0fcab33d3772c00bb462b0e749275
|-
| progs/eyes.mdl  ||style=text-align:right|  4372 || ed72f64a17c6909b2cb3034a734bca97
|-
| progs/flame2.mdl  ||style=text-align:right|  64572 || f2c8f8950ebd7a0edded6247655d325b
|-
| progs/flame.mdl  ||style=text-align:right|  46364 || 8593c05374d84354d4444c218e86fdb8
|-
| progs/gib1.mdl  ||style=text-align:right|  5716 || f5c5b799e895dc03036522a487e99913
|-
| progs/gib2.mdl  ||style=text-align:right|  16228 || cfa9e97a3542852418123e0bb12e4f86
|-
| progs/gib3.mdl  ||style=text-align:right|  22228 || d73be7b2881e0a5aacf2b332ac29086f
|-
| progs/g_light.mdl  ||style=text-align:right|  50276 || 61bba06ec3804b7f355a62fd4585ad8f
|-
| progs/g_nail2.mdl  ||style=text-align:right|  30720 || ed6d7bb5ff050ad5f2bf4be7739a16a5
|-
| progs/g_nail.mdl  ||style=text-align:right|  34700 || e2959ca741c764dd42025ef531a1b554
|-
| progs/grenade.mdl  ||style=text-align:right|  2244 || f492d6257c216306983a72f41db0d891
|-
| progs/g_rock2.mdl  ||style=text-align:right|  40756 || 68c047c97bab89afe2cb69e65b7c62e1
|-
| progs/g_rock.mdl  ||style=text-align:right|  48244 || 61346f842944795e0821e31e3d61b427
|-
| progs/g_shot.mdl  ||style=text-align:right|  32916 || 7facfec1a3cfb892cce871f398e9cb6b
|-
| progs/h_demon.mdl  ||style=text-align:right|  34884 || 5253a0ea93d9624d73fb984ee339b52f
|-
| progs/h_dog.mdl  ||style=text-align:right|  24436 || a0b5f87522b3a769548c46cf3bb4223e
|-
| progs/h_guard.mdl  ||style=text-align:right|  5428 || 18a629b53b87392030df63b7806eb833
|-
| progs/h_knight.mdl  ||style=text-align:right|  7156 || 46a03fa72b0cdebcf58045aba2fafc13
|-
| progs/h_ogre.mdl  ||style=text-align:right|  14900 || 14eb06611c769e254d0531c05919bdf5
|-
| progs/h_player.mdl  ||style=text-align:right|  14708 || bf1773df7d3e19c5b211a1ee408f6b05
|-
| progs/h_shams.mdl  ||style=text-align:right|  37060 || ff1e04e18c57667991341a011fb6c363
|-
| progs/h_wizard.mdl  ||style=text-align:right|  14804 || 4bc6be40128f313cf9ad06c347310735
|-
| progs/h_zombie.mdl  ||style=text-align:right|  4484 || 0fdef7f7cd05a3209e0a163e87f69f8b
|-
| progs/invisibl.mdl  ||style=text-align:right|  7092 || 1e87d86af02e69db9c9f27f5fddc7a47
|-
| progs/invulner.mdl  ||style=text-align:right|  23920 || 8c8d83e4d50c3282d009b333a1280422
|-
| progs/knight.mdl  ||style=text-align:right|  101404 || 5328915db5c53e85cf75d46e7b747fb9
|-
| progs/lavaball.mdl  ||style=text-align:right|  8788 || 92af53d2145681e37877dbc1d12801b2
|-
| progs/m_g_key.mdl  ||style=text-align:right|  12820 || 192c2650a115c91706f6fa8fe68beb45
|-
| progs/missile.mdl  ||style=text-align:right|  57796 || 47f19f9e34954b93443c9759dd2e7ba0
|-
| progs/m_s_key.mdl  ||style=text-align:right|  12820 || 20837376b391cdd5c92e57b84e05687f
|-
| progs/ogre.mdl  ||style=text-align:right|  162036 || fbb592ca3788a576dd2f31fcf8c80fab
|-
| progs/player.mdl  ||style=text-align:right|  191852 || 405cef9a10d96cdabffb5e91312f8e5c
|-
| progs/quaddama.mdl  ||style=text-align:right|  39992 || 00b177ff272a4779097ea08344da8aff
|-
| progs/s_bubble.spr  ||style=text-align:right|  588 || 7c0887630ed468205292d8cb7abcae93
|-
| progs/s_explod.spr  ||style=text-align:right|  18972 || 766c6a92c26b54f68f7ff87c90d71cf2
|-
| progs/shambler.mdl  ||style=text-align:right|  98556 || 9b09375a0f614dc4081e363cc34f1185
|-
| progs/s_light.mdl  ||style=text-align:right|  27596 || ee6649ea5673989f3aa06213a8d65f76
|-
| progs/s_light.spr  ||style=text-align:right|  1080 || aff44ba238f4e1d0d504d6f9700aadb4
|-
| progs/soldier.mdl  ||style=text-align:right|  146288 || 5b6c30a984872b4273dd5861412d35c5
|-
| progs/spike.mdl  ||style=text-align:right|  1684 || be4cb73125f939284376080acc9887dd
|-
| progs/s_spike.mdl  ||style=text-align:right|  1684 || ebb1d58242b64a703623c8a33fcbd9e6
|-
| progs/suit.mdl  ||style=text-align:right|  51236 || 882a61f5eea7f9cdbc04800b963cef85
|-
| progs/v_axe.mdl  ||style=text-align:right|  57908 || 577dadcca2700068995c808dc7dec76f
|-
| progs/v_light.mdl  ||style=text-align:right|  56204 || 68733d4c690de88b5c3ba33e52be1c15
|-
| progs/v_nail2.mdl  ||style=text-align:right|  68732 || aacd1002ab02662cc1d3ff46885b553e
|-
| progs/v_nail.mdl  ||style=text-align:right|  54472 || ec9ba028b346da2f9674c2a521ff0c2f
|-
| progs/v_rock2.mdl  ||style=text-align:right|  58188 || 96edf1a3c7629987c200361523f780d7
|-
| progs/v_rock.mdl  ||style=text-align:right|  58548 || 7bea46b2a75fd7cff2fb99420e4c4e25
|-
| progs/v_shot2.mdl  ||style=text-align:right|  50816 || 922b3b687766ae0d7aeb73d44dec7035
|-
| progs/v_shot.mdl  ||style=text-align:right|  43852 || 1fd140b6856843e83cd9bf3966f5d7dd
|-
| progs/w_g_key.mdl  ||style=text-align:right|  7252 || c5c5f0d14b022f57294ad9aded318250
|-
| progs/wizard.mdl  ||style=text-align:right|  64472 || bf60986594f045e60e8aa6339d553ee7
|-
| progs/w_s_key.mdl  ||style=text-align:right|  7252 || ec02314a7d12439d36b4eb2dd0a641a8
|-
| progs/w_spike.mdl  ||style=text-align:right|  14336 || 8cf9245df2164e8062b01a220b508d6b
|-
| progs/zombie.mdl  ||style=text-align:right|  186084 || a923b1d03b9d237dd5ead9bd56acc900
|-
| progs/zom_gib.mdl  ||style=text-align:right|  10196 || cf42c938caa5b19f719d1f110b1dc6d4
|-
| quake.rc  ||style=text-align:right|  293 || 411d42958aaeae141813f9ebfcf5233f
|-
| sound/ambience/buzz1.wav  ||style=text-align:right|  36308 || 346a00c795c6f1f1338ade6fc350b3fe
|-
| sound/ambience/comp1.wav  ||style=text-align:right|  62734 || f91a1120de804f7cd4dbba4f12c748e9
|-
| sound/ambience/drip1.wav  ||style=text-align:right|  137736 || 2306a76162eeda3d0812c516bc99aa7a
|-
| sound/ambience/drone6.wav  ||style=text-align:right|  18522 || 322853ddb42ad2a205579b5cca8e2e8c
|-
| sound/ambience/fire1.wav  ||style=text-align:right|  24064 || 610d3985ed8133988e8de3bec2b9cbbe
|-
| sound/ambience/fl_hum1.wav  ||style=text-align:right|  50154 || e4628499702e004c4bacd282a3ecb8c0
|-
| sound/ambience/hum1.wav  ||style=text-align:right|  40166 || 486bfa737c35b0c9dda57cbee2a540af
|-
| sound/ambience/suck1.wav  ||style=text-align:right|  110392 || 2e99e4d1fe1501d5191c8157d3063cb6
|-
| sound/ambience/swamp1.wav  ||style=text-align:right|  68524 || 29ffb678d78997eb6c227677c86ea4f8
|-
| sound/ambience/swamp2.wav  ||style=text-align:right|  68526 || 356aa1e875da846e72d8f17bbb699a5b
|-
| sound/ambience/thunder1.wav  ||style=text-align:right|  41492 || cefd6ced4b5bc79fcece1003238566f6
|-
| sound/ambience/water1.wav  ||style=text-align:right|  55784 || 6eeaae0a3450652d2be0782895297ee4
|-
| sound/ambience/wind2.wav  ||style=text-align:right|  28610 || 030cf8dd2b00a12454b5b35a89d03914
|-
| sound/ambience/windfly.wav  ||style=text-align:right|  22140 || c7be01e6d324e66883f70aa0072a99b0
|-
| sound/boss1/death.wav  ||style=text-align:right|  27600 || 43469b1acd35b67107da5da82e1df911
|-
| sound/boss1/out1.wav  ||style=text-align:right|  50344 || 847a6f971f6905dfaffd70b30d18a4b1
|-
| sound/boss1/pain.wav  ||style=text-align:right|  17700 || 49112740c0ff421f9272b9e8efc748cd
|-
| sound/boss1/sight1.wav  ||style=text-align:right|  24768 || 427dd600e6b28c9402212adcc5d652c7
|-
| sound/boss1/throw.wav  ||style=text-align:right|  11526 || 9b6e9ff2c8df448f7fd4b5315e60ddda
|-
| sound/buttons/airbut1.wav  ||style=text-align:right|  10672 || 9d2e14e7176842a0dce909a43d38873d
|-
| sound/buttons/switch02.wav  ||style=text-align:right|  3746 || d2e9cba3a353edc65115f6f5c574403c
|-
| sound/buttons/switch04.wav  ||style=text-align:right|  3666 || ff47857a58d3faefb2b94a37d7ba4f26
|-
| sound/buttons/switch21.wav  ||style=text-align:right|  6318 || 3605b0d061a9baf185c6ab7614534531
|-
| sound/demon/ddeath.wav  ||style=text-align:right|  9140 || 62a48dcd405ca55c9ce18497e36faa0e
|-
| sound/demon/dhit2.wav  ||style=text-align:right|  7142 || 9e741696e4d0d66e30e718fc70ec186e
|-
| sound/demon/djump.wav  ||style=text-align:right|  8494 || 791ac9d6b6593808316145443cb7e7a0
|-
| sound/demon/dland2.wav  ||style=text-align:right|  4400 || db14c7b01838f826b7a712075f9026fd
|-
| sound/demon/dpain1.wav  ||style=text-align:right|  6282 || 5e6c485878393c9bebb0d0e6659bc479
|-
| sound/demon/idle1.wav  ||style=text-align:right|  9098 || 7a83f8caf3d5b1172a7dc5afdc942988
|-
| sound/demon/sight2.wav  ||style=text-align:right|  8804 || 65171c355c22a5069520b0881677ae3c
|-
| sound/dog/dattack1.wav  ||style=text-align:right|  8154 || 0c47c9d4aaae0bf3159a288b674f4a35
|-
| sound/dog/ddeath.wav  ||style=text-align:right|  14912 || b0e7760b1d7286a028ff9773f6802958
|-
| sound/dog/dpain1.wav  ||style=text-align:right|  7240 || 28e5ab93b41e13e2916433283a5d1a46
|-
| sound/dog/dsight.wav  ||style=text-align:right|  6722 || 0edc290765bac1fb4fe03ca55bc7c225
|-
| sound/dog/idle.wav  ||style=text-align:right|  6870 || 42bd6026ff32bd94523ad9f8fe8362cc
|-
| sound/doors/airdoor1.wav  ||style=text-align:right|  13654 || 9b91930e8c2fdece31a2362296891122
|-
| sound/doors/airdoor2.wav  ||style=text-align:right|  8594 || 29fd823d1c14ca42a9a89c716b26f4cd
|-
| sound/doors/basesec1.wav  ||style=text-align:right|  13930 || eb2363fed42724f55e8f55f96c335bcf
|-
| sound/doors/basesec2.wav  ||style=text-align:right|  10238 || 8d163a56607c9cf64a270a156c1c5cef
|-
| sound/doors/basetry.wav  ||style=text-align:right|  10518 || a5108d5c51281ab55c0baf884cbe8cbe
|-
| sound/doors/baseuse.wav  ||style=text-align:right|  16486 || f43fee91efe813a5eb34e9d72918fdb9
|-
| sound/doors/ddoor1.wav  ||style=text-align:right|  7738 || dff86a26139cdd49a193d5ed7ebf6ae1
|-
| sound/doors/ddoor2.wav  ||style=text-align:right|  5904 || 4a9d0b0825d0302ce465569d1e35fbcf
|-
| sound/doors/doormv1.wav  ||style=text-align:right|  14036 || 3fd379aec80a2ad8105c0c89ba5b40e6
|-
| sound/doors/drclos4.wav  ||style=text-align:right|  12814 || 83df1865a0c9fa5d02c2f137564c57de
|-
| sound/doors/hydro1.wav  ||style=text-align:right|  11094 || b1703980a20e624bc3366ccf55ca617e
|-
| sound/doors/hydro2.wav  ||style=text-align:right|  10700 || b1866f5b3950788ccf4206444ab64bc7
|-
| sound/doors/latch2.wav  ||style=text-align:right|  7338 || ad2378ca21a0ca529df328261e07aed5
|-
| sound/doors/medtry.wav  ||style=text-align:right|  7828 || ebb536bec2cdfd22c25b35793c055339
|-
| sound/doors/meduse.wav  ||style=text-align:right|  10718 || 4522aada194b23eb33b541cbcc755cf6
|-
| sound/doors/runetry.wav  ||style=text-align:right|  13524 || c433bae9e2ab508712f87dc2cacc82c8
|-
| sound/doors/runeuse.wav  ||style=text-align:right|  17364 || b4bcfd525a26f5b5ecc9d392430d9079
|-
| sound/doors/stndr1.wav  ||style=text-align:right|  12620 || 5bae2183885e18d65d69624e85249fd9
|-
| sound/doors/stndr2.wav  ||style=text-align:right|  11470 || f43a75c917effff09ef7be8a321c8b49
|-
| sound/doors/winch2.wav  ||style=text-align:right|  14872 || a4edffdfede7dbaed37db526c26e2b6d
|-
| sound/hknight/hit.wav  ||style=text-align:right|  6260 || fece24e2548f1d769e8fce39a5c87d01
|-
| sound/items/armor1.wav  ||style=text-align:right|  7714 || 186d29f2baf35b8c280bc97754606fad
|-
| sound/items/damage2.wav  ||style=text-align:right|  33012 || 14e53b7617ffe315a7c3f8d89652e51c
|-
| sound/items/damage3.wav  ||style=text-align:right|  12894 || baf754aec7ed4baba16760ac85513184
|-
| sound/items/damage.wav  ||style=text-align:right|  23374 || 8cde8b9278ca4922a4ec7ead6e5ee01b
|-
| sound/items/health1.wav  ||style=text-align:right|  7958 || 52a2c4f808db4edd8393de0de618c91f
|-
| sound/items/inv1.wav  ||style=text-align:right|  13728 || 5850cab55d6197d0e76d9f0a22ba10be
|-
| sound/items/inv2.wav  ||style=text-align:right|  33216 || 4edcd38a2c6adc5305636dd7afd5ef60
|-
| sound/items/inv3.wav  ||style=text-align:right|  33320 || 325c268be05b42a019ccb92e6993ab9e
|-
| sound/items/itembk2.wav  ||style=text-align:right|  9910 || 270c688b3cb884f5d4e5ffd8ccc934a1
|-
| sound/items/protect2.wav  ||style=text-align:right|  34012 || 25627a4bd2b4c6054cfd2fc4bf69ddc2
|-
| sound/items/protect3.wav  ||style=text-align:right|  23364 || 7b9374d67f6d59e524bba2af236ca30a
|-
| sound/items/protect.wav  ||style=text-align:right|  22536 || d839d5a84f811ce8a0e28616891bf1a7
|-
| sound/items/r_item1.wav  ||style=text-align:right|  6822 || 3fc0d0ae4a71c9fbfe548f38626c6a08
|-
| sound/items/r_item2.wav  ||style=text-align:right|  7448 || 384ffefe795d99df75f381596a0f1976
|-
| sound/items/suit2.wav  ||style=text-align:right|  33254 || 0a9d2766a5b805cb5794f9bea57e6585
|-
| sound/items/suit.wav  ||style=text-align:right|  15854 || da413f34023d219f1e34fde50a037be0
|-
| sound/knight/idle.wav  ||style=text-align:right|  11064 || 1b5c3981bee078318af346d8fe8090b9
|-
| sound/knight/kdeath.wav  ||style=text-align:right|  10688 || 11a96f48a8f2433c23beae299c8fb96e
|-
| sound/knight/khurt.wav  ||style=text-align:right|  5586 || 32c9f48dd4a6a87752aedf56fe8de668
|-
| sound/knight/ksight.wav  ||style=text-align:right|  13514 || eb75b4af348c88e84d8c87c19d5976fa
|-
| sound/knight/sword1.wav  ||style=text-align:right|  2306 || 93045b5f3178413dc6b01ec2869d1f73
|-
| sound/knight/sword2.wav  ||style=text-align:right|  2784 || 82d1a7c263cd3df7b060dee2f7f8b1fd
|-
| sound/misc/h2ohit1.wav  ||style=text-align:right|  12972 || 49ecb03f4f10862453656a67598f8b8a
|-
| sound/misc/medkey.wav  ||style=text-align:right|  10020 || 0e3ae5626a47d81e4166539e355e31bb
|-
| sound/misc/menu1.wav  ||style=text-align:right|  5738 || 12c36546601c385bc47c9ca9420b7eee
|-
| sound/misc/menu2.wav  ||style=text-align:right|  10672 || 39b01ea6feb3ec8dbd6d8ee3e5e966c4
|-
| sound/misc/menu3.wav  ||style=text-align:right|  3010 || 4a03dc2fd56831b855dab761eac4f7de
|-
| sound/misc/null.wav  ||style=text-align:right|  1244 || 811989e09124f54cb27fe6154b0f1018
|-
| sound/misc/outwater.wav  ||style=text-align:right|  5018 || 35732412412ddb5ed418633bb0123bbe
|-
| sound/misc/power.wav  ||style=text-align:right|  19832 || 9f2c3a18d9fc8d9cecfac6db3aad6bc6
|-
| sound/misc/r_tele1.wav  ||style=text-align:right|  8036 || c2194171b4c446e136ed7514fbb098a5
|-
| sound/misc/r_tele2.wav  ||style=text-align:right|  17324 || 0ce662ac90fb3658d69320d1be4025c1
|-
| sound/misc/r_tele3.wav  ||style=text-align:right|  18016 || 122ef44813edcfe7391578fd29e729d2
|-
| sound/misc/r_tele4.wav  ||style=text-align:right|  9068 || 0097b5747ccc70d5b12fc6838aff02c2
|-
| sound/misc/r_tele5.wav  ||style=text-align:right|  22042 || a82334cbb66d12f28cce9e71c90ea50b
|-
| sound/misc/runekey.wav  ||style=text-align:right|  14578 || 6b21a2e5878011da50fdee0a301d3e34
|-
| sound/misc/secret.wav  ||style=text-align:right|  6610 || a02ceefcc24b1ebf5c164a1e1acfb05f
|-
| sound/misc/talk.wav  ||style=text-align:right|  1810 || d5b25d4df59d92ac5016e88689ea60c1
|-
| sound/misc/trigger1.wav  ||style=text-align:right|  20230 || dc927c8a1d0a9bd59fbc5dd91ae1d812
|-
| sound/misc/water1.wav  ||style=text-align:right|  3926 || d8291c762acb1edf24927fdcc0f6a6cd
|-
| sound/misc/water2.wav  ||style=text-align:right|  3340 || 049e8e7e7b30d4d8038afb7248bdd977
|-
| sound/ogre/ogdrag.wav  ||style=text-align:right|  12396 || 658587dc89aaefae5ca3f058f7ff4227
|-
| sound/ogre/ogdth.wav  ||style=text-align:right|  13892 || de98e7bb9e70586edddd3308cfded3db
|-
| sound/ogre/ogidle2.wav  ||style=text-align:right|  11254 || 196ae9c33a4311160e1d5f3da878ab09
|-
| sound/ogre/ogidle.wav  ||style=text-align:right|  12894 || 177c829840a87c885bbc8951e7ce962e
|-
| sound/ogre/ogpain1.wav  ||style=text-align:right|  7898 || ac6d133d7720c12df49813fe10e683b5
|-
| sound/ogre/ogsawatk.wav  ||style=text-align:right|  16154 || 7257bdfd014bb61d778b8f88cb65d560
|-
| sound/ogre/ogwake.wav  ||style=text-align:right|  19356 || 3296459e495c4c12b31179d4eeffac19
|-
| sound/plats/medplat1.wav  ||style=text-align:right|  16378 || b73215aa6627c8b5b90fce8d260d48d0
|-
| sound/plats/medplat2.wav  ||style=text-align:right|  7338 || 1fc6c3772917a1a8155d04fa52e17005
|-
| sound/plats/plat1.wav  ||style=text-align:right|  20248 || 5d43ed85d896ba926f459e06ba6635d5
|-
| sound/plats/plat2.wav  ||style=text-align:right|  7338 || 49d7ab0fd726cd652eb6e5756fce61b9
|-
| sound/plats/train1.wav  ||style=text-align:right|  21430 || b589ae8262046361d9dca39d6b8f693a
|-
| sound/plats/train2.wav  ||style=text-align:right|  5870 || 640017e1b870d643e3bca29d499c72ee
|-
| sound/player/axhit1.wav  ||style=text-align:right|  6906 || 149b2371334da318386325182924eaca
|-
| sound/player/axhit2.wav  ||style=text-align:right|  2434 || fc01909318455f5310efa2457a370897
|-
| sound/player/death1.wav  ||style=text-align:right|  10170 || ba005f5488d4ee78dabf613a03f33a5f
|-
| sound/player/death2.wav  ||style=text-align:right|  8026 || 20477d2e7c84aac1bef95d32c9c702dd
|-
| sound/player/death3.wav  ||style=text-align:right|  10918 || 7b206ba8e1fa28d8605b50e3f3200f11
|-
| sound/player/death4.wav  ||style=text-align:right|  14126 || 1b0f27f4d41b748d3cc5c3d56bd917f8
|-
| sound/player/death5.wav  ||style=text-align:right|  14946 || 7efe84195cfa97515aad2d7f96f25346
|-
| sound/player/drown1.wav  ||style=text-align:right|  8908 || 732f0416af6990e028110380bcb36f0d
|-
| sound/player/drown2.wav  ||style=text-align:right|  3114 || 29ee1f287879acce29b15d4722668bc2
|-
| sound/player/gasp1.wav  ||style=text-align:right|  8702 || b06cbc370c8c2c163dc4d487e8b673c7
|-
| sound/player/gasp2.wav  ||style=text-align:right|  13134 || 30aece9d8779764620c7f866bfb06edb
|-
| sound/player/gib.wav  ||style=text-align:right|  14424 || 26fa9942078125388f34b71546615068
|-
| sound/player/h2odeath.wav  ||style=text-align:right|  18104 || 73b0f4dfae07f6e49112cadfe202735c
|-
| sound/player/h2ojump.wav  ||style=text-align:right|  11438 || cd421b96410971bb1a4f21d3936a3805
|-
| sound/player/inh2o.wav  ||style=text-align:right|  11340 || d4c1a27c4d07e8dfdf18a4b1a880c610
|-
| sound/player/inlava.wav  ||style=text-align:right|  10958 || c37875a082900716b7af88d2d990f55c
|-
| sound/player/land2.wav  ||style=text-align:right|  6204 || 6ba534256a779d66d9d9dabb90e63c8b
|-
| sound/player/land.wav  ||style=text-align:right|  2434 || e34328a40358d98f0f95403b9e27ec1e
|-
| sound/player/lburn1.wav  ||style=text-align:right|  6682 || 3c447c72385defe97c060771077d8ba0
|-
| sound/player/lburn2.wav  ||style=text-align:right|  6076 || 6849ee8dbd91ec82ece016fbd39b0a5c
|-
| sound/player/pain1.wav  ||style=text-align:right|  3394 || d7ac9df7540b791f952ca2a681c0265b
|-
| sound/player/pain2.wav  ||style=text-align:right|  2710 || 513e054b64d4fb61f31384d59e123020
|-
| sound/player/pain3.wav  ||style=text-align:right|  4854 || aafc61ad4e16cc5cdd2db2100796b494
|-
| sound/player/pain4.wav  ||style=text-align:right|  4840 || f655ef2045bc55473303b27546aa6fc0
|-
| sound/player/pain5.wav  ||style=text-align:right|  8020 || f8551a73cb89396042687baa8c68b5c2
|-
| sound/player/pain6.wav  ||style=text-align:right|  5462 || 70062eabf96288d307280fb601ce0ee2
|-
| sound/player/plyrjmp8.wav  ||style=text-align:right|  3888 || d4a552d8f627c7f3b933568c4a74c913
|-
| sound/player/slimbrn2.wav  ||style=text-align:right|  12468 || b17c18a9f81a952f2d41f65b5180f210
|-
| sound/player/teledth1.wav  ||style=text-align:right|  14414 || c226c7f041187ba058d8112cc0190b56
|-
| sound/player/tornoff2.wav  ||style=text-align:right|  7726 || 03ec1c805b307b8fe4c4052f8332a5e5
|-
| sound/player/udeath.wav  ||style=text-align:right|  16082 || afe674f287efb6197da2cea0c0b1d2f8
|-
| sound/shambler/melee1.wav  ||style=text-align:right|  4718 || 77fe6240973a204b757a427ebf66bcfd
|-
| sound/shambler/melee2.wav  ||style=text-align:right|  5966 || 3be31638d769e3d690c92311dfafdeac
|-
| sound/shambler/sattck1.wav  ||style=text-align:right|  8036 || ec8c3f79ea42d09154cb8975ada1b21c
|-
| sound/shambler/sboom.wav  ||style=text-align:right|  11672 || 9834601a645d7d1f62001b2a314ec18f
|-
| sound/shambler/sdeath.wav  ||style=text-align:right|  21106 || e0e62d229a985a6e39218c6488599059
|-
| sound/shambler/shurt2.wav  ||style=text-align:right|  4302 || 1e87631ede95e061a75f9c31629ac0b8
|-
| sound/shambler/sidle.wav  ||style=text-align:right|  5646 || 368a240e6c3e877793352a79c1828386
|-
| sound/shambler/smack.wav  ||style=text-align:right|  5300 || bd8c634c9894348360fec7b7419d1649
|-
| sound/shambler/ssight.wav  ||style=text-align:right|  15420 || 657107577460d5acf3157dec97e07a89
|-
| sound/soldier/death1.wav  ||style=text-align:right|  8434 || fe25952af40b536c3bb67bfca58062eb
|-
| sound/soldier/idle.wav  ||style=text-align:right|  9802 || 4cdfbdda8fb5f40b125c7bcddb6e8914
|-
| sound/soldier/pain1.wav  ||style=text-align:right|  5000 || 54d3b05fdcecf7480034858f2b22b06c
|-
| sound/soldier/pain2.wav  ||style=text-align:right|  7838 || e2bbc9d3405b9b9fdae76d2fc298fc2f
|-
| sound/soldier/sattck1.wav  ||style=text-align:right|  14302 || b76ac35f900f280a7a7996da7e404362
|-
| sound/soldier/sight1.wav  ||style=text-align:right|  12716 || e2a39533250ddd1b08053d5c4ebf7fd0
|-
| sound/weapons/ax1.wav  ||style=text-align:right|  3308 || 237d4d819d02ad37849a8a895cc410e1
|-
| sound/weapons/bounce.wav  ||style=text-align:right|  5864 || fced668c6558a9505abf5014d60528a6
|-
| sound/weapons/grenade.wav  ||style=text-align:right|  8364 || d2b6fa131933f203eba2a282276e88df
|-
| sound/weapons/guncock.wav  ||style=text-align:right|  14430 || 6a63452167cc106e756518536446844f
|-
| sound/weapons/lhit.wav  ||style=text-align:right|  26028 || fefd021d0bd35a1f8da8870f1c06abb9
|-
| sound/weapons/lock4.wav  ||style=text-align:right|  3876 || 3fd93222258d5b1500b150f021c94519
|-
| sound/weapons/lstart.wav  ||style=text-align:right|  56378 || abe1abf6dcadcda5930b0684c7ea820a
|-
| sound/weapons/pkup.wav  ||style=text-align:right|  5174 || 0aa6f0a7d609e1a56fd535a06d1bb56e
|-
| sound/weapons/r_exp3.wav  ||style=text-align:right|  17478 || 57db026474fc76ba7f38cea24eaaf8cf
|-
| sound/weapons/ric1.wav  ||style=text-align:right|  4308 || a31166b4bbb4509ac3004a01f7477ee9
|-
| sound/weapons/ric2.wav  ||style=text-align:right|  10838 || a180b447c0527e603cea54a9aefd6139
|-
| sound/weapons/ric3.wav  ||style=text-align:right|  12638 || 8a773bbb585540ddce256151162f3a2c
|-
| sound/weapons/rocket1i.wav  ||style=text-align:right|  9660 || fb4fdf345d805cf6980c4c695974effc
|-
| sound/weapons/sgun1.wav  ||style=text-align:right|  22992 || 95a14815e48deb323d0cf8251d728ac7
|-
| sound/weapons/shotgn2.wav  ||style=text-align:right|  8694 || cb561cefbf472232334b419af050e5a0
|-
| sound/weapons/spike2.wav  ||style=text-align:right|  12642 || 9189d811855f108da4a1e2d34dc7c633
|-
| sound/weapons/tink1.wav  ||style=text-align:right|  1252 || 297ba8706625fcf05887edb393e9a441
|-
| sound/wizard/hit.wav  ||style=text-align:right|  7332 || 6598d669334df977f1f97b95288edf11
|-
| sound/wizard/wattack.wav  ||style=text-align:right|  25912 || b3568a47439f81779d40335e76f5bc2d
|-
| sound/wizard/wdeath.wav  ||style=text-align:right|  20684 || 99d9c71343bc23222abb92119d404400
|-
| sound/wizard/widle1.wav  ||style=text-align:right|  13464 || b22b1dd9f66879b3447d36ab584316c7
|-
| sound/wizard/widle2.wav  ||style=text-align:right|  23094 || 7178fd83df227360564adef01bed92c6
|-
| sound/wizard/wpain.wav  ||style=text-align:right|  8686 || bd7e59ab7d7b835f9ed8ab51950914de
|-
| sound/wizard/wsight.wav  ||style=text-align:right|  13078 || df5949057c750528917c6cb32b7fd9fd
|-
| sound/zombie/idle_w2.wav  ||style=text-align:right|  17192 || d2bb59b9d7ac71097c07123a23525641
|-
| sound/zombie/z_fall.wav  ||style=text-align:right|  3062 || 6968318b2d196c6d54bc707d8a390547
|-
| sound/zombie/z_gib.wav  ||style=text-align:right|  16226 || 199dda66ade8d6f0ef4897e4d7608c0d
|-
| sound/zombie/z_hit.wav  ||style=text-align:right|  6166 || 6c66ab3e6b149bf35956a4bbc0057acb
|-
| sound/zombie/z_idle1.wav  ||style=text-align:right|  13244 || 21088a7b38b1124d7ec72e58d5ab93a6
|-
| sound/zombie/z_idle.wav  ||style=text-align:right|  16734 || e5e570e38c4405111004190a79f0e925
|-
| sound/zombie/z_miss.wav  ||style=text-align:right|  10734 || 96fad96a8c3bc6f7bcc5da6c82678da2
|-
| sound/zombie/z_pain1.wav  ||style=text-align:right|  15374 || fcd83b89a94b0cadbe1361a4df080ec0
|-
| sound/zombie/z_pain.wav  ||style=text-align:right|  12218 || 56637968b8309bd2f825153330bbdfc0
|-
| sound/zombie/z_shot1.wav  ||style=text-align:right|  3068 || 561afb69b7851923a8fb3b54e3e13c96
|-
|}
&lt;/tt&gt;

=== 85fc9cee2035b66290da1e33be2ac86b ===
The [[id1]] ''pak0.pak'' with the md5sum 85fc9cee2035b66290da1e33be2ac86b contains exactly the same folders &amp; files as fc989b37572fae074e8ffda0ce4d5297.

=== 5906e5998fc3d896ddaf5e6a62e03abb ===
The [[id1]] ''pak0.pak'' with the md5sum 5906e5998fc3d896ddaf5e6a62e03abb contains the following folders &amp; files:
&lt;tt&gt;
{| class=&quot;wikitable collapsible collapsed&quot;
! Path !! Size !! md5
|-
| default.cfg  ||style=text-align:right|  1914 || fc989b37572fae074e8ffda0ce4d5297
|-
| demo1.dem  ||style=text-align:right|  184471 || 85ec0141ab24d9732e487d1aafa791f0
|-
| demo2.dem  ||style=text-align:right|  152705 || fa5c3daf7a57954cd95f94b698a7e420
|-
| demo3.dem  ||style=text-align:right|  197679 || 691f37e5715ea2863c1d8092a6429824
|-
| end1.bin  ||style=text-align:right|  4000 || 92ae51961ec2f429dfe9bea1138fbd5d
|-
| gfx/bigbox.lmp  ||style=text-align:right|  5192 || e597771ac6149b2b071ebfd24981ea04
|-
| gfx/box_bl.lmp  ||style=text-align:right|  72 || 5b094c37c2c1c2eebe37f84117dea182
|-
| gfx/box_bm.lmp  ||style=text-align:right|  136 || 44621236738e2bf8d669e53dca887278
|-
| gfx/box_br.lmp  ||style=text-align:right|  72 || 86597d5325b472caf5644644033e5cab
|-
| gfx/box_ml.lmp  ||style=text-align:right|  72 || adcea286ba0ac01084fd0c131b16ffdd
|-
| gfx/box_mm2.lmp  ||style=text-align:right|  136 || b850bcec189d909e7a0f796111a11249
|-
| gfx/box_mm.lmp  ||style=text-align:right|  136 || 700b4884b1a3c6aa7356a43014261866
|-
| gfx/box_mr.lmp  ||style=text-align:right|  72 || e30d9ea783ef7dd50101682f03ba40d7
|-
| gfx/box_tl.lmp  ||style=text-align:right|  72 || 3903d3d814e37c55790ac0ccfef2b925
|-
| gfx/box_tm.lmp  ||style=text-align:right|  136 || 7cb85ccbf8e7d2532da2a839a7cef348
|-
| gfx/box_tr.lmp  ||style=text-align:right|  72 || 5c5e72746af821a4cf8437d8fecc53c7
|-
| gfx/colormap.lmp  ||style=text-align:right|  16385 || 0d793b70bffafbd666fc5c88d6e15e9d
|-
| gfx/complete.lmp  ||style=text-align:right|  4616 || db6a00dfbe2c62a43c261e5622297c4a
|-
| gfx/conback.lmp  ||style=text-align:right|  64008 || 9eb6f9c47870bf42985d9382958a5c12
|-
| gfx/dim_drct.lmp  ||style=text-align:right|  3352 || 50ea11fe8c4d9db92863bdcd03b89df5
|-
| gfx/dim_ipx.lmp  ||style=text-align:right|  3352 || 0bef9943487f0611225bf0a5c0fe5dd4
|-
| gfx/dim_modm.lmp  ||style=text-align:right|  3352 || 3288f03144f06b95cadafa9458a77b1d
|-
| gfx/dim_mult.lmp  ||style=text-align:right|  3352 || 348b7369227f2d7e9d0daccbf6c9344d
|-
| gfx/dim_tcp.lmp  ||style=text-align:right|  3352 || 7dc8bbb01d7c90cd51c28da0ff6ed900
|-
| gfx/finale.lmp  ||style=text-align:right|  6920 || b6e49409d344e0344273d86ea33fe35f
|-
| gfx/help0.lmp  ||style=text-align:right|  64008 || b392ac30ad49252b51ec934ed855c20f
|-
| gfx/help1.lmp  ||style=text-align:right|  64008 || 857543c69245117a606044ea63adac9a
|-
| gfx/help2.lmp  ||style=text-align:right|  64008 || 882dd5920ea9c19f637f32084de9788a
|-
| gfx/help3.lmp  ||style=text-align:right|  64008 || a89d169524920d896128009467deebfc
|-
| gfx/help4.lmp  ||style=text-align:right|  64008 || c72d67c84ae6b403fae5f08d3e5c3bc6
|-
| gfx/help5.lmp  ||style=text-align:right|  64008 || 12203d7cdec35c4f51622dd90ec92093
|-
| gfx/inter.lmp  ||style=text-align:right|  23048 || f6eabe0d742380c7b47a9ee44170993d
|-
| gfx/loading.lmp  ||style=text-align:right|  3464 || 3249bc994266529a1748c06bfbb24bfa
|-
| gfx/mainmenu.lmp  ||style=text-align:right|  26888 || 8122e2a0b8888f9d1ebef149551b6434
|-
| gfx/menudot1.lmp  ||style=text-align:right|  392 || bfdb08d84d580abcfbacc1c9abd62bfb
|-
| gfx/menudot2.lmp  ||style=text-align:right|  392 || 6c6d2176e00edbe530bb1db118aaa6dc
|-
| gfx/menudot3.lmp  ||style=text-align:right|  392 || 2527a05f6162efb3e4bc5311d9e010d5
|-
| gfx/menudot4.lmp  ||style=text-align:right|  392 || 90ea6be033b39b139b3779932d266f33
|-
| gfx/menudot5.lmp  ||style=text-align:right|  392 || c9beb9600c35e458d0f83b6cf1e1c692
|-
| gfx/menudot6.lmp  ||style=text-align:right|  392 || 31b9a6ec1d12a2bd56b955185a9e72d3
|-
| gfx/menuplyr.lmp  ||style=text-align:right|  2696 || 9eebe617ff51c4ce43f85ca1a6920d5b
|-
| gfx/mp_menu.lmp  ||style=text-align:right|  14856 || c6416b8f7f5262a5a19b9ce4be1fd9ce
|-
| gfx/netmen1.lmp  ||style=text-align:right|  3352 || 5bc6a8d8cfdfd7e940e933812954367a
|-
| gfx/netmen2.lmp  ||style=text-align:right|  3352 || c8aafb649a653e90fc5eb7b7a2b3ca2e
|-
| gfx/netmen3.lmp  ||style=text-align:right|  3352 || 11c9372d0e64057a1ec8251f596b820d
|-
| gfx/netmen4.lmp  ||style=text-align:right|  3352 || 74ec672b1312699be2eeaf25a68e4582
|-
| gfx/netmen5.lmp  ||style=text-align:right|  3352 || 231f8a9ea4ba364f517db0e9f7f1ba72
|-
| gfx/palette.lmp  ||style=text-align:right|  768 || 79bc149d4f2fb0bd68cd8400a3fd87d4
|-
| gfx/pause.lmp  ||style=text-align:right|  3080 || 5aa67f927719e4a9eb3e020e75fea969
|-
| gfx/p_load.lmp  ||style=text-align:right|  2504 || 27fe08071058385529b0b8ad746421e7
|-
| gfx/p_multi.lmp  ||style=text-align:right|  5192 || 5a307c7d11da20a4772ad9c00b9f4309
|-
| gfx/p_option.lmp  ||style=text-align:right|  3464 || 83a3bf4459bce3fe85857a0aa647b90a
|-
| gfx/p_save.lmp  ||style=text-align:right|  2120 || 0d2bb5fa5524e0180a85bf273094cd1f
|-
| gfx/qplaque.lmp  ||style=text-align:right|  4616 || f4de79557c75e26b85ea84fb6029a5f3
|-
| gfx/ranking.lmp  ||style=text-align:right|  4040 || 919b13d1f7fdd0082ec0f94699f3b681
|-
| gfx/sell.lmp  ||style=text-align:right|  64008 || 878db3866e8b38c5b8d951aef516358c
|-
| gfx/sp_menu.lmp  ||style=text-align:right|  14856 || f624aa79778970ecb8ef518b5ab435f6
|-
| gfx/ttl_cstm.lmp  ||style=text-align:right|  4424 || 4ee84e0e7fa93f0e93d26efb1e726a4d
|-
| gfx/ttl_main.lmp  ||style=text-align:right|  2312 || 07e1c8e189e2463befcfc44f5ecf8dcb
|-
| gfx/ttl_sgl.lmp  ||style=text-align:right|  3080 || 25d5360228da738f091063eaeb7c6aa8
|-
| gfx/vidmodes.lmp  ||style=text-align:right|  5192 || 18a97f403057777f262188903f485fe8
|-
| gfx.wad  ||style=text-align:right|  112828 || cde5b5890c8902c02a2f271abe8f4a1f
|-
| maps/b_batt0.bsp  ||style=text-align:right|  5044 || 00bc989f4c8d2570a2826a63c7356a27
|-
| maps/b_batt1.bsp  ||style=text-align:right|  4620 || 555bc0cb0b5c2ad2ed0110f307e70679
|-
| maps/b_bh100.bsp  ||style=text-align:right|  8820 || 62f78bb5143265f037b79ddd077c50ed
|-
| maps/b_bh10.bsp  ||style=text-align:right|  3936 || e80cde9f185612f669fc100f825ca84f
|-
| maps/b_bh25.bsp  ||style=text-align:right|  8872 || 032d70dbf8669b3627b82b41f31488bd
|-
| maps/b_explob.bsp  ||style=text-align:right|  10220 || d8c9db3cfa0264678afc580143f665ea
|-
| maps/b_nail0.bsp  ||style=text-align:right|  5044 || c8d7ec0bdee74e0c1e69e8dbe939117d
|-
| maps/b_nail1.bsp  ||style=text-align:right|  5044 || ea08b2bd6aa19ece0307f75c491e5d24
|-
| maps/b_rock0.bsp  ||style=text-align:right|  2956 || 19ce64cd248a4459bf37b45e6e7c1219
|-
| maps/b_rock1.bsp  ||style=text-align:right|  2944 || b4cdb75094cd7218ed2b0475aefabe80
|-
| maps/b_shell0.bsp  ||style=text-align:right|  5044 || 574824b3c52661959d633a76dc823859
|-
| maps/b_shell1.bsp  ||style=text-align:right|  5044 || dc8b8dcb490e204e615b2b9cdc673296
|-
| maps/e1m1.bsp  ||style=text-align:right|  1365176 || 84cae48010619bcc945426b91bc03ade
|-
| maps/e1m2.bsp  ||style=text-align:right|  1332228 || caff91afbe41f3eac4dda65cee0083c9
|-
| maps/e1m3.bsp  ||style=text-align:right|  1249944 || f20eaa5692e94ab889c4ade9e1c116c7
|-
| maps/e1m4.bsp  ||style=text-align:right|  1411452 || 29419f05ef647f83d0482502bb3f84f8
|-
| maps/e1m5.bsp  ||style=text-align:right|  1324060 || afd98cc890d748986186951b32fc9fcb
|-
| maps/e1m6.bsp  ||style=text-align:right|  1065080 || ec178e54ff68c4d8cf71e26775b2eb2d
|-
| maps/e1m7.bsp  ||style=text-align:right|  607420 || 0c1f55455e0f957291e21d211b689718
|-
| maps/e1m8.bsp  ||style=text-align:right|  924116 || 18c7ab2f922d5d586150afbc27c323a4
|-
| maps/start.bsp  ||style=text-align:right|  1433792 || 61a57bb4ca36368478f02b142d1b5291
|-
| progs/armor.mdl  ||style=text-align:right|  44076 || ca060166d7e4e4686995f05645dde593
|-
| progs/backpack.mdl  ||style=text-align:right|  19348 || 315b4ef42fb035aa3318e8d2d61961ce
|-
| progs/bolt2.mdl  ||style=text-align:right|  11860 || f59ce07cfbe01fcfc578258c573d2c31
|-
| progs/bolt3.mdl  ||style=text-align:right|  11860 || ff87579a424faa59ca2695b7434ea488
|-
| progs/bolt.mdl  ||style=text-align:right|  20644 || a176903954e9d8c7ab629f92784546c2
|-
| progs/boss.mdl  ||style=text-align:right|  211836 || 25da3b2bc30677e32ee3a3a878a4d3af
|-
| progs.dat  ||style=text-align:right|  413116 || 0c3ef3625df5883536f8da42c78b673a
|-
| progs/demon.mdl  ||style=text-align:right|  102120 || 4c73786e7cfb2083ca38cbc983cd6c4b
|-
| progs/dog.mdl  ||style=text-align:right|  146056 || e727fbc39acc652f812972612ce37565
|-
| progs/end1.mdl  ||style=text-align:right|  20820 || 67c0fcab33d3772c00bb462b0e749275
|-
| progs/eyes.mdl  ||style=text-align:right|  4372 || ed72f64a17c6909b2cb3034a734bca97
|-
| progs/flame2.mdl  ||style=text-align:right|  64572 || f2c8f8950ebd7a0edded6247655d325b
|-
| progs/flame.mdl  ||style=text-align:right|  46364 || 8593c05374d84354d4444c218e86fdb8
|-
| progs/gib1.mdl  ||style=text-align:right|  5716 || f5c5b799e895dc03036522a487e99913
|-
| progs/gib2.mdl  ||style=text-align:right|  16228 || cfa9e97a3542852418123e0bb12e4f86
|-
| progs/gib3.mdl  ||style=text-align:right|  22228 || d73be7b2881e0a5aacf2b332ac29086f
|-
| progs/g_light.mdl  ||style=text-align:right|  50276 || 61bba06ec3804b7f355a62fd4585ad8f
|-
| progs/g_nail2.mdl  ||style=text-align:right|  30720 || ed6d7bb5ff050ad5f2bf4be7739a16a5
|-
| progs/g_nail.mdl  ||style=text-align:right|  34700 || e2959ca741c764dd42025ef531a1b554
|-
| progs/grenade.mdl  ||style=text-align:right|  2244 || f492d6257c216306983a72f41db0d891
|-
| progs/g_rock2.mdl  ||style=text-align:right|  40756 || 68c047c97bab89afe2cb69e65b7c62e1
|-
| progs/g_rock.mdl  ||style=text-align:right|  48244 || 61346f842944795e0821e31e3d61b427
|-
| progs/g_shot.mdl  ||style=text-align:right|  32916 || 7facfec1a3cfb892cce871f398e9cb6b
|-
| progs/h_demon.mdl  ||style=text-align:right|  34884 || 5253a0ea93d9624d73fb984ee339b52f
|-
| progs/h_dog.mdl  ||style=text-align:right|  24436 || a0b5f87522b3a769548c46cf3bb4223e
|-
| progs/h_guard.mdl  ||style=text-align:right|  5428 || 18a629b53b87392030df63b7806eb833
|-
| progs/h_knight.mdl  ||style=text-align:right|  7156 || 46a03fa72b0cdebcf58045aba2fafc13
|-
| progs/h_ogre.mdl  ||style=text-align:right|  14900 || 14eb06611c769e254d0531c05919bdf5
|-
| progs/h_player.mdl  ||style=text-align:right|  14708 || bf1773df7d3e19c5b211a1ee408f6b05
|-
| progs/h_shams.mdl  ||style=text-align:right|  37060 || ff1e04e18c57667991341a011fb6c363
|-
| progs/h_wizard.mdl  ||style=text-align:right|  14804 || 4bc6be40128f313cf9ad06c347310735
|-
| progs/h_zombie.mdl  ||style=text-align:right|  4484 || 0fdef7f7cd05a3209e0a163e87f69f8b
|-
| progs/invisibl.mdl  ||style=text-align:right|  7092 || 1e87d86af02e69db9c9f27f5fddc7a47
|-
| progs/invulner.mdl  ||style=text-align:right|  23920 || 8c8d83e4d50c3282d009b333a1280422
|-
| progs/knight.mdl  ||style=text-align:right|  101404 || 5328915db5c53e85cf75d46e7b747fb9
|-
| progs/lavaball.mdl  ||style=text-align:right|  8788 || 92af53d2145681e37877dbc1d12801b2
|-
| progs/m_g_key.mdl  ||style=text-align:right|  12820 || 192c2650a115c91706f6fa8fe68beb45
|-
| progs/missile.mdl  ||style=text-align:right|  57796 || 47f19f9e34954b93443c9759dd2e7ba0
|-
| progs/m_s_key.mdl  ||style=text-align:right|  12820 || 20837376b391cdd5c92e57b84e05687f
|-
| progs/ogre.mdl  ||style=text-align:right|  162036 || fbb592ca3788a576dd2f31fcf8c80fab
|-
| progs/player.mdl  ||style=text-align:right|  191852 || 405cef9a10d96cdabffb5e91312f8e5c
|-
| progs/quaddama.mdl  ||style=text-align:right|  39992 || 00b177ff272a4779097ea08344da8aff
|-
| progs/s_bubble.spr  ||style=text-align:right|  588 || 7c0887630ed468205292d8cb7abcae93
|-
| progs/s_explod.spr  ||style=text-align:right|  18972 || 766c6a92c26b54f68f7ff87c90d71cf2
|-
| progs/shambler.mdl  ||style=text-align:right|  98556 || 9b09375a0f614dc4081e363cc34f1185
|-
| progs/s_light.mdl  ||style=text-align:right|  27596 || ee6649ea5673989f3aa06213a8d65f76
|-
| progs/s_light.spr  ||style=text-align:right|  1080 || aff44ba238f4e1d0d504d6f9700aadb4
|-
| progs/soldier.mdl  ||style=text-align:right|  146288 || 5b6c30a984872b4273dd5861412d35c5
|-
| progs/spike.mdl  ||style=text-align:right|  1684 || be4cb73125f939284376080acc9887dd
|-
| progs/s_spike.mdl  ||style=text-align:right|  1684 || ebb1d58242b64a703623c8a33fcbd9e6
|-
| progs/suit.mdl  ||style=text-align:right|  51236 || 882a61f5eea7f9cdbc04800b963cef85
|-
| progs/v_axe.mdl  ||style=text-align:right|  57908 || 577dadcca2700068995c808dc7dec76f
|-
| progs/v_light.mdl  ||style=text-align:right|  56204 || 68733d4c690de88b5c3ba33e52be1c15
|-
| progs/v_nail2.mdl  ||style=text-align:right|  68732 || aacd1002ab02662cc1d3ff46885b553e
|-
| progs/v_nail.mdl  ||style=text-align:right|  54472 || ec9ba028b346da2f9674c2a521ff0c2f
|-
| progs/v_rock2.mdl  ||style=text-align:right|  58188 || 96edf1a3c7629987c200361523f780d7
|-
| progs/v_rock.mdl  ||style=text-align:right|  58548 || 7bea46b2a75fd7cff2fb99420e4c4e25
|-
| progs/v_shot2.mdl  ||style=text-align:right|  50816 || 922b3b687766ae0d7aeb73d44dec7035
|-
| progs/v_shot.mdl  ||style=text-align:right|  43852 || 1fd140b6856843e83cd9bf3966f5d7dd
|-
| progs/w_g_key.mdl  ||style=text-align:right|  7252 || c5c5f0d14b022f57294ad9aded318250
|-
| progs/wizard.mdl  ||style=text-align:right|  64472 || bf60986594f045e60e8aa6339d553ee7
|-
| progs/w_s_key.mdl  ||style=text-align:right|  7252 || ec02314a7d12439d36b4eb2dd0a641a8
|-
| progs/w_spike.mdl  ||style=text-align:right|  14336 || 8cf9245df2164e8062b01a220b508d6b
|-
| progs/zombie.mdl  ||style=text-align:right|  186084 || a923b1d03b9d237dd5ead9bd56acc900
|-
| progs/zom_gib.mdl  ||style=text-align:right|  10196 || cf42c938caa5b19f719d1f110b1dc6d4
|-
| quake.rc  ||style=text-align:right|  293 || 411d42958aaeae141813f9ebfcf5233f
|-
| sound/ambience/buzz1.wav  ||style=text-align:right|  36308 || 346a00c795c6f1f1338ade6fc350b3fe
|-
| sound/ambience/comp1.wav  ||style=text-align:right|  62734 || f91a1120de804f7cd4dbba4f12c748e9
|-
| sound/ambience/drip1.wav  ||style=text-align:right|  137736 || 2306a76162eeda3d0812c516bc99aa7a
|-
| sound/ambience/drone6.wav  ||style=text-align:right|  18522 || 322853ddb42ad2a205579b5cca8e2e8c
|-
| sound/ambience/fire1.wav  ||style=text-align:right|  24064 || 610d3985ed8133988e8de3bec2b9cbbe
|-
| sound/ambience/fl_hum1.wav  ||style=text-align:right|  50154 || e4628499702e004c4bacd282a3ecb8c0
|-
| sound/ambience/hum1.wav  ||style=text-align:right|  40166 || 486bfa737c35b0c9dda57cbee2a540af
|-
| sound/ambience/suck1.wav  ||style=text-align:right|  110392 || 2e99e4d1fe1501d5191c8157d3063cb6
|-
| sound/ambience/swamp1.wav  ||style=text-align:right|  68524 || 29ffb678d78997eb6c227677c86ea4f8
|-
| sound/ambience/swamp2.wav  ||style=text-align:right|  68526 || 356aa1e875da846e72d8f17bbb699a5b
|-
| sound/ambience/thunder1.wav  ||style=text-align:right|  41492 || cefd6ced4b5bc79fcece1003238566f6
|-
| sound/ambience/water1.wav  ||style=text-align:right|  55784 || 6eeaae0a3450652d2be0782895297ee4
|-
| sound/ambience/wind2.wav  ||style=text-align:right|  28610 || 030cf8dd2b00a12454b5b35a89d03914
|-
| sound/ambience/windfly.wav  ||style=text-align:right|  22140 || c7be01e6d324e66883f70aa0072a99b0
|-
| sound/boss1/death.wav  ||style=text-align:right|  27600 || 43469b1acd35b67107da5da82e1df911
|-
| sound/boss1/out1.wav  ||style=text-align:right|  50344 || 847a6f971f6905dfaffd70b30d18a4b1
|-
| sound/boss1/pain.wav  ||style=text-align:right|  17700 || 49112740c0ff421f9272b9e8efc748cd
|-
| sound/boss1/sight1.wav  ||style=text-align:right|  24768 || 427dd600e6b28c9402212adcc5d652c7
|-
| sound/boss1/throw.wav  ||style=text-align:right|  11526 || 9b6e9ff2c8df448f7fd4b5315e60ddda
|-
| sound/buttons/airbut1.wav  ||style=text-align:right|  10672 || 9d2e14e7176842a0dce909a43d38873d
|-
| sound/buttons/switch02.wav  ||style=text-align:right|  3746 || d2e9cba3a353edc65115f6f5c574403c
|-
| sound/buttons/switch04.wav  ||style=text-align:right|  3666 || ff47857a58d3faefb2b94a37d7ba4f26
|-
| sound/buttons/switch21.wav  ||style=text-align:right|  6318 || 3605b0d061a9baf185c6ab7614534531
|-
| sound/demon/ddeath.wav  ||style=text-align:right|  9140 || 62a48dcd405ca55c9ce18497e36faa0e
|-
| sound/demon/dhit2.wav  ||style=text-align:right|  7142 || 9e741696e4d0d66e30e718fc70ec186e
|-
| sound/demon/djump.wav  ||style=text-align:right|  8494 || 791ac9d6b6593808316145443cb7e7a0
|-
| sound/demon/dland2.wav  ||style=text-align:right|  4400 || db14c7b01838f826b7a712075f9026fd
|-
| sound/demon/dpain1.wav  ||style=text-align:right|  6282 || 5e6c485878393c9bebb0d0e6659bc479
|-
| sound/demon/idle1.wav  ||style=text-align:right|  9098 || 7a83f8caf3d5b1172a7dc5afdc942988
|-
| sound/demon/sight2.wav  ||style=text-align:right|  8804 || 65171c355c22a5069520b0881677ae3c
|-
| sound/dog/dattack1.wav  ||style=text-align:right|  8154 || 0c47c9d4aaae0bf3159a288b674f4a35
|-
| sound/dog/ddeath.wav  ||style=text-align:right|  14912 || b0e7760b1d7286a028ff9773f6802958
|-
| sound/dog/dpain1.wav  ||style=text-align:right|  7240 || 28e5ab93b41e13e2916433283a5d1a46
|-
| sound/dog/dsight.wav  ||style=text-align:right|  6722 || 0edc290765bac1fb4fe03ca55bc7c225
|-
| sound/dog/idle.wav  ||style=text-align:right|  6870 || 42bd6026ff32bd94523ad9f8fe8362cc
|-
| sound/doors/airdoor1.wav  ||style=text-align:right|  13654 || 9b91930e8c2fdece31a2362296891122
|-
| sound/doors/airdoor2.wav  ||style=text-align:right|  8594 || 29fd823d1c14ca42a9a89c716b26f4cd
|-
| sound/doors/basesec1.wav  ||style=text-align:right|  13930 || eb2363fed42724f55e8f55f96c335bcf
|-
| sound/doors/basesec2.wav  ||style=text-align:right|  10238 || 8d163a56607c9cf64a270a156c1c5cef
|-
| sound/doors/basetry.wav  ||style=text-align:right|  10518 || a5108d5c51281ab55c0baf884cbe8cbe
|-
| sound/doors/baseuse.wav  ||style=text-align:right|  16486 || f43fee91efe813a5eb34e9d72918fdb9
|-
| sound/doors/ddoor1.wav  ||style=text-align:right|  7738 || dff86a26139cdd49a193d5ed7ebf6ae1
|-
| sound/doors/ddoor2.wav  ||style=text-align:right|  5904 || 4a9d0b0825d0302ce465569d1e35fbcf
|-
| sound/doors/doormv1.wav  ||style=text-align:right|  14036 || 3fd379aec80a2ad8105c0c89ba5b40e6
|-
| sound/doors/drclos4.wav  ||style=text-align:right|  12814 || 83df1865a0c9fa5d02c2f137564c57de
|-
| sound/doors/hydro1.wav  ||style=text-align:right|  11094 || b1703980a20e624bc3366ccf55ca617e
|-
| sound/doors/hydro2.wav  ||style=text-align:right|  10700 || b1866f5b3950788ccf4206444ab64bc7
|-
| sound/doors/latch2.wav  ||style=text-align:right|  7338 || ad2378ca21a0ca529df328261e07aed5
|-
| sound/doors/medtry.wav  ||style=text-align:right|  7828 || ebb536bec2cdfd22c25b35793c055339
|-
| sound/doors/meduse.wav  ||style=text-align:right|  10718 || 4522aada194b23eb33b541cbcc755cf6
|-
| sound/doors/runetry.wav  ||style=text-align:right|  13524 || c433bae9e2ab508712f87dc2cacc82c8
|-
| sound/doors/runeuse.wav  ||style=text-align:right|  17364 || b4bcfd525a26f5b5ecc9d392430d9079
|-
| sound/doors/stndr1.wav  ||style=text-align:right|  12620 || 5bae2183885e18d65d69624e85249fd9
|-
| sound/doors/stndr2.wav  ||style=text-align:right|  11470 || f43a75c917effff09ef7be8a321c8b49
|-
| sound/doors/winch2.wav  ||style=text-align:right|  14872 || a4edffdfede7dbaed37db526c26e2b6d
|-
| sound/hknight/hit.wav  ||style=text-align:right|  6260 || fece24e2548f1d769e8fce39a5c87d01
|-
| sound/items/armor1.wav  ||style=text-align:right|  7714 || 186d29f2baf35b8c280bc97754606fad
|-
| sound/items/damage2.wav  ||style=text-align:right|  33012 || 14e53b7617ffe315a7c3f8d89652e51c
|-
| sound/items/damage3.wav  ||style=text-align:right|  12894 || baf754aec7ed4baba16760ac85513184
|-
| sound/items/damage.wav  ||style=text-align:right|  23374 || 8cde8b9278ca4922a4ec7ead6e5ee01b
|-
| sound/items/health1.wav  ||style=text-align:right|  7958 || 52a2c4f808db4edd8393de0de618c91f
|-
| sound/items/inv1.wav  ||style=text-align:right|  13728 || 5850cab55d6197d0e76d9f0a22ba10be
|-
| sound/items/inv2.wav  ||style=text-align:right|  33216 || 4edcd38a2c6adc5305636dd7afd5ef60
|-
| sound/items/inv3.wav  ||style=text-align:right|  33320 || 325c268be05b42a019ccb92e6993ab9e
|-
| sound/items/itembk2.wav  ||style=text-align:right|  9910 || 270c688b3cb884f5d4e5ffd8ccc934a1
|-
| sound/items/protect2.wav  ||style=text-align:right|  34012 || 25627a4bd2b4c6054cfd2fc4bf69ddc2
|-
| sound/items/protect3.wav  ||style=text-align:right|  23364 || 7b9374d67f6d59e524bba2af236ca30a
|-
| sound/items/protect.wav  ||style=text-align:right|  22536 || d839d5a84f811ce8a0e28616891bf1a7
|-
| sound/items/r_item1.wav  ||style=text-align:right|  6822 || 3fc0d0ae4a71c9fbfe548f38626c6a08
|-
| sound/items/r_item2.wav  ||style=text-align:right|  7448 || 384ffefe795d99df75f381596a0f1976
|-
| sound/items/suit2.wav  ||style=text-align:right|  33254 || 0a9d2766a5b805cb5794f9bea57e6585
|-
| sound/items/suit.wav  ||style=text-align:right|  15854 || da413f34023d219f1e34fde50a037be0
|-
| sound/knight/idle.wav  ||style=text-align:right|  11064 || 1b5c3981bee078318af346d8fe8090b9
|-
| sound/knight/kdeath.wav  ||style=text-align:right|  10688 || 11a96f48a8f2433c23beae299c8fb96e
|-
| sound/knight/khurt.wav  ||style=text-align:right|  5586 || 32c9f48dd4a6a87752aedf56fe8de668
|-
| sound/knight/ksight.wav  ||style=text-align:right|  13514 || eb75b4af348c88e84d8c87c19d5976fa
|-
| sound/knight/sword1.wav  ||style=text-align:right|  2306 || 93045b5f3178413dc6b01ec2869d1f73
|-
| sound/knight/sword2.wav  ||style=text-align:right|  2784 || 82d1a7c263cd3df7b060dee2f7f8b1fd
|-
| sound/misc/h2ohit1.wav  ||style=text-align:right|  12972 || 49ecb03f4f10862453656a67598f8b8a
|-
| sound/misc/medkey.wav  ||style=text-align:right|  10020 || 0e3ae5626a47d81e4166539e355e31bb
|-
| sound/misc/menu1.wav  ||style=text-align:right|  5738 || 12c36546601c385bc47c9ca9420b7eee
|-
| sound/misc/menu2.wav  ||style=text-align:right|  10672 || 39b01ea6feb3ec8dbd6d8ee3e5e966c4
|-
| sound/misc/menu3.wav  ||style=text-align:right|  3010 || 4a03dc2fd56831b855dab761eac4f7de
|-
| sound/misc/null.wav  ||style=text-align:right|  1244 || 811989e09124f54cb27fe6154b0f1018
|-
| sound/misc/outwater.wav  ||style=text-align:right|  5018 || 35732412412ddb5ed418633bb0123bbe
|-
| sound/misc/power.wav  ||style=text-align:right|  19832 || 9f2c3a18d9fc8d9cecfac6db3aad6bc6
|-
| sound/misc/r_tele1.wav  ||style=text-align:right|  8036 || c2194171b4c446e136ed7514fbb098a5
|-
| sound/misc/r_tele2.wav  ||style=text-align:right|  17324 || 0ce662ac90fb3658d69320d1be4025c1
|-
| sound/misc/r_tele3.wav  ||style=text-align:right|  18016 || 122ef44813edcfe7391578fd29e729d2
|-
| sound/misc/r_tele4.wav  ||style=text-align:right|  9068 || 0097b5747ccc70d5b12fc6838aff02c2
|-
| sound/misc/r_tele5.wav  ||style=text-align:right|  22042 || a82334cbb66d12f28cce9e71c90ea50b
|-
| sound/misc/runekey.wav  ||style=text-align:right|  14578 || 6b21a2e5878011da50fdee0a301d3e34
|-
| sound/misc/secret.wav  ||style=text-align:right|  6610 || a02ceefcc24b1ebf5c164a1e1acfb05f
|-
| sound/misc/talk.wav  ||style=text-align:right|  1810 || d5b25d4df59d92ac5016e88689ea60c1
|-
| sound/misc/trigger1.wav  ||style=text-align:right|  20230 || dc927c8a1d0a9bd59fbc5dd91ae1d812
|-
| sound/misc/water1.wav  ||style=text-align:right|  3926 || d8291c762acb1edf24927fdcc0f6a6cd
|-
| sound/misc/water2.wav  ||style=text-align:right|  3340 || 049e8e7e7b30d4d8038afb7248bdd977
|-
| sound/ogre/ogdrag.wav  ||style=text-align:right|  12396 || 658587dc89aaefae5ca3f058f7ff4227
|-
| sound/ogre/ogdth.wav  ||style=text-align:right|  13892 || de98e7bb9e70586edddd3308cfded3db
|-
| sound/ogre/ogidle2.wav  ||style=text-align:right|  11254 || 196ae9c33a4311160e1d5f3da878ab09
|-
| sound/ogre/ogidle.wav  ||style=text-align:right|  12894 || 177c829840a87c885bbc8951e7ce962e
|-
| sound/ogre/ogpain1.wav  ||style=text-align:right|  7898 || ac6d133d7720c12df49813fe10e683b5
|-
| sound/ogre/ogsawatk.wav  ||style=text-align:right|  16154 || 7257bdfd014bb61d778b8f88cb65d560
|-
| sound/ogre/ogwake.wav  ||style=text-align:right|  19356 || 3296459e495c4c12b31179d4eeffac19
|-
| sound/plats/medplat1.wav  ||style=text-align:right|  16378 || b73215aa6627c8b5b90fce8d260d48d0
|-
| sound/plats/medplat2.wav  ||style=text-align:right|  7338 || 1fc6c3772917a1a8155d04fa52e17005
|-
| sound/plats/plat1.wav  ||style=text-align:right|  20248 || 5d43ed85d896ba926f459e06ba6635d5
|-
| sound/plats/plat2.wav  ||style=text-align:right|  7338 || 49d7ab0fd726cd652eb6e5756fce61b9
|-
| sound/plats/train1.wav  ||style=text-align:right|  21430 || b589ae8262046361d9dca39d6b8f693a
|-
| sound/plats/train2.wav  ||style=text-align:right|  5870 || 640017e1b870d643e3bca29d499c72ee
|-
| sound/player/axhit1.wav  ||style=text-align:right|  6906 || 149b2371334da318386325182924eaca
|-
| sound/player/axhit2.wav  ||style=text-align:right|  2434 || fc01909318455f5310efa2457a370897
|-
| sound/player/death1.wav  ||style=text-align:right|  10170 || ba005f5488d4ee78dabf613a03f33a5f
|-
| sound/player/death2.wav  ||style=text-align:right|  8026 || 20477d2e7c84aac1bef95d32c9c702dd
|-
| sound/player/death3.wav  ||style=text-align:right|  10918 || 7b206ba8e1fa28d8605b50e3f3200f11
|-
| sound/player/death4.wav  ||style=text-align:right|  14126 || 1b0f27f4d41b748d3cc5c3d56bd917f8
|-
| sound/player/death5.wav  ||style=text-align:right|  14946 || 7efe84195cfa97515aad2d7f96f25346
|-
| sound/player/drown1.wav  ||style=text-align:right|  8908 || 732f0416af6990e028110380bcb36f0d
|-
| sound/player/drown2.wav  ||style=text-align:right|  3114 || 29ee1f287879acce29b15d4722668bc2
|-
| sound/player/gasp1.wav  ||style=text-align:right|  8702 || b06cbc370c8c2c163dc4d487e8b673c7
|-
| sound/player/gasp2.wav  ||style=text-align:right|  13134 || 30aece9d8779764620c7f866bfb06edb
|-
| sound/player/gib.wav  ||style=text-align:right|  14424 || 26fa9942078125388f34b71546615068
|-
| sound/player/h2odeath.wav  ||style=text-align:right|  18104 || 73b0f4dfae07f6e49112cadfe202735c
|-
| sound/player/h2ojump.wav  ||style=text-align:right|  11438 || cd421b96410971bb1a4f21d3936a3805
|-
| sound/player/inh2o.wav  ||style=text-align:right|  11340 || d4c1a27c4d07e8dfdf18a4b1a880c610
|-
| sound/player/inlava.wav  ||style=text-align:right|  10958 || c37875a082900716b7af88d2d990f55c
|-
| sound/player/land2.wav  ||style=text-align:right|  6204 || 6ba534256a779d66d9d9dabb90e63c8b
|-
| sound/player/land.wav  ||style=text-align:right|  2434 || e34328a40358d98f0f95403b9e27ec1e
|-
| sound/player/lburn1.wav  ||style=text-align:right|  6682 || 3c447c72385defe97c060771077d8ba0
|-
| sound/player/lburn2.wav  ||style=text-align:right|  6076 || 6849ee8dbd91ec82ece016fbd39b0a5c
|-
| sound/player/pain1.wav  ||style=text-align:right|  3394 || d7ac9df7540b791f952ca2a681c0265b
|-
| sound/player/pain2.wav  ||style=text-align:right|  2710 || 513e054b64d4fb61f31384d59e123020
|-
| sound/player/pain3.wav  ||style=text-align:right|  4854 || aafc61ad4e16cc5cdd2db2100796b494
|-
| sound/player/pain4.wav  ||style=text-align:right|  4840 || f655ef2045bc55473303b27546aa6fc0
|-
| sound/player/pain5.wav  ||style=text-align:right|  8020 || f8551a73cb89396042687baa8c68b5c2
|-
| sound/player/pain6.wav  ||style=text-align:right|  5462 || 70062eabf96288d307280fb601ce0ee2
|-
| sound/player/plyrjmp8.wav  ||style=text-align:right|  3888 || d4a552d8f627c7f3b933568c4a74c913
|-
| sound/player/slimbrn2.wav  ||style=text-align:right|  12468 || b17c18a9f81a952f2d41f65b5180f210
|-
| sound/player/teledth1.wav  ||style=text-align:right|  14414 || c226c7f041187ba058d8112cc0190b56
|-
| sound/player/tornoff2.wav  ||style=text-align:right|  7726 || 03ec1c805b307b8fe4c4052f8332a5e5
|-
| sound/player/udeath.wav  ||style=text-align:right|  16082 || afe674f287efb6197da2cea0c0b1d2f8
|-
| sound/shambler/melee1.wav  ||style=text-align:right|  4718 || 77fe6240973a204b757a427ebf66bcfd
|-
| sound/shambler/melee2.wav  ||style=text-align:right|  5966 || 3be31638d769e3d690c92311dfafdeac
|-
| sound/shambler/sattck1.wav  ||style=text-align:right|  8036 || ec8c3f79ea42d09154cb8975ada1b21c
|-
| sound/shambler/sboom.wav  ||style=text-align:right|  11672 || 9834601a645d7d1f62001b2a314ec18f
|-
| sound/shambler/sdeath.wav  ||style=text-align:right|  21106 || e0e62d229a985a6e39218c6488599059
|-
| sound/shambler/shurt2.wav  ||style=text-align:right|  4302 || 1e87631ede95e061a75f9c31629ac0b8
|-
| sound/shambler/sidle.wav  ||style=text-align:right|  5646 || 368a240e6c3e877793352a79c1828386
|-
| sound/shambler/smack.wav  ||style=text-align:right|  5300 || bd8c634c9894348360fec7b7419d1649
|-
| sound/shambler/ssight.wav  ||style=text-align:right|  15420 || 657107577460d5acf3157dec97e07a89
|-
| sound/soldier/death1.wav  ||style=text-align:right|  8434 || fe25952af40b536c3bb67bfca58062eb
|-
| sound/soldier/idle.wav  ||style=text-align:right|  9802 || 4cdfbdda8fb5f40b125c7bcddb6e8914
|-
| sound/soldier/pain1.wav  ||style=text-align:right|  5000 || 54d3b05fdcecf7480034858f2b22b06c
|-
| sound/soldier/pain2.wav  ||style=text-align:right|  7838 || e2bbc9d3405b9b9fdae76d2fc298fc2f
|-
| sound/soldier/sattck1.wav  ||style=text-align:right|  14302 || b76ac35f900f280a7a7996da7e404362
|-
| sound/soldier/sight1.wav  ||style=text-align:right|  12716 || e2a39533250ddd1b08053d5c4ebf7fd0
|-
| sound/weapons/ax1.wav  ||style=text-align:right|  3308 || 237d4d819d02ad37849a8a895cc410e1
|-
| sound/weapons/bounce.wav  ||style=text-align:right|  5864 || fced668c6558a9505abf5014d60528a6
|-
| sound/weapons/grenade.wav  ||style=text-align:right|  8364 || d2b6fa131933f203eba2a282276e88df
|-
| sound/weapons/guncock.wav  ||style=text-align:right|  14430 || 6a63452167cc106e756518536446844f
|-
| sound/weapons/lhit.wav  ||style=text-align:right|  26028 || fefd021d0bd35a1f8da8870f1c06abb9
|-
| sound/weapons/lock4.wav  ||style=text-align:right|  3876 || 3fd93222258d5b1500b150f021c94519
|-
| sound/weapons/lstart.wav  ||style=text-align:right|  56378 || abe1abf6dcadcda5930b0684c7ea820a
|-
| sound/weapons/pkup.wav  ||style=text-align:right|  5174 || 0aa6f0a7d609e1a56fd535a06d1bb56e
|-
| sound/weapons/r_exp3.wav  ||style=text-align:right|  17478 || 57db026474fc76ba7f38cea24eaaf8cf
|-
| sound/weapons/ric1.wav  ||style=text-align:right|  4308 || a31166b4bbb4509ac3004a01f7477ee9
|-
| sound/weapons/ric2.wav  ||style=text-align:right|  10838 || a180b447c0527e603cea54a9aefd6139
|-
| sound/weapons/ric3.wav  ||style=text-align:right|  12638 || 8a773bbb585540ddce256151162f3a2c
|-
| sound/weapons/rocket1i.wav  ||style=text-align:right|  9660 || fb4fdf345d805cf6980c4c695974effc
|-
| sound/weapons/sgun1.wav  ||style=text-align:right|  22992 || 95a14815e48deb323d0cf8251d728ac7
|-
| sound/weapons/shotgn2.wav  ||style=text-align:right|  8694 || cb561cefbf472232334b419af050e5a0
|-
| sound/weapons/spike2.wav  ||style=text-align:right|  12642 || 9189d811855f108da4a1e2d34dc7c633
|-
| sound/weapons/tink1.wav  ||style=text-align:right|  1252 || 297ba8706625fcf05887edb393e9a441
|-
| sound/wizard/hit.wav  ||style=text-align:right|  7332 || 6598d669334df977f1f97b95288edf11
|-
| sound/wizard/wattack.wav  ||style=text-align:right|  25912 || b3568a47439f81779d40335e76f5bc2d
|-
| sound/wizard/wdeath.wav  ||style=text-align:right|  20684 || 99d9c71343bc23222abb92119d404400
|-
| sound/wizard/widle1.wav  ||style=text-align:right|  13464 || b22b1dd9f66879b3447d36ab584316c7
|-
| sound/wizard/widle2.wav  ||style=text-align:right|  23094 || 7178fd83df227360564adef01bed92c6
|-
| sound/wizard/wpain.wav  ||style=text-align:right|  8686 || bd7e59ab7d7b835f9ed8ab51950914de
|-
| sound/wizard/wsight.wav  ||style=text-align:right|  13078 || df5949057c750528917c6cb32b7fd9fd
|-
| sound/zombie/idle_w2.wav  ||style=text-align:right|  17192 || d2bb59b9d7ac71097c07123a23525641
|-
| sound/zombie/z_fall.wav  ||style=text-align:right|  3062 || 6968318b2d196c6d54bc707d8a390547
|-
| sound/zombie/z_gib.wav  ||style=text-align:right|  16226 || 199dda66ade8d6f0ef4897e4d7608c0d
|-
| sound/zombie/z_hit.wav  ||style=text-align:right|  6166 || 6c66ab3e6b149bf35956a4bbc0057acb
|-
| sound/zombie/z_idle1.wav  ||style=text-align:right|  13244 || 21088a7b38b1124d7ec72e58d5ab93a6
|-
| sound/zombie/z_idle.wav  ||style=text-align:right|  16734 || e5e570e38c4405111004190a79f0e925
|-
| sound/zombie/z_miss.wav  ||style=text-align:right|  10734 || 96fad96a8c3bc6f7bcc5da6c82678da2
|-
| sound/zombie/z_pain1.wav  ||style=text-align:right|  15374 || fcd83b89a94b0cadbe1361a4df080ec0
|-
| sound/zombie/z_pain.wav  ||style=text-align:right|  12218 || 56637968b8309bd2f825153330bbdfc0
|-
| sound/zombie/z_shot1.wav  ||style=text-align:right|  3068 || 561afb69b7851923a8fb3b54e3e13c96
|-
|}&lt;/tt&gt;

The only difference to fc989b37572fae074e8ffda0ce4d5297 is an updated progs.dat.

{{todo|todo=Multiple to do items listed above, detail out the contents of various pak files}}
{{todo|todo=different releases have different pak0.pak files}}</text>
      <sha1>lwu1biqv6fv6r631w84rl2wm42ftcqu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3273</id>
      <parentid>3271</parentid>
      <timestamp>2014-10-05T19:02:25Z</timestamp>
      <contributor>
        <ip>192.168.4.107</ip>
      </contributor>
      <text xml:space="preserve" bytes="67144">The '''''pak0.pak''''' file that comes with Quake is required by all Quake [[engines]]. It contains the maps, models, programs, sounds, and skins required to play Quake Episode 1, ''Dimension of the Doomed''. It is expected to be in the ID1 subfolder of the Quake root folder.

[[PAK file]]s are typically named ''pak0.pak'', ''pak1.pak'', ''pak2.pak'', and so on. Quake mission packs and other Quake-based games often have their own ''pak0.pak'' files, which live in a different folder, not the ID1 folder.

The ID1 ''pak0.pak'' is distributed with both the shareware and the registered/commercial editions of Quake.

In some editions, including the downloadable shareware (''quake106.zip'') from id Software, ''pak0.pak'' is embedded in another archive, ''[[resource.1]]''. The files in this archive are LZH-encoded using the lh5 algorithm. If you can't or don't want to run the DOS/Win32 Quake installer program it comes with, then you'll need a compatible extractor program to get ''pak0.pak'' out of the ''resource.1'' archive.


== Versions ==
&lt;tt&gt;
{| class=&quot;wikitable&quot;
! Version !! Timestamp !! Size !! md5
|-
| Registered Version 1.01 (as well as Shareware Version 1.01 on that [https://www.quaddicted.com/library/quake_registered_1.01_id disc]) || 1996-07-12 ||style=text-align:right|  18276119 || fc989b37572fae074e8ffda0ce4d5297
|-
| Shareware Version 1.01 ([https://www.quaddicted.com/library/quake_episode_1_shareware Shareware disc]) || 1996-07-12 ||style=text-align:right|  18276119 || 85fc9cee2035b66290da1e33be2ac86b
|-
| Registered Version 1.06 || 1996-10-01 14:25:58 ||style=text-align:right|  18689235 || 5906e5998fc3d896ddaf5e6a62e03abb
|-
|}&lt;/tt&gt;

=== fc989b37572fae074e8ffda0ce4d5297 ===
The [[id1]] ''pak0.pak'' with the md5sum fc989b37572fae074e8ffda0ce4d5297 contains the following folders &amp; files:
&lt;tt&gt;
{| class=&quot;wikitable collapsible collapsed&quot;
|-
! Path !! Size !! md5
|-
| default.cfg  ||style=text-align:right|  1914 || fc989b37572fae074e8ffda0ce4d5297
|-
| demo1.dem  ||style=text-align:right|  184471 || 85ec0141ab24d9732e487d1aafa791f0
|-
| demo2.dem  ||style=text-align:right|  152705 || fa5c3daf7a57954cd95f94b698a7e420
|-
| demo3.dem  ||style=text-align:right|  197679 || 691f37e5715ea2863c1d8092a6429824
|-
| end1.bin  ||style=text-align:right|  4000 || 92ae51961ec2f429dfe9bea1138fbd5d
|-
| gfx/bigbox.lmp  ||style=text-align:right|  5192 || e597771ac6149b2b071ebfd24981ea04
|-
| gfx/box_bl.lmp  ||style=text-align:right|  72 || 5b094c37c2c1c2eebe37f84117dea182
|-
| gfx/box_bm.lmp  ||style=text-align:right|  136 || 44621236738e2bf8d669e53dca887278
|-
| gfx/box_br.lmp  ||style=text-align:right|  72 || 86597d5325b472caf5644644033e5cab
|-
| gfx/box_ml.lmp  ||style=text-align:right|  72 || adcea286ba0ac01084fd0c131b16ffdd
|-
| gfx/box_mm2.lmp  ||style=text-align:right|  136 || b850bcec189d909e7a0f796111a11249
|-
| gfx/box_mm.lmp  ||style=text-align:right|  136 || 700b4884b1a3c6aa7356a43014261866
|-
| gfx/box_mr.lmp  ||style=text-align:right|  72 || e30d9ea783ef7dd50101682f03ba40d7
|-
| gfx/box_tl.lmp  ||style=text-align:right|  72 || 3903d3d814e37c55790ac0ccfef2b925
|-
| gfx/box_tm.lmp  ||style=text-align:right|  136 || 7cb85ccbf8e7d2532da2a839a7cef348
|-
| gfx/box_tr.lmp  ||style=text-align:right|  72 || 5c5e72746af821a4cf8437d8fecc53c7
|-
| gfx/colormap.lmp  ||style=text-align:right|  16385 || 0d793b70bffafbd666fc5c88d6e15e9d
|-
| gfx/complete.lmp  ||style=text-align:right|  4616 || db6a00dfbe2c62a43c261e5622297c4a
|-
| gfx/conback.lmp  ||style=text-align:right|  64008 || 9eb6f9c47870bf42985d9382958a5c12
|-
| gfx/dim_drct.lmp  ||style=text-align:right|  3352 || 50ea11fe8c4d9db92863bdcd03b89df5
|-
| gfx/dim_ipx.lmp  ||style=text-align:right|  3352 || 0bef9943487f0611225bf0a5c0fe5dd4
|-
| gfx/dim_modm.lmp  ||style=text-align:right|  3352 || 3288f03144f06b95cadafa9458a77b1d
|-
| gfx/dim_mult.lmp  ||style=text-align:right|  3352 || 348b7369227f2d7e9d0daccbf6c9344d
|-
| gfx/dim_tcp.lmp  ||style=text-align:right|  3352 || 7dc8bbb01d7c90cd51c28da0ff6ed900
|-
| gfx/finale.lmp  ||style=text-align:right|  6920 || b6e49409d344e0344273d86ea33fe35f
|-
| gfx/help0.lmp  ||style=text-align:right|  64008 || b392ac30ad49252b51ec934ed855c20f
|-
| gfx/help1.lmp  ||style=text-align:right|  64008 || 857543c69245117a606044ea63adac9a
|-
| gfx/help2.lmp  ||style=text-align:right|  64008 || 882dd5920ea9c19f637f32084de9788a
|-
| gfx/help3.lmp  ||style=text-align:right|  64008 || a89d169524920d896128009467deebfc
|-
| gfx/help4.lmp  ||style=text-align:right|  64008 || c72d67c84ae6b403fae5f08d3e5c3bc6
|-
| gfx/help5.lmp  ||style=text-align:right|  64008 || 12203d7cdec35c4f51622dd90ec92093
|-
| gfx/inter.lmp  ||style=text-align:right|  23048 || f6eabe0d742380c7b47a9ee44170993d
|-
| gfx/loading.lmp  ||style=text-align:right|  3464 || 3249bc994266529a1748c06bfbb24bfa
|-
| gfx/mainmenu.lmp  ||style=text-align:right|  26888 || 8122e2a0b8888f9d1ebef149551b6434
|-
| gfx/menudot1.lmp  ||style=text-align:right|  392 || bfdb08d84d580abcfbacc1c9abd62bfb
|-
| gfx/menudot2.lmp  ||style=text-align:right|  392 || 6c6d2176e00edbe530bb1db118aaa6dc
|-
| gfx/menudot3.lmp  ||style=text-align:right|  392 || 2527a05f6162efb3e4bc5311d9e010d5
|-
| gfx/menudot4.lmp  ||style=text-align:right|  392 || 90ea6be033b39b139b3779932d266f33
|-
| gfx/menudot5.lmp  ||style=text-align:right|  392 || c9beb9600c35e458d0f83b6cf1e1c692
|-
| gfx/menudot6.lmp  ||style=text-align:right|  392 || 31b9a6ec1d12a2bd56b955185a9e72d3
|-
| gfx/menuplyr.lmp  ||style=text-align:right|  2696 || 9eebe617ff51c4ce43f85ca1a6920d5b
|-
| gfx/mp_menu.lmp  ||style=text-align:right|  14856 || c6416b8f7f5262a5a19b9ce4be1fd9ce
|-
| gfx/netmen1.lmp  ||style=text-align:right|  3352 || 5bc6a8d8cfdfd7e940e933812954367a
|-
| gfx/netmen2.lmp  ||style=text-align:right|  3352 || c8aafb649a653e90fc5eb7b7a2b3ca2e
|-
| gfx/netmen3.lmp  ||style=text-align:right|  3352 || 11c9372d0e64057a1ec8251f596b820d
|-
| gfx/netmen4.lmp  ||style=text-align:right|  3352 || 74ec672b1312699be2eeaf25a68e4582
|-
| gfx/netmen5.lmp  ||style=text-align:right|  3352 || 231f8a9ea4ba364f517db0e9f7f1ba72
|-
| gfx/palette.lmp  ||style=text-align:right|  768 || 79bc149d4f2fb0bd68cd8400a3fd87d4
|-
| gfx/pause.lmp  ||style=text-align:right|  3080 || 5aa67f927719e4a9eb3e020e75fea969
|-
| gfx/p_load.lmp  ||style=text-align:right|  2504 || 27fe08071058385529b0b8ad746421e7
|-
| gfx/p_multi.lmp  ||style=text-align:right|  5192 || 5a307c7d11da20a4772ad9c00b9f4309
|-
| gfx/p_option.lmp  ||style=text-align:right|  3464 || 83a3bf4459bce3fe85857a0aa647b90a
|-
| gfx/p_save.lmp  ||style=text-align:right|  2120 || 0d2bb5fa5524e0180a85bf273094cd1f
|-
| gfx/qplaque.lmp  ||style=text-align:right|  4616 || f4de79557c75e26b85ea84fb6029a5f3
|-
| gfx/ranking.lmp  ||style=text-align:right|  4040 || 919b13d1f7fdd0082ec0f94699f3b681
|-
| gfx/sell.lmp  ||style=text-align:right|  64008 || 878db3866e8b38c5b8d951aef516358c
|-
| gfx/sp_menu.lmp  ||style=text-align:right|  14856 || f624aa79778970ecb8ef518b5ab435f6
|-
| gfx/ttl_cstm.lmp  ||style=text-align:right|  4424 || 4ee84e0e7fa93f0e93d26efb1e726a4d
|-
| gfx/ttl_main.lmp  ||style=text-align:right|  2312 || 07e1c8e189e2463befcfc44f5ecf8dcb
|-
| gfx/ttl_sgl.lmp  ||style=text-align:right|  3080 || 25d5360228da738f091063eaeb7c6aa8
|-
| gfx/vidmodes.lmp  ||style=text-align:right|  5192 || 18a97f403057777f262188903f485fe8
|-
| gfx.wad  ||style=text-align:right|  112828 || cde5b5890c8902c02a2f271abe8f4a1f
|-
| maps/b_batt0.bsp  ||style=text-align:right|  5044 || 00bc989f4c8d2570a2826a63c7356a27
|-
| maps/b_batt1.bsp  ||style=text-align:right|  4620 || 555bc0cb0b5c2ad2ed0110f307e70679
|-
| maps/b_bh100.bsp  ||style=text-align:right|  8820 || 62f78bb5143265f037b79ddd077c50ed
|-
| maps/b_bh10.bsp  ||style=text-align:right|  3936 || e80cde9f185612f669fc100f825ca84f
|-
| maps/b_bh25.bsp  ||style=text-align:right|  8872 || 032d70dbf8669b3627b82b41f31488bd
|-
| maps/b_explob.bsp  ||style=text-align:right|  10220 || d8c9db3cfa0264678afc580143f665ea
|-
| maps/b_nail0.bsp  ||style=text-align:right|  5044 || c8d7ec0bdee74e0c1e69e8dbe939117d
|-
| maps/b_nail1.bsp  ||style=text-align:right|  5044 || ea08b2bd6aa19ece0307f75c491e5d24
|-
| maps/b_rock0.bsp  ||style=text-align:right|  2956 || 19ce64cd248a4459bf37b45e6e7c1219
|-
| maps/b_rock1.bsp  ||style=text-align:right|  2944 || b4cdb75094cd7218ed2b0475aefabe80
|-
| maps/b_shell0.bsp  ||style=text-align:right|  5044 || 574824b3c52661959d633a76dc823859
|-
| maps/b_shell1.bsp  ||style=text-align:right|  5044 || dc8b8dcb490e204e615b2b9cdc673296
|-
| maps/e1m1.bsp  ||style=text-align:right|  1365176 || 84cae48010619bcc945426b91bc03ade
|-
| maps/e1m2.bsp  ||style=text-align:right|  1332228 || caff91afbe41f3eac4dda65cee0083c9
|-
| maps/e1m3.bsp  ||style=text-align:right|  1249944 || f20eaa5692e94ab889c4ade9e1c116c7
|-
| maps/e1m4.bsp  ||style=text-align:right|  1411452 || 29419f05ef647f83d0482502bb3f84f8
|-
| maps/e1m5.bsp  ||style=text-align:right|  1324060 || afd98cc890d748986186951b32fc9fcb
|-
| maps/e1m6.bsp  ||style=text-align:right|  1065080 || ec178e54ff68c4d8cf71e26775b2eb2d
|-
| maps/e1m7.bsp  ||style=text-align:right|  607420 || 0c1f55455e0f957291e21d211b689718
|-
| maps/e1m8.bsp  ||style=text-align:right|  924116 || 18c7ab2f922d5d586150afbc27c323a4
|-
| maps/start.bsp  ||style=text-align:right|  1433792 || 61a57bb4ca36368478f02b142d1b5291
|-
| progs/armor.mdl  ||style=text-align:right|  44076 || ca060166d7e4e4686995f05645dde593
|-
| progs/backpack.mdl  ||style=text-align:right|  19348 || 315b4ef42fb035aa3318e8d2d61961ce
|-
| progs/bolt2.mdl  ||style=text-align:right|  11860 || f59ce07cfbe01fcfc578258c573d2c31
|-
| progs/bolt3.mdl  ||style=text-align:right|  11860 || ff87579a424faa59ca2695b7434ea488
|-
| progs/bolt.mdl  ||style=text-align:right|  20644 || a176903954e9d8c7ab629f92784546c2
|-
| progs/boss.mdl  ||style=text-align:right|  211836 || 25da3b2bc30677e32ee3a3a878a4d3af
|-
| progs.dat  ||style=text-align:right|  410616 || cb04964a1952169e03392ee83a9edb91
|-
| progs/demon.mdl  ||style=text-align:right|  102120 || 4c73786e7cfb2083ca38cbc983cd6c4b
|-
| progs/dog.mdl  ||style=text-align:right|  146056 || e727fbc39acc652f812972612ce37565
|-
| progs/end1.mdl  ||style=text-align:right|  20820 || 67c0fcab33d3772c00bb462b0e749275
|-
| progs/eyes.mdl  ||style=text-align:right|  4372 || ed72f64a17c6909b2cb3034a734bca97
|-
| progs/flame2.mdl  ||style=text-align:right|  64572 || f2c8f8950ebd7a0edded6247655d325b
|-
| progs/flame.mdl  ||style=text-align:right|  46364 || 8593c05374d84354d4444c218e86fdb8
|-
| progs/gib1.mdl  ||style=text-align:right|  5716 || f5c5b799e895dc03036522a487e99913
|-
| progs/gib2.mdl  ||style=text-align:right|  16228 || cfa9e97a3542852418123e0bb12e4f86
|-
| progs/gib3.mdl  ||style=text-align:right|  22228 || d73be7b2881e0a5aacf2b332ac29086f
|-
| progs/g_light.mdl  ||style=text-align:right|  50276 || 61bba06ec3804b7f355a62fd4585ad8f
|-
| progs/g_nail2.mdl  ||style=text-align:right|  30720 || ed6d7bb5ff050ad5f2bf4be7739a16a5
|-
| progs/g_nail.mdl  ||style=text-align:right|  34700 || e2959ca741c764dd42025ef531a1b554
|-
| progs/grenade.mdl  ||style=text-align:right|  2244 || f492d6257c216306983a72f41db0d891
|-
| progs/g_rock2.mdl  ||style=text-align:right|  40756 || 68c047c97bab89afe2cb69e65b7c62e1
|-
| progs/g_rock.mdl  ||style=text-align:right|  48244 || 61346f842944795e0821e31e3d61b427
|-
| progs/g_shot.mdl  ||style=text-align:right|  32916 || 7facfec1a3cfb892cce871f398e9cb6b
|-
| progs/h_demon.mdl  ||style=text-align:right|  34884 || 5253a0ea93d9624d73fb984ee339b52f
|-
| progs/h_dog.mdl  ||style=text-align:right|  24436 || a0b5f87522b3a769548c46cf3bb4223e
|-
| progs/h_guard.mdl  ||style=text-align:right|  5428 || 18a629b53b87392030df63b7806eb833
|-
| progs/h_knight.mdl  ||style=text-align:right|  7156 || 46a03fa72b0cdebcf58045aba2fafc13
|-
| progs/h_ogre.mdl  ||style=text-align:right|  14900 || 14eb06611c769e254d0531c05919bdf5
|-
| progs/h_player.mdl  ||style=text-align:right|  14708 || bf1773df7d3e19c5b211a1ee408f6b05
|-
| progs/h_shams.mdl  ||style=text-align:right|  37060 || ff1e04e18c57667991341a011fb6c363
|-
| progs/h_wizard.mdl  ||style=text-align:right|  14804 || 4bc6be40128f313cf9ad06c347310735
|-
| progs/h_zombie.mdl  ||style=text-align:right|  4484 || 0fdef7f7cd05a3209e0a163e87f69f8b
|-
| progs/invisibl.mdl  ||style=text-align:right|  7092 || 1e87d86af02e69db9c9f27f5fddc7a47
|-
| progs/invulner.mdl  ||style=text-align:right|  23920 || 8c8d83e4d50c3282d009b333a1280422
|-
| progs/knight.mdl  ||style=text-align:right|  101404 || 5328915db5c53e85cf75d46e7b747fb9
|-
| progs/lavaball.mdl  ||style=text-align:right|  8788 || 92af53d2145681e37877dbc1d12801b2
|-
| progs/m_g_key.mdl  ||style=text-align:right|  12820 || 192c2650a115c91706f6fa8fe68beb45
|-
| progs/missile.mdl  ||style=text-align:right|  57796 || 47f19f9e34954b93443c9759dd2e7ba0
|-
| progs/m_s_key.mdl  ||style=text-align:right|  12820 || 20837376b391cdd5c92e57b84e05687f
|-
| progs/ogre.mdl  ||style=text-align:right|  162036 || fbb592ca3788a576dd2f31fcf8c80fab
|-
| progs/player.mdl  ||style=text-align:right|  191852 || 405cef9a10d96cdabffb5e91312f8e5c
|-
| progs/quaddama.mdl  ||style=text-align:right|  39992 || 00b177ff272a4779097ea08344da8aff
|-
| progs/s_bubble.spr  ||style=text-align:right|  588 || 7c0887630ed468205292d8cb7abcae93
|-
| progs/s_explod.spr  ||style=text-align:right|  18972 || 766c6a92c26b54f68f7ff87c90d71cf2
|-
| progs/shambler.mdl  ||style=text-align:right|  98556 || 9b09375a0f614dc4081e363cc34f1185
|-
| progs/s_light.mdl  ||style=text-align:right|  27596 || ee6649ea5673989f3aa06213a8d65f76
|-
| progs/s_light.spr  ||style=text-align:right|  1080 || aff44ba238f4e1d0d504d6f9700aadb4
|-
| progs/soldier.mdl  ||style=text-align:right|  146288 || 5b6c30a984872b4273dd5861412d35c5
|-
| progs/spike.mdl  ||style=text-align:right|  1684 || be4cb73125f939284376080acc9887dd
|-
| progs/s_spike.mdl  ||style=text-align:right|  1684 || ebb1d58242b64a703623c8a33fcbd9e6
|-
| progs/suit.mdl  ||style=text-align:right|  51236 || 882a61f5eea7f9cdbc04800b963cef85
|-
| progs/v_axe.mdl  ||style=text-align:right|  57908 || 577dadcca2700068995c808dc7dec76f
|-
| progs/v_light.mdl  ||style=text-align:right|  56204 || 68733d4c690de88b5c3ba33e52be1c15
|-
| progs/v_nail2.mdl  ||style=text-align:right|  68732 || aacd1002ab02662cc1d3ff46885b553e
|-
| progs/v_nail.mdl  ||style=text-align:right|  54472 || ec9ba028b346da2f9674c2a521ff0c2f
|-
| progs/v_rock2.mdl  ||style=text-align:right|  58188 || 96edf1a3c7629987c200361523f780d7
|-
| progs/v_rock.mdl  ||style=text-align:right|  58548 || 7bea46b2a75fd7cff2fb99420e4c4e25
|-
| progs/v_shot2.mdl  ||style=text-align:right|  50816 || 922b3b687766ae0d7aeb73d44dec7035
|-
| progs/v_shot.mdl  ||style=text-align:right|  43852 || 1fd140b6856843e83cd9bf3966f5d7dd
|-
| progs/w_g_key.mdl  ||style=text-align:right|  7252 || c5c5f0d14b022f57294ad9aded318250
|-
| progs/wizard.mdl  ||style=text-align:right|  64472 || bf60986594f045e60e8aa6339d553ee7
|-
| progs/w_s_key.mdl  ||style=text-align:right|  7252 || ec02314a7d12439d36b4eb2dd0a641a8
|-
| progs/w_spike.mdl  ||style=text-align:right|  14336 || 8cf9245df2164e8062b01a220b508d6b
|-
| progs/zombie.mdl  ||style=text-align:right|  186084 || a923b1d03b9d237dd5ead9bd56acc900
|-
| progs/zom_gib.mdl  ||style=text-align:right|  10196 || cf42c938caa5b19f719d1f110b1dc6d4
|-
| quake.rc  ||style=text-align:right|  293 || 411d42958aaeae141813f9ebfcf5233f
|-
| sound/ambience/buzz1.wav  ||style=text-align:right|  36308 || 346a00c795c6f1f1338ade6fc350b3fe
|-
| sound/ambience/comp1.wav  ||style=text-align:right|  62734 || f91a1120de804f7cd4dbba4f12c748e9
|-
| sound/ambience/drip1.wav  ||style=text-align:right|  137736 || 2306a76162eeda3d0812c516bc99aa7a
|-
| sound/ambience/drone6.wav  ||style=text-align:right|  18522 || 322853ddb42ad2a205579b5cca8e2e8c
|-
| sound/ambience/fire1.wav  ||style=text-align:right|  24064 || 610d3985ed8133988e8de3bec2b9cbbe
|-
| sound/ambience/fl_hum1.wav  ||style=text-align:right|  50154 || e4628499702e004c4bacd282a3ecb8c0
|-
| sound/ambience/hum1.wav  ||style=text-align:right|  40166 || 486bfa737c35b0c9dda57cbee2a540af
|-
| sound/ambience/suck1.wav  ||style=text-align:right|  110392 || 2e99e4d1fe1501d5191c8157d3063cb6
|-
| sound/ambience/swamp1.wav  ||style=text-align:right|  68524 || 29ffb678d78997eb6c227677c86ea4f8
|-
| sound/ambience/swamp2.wav  ||style=text-align:right|  68526 || 356aa1e875da846e72d8f17bbb699a5b
|-
| sound/ambience/thunder1.wav  ||style=text-align:right|  41492 || cefd6ced4b5bc79fcece1003238566f6
|-
| sound/ambience/water1.wav  ||style=text-align:right|  55784 || 6eeaae0a3450652d2be0782895297ee4
|-
| sound/ambience/wind2.wav  ||style=text-align:right|  28610 || 030cf8dd2b00a12454b5b35a89d03914
|-
| sound/ambience/windfly.wav  ||style=text-align:right|  22140 || c7be01e6d324e66883f70aa0072a99b0
|-
| sound/boss1/death.wav  ||style=text-align:right|  27600 || 43469b1acd35b67107da5da82e1df911
|-
| sound/boss1/out1.wav  ||style=text-align:right|  50344 || 847a6f971f6905dfaffd70b30d18a4b1
|-
| sound/boss1/pain.wav  ||style=text-align:right|  17700 || 49112740c0ff421f9272b9e8efc748cd
|-
| sound/boss1/sight1.wav  ||style=text-align:right|  24768 || 427dd600e6b28c9402212adcc5d652c7
|-
| sound/boss1/throw.wav  ||style=text-align:right|  11526 || 9b6e9ff2c8df448f7fd4b5315e60ddda
|-
| sound/buttons/airbut1.wav  ||style=text-align:right|  10672 || 9d2e14e7176842a0dce909a43d38873d
|-
| sound/buttons/switch02.wav  ||style=text-align:right|  3746 || d2e9cba3a353edc65115f6f5c574403c
|-
| sound/buttons/switch04.wav  ||style=text-align:right|  3666 || ff47857a58d3faefb2b94a37d7ba4f26
|-
| sound/buttons/switch21.wav  ||style=text-align:right|  6318 || 3605b0d061a9baf185c6ab7614534531
|-
| sound/demon/ddeath.wav  ||style=text-align:right|  9140 || 62a48dcd405ca55c9ce18497e36faa0e
|-
| sound/demon/dhit2.wav  ||style=text-align:right|  7142 || 9e741696e4d0d66e30e718fc70ec186e
|-
| sound/demon/djump.wav  ||style=text-align:right|  8494 || 791ac9d6b6593808316145443cb7e7a0
|-
| sound/demon/dland2.wav  ||style=text-align:right|  4400 || db14c7b01838f826b7a712075f9026fd
|-
| sound/demon/dpain1.wav  ||style=text-align:right|  6282 || 5e6c485878393c9bebb0d0e6659bc479
|-
| sound/demon/idle1.wav  ||style=text-align:right|  9098 || 7a83f8caf3d5b1172a7dc5afdc942988
|-
| sound/demon/sight2.wav  ||style=text-align:right|  8804 || 65171c355c22a5069520b0881677ae3c
|-
| sound/dog/dattack1.wav  ||style=text-align:right|  8154 || 0c47c9d4aaae0bf3159a288b674f4a35
|-
| sound/dog/ddeath.wav  ||style=text-align:right|  14912 || b0e7760b1d7286a028ff9773f6802958
|-
| sound/dog/dpain1.wav  ||style=text-align:right|  7240 || 28e5ab93b41e13e2916433283a5d1a46
|-
| sound/dog/dsight.wav  ||style=text-align:right|  6722 || 0edc290765bac1fb4fe03ca55bc7c225
|-
| sound/dog/idle.wav  ||style=text-align:right|  6870 || 42bd6026ff32bd94523ad9f8fe8362cc
|-
| sound/doors/airdoor1.wav  ||style=text-align:right|  13654 || 9b91930e8c2fdece31a2362296891122
|-
| sound/doors/airdoor2.wav  ||style=text-align:right|  8594 || 29fd823d1c14ca42a9a89c716b26f4cd
|-
| sound/doors/basesec1.wav  ||style=text-align:right|  13930 || eb2363fed42724f55e8f55f96c335bcf
|-
| sound/doors/basesec2.wav  ||style=text-align:right|  10238 || 8d163a56607c9cf64a270a156c1c5cef
|-
| sound/doors/basetry.wav  ||style=text-align:right|  10518 || a5108d5c51281ab55c0baf884cbe8cbe
|-
| sound/doors/baseuse.wav  ||style=text-align:right|  16486 || f43fee91efe813a5eb34e9d72918fdb9
|-
| sound/doors/ddoor1.wav  ||style=text-align:right|  7738 || dff86a26139cdd49a193d5ed7ebf6ae1
|-
| sound/doors/ddoor2.wav  ||style=text-align:right|  5904 || 4a9d0b0825d0302ce465569d1e35fbcf
|-
| sound/doors/doormv1.wav  ||style=text-align:right|  14036 || 3fd379aec80a2ad8105c0c89ba5b40e6
|-
| sound/doors/drclos4.wav  ||style=text-align:right|  12814 || 83df1865a0c9fa5d02c2f137564c57de
|-
| sound/doors/hydro1.wav  ||style=text-align:right|  11094 || b1703980a20e624bc3366ccf55ca617e
|-
| sound/doors/hydro2.wav  ||style=text-align:right|  10700 || b1866f5b3950788ccf4206444ab64bc7
|-
| sound/doors/latch2.wav  ||style=text-align:right|  7338 || ad2378ca21a0ca529df328261e07aed5
|-
| sound/doors/medtry.wav  ||style=text-align:right|  7828 || ebb536bec2cdfd22c25b35793c055339
|-
| sound/doors/meduse.wav  ||style=text-align:right|  10718 || 4522aada194b23eb33b541cbcc755cf6
|-
| sound/doors/runetry.wav  ||style=text-align:right|  13524 || c433bae9e2ab508712f87dc2cacc82c8
|-
| sound/doors/runeuse.wav  ||style=text-align:right|  17364 || b4bcfd525a26f5b5ecc9d392430d9079
|-
| sound/doors/stndr1.wav  ||style=text-align:right|  12620 || 5bae2183885e18d65d69624e85249fd9
|-
| sound/doors/stndr2.wav  ||style=text-align:right|  11470 || f43a75c917effff09ef7be8a321c8b49
|-
| sound/doors/winch2.wav  ||style=text-align:right|  14872 || a4edffdfede7dbaed37db526c26e2b6d
|-
| sound/hknight/hit.wav  ||style=text-align:right|  6260 || fece24e2548f1d769e8fce39a5c87d01
|-
| sound/items/armor1.wav  ||style=text-align:right|  7714 || 186d29f2baf35b8c280bc97754606fad
|-
| sound/items/damage2.wav  ||style=text-align:right|  33012 || 14e53b7617ffe315a7c3f8d89652e51c
|-
| sound/items/damage3.wav  ||style=text-align:right|  12894 || baf754aec7ed4baba16760ac85513184
|-
| sound/items/damage.wav  ||style=text-align:right|  23374 || 8cde8b9278ca4922a4ec7ead6e5ee01b
|-
| sound/items/health1.wav  ||style=text-align:right|  7958 || 52a2c4f808db4edd8393de0de618c91f
|-
| sound/items/inv1.wav  ||style=text-align:right|  13728 || 5850cab55d6197d0e76d9f0a22ba10be
|-
| sound/items/inv2.wav  ||style=text-align:right|  33216 || 4edcd38a2c6adc5305636dd7afd5ef60
|-
| sound/items/inv3.wav  ||style=text-align:right|  33320 || 325c268be05b42a019ccb92e6993ab9e
|-
| sound/items/itembk2.wav  ||style=text-align:right|  9910 || 270c688b3cb884f5d4e5ffd8ccc934a1
|-
| sound/items/protect2.wav  ||style=text-align:right|  34012 || 25627a4bd2b4c6054cfd2fc4bf69ddc2
|-
| sound/items/protect3.wav  ||style=text-align:right|  23364 || 7b9374d67f6d59e524bba2af236ca30a
|-
| sound/items/protect.wav  ||style=text-align:right|  22536 || d839d5a84f811ce8a0e28616891bf1a7
|-
| sound/items/r_item1.wav  ||style=text-align:right|  6822 || 3fc0d0ae4a71c9fbfe548f38626c6a08
|-
| sound/items/r_item2.wav  ||style=text-align:right|  7448 || 384ffefe795d99df75f381596a0f1976
|-
| sound/items/suit2.wav  ||style=text-align:right|  33254 || 0a9d2766a5b805cb5794f9bea57e6585
|-
| sound/items/suit.wav  ||style=text-align:right|  15854 || da413f34023d219f1e34fde50a037be0
|-
| sound/knight/idle.wav  ||style=text-align:right|  11064 || 1b5c3981bee078318af346d8fe8090b9
|-
| sound/knight/kdeath.wav  ||style=text-align:right|  10688 || 11a96f48a8f2433c23beae299c8fb96e
|-
| sound/knight/khurt.wav  ||style=text-align:right|  5586 || 32c9f48dd4a6a87752aedf56fe8de668
|-
| sound/knight/ksight.wav  ||style=text-align:right|  13514 || eb75b4af348c88e84d8c87c19d5976fa
|-
| sound/knight/sword1.wav  ||style=text-align:right|  2306 || 93045b5f3178413dc6b01ec2869d1f73
|-
| sound/knight/sword2.wav  ||style=text-align:right|  2784 || 82d1a7c263cd3df7b060dee2f7f8b1fd
|-
| sound/misc/h2ohit1.wav  ||style=text-align:right|  12972 || 49ecb03f4f10862453656a67598f8b8a
|-
| sound/misc/medkey.wav  ||style=text-align:right|  10020 || 0e3ae5626a47d81e4166539e355e31bb
|-
| sound/misc/menu1.wav  ||style=text-align:right|  5738 || 12c36546601c385bc47c9ca9420b7eee
|-
| sound/misc/menu2.wav  ||style=text-align:right|  10672 || 39b01ea6feb3ec8dbd6d8ee3e5e966c4
|-
| sound/misc/menu3.wav  ||style=text-align:right|  3010 || 4a03dc2fd56831b855dab761eac4f7de
|-
| sound/misc/null.wav  ||style=text-align:right|  1244 || 811989e09124f54cb27fe6154b0f1018
|-
| sound/misc/outwater.wav  ||style=text-align:right|  5018 || 35732412412ddb5ed418633bb0123bbe
|-
| sound/misc/power.wav  ||style=text-align:right|  19832 || 9f2c3a18d9fc8d9cecfac6db3aad6bc6
|-
| sound/misc/r_tele1.wav  ||style=text-align:right|  8036 || c2194171b4c446e136ed7514fbb098a5
|-
| sound/misc/r_tele2.wav  ||style=text-align:right|  17324 || 0ce662ac90fb3658d69320d1be4025c1
|-
| sound/misc/r_tele3.wav  ||style=text-align:right|  18016 || 122ef44813edcfe7391578fd29e729d2
|-
| sound/misc/r_tele4.wav  ||style=text-align:right|  9068 || 0097b5747ccc70d5b12fc6838aff02c2
|-
| sound/misc/r_tele5.wav  ||style=text-align:right|  22042 || a82334cbb66d12f28cce9e71c90ea50b
|-
| sound/misc/runekey.wav  ||style=text-align:right|  14578 || 6b21a2e5878011da50fdee0a301d3e34
|-
| sound/misc/secret.wav  ||style=text-align:right|  6610 || a02ceefcc24b1ebf5c164a1e1acfb05f
|-
| sound/misc/talk.wav  ||style=text-align:right|  1810 || d5b25d4df59d92ac5016e88689ea60c1
|-
| sound/misc/trigger1.wav  ||style=text-align:right|  20230 || dc927c8a1d0a9bd59fbc5dd91ae1d812
|-
| sound/misc/water1.wav  ||style=text-align:right|  3926 || d8291c762acb1edf24927fdcc0f6a6cd
|-
| sound/misc/water2.wav  ||style=text-align:right|  3340 || 049e8e7e7b30d4d8038afb7248bdd977
|-
| sound/ogre/ogdrag.wav  ||style=text-align:right|  12396 || 658587dc89aaefae5ca3f058f7ff4227
|-
| sound/ogre/ogdth.wav  ||style=text-align:right|  13892 || de98e7bb9e70586edddd3308cfded3db
|-
| sound/ogre/ogidle2.wav  ||style=text-align:right|  11254 || 196ae9c33a4311160e1d5f3da878ab09
|-
| sound/ogre/ogidle.wav  ||style=text-align:right|  12894 || 177c829840a87c885bbc8951e7ce962e
|-
| sound/ogre/ogpain1.wav  ||style=text-align:right|  7898 || ac6d133d7720c12df49813fe10e683b5
|-
| sound/ogre/ogsawatk.wav  ||style=text-align:right|  16154 || 7257bdfd014bb61d778b8f88cb65d560
|-
| sound/ogre/ogwake.wav  ||style=text-align:right|  19356 || 3296459e495c4c12b31179d4eeffac19
|-
| sound/plats/medplat1.wav  ||style=text-align:right|  16378 || b73215aa6627c8b5b90fce8d260d48d0
|-
| sound/plats/medplat2.wav  ||style=text-align:right|  7338 || 1fc6c3772917a1a8155d04fa52e17005
|-
| sound/plats/plat1.wav  ||style=text-align:right|  20248 || 5d43ed85d896ba926f459e06ba6635d5
|-
| sound/plats/plat2.wav  ||style=text-align:right|  7338 || 49d7ab0fd726cd652eb6e5756fce61b9
|-
| sound/plats/train1.wav  ||style=text-align:right|  21430 || b589ae8262046361d9dca39d6b8f693a
|-
| sound/plats/train2.wav  ||style=text-align:right|  5870 || 640017e1b870d643e3bca29d499c72ee
|-
| sound/player/axhit1.wav  ||style=text-align:right|  6906 || 149b2371334da318386325182924eaca
|-
| sound/player/axhit2.wav  ||style=text-align:right|  2434 || fc01909318455f5310efa2457a370897
|-
| sound/player/death1.wav  ||style=text-align:right|  10170 || ba005f5488d4ee78dabf613a03f33a5f
|-
| sound/player/death2.wav  ||style=text-align:right|  8026 || 20477d2e7c84aac1bef95d32c9c702dd
|-
| sound/player/death3.wav  ||style=text-align:right|  10918 || 7b206ba8e1fa28d8605b50e3f3200f11
|-
| sound/player/death4.wav  ||style=text-align:right|  14126 || 1b0f27f4d41b748d3cc5c3d56bd917f8
|-
| sound/player/death5.wav  ||style=text-align:right|  14946 || 7efe84195cfa97515aad2d7f96f25346
|-
| sound/player/drown1.wav  ||style=text-align:right|  8908 || 732f0416af6990e028110380bcb36f0d
|-
| sound/player/drown2.wav  ||style=text-align:right|  3114 || 29ee1f287879acce29b15d4722668bc2
|-
| sound/player/gasp1.wav  ||style=text-align:right|  8702 || b06cbc370c8c2c163dc4d487e8b673c7
|-
| sound/player/gasp2.wav  ||style=text-align:right|  13134 || 30aece9d8779764620c7f866bfb06edb
|-
| sound/player/gib.wav  ||style=text-align:right|  14424 || 26fa9942078125388f34b71546615068
|-
| sound/player/h2odeath.wav  ||style=text-align:right|  18104 || 73b0f4dfae07f6e49112cadfe202735c
|-
| sound/player/h2ojump.wav  ||style=text-align:right|  11438 || cd421b96410971bb1a4f21d3936a3805
|-
| sound/player/inh2o.wav  ||style=text-align:right|  11340 || d4c1a27c4d07e8dfdf18a4b1a880c610
|-
| sound/player/inlava.wav  ||style=text-align:right|  10958 || c37875a082900716b7af88d2d990f55c
|-
| sound/player/land2.wav  ||style=text-align:right|  6204 || 6ba534256a779d66d9d9dabb90e63c8b
|-
| sound/player/land.wav  ||style=text-align:right|  2434 || e34328a40358d98f0f95403b9e27ec1e
|-
| sound/player/lburn1.wav  ||style=text-align:right|  6682 || 3c447c72385defe97c060771077d8ba0
|-
| sound/player/lburn2.wav  ||style=text-align:right|  6076 || 6849ee8dbd91ec82ece016fbd39b0a5c
|-
| sound/player/pain1.wav  ||style=text-align:right|  3394 || d7ac9df7540b791f952ca2a681c0265b
|-
| sound/player/pain2.wav  ||style=text-align:right|  2710 || 513e054b64d4fb61f31384d59e123020
|-
| sound/player/pain3.wav  ||style=text-align:right|  4854 || aafc61ad4e16cc5cdd2db2100796b494
|-
| sound/player/pain4.wav  ||style=text-align:right|  4840 || f655ef2045bc55473303b27546aa6fc0
|-
| sound/player/pain5.wav  ||style=text-align:right|  8020 || f8551a73cb89396042687baa8c68b5c2
|-
| sound/player/pain6.wav  ||style=text-align:right|  5462 || 70062eabf96288d307280fb601ce0ee2
|-
| sound/player/plyrjmp8.wav  ||style=text-align:right|  3888 || d4a552d8f627c7f3b933568c4a74c913
|-
| sound/player/slimbrn2.wav  ||style=text-align:right|  12468 || b17c18a9f81a952f2d41f65b5180f210
|-
| sound/player/teledth1.wav  ||style=text-align:right|  14414 || c226c7f041187ba058d8112cc0190b56
|-
| sound/player/tornoff2.wav  ||style=text-align:right|  7726 || 03ec1c805b307b8fe4c4052f8332a5e5
|-
| sound/player/udeath.wav  ||style=text-align:right|  16082 || afe674f287efb6197da2cea0c0b1d2f8
|-
| sound/shambler/melee1.wav  ||style=text-align:right|  4718 || 77fe6240973a204b757a427ebf66bcfd
|-
| sound/shambler/melee2.wav  ||style=text-align:right|  5966 || 3be31638d769e3d690c92311dfafdeac
|-
| sound/shambler/sattck1.wav  ||style=text-align:right|  8036 || ec8c3f79ea42d09154cb8975ada1b21c
|-
| sound/shambler/sboom.wav  ||style=text-align:right|  11672 || 9834601a645d7d1f62001b2a314ec18f
|-
| sound/shambler/sdeath.wav  ||style=text-align:right|  21106 || e0e62d229a985a6e39218c6488599059
|-
| sound/shambler/shurt2.wav  ||style=text-align:right|  4302 || 1e87631ede95e061a75f9c31629ac0b8
|-
| sound/shambler/sidle.wav  ||style=text-align:right|  5646 || 368a240e6c3e877793352a79c1828386
|-
| sound/shambler/smack.wav  ||style=text-align:right|  5300 || bd8c634c9894348360fec7b7419d1649
|-
| sound/shambler/ssight.wav  ||style=text-align:right|  15420 || 657107577460d5acf3157dec97e07a89
|-
| sound/soldier/death1.wav  ||style=text-align:right|  8434 || fe25952af40b536c3bb67bfca58062eb
|-
| sound/soldier/idle.wav  ||style=text-align:right|  9802 || 4cdfbdda8fb5f40b125c7bcddb6e8914
|-
| sound/soldier/pain1.wav  ||style=text-align:right|  5000 || 54d3b05fdcecf7480034858f2b22b06c
|-
| sound/soldier/pain2.wav  ||style=text-align:right|  7838 || e2bbc9d3405b9b9fdae76d2fc298fc2f
|-
| sound/soldier/sattck1.wav  ||style=text-align:right|  14302 || b76ac35f900f280a7a7996da7e404362
|-
| sound/soldier/sight1.wav  ||style=text-align:right|  12716 || e2a39533250ddd1b08053d5c4ebf7fd0
|-
| sound/weapons/ax1.wav  ||style=text-align:right|  3308 || 237d4d819d02ad37849a8a895cc410e1
|-
| sound/weapons/bounce.wav  ||style=text-align:right|  5864 || fced668c6558a9505abf5014d60528a6
|-
| sound/weapons/grenade.wav  ||style=text-align:right|  8364 || d2b6fa131933f203eba2a282276e88df
|-
| sound/weapons/guncock.wav  ||style=text-align:right|  14430 || 6a63452167cc106e756518536446844f
|-
| sound/weapons/lhit.wav  ||style=text-align:right|  26028 || fefd021d0bd35a1f8da8870f1c06abb9
|-
| sound/weapons/lock4.wav  ||style=text-align:right|  3876 || 3fd93222258d5b1500b150f021c94519
|-
| sound/weapons/lstart.wav  ||style=text-align:right|  56378 || abe1abf6dcadcda5930b0684c7ea820a
|-
| sound/weapons/pkup.wav  ||style=text-align:right|  5174 || 0aa6f0a7d609e1a56fd535a06d1bb56e
|-
| sound/weapons/r_exp3.wav  ||style=text-align:right|  17478 || 57db026474fc76ba7f38cea24eaaf8cf
|-
| sound/weapons/ric1.wav  ||style=text-align:right|  4308 || a31166b4bbb4509ac3004a01f7477ee9
|-
| sound/weapons/ric2.wav  ||style=text-align:right|  10838 || a180b447c0527e603cea54a9aefd6139
|-
| sound/weapons/ric3.wav  ||style=text-align:right|  12638 || 8a773bbb585540ddce256151162f3a2c
|-
| sound/weapons/rocket1i.wav  ||style=text-align:right|  9660 || fb4fdf345d805cf6980c4c695974effc
|-
| sound/weapons/sgun1.wav  ||style=text-align:right|  22992 || 95a14815e48deb323d0cf8251d728ac7
|-
| sound/weapons/shotgn2.wav  ||style=text-align:right|  8694 || cb561cefbf472232334b419af050e5a0
|-
| sound/weapons/spike2.wav  ||style=text-align:right|  12642 || 9189d811855f108da4a1e2d34dc7c633
|-
| sound/weapons/tink1.wav  ||style=text-align:right|  1252 || 297ba8706625fcf05887edb393e9a441
|-
| sound/wizard/hit.wav  ||style=text-align:right|  7332 || 6598d669334df977f1f97b95288edf11
|-
| sound/wizard/wattack.wav  ||style=text-align:right|  25912 || b3568a47439f81779d40335e76f5bc2d
|-
| sound/wizard/wdeath.wav  ||style=text-align:right|  20684 || 99d9c71343bc23222abb92119d404400
|-
| sound/wizard/widle1.wav  ||style=text-align:right|  13464 || b22b1dd9f66879b3447d36ab584316c7
|-
| sound/wizard/widle2.wav  ||style=text-align:right|  23094 || 7178fd83df227360564adef01bed92c6
|-
| sound/wizard/wpain.wav  ||style=text-align:right|  8686 || bd7e59ab7d7b835f9ed8ab51950914de
|-
| sound/wizard/wsight.wav  ||style=text-align:right|  13078 || df5949057c750528917c6cb32b7fd9fd
|-
| sound/zombie/idle_w2.wav  ||style=text-align:right|  17192 || d2bb59b9d7ac71097c07123a23525641
|-
| sound/zombie/z_fall.wav  ||style=text-align:right|  3062 || 6968318b2d196c6d54bc707d8a390547
|-
| sound/zombie/z_gib.wav  ||style=text-align:right|  16226 || 199dda66ade8d6f0ef4897e4d7608c0d
|-
| sound/zombie/z_hit.wav  ||style=text-align:right|  6166 || 6c66ab3e6b149bf35956a4bbc0057acb
|-
| sound/zombie/z_idle1.wav  ||style=text-align:right|  13244 || 21088a7b38b1124d7ec72e58d5ab93a6
|-
| sound/zombie/z_idle.wav  ||style=text-align:right|  16734 || e5e570e38c4405111004190a79f0e925
|-
| sound/zombie/z_miss.wav  ||style=text-align:right|  10734 || 96fad96a8c3bc6f7bcc5da6c82678da2
|-
| sound/zombie/z_pain1.wav  ||style=text-align:right|  15374 || fcd83b89a94b0cadbe1361a4df080ec0
|-
| sound/zombie/z_pain.wav  ||style=text-align:right|  12218 || 56637968b8309bd2f825153330bbdfc0
|-
| sound/zombie/z_shot1.wav  ||style=text-align:right|  3068 || 561afb69b7851923a8fb3b54e3e13c96
|-
|}
&lt;/tt&gt;

=== 85fc9cee2035b66290da1e33be2ac86b ===
The [[id1]] ''pak0.pak'' with the md5sum 85fc9cee2035b66290da1e33be2ac86b contains exactly the same folders &amp; files as fc989b37572fae074e8ffda0ce4d5297.

=== 5906e5998fc3d896ddaf5e6a62e03abb ===
The [[id1]] ''pak0.pak'' with the md5sum 5906e5998fc3d896ddaf5e6a62e03abb contains the following folders &amp; files:
&lt;tt&gt;
{| class=&quot;wikitable collapsible collapsed&quot;
! Path !! Size !! md5
|-
| default.cfg  ||style=text-align:right|  1914 || fc989b37572fae074e8ffda0ce4d5297
|-
| demo1.dem  ||style=text-align:right|  184471 || 85ec0141ab24d9732e487d1aafa791f0
|-
| demo2.dem  ||style=text-align:right|  152705 || fa5c3daf7a57954cd95f94b698a7e420
|-
| demo3.dem  ||style=text-align:right|  197679 || 691f37e5715ea2863c1d8092a6429824
|-
| end1.bin  ||style=text-align:right|  4000 || 92ae51961ec2f429dfe9bea1138fbd5d
|-
| gfx/bigbox.lmp  ||style=text-align:right|  5192 || e597771ac6149b2b071ebfd24981ea04
|-
| gfx/box_bl.lmp  ||style=text-align:right|  72 || 5b094c37c2c1c2eebe37f84117dea182
|-
| gfx/box_bm.lmp  ||style=text-align:right|  136 || 44621236738e2bf8d669e53dca887278
|-
| gfx/box_br.lmp  ||style=text-align:right|  72 || 86597d5325b472caf5644644033e5cab
|-
| gfx/box_ml.lmp  ||style=text-align:right|  72 || adcea286ba0ac01084fd0c131b16ffdd
|-
| gfx/box_mm2.lmp  ||style=text-align:right|  136 || b850bcec189d909e7a0f796111a11249
|-
| gfx/box_mm.lmp  ||style=text-align:right|  136 || 700b4884b1a3c6aa7356a43014261866
|-
| gfx/box_mr.lmp  ||style=text-align:right|  72 || e30d9ea783ef7dd50101682f03ba40d7
|-
| gfx/box_tl.lmp  ||style=text-align:right|  72 || 3903d3d814e37c55790ac0ccfef2b925
|-
| gfx/box_tm.lmp  ||style=text-align:right|  136 || 7cb85ccbf8e7d2532da2a839a7cef348
|-
| gfx/box_tr.lmp  ||style=text-align:right|  72 || 5c5e72746af821a4cf8437d8fecc53c7
|-
| gfx/colormap.lmp  ||style=text-align:right|  16385 || 0d793b70bffafbd666fc5c88d6e15e9d
|-
| gfx/complete.lmp  ||style=text-align:right|  4616 || db6a00dfbe2c62a43c261e5622297c4a
|-
| gfx/conback.lmp  ||style=text-align:right|  64008 || 9eb6f9c47870bf42985d9382958a5c12
|-
| gfx/dim_drct.lmp  ||style=text-align:right|  3352 || 50ea11fe8c4d9db92863bdcd03b89df5
|-
| gfx/dim_ipx.lmp  ||style=text-align:right|  3352 || 0bef9943487f0611225bf0a5c0fe5dd4
|-
| gfx/dim_modm.lmp  ||style=text-align:right|  3352 || 3288f03144f06b95cadafa9458a77b1d
|-
| gfx/dim_mult.lmp  ||style=text-align:right|  3352 || 348b7369227f2d7e9d0daccbf6c9344d
|-
| gfx/dim_tcp.lmp  ||style=text-align:right|  3352 || 7dc8bbb01d7c90cd51c28da0ff6ed900
|-
| gfx/finale.lmp  ||style=text-align:right|  6920 || b6e49409d344e0344273d86ea33fe35f
|-
| gfx/help0.lmp  ||style=text-align:right|  64008 || b392ac30ad49252b51ec934ed855c20f
|-
| gfx/help1.lmp  ||style=text-align:right|  64008 || 857543c69245117a606044ea63adac9a
|-
| gfx/help2.lmp  ||style=text-align:right|  64008 || 882dd5920ea9c19f637f32084de9788a
|-
| gfx/help3.lmp  ||style=text-align:right|  64008 || a89d169524920d896128009467deebfc
|-
| gfx/help4.lmp  ||style=text-align:right|  64008 || c72d67c84ae6b403fae5f08d3e5c3bc6
|-
| gfx/help5.lmp  ||style=text-align:right|  64008 || 12203d7cdec35c4f51622dd90ec92093
|-
| gfx/inter.lmp  ||style=text-align:right|  23048 || f6eabe0d742380c7b47a9ee44170993d
|-
| gfx/loading.lmp  ||style=text-align:right|  3464 || 3249bc994266529a1748c06bfbb24bfa
|-
| gfx/mainmenu.lmp  ||style=text-align:right|  26888 || 8122e2a0b8888f9d1ebef149551b6434
|-
| gfx/menudot1.lmp  ||style=text-align:right|  392 || bfdb08d84d580abcfbacc1c9abd62bfb
|-
| gfx/menudot2.lmp  ||style=text-align:right|  392 || 6c6d2176e00edbe530bb1db118aaa6dc
|-
| gfx/menudot3.lmp  ||style=text-align:right|  392 || 2527a05f6162efb3e4bc5311d9e010d5
|-
| gfx/menudot4.lmp  ||style=text-align:right|  392 || 90ea6be033b39b139b3779932d266f33
|-
| gfx/menudot5.lmp  ||style=text-align:right|  392 || c9beb9600c35e458d0f83b6cf1e1c692
|-
| gfx/menudot6.lmp  ||style=text-align:right|  392 || 31b9a6ec1d12a2bd56b955185a9e72d3
|-
| gfx/menuplyr.lmp  ||style=text-align:right|  2696 || 9eebe617ff51c4ce43f85ca1a6920d5b
|-
| gfx/mp_menu.lmp  ||style=text-align:right|  14856 || c6416b8f7f5262a5a19b9ce4be1fd9ce
|-
| gfx/netmen1.lmp  ||style=text-align:right|  3352 || 5bc6a8d8cfdfd7e940e933812954367a
|-
| gfx/netmen2.lmp  ||style=text-align:right|  3352 || c8aafb649a653e90fc5eb7b7a2b3ca2e
|-
| gfx/netmen3.lmp  ||style=text-align:right|  3352 || 11c9372d0e64057a1ec8251f596b820d
|-
| gfx/netmen4.lmp  ||style=text-align:right|  3352 || 74ec672b1312699be2eeaf25a68e4582
|-
| gfx/netmen5.lmp  ||style=text-align:right|  3352 || 231f8a9ea4ba364f517db0e9f7f1ba72
|-
| gfx/palette.lmp  ||style=text-align:right|  768 || 79bc149d4f2fb0bd68cd8400a3fd87d4
|-
| gfx/pause.lmp  ||style=text-align:right|  3080 || 5aa67f927719e4a9eb3e020e75fea969
|-
| gfx/p_load.lmp  ||style=text-align:right|  2504 || 27fe08071058385529b0b8ad746421e7
|-
| gfx/p_multi.lmp  ||style=text-align:right|  5192 || 5a307c7d11da20a4772ad9c00b9f4309
|-
| gfx/p_option.lmp  ||style=text-align:right|  3464 || 83a3bf4459bce3fe85857a0aa647b90a
|-
| gfx/p_save.lmp  ||style=text-align:right|  2120 || 0d2bb5fa5524e0180a85bf273094cd1f
|-
| gfx/qplaque.lmp  ||style=text-align:right|  4616 || f4de79557c75e26b85ea84fb6029a5f3
|-
| gfx/ranking.lmp  ||style=text-align:right|  4040 || 919b13d1f7fdd0082ec0f94699f3b681
|-
| gfx/sell.lmp  ||style=text-align:right|  64008 || 878db3866e8b38c5b8d951aef516358c
|-
| gfx/sp_menu.lmp  ||style=text-align:right|  14856 || f624aa79778970ecb8ef518b5ab435f6
|-
| gfx/ttl_cstm.lmp  ||style=text-align:right|  4424 || 4ee84e0e7fa93f0e93d26efb1e726a4d
|-
| gfx/ttl_main.lmp  ||style=text-align:right|  2312 || 07e1c8e189e2463befcfc44f5ecf8dcb
|-
| gfx/ttl_sgl.lmp  ||style=text-align:right|  3080 || 25d5360228da738f091063eaeb7c6aa8
|-
| gfx/vidmodes.lmp  ||style=text-align:right|  5192 || 18a97f403057777f262188903f485fe8
|-
| gfx.wad  ||style=text-align:right|  112828 || cde5b5890c8902c02a2f271abe8f4a1f
|-
| maps/b_batt0.bsp  ||style=text-align:right|  5044 || 00bc989f4c8d2570a2826a63c7356a27
|-
| maps/b_batt1.bsp  ||style=text-align:right|  4620 || 555bc0cb0b5c2ad2ed0110f307e70679
|-
| maps/b_bh100.bsp  ||style=text-align:right|  8820 || 62f78bb5143265f037b79ddd077c50ed
|-
| maps/b_bh10.bsp  ||style=text-align:right|  3936 || e80cde9f185612f669fc100f825ca84f
|-
| maps/b_bh25.bsp  ||style=text-align:right|  8872 || 032d70dbf8669b3627b82b41f31488bd
|-
| maps/b_explob.bsp  ||style=text-align:right|  10220 || d8c9db3cfa0264678afc580143f665ea
|-
| maps/b_nail0.bsp  ||style=text-align:right|  5044 || c8d7ec0bdee74e0c1e69e8dbe939117d
|-
| maps/b_nail1.bsp  ||style=text-align:right|  5044 || ea08b2bd6aa19ece0307f75c491e5d24
|-
| maps/b_rock0.bsp  ||style=text-align:right|  2956 || 19ce64cd248a4459bf37b45e6e7c1219
|-
| maps/b_rock1.bsp  ||style=text-align:right|  2944 || b4cdb75094cd7218ed2b0475aefabe80
|-
| maps/b_shell0.bsp  ||style=text-align:right|  5044 || 574824b3c52661959d633a76dc823859
|-
| maps/b_shell1.bsp  ||style=text-align:right|  5044 || dc8b8dcb490e204e615b2b9cdc673296
|-
| maps/e1m1.bsp  ||style=text-align:right|  1365176 || 84cae48010619bcc945426b91bc03ade
|-
| maps/e1m2.bsp  ||style=text-align:right|  1332228 || caff91afbe41f3eac4dda65cee0083c9
|-
| maps/e1m3.bsp  ||style=text-align:right|  1249944 || f20eaa5692e94ab889c4ade9e1c116c7
|-
| maps/e1m4.bsp  ||style=text-align:right|  1411452 || 29419f05ef647f83d0482502bb3f84f8
|-
| maps/e1m5.bsp  ||style=text-align:right|  1324060 || afd98cc890d748986186951b32fc9fcb
|-
| maps/e1m6.bsp  ||style=text-align:right|  1065080 || ec178e54ff68c4d8cf71e26775b2eb2d
|-
| maps/e1m7.bsp  ||style=text-align:right|  607420 || 0c1f55455e0f957291e21d211b689718
|-
| maps/e1m8.bsp  ||style=text-align:right|  924116 || 18c7ab2f922d5d586150afbc27c323a4
|-
| maps/start.bsp  ||style=text-align:right|  1433792 || 61a57bb4ca36368478f02b142d1b5291
|-
| progs/armor.mdl  ||style=text-align:right|  44076 || ca060166d7e4e4686995f05645dde593
|-
| progs/backpack.mdl  ||style=text-align:right|  19348 || 315b4ef42fb035aa3318e8d2d61961ce
|-
| progs/bolt2.mdl  ||style=text-align:right|  11860 || f59ce07cfbe01fcfc578258c573d2c31
|-
| progs/bolt3.mdl  ||style=text-align:right|  11860 || ff87579a424faa59ca2695b7434ea488
|-
| progs/bolt.mdl  ||style=text-align:right|  20644 || a176903954e9d8c7ab629f92784546c2
|-
| progs/boss.mdl  ||style=text-align:right|  211836 || 25da3b2bc30677e32ee3a3a878a4d3af
|-
| progs.dat  ||style=text-align:right|  413116 || 0c3ef3625df5883536f8da42c78b673a
|-
| progs/demon.mdl  ||style=text-align:right|  102120 || 4c73786e7cfb2083ca38cbc983cd6c4b
|-
| progs/dog.mdl  ||style=text-align:right|  146056 || e727fbc39acc652f812972612ce37565
|-
| progs/end1.mdl  ||style=text-align:right|  20820 || 67c0fcab33d3772c00bb462b0e749275
|-
| progs/eyes.mdl  ||style=text-align:right|  4372 || ed72f64a17c6909b2cb3034a734bca97
|-
| progs/flame2.mdl  ||style=text-align:right|  64572 || f2c8f8950ebd7a0edded6247655d325b
|-
| progs/flame.mdl  ||style=text-align:right|  46364 || 8593c05374d84354d4444c218e86fdb8
|-
| progs/gib1.mdl  ||style=text-align:right|  5716 || f5c5b799e895dc03036522a487e99913
|-
| progs/gib2.mdl  ||style=text-align:right|  16228 || cfa9e97a3542852418123e0bb12e4f86
|-
| progs/gib3.mdl  ||style=text-align:right|  22228 || d73be7b2881e0a5aacf2b332ac29086f
|-
| progs/g_light.mdl  ||style=text-align:right|  50276 || 61bba06ec3804b7f355a62fd4585ad8f
|-
| progs/g_nail2.mdl  ||style=text-align:right|  30720 || ed6d7bb5ff050ad5f2bf4be7739a16a5
|-
| progs/g_nail.mdl  ||style=text-align:right|  34700 || e2959ca741c764dd42025ef531a1b554
|-
| progs/grenade.mdl  ||style=text-align:right|  2244 || f492d6257c216306983a72f41db0d891
|-
| progs/g_rock2.mdl  ||style=text-align:right|  40756 || 68c047c97bab89afe2cb69e65b7c62e1
|-
| progs/g_rock.mdl  ||style=text-align:right|  48244 || 61346f842944795e0821e31e3d61b427
|-
| progs/g_shot.mdl  ||style=text-align:right|  32916 || 7facfec1a3cfb892cce871f398e9cb6b
|-
| progs/h_demon.mdl  ||style=text-align:right|  34884 || 5253a0ea93d9624d73fb984ee339b52f
|-
| progs/h_dog.mdl  ||style=text-align:right|  24436 || a0b5f87522b3a769548c46cf3bb4223e
|-
| progs/h_guard.mdl  ||style=text-align:right|  5428 || 18a629b53b87392030df63b7806eb833
|-
| progs/h_knight.mdl  ||style=text-align:right|  7156 || 46a03fa72b0cdebcf58045aba2fafc13
|-
| progs/h_ogre.mdl  ||style=text-align:right|  14900 || 14eb06611c769e254d0531c05919bdf5
|-
| progs/h_player.mdl  ||style=text-align:right|  14708 || bf1773df7d3e19c5b211a1ee408f6b05
|-
| progs/h_shams.mdl  ||style=text-align:right|  37060 || ff1e04e18c57667991341a011fb6c363
|-
| progs/h_wizard.mdl  ||style=text-align:right|  14804 || 4bc6be40128f313cf9ad06c347310735
|-
| progs/h_zombie.mdl  ||style=text-align:right|  4484 || 0fdef7f7cd05a3209e0a163e87f69f8b
|-
| progs/invisibl.mdl  ||style=text-align:right|  7092 || 1e87d86af02e69db9c9f27f5fddc7a47
|-
| progs/invulner.mdl  ||style=text-align:right|  23920 || 8c8d83e4d50c3282d009b333a1280422
|-
| progs/knight.mdl  ||style=text-align:right|  101404 || 5328915db5c53e85cf75d46e7b747fb9
|-
| progs/lavaball.mdl  ||style=text-align:right|  8788 || 92af53d2145681e37877dbc1d12801b2
|-
| progs/m_g_key.mdl  ||style=text-align:right|  12820 || 192c2650a115c91706f6fa8fe68beb45
|-
| progs/missile.mdl  ||style=text-align:right|  57796 || 47f19f9e34954b93443c9759dd2e7ba0
|-
| progs/m_s_key.mdl  ||style=text-align:right|  12820 || 20837376b391cdd5c92e57b84e05687f
|-
| progs/ogre.mdl  ||style=text-align:right|  162036 || fbb592ca3788a576dd2f31fcf8c80fab
|-
| progs/player.mdl  ||style=text-align:right|  191852 || 405cef9a10d96cdabffb5e91312f8e5c
|-
| progs/quaddama.mdl  ||style=text-align:right|  39992 || 00b177ff272a4779097ea08344da8aff
|-
| progs/s_bubble.spr  ||style=text-align:right|  588 || 7c0887630ed468205292d8cb7abcae93
|-
| progs/s_explod.spr  ||style=text-align:right|  18972 || 766c6a92c26b54f68f7ff87c90d71cf2
|-
| progs/shambler.mdl  ||style=text-align:right|  98556 || 9b09375a0f614dc4081e363cc34f1185
|-
| progs/s_light.mdl  ||style=text-align:right|  27596 || ee6649ea5673989f3aa06213a8d65f76
|-
| progs/s_light.spr  ||style=text-align:right|  1080 || aff44ba238f4e1d0d504d6f9700aadb4
|-
| progs/soldier.mdl  ||style=text-align:right|  146288 || 5b6c30a984872b4273dd5861412d35c5
|-
| progs/spike.mdl  ||style=text-align:right|  1684 || be4cb73125f939284376080acc9887dd
|-
| progs/s_spike.mdl  ||style=text-align:right|  1684 || ebb1d58242b64a703623c8a33fcbd9e6
|-
| progs/suit.mdl  ||style=text-align:right|  51236 || 882a61f5eea7f9cdbc04800b963cef85
|-
| progs/v_axe.mdl  ||style=text-align:right|  57908 || 577dadcca2700068995c808dc7dec76f
|-
| progs/v_light.mdl  ||style=text-align:right|  56204 || 68733d4c690de88b5c3ba33e52be1c15
|-
| progs/v_nail2.mdl  ||style=text-align:right|  68732 || aacd1002ab02662cc1d3ff46885b553e
|-
| progs/v_nail.mdl  ||style=text-align:right|  54472 || ec9ba028b346da2f9674c2a521ff0c2f
|-
| progs/v_rock2.mdl  ||style=text-align:right|  58188 || 96edf1a3c7629987c200361523f780d7
|-
| progs/v_rock.mdl  ||style=text-align:right|  58548 || 7bea46b2a75fd7cff2fb99420e4c4e25
|-
| progs/v_shot2.mdl  ||style=text-align:right|  50816 || 922b3b687766ae0d7aeb73d44dec7035
|-
| progs/v_shot.mdl  ||style=text-align:right|  43852 || 1fd140b6856843e83cd9bf3966f5d7dd
|-
| progs/w_g_key.mdl  ||style=text-align:right|  7252 || c5c5f0d14b022f57294ad9aded318250
|-
| progs/wizard.mdl  ||style=text-align:right|  64472 || bf60986594f045e60e8aa6339d553ee7
|-
| progs/w_s_key.mdl  ||style=text-align:right|  7252 || ec02314a7d12439d36b4eb2dd0a641a8
|-
| progs/w_spike.mdl  ||style=text-align:right|  14336 || 8cf9245df2164e8062b01a220b508d6b
|-
| progs/zombie.mdl  ||style=text-align:right|  186084 || a923b1d03b9d237dd5ead9bd56acc900
|-
| progs/zom_gib.mdl  ||style=text-align:right|  10196 || cf42c938caa5b19f719d1f110b1dc6d4
|-
| quake.rc  ||style=text-align:right|  293 || 411d42958aaeae141813f9ebfcf5233f
|-
| sound/ambience/buzz1.wav  ||style=text-align:right|  36308 || 346a00c795c6f1f1338ade6fc350b3fe
|-
| sound/ambience/comp1.wav  ||style=text-align:right|  62734 || f91a1120de804f7cd4dbba4f12c748e9
|-
| sound/ambience/drip1.wav  ||style=text-align:right|  137736 || 2306a76162eeda3d0812c516bc99aa7a
|-
| sound/ambience/drone6.wav  ||style=text-align:right|  18522 || 322853ddb42ad2a205579b5cca8e2e8c
|-
| sound/ambience/fire1.wav  ||style=text-align:right|  24064 || 610d3985ed8133988e8de3bec2b9cbbe
|-
| sound/ambience/fl_hum1.wav  ||style=text-align:right|  50154 || e4628499702e004c4bacd282a3ecb8c0
|-
| sound/ambience/hum1.wav  ||style=text-align:right|  40166 || 486bfa737c35b0c9dda57cbee2a540af
|-
| sound/ambience/suck1.wav  ||style=text-align:right|  110392 || 2e99e4d1fe1501d5191c8157d3063cb6
|-
| sound/ambience/swamp1.wav  ||style=text-align:right|  68524 || 29ffb678d78997eb6c227677c86ea4f8
|-
| sound/ambience/swamp2.wav  ||style=text-align:right|  68526 || 356aa1e875da846e72d8f17bbb699a5b
|-
| sound/ambience/thunder1.wav  ||style=text-align:right|  41492 || cefd6ced4b5bc79fcece1003238566f6
|-
| sound/ambience/water1.wav  ||style=text-align:right|  55784 || 6eeaae0a3450652d2be0782895297ee4
|-
| sound/ambience/wind2.wav  ||style=text-align:right|  28610 || 030cf8dd2b00a12454b5b35a89d03914
|-
| sound/ambience/windfly.wav  ||style=text-align:right|  22140 || c7be01e6d324e66883f70aa0072a99b0
|-
| sound/boss1/death.wav  ||style=text-align:right|  27600 || 43469b1acd35b67107da5da82e1df911
|-
| sound/boss1/out1.wav  ||style=text-align:right|  50344 || 847a6f971f6905dfaffd70b30d18a4b1
|-
| sound/boss1/pain.wav  ||style=text-align:right|  17700 || 49112740c0ff421f9272b9e8efc748cd
|-
| sound/boss1/sight1.wav  ||style=text-align:right|  24768 || 427dd600e6b28c9402212adcc5d652c7
|-
| sound/boss1/throw.wav  ||style=text-align:right|  11526 || 9b6e9ff2c8df448f7fd4b5315e60ddda
|-
| sound/buttons/airbut1.wav  ||style=text-align:right|  10672 || 9d2e14e7176842a0dce909a43d38873d
|-
| sound/buttons/switch02.wav  ||style=text-align:right|  3746 || d2e9cba3a353edc65115f6f5c574403c
|-
| sound/buttons/switch04.wav  ||style=text-align:right|  3666 || ff47857a58d3faefb2b94a37d7ba4f26
|-
| sound/buttons/switch21.wav  ||style=text-align:right|  6318 || 3605b0d061a9baf185c6ab7614534531
|-
| sound/demon/ddeath.wav  ||style=text-align:right|  9140 || 62a48dcd405ca55c9ce18497e36faa0e
|-
| sound/demon/dhit2.wav  ||style=text-align:right|  7142 || 9e741696e4d0d66e30e718fc70ec186e
|-
| sound/demon/djump.wav  ||style=text-align:right|  8494 || 791ac9d6b6593808316145443cb7e7a0
|-
| sound/demon/dland2.wav  ||style=text-align:right|  4400 || db14c7b01838f826b7a712075f9026fd
|-
| sound/demon/dpain1.wav  ||style=text-align:right|  6282 || 5e6c485878393c9bebb0d0e6659bc479
|-
| sound/demon/idle1.wav  ||style=text-align:right|  9098 || 7a83f8caf3d5b1172a7dc5afdc942988
|-
| sound/demon/sight2.wav  ||style=text-align:right|  8804 || 65171c355c22a5069520b0881677ae3c
|-
| sound/dog/dattack1.wav  ||style=text-align:right|  8154 || 0c47c9d4aaae0bf3159a288b674f4a35
|-
| sound/dog/ddeath.wav  ||style=text-align:right|  14912 || b0e7760b1d7286a028ff9773f6802958
|-
| sound/dog/dpain1.wav  ||style=text-align:right|  7240 || 28e5ab93b41e13e2916433283a5d1a46
|-
| sound/dog/dsight.wav  ||style=text-align:right|  6722 || 0edc290765bac1fb4fe03ca55bc7c225
|-
| sound/dog/idle.wav  ||style=text-align:right|  6870 || 42bd6026ff32bd94523ad9f8fe8362cc
|-
| sound/doors/airdoor1.wav  ||style=text-align:right|  13654 || 9b91930e8c2fdece31a2362296891122
|-
| sound/doors/airdoor2.wav  ||style=text-align:right|  8594 || 29fd823d1c14ca42a9a89c716b26f4cd
|-
| sound/doors/basesec1.wav  ||style=text-align:right|  13930 || eb2363fed42724f55e8f55f96c335bcf
|-
| sound/doors/basesec2.wav  ||style=text-align:right|  10238 || 8d163a56607c9cf64a270a156c1c5cef
|-
| sound/doors/basetry.wav  ||style=text-align:right|  10518 || a5108d5c51281ab55c0baf884cbe8cbe
|-
| sound/doors/baseuse.wav  ||style=text-align:right|  16486 || f43fee91efe813a5eb34e9d72918fdb9
|-
| sound/doors/ddoor1.wav  ||style=text-align:right|  7738 || dff86a26139cdd49a193d5ed7ebf6ae1
|-
| sound/doors/ddoor2.wav  ||style=text-align:right|  5904 || 4a9d0b0825d0302ce465569d1e35fbcf
|-
| sound/doors/doormv1.wav  ||style=text-align:right|  14036 || 3fd379aec80a2ad8105c0c89ba5b40e6
|-
| sound/doors/drclos4.wav  ||style=text-align:right|  12814 || 83df1865a0c9fa5d02c2f137564c57de
|-
| sound/doors/hydro1.wav  ||style=text-align:right|  11094 || b1703980a20e624bc3366ccf55ca617e
|-
| sound/doors/hydro2.wav  ||style=text-align:right|  10700 || b1866f5b3950788ccf4206444ab64bc7
|-
| sound/doors/latch2.wav  ||style=text-align:right|  7338 || ad2378ca21a0ca529df328261e07aed5
|-
| sound/doors/medtry.wav  ||style=text-align:right|  7828 || ebb536bec2cdfd22c25b35793c055339
|-
| sound/doors/meduse.wav  ||style=text-align:right|  10718 || 4522aada194b23eb33b541cbcc755cf6
|-
| sound/doors/runetry.wav  ||style=text-align:right|  13524 || c433bae9e2ab508712f87dc2cacc82c8
|-
| sound/doors/runeuse.wav  ||style=text-align:right|  17364 || b4bcfd525a26f5b5ecc9d392430d9079
|-
| sound/doors/stndr1.wav  ||style=text-align:right|  12620 || 5bae2183885e18d65d69624e85249fd9
|-
| sound/doors/stndr2.wav  ||style=text-align:right|  11470 || f43a75c917effff09ef7be8a321c8b49
|-
| sound/doors/winch2.wav  ||style=text-align:right|  14872 || a4edffdfede7dbaed37db526c26e2b6d
|-
| sound/hknight/hit.wav  ||style=text-align:right|  6260 || fece24e2548f1d769e8fce39a5c87d01
|-
| sound/items/armor1.wav  ||style=text-align:right|  7714 || 186d29f2baf35b8c280bc97754606fad
|-
| sound/items/damage2.wav  ||style=text-align:right|  33012 || 14e53b7617ffe315a7c3f8d89652e51c
|-
| sound/items/damage3.wav  ||style=text-align:right|  12894 || baf754aec7ed4baba16760ac85513184
|-
| sound/items/damage.wav  ||style=text-align:right|  23374 || 8cde8b9278ca4922a4ec7ead6e5ee01b
|-
| sound/items/health1.wav  ||style=text-align:right|  7958 || 52a2c4f808db4edd8393de0de618c91f
|-
| sound/items/inv1.wav  ||style=text-align:right|  13728 || 5850cab55d6197d0e76d9f0a22ba10be
|-
| sound/items/inv2.wav  ||style=text-align:right|  33216 || 4edcd38a2c6adc5305636dd7afd5ef60
|-
| sound/items/inv3.wav  ||style=text-align:right|  33320 || 325c268be05b42a019ccb92e6993ab9e
|-
| sound/items/itembk2.wav  ||style=text-align:right|  9910 || 270c688b3cb884f5d4e5ffd8ccc934a1
|-
| sound/items/protect2.wav  ||style=text-align:right|  34012 || 25627a4bd2b4c6054cfd2fc4bf69ddc2
|-
| sound/items/protect3.wav  ||style=text-align:right|  23364 || 7b9374d67f6d59e524bba2af236ca30a
|-
| sound/items/protect.wav  ||style=text-align:right|  22536 || d839d5a84f811ce8a0e28616891bf1a7
|-
| sound/items/r_item1.wav  ||style=text-align:right|  6822 || 3fc0d0ae4a71c9fbfe548f38626c6a08
|-
| sound/items/r_item2.wav  ||style=text-align:right|  7448 || 384ffefe795d99df75f381596a0f1976
|-
| sound/items/suit2.wav  ||style=text-align:right|  33254 || 0a9d2766a5b805cb5794f9bea57e6585
|-
| sound/items/suit.wav  ||style=text-align:right|  15854 || da413f34023d219f1e34fde50a037be0
|-
| sound/knight/idle.wav  ||style=text-align:right|  11064 || 1b5c3981bee078318af346d8fe8090b9
|-
| sound/knight/kdeath.wav  ||style=text-align:right|  10688 || 11a96f48a8f2433c23beae299c8fb96e
|-
| sound/knight/khurt.wav  ||style=text-align:right|  5586 || 32c9f48dd4a6a87752aedf56fe8de668
|-
| sound/knight/ksight.wav  ||style=text-align:right|  13514 || eb75b4af348c88e84d8c87c19d5976fa
|-
| sound/knight/sword1.wav  ||style=text-align:right|  2306 || 93045b5f3178413dc6b01ec2869d1f73
|-
| sound/knight/sword2.wav  ||style=text-align:right|  2784 || 82d1a7c263cd3df7b060dee2f7f8b1fd
|-
| sound/misc/h2ohit1.wav  ||style=text-align:right|  12972 || 49ecb03f4f10862453656a67598f8b8a
|-
| sound/misc/medkey.wav  ||style=text-align:right|  10020 || 0e3ae5626a47d81e4166539e355e31bb
|-
| sound/misc/menu1.wav  ||style=text-align:right|  5738 || 12c36546601c385bc47c9ca9420b7eee
|-
| sound/misc/menu2.wav  ||style=text-align:right|  10672 || 39b01ea6feb3ec8dbd6d8ee3e5e966c4
|-
| sound/misc/menu3.wav  ||style=text-align:right|  3010 || 4a03dc2fd56831b855dab761eac4f7de
|-
| sound/misc/null.wav  ||style=text-align:right|  1244 || 811989e09124f54cb27fe6154b0f1018
|-
| sound/misc/outwater.wav  ||style=text-align:right|  5018 || 35732412412ddb5ed418633bb0123bbe
|-
| sound/misc/power.wav  ||style=text-align:right|  19832 || 9f2c3a18d9fc8d9cecfac6db3aad6bc6
|-
| sound/misc/r_tele1.wav  ||style=text-align:right|  8036 || c2194171b4c446e136ed7514fbb098a5
|-
| sound/misc/r_tele2.wav  ||style=text-align:right|  17324 || 0ce662ac90fb3658d69320d1be4025c1
|-
| sound/misc/r_tele3.wav  ||style=text-align:right|  18016 || 122ef44813edcfe7391578fd29e729d2
|-
| sound/misc/r_tele4.wav  ||style=text-align:right|  9068 || 0097b5747ccc70d5b12fc6838aff02c2
|-
| sound/misc/r_tele5.wav  ||style=text-align:right|  22042 || a82334cbb66d12f28cce9e71c90ea50b
|-
| sound/misc/runekey.wav  ||style=text-align:right|  14578 || 6b21a2e5878011da50fdee0a301d3e34
|-
| sound/misc/secret.wav  ||style=text-align:right|  6610 || a02ceefcc24b1ebf5c164a1e1acfb05f
|-
| sound/misc/talk.wav  ||style=text-align:right|  1810 || d5b25d4df59d92ac5016e88689ea60c1
|-
| sound/misc/trigger1.wav  ||style=text-align:right|  20230 || dc927c8a1d0a9bd59fbc5dd91ae1d812
|-
| sound/misc/water1.wav  ||style=text-align:right|  3926 || d8291c762acb1edf24927fdcc0f6a6cd
|-
| sound/misc/water2.wav  ||style=text-align:right|  3340 || 049e8e7e7b30d4d8038afb7248bdd977
|-
| sound/ogre/ogdrag.wav  ||style=text-align:right|  12396 || 658587dc89aaefae5ca3f058f7ff4227
|-
| sound/ogre/ogdth.wav  ||style=text-align:right|  13892 || de98e7bb9e70586edddd3308cfded3db
|-
| sound/ogre/ogidle2.wav  ||style=text-align:right|  11254 || 196ae9c33a4311160e1d5f3da878ab09
|-
| sound/ogre/ogidle.wav  ||style=text-align:right|  12894 || 177c829840a87c885bbc8951e7ce962e
|-
| sound/ogre/ogpain1.wav  ||style=text-align:right|  7898 || ac6d133d7720c12df49813fe10e683b5
|-
| sound/ogre/ogsawatk.wav  ||style=text-align:right|  16154 || 7257bdfd014bb61d778b8f88cb65d560
|-
| sound/ogre/ogwake.wav  ||style=text-align:right|  19356 || 3296459e495c4c12b31179d4eeffac19
|-
| sound/plats/medplat1.wav  ||style=text-align:right|  16378 || b73215aa6627c8b5b90fce8d260d48d0
|-
| sound/plats/medplat2.wav  ||style=text-align:right|  7338 || 1fc6c3772917a1a8155d04fa52e17005
|-
| sound/plats/plat1.wav  ||style=text-align:right|  20248 || 5d43ed85d896ba926f459e06ba6635d5
|-
| sound/plats/plat2.wav  ||style=text-align:right|  7338 || 49d7ab0fd726cd652eb6e5756fce61b9
|-
| sound/plats/train1.wav  ||style=text-align:right|  21430 || b589ae8262046361d9dca39d6b8f693a
|-
| sound/plats/train2.wav  ||style=text-align:right|  5870 || 640017e1b870d643e3bca29d499c72ee
|-
| sound/player/axhit1.wav  ||style=text-align:right|  6906 || 149b2371334da318386325182924eaca
|-
| sound/player/axhit2.wav  ||style=text-align:right|  2434 || fc01909318455f5310efa2457a370897
|-
| sound/player/death1.wav  ||style=text-align:right|  10170 || ba005f5488d4ee78dabf613a03f33a5f
|-
| sound/player/death2.wav  ||style=text-align:right|  8026 || 20477d2e7c84aac1bef95d32c9c702dd
|-
| sound/player/death3.wav  ||style=text-align:right|  10918 || 7b206ba8e1fa28d8605b50e3f3200f11
|-
| sound/player/death4.wav  ||style=text-align:right|  14126 || 1b0f27f4d41b748d3cc5c3d56bd917f8
|-
| sound/player/death5.wav  ||style=text-align:right|  14946 || 7efe84195cfa97515aad2d7f96f25346
|-
| sound/player/drown1.wav  ||style=text-align:right|  8908 || 732f0416af6990e028110380bcb36f0d
|-
| sound/player/drown2.wav  ||style=text-align:right|  3114 || 29ee1f287879acce29b15d4722668bc2
|-
| sound/player/gasp1.wav  ||style=text-align:right|  8702 || b06cbc370c8c2c163dc4d487e8b673c7
|-
| sound/player/gasp2.wav  ||style=text-align:right|  13134 || 30aece9d8779764620c7f866bfb06edb
|-
| sound/player/gib.wav  ||style=text-align:right|  14424 || 26fa9942078125388f34b71546615068
|-
| sound/player/h2odeath.wav  ||style=text-align:right|  18104 || 73b0f4dfae07f6e49112cadfe202735c
|-
| sound/player/h2ojump.wav  ||style=text-align:right|  11438 || cd421b96410971bb1a4f21d3936a3805
|-
| sound/player/inh2o.wav  ||style=text-align:right|  11340 || d4c1a27c4d07e8dfdf18a4b1a880c610
|-
| sound/player/inlava.wav  ||style=text-align:right|  10958 || c37875a082900716b7af88d2d990f55c
|-
| sound/player/land2.wav  ||style=text-align:right|  6204 || 6ba534256a779d66d9d9dabb90e63c8b
|-
| sound/player/land.wav  ||style=text-align:right|  2434 || e34328a40358d98f0f95403b9e27ec1e
|-
| sound/player/lburn1.wav  ||style=text-align:right|  6682 || 3c447c72385defe97c060771077d8ba0
|-
| sound/player/lburn2.wav  ||style=text-align:right|  6076 || 6849ee8dbd91ec82ece016fbd39b0a5c
|-
| sound/player/pain1.wav  ||style=text-align:right|  3394 || d7ac9df7540b791f952ca2a681c0265b
|-
| sound/player/pain2.wav  ||style=text-align:right|  2710 || 513e054b64d4fb61f31384d59e123020
|-
| sound/player/pain3.wav  ||style=text-align:right|  4854 || aafc61ad4e16cc5cdd2db2100796b494
|-
| sound/player/pain4.wav  ||style=text-align:right|  4840 || f655ef2045bc55473303b27546aa6fc0
|-
| sound/player/pain5.wav  ||style=text-align:right|  8020 || f8551a73cb89396042687baa8c68b5c2
|-
| sound/player/pain6.wav  ||style=text-align:right|  5462 || 70062eabf96288d307280fb601ce0ee2
|-
| sound/player/plyrjmp8.wav  ||style=text-align:right|  3888 || d4a552d8f627c7f3b933568c4a74c913
|-
| sound/player/slimbrn2.wav  ||style=text-align:right|  12468 || b17c18a9f81a952f2d41f65b5180f210
|-
| sound/player/teledth1.wav  ||style=text-align:right|  14414 || c226c7f041187ba058d8112cc0190b56
|-
| sound/player/tornoff2.wav  ||style=text-align:right|  7726 || 03ec1c805b307b8fe4c4052f8332a5e5
|-
| sound/player/udeath.wav  ||style=text-align:right|  16082 || afe674f287efb6197da2cea0c0b1d2f8
|-
| sound/shambler/melee1.wav  ||style=text-align:right|  4718 || 77fe6240973a204b757a427ebf66bcfd
|-
| sound/shambler/melee2.wav  ||style=text-align:right|  5966 || 3be31638d769e3d690c92311dfafdeac
|-
| sound/shambler/sattck1.wav  ||style=text-align:right|  8036 || ec8c3f79ea42d09154cb8975ada1b21c
|-
| sound/shambler/sboom.wav  ||style=text-align:right|  11672 || 9834601a645d7d1f62001b2a314ec18f
|-
| sound/shambler/sdeath.wav  ||style=text-align:right|  21106 || e0e62d229a985a6e39218c6488599059
|-
| sound/shambler/shurt2.wav  ||style=text-align:right|  4302 || 1e87631ede95e061a75f9c31629ac0b8
|-
| sound/shambler/sidle.wav  ||style=text-align:right|  5646 || 368a240e6c3e877793352a79c1828386
|-
| sound/shambler/smack.wav  ||style=text-align:right|  5300 || bd8c634c9894348360fec7b7419d1649
|-
| sound/shambler/ssight.wav  ||style=text-align:right|  15420 || 657107577460d5acf3157dec97e07a89
|-
| sound/soldier/death1.wav  ||style=text-align:right|  8434 || fe25952af40b536c3bb67bfca58062eb
|-
| sound/soldier/idle.wav  ||style=text-align:right|  9802 || 4cdfbdda8fb5f40b125c7bcddb6e8914
|-
| sound/soldier/pain1.wav  ||style=text-align:right|  5000 || 54d3b05fdcecf7480034858f2b22b06c
|-
| sound/soldier/pain2.wav  ||style=text-align:right|  7838 || e2bbc9d3405b9b9fdae76d2fc298fc2f
|-
| sound/soldier/sattck1.wav  ||style=text-align:right|  14302 || b76ac35f900f280a7a7996da7e404362
|-
| sound/soldier/sight1.wav  ||style=text-align:right|  12716 || e2a39533250ddd1b08053d5c4ebf7fd0
|-
| sound/weapons/ax1.wav  ||style=text-align:right|  3308 || 237d4d819d02ad37849a8a895cc410e1
|-
| sound/weapons/bounce.wav  ||style=text-align:right|  5864 || fced668c6558a9505abf5014d60528a6
|-
| sound/weapons/grenade.wav  ||style=text-align:right|  8364 || d2b6fa131933f203eba2a282276e88df
|-
| sound/weapons/guncock.wav  ||style=text-align:right|  14430 || 6a63452167cc106e756518536446844f
|-
| sound/weapons/lhit.wav  ||style=text-align:right|  26028 || fefd021d0bd35a1f8da8870f1c06abb9
|-
| sound/weapons/lock4.wav  ||style=text-align:right|  3876 || 3fd93222258d5b1500b150f021c94519
|-
| sound/weapons/lstart.wav  ||style=text-align:right|  56378 || abe1abf6dcadcda5930b0684c7ea820a
|-
| sound/weapons/pkup.wav  ||style=text-align:right|  5174 || 0aa6f0a7d609e1a56fd535a06d1bb56e
|-
| sound/weapons/r_exp3.wav  ||style=text-align:right|  17478 || 57db026474fc76ba7f38cea24eaaf8cf
|-
| sound/weapons/ric1.wav  ||style=text-align:right|  4308 || a31166b4bbb4509ac3004a01f7477ee9
|-
| sound/weapons/ric2.wav  ||style=text-align:right|  10838 || a180b447c0527e603cea54a9aefd6139
|-
| sound/weapons/ric3.wav  ||style=text-align:right|  12638 || 8a773bbb585540ddce256151162f3a2c
|-
| sound/weapons/rocket1i.wav  ||style=text-align:right|  9660 || fb4fdf345d805cf6980c4c695974effc
|-
| sound/weapons/sgun1.wav  ||style=text-align:right|  22992 || 95a14815e48deb323d0cf8251d728ac7
|-
| sound/weapons/shotgn2.wav  ||style=text-align:right|  8694 || cb561cefbf472232334b419af050e5a0
|-
| sound/weapons/spike2.wav  ||style=text-align:right|  12642 || 9189d811855f108da4a1e2d34dc7c633
|-
| sound/weapons/tink1.wav  ||style=text-align:right|  1252 || 297ba8706625fcf05887edb393e9a441
|-
| sound/wizard/hit.wav  ||style=text-align:right|  7332 || 6598d669334df977f1f97b95288edf11
|-
| sound/wizard/wattack.wav  ||style=text-align:right|  25912 || b3568a47439f81779d40335e76f5bc2d
|-
| sound/wizard/wdeath.wav  ||style=text-align:right|  20684 || 99d9c71343bc23222abb92119d404400
|-
| sound/wizard/widle1.wav  ||style=text-align:right|  13464 || b22b1dd9f66879b3447d36ab584316c7
|-
| sound/wizard/widle2.wav  ||style=text-align:right|  23094 || 7178fd83df227360564adef01bed92c6
|-
| sound/wizard/wpain.wav  ||style=text-align:right|  8686 || bd7e59ab7d7b835f9ed8ab51950914de
|-
| sound/wizard/wsight.wav  ||style=text-align:right|  13078 || df5949057c750528917c6cb32b7fd9fd
|-
| sound/zombie/idle_w2.wav  ||style=text-align:right|  17192 || d2bb59b9d7ac71097c07123a23525641
|-
| sound/zombie/z_fall.wav  ||style=text-align:right|  3062 || 6968318b2d196c6d54bc707d8a390547
|-
| sound/zombie/z_gib.wav  ||style=text-align:right|  16226 || 199dda66ade8d6f0ef4897e4d7608c0d
|-
| sound/zombie/z_hit.wav  ||style=text-align:right|  6166 || 6c66ab3e6b149bf35956a4bbc0057acb
|-
| sound/zombie/z_idle1.wav  ||style=text-align:right|  13244 || 21088a7b38b1124d7ec72e58d5ab93a6
|-
| sound/zombie/z_idle.wav  ||style=text-align:right|  16734 || e5e570e38c4405111004190a79f0e925
|-
| sound/zombie/z_miss.wav  ||style=text-align:right|  10734 || 96fad96a8c3bc6f7bcc5da6c82678da2
|-
| sound/zombie/z_pain1.wav  ||style=text-align:right|  15374 || fcd83b89a94b0cadbe1361a4df080ec0
|-
| sound/zombie/z_pain.wav  ||style=text-align:right|  12218 || 56637968b8309bd2f825153330bbdfc0
|-
| sound/zombie/z_shot1.wav  ||style=text-align:right|  3068 || 561afb69b7851923a8fb3b54e3e13c96
|-
|}&lt;/tt&gt;

The only difference to fc989b37572fae074e8ffda0ce4d5297 is an updated progs.dat.

{{todo|todo=Multiple to do items listed above, detail out the contents of various pak files}}
{{todo|todo=different releases have different pak0.pak files}}
{{todo|todo=fc989b37572fae074e8ffda0ce4d5297 is the md5sum of default.cfg, there is no pak0.pak with that checksum, only 85fc9cee2035b66290da1e33be2ac86b for 1.01 and 5906e5998fc3d896ddaf5e6a62e03abb for 1.06}}</text>
      <sha1>6catug7lpitxq1wa6lxcjadni1j5s58</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3274</id>
      <parentid>3273</parentid>
      <timestamp>2014-10-07T10:07:16Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>removed fc989b37572fae074e8ffda0ce4d5297 as that was indeed an error</comment>
      <text xml:space="preserve" bytes="66738">The '''''pak0.pak''''' file that comes with Quake is required by all Quake [[engines]]. It contains the maps, models, programs, sounds, and skins required to play Quake Episode 1, ''Dimension of the Doomed''. It is expected to be in the ID1 subfolder of the Quake root folder.

[[PAK file]]s are typically named ''pak0.pak'', ''pak1.pak'', ''pak2.pak'', and so on. Quake mission packs and other Quake-based games often have their own ''pak0.pak'' files, which live in a different folder, not the ID1 folder.

The ID1 ''pak0.pak'' is distributed with both the shareware and the registered/commercial editions of Quake.

In some editions, including the downloadable shareware (''quake106.zip'') from id Software, ''pak0.pak'' is embedded in another archive, ''[[resource.1]]''. The files in this archive are LZH-encoded using the lh5 algorithm. If you can't or don't want to run the DOS/Win32 Quake installer program it comes with, then you'll need a compatible extractor program to get ''pak0.pak'' out of the ''resource.1'' archive.


== Versions ==
&lt;tt&gt;
{| class=&quot;wikitable&quot;
! Version !! Timestamp !! Size !! md5
|-
| Registered Version 1.01 (as well as Shareware Version 1.01 on that [https://www.quaddicted.com/library/quake_registered_1.01_id disc]) || 1996-07-12 ||style=text-align:right|  18276119 || 85fc9cee2035b66290da1e33be2ac86b
|-
| Shareware Version 1.01 ([https://www.quaddicted.com/library/quake_episode_1_shareware Shareware disc]) || 1996-07-12 ||style=text-align:right|  18276119 || 85fc9cee2035b66290da1e33be2ac86b
|-
| Registered Version 1.06 || 1996-10-01 14:25:58 ||style=text-align:right|  18689235 || 5906e5998fc3d896ddaf5e6a62e03abb
|-
|}&lt;/tt&gt;

=== 85fc9cee2035b66290da1e33be2ac86b ===
The [[id1]] ''pak0.pak'' with the md5sum 85fc9cee2035b66290da1e33be2ac86b contains the following folders &amp; files:
&lt;tt&gt;
{| class=&quot;wikitable collapsible collapsed&quot;
|-
! Path !! Size !! md5
|-
| default.cfg  ||style=text-align:right|  1914 || fc989b37572fae074e8ffda0ce4d5297
|-
| demo1.dem  ||style=text-align:right|  184471 || 85ec0141ab24d9732e487d1aafa791f0
|-
| demo2.dem  ||style=text-align:right|  152705 || fa5c3daf7a57954cd95f94b698a7e420
|-
| demo3.dem  ||style=text-align:right|  197679 || 691f37e5715ea2863c1d8092a6429824
|-
| end1.bin  ||style=text-align:right|  4000 || 92ae51961ec2f429dfe9bea1138fbd5d
|-
| gfx/bigbox.lmp  ||style=text-align:right|  5192 || e597771ac6149b2b071ebfd24981ea04
|-
| gfx/box_bl.lmp  ||style=text-align:right|  72 || 5b094c37c2c1c2eebe37f84117dea182
|-
| gfx/box_bm.lmp  ||style=text-align:right|  136 || 44621236738e2bf8d669e53dca887278
|-
| gfx/box_br.lmp  ||style=text-align:right|  72 || 86597d5325b472caf5644644033e5cab
|-
| gfx/box_ml.lmp  ||style=text-align:right|  72 || adcea286ba0ac01084fd0c131b16ffdd
|-
| gfx/box_mm2.lmp  ||style=text-align:right|  136 || b850bcec189d909e7a0f796111a11249
|-
| gfx/box_mm.lmp  ||style=text-align:right|  136 || 700b4884b1a3c6aa7356a43014261866
|-
| gfx/box_mr.lmp  ||style=text-align:right|  72 || e30d9ea783ef7dd50101682f03ba40d7
|-
| gfx/box_tl.lmp  ||style=text-align:right|  72 || 3903d3d814e37c55790ac0ccfef2b925
|-
| gfx/box_tm.lmp  ||style=text-align:right|  136 || 7cb85ccbf8e7d2532da2a839a7cef348
|-
| gfx/box_tr.lmp  ||style=text-align:right|  72 || 5c5e72746af821a4cf8437d8fecc53c7
|-
| gfx/colormap.lmp  ||style=text-align:right|  16385 || 0d793b70bffafbd666fc5c88d6e15e9d
|-
| gfx/complete.lmp  ||style=text-align:right|  4616 || db6a00dfbe2c62a43c261e5622297c4a
|-
| gfx/conback.lmp  ||style=text-align:right|  64008 || 9eb6f9c47870bf42985d9382958a5c12
|-
| gfx/dim_drct.lmp  ||style=text-align:right|  3352 || 50ea11fe8c4d9db92863bdcd03b89df5
|-
| gfx/dim_ipx.lmp  ||style=text-align:right|  3352 || 0bef9943487f0611225bf0a5c0fe5dd4
|-
| gfx/dim_modm.lmp  ||style=text-align:right|  3352 || 3288f03144f06b95cadafa9458a77b1d
|-
| gfx/dim_mult.lmp  ||style=text-align:right|  3352 || 348b7369227f2d7e9d0daccbf6c9344d
|-
| gfx/dim_tcp.lmp  ||style=text-align:right|  3352 || 7dc8bbb01d7c90cd51c28da0ff6ed900
|-
| gfx/finale.lmp  ||style=text-align:right|  6920 || b6e49409d344e0344273d86ea33fe35f
|-
| gfx/help0.lmp  ||style=text-align:right|  64008 || b392ac30ad49252b51ec934ed855c20f
|-
| gfx/help1.lmp  ||style=text-align:right|  64008 || 857543c69245117a606044ea63adac9a
|-
| gfx/help2.lmp  ||style=text-align:right|  64008 || 882dd5920ea9c19f637f32084de9788a
|-
| gfx/help3.lmp  ||style=text-align:right|  64008 || a89d169524920d896128009467deebfc
|-
| gfx/help4.lmp  ||style=text-align:right|  64008 || c72d67c84ae6b403fae5f08d3e5c3bc6
|-
| gfx/help5.lmp  ||style=text-align:right|  64008 || 12203d7cdec35c4f51622dd90ec92093
|-
| gfx/inter.lmp  ||style=text-align:right|  23048 || f6eabe0d742380c7b47a9ee44170993d
|-
| gfx/loading.lmp  ||style=text-align:right|  3464 || 3249bc994266529a1748c06bfbb24bfa
|-
| gfx/mainmenu.lmp  ||style=text-align:right|  26888 || 8122e2a0b8888f9d1ebef149551b6434
|-
| gfx/menudot1.lmp  ||style=text-align:right|  392 || bfdb08d84d580abcfbacc1c9abd62bfb
|-
| gfx/menudot2.lmp  ||style=text-align:right|  392 || 6c6d2176e00edbe530bb1db118aaa6dc
|-
| gfx/menudot3.lmp  ||style=text-align:right|  392 || 2527a05f6162efb3e4bc5311d9e010d5
|-
| gfx/menudot4.lmp  ||style=text-align:right|  392 || 90ea6be033b39b139b3779932d266f33
|-
| gfx/menudot5.lmp  ||style=text-align:right|  392 || c9beb9600c35e458d0f83b6cf1e1c692
|-
| gfx/menudot6.lmp  ||style=text-align:right|  392 || 31b9a6ec1d12a2bd56b955185a9e72d3
|-
| gfx/menuplyr.lmp  ||style=text-align:right|  2696 || 9eebe617ff51c4ce43f85ca1a6920d5b
|-
| gfx/mp_menu.lmp  ||style=text-align:right|  14856 || c6416b8f7f5262a5a19b9ce4be1fd9ce
|-
| gfx/netmen1.lmp  ||style=text-align:right|  3352 || 5bc6a8d8cfdfd7e940e933812954367a
|-
| gfx/netmen2.lmp  ||style=text-align:right|  3352 || c8aafb649a653e90fc5eb7b7a2b3ca2e
|-
| gfx/netmen3.lmp  ||style=text-align:right|  3352 || 11c9372d0e64057a1ec8251f596b820d
|-
| gfx/netmen4.lmp  ||style=text-align:right|  3352 || 74ec672b1312699be2eeaf25a68e4582
|-
| gfx/netmen5.lmp  ||style=text-align:right|  3352 || 231f8a9ea4ba364f517db0e9f7f1ba72
|-
| gfx/palette.lmp  ||style=text-align:right|  768 || 79bc149d4f2fb0bd68cd8400a3fd87d4
|-
| gfx/pause.lmp  ||style=text-align:right|  3080 || 5aa67f927719e4a9eb3e020e75fea969
|-
| gfx/p_load.lmp  ||style=text-align:right|  2504 || 27fe08071058385529b0b8ad746421e7
|-
| gfx/p_multi.lmp  ||style=text-align:right|  5192 || 5a307c7d11da20a4772ad9c00b9f4309
|-
| gfx/p_option.lmp  ||style=text-align:right|  3464 || 83a3bf4459bce3fe85857a0aa647b90a
|-
| gfx/p_save.lmp  ||style=text-align:right|  2120 || 0d2bb5fa5524e0180a85bf273094cd1f
|-
| gfx/qplaque.lmp  ||style=text-align:right|  4616 || f4de79557c75e26b85ea84fb6029a5f3
|-
| gfx/ranking.lmp  ||style=text-align:right|  4040 || 919b13d1f7fdd0082ec0f94699f3b681
|-
| gfx/sell.lmp  ||style=text-align:right|  64008 || 878db3866e8b38c5b8d951aef516358c
|-
| gfx/sp_menu.lmp  ||style=text-align:right|  14856 || f624aa79778970ecb8ef518b5ab435f6
|-
| gfx/ttl_cstm.lmp  ||style=text-align:right|  4424 || 4ee84e0e7fa93f0e93d26efb1e726a4d
|-
| gfx/ttl_main.lmp  ||style=text-align:right|  2312 || 07e1c8e189e2463befcfc44f5ecf8dcb
|-
| gfx/ttl_sgl.lmp  ||style=text-align:right|  3080 || 25d5360228da738f091063eaeb7c6aa8
|-
| gfx/vidmodes.lmp  ||style=text-align:right|  5192 || 18a97f403057777f262188903f485fe8
|-
| gfx.wad  ||style=text-align:right|  112828 || cde5b5890c8902c02a2f271abe8f4a1f
|-
| maps/b_batt0.bsp  ||style=text-align:right|  5044 || 00bc989f4c8d2570a2826a63c7356a27
|-
| maps/b_batt1.bsp  ||style=text-align:right|  4620 || 555bc0cb0b5c2ad2ed0110f307e70679
|-
| maps/b_bh100.bsp  ||style=text-align:right|  8820 || 62f78bb5143265f037b79ddd077c50ed
|-
| maps/b_bh10.bsp  ||style=text-align:right|  3936 || e80cde9f185612f669fc100f825ca84f
|-
| maps/b_bh25.bsp  ||style=text-align:right|  8872 || 032d70dbf8669b3627b82b41f31488bd
|-
| maps/b_explob.bsp  ||style=text-align:right|  10220 || d8c9db3cfa0264678afc580143f665ea
|-
| maps/b_nail0.bsp  ||style=text-align:right|  5044 || c8d7ec0bdee74e0c1e69e8dbe939117d
|-
| maps/b_nail1.bsp  ||style=text-align:right|  5044 || ea08b2bd6aa19ece0307f75c491e5d24
|-
| maps/b_rock0.bsp  ||style=text-align:right|  2956 || 19ce64cd248a4459bf37b45e6e7c1219
|-
| maps/b_rock1.bsp  ||style=text-align:right|  2944 || b4cdb75094cd7218ed2b0475aefabe80
|-
| maps/b_shell0.bsp  ||style=text-align:right|  5044 || 574824b3c52661959d633a76dc823859
|-
| maps/b_shell1.bsp  ||style=text-align:right|  5044 || dc8b8dcb490e204e615b2b9cdc673296
|-
| maps/e1m1.bsp  ||style=text-align:right|  1365176 || 84cae48010619bcc945426b91bc03ade
|-
| maps/e1m2.bsp  ||style=text-align:right|  1332228 || caff91afbe41f3eac4dda65cee0083c9
|-
| maps/e1m3.bsp  ||style=text-align:right|  1249944 || f20eaa5692e94ab889c4ade9e1c116c7
|-
| maps/e1m4.bsp  ||style=text-align:right|  1411452 || 29419f05ef647f83d0482502bb3f84f8
|-
| maps/e1m5.bsp  ||style=text-align:right|  1324060 || afd98cc890d748986186951b32fc9fcb
|-
| maps/e1m6.bsp  ||style=text-align:right|  1065080 || ec178e54ff68c4d8cf71e26775b2eb2d
|-
| maps/e1m7.bsp  ||style=text-align:right|  607420 || 0c1f55455e0f957291e21d211b689718
|-
| maps/e1m8.bsp  ||style=text-align:right|  924116 || 18c7ab2f922d5d586150afbc27c323a4
|-
| maps/start.bsp  ||style=text-align:right|  1433792 || 61a57bb4ca36368478f02b142d1b5291
|-
| progs/armor.mdl  ||style=text-align:right|  44076 || ca060166d7e4e4686995f05645dde593
|-
| progs/backpack.mdl  ||style=text-align:right|  19348 || 315b4ef42fb035aa3318e8d2d61961ce
|-
| progs/bolt2.mdl  ||style=text-align:right|  11860 || f59ce07cfbe01fcfc578258c573d2c31
|-
| progs/bolt3.mdl  ||style=text-align:right|  11860 || ff87579a424faa59ca2695b7434ea488
|-
| progs/bolt.mdl  ||style=text-align:right|  20644 || a176903954e9d8c7ab629f92784546c2
|-
| progs/boss.mdl  ||style=text-align:right|  211836 || 25da3b2bc30677e32ee3a3a878a4d3af
|-
| progs.dat  ||style=text-align:right|  410616 || cb04964a1952169e03392ee83a9edb91
|-
| progs/demon.mdl  ||style=text-align:right|  102120 || 4c73786e7cfb2083ca38cbc983cd6c4b
|-
| progs/dog.mdl  ||style=text-align:right|  146056 || e727fbc39acc652f812972612ce37565
|-
| progs/end1.mdl  ||style=text-align:right|  20820 || 67c0fcab33d3772c00bb462b0e749275
|-
| progs/eyes.mdl  ||style=text-align:right|  4372 || ed72f64a17c6909b2cb3034a734bca97
|-
| progs/flame2.mdl  ||style=text-align:right|  64572 || f2c8f8950ebd7a0edded6247655d325b
|-
| progs/flame.mdl  ||style=text-align:right|  46364 || 8593c05374d84354d4444c218e86fdb8
|-
| progs/gib1.mdl  ||style=text-align:right|  5716 || f5c5b799e895dc03036522a487e99913
|-
| progs/gib2.mdl  ||style=text-align:right|  16228 || cfa9e97a3542852418123e0bb12e4f86
|-
| progs/gib3.mdl  ||style=text-align:right|  22228 || d73be7b2881e0a5aacf2b332ac29086f
|-
| progs/g_light.mdl  ||style=text-align:right|  50276 || 61bba06ec3804b7f355a62fd4585ad8f
|-
| progs/g_nail2.mdl  ||style=text-align:right|  30720 || ed6d7bb5ff050ad5f2bf4be7739a16a5
|-
| progs/g_nail.mdl  ||style=text-align:right|  34700 || e2959ca741c764dd42025ef531a1b554
|-
| progs/grenade.mdl  ||style=text-align:right|  2244 || f492d6257c216306983a72f41db0d891
|-
| progs/g_rock2.mdl  ||style=text-align:right|  40756 || 68c047c97bab89afe2cb69e65b7c62e1
|-
| progs/g_rock.mdl  ||style=text-align:right|  48244 || 61346f842944795e0821e31e3d61b427
|-
| progs/g_shot.mdl  ||style=text-align:right|  32916 || 7facfec1a3cfb892cce871f398e9cb6b
|-
| progs/h_demon.mdl  ||style=text-align:right|  34884 || 5253a0ea93d9624d73fb984ee339b52f
|-
| progs/h_dog.mdl  ||style=text-align:right|  24436 || a0b5f87522b3a769548c46cf3bb4223e
|-
| progs/h_guard.mdl  ||style=text-align:right|  5428 || 18a629b53b87392030df63b7806eb833
|-
| progs/h_knight.mdl  ||style=text-align:right|  7156 || 46a03fa72b0cdebcf58045aba2fafc13
|-
| progs/h_ogre.mdl  ||style=text-align:right|  14900 || 14eb06611c769e254d0531c05919bdf5
|-
| progs/h_player.mdl  ||style=text-align:right|  14708 || bf1773df7d3e19c5b211a1ee408f6b05
|-
| progs/h_shams.mdl  ||style=text-align:right|  37060 || ff1e04e18c57667991341a011fb6c363
|-
| progs/h_wizard.mdl  ||style=text-align:right|  14804 || 4bc6be40128f313cf9ad06c347310735
|-
| progs/h_zombie.mdl  ||style=text-align:right|  4484 || 0fdef7f7cd05a3209e0a163e87f69f8b
|-
| progs/invisibl.mdl  ||style=text-align:right|  7092 || 1e87d86af02e69db9c9f27f5fddc7a47
|-
| progs/invulner.mdl  ||style=text-align:right|  23920 || 8c8d83e4d50c3282d009b333a1280422
|-
| progs/knight.mdl  ||style=text-align:right|  101404 || 5328915db5c53e85cf75d46e7b747fb9
|-
| progs/lavaball.mdl  ||style=text-align:right|  8788 || 92af53d2145681e37877dbc1d12801b2
|-
| progs/m_g_key.mdl  ||style=text-align:right|  12820 || 192c2650a115c91706f6fa8fe68beb45
|-
| progs/missile.mdl  ||style=text-align:right|  57796 || 47f19f9e34954b93443c9759dd2e7ba0
|-
| progs/m_s_key.mdl  ||style=text-align:right|  12820 || 20837376b391cdd5c92e57b84e05687f
|-
| progs/ogre.mdl  ||style=text-align:right|  162036 || fbb592ca3788a576dd2f31fcf8c80fab
|-
| progs/player.mdl  ||style=text-align:right|  191852 || 405cef9a10d96cdabffb5e91312f8e5c
|-
| progs/quaddama.mdl  ||style=text-align:right|  39992 || 00b177ff272a4779097ea08344da8aff
|-
| progs/s_bubble.spr  ||style=text-align:right|  588 || 7c0887630ed468205292d8cb7abcae93
|-
| progs/s_explod.spr  ||style=text-align:right|  18972 || 766c6a92c26b54f68f7ff87c90d71cf2
|-
| progs/shambler.mdl  ||style=text-align:right|  98556 || 9b09375a0f614dc4081e363cc34f1185
|-
| progs/s_light.mdl  ||style=text-align:right|  27596 || ee6649ea5673989f3aa06213a8d65f76
|-
| progs/s_light.spr  ||style=text-align:right|  1080 || aff44ba238f4e1d0d504d6f9700aadb4
|-
| progs/soldier.mdl  ||style=text-align:right|  146288 || 5b6c30a984872b4273dd5861412d35c5
|-
| progs/spike.mdl  ||style=text-align:right|  1684 || be4cb73125f939284376080acc9887dd
|-
| progs/s_spike.mdl  ||style=text-align:right|  1684 || ebb1d58242b64a703623c8a33fcbd9e6
|-
| progs/suit.mdl  ||style=text-align:right|  51236 || 882a61f5eea7f9cdbc04800b963cef85
|-
| progs/v_axe.mdl  ||style=text-align:right|  57908 || 577dadcca2700068995c808dc7dec76f
|-
| progs/v_light.mdl  ||style=text-align:right|  56204 || 68733d4c690de88b5c3ba33e52be1c15
|-
| progs/v_nail2.mdl  ||style=text-align:right|  68732 || aacd1002ab02662cc1d3ff46885b553e
|-
| progs/v_nail.mdl  ||style=text-align:right|  54472 || ec9ba028b346da2f9674c2a521ff0c2f
|-
| progs/v_rock2.mdl  ||style=text-align:right|  58188 || 96edf1a3c7629987c200361523f780d7
|-
| progs/v_rock.mdl  ||style=text-align:right|  58548 || 7bea46b2a75fd7cff2fb99420e4c4e25
|-
| progs/v_shot2.mdl  ||style=text-align:right|  50816 || 922b3b687766ae0d7aeb73d44dec7035
|-
| progs/v_shot.mdl  ||style=text-align:right|  43852 || 1fd140b6856843e83cd9bf3966f5d7dd
|-
| progs/w_g_key.mdl  ||style=text-align:right|  7252 || c5c5f0d14b022f57294ad9aded318250
|-
| progs/wizard.mdl  ||style=text-align:right|  64472 || bf60986594f045e60e8aa6339d553ee7
|-
| progs/w_s_key.mdl  ||style=text-align:right|  7252 || ec02314a7d12439d36b4eb2dd0a641a8
|-
| progs/w_spike.mdl  ||style=text-align:right|  14336 || 8cf9245df2164e8062b01a220b508d6b
|-
| progs/zombie.mdl  ||style=text-align:right|  186084 || a923b1d03b9d237dd5ead9bd56acc900
|-
| progs/zom_gib.mdl  ||style=text-align:right|  10196 || cf42c938caa5b19f719d1f110b1dc6d4
|-
| quake.rc  ||style=text-align:right|  293 || 411d42958aaeae141813f9ebfcf5233f
|-
| sound/ambience/buzz1.wav  ||style=text-align:right|  36308 || 346a00c795c6f1f1338ade6fc350b3fe
|-
| sound/ambience/comp1.wav  ||style=text-align:right|  62734 || f91a1120de804f7cd4dbba4f12c748e9
|-
| sound/ambience/drip1.wav  ||style=text-align:right|  137736 || 2306a76162eeda3d0812c516bc99aa7a
|-
| sound/ambience/drone6.wav  ||style=text-align:right|  18522 || 322853ddb42ad2a205579b5cca8e2e8c
|-
| sound/ambience/fire1.wav  ||style=text-align:right|  24064 || 610d3985ed8133988e8de3bec2b9cbbe
|-
| sound/ambience/fl_hum1.wav  ||style=text-align:right|  50154 || e4628499702e004c4bacd282a3ecb8c0
|-
| sound/ambience/hum1.wav  ||style=text-align:right|  40166 || 486bfa737c35b0c9dda57cbee2a540af
|-
| sound/ambience/suck1.wav  ||style=text-align:right|  110392 || 2e99e4d1fe1501d5191c8157d3063cb6
|-
| sound/ambience/swamp1.wav  ||style=text-align:right|  68524 || 29ffb678d78997eb6c227677c86ea4f8
|-
| sound/ambience/swamp2.wav  ||style=text-align:right|  68526 || 356aa1e875da846e72d8f17bbb699a5b
|-
| sound/ambience/thunder1.wav  ||style=text-align:right|  41492 || cefd6ced4b5bc79fcece1003238566f6
|-
| sound/ambience/water1.wav  ||style=text-align:right|  55784 || 6eeaae0a3450652d2be0782895297ee4
|-
| sound/ambience/wind2.wav  ||style=text-align:right|  28610 || 030cf8dd2b00a12454b5b35a89d03914
|-
| sound/ambience/windfly.wav  ||style=text-align:right|  22140 || c7be01e6d324e66883f70aa0072a99b0
|-
| sound/boss1/death.wav  ||style=text-align:right|  27600 || 43469b1acd35b67107da5da82e1df911
|-
| sound/boss1/out1.wav  ||style=text-align:right|  50344 || 847a6f971f6905dfaffd70b30d18a4b1
|-
| sound/boss1/pain.wav  ||style=text-align:right|  17700 || 49112740c0ff421f9272b9e8efc748cd
|-
| sound/boss1/sight1.wav  ||style=text-align:right|  24768 || 427dd600e6b28c9402212adcc5d652c7
|-
| sound/boss1/throw.wav  ||style=text-align:right|  11526 || 9b6e9ff2c8df448f7fd4b5315e60ddda
|-
| sound/buttons/airbut1.wav  ||style=text-align:right|  10672 || 9d2e14e7176842a0dce909a43d38873d
|-
| sound/buttons/switch02.wav  ||style=text-align:right|  3746 || d2e9cba3a353edc65115f6f5c574403c
|-
| sound/buttons/switch04.wav  ||style=text-align:right|  3666 || ff47857a58d3faefb2b94a37d7ba4f26
|-
| sound/buttons/switch21.wav  ||style=text-align:right|  6318 || 3605b0d061a9baf185c6ab7614534531
|-
| sound/demon/ddeath.wav  ||style=text-align:right|  9140 || 62a48dcd405ca55c9ce18497e36faa0e
|-
| sound/demon/dhit2.wav  ||style=text-align:right|  7142 || 9e741696e4d0d66e30e718fc70ec186e
|-
| sound/demon/djump.wav  ||style=text-align:right|  8494 || 791ac9d6b6593808316145443cb7e7a0
|-
| sound/demon/dland2.wav  ||style=text-align:right|  4400 || db14c7b01838f826b7a712075f9026fd
|-
| sound/demon/dpain1.wav  ||style=text-align:right|  6282 || 5e6c485878393c9bebb0d0e6659bc479
|-
| sound/demon/idle1.wav  ||style=text-align:right|  9098 || 7a83f8caf3d5b1172a7dc5afdc942988
|-
| sound/demon/sight2.wav  ||style=text-align:right|  8804 || 65171c355c22a5069520b0881677ae3c
|-
| sound/dog/dattack1.wav  ||style=text-align:right|  8154 || 0c47c9d4aaae0bf3159a288b674f4a35
|-
| sound/dog/ddeath.wav  ||style=text-align:right|  14912 || b0e7760b1d7286a028ff9773f6802958
|-
| sound/dog/dpain1.wav  ||style=text-align:right|  7240 || 28e5ab93b41e13e2916433283a5d1a46
|-
| sound/dog/dsight.wav  ||style=text-align:right|  6722 || 0edc290765bac1fb4fe03ca55bc7c225
|-
| sound/dog/idle.wav  ||style=text-align:right|  6870 || 42bd6026ff32bd94523ad9f8fe8362cc
|-
| sound/doors/airdoor1.wav  ||style=text-align:right|  13654 || 9b91930e8c2fdece31a2362296891122
|-
| sound/doors/airdoor2.wav  ||style=text-align:right|  8594 || 29fd823d1c14ca42a9a89c716b26f4cd
|-
| sound/doors/basesec1.wav  ||style=text-align:right|  13930 || eb2363fed42724f55e8f55f96c335bcf
|-
| sound/doors/basesec2.wav  ||style=text-align:right|  10238 || 8d163a56607c9cf64a270a156c1c5cef
|-
| sound/doors/basetry.wav  ||style=text-align:right|  10518 || a5108d5c51281ab55c0baf884cbe8cbe
|-
| sound/doors/baseuse.wav  ||style=text-align:right|  16486 || f43fee91efe813a5eb34e9d72918fdb9
|-
| sound/doors/ddoor1.wav  ||style=text-align:right|  7738 || dff86a26139cdd49a193d5ed7ebf6ae1
|-
| sound/doors/ddoor2.wav  ||style=text-align:right|  5904 || 4a9d0b0825d0302ce465569d1e35fbcf
|-
| sound/doors/doormv1.wav  ||style=text-align:right|  14036 || 3fd379aec80a2ad8105c0c89ba5b40e6
|-
| sound/doors/drclos4.wav  ||style=text-align:right|  12814 || 83df1865a0c9fa5d02c2f137564c57de
|-
| sound/doors/hydro1.wav  ||style=text-align:right|  11094 || b1703980a20e624bc3366ccf55ca617e
|-
| sound/doors/hydro2.wav  ||style=text-align:right|  10700 || b1866f5b3950788ccf4206444ab64bc7
|-
| sound/doors/latch2.wav  ||style=text-align:right|  7338 || ad2378ca21a0ca529df328261e07aed5
|-
| sound/doors/medtry.wav  ||style=text-align:right|  7828 || ebb536bec2cdfd22c25b35793c055339
|-
| sound/doors/meduse.wav  ||style=text-align:right|  10718 || 4522aada194b23eb33b541cbcc755cf6
|-
| sound/doors/runetry.wav  ||style=text-align:right|  13524 || c433bae9e2ab508712f87dc2cacc82c8
|-
| sound/doors/runeuse.wav  ||style=text-align:right|  17364 || b4bcfd525a26f5b5ecc9d392430d9079
|-
| sound/doors/stndr1.wav  ||style=text-align:right|  12620 || 5bae2183885e18d65d69624e85249fd9
|-
| sound/doors/stndr2.wav  ||style=text-align:right|  11470 || f43a75c917effff09ef7be8a321c8b49
|-
| sound/doors/winch2.wav  ||style=text-align:right|  14872 || a4edffdfede7dbaed37db526c26e2b6d
|-
| sound/hknight/hit.wav  ||style=text-align:right|  6260 || fece24e2548f1d769e8fce39a5c87d01
|-
| sound/items/armor1.wav  ||style=text-align:right|  7714 || 186d29f2baf35b8c280bc97754606fad
|-
| sound/items/damage2.wav  ||style=text-align:right|  33012 || 14e53b7617ffe315a7c3f8d89652e51c
|-
| sound/items/damage3.wav  ||style=text-align:right|  12894 || baf754aec7ed4baba16760ac85513184
|-
| sound/items/damage.wav  ||style=text-align:right|  23374 || 8cde8b9278ca4922a4ec7ead6e5ee01b
|-
| sound/items/health1.wav  ||style=text-align:right|  7958 || 52a2c4f808db4edd8393de0de618c91f
|-
| sound/items/inv1.wav  ||style=text-align:right|  13728 || 5850cab55d6197d0e76d9f0a22ba10be
|-
| sound/items/inv2.wav  ||style=text-align:right|  33216 || 4edcd38a2c6adc5305636dd7afd5ef60
|-
| sound/items/inv3.wav  ||style=text-align:right|  33320 || 325c268be05b42a019ccb92e6993ab9e
|-
| sound/items/itembk2.wav  ||style=text-align:right|  9910 || 270c688b3cb884f5d4e5ffd8ccc934a1
|-
| sound/items/protect2.wav  ||style=text-align:right|  34012 || 25627a4bd2b4c6054cfd2fc4bf69ddc2
|-
| sound/items/protect3.wav  ||style=text-align:right|  23364 || 7b9374d67f6d59e524bba2af236ca30a
|-
| sound/items/protect.wav  ||style=text-align:right|  22536 || d839d5a84f811ce8a0e28616891bf1a7
|-
| sound/items/r_item1.wav  ||style=text-align:right|  6822 || 3fc0d0ae4a71c9fbfe548f38626c6a08
|-
| sound/items/r_item2.wav  ||style=text-align:right|  7448 || 384ffefe795d99df75f381596a0f1976
|-
| sound/items/suit2.wav  ||style=text-align:right|  33254 || 0a9d2766a5b805cb5794f9bea57e6585
|-
| sound/items/suit.wav  ||style=text-align:right|  15854 || da413f34023d219f1e34fde50a037be0
|-
| sound/knight/idle.wav  ||style=text-align:right|  11064 || 1b5c3981bee078318af346d8fe8090b9
|-
| sound/knight/kdeath.wav  ||style=text-align:right|  10688 || 11a96f48a8f2433c23beae299c8fb96e
|-
| sound/knight/khurt.wav  ||style=text-align:right|  5586 || 32c9f48dd4a6a87752aedf56fe8de668
|-
| sound/knight/ksight.wav  ||style=text-align:right|  13514 || eb75b4af348c88e84d8c87c19d5976fa
|-
| sound/knight/sword1.wav  ||style=text-align:right|  2306 || 93045b5f3178413dc6b01ec2869d1f73
|-
| sound/knight/sword2.wav  ||style=text-align:right|  2784 || 82d1a7c263cd3df7b060dee2f7f8b1fd
|-
| sound/misc/h2ohit1.wav  ||style=text-align:right|  12972 || 49ecb03f4f10862453656a67598f8b8a
|-
| sound/misc/medkey.wav  ||style=text-align:right|  10020 || 0e3ae5626a47d81e4166539e355e31bb
|-
| sound/misc/menu1.wav  ||style=text-align:right|  5738 || 12c36546601c385bc47c9ca9420b7eee
|-
| sound/misc/menu2.wav  ||style=text-align:right|  10672 || 39b01ea6feb3ec8dbd6d8ee3e5e966c4
|-
| sound/misc/menu3.wav  ||style=text-align:right|  3010 || 4a03dc2fd56831b855dab761eac4f7de
|-
| sound/misc/null.wav  ||style=text-align:right|  1244 || 811989e09124f54cb27fe6154b0f1018
|-
| sound/misc/outwater.wav  ||style=text-align:right|  5018 || 35732412412ddb5ed418633bb0123bbe
|-
| sound/misc/power.wav  ||style=text-align:right|  19832 || 9f2c3a18d9fc8d9cecfac6db3aad6bc6
|-
| sound/misc/r_tele1.wav  ||style=text-align:right|  8036 || c2194171b4c446e136ed7514fbb098a5
|-
| sound/misc/r_tele2.wav  ||style=text-align:right|  17324 || 0ce662ac90fb3658d69320d1be4025c1
|-
| sound/misc/r_tele3.wav  ||style=text-align:right|  18016 || 122ef44813edcfe7391578fd29e729d2
|-
| sound/misc/r_tele4.wav  ||style=text-align:right|  9068 || 0097b5747ccc70d5b12fc6838aff02c2
|-
| sound/misc/r_tele5.wav  ||style=text-align:right|  22042 || a82334cbb66d12f28cce9e71c90ea50b
|-
| sound/misc/runekey.wav  ||style=text-align:right|  14578 || 6b21a2e5878011da50fdee0a301d3e34
|-
| sound/misc/secret.wav  ||style=text-align:right|  6610 || a02ceefcc24b1ebf5c164a1e1acfb05f
|-
| sound/misc/talk.wav  ||style=text-align:right|  1810 || d5b25d4df59d92ac5016e88689ea60c1
|-
| sound/misc/trigger1.wav  ||style=text-align:right|  20230 || dc927c8a1d0a9bd59fbc5dd91ae1d812
|-
| sound/misc/water1.wav  ||style=text-align:right|  3926 || d8291c762acb1edf24927fdcc0f6a6cd
|-
| sound/misc/water2.wav  ||style=text-align:right|  3340 || 049e8e7e7b30d4d8038afb7248bdd977
|-
| sound/ogre/ogdrag.wav  ||style=text-align:right|  12396 || 658587dc89aaefae5ca3f058f7ff4227
|-
| sound/ogre/ogdth.wav  ||style=text-align:right|  13892 || de98e7bb9e70586edddd3308cfded3db
|-
| sound/ogre/ogidle2.wav  ||style=text-align:right|  11254 || 196ae9c33a4311160e1d5f3da878ab09
|-
| sound/ogre/ogidle.wav  ||style=text-align:right|  12894 || 177c829840a87c885bbc8951e7ce962e
|-
| sound/ogre/ogpain1.wav  ||style=text-align:right|  7898 || ac6d133d7720c12df49813fe10e683b5
|-
| sound/ogre/ogsawatk.wav  ||style=text-align:right|  16154 || 7257bdfd014bb61d778b8f88cb65d560
|-
| sound/ogre/ogwake.wav  ||style=text-align:right|  19356 || 3296459e495c4c12b31179d4eeffac19
|-
| sound/plats/medplat1.wav  ||style=text-align:right|  16378 || b73215aa6627c8b5b90fce8d260d48d0
|-
| sound/plats/medplat2.wav  ||style=text-align:right|  7338 || 1fc6c3772917a1a8155d04fa52e17005
|-
| sound/plats/plat1.wav  ||style=text-align:right|  20248 || 5d43ed85d896ba926f459e06ba6635d5
|-
| sound/plats/plat2.wav  ||style=text-align:right|  7338 || 49d7ab0fd726cd652eb6e5756fce61b9
|-
| sound/plats/train1.wav  ||style=text-align:right|  21430 || b589ae8262046361d9dca39d6b8f693a
|-
| sound/plats/train2.wav  ||style=text-align:right|  5870 || 640017e1b870d643e3bca29d499c72ee
|-
| sound/player/axhit1.wav  ||style=text-align:right|  6906 || 149b2371334da318386325182924eaca
|-
| sound/player/axhit2.wav  ||style=text-align:right|  2434 || fc01909318455f5310efa2457a370897
|-
| sound/player/death1.wav  ||style=text-align:right|  10170 || ba005f5488d4ee78dabf613a03f33a5f
|-
| sound/player/death2.wav  ||style=text-align:right|  8026 || 20477d2e7c84aac1bef95d32c9c702dd
|-
| sound/player/death3.wav  ||style=text-align:right|  10918 || 7b206ba8e1fa28d8605b50e3f3200f11
|-
| sound/player/death4.wav  ||style=text-align:right|  14126 || 1b0f27f4d41b748d3cc5c3d56bd917f8
|-
| sound/player/death5.wav  ||style=text-align:right|  14946 || 7efe84195cfa97515aad2d7f96f25346
|-
| sound/player/drown1.wav  ||style=text-align:right|  8908 || 732f0416af6990e028110380bcb36f0d
|-
| sound/player/drown2.wav  ||style=text-align:right|  3114 || 29ee1f287879acce29b15d4722668bc2
|-
| sound/player/gasp1.wav  ||style=text-align:right|  8702 || b06cbc370c8c2c163dc4d487e8b673c7
|-
| sound/player/gasp2.wav  ||style=text-align:right|  13134 || 30aece9d8779764620c7f866bfb06edb
|-
| sound/player/gib.wav  ||style=text-align:right|  14424 || 26fa9942078125388f34b71546615068
|-
| sound/player/h2odeath.wav  ||style=text-align:right|  18104 || 73b0f4dfae07f6e49112cadfe202735c
|-
| sound/player/h2ojump.wav  ||style=text-align:right|  11438 || cd421b96410971bb1a4f21d3936a3805
|-
| sound/player/inh2o.wav  ||style=text-align:right|  11340 || d4c1a27c4d07e8dfdf18a4b1a880c610
|-
| sound/player/inlava.wav  ||style=text-align:right|  10958 || c37875a082900716b7af88d2d990f55c
|-
| sound/player/land2.wav  ||style=text-align:right|  6204 || 6ba534256a779d66d9d9dabb90e63c8b
|-
| sound/player/land.wav  ||style=text-align:right|  2434 || e34328a40358d98f0f95403b9e27ec1e
|-
| sound/player/lburn1.wav  ||style=text-align:right|  6682 || 3c447c72385defe97c060771077d8ba0
|-
| sound/player/lburn2.wav  ||style=text-align:right|  6076 || 6849ee8dbd91ec82ece016fbd39b0a5c
|-
| sound/player/pain1.wav  ||style=text-align:right|  3394 || d7ac9df7540b791f952ca2a681c0265b
|-
| sound/player/pain2.wav  ||style=text-align:right|  2710 || 513e054b64d4fb61f31384d59e123020
|-
| sound/player/pain3.wav  ||style=text-align:right|  4854 || aafc61ad4e16cc5cdd2db2100796b494
|-
| sound/player/pain4.wav  ||style=text-align:right|  4840 || f655ef2045bc55473303b27546aa6fc0
|-
| sound/player/pain5.wav  ||style=text-align:right|  8020 || f8551a73cb89396042687baa8c68b5c2
|-
| sound/player/pain6.wav  ||style=text-align:right|  5462 || 70062eabf96288d307280fb601ce0ee2
|-
| sound/player/plyrjmp8.wav  ||style=text-align:right|  3888 || d4a552d8f627c7f3b933568c4a74c913
|-
| sound/player/slimbrn2.wav  ||style=text-align:right|  12468 || b17c18a9f81a952f2d41f65b5180f210
|-
| sound/player/teledth1.wav  ||style=text-align:right|  14414 || c226c7f041187ba058d8112cc0190b56
|-
| sound/player/tornoff2.wav  ||style=text-align:right|  7726 || 03ec1c805b307b8fe4c4052f8332a5e5
|-
| sound/player/udeath.wav  ||style=text-align:right|  16082 || afe674f287efb6197da2cea0c0b1d2f8
|-
| sound/shambler/melee1.wav  ||style=text-align:right|  4718 || 77fe6240973a204b757a427ebf66bcfd
|-
| sound/shambler/melee2.wav  ||style=text-align:right|  5966 || 3be31638d769e3d690c92311dfafdeac
|-
| sound/shambler/sattck1.wav  ||style=text-align:right|  8036 || ec8c3f79ea42d09154cb8975ada1b21c
|-
| sound/shambler/sboom.wav  ||style=text-align:right|  11672 || 9834601a645d7d1f62001b2a314ec18f
|-
| sound/shambler/sdeath.wav  ||style=text-align:right|  21106 || e0e62d229a985a6e39218c6488599059
|-
| sound/shambler/shurt2.wav  ||style=text-align:right|  4302 || 1e87631ede95e061a75f9c31629ac0b8
|-
| sound/shambler/sidle.wav  ||style=text-align:right|  5646 || 368a240e6c3e877793352a79c1828386
|-
| sound/shambler/smack.wav  ||style=text-align:right|  5300 || bd8c634c9894348360fec7b7419d1649
|-
| sound/shambler/ssight.wav  ||style=text-align:right|  15420 || 657107577460d5acf3157dec97e07a89
|-
| sound/soldier/death1.wav  ||style=text-align:right|  8434 || fe25952af40b536c3bb67bfca58062eb
|-
| sound/soldier/idle.wav  ||style=text-align:right|  9802 || 4cdfbdda8fb5f40b125c7bcddb6e8914
|-
| sound/soldier/pain1.wav  ||style=text-align:right|  5000 || 54d3b05fdcecf7480034858f2b22b06c
|-
| sound/soldier/pain2.wav  ||style=text-align:right|  7838 || e2bbc9d3405b9b9fdae76d2fc298fc2f
|-
| sound/soldier/sattck1.wav  ||style=text-align:right|  14302 || b76ac35f900f280a7a7996da7e404362
|-
| sound/soldier/sight1.wav  ||style=text-align:right|  12716 || e2a39533250ddd1b08053d5c4ebf7fd0
|-
| sound/weapons/ax1.wav  ||style=text-align:right|  3308 || 237d4d819d02ad37849a8a895cc410e1
|-
| sound/weapons/bounce.wav  ||style=text-align:right|  5864 || fced668c6558a9505abf5014d60528a6
|-
| sound/weapons/grenade.wav  ||style=text-align:right|  8364 || d2b6fa131933f203eba2a282276e88df
|-
| sound/weapons/guncock.wav  ||style=text-align:right|  14430 || 6a63452167cc106e756518536446844f
|-
| sound/weapons/lhit.wav  ||style=text-align:right|  26028 || fefd021d0bd35a1f8da8870f1c06abb9
|-
| sound/weapons/lock4.wav  ||style=text-align:right|  3876 || 3fd93222258d5b1500b150f021c94519
|-
| sound/weapons/lstart.wav  ||style=text-align:right|  56378 || abe1abf6dcadcda5930b0684c7ea820a
|-
| sound/weapons/pkup.wav  ||style=text-align:right|  5174 || 0aa6f0a7d609e1a56fd535a06d1bb56e
|-
| sound/weapons/r_exp3.wav  ||style=text-align:right|  17478 || 57db026474fc76ba7f38cea24eaaf8cf
|-
| sound/weapons/ric1.wav  ||style=text-align:right|  4308 || a31166b4bbb4509ac3004a01f7477ee9
|-
| sound/weapons/ric2.wav  ||style=text-align:right|  10838 || a180b447c0527e603cea54a9aefd6139
|-
| sound/weapons/ric3.wav  ||style=text-align:right|  12638 || 8a773bbb585540ddce256151162f3a2c
|-
| sound/weapons/rocket1i.wav  ||style=text-align:right|  9660 || fb4fdf345d805cf6980c4c695974effc
|-
| sound/weapons/sgun1.wav  ||style=text-align:right|  22992 || 95a14815e48deb323d0cf8251d728ac7
|-
| sound/weapons/shotgn2.wav  ||style=text-align:right|  8694 || cb561cefbf472232334b419af050e5a0
|-
| sound/weapons/spike2.wav  ||style=text-align:right|  12642 || 9189d811855f108da4a1e2d34dc7c633
|-
| sound/weapons/tink1.wav  ||style=text-align:right|  1252 || 297ba8706625fcf05887edb393e9a441
|-
| sound/wizard/hit.wav  ||style=text-align:right|  7332 || 6598d669334df977f1f97b95288edf11
|-
| sound/wizard/wattack.wav  ||style=text-align:right|  25912 || b3568a47439f81779d40335e76f5bc2d
|-
| sound/wizard/wdeath.wav  ||style=text-align:right|  20684 || 99d9c71343bc23222abb92119d404400
|-
| sound/wizard/widle1.wav  ||style=text-align:right|  13464 || b22b1dd9f66879b3447d36ab584316c7
|-
| sound/wizard/widle2.wav  ||style=text-align:right|  23094 || 7178fd83df227360564adef01bed92c6
|-
| sound/wizard/wpain.wav  ||style=text-align:right|  8686 || bd7e59ab7d7b835f9ed8ab51950914de
|-
| sound/wizard/wsight.wav  ||style=text-align:right|  13078 || df5949057c750528917c6cb32b7fd9fd
|-
| sound/zombie/idle_w2.wav  ||style=text-align:right|  17192 || d2bb59b9d7ac71097c07123a23525641
|-
| sound/zombie/z_fall.wav  ||style=text-align:right|  3062 || 6968318b2d196c6d54bc707d8a390547
|-
| sound/zombie/z_gib.wav  ||style=text-align:right|  16226 || 199dda66ade8d6f0ef4897e4d7608c0d
|-
| sound/zombie/z_hit.wav  ||style=text-align:right|  6166 || 6c66ab3e6b149bf35956a4bbc0057acb
|-
| sound/zombie/z_idle1.wav  ||style=text-align:right|  13244 || 21088a7b38b1124d7ec72e58d5ab93a6
|-
| sound/zombie/z_idle.wav  ||style=text-align:right|  16734 || e5e570e38c4405111004190a79f0e925
|-
| sound/zombie/z_miss.wav  ||style=text-align:right|  10734 || 96fad96a8c3bc6f7bcc5da6c82678da2
|-
| sound/zombie/z_pain1.wav  ||style=text-align:right|  15374 || fcd83b89a94b0cadbe1361a4df080ec0
|-
| sound/zombie/z_pain.wav  ||style=text-align:right|  12218 || 56637968b8309bd2f825153330bbdfc0
|-
| sound/zombie/z_shot1.wav  ||style=text-align:right|  3068 || 561afb69b7851923a8fb3b54e3e13c96
|-
|}
&lt;/tt&gt;

=== 5906e5998fc3d896ddaf5e6a62e03abb ===
The [[id1]] ''pak0.pak'' with the md5sum 5906e5998fc3d896ddaf5e6a62e03abb contains the following folders &amp; files:
&lt;tt&gt;
{| class=&quot;wikitable collapsible collapsed&quot;
! Path !! Size !! md5
|-
| default.cfg  ||style=text-align:right|  1914 || fc989b37572fae074e8ffda0ce4d5297
|-
| demo1.dem  ||style=text-align:right|  184471 || 85ec0141ab24d9732e487d1aafa791f0
|-
| demo2.dem  ||style=text-align:right|  152705 || fa5c3daf7a57954cd95f94b698a7e420
|-
| demo3.dem  ||style=text-align:right|  197679 || 691f37e5715ea2863c1d8092a6429824
|-
| end1.bin  ||style=text-align:right|  4000 || 92ae51961ec2f429dfe9bea1138fbd5d
|-
| gfx/bigbox.lmp  ||style=text-align:right|  5192 || e597771ac6149b2b071ebfd24981ea04
|-
| gfx/box_bl.lmp  ||style=text-align:right|  72 || 5b094c37c2c1c2eebe37f84117dea182
|-
| gfx/box_bm.lmp  ||style=text-align:right|  136 || 44621236738e2bf8d669e53dca887278
|-
| gfx/box_br.lmp  ||style=text-align:right|  72 || 86597d5325b472caf5644644033e5cab
|-
| gfx/box_ml.lmp  ||style=text-align:right|  72 || adcea286ba0ac01084fd0c131b16ffdd
|-
| gfx/box_mm2.lmp  ||style=text-align:right|  136 || b850bcec189d909e7a0f796111a11249
|-
| gfx/box_mm.lmp  ||style=text-align:right|  136 || 700b4884b1a3c6aa7356a43014261866
|-
| gfx/box_mr.lmp  ||style=text-align:right|  72 || e30d9ea783ef7dd50101682f03ba40d7
|-
| gfx/box_tl.lmp  ||style=text-align:right|  72 || 3903d3d814e37c55790ac0ccfef2b925
|-
| gfx/box_tm.lmp  ||style=text-align:right|  136 || 7cb85ccbf8e7d2532da2a839a7cef348
|-
| gfx/box_tr.lmp  ||style=text-align:right|  72 || 5c5e72746af821a4cf8437d8fecc53c7
|-
| gfx/colormap.lmp  ||style=text-align:right|  16385 || 0d793b70bffafbd666fc5c88d6e15e9d
|-
| gfx/complete.lmp  ||style=text-align:right|  4616 || db6a00dfbe2c62a43c261e5622297c4a
|-
| gfx/conback.lmp  ||style=text-align:right|  64008 || 9eb6f9c47870bf42985d9382958a5c12
|-
| gfx/dim_drct.lmp  ||style=text-align:right|  3352 || 50ea11fe8c4d9db92863bdcd03b89df5
|-
| gfx/dim_ipx.lmp  ||style=text-align:right|  3352 || 0bef9943487f0611225bf0a5c0fe5dd4
|-
| gfx/dim_modm.lmp  ||style=text-align:right|  3352 || 3288f03144f06b95cadafa9458a77b1d
|-
| gfx/dim_mult.lmp  ||style=text-align:right|  3352 || 348b7369227f2d7e9d0daccbf6c9344d
|-
| gfx/dim_tcp.lmp  ||style=text-align:right|  3352 || 7dc8bbb01d7c90cd51c28da0ff6ed900
|-
| gfx/finale.lmp  ||style=text-align:right|  6920 || b6e49409d344e0344273d86ea33fe35f
|-
| gfx/help0.lmp  ||style=text-align:right|  64008 || b392ac30ad49252b51ec934ed855c20f
|-
| gfx/help1.lmp  ||style=text-align:right|  64008 || 857543c69245117a606044ea63adac9a
|-
| gfx/help2.lmp  ||style=text-align:right|  64008 || 882dd5920ea9c19f637f32084de9788a
|-
| gfx/help3.lmp  ||style=text-align:right|  64008 || a89d169524920d896128009467deebfc
|-
| gfx/help4.lmp  ||style=text-align:right|  64008 || c72d67c84ae6b403fae5f08d3e5c3bc6
|-
| gfx/help5.lmp  ||style=text-align:right|  64008 || 12203d7cdec35c4f51622dd90ec92093
|-
| gfx/inter.lmp  ||style=text-align:right|  23048 || f6eabe0d742380c7b47a9ee44170993d
|-
| gfx/loading.lmp  ||style=text-align:right|  3464 || 3249bc994266529a1748c06bfbb24bfa
|-
| gfx/mainmenu.lmp  ||style=text-align:right|  26888 || 8122e2a0b8888f9d1ebef149551b6434
|-
| gfx/menudot1.lmp  ||style=text-align:right|  392 || bfdb08d84d580abcfbacc1c9abd62bfb
|-
| gfx/menudot2.lmp  ||style=text-align:right|  392 || 6c6d2176e00edbe530bb1db118aaa6dc
|-
| gfx/menudot3.lmp  ||style=text-align:right|  392 || 2527a05f6162efb3e4bc5311d9e010d5
|-
| gfx/menudot4.lmp  ||style=text-align:right|  392 || 90ea6be033b39b139b3779932d266f33
|-
| gfx/menudot5.lmp  ||style=text-align:right|  392 || c9beb9600c35e458d0f83b6cf1e1c692
|-
| gfx/menudot6.lmp  ||style=text-align:right|  392 || 31b9a6ec1d12a2bd56b955185a9e72d3
|-
| gfx/menuplyr.lmp  ||style=text-align:right|  2696 || 9eebe617ff51c4ce43f85ca1a6920d5b
|-
| gfx/mp_menu.lmp  ||style=text-align:right|  14856 || c6416b8f7f5262a5a19b9ce4be1fd9ce
|-
| gfx/netmen1.lmp  ||style=text-align:right|  3352 || 5bc6a8d8cfdfd7e940e933812954367a
|-
| gfx/netmen2.lmp  ||style=text-align:right|  3352 || c8aafb649a653e90fc5eb7b7a2b3ca2e
|-
| gfx/netmen3.lmp  ||style=text-align:right|  3352 || 11c9372d0e64057a1ec8251f596b820d
|-
| gfx/netmen4.lmp  ||style=text-align:right|  3352 || 74ec672b1312699be2eeaf25a68e4582
|-
| gfx/netmen5.lmp  ||style=text-align:right|  3352 || 231f8a9ea4ba364f517db0e9f7f1ba72
|-
| gfx/palette.lmp  ||style=text-align:right|  768 || 79bc149d4f2fb0bd68cd8400a3fd87d4
|-
| gfx/pause.lmp  ||style=text-align:right|  3080 || 5aa67f927719e4a9eb3e020e75fea969
|-
| gfx/p_load.lmp  ||style=text-align:right|  2504 || 27fe08071058385529b0b8ad746421e7
|-
| gfx/p_multi.lmp  ||style=text-align:right|  5192 || 5a307c7d11da20a4772ad9c00b9f4309
|-
| gfx/p_option.lmp  ||style=text-align:right|  3464 || 83a3bf4459bce3fe85857a0aa647b90a
|-
| gfx/p_save.lmp  ||style=text-align:right|  2120 || 0d2bb5fa5524e0180a85bf273094cd1f
|-
| gfx/qplaque.lmp  ||style=text-align:right|  4616 || f4de79557c75e26b85ea84fb6029a5f3
|-
| gfx/ranking.lmp  ||style=text-align:right|  4040 || 919b13d1f7fdd0082ec0f94699f3b681
|-
| gfx/sell.lmp  ||style=text-align:right|  64008 || 878db3866e8b38c5b8d951aef516358c
|-
| gfx/sp_menu.lmp  ||style=text-align:right|  14856 || f624aa79778970ecb8ef518b5ab435f6
|-
| gfx/ttl_cstm.lmp  ||style=text-align:right|  4424 || 4ee84e0e7fa93f0e93d26efb1e726a4d
|-
| gfx/ttl_main.lmp  ||style=text-align:right|  2312 || 07e1c8e189e2463befcfc44f5ecf8dcb
|-
| gfx/ttl_sgl.lmp  ||style=text-align:right|  3080 || 25d5360228da738f091063eaeb7c6aa8
|-
| gfx/vidmodes.lmp  ||style=text-align:right|  5192 || 18a97f403057777f262188903f485fe8
|-
| gfx.wad  ||style=text-align:right|  112828 || cde5b5890c8902c02a2f271abe8f4a1f
|-
| maps/b_batt0.bsp  ||style=text-align:right|  5044 || 00bc989f4c8d2570a2826a63c7356a27
|-
| maps/b_batt1.bsp  ||style=text-align:right|  4620 || 555bc0cb0b5c2ad2ed0110f307e70679
|-
| maps/b_bh100.bsp  ||style=text-align:right|  8820 || 62f78bb5143265f037b79ddd077c50ed
|-
| maps/b_bh10.bsp  ||style=text-align:right|  3936 || e80cde9f185612f669fc100f825ca84f
|-
| maps/b_bh25.bsp  ||style=text-align:right|  8872 || 032d70dbf8669b3627b82b41f31488bd
|-
| maps/b_explob.bsp  ||style=text-align:right|  10220 || d8c9db3cfa0264678afc580143f665ea
|-
| maps/b_nail0.bsp  ||style=text-align:right|  5044 || c8d7ec0bdee74e0c1e69e8dbe939117d
|-
| maps/b_nail1.bsp  ||style=text-align:right|  5044 || ea08b2bd6aa19ece0307f75c491e5d24
|-
| maps/b_rock0.bsp  ||style=text-align:right|  2956 || 19ce64cd248a4459bf37b45e6e7c1219
|-
| maps/b_rock1.bsp  ||style=text-align:right|  2944 || b4cdb75094cd7218ed2b0475aefabe80
|-
| maps/b_shell0.bsp  ||style=text-align:right|  5044 || 574824b3c52661959d633a76dc823859
|-
| maps/b_shell1.bsp  ||style=text-align:right|  5044 || dc8b8dcb490e204e615b2b9cdc673296
|-
| maps/e1m1.bsp  ||style=text-align:right|  1365176 || 84cae48010619bcc945426b91bc03ade
|-
| maps/e1m2.bsp  ||style=text-align:right|  1332228 || caff91afbe41f3eac4dda65cee0083c9
|-
| maps/e1m3.bsp  ||style=text-align:right|  1249944 || f20eaa5692e94ab889c4ade9e1c116c7
|-
| maps/e1m4.bsp  ||style=text-align:right|  1411452 || 29419f05ef647f83d0482502bb3f84f8
|-
| maps/e1m5.bsp  ||style=text-align:right|  1324060 || afd98cc890d748986186951b32fc9fcb
|-
| maps/e1m6.bsp  ||style=text-align:right|  1065080 || ec178e54ff68c4d8cf71e26775b2eb2d
|-
| maps/e1m7.bsp  ||style=text-align:right|  607420 || 0c1f55455e0f957291e21d211b689718
|-
| maps/e1m8.bsp  ||style=text-align:right|  924116 || 18c7ab2f922d5d586150afbc27c323a4
|-
| maps/start.bsp  ||style=text-align:right|  1433792 || 61a57bb4ca36368478f02b142d1b5291
|-
| progs/armor.mdl  ||style=text-align:right|  44076 || ca060166d7e4e4686995f05645dde593
|-
| progs/backpack.mdl  ||style=text-align:right|  19348 || 315b4ef42fb035aa3318e8d2d61961ce
|-
| progs/bolt2.mdl  ||style=text-align:right|  11860 || f59ce07cfbe01fcfc578258c573d2c31
|-
| progs/bolt3.mdl  ||style=text-align:right|  11860 || ff87579a424faa59ca2695b7434ea488
|-
| progs/bolt.mdl  ||style=text-align:right|  20644 || a176903954e9d8c7ab629f92784546c2
|-
| progs/boss.mdl  ||style=text-align:right|  211836 || 25da3b2bc30677e32ee3a3a878a4d3af
|-
| progs.dat  ||style=text-align:right|  413116 || 0c3ef3625df5883536f8da42c78b673a
|-
| progs/demon.mdl  ||style=text-align:right|  102120 || 4c73786e7cfb2083ca38cbc983cd6c4b
|-
| progs/dog.mdl  ||style=text-align:right|  146056 || e727fbc39acc652f812972612ce37565
|-
| progs/end1.mdl  ||style=text-align:right|  20820 || 67c0fcab33d3772c00bb462b0e749275
|-
| progs/eyes.mdl  ||style=text-align:right|  4372 || ed72f64a17c6909b2cb3034a734bca97
|-
| progs/flame2.mdl  ||style=text-align:right|  64572 || f2c8f8950ebd7a0edded6247655d325b
|-
| progs/flame.mdl  ||style=text-align:right|  46364 || 8593c05374d84354d4444c218e86fdb8
|-
| progs/gib1.mdl  ||style=text-align:right|  5716 || f5c5b799e895dc03036522a487e99913
|-
| progs/gib2.mdl  ||style=text-align:right|  16228 || cfa9e97a3542852418123e0bb12e4f86
|-
| progs/gib3.mdl  ||style=text-align:right|  22228 || d73be7b2881e0a5aacf2b332ac29086f
|-
| progs/g_light.mdl  ||style=text-align:right|  50276 || 61bba06ec3804b7f355a62fd4585ad8f
|-
| progs/g_nail2.mdl  ||style=text-align:right|  30720 || ed6d7bb5ff050ad5f2bf4be7739a16a5
|-
| progs/g_nail.mdl  ||style=text-align:right|  34700 || e2959ca741c764dd42025ef531a1b554
|-
| progs/grenade.mdl  ||style=text-align:right|  2244 || f492d6257c216306983a72f41db0d891
|-
| progs/g_rock2.mdl  ||style=text-align:right|  40756 || 68c047c97bab89afe2cb69e65b7c62e1
|-
| progs/g_rock.mdl  ||style=text-align:right|  48244 || 61346f842944795e0821e31e3d61b427
|-
| progs/g_shot.mdl  ||style=text-align:right|  32916 || 7facfec1a3cfb892cce871f398e9cb6b
|-
| progs/h_demon.mdl  ||style=text-align:right|  34884 || 5253a0ea93d9624d73fb984ee339b52f
|-
| progs/h_dog.mdl  ||style=text-align:right|  24436 || a0b5f87522b3a769548c46cf3bb4223e
|-
| progs/h_guard.mdl  ||style=text-align:right|  5428 || 18a629b53b87392030df63b7806eb833
|-
| progs/h_knight.mdl  ||style=text-align:right|  7156 || 46a03fa72b0cdebcf58045aba2fafc13
|-
| progs/h_ogre.mdl  ||style=text-align:right|  14900 || 14eb06611c769e254d0531c05919bdf5
|-
| progs/h_player.mdl  ||style=text-align:right|  14708 || bf1773df7d3e19c5b211a1ee408f6b05
|-
| progs/h_shams.mdl  ||style=text-align:right|  37060 || ff1e04e18c57667991341a011fb6c363
|-
| progs/h_wizard.mdl  ||style=text-align:right|  14804 || 4bc6be40128f313cf9ad06c347310735
|-
| progs/h_zombie.mdl  ||style=text-align:right|  4484 || 0fdef7f7cd05a3209e0a163e87f69f8b
|-
| progs/invisibl.mdl  ||style=text-align:right|  7092 || 1e87d86af02e69db9c9f27f5fddc7a47
|-
| progs/invulner.mdl  ||style=text-align:right|  23920 || 8c8d83e4d50c3282d009b333a1280422
|-
| progs/knight.mdl  ||style=text-align:right|  101404 || 5328915db5c53e85cf75d46e7b747fb9
|-
| progs/lavaball.mdl  ||style=text-align:right|  8788 || 92af53d2145681e37877dbc1d12801b2
|-
| progs/m_g_key.mdl  ||style=text-align:right|  12820 || 192c2650a115c91706f6fa8fe68beb45
|-
| progs/missile.mdl  ||style=text-align:right|  57796 || 47f19f9e34954b93443c9759dd2e7ba0
|-
| progs/m_s_key.mdl  ||style=text-align:right|  12820 || 20837376b391cdd5c92e57b84e05687f
|-
| progs/ogre.mdl  ||style=text-align:right|  162036 || fbb592ca3788a576dd2f31fcf8c80fab
|-
| progs/player.mdl  ||style=text-align:right|  191852 || 405cef9a10d96cdabffb5e91312f8e5c
|-
| progs/quaddama.mdl  ||style=text-align:right|  39992 || 00b177ff272a4779097ea08344da8aff
|-
| progs/s_bubble.spr  ||style=text-align:right|  588 || 7c0887630ed468205292d8cb7abcae93
|-
| progs/s_explod.spr  ||style=text-align:right|  18972 || 766c6a92c26b54f68f7ff87c90d71cf2
|-
| progs/shambler.mdl  ||style=text-align:right|  98556 || 9b09375a0f614dc4081e363cc34f1185
|-
| progs/s_light.mdl  ||style=text-align:right|  27596 || ee6649ea5673989f3aa06213a8d65f76
|-
| progs/s_light.spr  ||style=text-align:right|  1080 || aff44ba238f4e1d0d504d6f9700aadb4
|-
| progs/soldier.mdl  ||style=text-align:right|  146288 || 5b6c30a984872b4273dd5861412d35c5
|-
| progs/spike.mdl  ||style=text-align:right|  1684 || be4cb73125f939284376080acc9887dd
|-
| progs/s_spike.mdl  ||style=text-align:right|  1684 || ebb1d58242b64a703623c8a33fcbd9e6
|-
| progs/suit.mdl  ||style=text-align:right|  51236 || 882a61f5eea7f9cdbc04800b963cef85
|-
| progs/v_axe.mdl  ||style=text-align:right|  57908 || 577dadcca2700068995c808dc7dec76f
|-
| progs/v_light.mdl  ||style=text-align:right|  56204 || 68733d4c690de88b5c3ba33e52be1c15
|-
| progs/v_nail2.mdl  ||style=text-align:right|  68732 || aacd1002ab02662cc1d3ff46885b553e
|-
| progs/v_nail.mdl  ||style=text-align:right|  54472 || ec9ba028b346da2f9674c2a521ff0c2f
|-
| progs/v_rock2.mdl  ||style=text-align:right|  58188 || 96edf1a3c7629987c200361523f780d7
|-
| progs/v_rock.mdl  ||style=text-align:right|  58548 || 7bea46b2a75fd7cff2fb99420e4c4e25
|-
| progs/v_shot2.mdl  ||style=text-align:right|  50816 || 922b3b687766ae0d7aeb73d44dec7035
|-
| progs/v_shot.mdl  ||style=text-align:right|  43852 || 1fd140b6856843e83cd9bf3966f5d7dd
|-
| progs/w_g_key.mdl  ||style=text-align:right|  7252 || c5c5f0d14b022f57294ad9aded318250
|-
| progs/wizard.mdl  ||style=text-align:right|  64472 || bf60986594f045e60e8aa6339d553ee7
|-
| progs/w_s_key.mdl  ||style=text-align:right|  7252 || ec02314a7d12439d36b4eb2dd0a641a8
|-
| progs/w_spike.mdl  ||style=text-align:right|  14336 || 8cf9245df2164e8062b01a220b508d6b
|-
| progs/zombie.mdl  ||style=text-align:right|  186084 || a923b1d03b9d237dd5ead9bd56acc900
|-
| progs/zom_gib.mdl  ||style=text-align:right|  10196 || cf42c938caa5b19f719d1f110b1dc6d4
|-
| quake.rc  ||style=text-align:right|  293 || 411d42958aaeae141813f9ebfcf5233f
|-
| sound/ambience/buzz1.wav  ||style=text-align:right|  36308 || 346a00c795c6f1f1338ade6fc350b3fe
|-
| sound/ambience/comp1.wav  ||style=text-align:right|  62734 || f91a1120de804f7cd4dbba4f12c748e9
|-
| sound/ambience/drip1.wav  ||style=text-align:right|  137736 || 2306a76162eeda3d0812c516bc99aa7a
|-
| sound/ambience/drone6.wav  ||style=text-align:right|  18522 || 322853ddb42ad2a205579b5cca8e2e8c
|-
| sound/ambience/fire1.wav  ||style=text-align:right|  24064 || 610d3985ed8133988e8de3bec2b9cbbe
|-
| sound/ambience/fl_hum1.wav  ||style=text-align:right|  50154 || e4628499702e004c4bacd282a3ecb8c0
|-
| sound/ambience/hum1.wav  ||style=text-align:right|  40166 || 486bfa737c35b0c9dda57cbee2a540af
|-
| sound/ambience/suck1.wav  ||style=text-align:right|  110392 || 2e99e4d1fe1501d5191c8157d3063cb6
|-
| sound/ambience/swamp1.wav  ||style=text-align:right|  68524 || 29ffb678d78997eb6c227677c86ea4f8
|-
| sound/ambience/swamp2.wav  ||style=text-align:right|  68526 || 356aa1e875da846e72d8f17bbb699a5b
|-
| sound/ambience/thunder1.wav  ||style=text-align:right|  41492 || cefd6ced4b5bc79fcece1003238566f6
|-
| sound/ambience/water1.wav  ||style=text-align:right|  55784 || 6eeaae0a3450652d2be0782895297ee4
|-
| sound/ambience/wind2.wav  ||style=text-align:right|  28610 || 030cf8dd2b00a12454b5b35a89d03914
|-
| sound/ambience/windfly.wav  ||style=text-align:right|  22140 || c7be01e6d324e66883f70aa0072a99b0
|-
| sound/boss1/death.wav  ||style=text-align:right|  27600 || 43469b1acd35b67107da5da82e1df911
|-
| sound/boss1/out1.wav  ||style=text-align:right|  50344 || 847a6f971f6905dfaffd70b30d18a4b1
|-
| sound/boss1/pain.wav  ||style=text-align:right|  17700 || 49112740c0ff421f9272b9e8efc748cd
|-
| sound/boss1/sight1.wav  ||style=text-align:right|  24768 || 427dd600e6b28c9402212adcc5d652c7
|-
| sound/boss1/throw.wav  ||style=text-align:right|  11526 || 9b6e9ff2c8df448f7fd4b5315e60ddda
|-
| sound/buttons/airbut1.wav  ||style=text-align:right|  10672 || 9d2e14e7176842a0dce909a43d38873d
|-
| sound/buttons/switch02.wav  ||style=text-align:right|  3746 || d2e9cba3a353edc65115f6f5c574403c
|-
| sound/buttons/switch04.wav  ||style=text-align:right|  3666 || ff47857a58d3faefb2b94a37d7ba4f26
|-
| sound/buttons/switch21.wav  ||style=text-align:right|  6318 || 3605b0d061a9baf185c6ab7614534531
|-
| sound/demon/ddeath.wav  ||style=text-align:right|  9140 || 62a48dcd405ca55c9ce18497e36faa0e
|-
| sound/demon/dhit2.wav  ||style=text-align:right|  7142 || 9e741696e4d0d66e30e718fc70ec186e
|-
| sound/demon/djump.wav  ||style=text-align:right|  8494 || 791ac9d6b6593808316145443cb7e7a0
|-
| sound/demon/dland2.wav  ||style=text-align:right|  4400 || db14c7b01838f826b7a712075f9026fd
|-
| sound/demon/dpain1.wav  ||style=text-align:right|  6282 || 5e6c485878393c9bebb0d0e6659bc479
|-
| sound/demon/idle1.wav  ||style=text-align:right|  9098 || 7a83f8caf3d5b1172a7dc5afdc942988
|-
| sound/demon/sight2.wav  ||style=text-align:right|  8804 || 65171c355c22a5069520b0881677ae3c
|-
| sound/dog/dattack1.wav  ||style=text-align:right|  8154 || 0c47c9d4aaae0bf3159a288b674f4a35
|-
| sound/dog/ddeath.wav  ||style=text-align:right|  14912 || b0e7760b1d7286a028ff9773f6802958
|-
| sound/dog/dpain1.wav  ||style=text-align:right|  7240 || 28e5ab93b41e13e2916433283a5d1a46
|-
| sound/dog/dsight.wav  ||style=text-align:right|  6722 || 0edc290765bac1fb4fe03ca55bc7c225
|-
| sound/dog/idle.wav  ||style=text-align:right|  6870 || 42bd6026ff32bd94523ad9f8fe8362cc
|-
| sound/doors/airdoor1.wav  ||style=text-align:right|  13654 || 9b91930e8c2fdece31a2362296891122
|-
| sound/doors/airdoor2.wav  ||style=text-align:right|  8594 || 29fd823d1c14ca42a9a89c716b26f4cd
|-
| sound/doors/basesec1.wav  ||style=text-align:right|  13930 || eb2363fed42724f55e8f55f96c335bcf
|-
| sound/doors/basesec2.wav  ||style=text-align:right|  10238 || 8d163a56607c9cf64a270a156c1c5cef
|-
| sound/doors/basetry.wav  ||style=text-align:right|  10518 || a5108d5c51281ab55c0baf884cbe8cbe
|-
| sound/doors/baseuse.wav  ||style=text-align:right|  16486 || f43fee91efe813a5eb34e9d72918fdb9
|-
| sound/doors/ddoor1.wav  ||style=text-align:right|  7738 || dff86a26139cdd49a193d5ed7ebf6ae1
|-
| sound/doors/ddoor2.wav  ||style=text-align:right|  5904 || 4a9d0b0825d0302ce465569d1e35fbcf
|-
| sound/doors/doormv1.wav  ||style=text-align:right|  14036 || 3fd379aec80a2ad8105c0c89ba5b40e6
|-
| sound/doors/drclos4.wav  ||style=text-align:right|  12814 || 83df1865a0c9fa5d02c2f137564c57de
|-
| sound/doors/hydro1.wav  ||style=text-align:right|  11094 || b1703980a20e624bc3366ccf55ca617e
|-
| sound/doors/hydro2.wav  ||style=text-align:right|  10700 || b1866f5b3950788ccf4206444ab64bc7
|-
| sound/doors/latch2.wav  ||style=text-align:right|  7338 || ad2378ca21a0ca529df328261e07aed5
|-
| sound/doors/medtry.wav  ||style=text-align:right|  7828 || ebb536bec2cdfd22c25b35793c055339
|-
| sound/doors/meduse.wav  ||style=text-align:right|  10718 || 4522aada194b23eb33b541cbcc755cf6
|-
| sound/doors/runetry.wav  ||style=text-align:right|  13524 || c433bae9e2ab508712f87dc2cacc82c8
|-
| sound/doors/runeuse.wav  ||style=text-align:right|  17364 || b4bcfd525a26f5b5ecc9d392430d9079
|-
| sound/doors/stndr1.wav  ||style=text-align:right|  12620 || 5bae2183885e18d65d69624e85249fd9
|-
| sound/doors/stndr2.wav  ||style=text-align:right|  11470 || f43a75c917effff09ef7be8a321c8b49
|-
| sound/doors/winch2.wav  ||style=text-align:right|  14872 || a4edffdfede7dbaed37db526c26e2b6d
|-
| sound/hknight/hit.wav  ||style=text-align:right|  6260 || fece24e2548f1d769e8fce39a5c87d01
|-
| sound/items/armor1.wav  ||style=text-align:right|  7714 || 186d29f2baf35b8c280bc97754606fad
|-
| sound/items/damage2.wav  ||style=text-align:right|  33012 || 14e53b7617ffe315a7c3f8d89652e51c
|-
| sound/items/damage3.wav  ||style=text-align:right|  12894 || baf754aec7ed4baba16760ac85513184
|-
| sound/items/damage.wav  ||style=text-align:right|  23374 || 8cde8b9278ca4922a4ec7ead6e5ee01b
|-
| sound/items/health1.wav  ||style=text-align:right|  7958 || 52a2c4f808db4edd8393de0de618c91f
|-
| sound/items/inv1.wav  ||style=text-align:right|  13728 || 5850cab55d6197d0e76d9f0a22ba10be
|-
| sound/items/inv2.wav  ||style=text-align:right|  33216 || 4edcd38a2c6adc5305636dd7afd5ef60
|-
| sound/items/inv3.wav  ||style=text-align:right|  33320 || 325c268be05b42a019ccb92e6993ab9e
|-
| sound/items/itembk2.wav  ||style=text-align:right|  9910 || 270c688b3cb884f5d4e5ffd8ccc934a1
|-
| sound/items/protect2.wav  ||style=text-align:right|  34012 || 25627a4bd2b4c6054cfd2fc4bf69ddc2
|-
| sound/items/protect3.wav  ||style=text-align:right|  23364 || 7b9374d67f6d59e524bba2af236ca30a
|-
| sound/items/protect.wav  ||style=text-align:right|  22536 || d839d5a84f811ce8a0e28616891bf1a7
|-
| sound/items/r_item1.wav  ||style=text-align:right|  6822 || 3fc0d0ae4a71c9fbfe548f38626c6a08
|-
| sound/items/r_item2.wav  ||style=text-align:right|  7448 || 384ffefe795d99df75f381596a0f1976
|-
| sound/items/suit2.wav  ||style=text-align:right|  33254 || 0a9d2766a5b805cb5794f9bea57e6585
|-
| sound/items/suit.wav  ||style=text-align:right|  15854 || da413f34023d219f1e34fde50a037be0
|-
| sound/knight/idle.wav  ||style=text-align:right|  11064 || 1b5c3981bee078318af346d8fe8090b9
|-
| sound/knight/kdeath.wav  ||style=text-align:right|  10688 || 11a96f48a8f2433c23beae299c8fb96e
|-
| sound/knight/khurt.wav  ||style=text-align:right|  5586 || 32c9f48dd4a6a87752aedf56fe8de668
|-
| sound/knight/ksight.wav  ||style=text-align:right|  13514 || eb75b4af348c88e84d8c87c19d5976fa
|-
| sound/knight/sword1.wav  ||style=text-align:right|  2306 || 93045b5f3178413dc6b01ec2869d1f73
|-
| sound/knight/sword2.wav  ||style=text-align:right|  2784 || 82d1a7c263cd3df7b060dee2f7f8b1fd
|-
| sound/misc/h2ohit1.wav  ||style=text-align:right|  12972 || 49ecb03f4f10862453656a67598f8b8a
|-
| sound/misc/medkey.wav  ||style=text-align:right|  10020 || 0e3ae5626a47d81e4166539e355e31bb
|-
| sound/misc/menu1.wav  ||style=text-align:right|  5738 || 12c36546601c385bc47c9ca9420b7eee
|-
| sound/misc/menu2.wav  ||style=text-align:right|  10672 || 39b01ea6feb3ec8dbd6d8ee3e5e966c4
|-
| sound/misc/menu3.wav  ||style=text-align:right|  3010 || 4a03dc2fd56831b855dab761eac4f7de
|-
| sound/misc/null.wav  ||style=text-align:right|  1244 || 811989e09124f54cb27fe6154b0f1018
|-
| sound/misc/outwater.wav  ||style=text-align:right|  5018 || 35732412412ddb5ed418633bb0123bbe
|-
| sound/misc/power.wav  ||style=text-align:right|  19832 || 9f2c3a18d9fc8d9cecfac6db3aad6bc6
|-
| sound/misc/r_tele1.wav  ||style=text-align:right|  8036 || c2194171b4c446e136ed7514fbb098a5
|-
| sound/misc/r_tele2.wav  ||style=text-align:right|  17324 || 0ce662ac90fb3658d69320d1be4025c1
|-
| sound/misc/r_tele3.wav  ||style=text-align:right|  18016 || 122ef44813edcfe7391578fd29e729d2
|-
| sound/misc/r_tele4.wav  ||style=text-align:right|  9068 || 0097b5747ccc70d5b12fc6838aff02c2
|-
| sound/misc/r_tele5.wav  ||style=text-align:right|  22042 || a82334cbb66d12f28cce9e71c90ea50b
|-
| sound/misc/runekey.wav  ||style=text-align:right|  14578 || 6b21a2e5878011da50fdee0a301d3e34
|-
| sound/misc/secret.wav  ||style=text-align:right|  6610 || a02ceefcc24b1ebf5c164a1e1acfb05f
|-
| sound/misc/talk.wav  ||style=text-align:right|  1810 || d5b25d4df59d92ac5016e88689ea60c1
|-
| sound/misc/trigger1.wav  ||style=text-align:right|  20230 || dc927c8a1d0a9bd59fbc5dd91ae1d812
|-
| sound/misc/water1.wav  ||style=text-align:right|  3926 || d8291c762acb1edf24927fdcc0f6a6cd
|-
| sound/misc/water2.wav  ||style=text-align:right|  3340 || 049e8e7e7b30d4d8038afb7248bdd977
|-
| sound/ogre/ogdrag.wav  ||style=text-align:right|  12396 || 658587dc89aaefae5ca3f058f7ff4227
|-
| sound/ogre/ogdth.wav  ||style=text-align:right|  13892 || de98e7bb9e70586edddd3308cfded3db
|-
| sound/ogre/ogidle2.wav  ||style=text-align:right|  11254 || 196ae9c33a4311160e1d5f3da878ab09
|-
| sound/ogre/ogidle.wav  ||style=text-align:right|  12894 || 177c829840a87c885bbc8951e7ce962e
|-
| sound/ogre/ogpain1.wav  ||style=text-align:right|  7898 || ac6d133d7720c12df49813fe10e683b5
|-
| sound/ogre/ogsawatk.wav  ||style=text-align:right|  16154 || 7257bdfd014bb61d778b8f88cb65d560
|-
| sound/ogre/ogwake.wav  ||style=text-align:right|  19356 || 3296459e495c4c12b31179d4eeffac19
|-
| sound/plats/medplat1.wav  ||style=text-align:right|  16378 || b73215aa6627c8b5b90fce8d260d48d0
|-
| sound/plats/medplat2.wav  ||style=text-align:right|  7338 || 1fc6c3772917a1a8155d04fa52e17005
|-
| sound/plats/plat1.wav  ||style=text-align:right|  20248 || 5d43ed85d896ba926f459e06ba6635d5
|-
| sound/plats/plat2.wav  ||style=text-align:right|  7338 || 49d7ab0fd726cd652eb6e5756fce61b9
|-
| sound/plats/train1.wav  ||style=text-align:right|  21430 || b589ae8262046361d9dca39d6b8f693a
|-
| sound/plats/train2.wav  ||style=text-align:right|  5870 || 640017e1b870d643e3bca29d499c72ee
|-
| sound/player/axhit1.wav  ||style=text-align:right|  6906 || 149b2371334da318386325182924eaca
|-
| sound/player/axhit2.wav  ||style=text-align:right|  2434 || fc01909318455f5310efa2457a370897
|-
| sound/player/death1.wav  ||style=text-align:right|  10170 || ba005f5488d4ee78dabf613a03f33a5f
|-
| sound/player/death2.wav  ||style=text-align:right|  8026 || 20477d2e7c84aac1bef95d32c9c702dd
|-
| sound/player/death3.wav  ||style=text-align:right|  10918 || 7b206ba8e1fa28d8605b50e3f3200f11
|-
| sound/player/death4.wav  ||style=text-align:right|  14126 || 1b0f27f4d41b748d3cc5c3d56bd917f8
|-
| sound/player/death5.wav  ||style=text-align:right|  14946 || 7efe84195cfa97515aad2d7f96f25346
|-
| sound/player/drown1.wav  ||style=text-align:right|  8908 || 732f0416af6990e028110380bcb36f0d
|-
| sound/player/drown2.wav  ||style=text-align:right|  3114 || 29ee1f287879acce29b15d4722668bc2
|-
| sound/player/gasp1.wav  ||style=text-align:right|  8702 || b06cbc370c8c2c163dc4d487e8b673c7
|-
| sound/player/gasp2.wav  ||style=text-align:right|  13134 || 30aece9d8779764620c7f866bfb06edb
|-
| sound/player/gib.wav  ||style=text-align:right|  14424 || 26fa9942078125388f34b71546615068
|-
| sound/player/h2odeath.wav  ||style=text-align:right|  18104 || 73b0f4dfae07f6e49112cadfe202735c
|-
| sound/player/h2ojump.wav  ||style=text-align:right|  11438 || cd421b96410971bb1a4f21d3936a3805
|-
| sound/player/inh2o.wav  ||style=text-align:right|  11340 || d4c1a27c4d07e8dfdf18a4b1a880c610
|-
| sound/player/inlava.wav  ||style=text-align:right|  10958 || c37875a082900716b7af88d2d990f55c
|-
| sound/player/land2.wav  ||style=text-align:right|  6204 || 6ba534256a779d66d9d9dabb90e63c8b
|-
| sound/player/land.wav  ||style=text-align:right|  2434 || e34328a40358d98f0f95403b9e27ec1e
|-
| sound/player/lburn1.wav  ||style=text-align:right|  6682 || 3c447c72385defe97c060771077d8ba0
|-
| sound/player/lburn2.wav  ||style=text-align:right|  6076 || 6849ee8dbd91ec82ece016fbd39b0a5c
|-
| sound/player/pain1.wav  ||style=text-align:right|  3394 || d7ac9df7540b791f952ca2a681c0265b
|-
| sound/player/pain2.wav  ||style=text-align:right|  2710 || 513e054b64d4fb61f31384d59e123020
|-
| sound/player/pain3.wav  ||style=text-align:right|  4854 || aafc61ad4e16cc5cdd2db2100796b494
|-
| sound/player/pain4.wav  ||style=text-align:right|  4840 || f655ef2045bc55473303b27546aa6fc0
|-
| sound/player/pain5.wav  ||style=text-align:right|  8020 || f8551a73cb89396042687baa8c68b5c2
|-
| sound/player/pain6.wav  ||style=text-align:right|  5462 || 70062eabf96288d307280fb601ce0ee2
|-
| sound/player/plyrjmp8.wav  ||style=text-align:right|  3888 || d4a552d8f627c7f3b933568c4a74c913
|-
| sound/player/slimbrn2.wav  ||style=text-align:right|  12468 || b17c18a9f81a952f2d41f65b5180f210
|-
| sound/player/teledth1.wav  ||style=text-align:right|  14414 || c226c7f041187ba058d8112cc0190b56
|-
| sound/player/tornoff2.wav  ||style=text-align:right|  7726 || 03ec1c805b307b8fe4c4052f8332a5e5
|-
| sound/player/udeath.wav  ||style=text-align:right|  16082 || afe674f287efb6197da2cea0c0b1d2f8
|-
| sound/shambler/melee1.wav  ||style=text-align:right|  4718 || 77fe6240973a204b757a427ebf66bcfd
|-
| sound/shambler/melee2.wav  ||style=text-align:right|  5966 || 3be31638d769e3d690c92311dfafdeac
|-
| sound/shambler/sattck1.wav  ||style=text-align:right|  8036 || ec8c3f79ea42d09154cb8975ada1b21c
|-
| sound/shambler/sboom.wav  ||style=text-align:right|  11672 || 9834601a645d7d1f62001b2a314ec18f
|-
| sound/shambler/sdeath.wav  ||style=text-align:right|  21106 || e0e62d229a985a6e39218c6488599059
|-
| sound/shambler/shurt2.wav  ||style=text-align:right|  4302 || 1e87631ede95e061a75f9c31629ac0b8
|-
| sound/shambler/sidle.wav  ||style=text-align:right|  5646 || 368a240e6c3e877793352a79c1828386
|-
| sound/shambler/smack.wav  ||style=text-align:right|  5300 || bd8c634c9894348360fec7b7419d1649
|-
| sound/shambler/ssight.wav  ||style=text-align:right|  15420 || 657107577460d5acf3157dec97e07a89
|-
| sound/soldier/death1.wav  ||style=text-align:right|  8434 || fe25952af40b536c3bb67bfca58062eb
|-
| sound/soldier/idle.wav  ||style=text-align:right|  9802 || 4cdfbdda8fb5f40b125c7bcddb6e8914
|-
| sound/soldier/pain1.wav  ||style=text-align:right|  5000 || 54d3b05fdcecf7480034858f2b22b06c
|-
| sound/soldier/pain2.wav  ||style=text-align:right|  7838 || e2bbc9d3405b9b9fdae76d2fc298fc2f
|-
| sound/soldier/sattck1.wav  ||style=text-align:right|  14302 || b76ac35f900f280a7a7996da7e404362
|-
| sound/soldier/sight1.wav  ||style=text-align:right|  12716 || e2a39533250ddd1b08053d5c4ebf7fd0
|-
| sound/weapons/ax1.wav  ||style=text-align:right|  3308 || 237d4d819d02ad37849a8a895cc410e1
|-
| sound/weapons/bounce.wav  ||style=text-align:right|  5864 || fced668c6558a9505abf5014d60528a6
|-
| sound/weapons/grenade.wav  ||style=text-align:right|  8364 || d2b6fa131933f203eba2a282276e88df
|-
| sound/weapons/guncock.wav  ||style=text-align:right|  14430 || 6a63452167cc106e756518536446844f
|-
| sound/weapons/lhit.wav  ||style=text-align:right|  26028 || fefd021d0bd35a1f8da8870f1c06abb9
|-
| sound/weapons/lock4.wav  ||style=text-align:right|  3876 || 3fd93222258d5b1500b150f021c94519
|-
| sound/weapons/lstart.wav  ||style=text-align:right|  56378 || abe1abf6dcadcda5930b0684c7ea820a
|-
| sound/weapons/pkup.wav  ||style=text-align:right|  5174 || 0aa6f0a7d609e1a56fd535a06d1bb56e
|-
| sound/weapons/r_exp3.wav  ||style=text-align:right|  17478 || 57db026474fc76ba7f38cea24eaaf8cf
|-
| sound/weapons/ric1.wav  ||style=text-align:right|  4308 || a31166b4bbb4509ac3004a01f7477ee9
|-
| sound/weapons/ric2.wav  ||style=text-align:right|  10838 || a180b447c0527e603cea54a9aefd6139
|-
| sound/weapons/ric3.wav  ||style=text-align:right|  12638 || 8a773bbb585540ddce256151162f3a2c
|-
| sound/weapons/rocket1i.wav  ||style=text-align:right|  9660 || fb4fdf345d805cf6980c4c695974effc
|-
| sound/weapons/sgun1.wav  ||style=text-align:right|  22992 || 95a14815e48deb323d0cf8251d728ac7
|-
| sound/weapons/shotgn2.wav  ||style=text-align:right|  8694 || cb561cefbf472232334b419af050e5a0
|-
| sound/weapons/spike2.wav  ||style=text-align:right|  12642 || 9189d811855f108da4a1e2d34dc7c633
|-
| sound/weapons/tink1.wav  ||style=text-align:right|  1252 || 297ba8706625fcf05887edb393e9a441
|-
| sound/wizard/hit.wav  ||style=text-align:right|  7332 || 6598d669334df977f1f97b95288edf11
|-
| sound/wizard/wattack.wav  ||style=text-align:right|  25912 || b3568a47439f81779d40335e76f5bc2d
|-
| sound/wizard/wdeath.wav  ||style=text-align:right|  20684 || 99d9c71343bc23222abb92119d404400
|-
| sound/wizard/widle1.wav  ||style=text-align:right|  13464 || b22b1dd9f66879b3447d36ab584316c7
|-
| sound/wizard/widle2.wav  ||style=text-align:right|  23094 || 7178fd83df227360564adef01bed92c6
|-
| sound/wizard/wpain.wav  ||style=text-align:right|  8686 || bd7e59ab7d7b835f9ed8ab51950914de
|-
| sound/wizard/wsight.wav  ||style=text-align:right|  13078 || df5949057c750528917c6cb32b7fd9fd
|-
| sound/zombie/idle_w2.wav  ||style=text-align:right|  17192 || d2bb59b9d7ac71097c07123a23525641
|-
| sound/zombie/z_fall.wav  ||style=text-align:right|  3062 || 6968318b2d196c6d54bc707d8a390547
|-
| sound/zombie/z_gib.wav  ||style=text-align:right|  16226 || 199dda66ade8d6f0ef4897e4d7608c0d
|-
| sound/zombie/z_hit.wav  ||style=text-align:right|  6166 || 6c66ab3e6b149bf35956a4bbc0057acb
|-
| sound/zombie/z_idle1.wav  ||style=text-align:right|  13244 || 21088a7b38b1124d7ec72e58d5ab93a6
|-
| sound/zombie/z_idle.wav  ||style=text-align:right|  16734 || e5e570e38c4405111004190a79f0e925
|-
| sound/zombie/z_miss.wav  ||style=text-align:right|  10734 || 96fad96a8c3bc6f7bcc5da6c82678da2
|-
| sound/zombie/z_pain1.wav  ||style=text-align:right|  15374 || fcd83b89a94b0cadbe1361a4df080ec0
|-
| sound/zombie/z_pain.wav  ||style=text-align:right|  12218 || 56637968b8309bd2f825153330bbdfc0
|-
| sound/zombie/z_shot1.wav  ||style=text-align:right|  3068 || 561afb69b7851923a8fb3b54e3e13c96
|-
|}&lt;/tt&gt;

The only difference to 85fc9cee2035b66290da1e33be2ac86b is an updated progs.dat.

{{todo|todo=Multiple to do items listed above, detail out the contents of various pak files}}
{{todo|todo=different releases have different pak0.pak files}}</text>
      <sha1>dokguxpotnladpudq401eugvo7jv1lm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>pak1.pak</title>
    <ns>0</ns>
    <id>1080</id>
    <revision>
      <id>3262</id>
      <timestamp>2014-09-24T16:29:52Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>v1.01</comment>
      <text xml:space="preserve" bytes="177">== Versions ==
&lt;tt&gt;
{| class=&quot;wikitable&quot;
! Version !! Size !! md5
|-
| Registered Version 1.01 ||style=text-align:right|  34257856 || d76b3e5678f0b64ac74ce5e340e6a685
|-
|}&lt;/tt&gt;</text>
      <sha1>70uydwul4d523mqke5pdhjslag8obx7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3264</id>
      <parentid>3262</parentid>
      <timestamp>2014-09-24T16:46:26Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>/* Versions */</comment>
      <text xml:space="preserve" bytes="8515">== Versions ==
&lt;tt&gt;
{| class=&quot;wikitable&quot;
! Version !! Timestamp !! Size !! md5
|-
| Registered Version 1.01 || Unknown ||style=text-align:right|  34257856 || d76b3e5678f0b64ac74ce5e340e6a685
|-
|}&lt;/tt&gt;

=== d76b3e5678f0b64ac74ce5e340e6a685 ===
The [[id1]] ''pak1.pak'' with the md5sum d76b3e5678f0b64ac74ce5e340e6a685 contains the following folders &amp; files:

&lt;tt&gt;
{| class=&quot;wikitable collapsible collapsed&quot;
|-
! Path !! Size !! md5
|-
| end2.bin  ||style=text-align:right|  4000 || ebdbff3328c31e4543346ebd4027679a
|-
| gfx/pop.lmp  ||style=text-align:right|  256 || 0b83efc0411e7b5dcb937a1e42ad37e3
|-
| Index.txt  ||style=text-align:right|  3530 || 1bdec40645b68e7dc00d3fbb210de3ac
|-
| maps/b_exbox2.bsp  ||style=text-align:right|  4676 || 03331da4f39fd82228dcf19a36979540
|-
| maps/dm1.bsp  ||style=text-align:right|  547708 || 993442fbab636cef660f356d968beb8d
|-
| maps/dm2.bsp  ||style=text-align:right|  907384 || b8119c6a30ec2789bb5d57eebe85e153
|-
| maps/dm3.bsp  ||style=text-align:right|  950200 || e48f522b498c5b43583303527e7df1fe
|-
| maps/dm4.bsp  ||style=text-align:right|  354708 || 7e01a4b508c500b84a93c1b18ca3f0ad
|-
| maps/dm5.bsp  ||style=text-align:right|  476836 || 02281d8066c0b92eb43f72ea621865bf
|-
| maps/dm6.bsp  ||style=text-align:right|  455852 || 9ac076b32bc48a1acda979adffc9900b
|-
| maps/e2m1.bsp  ||style=text-align:right|  1400104 || 86ae0e073090f783df0ca8b61f8d7f99
|-
| maps/e2m2.bsp  ||style=text-align:right|  1304244 || 83b4cd6b7f89566406d9a5df7c4baff9
|-
| maps/e2m3.bsp  ||style=text-align:right|  1332084 || 6b179e8cb4b844fbeba242893781dbb6
|-
| maps/e2m4.bsp  ||style=text-align:right|  1298856 || 093b457469e44189763098d8ac8da013
|-
| maps/e2m5.bsp  ||style=text-align:right|  1368444 || 22b160cc5eb2723fe76435afaa1a09a4
|-
| maps/e2m6.bsp  ||style=text-align:right|  1227392 || ee0bc686318a9b0e4fc0986f799fa557
|-
| maps/e2m7.bsp  ||style=text-align:right|  1384072 || b7c28e9fcd6bce0ce192bd90e34cefd6
|-
| maps/e3m1.bsp  ||style=text-align:right|  1353580 || 5a00deadf328c816be471205b74dba96
|-
| maps/e3m2.bsp  ||style=text-align:right|  1039524 || 752c0e7af81399e277110dde5a6339b4
|-
| maps/e3m3.bsp  ||style=text-align:right|  964644 || 966465455cb5bd432f44f80a2667fa69
|-
| maps/e3m4.bsp  ||style=text-align:right|  1373132 || 2d9d2edc23567c255db3ebd8053e08d7
|-
| maps/e3m5.bsp  ||style=text-align:right|  1434492 || 7072ffed3364b58adebbba4d042c6203
|-
| maps/e3m6.bsp  ||style=text-align:right|  1387832 || 741c1c543bcabc2337f7a74cea43326d
|-
| maps/e3m7.bsp  ||style=text-align:right|  1072644 || e62434610a386364c84445fc98b845f3
|-
| maps/e4m1.bsp  ||style=text-align:right|  1362668 || 36a82cf221470ab52a4bc3cbc26ebf0d
|-
| maps/e4m2.bsp  ||style=text-align:right|  1125588 || f0a58cfcce7bac57865add0f7924cd49
|-
| maps/e4m3.bsp  ||style=text-align:right|  1327056 || 6ccefcb9f12806b5bc9f7023a6145360
|-
| maps/e4m4.bsp  ||style=text-align:right|  1314340 || e342652ec76385d4fe957cc76f5c55c0
|-
| maps/e4m5.bsp  ||style=text-align:right|  1304524 || 632c9d433e1075079d71e4cb0a20857b
|-
| maps/e4m6.bsp  ||style=text-align:right|  1199816 || 5db11591f00a42c9eca7783f65f66e15
|-
| maps/e4m7.bsp  ||style=text-align:right|  1495232 || 0025f16cc79b5b96694b6c22acc9f1e2
|-
| maps/e4m8.bsp  ||style=text-align:right|  1124944 || f0dbee2ac3d54619ab178c5e070d7432
|-
| maps/end.bsp  ||style=text-align:right|  467624 || 2db412b900798f05693f33a0f9cfc396
|-
| progs/b_g_key.mdl  ||style=text-align:right|  5716 || 86b0ea20a8db1a4cd4a266a4ecfdde2b
|-
| progs/b_s_key.mdl  ||style=text-align:right|  5716 || 9650f8cfdc9eb7ccccb24402553d9b1b
|-
| progs/end2.mdl  ||style=text-align:right|  40980 || 3a0d6d55c9680709554c255e4f3358b2
|-
| progs/end3.mdl  ||style=text-align:right|  19924 || 236671a88e064a6ed6e922a40a6b4e30
|-
| progs/end4.mdl  ||style=text-align:right|  26932 || 8181490eefafc27d43f7b73286f258a2
|-
| progs/enforcer.mdl  ||style=text-align:right|  160688 || 136c265f96d6077ee3312c52e134529f
|-
| progs/fish.mdl  ||style=text-align:right|  81900 || d770d6ef92ae8b372926e6c3d49e8716
|-
| progs/h_hellkn.mdl  ||style=text-align:right|  16628 || 4d71e0cd25b4bbfa8acdd35514f1f4e2
|-
| progs/hknight.mdl  ||style=text-align:right|  228400 || ed20e30be6fdb83efbaa6d0b23671a49
|-
| progs/h_mega.mdl  ||style=text-align:right|  11828 || c2cb3dcd4e6b696d39e681d40a8ba08f
|-
| progs/h_shal.mdl  ||style=text-align:right|  28036 || 71521f74271615e5a8b8ba664724709f
|-
| progs/k_spike.mdl  ||style=text-align:right|  16756 || da95b49a695b34c2c3516a8d789c6b20
|-
| progs/laser.mdl  ||style=text-align:right|  11348 || ab4a28a122f8c0c811021e2a74132ac5
|-
| progs/oldone.mdl  ||style=text-align:right|  103208 || 0f2eb7a5db9671a72e2b20df9de77205
|-
| progs/shalrath.mdl  ||style=text-align:right|  80648 || dac8f6077b0d2bf970573d2d2c22529f
|-
| progs/tarbaby.mdl  ||style=text-align:right|  98148 || 2bfc45593a43a0191982e3cfdc112dc5
|-
| progs/teleport.mdl  ||style=text-align:right|  13684 || 9bdf68f4a7148abad05b0f8a6c4f4956
|-
| progs/v_spike.mdl  ||style=text-align:right|  13684 || 2bdc0b264b9fd3443c8eee816305728f
|-
| sound/blob/death1.wav  ||style=text-align:right|  16368 || 53f8c73de11c018086ba19ed036833d3
|-
| sound/blob/hit1.wav  ||style=text-align:right|  10026 || 42c5a1edd02421bf6df7ddc3e395c4f8
|-
| sound/blob/land1.wav  ||style=text-align:right|  9232 || 5a1585ab22368a48827db9b7d3763b58
|-
| sound/blob/sight1.wav  ||style=text-align:right|  7182 || df4dd7ec91e094b5c2235be3f5353e4a
|-
| sound/boss2/death.wav  ||style=text-align:right|  253690 || 0859dcb4e3956df92f775f516b5c47a3
|-
| sound/boss2/idle.wav  ||style=text-align:right|  33306 || 2170427a3c3649c8e4f10b0562ee36c4
|-
| sound/boss2/pop2.wav  ||style=text-align:right|  53760 || e57ca53bdf60803a7563170dcebad70b
|-
| sound/boss2/sight.wav  ||style=text-align:right|  225484 || 9eb0eed494b879033c6145f8be74dc5d
|-
| sound/enforcer/death1.wav  ||style=text-align:right|  9290 || f38d7a235e13ef8918aac0c70437320d
|-
| sound/enforcer/enfire.wav  ||style=text-align:right|  7430 || b080a6a53f138bef9fc4403fb9373a24
|-
| sound/enforcer/enfstop.wav  ||style=text-align:right|  4360 || 0bc39c3c88187fb37d20ef21300e7b22
|-
| sound/enforcer/idle1.wav  ||style=text-align:right|  15810 || d0435763860fe54e938ad25bb1780f9e
|-
| sound/enforcer/pain1.wav  ||style=text-align:right|  5478 || d52bc02afe624924684b25295edaa040
|-
| sound/enforcer/pain2.wav  ||style=text-align:right|  4580 || f6b0ad6485d93f5c6d7d61b847d06877
|-
| sound/enforcer/sight1.wav  ||style=text-align:right|  5870 || 9e9876444ba92ed18bfce4cec3a2ff12
|-
| sound/enforcer/sight2.wav  ||style=text-align:right|  6574 || 815dd4f6a890b0a35dc466005df74850
|-
| sound/enforcer/sight3.wav  ||style=text-align:right|  6158 || f8c8d19905b24d4adb6760a1b3762f3b
|-
| sound/enforcer/sight4.wav  ||style=text-align:right|  5166 || 04e40eb925290bc56520de326df6b220
|-
| sound/fish/bite.wav  ||style=text-align:right|  6416 || 7c56712615e2a2c3de4fe0e7e35cba05
|-
| sound/fish/death.wav  ||style=text-align:right|  40708 || 8d6152ee55507430a8c2eb276c4aa8ac
|-
| sound/fish/idle.wav  ||style=text-align:right|  51264 || 54a02731b85eb6f8b1a8ecce09771d20
|-
| sound/hknight/attack1.wav  ||style=text-align:right|  9808 || 695e9d890a085addf1a607aa79137e8e
|-
| sound/hknight/death1.wav  ||style=text-align:right|  8302 || 2d68c3c86632027676b823fcff3af08c
|-
| sound/hknight/grunt.wav  ||style=text-align:right|  4876 || 122f3d4623e0146732aa0e4deb0fe326
|-
| sound/hknight/idle.wav  ||style=text-align:right|  5056 || e9ca23c4853472750d1f56e52a3d227b
|-
| sound/hknight/pain1.wav  ||style=text-align:right|  7434 || 52c20eb6f5b5146ece6b0ac02f423341
|-
| sound/hknight/sight1.wav  ||style=text-align:right|  12714 || 786d28ec653a0d512d078b32eb8cb58b
|-
| sound/hknight/slash1.wav  ||style=text-align:right|  2342 || 83e64bb90cff2a4f9764dd53489b9d7d
|-
| sound/misc/basekey.wav  ||style=text-align:right|  5980 || ff6cc6465426e0555f6f7c138f189370
|-
| sound/shalrath/attack2.wav  ||style=text-align:right|  10908 || 777fbda2f81350e45920ea1c36d318e1
|-
| sound/shalrath/attack.wav  ||style=text-align:right|  16674 || 8814a72b399be619d14223235f78f294
|-
| sound/shalrath/death.wav  ||style=text-align:right|  9436 || 771844c5cfb5a42e82e221a63f101ac7
|-
| sound/shalrath/idle.wav  ||style=text-align:right|  16302 || 1a45f12579f9cdd27152332d5f816048
|-
| sound/shalrath/pain.wav  ||style=text-align:right|  9230 || 6ba007b79c50d7d5347f1a29fb315422
|-
| sound/shalrath/sight.wav  ||style=text-align:right|  26510 || 3d3c2001cc976efc67af1552427eedd3
|-
|}
&lt;/tt&gt;</text>
      <sha1>46rg403x8bwf2flut2ayrc1xh2nafk9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3266</id>
      <parentid>3264</parentid>
      <timestamp>2014-09-24T16:48:36Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>/* d76b3e5678f0b64ac74ce5e340e6a685 */ removed unpak artifact</comment>
      <text xml:space="preserve" bytes="8431">== Versions ==
&lt;tt&gt;
{| class=&quot;wikitable&quot;
! Version !! Timestamp !! Size !! md5
|-
| Registered Version 1.01 || Unknown ||style=text-align:right|  34257856 || d76b3e5678f0b64ac74ce5e340e6a685
|-
|}&lt;/tt&gt;

=== d76b3e5678f0b64ac74ce5e340e6a685 ===
The [[id1]] ''pak1.pak'' with the md5sum d76b3e5678f0b64ac74ce5e340e6a685 contains the following folders &amp; files:

&lt;tt&gt;
{| class=&quot;wikitable collapsible collapsed&quot;
|-
! Path !! Size !! md5
|-
| end2.bin  ||style=text-align:right|  4000 || ebdbff3328c31e4543346ebd4027679a
|-
| gfx/pop.lmp  ||style=text-align:right|  256 || 0b83efc0411e7b5dcb937a1e42ad37e3
|-
| maps/b_exbox2.bsp  ||style=text-align:right|  4676 || 03331da4f39fd82228dcf19a36979540
|-
| maps/dm1.bsp  ||style=text-align:right|  547708 || 993442fbab636cef660f356d968beb8d
|-
| maps/dm2.bsp  ||style=text-align:right|  907384 || b8119c6a30ec2789bb5d57eebe85e153
|-
| maps/dm3.bsp  ||style=text-align:right|  950200 || e48f522b498c5b43583303527e7df1fe
|-
| maps/dm4.bsp  ||style=text-align:right|  354708 || 7e01a4b508c500b84a93c1b18ca3f0ad
|-
| maps/dm5.bsp  ||style=text-align:right|  476836 || 02281d8066c0b92eb43f72ea621865bf
|-
| maps/dm6.bsp  ||style=text-align:right|  455852 || 9ac076b32bc48a1acda979adffc9900b
|-
| maps/e2m1.bsp  ||style=text-align:right|  1400104 || 86ae0e073090f783df0ca8b61f8d7f99
|-
| maps/e2m2.bsp  ||style=text-align:right|  1304244 || 83b4cd6b7f89566406d9a5df7c4baff9
|-
| maps/e2m3.bsp  ||style=text-align:right|  1332084 || 6b179e8cb4b844fbeba242893781dbb6
|-
| maps/e2m4.bsp  ||style=text-align:right|  1298856 || 093b457469e44189763098d8ac8da013
|-
| maps/e2m5.bsp  ||style=text-align:right|  1368444 || 22b160cc5eb2723fe76435afaa1a09a4
|-
| maps/e2m6.bsp  ||style=text-align:right|  1227392 || ee0bc686318a9b0e4fc0986f799fa557
|-
| maps/e2m7.bsp  ||style=text-align:right|  1384072 || b7c28e9fcd6bce0ce192bd90e34cefd6
|-
| maps/e3m1.bsp  ||style=text-align:right|  1353580 || 5a00deadf328c816be471205b74dba96
|-
| maps/e3m2.bsp  ||style=text-align:right|  1039524 || 752c0e7af81399e277110dde5a6339b4
|-
| maps/e3m3.bsp  ||style=text-align:right|  964644 || 966465455cb5bd432f44f80a2667fa69
|-
| maps/e3m4.bsp  ||style=text-align:right|  1373132 || 2d9d2edc23567c255db3ebd8053e08d7
|-
| maps/e3m5.bsp  ||style=text-align:right|  1434492 || 7072ffed3364b58adebbba4d042c6203
|-
| maps/e3m6.bsp  ||style=text-align:right|  1387832 || 741c1c543bcabc2337f7a74cea43326d
|-
| maps/e3m7.bsp  ||style=text-align:right|  1072644 || e62434610a386364c84445fc98b845f3
|-
| maps/e4m1.bsp  ||style=text-align:right|  1362668 || 36a82cf221470ab52a4bc3cbc26ebf0d
|-
| maps/e4m2.bsp  ||style=text-align:right|  1125588 || f0a58cfcce7bac57865add0f7924cd49
|-
| maps/e4m3.bsp  ||style=text-align:right|  1327056 || 6ccefcb9f12806b5bc9f7023a6145360
|-
| maps/e4m4.bsp  ||style=text-align:right|  1314340 || e342652ec76385d4fe957cc76f5c55c0
|-
| maps/e4m5.bsp  ||style=text-align:right|  1304524 || 632c9d433e1075079d71e4cb0a20857b
|-
| maps/e4m6.bsp  ||style=text-align:right|  1199816 || 5db11591f00a42c9eca7783f65f66e15
|-
| maps/e4m7.bsp  ||style=text-align:right|  1495232 || 0025f16cc79b5b96694b6c22acc9f1e2
|-
| maps/e4m8.bsp  ||style=text-align:right|  1124944 || f0dbee2ac3d54619ab178c5e070d7432
|-
| maps/end.bsp  ||style=text-align:right|  467624 || 2db412b900798f05693f33a0f9cfc396
|-
| progs/b_g_key.mdl  ||style=text-align:right|  5716 || 86b0ea20a8db1a4cd4a266a4ecfdde2b
|-
| progs/b_s_key.mdl  ||style=text-align:right|  5716 || 9650f8cfdc9eb7ccccb24402553d9b1b
|-
| progs/end2.mdl  ||style=text-align:right|  40980 || 3a0d6d55c9680709554c255e4f3358b2
|-
| progs/end3.mdl  ||style=text-align:right|  19924 || 236671a88e064a6ed6e922a40a6b4e30
|-
| progs/end4.mdl  ||style=text-align:right|  26932 || 8181490eefafc27d43f7b73286f258a2
|-
| progs/enforcer.mdl  ||style=text-align:right|  160688 || 136c265f96d6077ee3312c52e134529f
|-
| progs/fish.mdl  ||style=text-align:right|  81900 || d770d6ef92ae8b372926e6c3d49e8716
|-
| progs/h_hellkn.mdl  ||style=text-align:right|  16628 || 4d71e0cd25b4bbfa8acdd35514f1f4e2
|-
| progs/hknight.mdl  ||style=text-align:right|  228400 || ed20e30be6fdb83efbaa6d0b23671a49
|-
| progs/h_mega.mdl  ||style=text-align:right|  11828 || c2cb3dcd4e6b696d39e681d40a8ba08f
|-
| progs/h_shal.mdl  ||style=text-align:right|  28036 || 71521f74271615e5a8b8ba664724709f
|-
| progs/k_spike.mdl  ||style=text-align:right|  16756 || da95b49a695b34c2c3516a8d789c6b20
|-
| progs/laser.mdl  ||style=text-align:right|  11348 || ab4a28a122f8c0c811021e2a74132ac5
|-
| progs/oldone.mdl  ||style=text-align:right|  103208 || 0f2eb7a5db9671a72e2b20df9de77205
|-
| progs/shalrath.mdl  ||style=text-align:right|  80648 || dac8f6077b0d2bf970573d2d2c22529f
|-
| progs/tarbaby.mdl  ||style=text-align:right|  98148 || 2bfc45593a43a0191982e3cfdc112dc5
|-
| progs/teleport.mdl  ||style=text-align:right|  13684 || 9bdf68f4a7148abad05b0f8a6c4f4956
|-
| progs/v_spike.mdl  ||style=text-align:right|  13684 || 2bdc0b264b9fd3443c8eee816305728f
|-
| sound/blob/death1.wav  ||style=text-align:right|  16368 || 53f8c73de11c018086ba19ed036833d3
|-
| sound/blob/hit1.wav  ||style=text-align:right|  10026 || 42c5a1edd02421bf6df7ddc3e395c4f8
|-
| sound/blob/land1.wav  ||style=text-align:right|  9232 || 5a1585ab22368a48827db9b7d3763b58
|-
| sound/blob/sight1.wav  ||style=text-align:right|  7182 || df4dd7ec91e094b5c2235be3f5353e4a
|-
| sound/boss2/death.wav  ||style=text-align:right|  253690 || 0859dcb4e3956df92f775f516b5c47a3
|-
| sound/boss2/idle.wav  ||style=text-align:right|  33306 || 2170427a3c3649c8e4f10b0562ee36c4
|-
| sound/boss2/pop2.wav  ||style=text-align:right|  53760 || e57ca53bdf60803a7563170dcebad70b
|-
| sound/boss2/sight.wav  ||style=text-align:right|  225484 || 9eb0eed494b879033c6145f8be74dc5d
|-
| sound/enforcer/death1.wav  ||style=text-align:right|  9290 || f38d7a235e13ef8918aac0c70437320d
|-
| sound/enforcer/enfire.wav  ||style=text-align:right|  7430 || b080a6a53f138bef9fc4403fb9373a24
|-
| sound/enforcer/enfstop.wav  ||style=text-align:right|  4360 || 0bc39c3c88187fb37d20ef21300e7b22
|-
| sound/enforcer/idle1.wav  ||style=text-align:right|  15810 || d0435763860fe54e938ad25bb1780f9e
|-
| sound/enforcer/pain1.wav  ||style=text-align:right|  5478 || d52bc02afe624924684b25295edaa040
|-
| sound/enforcer/pain2.wav  ||style=text-align:right|  4580 || f6b0ad6485d93f5c6d7d61b847d06877
|-
| sound/enforcer/sight1.wav  ||style=text-align:right|  5870 || 9e9876444ba92ed18bfce4cec3a2ff12
|-
| sound/enforcer/sight2.wav  ||style=text-align:right|  6574 || 815dd4f6a890b0a35dc466005df74850
|-
| sound/enforcer/sight3.wav  ||style=text-align:right|  6158 || f8c8d19905b24d4adb6760a1b3762f3b
|-
| sound/enforcer/sight4.wav  ||style=text-align:right|  5166 || 04e40eb925290bc56520de326df6b220
|-
| sound/fish/bite.wav  ||style=text-align:right|  6416 || 7c56712615e2a2c3de4fe0e7e35cba05
|-
| sound/fish/death.wav  ||style=text-align:right|  40708 || 8d6152ee55507430a8c2eb276c4aa8ac
|-
| sound/fish/idle.wav  ||style=text-align:right|  51264 || 54a02731b85eb6f8b1a8ecce09771d20
|-
| sound/hknight/attack1.wav  ||style=text-align:right|  9808 || 695e9d890a085addf1a607aa79137e8e
|-
| sound/hknight/death1.wav  ||style=text-align:right|  8302 || 2d68c3c86632027676b823fcff3af08c
|-
| sound/hknight/grunt.wav  ||style=text-align:right|  4876 || 122f3d4623e0146732aa0e4deb0fe326
|-
| sound/hknight/idle.wav  ||style=text-align:right|  5056 || e9ca23c4853472750d1f56e52a3d227b
|-
| sound/hknight/pain1.wav  ||style=text-align:right|  7434 || 52c20eb6f5b5146ece6b0ac02f423341
|-
| sound/hknight/sight1.wav  ||style=text-align:right|  12714 || 786d28ec653a0d512d078b32eb8cb58b
|-
| sound/hknight/slash1.wav  ||style=text-align:right|  2342 || 83e64bb90cff2a4f9764dd53489b9d7d
|-
| sound/misc/basekey.wav  ||style=text-align:right|  5980 || ff6cc6465426e0555f6f7c138f189370
|-
| sound/shalrath/attack2.wav  ||style=text-align:right|  10908 || 777fbda2f81350e45920ea1c36d318e1
|-
| sound/shalrath/attack.wav  ||style=text-align:right|  16674 || 8814a72b399be619d14223235f78f294
|-
| sound/shalrath/death.wav  ||style=text-align:right|  9436 || 771844c5cfb5a42e82e221a63f101ac7
|-
| sound/shalrath/idle.wav  ||style=text-align:right|  16302 || 1a45f12579f9cdd27152332d5f816048
|-
| sound/shalrath/pain.wav  ||style=text-align:right|  9230 || 6ba007b79c50d7d5347f1a29fb315422
|-
| sound/shalrath/sight.wav  ||style=text-align:right|  26510 || 3d3c2001cc976efc67af1552427eedd3
|-
|}
&lt;/tt&gt;</text>
      <sha1>bolw3r83ltbpvbuojzk6p36z0or4y2q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3270</id>
      <parentid>3266</parentid>
      <timestamp>2014-09-24T17:33:03Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>/* Versions */</comment>
      <text xml:space="preserve" bytes="8434">== Versions ==
&lt;tt&gt;
{| class=&quot;wikitable&quot;
! Version !! Timestamp !! Size !! md5
|-
| Registered Version 1.01 || 1996-07-12 ||style=text-align:right|  34257856 || d76b3e5678f0b64ac74ce5e340e6a685
|-
|}&lt;/tt&gt;

=== d76b3e5678f0b64ac74ce5e340e6a685 ===
The [[id1]] ''pak1.pak'' with the md5sum d76b3e5678f0b64ac74ce5e340e6a685 contains the following folders &amp; files:

&lt;tt&gt;
{| class=&quot;wikitable collapsible collapsed&quot;
|-
! Path !! Size !! md5
|-
| end2.bin  ||style=text-align:right|  4000 || ebdbff3328c31e4543346ebd4027679a
|-
| gfx/pop.lmp  ||style=text-align:right|  256 || 0b83efc0411e7b5dcb937a1e42ad37e3
|-
| maps/b_exbox2.bsp  ||style=text-align:right|  4676 || 03331da4f39fd82228dcf19a36979540
|-
| maps/dm1.bsp  ||style=text-align:right|  547708 || 993442fbab636cef660f356d968beb8d
|-
| maps/dm2.bsp  ||style=text-align:right|  907384 || b8119c6a30ec2789bb5d57eebe85e153
|-
| maps/dm3.bsp  ||style=text-align:right|  950200 || e48f522b498c5b43583303527e7df1fe
|-
| maps/dm4.bsp  ||style=text-align:right|  354708 || 7e01a4b508c500b84a93c1b18ca3f0ad
|-
| maps/dm5.bsp  ||style=text-align:right|  476836 || 02281d8066c0b92eb43f72ea621865bf
|-
| maps/dm6.bsp  ||style=text-align:right|  455852 || 9ac076b32bc48a1acda979adffc9900b
|-
| maps/e2m1.bsp  ||style=text-align:right|  1400104 || 86ae0e073090f783df0ca8b61f8d7f99
|-
| maps/e2m2.bsp  ||style=text-align:right|  1304244 || 83b4cd6b7f89566406d9a5df7c4baff9
|-
| maps/e2m3.bsp  ||style=text-align:right|  1332084 || 6b179e8cb4b844fbeba242893781dbb6
|-
| maps/e2m4.bsp  ||style=text-align:right|  1298856 || 093b457469e44189763098d8ac8da013
|-
| maps/e2m5.bsp  ||style=text-align:right|  1368444 || 22b160cc5eb2723fe76435afaa1a09a4
|-
| maps/e2m6.bsp  ||style=text-align:right|  1227392 || ee0bc686318a9b0e4fc0986f799fa557
|-
| maps/e2m7.bsp  ||style=text-align:right|  1384072 || b7c28e9fcd6bce0ce192bd90e34cefd6
|-
| maps/e3m1.bsp  ||style=text-align:right|  1353580 || 5a00deadf328c816be471205b74dba96
|-
| maps/e3m2.bsp  ||style=text-align:right|  1039524 || 752c0e7af81399e277110dde5a6339b4
|-
| maps/e3m3.bsp  ||style=text-align:right|  964644 || 966465455cb5bd432f44f80a2667fa69
|-
| maps/e3m4.bsp  ||style=text-align:right|  1373132 || 2d9d2edc23567c255db3ebd8053e08d7
|-
| maps/e3m5.bsp  ||style=text-align:right|  1434492 || 7072ffed3364b58adebbba4d042c6203
|-
| maps/e3m6.bsp  ||style=text-align:right|  1387832 || 741c1c543bcabc2337f7a74cea43326d
|-
| maps/e3m7.bsp  ||style=text-align:right|  1072644 || e62434610a386364c84445fc98b845f3
|-
| maps/e4m1.bsp  ||style=text-align:right|  1362668 || 36a82cf221470ab52a4bc3cbc26ebf0d
|-
| maps/e4m2.bsp  ||style=text-align:right|  1125588 || f0a58cfcce7bac57865add0f7924cd49
|-
| maps/e4m3.bsp  ||style=text-align:right|  1327056 || 6ccefcb9f12806b5bc9f7023a6145360
|-
| maps/e4m4.bsp  ||style=text-align:right|  1314340 || e342652ec76385d4fe957cc76f5c55c0
|-
| maps/e4m5.bsp  ||style=text-align:right|  1304524 || 632c9d433e1075079d71e4cb0a20857b
|-
| maps/e4m6.bsp  ||style=text-align:right|  1199816 || 5db11591f00a42c9eca7783f65f66e15
|-
| maps/e4m7.bsp  ||style=text-align:right|  1495232 || 0025f16cc79b5b96694b6c22acc9f1e2
|-
| maps/e4m8.bsp  ||style=text-align:right|  1124944 || f0dbee2ac3d54619ab178c5e070d7432
|-
| maps/end.bsp  ||style=text-align:right|  467624 || 2db412b900798f05693f33a0f9cfc396
|-
| progs/b_g_key.mdl  ||style=text-align:right|  5716 || 86b0ea20a8db1a4cd4a266a4ecfdde2b
|-
| progs/b_s_key.mdl  ||style=text-align:right|  5716 || 9650f8cfdc9eb7ccccb24402553d9b1b
|-
| progs/end2.mdl  ||style=text-align:right|  40980 || 3a0d6d55c9680709554c255e4f3358b2
|-
| progs/end3.mdl  ||style=text-align:right|  19924 || 236671a88e064a6ed6e922a40a6b4e30
|-
| progs/end4.mdl  ||style=text-align:right|  26932 || 8181490eefafc27d43f7b73286f258a2
|-
| progs/enforcer.mdl  ||style=text-align:right|  160688 || 136c265f96d6077ee3312c52e134529f
|-
| progs/fish.mdl  ||style=text-align:right|  81900 || d770d6ef92ae8b372926e6c3d49e8716
|-
| progs/h_hellkn.mdl  ||style=text-align:right|  16628 || 4d71e0cd25b4bbfa8acdd35514f1f4e2
|-
| progs/hknight.mdl  ||style=text-align:right|  228400 || ed20e30be6fdb83efbaa6d0b23671a49
|-
| progs/h_mega.mdl  ||style=text-align:right|  11828 || c2cb3dcd4e6b696d39e681d40a8ba08f
|-
| progs/h_shal.mdl  ||style=text-align:right|  28036 || 71521f74271615e5a8b8ba664724709f
|-
| progs/k_spike.mdl  ||style=text-align:right|  16756 || da95b49a695b34c2c3516a8d789c6b20
|-
| progs/laser.mdl  ||style=text-align:right|  11348 || ab4a28a122f8c0c811021e2a74132ac5
|-
| progs/oldone.mdl  ||style=text-align:right|  103208 || 0f2eb7a5db9671a72e2b20df9de77205
|-
| progs/shalrath.mdl  ||style=text-align:right|  80648 || dac8f6077b0d2bf970573d2d2c22529f
|-
| progs/tarbaby.mdl  ||style=text-align:right|  98148 || 2bfc45593a43a0191982e3cfdc112dc5
|-
| progs/teleport.mdl  ||style=text-align:right|  13684 || 9bdf68f4a7148abad05b0f8a6c4f4956
|-
| progs/v_spike.mdl  ||style=text-align:right|  13684 || 2bdc0b264b9fd3443c8eee816305728f
|-
| sound/blob/death1.wav  ||style=text-align:right|  16368 || 53f8c73de11c018086ba19ed036833d3
|-
| sound/blob/hit1.wav  ||style=text-align:right|  10026 || 42c5a1edd02421bf6df7ddc3e395c4f8
|-
| sound/blob/land1.wav  ||style=text-align:right|  9232 || 5a1585ab22368a48827db9b7d3763b58
|-
| sound/blob/sight1.wav  ||style=text-align:right|  7182 || df4dd7ec91e094b5c2235be3f5353e4a
|-
| sound/boss2/death.wav  ||style=text-align:right|  253690 || 0859dcb4e3956df92f775f516b5c47a3
|-
| sound/boss2/idle.wav  ||style=text-align:right|  33306 || 2170427a3c3649c8e4f10b0562ee36c4
|-
| sound/boss2/pop2.wav  ||style=text-align:right|  53760 || e57ca53bdf60803a7563170dcebad70b
|-
| sound/boss2/sight.wav  ||style=text-align:right|  225484 || 9eb0eed494b879033c6145f8be74dc5d
|-
| sound/enforcer/death1.wav  ||style=text-align:right|  9290 || f38d7a235e13ef8918aac0c70437320d
|-
| sound/enforcer/enfire.wav  ||style=text-align:right|  7430 || b080a6a53f138bef9fc4403fb9373a24
|-
| sound/enforcer/enfstop.wav  ||style=text-align:right|  4360 || 0bc39c3c88187fb37d20ef21300e7b22
|-
| sound/enforcer/idle1.wav  ||style=text-align:right|  15810 || d0435763860fe54e938ad25bb1780f9e
|-
| sound/enforcer/pain1.wav  ||style=text-align:right|  5478 || d52bc02afe624924684b25295edaa040
|-
| sound/enforcer/pain2.wav  ||style=text-align:right|  4580 || f6b0ad6485d93f5c6d7d61b847d06877
|-
| sound/enforcer/sight1.wav  ||style=text-align:right|  5870 || 9e9876444ba92ed18bfce4cec3a2ff12
|-
| sound/enforcer/sight2.wav  ||style=text-align:right|  6574 || 815dd4f6a890b0a35dc466005df74850
|-
| sound/enforcer/sight3.wav  ||style=text-align:right|  6158 || f8c8d19905b24d4adb6760a1b3762f3b
|-
| sound/enforcer/sight4.wav  ||style=text-align:right|  5166 || 04e40eb925290bc56520de326df6b220
|-
| sound/fish/bite.wav  ||style=text-align:right|  6416 || 7c56712615e2a2c3de4fe0e7e35cba05
|-
| sound/fish/death.wav  ||style=text-align:right|  40708 || 8d6152ee55507430a8c2eb276c4aa8ac
|-
| sound/fish/idle.wav  ||style=text-align:right|  51264 || 54a02731b85eb6f8b1a8ecce09771d20
|-
| sound/hknight/attack1.wav  ||style=text-align:right|  9808 || 695e9d890a085addf1a607aa79137e8e
|-
| sound/hknight/death1.wav  ||style=text-align:right|  8302 || 2d68c3c86632027676b823fcff3af08c
|-
| sound/hknight/grunt.wav  ||style=text-align:right|  4876 || 122f3d4623e0146732aa0e4deb0fe326
|-
| sound/hknight/idle.wav  ||style=text-align:right|  5056 || e9ca23c4853472750d1f56e52a3d227b
|-
| sound/hknight/pain1.wav  ||style=text-align:right|  7434 || 52c20eb6f5b5146ece6b0ac02f423341
|-
| sound/hknight/sight1.wav  ||style=text-align:right|  12714 || 786d28ec653a0d512d078b32eb8cb58b
|-
| sound/hknight/slash1.wav  ||style=text-align:right|  2342 || 83e64bb90cff2a4f9764dd53489b9d7d
|-
| sound/misc/basekey.wav  ||style=text-align:right|  5980 || ff6cc6465426e0555f6f7c138f189370
|-
| sound/shalrath/attack2.wav  ||style=text-align:right|  10908 || 777fbda2f81350e45920ea1c36d318e1
|-
| sound/shalrath/attack.wav  ||style=text-align:right|  16674 || 8814a72b399be619d14223235f78f294
|-
| sound/shalrath/death.wav  ||style=text-align:right|  9436 || 771844c5cfb5a42e82e221a63f101ac7
|-
| sound/shalrath/idle.wav  ||style=text-align:right|  16302 || 1a45f12579f9cdd27152332d5f816048
|-
| sound/shalrath/pain.wav  ||style=text-align:right|  9230 || 6ba007b79c50d7d5347f1a29fb315422
|-
| sound/shalrath/sight.wav  ||style=text-align:right|  26510 || 3d3c2001cc976efc67af1552427eedd3
|-
|}
&lt;/tt&gt;</text>
      <sha1>5dd6y6p0wn8ral3s0o2mn0qwmstmejt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>palette.lmp</title>
    <ns>0</ns>
    <id>518</id>
    <redirect title="Quake palette" />
    <revision>
      <id>1171</id>
      <timestamp>2009-09-23T22:39:38Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <comment>Redirecting to [[Quake palette#palette.lmp]]</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[Quake palette#palette.lmp]]</text>
      <sha1>8mkxvej3w3onllb06j7djjpi9jdxokx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2684</id>
      <parentid>1171</parentid>
      <timestamp>2013-03-30T11:05:32Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Spirit moved page [[Palette.lmp]] to [[palette.lmp]]: lowercase</comment>
      <text xml:space="preserve" bytes="39">#REDIRECT [[Quake palette#palette.lmp]]</text>
      <sha1>8mkxvej3w3onllb06j7djjpi9jdxokx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>path corner</title>
    <ns>0</ns>
    <id>1040</id>
    <revision>
      <id>2982</id>
      <timestamp>2013-06-12T05:02:46Z</timestamp>
      <contributor>
        <username>Deqer</username>
        <id>42</id>
      </contributor>
      <comment>path_corner information</comment>
      <text xml:space="preserve" bytes="1571">== Description ==
Use for setting up a patrolling path for monsters, or a train(travel) path from a func_train entity.

== Example ==
Patrolling a monster (2-way example):

# Create a path_corner entity:
## Add a key for &quot;targetname&quot; with a value of &quot;pat1_1&quot;
## Add a key for &quot;target&quot; with a value of &quot;pat1_2&quot;
## (optional) Place your path_corner entity in the same spot as your monster entity.
# Create your second path_corner entity.
## Add a key for &quot;targetname&quot; with a value of &quot;pat1_2&quot;
## Add a key for &quot;target&quot; with a value of &quot;pat1_1&quot;
# Edit your monster entity:
## Add a key for &quot;target&quot; with a value of &quot;pat1_1&quot;

Your monster will now patrol between the two path_corners, indefinitely.

== Additional details ==
If the last path_corner doesn't point to any other path_corner, then the monster will begin roaming freely around the map, and actually pursuing the player down pathways, across stairs and bridges, until it finds the player.  NOTE: The monster won't use teleporters, buttons, or lifts, however. 

Use the path_corner entities in the same manner with func_trains to make them go in any direction you want (even vertical). 

== Tips ==
For both monster patrols and train paths, be sure your path_corners can be connected to one another with a straight line, so your trains won't try to go through solid walls, and your monsters won't get confused trying to find the next waypoint. 

Path_corners can also be used in place of info_null entities as target points for lights to make spotlights. To see a map sample of path_corners in use, look at e1m2.map</text>
      <sha1>65w4kr70vs0pou7s95y6jqmuf0w9agu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2983</id>
      <parentid>2982</parentid>
      <timestamp>2013-06-12T07:58:16Z</timestamp>
      <contributor>
        <ip>77.98.165.95</ip>
      </contributor>
      <comment>/* Additional details */</comment>
      <text xml:space="preserve" bytes="1720">== Description ==
Use for setting up a patrolling path for monsters, or a train(travel) path from a func_train entity.

== Example ==
Patrolling a monster (2-way example):

# Create a path_corner entity:
## Add a key for &quot;targetname&quot; with a value of &quot;pat1_1&quot;
## Add a key for &quot;target&quot; with a value of &quot;pat1_2&quot;
## (optional) Place your path_corner entity in the same spot as your monster entity.
# Create your second path_corner entity.
## Add a key for &quot;targetname&quot; with a value of &quot;pat1_2&quot;
## Add a key for &quot;target&quot; with a value of &quot;pat1_1&quot;
# Edit your monster entity:
## Add a key for &quot;target&quot; with a value of &quot;pat1_1&quot;

Your monster will now patrol between the two path_corners, indefinitely.

== Additional details ==
If the last path_corner doesn't point to any other path_corner, then the monster will begin roaming freely around the map, and actually pursuing the player down pathways, across stairs and bridges, until it finds the player.  NOTE: The monster won't use teleporters, buttons, or lifts, however. If you would prefer the monster to stop moving at the last waypoint, give the path_corner a target key which does not match any targetname in the map.

Use the path_corner entities in the same manner with func_trains to make them go in any direction you want (even vertical).

== Tips ==
For both monster patrols and train paths, be sure your path_corners can be connected to one another with a straight line, so your trains won't try to go through solid walls, and your monsters won't get confused trying to find the next waypoint. 

Path_corners can also be used in place of info_null entities as target points for lights to make spotlights. To see a map sample of path_corners in use, look at e1m2.map</text>
      <sha1>bbu0dy18ey1h357rxwh6ilgcc7kuxr0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>plats.qc</title>
    <ns>0</ns>
    <id>854</id>
    <revision>
      <id>2475</id>
      <timestamp>2013-03-29T11:14:57Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for moving [[func_train | platforms]] and [[func_plat | elevators]].   &lt;pre&gt; void() plat_center_touch; void() plat_outside_touch; void(...&quot;</comment>
      <text xml:space="preserve" bytes="7827">This [[Quake-C]] file contains the code for moving [[func_train | platforms]] and [[func_plat | elevators]].


&lt;pre&gt;
void() plat_center_touch;
void() plat_outside_touch;
void() plat_trigger_use;
void() plat_go_up;
void() plat_go_down;
void() plat_crush;
float PLAT_LOW_TRIGGER = 1;

void() plat_spawn_inside_trigger =
{
	local entity	trigger;
	local vector	tmin, tmax;

//
// middle trigger
//	
	trigger = spawn();
	trigger.touch = plat_center_touch;
	trigger.movetype = MOVETYPE_NONE;
	trigger.solid = SOLID_TRIGGER;
	trigger.enemy = self;
	
	tmin = self.mins + '25 25 0';
	tmax = self.maxs - '25 25 -8';
	tmin_z = tmax_z - (self.pos1_z - self.pos2_z + 8);
	if (self.spawnflags &amp; PLAT_LOW_TRIGGER)
		tmax_z = tmin_z + 8;
	
	if (self.size_x &lt;= 50)
	{
		tmin_x = (self.mins_x + self.maxs_x) / 2;
		tmax_x = tmin_x + 1;
	}
	if (self.size_y &lt;= 50)
	{
		tmin_y = (self.mins_y + self.maxs_y) / 2;
		tmax_y = tmin_y + 1;
	}
	
	setsize (trigger, tmin, tmax);
};

void() plat_hit_top =
{
	sound (self, CHAN_VOICE, self.noise1, 1, ATTN_NORM);
	self.state = STATE_TOP;
	self.think = plat_go_down;
	self.nextthink = self.ltime + 3;
};

void() plat_hit_bottom =
{
	sound (self, CHAN_VOICE, self.noise1, 1, ATTN_NORM);
	self.state = STATE_BOTTOM;
};

void() plat_go_down =
{
	sound (self, CHAN_VOICE, self.noise, 1, ATTN_NORM);
	self.state = STATE_DOWN;
	SUB_CalcMove (self.pos2, self.speed, plat_hit_bottom);
};

void() plat_go_up =
{
	sound (self, CHAN_VOICE, self.noise, 1, ATTN_NORM);
	self.state = STATE_UP;
	SUB_CalcMove (self.pos1, self.speed, plat_hit_top);
};

void() plat_center_touch =
{
	if (other.classname != &quot;player&quot;)
		return;
		
	if (other.health &lt;= 0)
		return;

	self = self.enemy;
	if (self.state == STATE_BOTTOM)
		plat_go_up ();
	else if (self.state == STATE_TOP)
		self.nextthink = self.ltime + 1;	// delay going down
};

void() plat_outside_touch =
{
	if (other.classname != &quot;player&quot;)
		return;

	if (other.health &lt;= 0)
		return;
		
//dprint (&quot;plat_outside_touch\n&quot;);
	self = self.enemy;
	if (self.state == STATE_TOP)
		plat_go_down ();
};

void() plat_trigger_use =
{
	if (self.think)
		return;		// allready activated
	plat_go_down();
};


void() plat_crush =
{
//dprint (&quot;plat_crush\n&quot;);

	T_Damage (other, self, self, 1);
	
	if (self.state == STATE_UP)
		plat_go_down ();
	else if (self.state == STATE_DOWN)
		plat_go_up ();
	else
		objerror (&quot;plat_crush: bad self.state\n&quot;);
};

void() plat_use =
{
	self.use = SUB_Null;
	if (self.state != STATE_UP)
		objerror (&quot;plat_use: not in up state&quot;);
	plat_go_down();
};


/*QUAKED func_plat (0 .5 .8) ? PLAT_LOW_TRIGGER
speed	default 150

Plats are always drawn in the extended position, so they will light correctly.

If the plat is the target of another trigger or button, it will start out disabled in the extended position until it is trigger, when it will lower and become a normal plat.

If the &quot;height&quot; key is set, that will determine the amount the plat moves, instead of being implicitly determined by the model's height.
Set &quot;sounds&quot; to one of the following:
1) base fast
2) chain slow
*/


void() func_plat =

{
local entity t;

	if (!self.t_length)
		self.t_length = 80;
	if (!self.t_width)
		self.t_width = 10;

	if (self.sounds == 0)
		self.sounds = 2;
// FIX THIS TO LOAD A GENERIC PLAT SOUND

	if (self.sounds == 1)
	{
		precache_sound (&quot;plats/plat1.wav&quot;);
		precache_sound (&quot;plats/plat2.wav&quot;);
		self.noise = &quot;plats/plat1.wav&quot;;
		self.noise1 = &quot;plats/plat2.wav&quot;;
	}

	if (self.sounds == 2)
	{
		precache_sound (&quot;plats/medplat1.wav&quot;);
		precache_sound (&quot;plats/medplat2.wav&quot;);
		self.noise = &quot;plats/medplat1.wav&quot;;
		self.noise1 = &quot;plats/medplat2.wav&quot;;
	}


	self.mangle = self.angles;
	self.angles = '0 0 0';

	self.classname = &quot;plat&quot;;
	self.solid = SOLID_BSP;
	self.movetype = MOVETYPE_PUSH;
	setorigin (self, self.origin);	
	setmodel (self, self.model);
	setsize (self, self.mins , self.maxs);

	self.blocked = plat_crush;
	if (!self.speed)
		self.speed = 150;

// pos1 is the top position, pos2 is the bottom
	self.pos1 = self.origin;
	self.pos2 = self.origin;
	if (self.height)
		self.pos2_z = self.origin_z - self.height;
	else
		self.pos2_z = self.origin_z - self.size_z + 8;

	self.use = plat_trigger_use;

	plat_spawn_inside_trigger ();	// the &quot;start moving&quot; trigger	

	if (self.targetname)
	{
		self.state = STATE_UP;
		self.use = plat_use;
	}
	else
	{
		setorigin (self, self.pos2);
		self.state = STATE_BOTTOM;
	}
};

//============================================================================

void() train_next;
void() func_train_find;

void() train_blocked =
{
	if (time &lt; self.attack_finished)
		return;
	self.attack_finished = time + 0.5;
	T_Damage (other, self, self, self.dmg);
};
void() train_use =
{
	if (self.think != func_train_find)
		return;		// already activated
	train_next();
};

void() train_wait =
{
	if (self.wait)
	{
		self.nextthink = self.ltime + self.wait;
		sound (self, CHAN_VOICE, self.noise, 1, ATTN_NORM);
	}
	else
		self.nextthink = self.ltime + 0.1;
	
	self.think = train_next;
};

void() train_next =
{
	local entity	targ;

	targ = find (world, targetname, self.target);
	self.target = targ.target;
	if (!self.target)
		objerror (&quot;train_next: no next target&quot;);
	if (targ.wait)
		self.wait = targ.wait;
	else
		self.wait = 0;
	sound (self, CHAN_VOICE, self.noise1, 1, ATTN_NORM);
	SUB_CalcMove (targ.origin - self.mins, self.speed, train_wait);
};

void() func_train_find =

{
	local entity	targ;

	targ = find (world, targetname, self.target);
	self.target = targ.target;
	setorigin (self, targ.origin - self.mins);
	if (!self.targetname)
	{	// not triggered, so start immediately
		self.nextthink = self.ltime + 0.1;
		self.think = train_next;
	}
};

/*QUAKED func_train (0 .5 .8) ?
Trains are moving platforms that players can ride.
The targets origin specifies the min point of the train at each corner.
The train spawns at the first target it is pointing at.
If the train is the target of a button or trigger, it will not begin moving until activated.
speed	default 100
dmg		default	2
sounds
1) ratchet metal

*/
void() func_train =
{	
	if (!self.speed)
		self.speed = 100;
	if (!self.target)
		objerror (&quot;func_train without a target&quot;);
	if (!self.dmg)
		self.dmg = 2;

	if (self.sounds == 0)
	{
		self.noise = (&quot;misc/null.wav&quot;);
		precache_sound (&quot;misc/null.wav&quot;);
		self.noise1 = (&quot;misc/null.wav&quot;);
		precache_sound (&quot;misc/null.wav&quot;);
	}

	if (self.sounds == 1)
	{
		self.noise = (&quot;plats/train2.wav&quot;);
		precache_sound (&quot;plats/train2.wav&quot;);
		self.noise1 = (&quot;plats/train1.wav&quot;);
		precache_sound (&quot;plats/train1.wav&quot;);
	}

	self.cnt = 1;
	self.solid = SOLID_BSP;
	self.movetype = MOVETYPE_PUSH;
	self.blocked = train_blocked;
	self.use = train_use;
	self.classname = &quot;train&quot;;

	setmodel (self, self.model);
	setsize (self, self.mins , self.maxs);
	setorigin (self, self.origin);

// start trains on the second frame, to make sure their targets have had
// a chance to spawn
	self.nextthink = self.ltime + 0.1;
	self.think = func_train_find;
};

/*QUAKED misc_teleporttrain (0 .5 .8) (-8 -8 -8) (8 8 8)
This is used for the final bos
*/
void() misc_teleporttrain =
{	
	if (!self.speed)
		self.speed = 100;
	if (!self.target)
		objerror (&quot;func_train without a target&quot;);

	self.cnt = 1;
	self.solid = SOLID_NOT;
	self.movetype = MOVETYPE_PUSH;
	self.blocked = train_blocked;
	self.use = train_use;
	self.avelocity = '100 200 300';

	self.noise = (&quot;misc/null.wav&quot;);
	precache_sound (&quot;misc/null.wav&quot;);
	self.noise1 = (&quot;misc/null.wav&quot;);
	precache_sound (&quot;misc/null.wav&quot;);

	precache_model2 (&quot;progs/teleport.mdl&quot;);
	setmodel (self, &quot;progs/teleport.mdl&quot;);
	setsize (self, self.mins , self.maxs);
	setorigin (self, self.origin);

// start trains on the second frame, to make sure their targets have had
// a chance to spawn
	self.nextthink = self.ltime + 0.1;
	self.think = func_train_find;
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>a22gmwz95x3sosze5o8hpwgmwltop71</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>player.qc</title>
    <ns>0</ns>
    <id>855</id>
    <revision>
      <id>2476</id>
      <timestamp>2013-03-29T11:17:24Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for basic [[Player | player-related]] appearance and behavior.   &lt;pre&gt; void() bubble_bob;  /* =========================================...&quot;</comment>
      <text xml:space="preserve" bytes="17684">This [[Quake-C]] file contains the code for basic [[Player | player-related]] appearance and behavior.


&lt;pre&gt;
void() bubble_bob;

/*
==============================================================================

PLAYER

==============================================================================
*/

$cd id1/models/player_4
$origin 0 -6 24
$base base		
$skin skin

//
// running
//
$frame axrun1 axrun2 axrun3 axrun4 axrun5 axrun6

$frame rockrun1 rockrun2 rockrun3 rockrun4 rockrun5 rockrun6

//
// standing
//
$frame stand1 stand2 stand3 stand4 stand5

$frame axstnd1 axstnd2 axstnd3 axstnd4 axstnd5 axstnd6
$frame axstnd7 axstnd8 axstnd9 axstnd10 axstnd11 axstnd12


//
// pain
//
$frame axpain1 axpain2 axpain3 axpain4 axpain5 axpain6

$frame pain1 pain2 pain3 pain4 pain5 pain6


//
// death
//

$frame axdeth1 axdeth2 axdeth3 axdeth4 axdeth5 axdeth6
$frame axdeth7 axdeth8 axdeth9

$frame deatha1 deatha2 deatha3 deatha4 deatha5 deatha6 deatha7 deatha8
$frame deatha9 deatha10 deatha11

$frame deathb1 deathb2 deathb3 deathb4 deathb5 deathb6 deathb7 deathb8
$frame deathb9

$frame deathc1 deathc2 deathc3 deathc4 deathc5 deathc6 deathc7 deathc8
$frame deathc9 deathc10 deathc11 deathc12 deathc13 deathc14 deathc15

$frame deathd1 deathd2 deathd3 deathd4 deathd5 deathd6 deathd7
$frame deathd8 deathd9

$frame deathe1 deathe2 deathe3 deathe4 deathe5 deathe6 deathe7
$frame deathe8 deathe9

//
// attacks
//
$frame nailatt1 nailatt2

$frame light1 light2

$frame rockatt1 rockatt2 rockatt3 rockatt4 rockatt5 rockatt6

$frame shotatt1 shotatt2 shotatt3 shotatt4 shotatt5 shotatt6

$frame axatt1 axatt2 axatt3 axatt4 axatt5 axatt6

$frame axattb1 axattb2 axattb3 axattb4 axattb5 axattb6

$frame axattc1 axattc2 axattc3 axattc4 axattc5 axattc6

$frame axattd1 axattd2 axattd3 axattd4 axattd5 axattd6


/*
==============================================================================
PLAYER
==============================================================================
*/

void() player_run;

void()	player_stand1 =[	$axstnd1,	player_stand1	]
{
	self.weaponframe=0;
	if (self.velocity_x || self.velocity_y)
	{
		self.walkframe=0;
		player_run();
		return;
	}

	if (self.weapon == IT_AXE)
	{
		if (self.walkframe &gt;= 12)
			self.walkframe = 0;
		self.frame = $axstnd1 + self.walkframe;
	}
	else
	{
		if (self.walkframe &gt;= 5)
			self.walkframe = 0;
		self.frame = $stand1 + self.walkframe;
	}
	self.walkframe = self.walkframe + 1;	
};

void()	player_run =[	$rockrun1,	player_run	]
{
	self.weaponframe=0;
	if (!self.velocity_x &amp;&amp; !self.velocity_y)
	{
		self.walkframe=0;
		player_stand1();
		return;
	}

	if (self.weapon == IT_AXE)
	{
		if (self.walkframe == 6)
			self.walkframe = 0;
		self.frame = $axrun1 + self.walkframe;
	}
	else
	{
		if (self.walkframe == 6)
			self.walkframe = 0;
		self.frame = self.frame + self.walkframe;
	}
	self.walkframe = self.walkframe + 1;
};


void()	player_shot1 =	[$shotatt1, player_shot2	] {self.weaponframe=1;
self.effects = self.effects | EF_MUZZLEFLASH;};
void()	player_shot2 =	[$shotatt2, player_shot3	] {self.weaponframe=2;};
void()	player_shot3 =	[$shotatt3, player_shot4	] {self.weaponframe=3;};
void()	player_shot4 =	[$shotatt4, player_shot5	] {self.weaponframe=4;};
void()	player_shot5 =	[$shotatt5, player_shot6	] {self.weaponframe=5;};
void()	player_shot6 =	[$shotatt6, player_run	] {self.weaponframe=6;};

void()	player_axe1 =	[$axatt1, player_axe2	] {self.weaponframe=1;};
void()	player_axe2 =	[$axatt2, player_axe3	] {self.weaponframe=2;};
void()	player_axe3 =	[$axatt3, player_axe4	] {self.weaponframe=3;W_FireAxe();};
void()	player_axe4 =	[$axatt4, player_run	] {self.weaponframe=4;};

void()	player_axeb1 =	[$axattb1, player_axeb2	] {self.weaponframe=5;};
void()	player_axeb2 =	[$axattb2, player_axeb3	] {self.weaponframe=6;};
void()	player_axeb3 =	[$axattb3, player_axeb4	] {self.weaponframe=7;W_FireAxe();};
void()	player_axeb4 =	[$axattb4, player_run	] {self.weaponframe=8;};

void()	player_axec1 =	[$axattc1, player_axec2	] {self.weaponframe=1;};
void()	player_axec2 =	[$axattc2, player_axec3	] {self.weaponframe=2;};
void()	player_axec3 =	[$axattc3, player_axec4	] {self.weaponframe=3;W_FireAxe();};
void()	player_axec4 =	[$axattc4, player_run	] {self.weaponframe=4;};

void()	player_axed1 =	[$axattd1, player_axed2	] {self.weaponframe=5;};
void()	player_axed2 =	[$axattd2, player_axed3	] {self.weaponframe=6;};
void()	player_axed3 =	[$axattd3, player_axed4	] {self.weaponframe=7;W_FireAxe();};
void()	player_axed4 =	[$axattd4, player_run	] {self.weaponframe=8;};


//============================================================================

void() player_nail1   =[$nailatt1, player_nail2  ] 
{
	self.effects = self.effects | EF_MUZZLEFLASH;

	if (!self.button0)
		{player_run ();return;}
	self.weaponframe = self.weaponframe + 1;
	if (self.weaponframe == 9)
		self.weaponframe = 1;
	SuperDamageSound();
	W_FireSpikes (4);
	self.attack_finished = time + 0.2;
};
void() player_nail2   =[$nailatt2, player_nail1  ]
{
	self.effects = self.effects | EF_MUZZLEFLASH;

	if (!self.button0)
		{player_run ();return;}
	self.weaponframe = self.weaponframe + 1;
	if (self.weaponframe == 9)
		self.weaponframe = 1;
	SuperDamageSound();
	W_FireSpikes (-4);
	self.attack_finished = time + 0.2;
};

//============================================================================

void() player_light1   =[$light1, player_light2  ] 
{
	self.effects = self.effects | EF_MUZZLEFLASH;

	if (!self.button0)
		{player_run ();return;}
	self.weaponframe = self.weaponframe + 1;
	if (self.weaponframe == 5)
		self.weaponframe = 1;
	SuperDamageSound();
	W_FireLightning();
	self.attack_finished = time + 0.2;
};
void() player_light2   =[$light2, player_light1  ]
{
	self.effects = self.effects | EF_MUZZLEFLASH;

	if (!self.button0)
		{player_run ();return;}
	self.weaponframe = self.weaponframe + 1;
	if (self.weaponframe == 5)
		self.weaponframe = 1;
	SuperDamageSound();
	W_FireLightning();
	self.attack_finished = time + 0.2;
};

//============================================================================


void() player_rocket1   =[$rockatt1, player_rocket2  ] {self.weaponframe=1;
self.effects = self.effects | EF_MUZZLEFLASH;};
void() player_rocket2   =[$rockatt2, player_rocket3  ] {self.weaponframe=2;};
void() player_rocket3   =[$rockatt3, player_rocket4  ] {self.weaponframe=3;};
void() player_rocket4   =[$rockatt4, player_rocket5  ] {self.weaponframe=4;};
void() player_rocket5   =[$rockatt5, player_rocket6  ] {self.weaponframe=5;};
void() player_rocket6   =[$rockatt6, player_run  ] {self.weaponframe=6;};
void(float num_bubbles) DeathBubbles;

void() PainSound =
{
local float		rs;

	if (self.health &lt; 0)
		return;

	if (damage_attacker.classname == &quot;teledeath&quot;)
	{
		sound (self, CHAN_VOICE, &quot;player/teledth1.wav&quot;, 1, ATTN_NONE);
		return;
	}

// water pain sounds
	if (self.watertype == CONTENT_WATER &amp;&amp; self.waterlevel == 3)
	{
		DeathBubbles(1);
		if (random() &gt; 0.5)
			sound (self, CHAN_VOICE, &quot;player/drown1.wav&quot;, 1, ATTN_NORM);
		else
			sound (self, CHAN_VOICE, &quot;player/drown2.wav&quot;, 1, ATTN_NORM);
		return;
	}

// slime pain sounds
	if (self.watertype == CONTENT_SLIME)
	{
// FIX ME	put in some steam here
		if (random() &gt; 0.5)
			sound (self, CHAN_VOICE, &quot;player/lburn1.wav&quot;, 1, ATTN_NORM);
		else
			sound (self, CHAN_VOICE, &quot;player/lburn2.wav&quot;, 1, ATTN_NORM);
		return;
	}

	if (self.watertype == CONTENT_LAVA)
	{
		if (random() &gt; 0.5)
			sound (self, CHAN_VOICE, &quot;player/lburn1.wav&quot;, 1, ATTN_NORM);
		else
			sound (self, CHAN_VOICE, &quot;player/lburn2.wav&quot;, 1, ATTN_NORM);
		return;
	}

	if (self.pain_finished &gt; time)
	{
		self.axhitme = 0;
		return;
	}
	self.pain_finished = time + 0.5;

// don't make multiple pain sounds right after each other

// ax pain sound
	if (self.axhitme == 1)
	{
		self.axhitme = 0;
		sound (self, CHAN_VOICE, &quot;player/axhit1.wav&quot;, 1, ATTN_NORM);
		return;
	}
	

	rs = rint((random() * 5) + 1);

	self.noise = &quot;&quot;;
	if (rs == 1)
		self.noise = &quot;player/pain1.wav&quot;;
	else if (rs == 2)
		self.noise = &quot;player/pain2.wav&quot;;
	else if (rs == 3)
		self.noise = &quot;player/pain3.wav&quot;;
	else if (rs == 4)
		self.noise = &quot;player/pain4.wav&quot;;
	else if (rs == 5)
		self.noise = &quot;player/pain5.wav&quot;;
	else
		self.noise = &quot;player/pain6.wav&quot;;

	sound (self, CHAN_VOICE, self.noise, 1, ATTN_NORM);
	return;
};

void()	player_pain1 =	[	$pain1,	player_pain2	] {PainSound();self.weaponframe=0;};
void()	player_pain2 =	[	$pain2,	player_pain3	] {};
void()	player_pain3 =	[	$pain3,	player_pain4	] {};
void()	player_pain4 =	[	$pain4,	player_pain5	] {};
void()	player_pain5 =	[	$pain5,	player_pain6	] {};
void()	player_pain6 =	[	$pain6,	player_run	] {};

void()	player_axpain1 =	[	$axpain1,	player_axpain2	] {PainSound();self.weaponframe=0;};
void()	player_axpain2 =	[	$axpain2,	player_axpain3	] {};
void()	player_axpain3 =	[	$axpain3,	player_axpain4	] {};
void()	player_axpain4 =	[	$axpain4,	player_axpain5	] {};
void()	player_axpain5 =	[	$axpain5,	player_axpain6	] {};
void()	player_axpain6 =	[	$axpain6,	player_run	] {};

void() player_pain =
{
	if (self.weaponframe)
		return;

	if (self.invisible_finished &gt; time)
		return;		// eyes don't have pain frames

	if (self.weapon == IT_AXE)
		player_axpain1 ();
	else
		player_pain1 ();
};

void() player_diea1;
void() player_dieb1;
void() player_diec1;
void() player_died1;
void() player_diee1;
void() player_die_ax1;

void() DeathBubblesSpawn =
{
local entity	bubble;
	if (self.owner.waterlevel != 3)
		return;
	bubble = spawn();
	setmodel (bubble, &quot;progs/s_bubble.spr&quot;);
	setorigin (bubble, self.owner.origin + '0 0 24');
	bubble.movetype = MOVETYPE_NOCLIP;
	bubble.solid = SOLID_NOT;
	bubble.velocity = '0 0 15';
	bubble.nextthink = time + 0.5;
	bubble.think = bubble_bob;
	bubble.classname = &quot;bubble&quot;;
	bubble.frame = 0;
	bubble.cnt = 0;
	setsize (bubble, '-8 -8 -8', '8 8 8');
	self.nextthink = time + 0.1;
	self.think = DeathBubblesSpawn;
	self.air_finished = self.air_finished + 1;
	if (self.air_finished &gt;= self.bubble_count)
		remove(self);
};

void(float num_bubbles) DeathBubbles =
{
local entity	bubble_spawner;
	
	bubble_spawner = spawn();
	setorigin (bubble_spawner, self.origin);
	bubble_spawner.movetype = MOVETYPE_NONE;
	bubble_spawner.solid = SOLID_NOT;
	bubble_spawner.nextthink = time + 0.1;
	bubble_spawner.think = DeathBubblesSpawn;
	bubble_spawner.air_finished = 0;
	bubble_spawner.owner = self;
	bubble_spawner.bubble_count = num_bubbles;
	return;
};


void() DeathSound =
{
local float		rs;

	// water death sounds
	if (self.waterlevel == 3)
	{
		DeathBubbles(20);
		sound (self, CHAN_VOICE, &quot;player/h2odeath.wav&quot;, 1, ATTN_NONE);
		return;
	}
	
	rs = rint ((random() * 4) + 1);
	if (rs == 1)
		self.noise = &quot;player/death1.wav&quot;;
	if (rs == 2)
		self.noise = &quot;player/death2.wav&quot;;
	if (rs == 3)
		self.noise = &quot;player/death3.wav&quot;;
	if (rs == 4)
		self.noise = &quot;player/death4.wav&quot;;
	if (rs == 5)
		self.noise = &quot;player/death5.wav&quot;;

	sound (self, CHAN_VOICE, self.noise, 1, ATTN_NONE);
	return;
};


void() PlayerDead =
{
	self.nextthink = -1;
// allow respawn after a certain time
	self.deadflag = DEAD_DEAD;
};

vector(float dm) VelocityForDamage =
{
	local vector v;

	v_x = 100 * crandom();
	v_y = 100 * crandom();
	v_z = 200 + 100 * random();

	if (dm &gt; -50)
	{
//		dprint (&quot;level 1\n&quot;);
		v = v * 0.7;
	}
	else if (dm &gt; -200)
	{
//		dprint (&quot;level 3\n&quot;);
		v = v * 2;
	}
	else
		v = v * 10;

	return v;
};

void(string gibname, float dm) ThrowGib =
{
	local	entity new;

	new = spawn();
	new.origin = self.origin;
	setmodel (new, gibname);
	setsize (new, '0 0 0', '0 0 0');
	new.velocity = VelocityForDamage (dm);
	new.movetype = MOVETYPE_BOUNCE;
	new.solid = SOLID_NOT;
	new.avelocity_x = random()*600;
	new.avelocity_y = random()*600;
	new.avelocity_z = random()*600;
	new.think = SUB_Remove;
	new.ltime = time;
	new.nextthink = time + 10 + random()*10;
	new.frame = 0;
	new.flags = 0;
};

void(string gibname, float dm) ThrowHead =
{
	setmodel (self, gibname);
	self.frame = 0;
	self.nextthink = -1;
	self.movetype = MOVETYPE_BOUNCE;
	self.takedamage = DAMAGE_NO;
	self.solid = SOLID_NOT;
	self.view_ofs = '0 0 8';
	setsize (self, '-16 -16 0', '16 16 56');
	self.velocity = VelocityForDamage (dm);
	self.origin_z = self.origin_z - 24;
	self.flags = self.flags - (self.flags &amp; FL_ONGROUND);
	self.avelocity = crandom() * '0 600 0';
};


void() GibPlayer =
{
	ThrowHead (&quot;progs/h_player.mdl&quot;, self.health);
	ThrowGib (&quot;progs/gib1.mdl&quot;, self.health);
	ThrowGib (&quot;progs/gib2.mdl&quot;, self.health);
	ThrowGib (&quot;progs/gib3.mdl&quot;, self.health);

	self.deadflag = DEAD_DEAD;

	if (damage_attacker.classname == &quot;teledeath&quot;)
	{
		sound (self, CHAN_VOICE, &quot;player/teledth1.wav&quot;, 1, ATTN_NONE);
		return;
	}

	if (damage_attacker.classname == &quot;teledeath2&quot;)
	{
		sound (self, CHAN_VOICE, &quot;player/teledth1.wav&quot;, 1, ATTN_NONE);
		return;
	}
		
	if (random() &lt; 0.5)
		sound (self, CHAN_VOICE, &quot;player/gib.wav&quot;, 1, ATTN_NONE);
	else
		sound (self, CHAN_VOICE, &quot;player/udeath.wav&quot;, 1, ATTN_NONE);
};

void() PlayerDie =
{
	local	float	i;
	
	self.items = self.items - (self.items &amp; IT_INVISIBILITY);
	self.invisible_finished = 0;	// don't die as eyes
	self.invincible_finished = 0;
	self.super_damage_finished = 0;
	self.radsuit_finished = 0;
	self.modelindex = modelindex_player;	// don't use eyes

	if (deathmatch || coop)
		DropBackpack();
	
	self.weaponmodel=&quot;&quot;;
	self.view_ofs = '0 0 -8';
	self.deadflag = DEAD_DYING;
	self.solid = SOLID_NOT;
	self.flags = self.flags - (self.flags &amp; FL_ONGROUND);
	self.movetype = MOVETYPE_TOSS;
	if (self.velocity_z &lt; 10)
		self.velocity_z = self.velocity_z + random()*300;

	if (self.health &lt; -40)
	{
		GibPlayer ();
		return;
	}

	DeathSound();
	
	self.angles_x = 0;
	self.angles_z = 0;
	
	if (self.weapon == IT_AXE)
	{
		player_die_ax1 ();
		return;
	}
	
	i = cvar(&quot;temp1&quot;);
	if (!i)
		i = 1 + floor(random()*6);
	
	if (i == 1)
		player_diea1();
	else if (i == 2)
		player_dieb1();
	else if (i == 3)
		player_diec1();
	else if (i == 4)
		player_died1();
	else
		player_diee1();

};

void() set_suicide_frame =
{	// used by klill command and diconnect command
	if (self.model != &quot;progs/player.mdl&quot;)
		return;	// allready gibbed
	self.frame = $deatha11;
	self.solid = SOLID_NOT;
	self.movetype = MOVETYPE_TOSS;
	self.deadflag = DEAD_DEAD;
	self.nextthink = -1;
};


void()	player_diea1	=	[	$deatha1,	player_diea2	] {};
void()	player_diea2	=	[	$deatha2,	player_diea3	] {};
void()	player_diea3	=	[	$deatha3,	player_diea4	] {};
void()	player_diea4	=	[	$deatha4,	player_diea5	] {};
void()	player_diea5	=	[	$deatha5,	player_diea6	] {};
void()	player_diea6	=	[	$deatha6,	player_diea7	] {};
void()	player_diea7	=	[	$deatha7,	player_diea8	] {};
void()	player_diea8	=	[	$deatha8,	player_diea9	] {};
void()	player_diea9	=	[	$deatha9,	player_diea10	] {};
void()	player_diea10	=	[	$deatha10,	player_diea11	] {};
void()	player_diea11	=	[	$deatha11,	player_diea11 ] {PlayerDead();};

void()	player_dieb1	=	[	$deathb1,	player_dieb2	] {};
void()	player_dieb2	=	[	$deathb2,	player_dieb3	] {};
void()	player_dieb3	=	[	$deathb3,	player_dieb4	] {};
void()	player_dieb4	=	[	$deathb4,	player_dieb5	] {};
void()	player_dieb5	=	[	$deathb5,	player_dieb6	] {};
void()	player_dieb6	=	[	$deathb6,	player_dieb7	] {};
void()	player_dieb7	=	[	$deathb7,	player_dieb8	] {};
void()	player_dieb8	=	[	$deathb8,	player_dieb9	] {};
void()	player_dieb9	=	[	$deathb9,	player_dieb9	] {PlayerDead();};

void()	player_diec1	=	[	$deathc1,	player_diec2	] {};
void()	player_diec2	=	[	$deathc2,	player_diec3	] {};
void()	player_diec3	=	[	$deathc3,	player_diec4	] {};
void()	player_diec4	=	[	$deathc4,	player_diec5	] {};
void()	player_diec5	=	[	$deathc5,	player_diec6	] {};
void()	player_diec6	=	[	$deathc6,	player_diec7	] {};
void()	player_diec7	=	[	$deathc7,	player_diec8	] {};
void()	player_diec8	=	[	$deathc8,	player_diec9	] {};
void()	player_diec9	=	[	$deathc9,	player_diec10	] {};
void()	player_diec10	=	[	$deathc10,	player_diec11	] {};
void()	player_diec11	=	[	$deathc11,	player_diec12	] {};
void()	player_diec12	=	[	$deathc12,	player_diec13	] {};
void()	player_diec13	=	[	$deathc13,	player_diec14	] {};
void()	player_diec14	=	[	$deathc14,	player_diec15	] {};
void()	player_diec15	=	[	$deathc15,	player_diec15 ] {PlayerDead();};

void()	player_died1	=	[	$deathd1,	player_died2	] {};
void()	player_died2	=	[	$deathd2,	player_died3	] {};
void()	player_died3	=	[	$deathd3,	player_died4	] {};
void()	player_died4	=	[	$deathd4,	player_died5	] {};
void()	player_died5	=	[	$deathd5,	player_died6	] {};
void()	player_died6	=	[	$deathd6,	player_died7	] {};
void()	player_died7	=	[	$deathd7,	player_died8	] {};
void()	player_died8	=	[	$deathd8,	player_died9	] {};
void()	player_died9	=	[	$deathd9,	player_died9	] {PlayerDead();};

void()	player_diee1	=	[	$deathe1,	player_diee2	] {};
void()	player_diee2	=	[	$deathe2,	player_diee3	] {};
void()	player_diee3	=	[	$deathe3,	player_diee4	] {};
void()	player_diee4	=	[	$deathe4,	player_diee5	] {};
void()	player_diee5	=	[	$deathe5,	player_diee6	] {};
void()	player_diee6	=	[	$deathe6,	player_diee7	] {};
void()	player_diee7	=	[	$deathe7,	player_diee8	] {};
void()	player_diee8	=	[	$deathe8,	player_diee9	] {};
void()	player_diee9	=	[	$deathe9,	player_diee9	] {PlayerDead();};

void()	player_die_ax1	=	[	$axdeth1,	player_die_ax2	] {};
void()	player_die_ax2	=	[	$axdeth2,	player_die_ax3	] {};
void()	player_die_ax3	=	[	$axdeth3,	player_die_ax4	] {};
void()	player_die_ax4	=	[	$axdeth4,	player_die_ax5	] {};
void()	player_die_ax5	=	[	$axdeth5,	player_die_ax6	] {};
void()	player_die_ax6	=	[	$axdeth6,	player_die_ax7	] {};
void()	player_die_ax7	=	[	$axdeth7,	player_die_ax8	] {};
void()	player_die_ax8	=	[	$axdeth8,	player_die_ax9	] {};
void()	player_die_ax9	=	[	$axdeth9,	player_die_ax9	] {PlayerDead();};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>fd8auoxv49lkdcxdw6fve9mmt3d71tj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>precache model</title>
    <ns>0</ns>
    <id>792</id>
    <revision>
      <id>2335</id>
      <timestamp>2013-03-26T23:24:51Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;====Syntax:==== &lt;code&gt;string precache_model(string s)&lt;/code&gt;  Precaches a model for use by the engine.  Any model that you want to use MUST be precached.  Precaching can only ...&quot;</comment>
      <text xml:space="preserve" bytes="441">====Syntax:====
&lt;code&gt;string precache_model(string s)&lt;/code&gt;

Precaches a model for use by the engine.  Any model that you want to use MUST be precached.  Precaching can only be done during map load, not afterwards.  Doing so will cause the engine to crash.
====Parameters:====
:&lt;code&gt;s&lt;/code&gt; - The path to the model being precached
====Returns:====
:Returns a string (what string?).  This is usually ignored.


[[Category:QuakeC Function]]</text>
      <sha1>e0u7mf8cvx8bvoldbty41rr6iu101xq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>precache sound</title>
    <ns>0</ns>
    <id>634</id>
    <revision>
      <id>1865</id>
      <timestamp>2013-03-25T01:01:00Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;====Syntax:==== &lt;code&gt;string precache_sound(string s)&lt;/code&gt;  Precaches a sound for use by the engine.  Any sound that you want to play MUST be precached.  Precaching can only...&quot;</comment>
      <text xml:space="preserve" bytes="442">====Syntax:====
&lt;code&gt;string precache_sound(string s)&lt;/code&gt;

Precaches a sound for use by the engine.  Any sound that you want to play MUST be precached.  Precaching can only be done during map load, not afterwards.  Doing so will cause the engine to crash.
====Parameters:====
:&lt;code&gt;s&lt;/code&gt; - The path to the sound being precached
====Returns:====
:Returns a string (what string?).  This is usually ignored.


[[Category:QuakeC Function]]</text>
      <sha1>f1p8rri5lou0wgi7finasu734oc3uxc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>r drawflat</title>
    <ns>0</ns>
    <id>1002</id>
    <revision>
      <id>2787</id>
      <timestamp>2013-04-07T09:28:38Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;[[Image:r_drawflat_start.jpg|thumb|right|Start map with r_drawflat enabled]]The '''r_drawflat''' [[Console_variables | cvar]] is a developer command that draws the surfaces of...&quot;</comment>
      <text xml:space="preserve" bytes="221">[[Image:r_drawflat_start.jpg|thumb|right|Start map with r_drawflat enabled]]The '''r_drawflat''' [[Console_variables | cvar]] is a developer command that draws the surfaces of world and objects as flat-colored rectangles.</text>
      <sha1>9gy0it2z3pch0m2guukql0y01yjmmjd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>r drawviewmodel</title>
    <ns>0</ns>
    <id>106</id>
    <revision>
      <id>178</id>
      <timestamp>2007-10-31T00:14:57Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=r_drawviewmodel |default-value=1 |saved-to-config=no }}  This is a client-side variable that toggles the showing of current weapon...</comment>
      <text xml:space="preserve" bytes="1432">{{lowercase-underscores}}{{Infobox Console variable
|name=r_drawviewmodel
|default-value=1
|saved-to-config=no
}}

This is a client-side variable that toggles the showing of current weapon. If set to 1 the weapon is visible, if set to 0 the weapon can not be seen.

===r_drawviewmodel 1 and fov &gt; 90===

Old Quake would hide the weapon model when if the value of [[fov]] was greater than 90, no matter what r_drawviewmodel.   This applies to DOS Quake, WinQuake and all official qwcl (software-rendered QuakeWorld) releases.

In [[GLQuake]], however, the fov check was diked out, so in all official GLQuake and [QuakeWorld|glqwcl] (GL QuakeWorld) releases r_drawviewmodel 1 will display the weapon model no matter what your fov is.

:''In ZQuake, I decided to change the behavior of the software client to match that of GL: r_drawviewmodel 1 will always show the weapon - purely for consistency reasons.  Those who want the old behavior  (some TF players like it when the weapon is auto-hidden when under the concussion effect) should use r_drawviewmodel 2 - it will also work in GL.''

:''ZQuake-based engines (FuhQuake and ezQuake) keep this functionality;   QW262 uses a similar standard, but unfortunately the meaning of 1 and 2 is exactly the opposite there. -- Tonik''

::''In FuhQuake, FTE and derivatives (perhaps others), values between 0 and 1 relate to the transparency of the viewmodel. -- Spike''

{{Console variables}}</text>
      <sha1>f8ch9kbqlcgw4d9nn6d4f6y9izz5jmo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2590</id>
      <parentid>178</parentid>
      <timestamp>2013-03-29T14:22:16Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[R drawviewmodel]] to [[r drawviewmodel]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="1432">{{lowercase-underscores}}{{Infobox Console variable
|name=r_drawviewmodel
|default-value=1
|saved-to-config=no
}}

This is a client-side variable that toggles the showing of current weapon. If set to 1 the weapon is visible, if set to 0 the weapon can not be seen.

===r_drawviewmodel 1 and fov &gt; 90===

Old Quake would hide the weapon model when if the value of [[fov]] was greater than 90, no matter what r_drawviewmodel.   This applies to DOS Quake, WinQuake and all official qwcl (software-rendered QuakeWorld) releases.

In [[GLQuake]], however, the fov check was diked out, so in all official GLQuake and [QuakeWorld|glqwcl] (GL QuakeWorld) releases r_drawviewmodel 1 will display the weapon model no matter what your fov is.

:''In ZQuake, I decided to change the behavior of the software client to match that of GL: r_drawviewmodel 1 will always show the weapon - purely for consistency reasons.  Those who want the old behavior  (some TF players like it when the weapon is auto-hidden when under the concussion effect) should use r_drawviewmodel 2 - it will also work in GL.''

:''ZQuake-based engines (FuhQuake and ezQuake) keep this functionality;   QW262 uses a similar standard, but unfortunately the meaning of 1 and 2 is exactly the opposite there. -- Tonik''

::''In FuhQuake, FTE and derivatives (perhaps others), values between 0 and 1 relate to the transparency of the viewmodel. -- Spike''

{{Console variables}}</text>
      <sha1>f8ch9kbqlcgw4d9nn6d4f6y9izz5jmo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>r fullbright</title>
    <ns>0</ns>
    <id>105</id>
    <revision>
      <id>176</id>
      <timestamp>2007-10-31T00:12:20Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=r_fullbright |default-value=0 |saved-to-config=no }}  r_fullbright is a boolean variable, (1 is on, 0 is off) which turns on or of...</comment>
      <text xml:space="preserve" bytes="751">{{lowercase-underscores}}{{Infobox Console variable
|name=r_fullbright
|default-value=0
|saved-to-config=no
}}

r_fullbright is a boolean variable, (1 is on, 0 is off) which turns on or off the precompiled lighting on a map. If you set it to 1, every shadow will disappear and everything will be extremely bright. 99.9% of the time, this is ugly, but this command is sometimes useful if you are creating a map and want to test it without finishing all the lighting, or if you want to &quot;cheat&quot; in an unnecessarily dark level.

Keep in mind that changing r_fullbright in Software Quake has an instantaneous effect, while in [[GLQuake]] you will have to restart the level (use the [[restart]] console command) for it to have effect.

{{Console variables]]</text>
      <sha1>kw9gu3k9l74566z3kfati61tvjiivbs</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>177</id>
      <parentid>176</parentid>
      <timestamp>2007-10-31T00:12:26Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="751">{{lowercase-underscores}}{{Infobox Console variable
|name=r_fullbright
|default-value=0
|saved-to-config=no
}}

r_fullbright is a boolean variable, (1 is on, 0 is off) which turns on or off the precompiled lighting on a map. If you set it to 1, every shadow will disappear and everything will be extremely bright. 99.9% of the time, this is ugly, but this command is sometimes useful if you are creating a map and want to test it without finishing all the lighting, or if you want to &quot;cheat&quot; in an unnecessarily dark level.

Keep in mind that changing r_fullbright in Software Quake has an instantaneous effect, while in [[GLQuake]] you will have to restart the level (use the [[restart]] console command) for it to have effect.

{{Console variables}}</text>
      <sha1>6dcoei2m6ov7xi4mvqcmyupvy4c0b55</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2592</id>
      <parentid>177</parentid>
      <timestamp>2013-03-29T14:22:16Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[R fullbright]] to [[r fullbright]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="751">{{lowercase-underscores}}{{Infobox Console variable
|name=r_fullbright
|default-value=0
|saved-to-config=no
}}

r_fullbright is a boolean variable, (1 is on, 0 is off) which turns on or off the precompiled lighting on a map. If you set it to 1, every shadow will disappear and everything will be extremely bright. 99.9% of the time, this is ugly, but this command is sometimes useful if you are creating a map and want to test it without finishing all the lighting, or if you want to &quot;cheat&quot; in an unnecessarily dark level.

Keep in mind that changing r_fullbright in Software Quake has an instantaneous effect, while in [[GLQuake]] you will have to restart the level (use the [[restart]] console command) for it to have effect.

{{Console variables}}</text>
      <sha1>6dcoei2m6ov7xi4mvqcmyupvy4c0b55</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>r showbboxes</title>
    <ns>0</ns>
    <id>1001</id>
    <revision>
      <id>2786</id>
      <timestamp>2013-04-07T09:23:50Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;[[Image:r_showbboxes_start.jpg|thumb|right|Start map with r_showbboxes enabled]]The '''r_showbboxes''' [[Console_variables | cvar]] is a developer command that shows the [[Bou...&quot;</comment>
      <text xml:space="preserve" bytes="373">[[Image:r_showbboxes_start.jpg|thumb|right|Start map with r_showbboxes enabled]]The '''r_showbboxes''' [[Console_variables | cvar]] is a developer command that shows the [[Bounding_box | bounding boxes]] of all entities in the map.

The command is only available in certain [[List_of_engines_and_ports | engine ports]], such as [[Fitzquake]] (and forks) and [[DarkPlaces]].</text>
      <sha1>hdph17r3ej6zaom0qg84abfrzd5hrx6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>r showtris</title>
    <ns>0</ns>
    <id>1000</id>
    <revision>
      <id>2780</id>
      <timestamp>2013-04-07T09:11:40Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;[[Image:r_showtris_start.jpg|thumb|right|Start map with r_showtris enabled]]The '''r_showtris''' [[Console_variables | cvar]] is a developer command that shows the outlines of...&quot;</comment>
      <text xml:space="preserve" bytes="281">[[Image:r_showtris_start.jpg|thumb|right|Start map with r_showtris enabled]]The '''r_showtris''' [[Console_variables | cvar]] is a developer command that shows the outlines of world and object polygons as triangles. It is helpful for optimizing geometry and [[Vis | vis-blocking]].</text>
      <sha1>izerknj4bjljsvy5t5bm1ypt2qcsifj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2782</id>
      <parentid>2780</parentid>
      <timestamp>2013-04-07T09:15:45Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <text xml:space="preserve" bytes="423">[[Image:r_showtris_start.jpg|thumb|right|Start map with r_showtris enabled]]The '''r_showtris''' [[Console_variables | cvar]] is a developer command that shows the outlines of world and object polygons as triangles. It is helpful for optimizing geometry and [[Vis | vis-blocking]].

The command is only available in certain [[List_of_engines_and_ports | engine ports]], such as [[Fitzquake]] (and forks) and [[DarkPlaces]].</text>
      <sha1>r9cgqwt0htlc7ypg0qyuqtlab0vdrl9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>random</title>
    <ns>0</ns>
    <id>618</id>
    <revision>
      <id>1718</id>
      <timestamp>2013-03-24T22:38:08Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;Syntax:&lt;br/&gt; &lt;code&gt;float random()&lt;/code&gt;  This function returns a floating point value greater than or equal to 0 and less than 1.&quot;</comment>
      <text xml:space="preserve" bytes="130">Syntax:&lt;br/&gt;
&lt;code&gt;float random()&lt;/code&gt;

This function returns a floating point value greater than or equal to 0 and less than 1.</text>
      <sha1>bcdn34140zdu3zauil75qbfm8ef8ir4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1728</id>
      <parentid>1718</parentid>
      <timestamp>2013-03-24T22:59:42Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="162">====Syntax:====
&lt;code&gt;float random()&lt;/code&gt;
====Parameters:====
:None
====Returns:====
:Returns a floating point value greater than or equal to 0 and less than 1.</text>
      <sha1>m9mr1xehpajst08b8za3gdj6qcsexvg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>remove</title>
    <ns>0</ns>
    <id>626</id>
    <revision>
      <id>1737</id>
      <timestamp>2013-03-24T23:12:12Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;====Syntax:==== &lt;code&gt;void normalize(entity e)&lt;/code&gt;  &quot;Removes&quot; an entity from the game. ====Parameters:==== :&lt;code&gt;e&lt;/code&gt; - The entity to remove ====Returns:==== :void   [...&quot;</comment>
      <text xml:space="preserve" bytes="202">====Syntax:====
&lt;code&gt;void normalize(entity e)&lt;/code&gt;

&quot;Removes&quot; an entity from the game.
====Parameters:====
:&lt;code&gt;e&lt;/code&gt; - The entity to remove
====Returns:====
:void


[[Category:QuakeC Function]]</text>
      <sha1>smonut0fj8inh0b67w0ho5nqexh0vyx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1738</id>
      <parentid>1737</parentid>
      <timestamp>2013-03-24T23:12:22Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="199">====Syntax:====
&lt;code&gt;void remove(entity e)&lt;/code&gt;

&quot;Removes&quot; an entity from the game.
====Parameters:====
:&lt;code&gt;e&lt;/code&gt; - The entity to remove
====Returns:====
:void


[[Category:QuakeC Function]]</text>
      <sha1>coola8f1k0vyng7hnmn9y7rfdax9w6x</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>rint</title>
    <ns>0</ns>
    <id>186</id>
    <revision>
      <id>362</id>
      <timestamp>2008-02-22T19:16:28Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  float '''rint'''(float ''val'')  Returns ''val'', rounded up to the closest integer value.</comment>
      <text xml:space="preserve" bytes="91"> float '''rint'''(float ''val'')

Returns ''val'', rounded up to the closest integer value.</text>
      <sha1>fp1kol7z6c0vic5h5i6xdz5wqj4d400</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2596</id>
      <parentid>362</parentid>
      <timestamp>2013-03-29T14:22:16Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Rint]] to [[rint]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="91"> float '''rint'''(float ''val'')

Returns ''val'', rounded up to the closest integer value.</text>
      <sha1>fp1kol7z6c0vic5h5i6xdz5wqj4d400</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>saved1</title>
    <ns>0</ns>
    <id>117</id>
    <revision>
      <id>191</id>
      <timestamp>2007-10-31T00:34:43Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=saved1 |default-value=0 |saved-to-config=yes }} Versions: NormalQuake 1.07 and above.  Mission pack 1: Scourge of Armagon added th...</comment>
      <text xml:space="preserve" bytes="504">{{lowercase-underscores}}{{Infobox Console variable
|name=saved1
|default-value=0
|saved-to-config=yes
}}
Versions: NormalQuake 1.07 and above.

Mission pack 1: Scourge of Armagon added this variable for unknown reasons - it was completely unused by the engine and the [[QuakeC]] and remains that way to this day. Like [[savedgamecfg]], [[saved2]], [[saved3]], and [[saved4]] (among others) it is saved to the config.cfg file when Quake exits.

===See Also===
* [[Available Cvars]]

{{Console variables}}</text>
      <sha1>131ee1tb6jjaqce0rrbzfo6ylwe6qnj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2598</id>
      <parentid>191</parentid>
      <timestamp>2013-03-29T14:22:17Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Saved1]] to [[saved1]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="504">{{lowercase-underscores}}{{Infobox Console variable
|name=saved1
|default-value=0
|saved-to-config=yes
}}
Versions: NormalQuake 1.07 and above.

Mission pack 1: Scourge of Armagon added this variable for unknown reasons - it was completely unused by the engine and the [[QuakeC]] and remains that way to this day. Like [[savedgamecfg]], [[saved2]], [[saved3]], and [[saved4]] (among others) it is saved to the config.cfg file when Quake exits.

===See Also===
* [[Available Cvars]]

{{Console variables}}</text>
      <sha1>131ee1tb6jjaqce0rrbzfo6ylwe6qnj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>saved2</title>
    <ns>0</ns>
    <id>118</id>
    <revision>
      <id>192</id>
      <timestamp>2007-10-31T00:34:49Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=saved2 |default-value=0 |saved-to-config=yes }} Versions: NormalQuake 1.07 and above.  Mission pack 1: Scourge of Armagon added th...</comment>
      <text xml:space="preserve" bytes="504">{{lowercase-underscores}}{{Infobox Console variable
|name=saved2
|default-value=0
|saved-to-config=yes
}}
Versions: NormalQuake 1.07 and above.

Mission pack 1: Scourge of Armagon added this variable for unknown reasons - it was completely unused by the engine and the [[QuakeC]] and remains that way to this day. Like [[savedgamecfg]], [[saved1]], [[saved3]], and [[saved4]] (among others) it is saved to the config.cfg file when Quake exits.

===See Also===
* [[Available Cvars]]

{{Console variables}}</text>
      <sha1>0k9xa6z1gf2vxlupzfygsv168m53lq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2600</id>
      <parentid>192</parentid>
      <timestamp>2013-03-29T14:22:17Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Saved2]] to [[saved2]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="504">{{lowercase-underscores}}{{Infobox Console variable
|name=saved2
|default-value=0
|saved-to-config=yes
}}
Versions: NormalQuake 1.07 and above.

Mission pack 1: Scourge of Armagon added this variable for unknown reasons - it was completely unused by the engine and the [[QuakeC]] and remains that way to this day. Like [[savedgamecfg]], [[saved1]], [[saved3]], and [[saved4]] (among others) it is saved to the config.cfg file when Quake exits.

===See Also===
* [[Available Cvars]]

{{Console variables}}</text>
      <sha1>0k9xa6z1gf2vxlupzfygsv168m53lq1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>saved3</title>
    <ns>0</ns>
    <id>119</id>
    <revision>
      <id>193</id>
      <timestamp>2007-10-31T00:34:58Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=saved3 |default-value=0 |saved-to-config=yes }} Versions: NormalQuake 1.07 and above.  Mission pack 1: Scourge of Armagon added th...</comment>
      <text xml:space="preserve" bytes="504">{{lowercase-underscores}}{{Infobox Console variable
|name=saved3
|default-value=0
|saved-to-config=yes
}}
Versions: NormalQuake 1.07 and above.

Mission pack 1: Scourge of Armagon added this variable for unknown reasons - it was completely unused by the engine and the [[QuakeC]] and remains that way to this day. Like [[savedgamecfg]], [[saved1]], [[saved2]], and [[saved4]] (among others) it is saved to the config.cfg file when Quake exits.

===See Also===
* [[Available Cvars]]

{{Console variables}}</text>
      <sha1>rlij62r9mf1dsr9z4hb3y7603seean4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2602</id>
      <parentid>193</parentid>
      <timestamp>2013-03-29T14:22:17Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Saved3]] to [[saved3]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="504">{{lowercase-underscores}}{{Infobox Console variable
|name=saved3
|default-value=0
|saved-to-config=yes
}}
Versions: NormalQuake 1.07 and above.

Mission pack 1: Scourge of Armagon added this variable for unknown reasons - it was completely unused by the engine and the [[QuakeC]] and remains that way to this day. Like [[savedgamecfg]], [[saved1]], [[saved2]], and [[saved4]] (among others) it is saved to the config.cfg file when Quake exits.

===See Also===
* [[Available Cvars]]

{{Console variables}}</text>
      <sha1>rlij62r9mf1dsr9z4hb3y7603seean4</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>saved4</title>
    <ns>0</ns>
    <id>120</id>
    <revision>
      <id>194</id>
      <timestamp>2007-10-31T00:35:06Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=saved4 |default-value=0 |saved-to-config=yes }} Versions: NormalQuake 1.07 and above.  Mission pack 1: Scourge of Armagon added th...</comment>
      <text xml:space="preserve" bytes="504">{{lowercase-underscores}}{{Infobox Console variable
|name=saved4
|default-value=0
|saved-to-config=yes
}}
Versions: NormalQuake 1.07 and above.

Mission pack 1: Scourge of Armagon added this variable for unknown reasons - it was completely unused by the engine and the [[QuakeC]] and remains that way to this day. Like [[savedgamecfg]], [[saved1]], [[saved2]], and [[saved3]] (among others) it is saved to the config.cfg file when Quake exits.

===See Also===
* [[Available Cvars]]

{{Console variables}}</text>
      <sha1>6o19pknu2xrh6ivhodbau4mictgo5as</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2604</id>
      <parentid>194</parentid>
      <timestamp>2013-03-29T14:22:18Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Saved4]] to [[saved4]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="504">{{lowercase-underscores}}{{Infobox Console variable
|name=saved4
|default-value=0
|saved-to-config=yes
}}
Versions: NormalQuake 1.07 and above.

Mission pack 1: Scourge of Armagon added this variable for unknown reasons - it was completely unused by the engine and the [[QuakeC]] and remains that way to this day. Like [[savedgamecfg]], [[saved1]], [[saved2]], and [[saved3]] (among others) it is saved to the config.cfg file when Quake exits.

===See Also===
* [[Available Cvars]]

{{Console variables}}</text>
      <sha1>6o19pknu2xrh6ivhodbau4mictgo5as</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>savedgamecfg</title>
    <ns>0</ns>
    <id>121</id>
    <revision>
      <id>195</id>
      <timestamp>2007-10-31T00:35:26Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=savedgamecfg |default-value=0 |saved-to-config=yes }} Versions: NormalQuake 1.07 and above.  Mission pack 1: Scourge of Armagon ad...</comment>
      <text xml:space="preserve" bytes="504">{{lowercase-underscores}}{{Infobox Console variable
|name=savedgamecfg
|default-value=0
|saved-to-config=yes
}}
Versions: NormalQuake 1.07 and above.

Mission pack 1: Scourge of Armagon added this variable for unknown reasons - it was completely unused by the engine and the [[QuakeC]] and remains that way to this day. Like [[saved1]], [[saved2]], [[saved3]], and [[saved4]] (among others) it is saved to the config.cfg file when Quake exits.

===See Also===
* [[Available Cvars]]

{{Console variables}}</text>
      <sha1>il4jartbe86jjtnu1qgqlvehmkqhn7f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2606</id>
      <parentid>195</parentid>
      <timestamp>2013-03-29T14:22:18Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Savedgamecfg]] to [[savedgamecfg]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="504">{{lowercase-underscores}}{{Infobox Console variable
|name=savedgamecfg
|default-value=0
|saved-to-config=yes
}}
Versions: NormalQuake 1.07 and above.

Mission pack 1: Scourge of Armagon added this variable for unknown reasons - it was completely unused by the engine and the [[QuakeC]] and remains that way to this day. Like [[saved1]], [[saved2]], [[saved3]], and [[saved4]] (among others) it is saved to the config.cfg file when Quake exits.

===See Also===
* [[Available Cvars]]

{{Console variables}}</text>
      <sha1>il4jartbe86jjtnu1qgqlvehmkqhn7f</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>scr centertime</title>
    <ns>0</ns>
    <id>122</id>
    <revision>
      <id>196</id>
      <timestamp>2007-10-31T00:36:30Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=scr_centertime |default-value=2 |saved-to-config=no }} Versions: All  scr_centertime represents the time, in seconds, Quake will d...</comment>
      <text xml:space="preserve" bytes="721">{{lowercase-underscores}}{{Infobox Console variable
|name=scr_centertime
|default-value=2
|saved-to-config=no
}}
Versions: All

scr_centertime represents the time, in seconds, Quake will display a message it recieves from [[SVC_CENTERPRINT]] (which is often in turn sent by [[QuakeC]]'s [[centerprint]] function). It may be necessary for some players to push this value up a little to read some of the longer messages in game, however it's most useful to a modder that wants to display a menu to a user without flooding them with repeated centerprints. Be careful though, that another centerprint doesn't overwrite the message (such as one coming from a trigger). See [[centerprint]] for more info.

{{Console variables}}</text>
      <sha1>3yiytoe10k75crpsdnckfyjlhlzkfp6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2608</id>
      <parentid>196</parentid>
      <timestamp>2013-03-29T14:22:18Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Scr centertime]] to [[scr centertime]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="721">{{lowercase-underscores}}{{Infobox Console variable
|name=scr_centertime
|default-value=2
|saved-to-config=no
}}
Versions: All

scr_centertime represents the time, in seconds, Quake will display a message it recieves from [[SVC_CENTERPRINT]] (which is often in turn sent by [[QuakeC]]'s [[centerprint]] function). It may be necessary for some players to push this value up a little to read some of the longer messages in game, however it's most useful to a modder that wants to display a menu to a user without flooding them with repeated centerprints. Be careful though, that another centerprint doesn't overwrite the message (such as one coming from a trigger). See [[centerprint]] for more info.

{{Console variables}}</text>
      <sha1>3yiytoe10k75crpsdnckfyjlhlzkfp6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>scr conspeed</title>
    <ns>0</ns>
    <id>123</id>
    <revision>
      <id>197</id>
      <timestamp>2007-10-31T00:41:22Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=scr_conspeed |default-value=300 |saved-to-config=no }} scr_conspeed sets the speed at which the console drops into view when the p...</comment>
      <text xml:space="preserve" bytes="494">{{lowercase-underscores}}{{Infobox Console variable
|name=scr_conspeed
|default-value=300
|saved-to-config=no
}}
scr_conspeed sets the speed at which the console drops into view when the player presses the console key, (default console key is back-tick, (`), which is in the upper-left corner of the keyboard, shared with the tilde (~) character.) The speed is specified in pixels per second, so it will take longer for the console to open or close on higher resolutions.

{{Console variables}}</text>
      <sha1>34v2tflbc0hbo5cn7qcvf5c4i6c9msu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2610</id>
      <parentid>197</parentid>
      <timestamp>2013-03-29T14:22:19Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Scr conspeed]] to [[scr conspeed]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="494">{{lowercase-underscores}}{{Infobox Console variable
|name=scr_conspeed
|default-value=300
|saved-to-config=no
}}
scr_conspeed sets the speed at which the console drops into view when the player presses the console key, (default console key is back-tick, (`), which is in the upper-left corner of the keyboard, shared with the tilde (~) character.) The speed is specified in pixels per second, so it will take longer for the console to open or close on higher resolutions.

{{Console variables}}</text>
      <sha1>34v2tflbc0hbo5cn7qcvf5c4i6c9msu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>sensitivity</title>
    <ns>0</ns>
    <id>103</id>
    <revision>
      <id>174</id>
      <timestamp>2007-10-31T00:08:53Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=sensitivity |default-value=3 |saved-to-config=yes }}  sensitivity is simply the level of sensitivity set to your mouse. It can be ...</comment>
      <text xml:space="preserve" bytes="246">{{lowercase-underscores}}{{Infobox Console variable
|name=sensitivity
|default-value=3
|saved-to-config=yes
}}

sensitivity is simply the level of sensitivity set to your mouse. It can be found also in the actual game menu.

{{Console variables}}</text>
      <sha1>mtrr37abpywv3fa5nfqmun51xro7s3j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2612</id>
      <parentid>174</parentid>
      <timestamp>2013-03-29T14:22:19Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Sensitivity]] to [[sensitivity]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="246">{{lowercase-underscores}}{{Infobox Console variable
|name=sensitivity
|default-value=3
|saved-to-config=yes
}}

sensitivity is simply the level of sensitivity set to your mouse. It can be found also in the actual game menu.

{{Console variables}}</text>
      <sha1>mtrr37abpywv3fa5nfqmun51xro7s3j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>setmodel</title>
    <ns>0</ns>
    <id>615</id>
    <revision>
      <id>1699</id>
      <timestamp>2013-03-24T21:26:08Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;Syntax:&lt;br/&gt; &lt;code&gt;setmodel(entity e, string path)&lt;/code&gt;  Makes the entity &lt;code&gt;e&lt;/code&gt; use the model that is found in the &lt;code&gt;path&lt;/code&gt;.  This model must be precached ...&quot;</comment>
      <text xml:space="preserve" bytes="197">Syntax:&lt;br/&gt;
&lt;code&gt;setmodel(entity e, string path)&lt;/code&gt;

Makes the entity &lt;code&gt;e&lt;/code&gt; use the model that is found in the &lt;code&gt;path&lt;/code&gt;.  This model must be precached before it can be used.</text>
      <sha1>eyin1rtzoxpk1u8w5exrccwg395kdfm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1710</id>
      <parentid>1699</parentid>
      <timestamp>2013-03-24T22:20:04Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="227">Syntax:&lt;br/&gt;
&lt;code&gt;setmodel(entity e, string path)&lt;/code&gt;

Makes the entity &lt;code&gt;e&lt;/code&gt; use the model that is found in the &lt;code&gt;path&lt;/code&gt;.  This model must be precached before it can be used.

[[Category:QuakeC Function]]</text>
      <sha1>n35woteb3e64ba9fpe3pewrqpqvx6tu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1716</id>
      <parentid>1710</parentid>
      <timestamp>2013-03-24T22:36:37Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="232">Syntax:&lt;br/&gt;
&lt;code&gt;void setmodel(entity e, string path)&lt;/code&gt;

Makes the entity &lt;code&gt;e&lt;/code&gt; use the model that is found in the &lt;code&gt;path&lt;/code&gt;.  This model must be precached before it can be used.

[[Category:QuakeC Function]]</text>
      <sha1>ipqcool96f67mpw4k8lx7uggoga0kbf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1722</id>
      <parentid>1716</parentid>
      <timestamp>2013-03-24T22:53:08Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="336">====Syntax:====
&lt;code&gt;void setmodel(entity e, string path)&lt;/code&gt;

Sets the model an entity will use.
====Parameters:====
:&lt;code&gt;e&lt;/code&gt; - The entity who's model is being set
:&lt;code&gt;path&lt;/code&gt; - The path to the model file to set.  Can be a model (.mdl), sprite (.spr) or map (.bsp)
====Returns:====
:void

[[Category:QuakeC Function]]</text>
      <sha1>5mhdlnhgfm2cqfjhehtcddudsr59f1r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1723</id>
      <parentid>1722</parentid>
      <timestamp>2013-03-24T22:55:00Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="354">====Syntax:====
&lt;code&gt;void setmodel(entity e, string path)&lt;/code&gt;

Sets the model an entity will use.
====Parameters:====
:&lt;code&gt;e&lt;/code&gt; - (entity) The entity who's model is being set
:&lt;code&gt;path&lt;/code&gt; - (string) The path to the model file to set.  Can be a model (.mdl), sprite (.spr) or map (.bsp)
====Returns:====
:void

[[Category:QuakeC Function]]</text>
      <sha1>5oi17pfs82kzva46zwoidundkm7jmkw</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1726</id>
      <parentid>1723</parentid>
      <timestamp>2013-03-24T22:57:27Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="336">====Syntax:====
&lt;code&gt;void setmodel(entity e, string path)&lt;/code&gt;

Sets the model an entity will use.
====Parameters:====
:&lt;code&gt;e&lt;/code&gt; - The entity who's model is being set
:&lt;code&gt;path&lt;/code&gt; - The path to the model file to set.  Can be a model (.mdl), sprite (.spr) or map (.bsp)
====Returns:====
:void

[[Category:QuakeC Function]]</text>
      <sha1>5mhdlnhgfm2cqfjhehtcddudsr59f1r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>setorigin</title>
    <ns>0</ns>
    <id>614</id>
    <revision>
      <id>1698</id>
      <timestamp>2013-03-24T21:24:31Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;Syntax:&lt;br/&gt; &lt;code&gt;setorigin(entity e, vector vec)&lt;/code&gt;  Sets the entity &lt;code&gt;e&lt;/code&gt; to the position specified with &lt;code&gt;vec&lt;/code&gt;.  This is the correct way of setting ...&quot;</comment>
      <text xml:space="preserve" bytes="296">Syntax:&lt;br/&gt;
&lt;code&gt;setorigin(entity e, vector vec)&lt;/code&gt;

Sets the entity &lt;code&gt;e&lt;/code&gt; to the position specified with &lt;code&gt;vec&lt;/code&gt;.  This is the correct way of setting an entity's position in the game.  Setting the &lt;code&gt;.origin&lt;/code&gt; variable manually will cause problems with rendering.</text>
      <sha1>ssf3fnctbdt3na1z00w1w1svxeqwyk6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1709</id>
      <parentid>1698</parentid>
      <timestamp>2013-03-24T22:19:52Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="327">Syntax:&lt;br/&gt;
&lt;code&gt;setorigin(entity e, vector vec)&lt;/code&gt;

Sets the entity &lt;code&gt;e&lt;/code&gt; to the position specified with &lt;code&gt;vec&lt;/code&gt;.  This is the correct way of setting an entity's position in the game.  Setting the &lt;code&gt;.origin&lt;/code&gt; variable manually will cause problems with rendering.


[[Category:QuakeC Function]]</text>
      <sha1>28ov9u2akwkc28whh9ezndqxocyzi60</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1715</id>
      <parentid>1709</parentid>
      <timestamp>2013-03-24T22:36:23Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="332">Syntax:&lt;br/&gt;
&lt;code&gt;void setorigin(entity e, vector vec)&lt;/code&gt;

Sets the entity &lt;code&gt;e&lt;/code&gt; to the position specified with &lt;code&gt;vec&lt;/code&gt;.  This is the correct way of setting an entity's position in the game.  Setting the &lt;code&gt;.origin&lt;/code&gt; variable manually will cause problems with rendering.


[[Category:QuakeC Function]]</text>
      <sha1>2msdbblrcv06rkw9y2ytju7favgle07</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1721</id>
      <parentid>1715</parentid>
      <timestamp>2013-03-24T22:51:26Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="487">====Syntax:====
&lt;code&gt;void setorigin(entity e, vector vec)&lt;/code&gt;

Sets the entity &lt;code&gt;e&lt;/code&gt; to the position specified with &lt;code&gt;vec&lt;/code&gt;.  This is the correct way of setting an entity's position in the game.  Setting the &lt;code&gt;.origin&lt;/code&gt; variable manually will cause problems with rendering.
====Parameters:====
:&lt;code&gt;e&lt;/code&gt; - The entity who's origin to set
:&lt;code&gt;vec&lt;/code&gt; - The new vector coordinates of the entity
====Returns:====
:void

[[Category:QuakeC Function]]</text>
      <sha1>2k07x65mo0rta642nrdq5bo2wcnokqv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>setsize</title>
    <ns>0</ns>
    <id>616</id>
    <revision>
      <id>1700</id>
      <timestamp>2013-03-24T21:27:21Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;Syntax:&lt;br/&gt; &lt;code&gt;setsize(entity e, vector mins, vector maxs)&lt;/code&gt;  Sets the size of the entity &lt;code&gt;e&lt;/code&gt;'s bounding box.  This is calculated from the origin (&lt;code&gt;'0...&quot;</comment>
      <text xml:space="preserve" bytes="248">Syntax:&lt;br/&gt;
&lt;code&gt;setsize(entity e, vector mins, vector maxs)&lt;/code&gt;

Sets the size of the entity &lt;code&gt;e&lt;/code&gt;'s bounding box.  This is calculated from the origin (&lt;code&gt;'0 0 0'&lt;/code&gt;).  &lt;code&gt;mins&lt;/code&gt; must be smaller than &lt;code&gt;maxs&lt;/code&gt;.</text>
      <sha1>ga1gjbkxfx1sqofquj7chbxdoupvfnb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1702</id>
      <parentid>1700</parentid>
      <timestamp>2013-03-24T21:35:14Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <comment>testing categories</comment>
      <text xml:space="preserve" bytes="277">Syntax:&lt;br/&gt;
&lt;code&gt;setsize(entity e, vector mins, vector maxs)&lt;/code&gt;

Sets the size of the entity &lt;code&gt;e&lt;/code&gt;'s bounding box.  This is calculated from the origin (&lt;code&gt;'0 0 0'&lt;/code&gt;).  &lt;code&gt;mins&lt;/code&gt; must be smaller than &lt;code&gt;maxs&lt;/code&gt;.
[[Category:QuakeC Function]]</text>
      <sha1>hhkx63bjrtvya5d8dvve32gjgjdfgid</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1717</id>
      <parentid>1702</parentid>
      <timestamp>2013-03-24T22:36:48Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="282">Syntax:&lt;br/&gt;
&lt;code&gt;void setsize(entity e, vector mins, vector maxs)&lt;/code&gt;

Sets the size of the entity &lt;code&gt;e&lt;/code&gt;'s bounding box.  This is calculated from the origin (&lt;code&gt;'0 0 0'&lt;/code&gt;).  &lt;code&gt;mins&lt;/code&gt; must be smaller than &lt;code&gt;maxs&lt;/code&gt;.
[[Category:QuakeC Function]]</text>
      <sha1>ds37km3tvedc3xlhznu6bhh0kbux0iu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1727</id>
      <parentid>1717</parentid>
      <timestamp>2013-03-24T22:58:43Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="434">====Syntax:====
&lt;code&gt;void setsize(entity e, vector mins, vector maxs)&lt;/code&gt;

Sets the size of the entity's bounding box.
====Parameters:====
:&lt;code&gt;e&lt;/code&gt; - The entity who's model is being set
:&lt;code&gt;mins&lt;/code&gt; - The coordinates of the minimum corner of the bounding box
:&lt;code&gt;maxs&lt;/code&gt; - The coordinates of the maximum corner of the bounding box (must be larger than mins)
====Returns:====
:void

[[Category:QuakeC Function]]</text>
      <sha1>kixxr5o1aydhh2wjmwbrfno79mxrs8s</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>shalrath.qc</title>
    <ns>0</ns>
    <id>856</id>
    <revision>
      <id>2477</id>
      <timestamp>2013-03-29T11:18:40Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for [[Vore]] [[Monsters | monster]].   &lt;pre&gt; /* ==============================================================================  SHAL-RA...&quot;</comment>
      <text xml:space="preserve" bytes="7985">This [[Quake-C]] file contains the code for [[Vore]] [[Monsters | monster]].


&lt;pre&gt;
/*
==============================================================================

SHAL-RATH

==============================================================================
*/
$cd id1/models/shalrath
$origin 0 0 24
$base base
$skin skin
$scale 0.7

$frame attack1 attack2 attack3 attack4 attack5 attack6 attack7 attack8
$frame attack9 attack10 attack11

$frame pain1 pain2 pain3 pain4 pain5 

$frame death1 death2 death3 death4 death5 death6 death7

$frame	walk1 walk2 walk3 walk4 walk5 walk6 walk7 walk8 walk9 walk10
$frame	walk11 walk12

void() shalrath_pain;
void() ShalMissile;
void() shal_stand     =[      $walk1,       shal_stand    ] {ai_stand();};

void() shal_walk1     =[      $walk2,       shal_walk2    ] {
if (random() &lt; 0.2)
	sound (self, CHAN_VOICE, &quot;shalrath/idle.wav&quot;, 1, ATTN_IDLE);
ai_walk(6);};
void() shal_walk2     =[      $walk3,       shal_walk3    ] {ai_walk(4);};
void() shal_walk3     =[      $walk4,       shal_walk4    ] {ai_walk(0);};
void() shal_walk4     =[      $walk5,       shal_walk5    ] {ai_walk(0);};
void() shal_walk5     =[      $walk6,       shal_walk6    ] {ai_walk(0);};
void() shal_walk6     =[      $walk7,       shal_walk7    ] {ai_walk(0);};
void() shal_walk7     =[      $walk8,       shal_walk8    ] {ai_walk(5);};
void() shal_walk8     =[      $walk9,       shal_walk9    ] {ai_walk(6);};
void() shal_walk9     =[      $walk10,       shal_walk10    ] {ai_walk(5);};
void() shal_walk10    =[      $walk11,       shal_walk11    ] {ai_walk(0);};
void() shal_walk11    =[      $walk12,       shal_walk12    ] {ai_walk(4);};
void() shal_walk12    =[      $walk1,       shal_walk1    ] {ai_walk(5);};

void() shal_run1     =[      $walk2,       shal_run2    ] {
if (random() &lt; 0.2)
	sound (self, CHAN_VOICE, &quot;shalrath/idle.wav&quot;, 1, ATTN_IDLE);
ai_run(6);};
void() shal_run2     =[      $walk3,       shal_run3    ] {ai_run(4);};
void() shal_run3     =[      $walk4,       shal_run4    ] {ai_run(0);};
void() shal_run4     =[      $walk5,       shal_run5    ] {ai_run(0);};
void() shal_run5     =[      $walk6,       shal_run6    ] {ai_run(0);};
void() shal_run6     =[      $walk7,       shal_run7    ] {ai_run(0);};
void() shal_run7     =[      $walk8,       shal_run8    ] {ai_run(5);};
void() shal_run8     =[      $walk9,       shal_run9    ] {ai_run(6);};
void() shal_run9     =[      $walk10,       shal_run10    ] {ai_run(5);};
void() shal_run10    =[      $walk11,       shal_run11    ] {ai_run(0);};
void() shal_run11    =[      $walk12,       shal_run12    ] {ai_run(4);};
void() shal_run12    =[      $walk1,       shal_run1    ] {ai_run(5);};

void() shal_attack1     =[      $attack1,       shal_attack2    ] {
sound (self, CHAN_VOICE, &quot;shalrath/attack.wav&quot;, 1, ATTN_NORM);
ai_face();
};
void() shal_attack2     =[      $attack2,       shal_attack3    ] {ai_face();};
void() shal_attack3     =[      $attack3,       shal_attack4    ] {ai_face();};
void() shal_attack4     =[      $attack4,       shal_attack5    ] {ai_face();};
void() shal_attack5     =[      $attack5,       shal_attack6    ] {ai_face();};
void() shal_attack6     =[      $attack6,       shal_attack7    ] {ai_face();};
void() shal_attack7     =[      $attack7,       shal_attack8    ] {ai_face();};
void() shal_attack8     =[      $attack8,       shal_attack9    ] {ai_face();};
void() shal_attack9     =[      $attack9,       shal_attack10   ] {ShalMissile();};
void() shal_attack10    =[      $attack10,      shal_attack11   ] {ai_face();};
void() shal_attack11    =[      $attack11,      shal_run1   ] {};

void() shal_pain1       =[      $pain1, shal_pain2      ] {};
void() shal_pain2       =[      $pain2, shal_pain3      ] {};
void() shal_pain3       =[      $pain3, shal_pain4      ] {};
void() shal_pain4       =[      $pain4, shal_pain5      ] {};
void() shal_pain5       =[      $pain5, shal_run1      ] {};

void() shal_death1      =[      $death1,        shal_death2     ] {};
void() shal_death2      =[      $death2,        shal_death3     ] {};
void() shal_death3      =[      $death3,        shal_death4     ] {};
void() shal_death4      =[      $death4,        shal_death5     ] {};
void() shal_death5      =[      $death5,        shal_death6     ] {};
void() shal_death6      =[      $death6,        shal_death7     ] {};
void() shal_death7      =[      $death7,        shal_death7    ] {};


void() shalrath_pain =
{
	if (self.pain_finished &gt; time)
		return;

	sound (self, CHAN_VOICE, &quot;shalrath/pain.wav&quot;, 1, ATTN_NORM);
	shal_pain1();
	self.pain_finished = time + 3;
};

void() shalrath_die =
{
// check for gib
	if (self.health &lt; -90)
	{
		sound (self, CHAN_VOICE, &quot;player/udeath.wav&quot;, 1, ATTN_NORM);
		ThrowHead (&quot;progs/h_shal.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib1.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib2.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib3.mdl&quot;, self.health);
		return;
	}

	sound (self, CHAN_VOICE, &quot;shalrath/death.wav&quot;, 1, ATTN_NORM);
	shal_death1();
	self.solid = SOLID_NOT;
	// insert death sounds here
};

/*
================
ShalMissile
================
*/
void() ShalMissileTouch;
void() ShalHome;
void() ShalMissile =
{
	local	entity 	missile;
	local	vector	dir;
	local	float	dist, flytime;

	dir = normalize((self.enemy.origin + '0 0 10') - self.origin);
	dist = vlen (self.enemy.origin - self.origin);
	flytime = dist * 0.002;
	if (flytime &lt; 0.1)
		flytime = 0.1;

	self.effects = self.effects | EF_MUZZLEFLASH;
	sound (self, CHAN_WEAPON, &quot;shalrath/attack2.wav&quot;, 1, ATTN_NORM);

	missile = spawn ();
	missile.owner = self;

	missile.solid = SOLID_BBOX;
	missile.movetype = MOVETYPE_FLYMISSILE;
	setmodel (missile, &quot;progs/v_spike.mdl&quot;);

	setsize (missile, '0 0 0', '0 0 0');		

	missile.origin = self.origin + '0 0 10';
	missile.velocity = dir * 400;
	missile.avelocity = '300 300 300';
	missile.nextthink = flytime + time;
	missile.think = ShalHome;
	missile.enemy = self.enemy;
	missile.touch = ShalMissileTouch;
};

void() ShalHome =
{
	local vector	dir, vtemp;
	vtemp = self.enemy.origin + '0 0 10';
	if (self.enemy.health &lt; 1)
	{
		remove(self);
		return;
	}
	dir = normalize(vtemp - self.origin);
	if (skill == 3)
		self.velocity = dir * 350;
	else
		self.velocity = dir * 250;
	self.nextthink = time + 0.2;
	self.think = ShalHome;	
};

void() ShalMissileTouch =
{
	if (other == self.owner)
		return;		// don't explode on owner

	if (other.classname == &quot;monster_zombie&quot;)
		T_Damage (other, self, self, 110);	
	T_RadiusDamage (self, self.owner, 40, world);
	sound (self, CHAN_WEAPON, &quot;weapons/r_exp3.wav&quot;, 1, ATTN_NORM);

	WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
	WriteByte (MSG_BROADCAST, TE_EXPLOSION);
	WriteCoord (MSG_BROADCAST, self.origin_x);
	WriteCoord (MSG_BROADCAST, self.origin_y);
	WriteCoord (MSG_BROADCAST, self.origin_z);

	self.velocity = '0 0 0';
	self.touch = SUB_Null;
	setmodel (self, &quot;progs/s_explod.spr&quot;);
	self.solid = SOLID_NOT;
	s_explode1 ();
};

//=================================================================

/*QUAKED monster_shalrath (1 0 0) (-32 -32 -24) (32 32 48) Ambush
*/
void() monster_shalrath =
{
	if (deathmatch)
	{
		remove(self);
		return;
	}
	precache_model2 (&quot;progs/shalrath.mdl&quot;);
	precache_model2 (&quot;progs/h_shal.mdl&quot;);
	precache_model2 (&quot;progs/v_spike.mdl&quot;);
	
	precache_sound2 (&quot;shalrath/attack.wav&quot;);
	precache_sound2 (&quot;shalrath/attack2.wav&quot;);
	precache_sound2 (&quot;shalrath/death.wav&quot;);
	precache_sound2 (&quot;shalrath/idle.wav&quot;);
	precache_sound2 (&quot;shalrath/pain.wav&quot;);
	precache_sound2 (&quot;shalrath/sight.wav&quot;);
	
	self.solid = SOLID_SLIDEBOX;
	self.movetype = MOVETYPE_STEP;
	
	setmodel (self, &quot;progs/shalrath.mdl&quot;);
	setsize (self, VEC_HULL2_MIN, VEC_HULL2_MAX);
	self.health = 400;

	self.th_stand = shal_stand;
	self.th_walk = shal_walk1;
	self.th_run = shal_run1;
	self.th_die = shalrath_die;
	self.th_pain = shalrath_pain;
	self.th_missile = shal_attack1;

	self.think = walkmonster_start;
	self.nextthink = time + 0.1 + random ()*0.1;	

};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>0qaebbd3h04aggeef6d4go01dhfbfek</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>shambler.qc</title>
    <ns>0</ns>
    <id>857</id>
    <revision>
      <id>2478</id>
      <timestamp>2013-03-29T11:19:39Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for the [[Shambler]] [[Monsters | monster]].   &lt;pre&gt; /* ============================================================================== ...&quot;</comment>
      <text xml:space="preserve" bytes="12838">This [[Quake-C]] file contains the code for the [[Shambler]] [[Monsters | monster]].


&lt;pre&gt;
/*
==============================================================================

SHAMBLER

==============================================================================
*/

$cd id1/models/shams
$origin 0 0 24
$base base		
$skin base

$frame stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8 stand9
$frame stand10 stand11 stand12 stand13 stand14 stand15 stand16 stand17

$frame walk1 walk2 walk3 walk4 walk5 walk6 walk7 
$frame walk8 walk9 walk10 walk11 walk12

$frame	run1 run2 run3 run4 run5 run6

$frame smash1 smash2 smash3 smash4 smash5 smash6 smash7 
$frame smash8 smash9 smash10 smash11 smash12

$frame swingr1 swingr2 swingr3 swingr4 swingr5 
$frame swingr6 swingr7 swingr8 swingr9

$frame swingl1 swingl2 swingl3 swingl4 swingl5 
$frame swingl6 swingl7 swingl8 swingl9

$frame magic1 magic2 magic3 magic4 magic5 
$frame magic6 magic7 magic8 magic9 magic10 magic11 magic12

$frame pain1 pain2 pain3 pain4 pain5 pain6

$frame death1 death2 death3 death4 death5 death6 
$frame death7 death8 death9 death10 death11

void() sham_stand1	=[	$stand1,	sham_stand2	] {ai_stand();};
void() sham_stand2	=[	$stand2,	sham_stand3	] {ai_stand();};
void() sham_stand3	=[	$stand3,	sham_stand4	] {ai_stand();};
void() sham_stand4	=[	$stand4,	sham_stand5	] {ai_stand();};
void() sham_stand5	=[	$stand5,	sham_stand6	] {ai_stand();};
void() sham_stand6	=[	$stand6,	sham_stand7	] {ai_stand();};
void() sham_stand7	=[	$stand7,	sham_stand8	] {ai_stand();};
void() sham_stand8	=[	$stand8,	sham_stand9	] {ai_stand();};
void() sham_stand9	=[	$stand9,	sham_stand10] {ai_stand();};
void() sham_stand10	=[	$stand10,	sham_stand11] {ai_stand();};
void() sham_stand11	=[	$stand11,	sham_stand12] {ai_stand();};
void() sham_stand12	=[	$stand12,	sham_stand13] {ai_stand();};
void() sham_stand13	=[	$stand13,	sham_stand14] {ai_stand();};
void() sham_stand14	=[	$stand14,	sham_stand15] {ai_stand();};
void() sham_stand15	=[	$stand15,	sham_stand16] {ai_stand();};
void() sham_stand16	=[	$stand16,	sham_stand17] {ai_stand();};
void() sham_stand17	=[	$stand17,	sham_stand1	] {ai_stand();};

void() sham_walk1		=[      $walk1,        sham_walk2 ] {ai_walk(10);};
void() sham_walk2       =[      $walk2,        sham_walk3 ] {ai_walk(9);};
void() sham_walk3       =[      $walk3,        sham_walk4 ] {ai_walk(9);};
void() sham_walk4       =[      $walk4,        sham_walk5 ] {ai_walk(5);};
void() sham_walk5       =[      $walk5,        sham_walk6 ] {ai_walk(6);};
void() sham_walk6       =[      $walk6,        sham_walk7 ] {ai_walk(12);};
void() sham_walk7       =[      $walk7,        sham_walk8 ] {ai_walk(8);};
void() sham_walk8       =[      $walk8,        sham_walk9 ] {ai_walk(3);};
void() sham_walk9       =[      $walk9,        sham_walk10] {ai_walk(13);};
void() sham_walk10      =[      $walk10,       sham_walk11] {ai_walk(9);};
void() sham_walk11      =[      $walk11,       sham_walk12] {ai_walk(7);};
void() sham_walk12      =[      $walk12,       sham_walk1 ] {ai_walk(7);
if (random() &gt; 0.8)
	sound (self, CHAN_VOICE, &quot;shambler/sidle.wav&quot;, 1, ATTN_IDLE);};

void() sham_run1       =[      $run1,        sham_run2      ] {ai_run(20);};
void() sham_run2       =[      $run2,        sham_run3      ] {ai_run(24);};
void() sham_run3       =[      $run3,        sham_run4      ] {ai_run(20);};
void() sham_run4       =[      $run4,        sham_run5      ] {ai_run(20);};
void() sham_run5       =[      $run5,        sham_run6      ] {ai_run(24);};
void() sham_run6       =[      $run6,        sham_run1      ] {ai_run(20);
if (random() &gt; 0.8)
	sound (self, CHAN_VOICE, &quot;shambler/sidle.wav&quot;, 1, ATTN_IDLE);
};

void() sham_smash1     =[      $smash1,       sham_smash2    ] {
sound (self, CHAN_VOICE, &quot;shambler/melee1.wav&quot;, 1, ATTN_NORM);
ai_charge(2);};
void() sham_smash2     =[      $smash2,       sham_smash3    ] {ai_charge(6);};
void() sham_smash3     =[      $smash3,       sham_smash4    ] {ai_charge(6);};
void() sham_smash4     =[      $smash4,       sham_smash5    ] {ai_charge(5);};
void() sham_smash5     =[      $smash5,       sham_smash6    ] {ai_charge(4);};
void() sham_smash6     =[      $smash6,       sham_smash7    ] {ai_charge(1);};
void() sham_smash7     =[      $smash7,       sham_smash8    ] {ai_charge(0);};
void() sham_smash8     =[      $smash8,       sham_smash9    ] {ai_charge(0);};
void() sham_smash9     =[      $smash9,       sham_smash10   ] {ai_charge(0);};
void() sham_smash10    =[      $smash10,      sham_smash11   ] {
local vector	delta;
local float 	ldmg;

	if (!self.enemy)
		return;
	ai_charge(0);

	delta = self.enemy.origin - self.origin;

	if (vlen(delta) &gt; 100)
		return;
	if (!CanDamage (self.enemy, self))
		return;
		
	ldmg = (random() + random() + random()) * 40;
	T_Damage (self.enemy, self, self, ldmg);
	sound (self, CHAN_VOICE, &quot;shambler/smack.wav&quot;, 1, ATTN_NORM);

	SpawnMeatSpray (self.origin + v_forward*16, crandom() * 100 * v_right);
	SpawnMeatSpray (self.origin + v_forward*16, crandom() * 100 * v_right);
};
void() sham_smash11    =[      $smash11,      sham_smash12   ] {ai_charge(5);};
void() sham_smash12    =[      $smash12,      sham_run1	   ] {ai_charge(4);};

void() sham_swingr1;

void(float side) ShamClaw =
{
local vector	delta;
local float 	ldmg;

	if (!self.enemy)
		return;
	ai_charge(10);

	delta = self.enemy.origin - self.origin;

	if (vlen(delta) &gt; 100)
		return;
		
	ldmg = (random() + random() + random()) * 20;
	T_Damage (self.enemy, self, self, ldmg);
	sound (self, CHAN_VOICE, &quot;shambler/smack.wav&quot;, 1, ATTN_NORM);

	if (side)
	{
		makevectors (self.angles);
		SpawnMeatSpray (self.origin + v_forward*16, side * v_right);
	}
};

void() sham_swingl1	=[      $swingl1,      sham_swingl2   ] {
sound (self, CHAN_VOICE, &quot;shambler/melee2.wav&quot;, 1, ATTN_NORM);
ai_charge(5);};
void() sham_swingl2 =[      $swingl2,      sham_swingl3   ] {ai_charge(3);};
void() sham_swingl3 =[      $swingl3,      sham_swingl4   ] {ai_charge(7);};
void() sham_swingl4 =[      $swingl4,      sham_swingl5   ] {ai_charge(3);};
void() sham_swingl5 =[      $swingl5,      sham_swingl6   ] {ai_charge(7);};
void() sham_swingl6 =[      $swingl6,      sham_swingl7   ] {ai_charge(9);};
void() sham_swingl7 =[      $swingl7,      sham_swingl8   ] {ai_charge(5); ShamClaw(250);};
void() sham_swingl8 =[      $swingl8,      sham_swingl9   ] {ai_charge(4);};
void() sham_swingl9 =[      $swingl9,      sham_run1  ] {
ai_charge(8);
if (random()&lt;0.5)
	self.think = sham_swingr1;
};

void() sham_swingr1	=[      $swingr1,      sham_swingr2   ] {
sound (self, CHAN_VOICE, &quot;shambler/melee1.wav&quot;, 1, ATTN_NORM);
ai_charge(1);};
void() sham_swingr2	=[      $swingr2,      sham_swingr3   ] {ai_charge(8);};
void() sham_swingr3 =[      $swingr3,      sham_swingr4   ] {ai_charge(14);};
void() sham_swingr4 =[      $swingr4,      sham_swingr5   ] {ai_charge(7);};
void() sham_swingr5 =[      $swingr5,      sham_swingr6   ] {ai_charge(3);};
void() sham_swingr6 =[      $swingr6,      sham_swingr7   ] {ai_charge(6);};
void() sham_swingr7 =[      $swingr7,      sham_swingr8   ] {ai_charge(6); ShamClaw(-250);};
void() sham_swingr8 =[      $swingr8,      sham_swingr9   ] {ai_charge(3);};
void() sham_swingr9 =[      $swingr9,      sham_run1  ] {ai_charge(1);
ai_charge(10);
if (random()&lt;0.5)
	self.think = sham_swingl1;
};

void() sham_melee =
{
	local float chance;
	
	chance = random();
	if (chance &gt; 0.6 || self.health == 600)
		sham_smash1 ();
	else if (chance &gt; 0.3)
		sham_swingr1 ();
	else
		sham_swingl1 ();
};


//============================================================================

void() CastLightning =
{
	local	vector	org, dir;
	
	self.effects = self.effects | EF_MUZZLEFLASH;

	ai_face ();

	org = self.origin + '0 0 40';

	dir = self.enemy.origin + '0 0 16' - org;
	dir = normalize (dir);

	traceline (org, self.origin + dir*600, TRUE, self);

	WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
	WriteByte (MSG_BROADCAST, TE_LIGHTNING1);
	WriteEntity (MSG_BROADCAST, self);
	WriteCoord (MSG_BROADCAST, org_x);
	WriteCoord (MSG_BROADCAST, org_y);
	WriteCoord (MSG_BROADCAST, org_z);
	WriteCoord (MSG_BROADCAST, trace_endpos_x);
	WriteCoord (MSG_BROADCAST, trace_endpos_y);
	WriteCoord (MSG_BROADCAST, trace_endpos_z);

	LightningDamage (org, trace_endpos, self, 10);
};

void() sham_magic1     =[      $magic1,       sham_magic2    ] {ai_face();
	sound (self, CHAN_WEAPON, &quot;shambler/sattck1.wav&quot;, 1, ATTN_NORM);
};
void() sham_magic2     =[      $magic2,       sham_magic3    ] {ai_face();};
void() sham_magic3     =[      $magic3,       sham_magic4    ] {ai_face();self.nextthink = self.nextthink + 0.2;
local entity o;

self.effects = self.effects | EF_MUZZLEFLASH;
ai_face();
self.owner = spawn();
o = self.owner;
setmodel (o, &quot;progs/s_light.mdl&quot;);
setorigin (o, self.origin);
o.angles = self.angles;
o.nextthink = time + 0.7;
o.think = SUB_Remove;
};
void() sham_magic4     =[      $magic4,       sham_magic5    ]
{
self.effects = self.effects | EF_MUZZLEFLASH;
self.owner.frame = 1;
};
void() sham_magic5     =[      $magic5,       sham_magic6    ]
{
self.effects = self.effects | EF_MUZZLEFLASH;
self.owner.frame = 2;
};
void() sham_magic6     =[      $magic6,       sham_magic9    ]
{
remove (self.owner);
CastLightning();
sound (self, CHAN_WEAPON, &quot;shambler/sboom.wav&quot;, 1, ATTN_NORM);
};
void() sham_magic9     =[      $magic9,       sham_magic10   ]
{CastLightning();};
void() sham_magic10    =[      $magic10,      sham_magic11   ]
{CastLightning();};
void() sham_magic11    =[      $magic11,      sham_magic12   ]
{
if (skill == 3)
	CastLightning();
};
void() sham_magic12    =[      $magic12,      sham_run1	   ] {};



void() sham_pain1       =[      $pain1, sham_pain2      ] {};
void() sham_pain2       =[      $pain2, sham_pain3      ] {};
void() sham_pain3       =[      $pain3, sham_pain4      ] {};
void() sham_pain4       =[      $pain4, sham_pain5      ] {};
void() sham_pain5       =[      $pain5, sham_pain6      ] {};
void() sham_pain6       =[      $pain6, sham_run1      ] {};

void(entity attacker, float damage)	sham_pain =
{
	sound (self, CHAN_VOICE, &quot;shambler/shurt2.wav&quot;, 1, ATTN_NORM);

	if (self.health &lt;= 0)
		return;		// allready dying, don't go into pain frame

	if (random()*400 &gt; damage)
		return;		// didn't flinch

	if (self.pain_finished &gt; time)
		return;
	self.pain_finished = time + 2;
		
	sham_pain1 ();
};


//============================================================================

void() sham_death1      =[      $death1,       sham_death2     ] {};
void() sham_death2      =[      $death2,       sham_death3     ] {};
void() sham_death3      =[      $death3,       sham_death4     ] {self.solid = SOLID_NOT;};
void() sham_death4      =[      $death4,       sham_death5     ] {};
void() sham_death5      =[      $death5,       sham_death6     ] {};
void() sham_death6      =[      $death6,       sham_death7     ] {};
void() sham_death7      =[      $death7,       sham_death8     ] {};
void() sham_death8      =[      $death8,       sham_death9     ] {};
void() sham_death9      =[      $death9,       sham_death10    ] {};
void() sham_death10     =[      $death10,      sham_death11    ] {};
void() sham_death11     =[      $death11,      sham_death11    ] {};

void() sham_die =
{
// check for gib
	if (self.health &lt; -60)
	{
		sound (self, CHAN_VOICE, &quot;player/udeath.wav&quot;, 1, ATTN_NORM);
		ThrowHead (&quot;progs/h_shams.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib1.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib2.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib3.mdl&quot;, self.health);
		return;
	}

// regular death
	sound (self, CHAN_VOICE, &quot;shambler/sdeath.wav&quot;, 1, ATTN_NORM);
	sham_death1 ();
};

//============================================================================


/*QUAKED monster_shambler (1 0 0) (-32 -32 -24) (32 32 64) Ambush
*/
void() monster_shambler =
{
	if (deathmatch)
	{
		remove(self);
		return;
	}
	precache_model (&quot;progs/shambler.mdl&quot;);
	precache_model (&quot;progs/s_light.mdl&quot;);
	precache_model (&quot;progs/h_shams.mdl&quot;);
	precache_model (&quot;progs/bolt.mdl&quot;);
	
	precache_sound (&quot;shambler/sattck1.wav&quot;);
	precache_sound (&quot;shambler/sboom.wav&quot;);
	precache_sound (&quot;shambler/sdeath.wav&quot;);
	precache_sound (&quot;shambler/shurt2.wav&quot;);
	precache_sound (&quot;shambler/sidle.wav&quot;);
	precache_sound (&quot;shambler/ssight.wav&quot;);
	precache_sound (&quot;shambler/melee1.wav&quot;);
	precache_sound (&quot;shambler/melee2.wav&quot;);
	precache_sound (&quot;shambler/smack.wav&quot;);

	self.solid = SOLID_SLIDEBOX;
	self.movetype = MOVETYPE_STEP;
	setmodel (self, &quot;progs/shambler.mdl&quot;);

	setsize (self, VEC_HULL2_MIN, VEC_HULL2_MAX);
	self.health = 600;

	self.th_stand = sham_stand1;
	self.th_walk = sham_walk1;
	self.th_run = sham_run1;
	self.th_die = sham_die;
	self.th_melee = sham_melee;
	self.th_missile = sham_magic1;
	self.th_pain = sham_pain;
	
	walkmonster_start();
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>mdvpyonmla8lei4ncadnyozp4v9bo7j</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>showpause</title>
    <ns>0</ns>
    <id>116</id>
    <revision>
      <id>190</id>
      <timestamp>2007-10-31T00:33:02Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=showpause |default-value=1 |saved-to-config=no }} This cvar toggle the display if the text &quot;pause&quot; when the game is paused. If sho...</comment>
      <text xml:space="preserve" bytes="424">{{lowercase-underscores}}{{Infobox Console variable
|name=showpause
|default-value=1
|saved-to-config=no
}}
This cvar toggle the display if the text &quot;pause&quot; when the game is paused. If showpause = 0 you cant see the sign. If showpause = 1 you can see the sign if the game is paused.

(I guess the only real use for this is if you are going to take screenshots, since the game normaly never is paused.)

{{Console variables}}</text>
      <sha1>00iwt9t8xxrk545iryh2x5ndl0dujek</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2614</id>
      <parentid>190</parentid>
      <timestamp>2013-03-29T14:22:19Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Showpause]] to [[showpause]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="424">{{lowercase-underscores}}{{Infobox Console variable
|name=showpause
|default-value=1
|saved-to-config=no
}}
This cvar toggle the display if the text &quot;pause&quot; when the game is paused. If showpause = 0 you cant see the sign. If showpause = 1 you can see the sign if the game is paused.

(I guess the only real use for this is if you are going to take screenshots, since the game normaly never is paused.)

{{Console variables}}</text>
      <sha1>00iwt9t8xxrk545iryh2x5ndl0dujek</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>showram</title>
    <ns>0</ns>
    <id>115</id>
    <revision>
      <id>189</id>
      <timestamp>2007-10-31T00:32:23Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=showram |default-value=1 |saved-to-config=no }} This cvar displays a ram icon in the upper left corner of the screen, indicating t...</comment>
      <text xml:space="preserve" bytes="242">{{lowercase-underscores}}{{Infobox Console variable
|name=showram
|default-value=1
|saved-to-config=no
}}
This cvar displays a ram icon in the upper left corner of the screen, indicating that you are running low on ram.

{{Console variables}}</text>
      <sha1>0e6tqfb07mstamd2sr55vf43jk1wiza</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2616</id>
      <parentid>189</parentid>
      <timestamp>2013-03-29T14:22:20Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Showram]] to [[showram]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="242">{{lowercase-underscores}}{{Infobox Console variable
|name=showram
|default-value=1
|saved-to-config=no
}}
This cvar displays a ram icon in the upper left corner of the screen, indicating that you are running low on ram.

{{Console variables}}</text>
      <sha1>0e6tqfb07mstamd2sr55vf43jk1wiza</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>showturtle</title>
    <ns>0</ns>
    <id>114</id>
    <revision>
      <id>188</id>
      <timestamp>2007-10-31T00:31:33Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=showturtle |default-value=0 |saved-to-config=no }} This cvar displays a turtle icon in the upper left corner of the screen, indica...</comment>
      <text xml:space="preserve" bytes="346">{{lowercase-underscores}}{{Infobox Console variable
|name=showturtle
|default-value=0
|saved-to-config=no
}}
This cvar displays a turtle icon in the upper left corner of the screen, indicating that framerate is horribly low (around 0-8fps).

With modern systems these days, you'll probably never encounter the turtle, ever.

{{Console variables}}</text>
      <sha1>8q43fdiyx0ev54trs6cuf467ri3pq0a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2618</id>
      <parentid>188</parentid>
      <timestamp>2013-03-29T14:22:20Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Showturtle]] to [[showturtle]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="346">{{lowercase-underscores}}{{Infobox Console variable
|name=showturtle
|default-value=0
|saved-to-config=no
}}
This cvar displays a turtle icon in the upper left corner of the screen, indicating that framerate is horribly low (around 0-8fps).

With modern systems these days, you'll probably never encounter the turtle, ever.

{{Console variables}}</text>
      <sha1>8q43fdiyx0ev54trs6cuf467ri3pq0a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>skill</title>
    <ns>0</ns>
    <id>113</id>
    <revision>
      <id>186</id>
      <timestamp>2007-10-31T00:30:25Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variables |name=skill |default-value=1 |saved-to-config=no }} Skill is the difficulty level to play Quake in.  *0 = Easy *1 = Normal *2 = Hard *3...</comment>
      <text xml:space="preserve" bytes="295">{{lowercase-underscores}}{{Infobox Console variables
|name=skill
|default-value=1
|saved-to-config=no
}}
Skill is the difficulty level to play Quake in.

*0 = Easy
*1 = Normal
*2 = Hard
*3 = Nightmare

Default: 1 (Normal)

You must restart the level to enable the changes.

{{Console variables}}</text>
      <sha1>5goaxg87cpf4k0jr8ma9h4r0toifdcc</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>187</id>
      <parentid>186</parentid>
      <timestamp>2007-10-31T00:30:30Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="294">{{lowercase-underscores}}{{Infobox Console variable
|name=skill
|default-value=1
|saved-to-config=no
}}
Skill is the difficulty level to play Quake in.

*0 = Easy
*1 = Normal
*2 = Hard
*3 = Nightmare

Default: 1 (Normal)

You must restart the level to enable the changes.

{{Console variables}}</text>
      <sha1>3ntyn3w32mqw7gg9wxsn3wukfekayds</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2381</id>
      <parentid>187</parentid>
      <timestamp>2013-03-28T14:56:34Z</timestamp>
      <contributor>
        <username>Spirit</username>
        <id>16</id>
      </contributor>
      <minor/>
      <comment>Spirit moved page [[Skill]] to [[skill]]</comment>
      <text xml:space="preserve" bytes="294">{{lowercase-underscores}}{{Infobox Console variable
|name=skill
|default-value=1
|saved-to-config=no
}}
Skill is the difficulty level to play Quake in.

*0 = Easy
*1 = Normal
*2 = Hard
*3 = Nightmare

Default: 1 (Normal)

You must restart the level to enable the changes.

{{Console variables}}</text>
      <sha1>3ntyn3w32mqw7gg9wxsn3wukfekayds</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>slipgate</title>
    <ns>0</ns>
    <id>745</id>
    <revision>
      <id>2128</id>
      <timestamp>2013-03-25T23:24:42Z</timestamp>
      <contributor>
        <username>Text Fish</username>
        <id>36</id>
      </contributor>
      <comment>Created page with &quot;A slipgate is a mechanical/computerized means of travelling between Quake's many dimensions. They're most commonly found in Base themed levels and usually consist of a large h...&quot;</comment>
      <text xml:space="preserve" bytes="525">A slipgate is a mechanical/computerized means of travelling between Quake's many dimensions. They're most commonly found in Base themed levels and usually consist of a large humming and glowing machine (pictured) which leads to a destination pad in an alternate dimension (the floor pad in front of the big machine).

Quake lore is far from conclusive, but it is often mooted that the slipgates are a the human invention which first allowed Quake's forces to enter the human world and vice versa.

[[File:quake1slipgate.png]]</text>
      <sha1>81arujsspro58hoitiinz3yeag2el4r</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2129</id>
      <parentid>2128</parentid>
      <timestamp>2013-03-25T23:25:39Z</timestamp>
      <contributor>
        <username>Text Fish</username>
        <id>36</id>
      </contributor>
      <text xml:space="preserve" bytes="525">A slipgate is a mechanical/computerized means of travelling between Quake's many dimensions. They're most commonly found in Base themed levels and usually consist of a large humming and glowing machine (pictured) which leads to a destination pad (the floor pad in front of the big machine) in an alternate dimension.

Quake lore is far from conclusive, but it is often mooted that the slipgates are a the human invention which first allowed Quake's forces to enter the human world and vice versa.

[[File:quake1slipgate.png]]</text>
      <sha1>037mpvicduorj8ef9iv6g6adjr5aqxp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2130</id>
      <parentid>2129</parentid>
      <timestamp>2013-03-25T23:26:30Z</timestamp>
      <contributor>
        <username>Text Fish</username>
        <id>36</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="521">A slipgate is a mechanical/computerized means of travelling between Quake's many dimensions. They're most commonly found in Base themed levels and usually consist of a large humming and glowing machine (pictured) which leads to a destination pad (the floor pad in front of the big machine) in an alternate dimension.

Quake lore is far from conclusive, but it is often mooted that the slipgates are a human invention which first allowed Quake's forces to enter the human world and vice versa.

[[File:quake1slipgate.png]]</text>
      <sha1>9y09qitqnqvdmx2w6scyysn69dymv2z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>snd mixahead</title>
    <ns>0</ns>
    <id>54</id>
    <revision>
      <id>74</id>
      <timestamp>2007-10-30T19:29:58Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{underscore-lowercase}}  Sets the time (in seconds) to mix the sound that much ahead. Should only be increased under really bad framerates.</comment>
      <text xml:space="preserve" bytes="140">{{underscore-lowercase}}

Sets the time (in seconds) to mix the sound that much ahead. Should only be increased under really bad framerates.</text>
      <sha1>kp1aj5tsypjskv7xvtdijyc0cfq1ih3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>76</id>
      <parentid>74</parentid>
      <timestamp>2007-10-30T19:31:58Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="152">{{underscore-lowercase-underscores}}

Sets the time (in seconds) to mix the sound that much ahead. Should only be increased under really bad framerates.</text>
      <sha1>5an0113u4ifoqbypcq98kkmne8sbl3h</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>78</id>
      <parentid>76</parentid>
      <timestamp>2007-10-30T19:38:07Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="151">{{underscore-lowercase-underscores}}
Sets the time (in seconds) to mix the sound that much ahead. Should only be increased under really bad framerates.</text>
      <sha1>2dg6gn5d92t309tn5po61tb9kzbkll5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>89</id>
      <parentid>78</parentid>
      <timestamp>2007-10-30T19:47:50Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="183">{{underscore-lowercase-underscores}}
Sets the time (in seconds) to mix the sound that much ahead. Should only be increased under really bad framerates.

[[Category:Console variables]]</text>
      <sha1>eupj7n4jn8ok8l1n8rr7jy0eo5ccacv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>92</id>
      <parentid>89</parentid>
      <timestamp>2007-10-30T19:56:21Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="174">{{underscore-lowercase-underscores}}
Sets the time (in seconds) to mix the sound that much ahead. Should only be increased under really bad framerates.

{{Console variables}}</text>
      <sha1>s6cu5vq7apyddhbjsiuw90g2vh7yu02</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>144</id>
      <parentid>92</parentid>
      <timestamp>2007-10-30T22:54:52Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <text xml:space="preserve" bytes="793">{{underscore-lowercase-underscores}}{{Infobox Console variable
|name=_snd_mixahead
|default-value=0.1
|saved-to-config=yes
}}
Sets how far into the future to mix the sound. Every frame, the sound is mixed up to a certain point, under the assumption that the next frame will arrive before the entire mixed buffer of sound is played. So with the default value of 0.1 seconds, if your framerate dips below 10 fps, it will run off the end of the sound buffer and you'll get stuttering sound. To fix this, increase the value (e.g. a value of 0.2 will handle as low as 5 fps before stuttering). However, increasing the mixahead time means the CPU has to do that much more work mixing more sound (thus possibly lowering your framerate, defeating the purpose), so be reasonable.

{{Console variables}}</text>
      <sha1>9ijskxwzn6khp7plpho165w3baliemx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2620</id>
      <parentid>144</parentid>
      <timestamp>2013-03-29T14:22:20Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Snd mixahead]] to [[snd mixahead]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="793">{{underscore-lowercase-underscores}}{{Infobox Console variable
|name=_snd_mixahead
|default-value=0.1
|saved-to-config=yes
}}
Sets how far into the future to mix the sound. Every frame, the sound is mixed up to a certain point, under the assumption that the next frame will arrive before the entire mixed buffer of sound is played. So with the default value of 0.1 seconds, if your framerate dips below 10 fps, it will run off the end of the sound buffer and you'll get stuttering sound. To fix this, increase the value (e.g. a value of 0.2 will handle as low as 5 fps before stuttering). However, increasing the mixahead time means the CPU has to do that much more work mixing more sound (thus possibly lowering your framerate, defeating the purpose), so be reasonable.

{{Console variables}}</text>
      <sha1>9ijskxwzn6khp7plpho165w3baliemx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>snd show</title>
    <ns>0</ns>
    <id>112</id>
    <revision>
      <id>184</id>
      <timestamp>2007-10-31T00:24:27Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase_underscores}}{{Infobox Console variable |name=snd_show |default-value=0 |saved-to-config=no }} Debugging tool. When enabled, continuously prints to the console the number of so...</comment>
      <text xml:space="preserve" bytes="304">{{lowercase_underscores}}{{Infobox Console variable
|name=snd_show
|default-value=0
|saved-to-config=no
}}
Debugging tool. When enabled, continuously prints to the console the number of sounds playing at the moment, like this:

 -- 0 --
 -- 0 --
 -- 0 --
 -- 1 --
 -- 1 --
 -- 1 --

{{Console variables}}</text>
      <sha1>t56t1zb3kornjmkh3suzosg7h42xyp1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>185</id>
      <parentid>184</parentid>
      <timestamp>2007-10-31T00:24:40Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="304">{{lowercase-underscores}}{{Infobox Console variable
|name=snd_show
|default-value=0
|saved-to-config=no
}}
Debugging tool. When enabled, continuously prints to the console the number of sounds playing at the moment, like this:

 -- 0 --
 -- 0 --
 -- 0 --
 -- 1 --
 -- 1 --
 -- 1 --

{{Console variables}}</text>
      <sha1>f2ku4itnpzngqu0iyv4259rh6j4zqq7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2622</id>
      <parentid>185</parentid>
      <timestamp>2013-03-29T14:22:21Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Snd show]] to [[snd show]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="304">{{lowercase-underscores}}{{Infobox Console variable
|name=snd_show
|default-value=0
|saved-to-config=no
}}
Debugging tool. When enabled, continuously prints to the console the number of sounds playing at the moment, like this:

 -- 0 --
 -- 0 --
 -- 0 --
 -- 1 --
 -- 1 --
 -- 1 --

{{Console variables}}</text>
      <sha1>f2ku4itnpzngqu0iyv4259rh6j4zqq7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>soldier.qc</title>
    <ns>0</ns>
    <id>858</id>
    <revision>
      <id>2479</id>
      <timestamp>2013-03-29T11:20:54Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for the [[Grunt]] [[Monsters | monster]].   &lt;pre&gt; /* ==============================================================================  SO...&quot;</comment>
      <text xml:space="preserve" bytes="9935">This [[Quake-C]] file contains the code for the [[Grunt]] [[Monsters | monster]].


&lt;pre&gt;
/*
==============================================================================

SOLDIER / PLAYER

==============================================================================
*/

$cd id1/models/soldier3
$origin 0 -6 24
$base base		
$skin skin

$frame stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8

$frame death1 death2 death3 death4 death5 death6 death7 death8
$frame death9 death10

$frame deathc1 deathc2 deathc3 deathc4 deathc5 deathc6 deathc7 deathc8
$frame deathc9 deathc10 deathc11

$frame load1 load2 load3 load4 load5 load6 load7 load8 load9 load10 load11

$frame pain1 pain2 pain3 pain4 pain5 pain6

$frame painb1 painb2 painb3 painb4 painb5 painb6 painb7 painb8 painb9 painb10
$frame painb11 painb12 painb13 painb14

$frame painc1 painc2 painc3 painc4 painc5 painc6 painc7 painc8 painc9 painc10
$frame painc11 painc12 painc13

$frame run1 run2 run3 run4 run5 run6 run7 run8

$frame shoot1 shoot2 shoot3 shoot4 shoot5 shoot6 shoot7 shoot8 shoot9

$frame prowl_1 prowl_2 prowl_3 prowl_4 prowl_5 prowl_6 prowl_7 prowl_8
$frame prowl_9 prowl_10 prowl_11 prowl_12 prowl_13 prowl_14 prowl_15 prowl_16
$frame prowl_17 prowl_18 prowl_19 prowl_20 prowl_21 prowl_22 prowl_23 prowl_24

/*
==============================================================================
SOLDIER CODE
==============================================================================
*/

void() army_fire;

void()	army_stand1	=[	$stand1,	army_stand2	] {ai_stand();};
void()	army_stand2	=[	$stand2,	army_stand3	] {ai_stand();};
void()	army_stand3	=[	$stand3,	army_stand4	] {ai_stand();};
void()	army_stand4	=[	$stand4,	army_stand5	] {ai_stand();};
void()	army_stand5	=[	$stand5,	army_stand6	] {ai_stand();};
void()	army_stand6	=[	$stand6,	army_stand7	] {ai_stand();};
void()	army_stand7	=[	$stand7,	army_stand8	] {ai_stand();};
void()	army_stand8	=[	$stand8,	army_stand1	] {ai_stand();};

void()	army_walk1	=[	$prowl_1,	army_walk2	] {
if (random() &lt; 0.2)
	sound (self, CHAN_VOICE, &quot;soldier/idle.wav&quot;, 1, ATTN_IDLE);
ai_walk(1);};
void()	army_walk2	=[	$prowl_2,	army_walk3	] {ai_walk(1);};
void()	army_walk3	=[	$prowl_3,	army_walk4	] {ai_walk(1);};
void()	army_walk4	=[	$prowl_4,	army_walk5	] {ai_walk(1);};
void()	army_walk5	=[	$prowl_5,	army_walk6	] {ai_walk(2);};
void()	army_walk6	=[	$prowl_6,	army_walk7	] {ai_walk(3);};
void()	army_walk7	=[	$prowl_7,	army_walk8	] {ai_walk(4);};
void()	army_walk8	=[	$prowl_8,	army_walk9	] {ai_walk(4);};
void()	army_walk9	=[	$prowl_9,	army_walk10	] {ai_walk(2);};
void()	army_walk10	=[	$prowl_10,	army_walk11	] {ai_walk(2);};
void()	army_walk11	=[	$prowl_11,	army_walk12	] {ai_walk(2);};
void()	army_walk12	=[	$prowl_12,	army_walk13	] {ai_walk(1);};
void()	army_walk13	=[	$prowl_13,	army_walk14	] {ai_walk(0);};
void()	army_walk14	=[	$prowl_14,	army_walk15	] {ai_walk(1);};
void()	army_walk15	=[	$prowl_15,	army_walk16	] {ai_walk(1);};
void()	army_walk16	=[	$prowl_16,	army_walk17	] {ai_walk(1);};
void()	army_walk17	=[	$prowl_17,	army_walk18	] {ai_walk(3);};
void()	army_walk18	=[	$prowl_18,	army_walk19	] {ai_walk(3);};
void()	army_walk19	=[	$prowl_19,	army_walk20	] {ai_walk(3);};
void()	army_walk20	=[	$prowl_20,	army_walk21	] {ai_walk(3);};
void()	army_walk21	=[	$prowl_21,	army_walk22	] {ai_walk(2);};
void()	army_walk22	=[	$prowl_22,	army_walk23	] {ai_walk(1);};
void()	army_walk23	=[	$prowl_23,	army_walk24	] {ai_walk(1);};
void()	army_walk24	=[	$prowl_24,	army_walk1	] {ai_walk(1);};

void()	army_run1	=[	$run1,		army_run2	] {
if (random() &lt; 0.2)
	sound (self, CHAN_VOICE, &quot;soldier/idle.wav&quot;, 1, ATTN_IDLE);
ai_run(11);};
void()	army_run2	=[	$run2,		army_run3	] {ai_run(15);};
void()	army_run3	=[	$run3,		army_run4	] {ai_run(10);};
void()	army_run4	=[	$run4,		army_run5	] {ai_run(10);};
void()	army_run5	=[	$run5,		army_run6	] {ai_run(8);};
void()	army_run6	=[	$run6,		army_run7	] {ai_run(15);};
void()	army_run7	=[	$run7,		army_run8	] {ai_run(10);};
void()	army_run8	=[	$run8,		army_run1	] {ai_run(8);};

void()	army_atk1	=[	$shoot1,	army_atk2	] {ai_face();};
void()	army_atk2	=[	$shoot2,	army_atk3	] {ai_face();};
void()	army_atk3	=[	$shoot3,	army_atk4	] {ai_face();};
void()	army_atk4	=[	$shoot4,	army_atk5	] {ai_face();};
void()	army_atk5	=[	$shoot5,	army_atk6	] {ai_face();army_fire();
self.effects = self.effects | EF_MUZZLEFLASH;};
void()	army_atk6	=[	$shoot6,	army_atk7	] {ai_face();};
void()	army_atk7	=[	$shoot7,	army_atk8	] {ai_face();SUB_CheckRefire (army_atk1);};
void()	army_atk8	=[	$shoot8,	army_atk9	] {ai_face();};
void()	army_atk9	=[	$shoot9,	army_run1	] {ai_face();};


void()	army_pain1	=[	$pain1,		army_pain2	] {};
void()	army_pain2	=[	$pain2,		army_pain3	] {};
void()	army_pain3	=[	$pain3,		army_pain4	] {};
void()	army_pain4	=[	$pain4,		army_pain5	] {};
void()	army_pain5	=[	$pain5,		army_pain6	] {};
void()	army_pain6	=[	$pain6,		army_run1	] {ai_pain(1);};

void()	army_painb1	=[	$painb1,	army_painb2	] {};
void()	army_painb2	=[	$painb2,	army_painb3	] {ai_painforward(13);};
void()	army_painb3	=[	$painb3,	army_painb4	] {ai_painforward(9);};
void()	army_painb4	=[	$painb4,	army_painb5	] {};
void()	army_painb5	=[	$painb5,	army_painb6	] {};
void()	army_painb6	=[	$painb6,	army_painb7	] {};
void()	army_painb7	=[	$painb7,	army_painb8	] {};
void()	army_painb8	=[	$painb8,	army_painb9	] {};
void()	army_painb9	=[	$painb9,	army_painb10] {};
void()	army_painb10=[	$painb10,	army_painb11] {};
void()	army_painb11=[	$painb11,	army_painb12] {};
void()	army_painb12=[	$painb12,	army_painb13] {ai_pain(2);};
void()	army_painb13=[	$painb13,	army_painb14] {};
void()	army_painb14=[	$painb14,	army_run1	] {};

void()	army_painc1	=[	$painc1,	army_painc2	] {};
void()	army_painc2	=[	$painc2,	army_painc3	] {ai_pain(1);};
void()	army_painc3	=[	$painc3,	army_painc4	] {};
void()	army_painc4	=[	$painc4,	army_painc5	] {};
void()	army_painc5	=[	$painc5,	army_painc6	] {ai_painforward(1);};
void()	army_painc6	=[	$painc6,	army_painc7	] {ai_painforward(1);};
void()	army_painc7	=[	$painc7,	army_painc8	] {};
void()	army_painc8	=[	$painc8,	army_painc9	] {ai_pain(1);};
void()	army_painc9	=[	$painc9,	army_painc10] {ai_painforward(4);};
void()	army_painc10=[	$painc10,	army_painc11] {ai_painforward(3);};
void()	army_painc11=[	$painc11,	army_painc12] {ai_painforward(6);};
void()	army_painc12=[	$painc12,	army_painc13] {ai_painforward(8);};
void()	army_painc13=[	$painc13,	army_run1] {};

void(entity attacker, float damage)	army_pain =
{
	local float r;
	
	if (self.pain_finished &gt; time)
		return;

	r = random();

	if (r &lt; 0.2)
	{
		self.pain_finished = time + 0.6;
		army_pain1 ();
		sound (self, CHAN_VOICE, &quot;soldier/pain1.wav&quot;, 1, ATTN_NORM);
	}
	else if (r &lt; 0.6)
	{
		self.pain_finished = time + 1.1;
		army_painb1 ();
		sound (self, CHAN_VOICE, &quot;soldier/pain2.wav&quot;, 1, ATTN_NORM);
	}
	else
	{
		self.pain_finished = time + 1.1;
		army_painc1 ();
		sound (self, CHAN_VOICE, &quot;soldier/pain2.wav&quot;, 1, ATTN_NORM);
	}
};


void() army_fire =
{
	local	vector	dir;
	local	entity	en;
	
	ai_face();
	
	sound (self, CHAN_WEAPON, &quot;soldier/sattck1.wav&quot;, 1, ATTN_NORM);	

// fire somewhat behind the player, so a dodging player is harder to hit
	en = self.enemy;
	
	dir = en.origin - en.velocity*0.2;
	dir = normalize (dir - self.origin);
	
	FireBullets (4, dir, '0.1 0.1 0');
};



void()	army_die1	=[	$death1,	army_die2	] {};
void()	army_die2	=[	$death2,	army_die3	] {};
void()	army_die3	=[	$death3,	army_die4	]
{self.solid = SOLID_NOT;self.ammo_shells = 5;DropBackpack();};
void()	army_die4	=[	$death4,	army_die5	] {};
void()	army_die5	=[	$death5,	army_die6	] {};
void()	army_die6	=[	$death6,	army_die7	] {};
void()	army_die7	=[	$death7,	army_die8	] {};
void()	army_die8	=[	$death8,	army_die9	] {};
void()	army_die9	=[	$death9,	army_die10	] {};
void()	army_die10	=[	$death10,	army_die10	] {};

void()	army_cdie1	=[	$deathc1,	army_cdie2	] {};
void()	army_cdie2	=[	$deathc2,	army_cdie3	] {ai_back(5);};
void()	army_cdie3	=[	$deathc3,	army_cdie4	]
{self.solid = SOLID_NOT;self.ammo_shells = 5;DropBackpack();ai_back(4);};
void()	army_cdie4	=[	$deathc4,	army_cdie5	] {ai_back(13);};
void()	army_cdie5	=[	$deathc5,	army_cdie6	] {ai_back(3);};
void()	army_cdie6	=[	$deathc6,	army_cdie7	] {ai_back(4);};
void()	army_cdie7	=[	$deathc7,	army_cdie8	] {};
void()	army_cdie8	=[	$deathc8,	army_cdie9	] {};
void()	army_cdie9	=[	$deathc9,	army_cdie10	] {};
void()	army_cdie10	=[	$deathc10,	army_cdie11	] {};
void()	army_cdie11	=[	$deathc11,	army_cdie11	] {};


void() army_die =
{
// check for gib
	if (self.health &lt; -35)
	{
		sound (self, CHAN_VOICE, &quot;player/udeath.wav&quot;, 1, ATTN_NORM);
		ThrowHead (&quot;progs/h_guard.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib1.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib2.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib3.mdl&quot;, self.health);
		return;
	}

// regular death
	sound (self, CHAN_VOICE, &quot;soldier/death1.wav&quot;, 1, ATTN_NORM);
	if (random() &lt; 0.5)
		army_die1 ();
	else
		army_cdie1 ();
};


/*QUAKED monster_army (1 0 0) (-16 -16 -24) (16 16 40) Ambush
*/
void() monster_army =
{	
	if (deathmatch)
	{
		remove(self);
		return;
	}
	precache_model (&quot;progs/soldier.mdl&quot;);
	precache_model (&quot;progs/h_guard.mdl&quot;);
	precache_model (&quot;progs/gib1.mdl&quot;);
	precache_model (&quot;progs/gib2.mdl&quot;);
	precache_model (&quot;progs/gib3.mdl&quot;);

	precache_sound (&quot;soldier/death1.wav&quot;);
	precache_sound (&quot;soldier/idle.wav&quot;);
	precache_sound (&quot;soldier/pain1.wav&quot;);
	precache_sound (&quot;soldier/pain2.wav&quot;);
	precache_sound (&quot;soldier/sattck1.wav&quot;);
	precache_sound (&quot;soldier/sight1.wav&quot;);

	precache_sound (&quot;player/udeath.wav&quot;);		// gib death


	self.solid = SOLID_SLIDEBOX;
	self.movetype = MOVETYPE_STEP;

	setmodel (self, &quot;progs/soldier.mdl&quot;);

	setsize (self, '-16 -16 -24', '16 16 40');
	self.health = 30;

	self.th_stand = army_stand1;
	self.th_walk = army_walk1;
	self.th_run = army_run1;
	self.th_missile = army_atk1;
	self.th_pain = army_pain;
	self.th_die = army_die;

	walkmonster_start ();
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>5xn9z82ga6jkpocm83a3dlmqgmmscxv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>sound</title>
    <ns>0</ns>
    <id>619</id>
    <revision>
      <id>1719</id>
      <timestamp>2013-03-24T22:49:21Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;====Syntax:==== &lt;code&gt;void sound(entity e, float channel, string sample, float volume, float attenuation)&lt;/code&gt;  This function is used for playing a sound. ====Parameters:===...&quot;</comment>
      <text xml:space="preserve" bytes="911">====Syntax:====
&lt;code&gt;void sound(entity e, float channel, string sample, float volume, float attenuation)&lt;/code&gt;

This function is used for playing a sound.
====Parameters:====
:&lt;code&gt;channel&lt;/code&gt; - (integer) The channel to play the sound on.  A sound played on the same channel as another will override the previous one.
:&lt;code&gt;sample&lt;/code&gt; - (string) The path to the sound file.  Unlike models, sounds have /sound/ already present, so do not include that directory in the pathname.
:&lt;code&gt;volume&lt;/code&gt; - (float) A value between 0.0 and 1.0 that controls the volume of the sound.  0.0 is silent, 1.0 is full volume.
:&lt;code&gt;attenuation&lt;/code&gt; - (float) A value greater than or equal to 0 and less than 4 that controls how fast the sound's volume attenuated from distance.  0 can be heard everywhere in the level and 3.999 has a radius of about 250 units.
====Returns:====
:void

[[Category:QuakeC Function]]</text>
      <sha1>2uyxzrju221pq8vervvtbcapmfg9fd5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1725</id>
      <parentid>1719</parentid>
      <timestamp>2013-03-24T22:57:00Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="902">====Syntax:====
&lt;code&gt;void sound(entity e, float channel, string sample, float volume, float attenuation)&lt;/code&gt;

This function is used for playing a sound.
====Parameters:====
:&lt;code&gt;channel&lt;/code&gt; - The channel to play the sound on.  A sound played on the same channel as another will override the previous one.  Use integer values only.
:&lt;code&gt;sample&lt;/code&gt; - The path to the sound file.  Unlike models, sounds have /sound/ already present, so do not include that directory in the pathname.
:&lt;code&gt;volume&lt;/code&gt; - A value between 0.0 and 1.0 that controls the volume of the sound.  0.0 is silent, 1.0 is full volume.
:&lt;code&gt;attenuation&lt;/code&gt; - A value greater than or equal to 0 and less than 4 that controls how fast the sound's volume attenuated from distance.  0 can be heard everywhere in the level and 3.999 has a radius of about 250 units.
====Returns:====
:void

[[Category:QuakeC Function]]</text>
      <sha1>majq9twot1arhptsaeackqas1lkunoy</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2345</id>
      <parentid>1725</parentid>
      <timestamp>2013-03-27T02:25:00Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="1344">====Syntax:====
&lt;code&gt;void sound(entity e, float channel, string sample, float volume, float attenuation)&lt;/code&gt;

This function is used for playing a sound.
====Parameters:====
:&lt;code&gt;channel&lt;/code&gt; - The channel to play the sound on.  A sound played on the same channel as another will override the previous one.  Use integer values only.
:&lt;code&gt;sample&lt;/code&gt; - The path to the sound file.  Unlike models, sounds have /sound/ already present, so do not include that directory in the pathname.
:&lt;code&gt;volume&lt;/code&gt; - A value between 0.0 and 1.0 that controls the volume of the sound.  0.0 is silent, 1.0 is full volume.
:&lt;code&gt;attenuation&lt;/code&gt; - A value greater than or equal to 0 and less than 4 that controls how fast the sound's volume attenuated from distance.  0 can be heard everywhere in the level, 1 can be heard up to 1000 units and 3.999 has a radius of about 250 units.
====Returns:====
:void
====Other Details:====
Sounds started outside the hearing range of the player will not be registered by the engine, so if the player later moves in to hearing range, the sound will not be heard.
Sounds that are looped will continue playing, but if the player moves out of hearing range, the engine will eventually stop playing it and when the player moves back into hearing range, it will no longer be there.

[[Category:QuakeC Function]]</text>
      <sha1>s7ie9x75zwqiynuz60u4j6z1vzkv6by</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>spawn (function)</title>
    <ns>0</ns>
    <id>625</id>
    <revision>
      <id>1735</id>
      <timestamp>2013-03-24T23:07:55Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;====Syntax:==== &lt;code&gt;vector spawn()&lt;/code&gt;  Used to create a new entity ====Parameters:==== :None ====Returns:==== :A new entity   [[Category:QuakeC Function]]&quot;</comment>
      <text xml:space="preserve" bytes="160">====Syntax:====
&lt;code&gt;vector spawn()&lt;/code&gt;

Used to create a new entity
====Parameters:====
:None
====Returns:====
:A new entity


[[Category:QuakeC Function]]</text>
      <sha1>3wbziqr62cjvez7nwkmesncaoxywv5a</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1736</id>
      <parentid>1735</parentid>
      <timestamp>2013-03-24T23:08:05Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <text xml:space="preserve" bytes="160">====Syntax:====
&lt;code&gt;entity spawn()&lt;/code&gt;

Used to create a new entity
====Parameters:====
:None
====Returns:====
:A new entity


[[Category:QuakeC Function]]</text>
      <sha1>3fopj0qxd88wnc9dll5z89mo3w919dx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>sprint</title>
    <ns>0</ns>
    <id>795</id>
    <revision>
      <id>2338</id>
      <timestamp>2013-03-26T23:45:09Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;====Syntax:==== &lt;code&gt;void sprint(entity client, string s)&lt;/code&gt;  Sends text to a single player.  This is used by items to display pickup text.  '''client''' must be a player...&quot;</comment>
      <text xml:space="preserve" bytes="347">====Syntax:====
&lt;code&gt;void sprint(entity client, string s)&lt;/code&gt;

Sends text to a single player.  This is used by items to display pickup text.  '''client''' must be a player.
====Parameters:====
:&lt;code&gt;client&lt;/code&gt; - The client to print the string to.
:&lt;code&gt;s&lt;/code&gt; - The string to print.
====Returns:====
:void


[[Category:QuakeC Function]]</text>
      <sha1>7jws6mcmsh7egwwb460e5vw4m4yvcqm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>sprites.qc</title>
    <ns>0</ns>
    <id>859</id>
    <revision>
      <id>2480</id>
      <timestamp>2013-03-29T11:22:41Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for the [[Sprite | sprites]].   &lt;pre&gt; // these are the only sprites still in the game...  $spritename s_explod $type vp_parallel $load ...&quot;</comment>
      <text xml:space="preserve" bytes="546">This [[Quake-C]] file contains the code for the [[Sprite | sprites]].


&lt;pre&gt;
// these are the only sprites still in the game...

$spritename s_explod
$type vp_parallel
$load id1/gfx/sprites/explod03.lbm
$frame	24	24	56	56
$frame	120	24	56	56
$frame	216	24	56	56
$frame	24	88	56	56
$frame	120	88	56	56
$frame	216	88	56	56


$spritename s_bubble
$type vp_parallel
$load id1/gfx/sprites/bubble.lbm
$frame	16	16	16	16
$frame	40	16	16	16


$spritename s_light
$type vp_parallel
$load id1/gfx/sprites/light.lbm
$frame	104	32	32	32
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>ctufi7fl4v2t4f8jx4g6jirperjyejz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>start</title>
    <ns>0</ns>
    <id>660</id>
    <revision>
      <id>1985</id>
      <timestamp>2013-03-25T10:29:48Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created basic stub with level info. Formatting is shit. More information would be good. Also, should all maps just be categorized as a level instead of sp/dm. The supported modes could be listed in the info</comment>
      <text xml:space="preserve" bytes="161">{{Infobox_singleplayer_map
| title = Introduction
| filename = start
| image = start.jpg
| author = [[John Romero]]
| monsters = 0
| secrets = 0
| cdtrack = 4
}}</text>
      <sha1>9742efqw7nf1gh6alg74v9dkiol6ok2</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>3011</id>
      <parentid>1985</parentid>
      <timestamp>2013-09-26T05:01:35Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>added a general article for Introduction</comment>
      <text xml:space="preserve" bytes="3589">{{Infobox_singleplayer_map
| title = Introduction
| filename = start
| image = start.jpg
| author = [[John Romero]]
| monsters = 0
| secrets = 0
| cdtrack = 4
}}

'''start - Introduction''' is the first level loaded in a New Game where the player chooses both the difficulty level and the episode to play in. The player returns to Introduction beyond the skill gates after completing each level with a new rune in-hand, allowing the player to complete episodes out of order if desired. The end of episode story text does not account for out of sequence completions.

==Skill Select==
The skill selection is broken up into three hallways, left to right:
* '''Easy''' - The leftmost hallway, the player walks a flat path past stained glass on smooth brick over blue water.
* '''Normal''' - The center hallway, flanked by bloody gargoyle faces, the player walks over ramped metal that covers muddy swamp water.
* '''Hard''' - The right hallway, the ceiling is missing, and the ground separated to reveal lava with lava balls popping out of them. The player must jump over the lava to reach the teleporter under jutting spikes and the moaning gaze of crucified zombies.

==Episode Select==
The episode select halls are all open, unless playing the shareware where all but the first are blocked off by a barrier. Registered users will see these barriers open as they are approached. The episodes are placed sequentially from left to right, each in a theme according to the episode and its place in the story.
* '''Episode One - Dimension of the Doomed''' - The entrance to the first episode is based around the notion of where it all began, the [[e1m1|Slipgate Complex]], and so the surroundings are the base textures and fluorescent lights.
* '''Episode Two - The Realm of Black Magic''' - Torches, blue stone, brown and blue tiles, and a large dragon engraved double door set the medieval castle tone for this episode.
* '''Episode Three - The Netherworld''' - Raw metal, rivets, and zig-zagging 90 degree angled floors hang over lava under an exposed sky with glowing runes.
* '''Episode Four - The Elder World''' - The Elder World is a different beast altogether, wooden slats for stairs revealing stretched skin lanterns lead the player up to a pool that when entered has a surface bottom, a suspended body of water. Falling through the bottom drops the player into an alcove of ancient white stone and wooden pillars, with steps flanked by crucified zombies leading up to the slipgate. It is the only episode hall with a teleporter to exit, or a secret.

==Shub-Niggurath's Pit==
As you complete each episode, the entrance will be blocked by a large stone with runes on them. When you have completed all episodes, the floor between the different halls opens up into a grand and raw cobblestone staircase, winding down into a pit with a slipgate at the bottom and message &quot;Shub-Niggurath awaits you...&quot;

==Secrets==
Though there are no official secrets in Introduction, there is access to a fourth difficulty setting, Nightmare. Enter the hall for The Elder World, enter the pool and press your back against the wall immediately behind you, then break through the bottom surface. You will land on a wooden railing over the area, follow the railing to the left to find a short passage leading to a lava teleporter, stepping through it will select Nightmare difficulty. Just before this teleporter is a stretched skin lantern on the wall, if you shoot it you will see the message &quot;The Well of Wishes awaits you in the [[e2m3|Crypt of Decay]].&quot; which is an allusion to a Commander Keen level.</text>
      <sha1>2prezmqefj8gxaz2rqbvzmf0lrdqmam</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>string</title>
    <ns>0</ns>
    <id>394</id>
    <revision>
      <id>665</id>
      <timestamp>2008-05-07T17:28:15Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: === String type ===   This is used to store character string. Used to indicate file names, or messages to be broadcast to players.   Valid syntax: &quot;maps/jrwiz1.bsp&quot; or &quot;ouch!\
&quot; Use \
 for...</comment>
      <text xml:space="preserve" bytes="382">=== String type ===


This is used to store character string.
Used to indicate file names, or messages to be broadcast to players.
  Valid syntax: &quot;maps/jrwiz1.bsp&quot; or &quot;ouch!\
&quot;
Use \
 for newline.

Note: that character strings cannot be modified, or concatenated. Because they are stored at fixed locations in memory, and if would be postentially troublesome to allow modification.</text>
      <sha1>m9nzdbd5updvksmzf9kd3hty656gzf3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2624</id>
      <parentid>665</parentid>
      <timestamp>2013-03-29T14:22:21Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[String]] to [[string]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="382">=== String type ===


This is used to store character string.
Used to indicate file names, or messages to be broadcast to players.
  Valid syntax: &quot;maps/jrwiz1.bsp&quot; or &quot;ouch!\
&quot;
Use \
 for newline.

Note: that character strings cannot be modified, or concatenated. Because they are stored at fixed locations in memory, and if would be postentially troublesome to allow modification.</text>
      <sha1>m9nzdbd5updvksmzf9kd3hty656gzf3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>stuffcmd</title>
    <ns>0</ns>
    <id>793</id>
    <revision>
      <id>2336</id>
      <timestamp>2013-03-26T23:28:00Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;====Syntax:==== &lt;code&gt;void stuffcmd(entity client, string s)&lt;/code&gt;  Sends text to the console as if it had been typed by the '''client''' entity.  For use with player entitie...&quot;</comment>
      <text xml:space="preserve" bytes="596">====Syntax:====
&lt;code&gt;void stuffcmd(entity client, string s)&lt;/code&gt;

Sends text to the console as if it had been typed by the '''client''' entity.  For use with player entities only.
====Parameters:====
:&lt;code&gt;client&lt;/code&gt; - The entity to send the console text from.
:&lt;code&gt;s&lt;/code&gt; - The text to place on the console.
====Returns:====
:void
====Other Details:====
Note that if you do not add a newline character (&lt;code&gt;\n&lt;/code&gt;), the text will stay on the console until a newline character is entered.  In the case of commands, the commands will not be executed.


[[Category:QuakeC Function]]</text>
      <sha1>e6bqtjnnyf8edwbhowvjs1nhmyocns9</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>subs.qc</title>
    <ns>0</ns>
    <id>860</id>
    <revision>
      <id>2481</id>
      <timestamp>2013-03-29T11:24:15Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for the subroutines used in various [[Entity | entities]].   &lt;pre&gt; void() SUB_Null = {};  void() SUB_Remove = {remove(self);};   /* Qua...&quot;</comment>
      <text xml:space="preserve" bytes="6187">This [[Quake-C]] file contains the code for the subroutines used in various [[Entity | entities]].


&lt;pre&gt;
void() SUB_Null = {};

void() SUB_Remove = {remove(self);};


/*
QuakeEd only writes a single float for angles (bad idea), so up and down are
just constant angles.
*/
vector() SetMovedir =
{
	if (self.angles == '0 -1 0')
		self.movedir = '0 0 1';
	else if (self.angles == '0 -2 0')
		self.movedir = '0 0 -1';
	else
	{
		makevectors (self.angles);
		self.movedir = v_forward;
	}
	
	self.angles = '0 0 0';
};

/*
================
InitTrigger
================
*/
void() InitTrigger =
{
// trigger angles are used for one-way touches.  An angle of 0 is assumed
// to mean no restrictions, so use a yaw of 360 instead.
	if (self.angles != '0 0 0')
		SetMovedir ();
	self.solid = SOLID_TRIGGER;
	setmodel (self, self.model);	// set size and link into world
	self.movetype = MOVETYPE_NONE;
	self.modelindex = 0;
	self.model = &quot;&quot;;
};

/*
=============
SUB_CalcMove

calculate self.velocity and self.nextthink to reach dest from
self.origin traveling at speed
===============
*/
void(entity ent, vector tdest, float tspeed, void() func) SUB_CalcMoveEnt =
{
local entity	stemp;
	stemp = self;
	self = ent;

	SUB_CalcMove (tdest, tspeed, func);
	self = stemp;
};

void(vector tdest, float tspeed, void() func) SUB_CalcMove =
{
local vector	vdestdelta;
local float		len, traveltime;

	if (!tspeed)
		objerror(&quot;No speed is defined!&quot;);

	self.think1 = func;
	self.finaldest = tdest;
	self.think = SUB_CalcMoveDone;

	if (tdest == self.origin)
	{
		self.velocity = '0 0 0';
		self.nextthink = self.ltime + 0.1;
		return;
	}
		
// set destdelta to the vector needed to move
	vdestdelta = tdest - self.origin;
	
// calculate length of vector
	len = vlen (vdestdelta);
	
// divide by speed to get time to reach dest
	traveltime = len / tspeed;

	if (traveltime &lt; 0.1)
	{
		self.velocity = '0 0 0';
		self.nextthink = self.ltime + 0.1;
		return;
	}
	
// set nextthink to trigger a think when dest is reached
	self.nextthink = self.ltime + traveltime;

// scale the destdelta vector by the time spent traveling to get velocity
	self.velocity = vdestdelta * (1/traveltime);	// qcc won't take vec/float	
};

/*
============
After moving, set origin to exact final destination
============
*/
void()  SUB_CalcMoveDone =
{
	setorigin(self, self.finaldest);
	self.velocity = '0 0 0';
	self.nextthink = -1;
	if (self.think1)
		self.think1();
};


/*
=============
SUB_CalcAngleMove

calculate self.avelocity and self.nextthink to reach destangle from
self.angles rotating 

The calling function should make sure self.think is valid
===============
*/
void(entity ent, vector destangle, float tspeed, void() func) SUB_CalcAngleMoveEnt =
{
local entity		stemp;
	stemp = self;
	self = ent;
	SUB_CalcAngleMove (destangle, tspeed, func);
	self = stemp;
};

void(vector destangle, float tspeed, void() func) SUB_CalcAngleMove =
{
local vector	destdelta;
local float		len, traveltime;

	if (!tspeed)
		objerror(&quot;No speed is defined!&quot;);
		
// set destdelta to the vector needed to move
	destdelta = destangle - self.angles;
	
// calculate length of vector
	len = vlen (destdelta);
	
// divide by speed to get time to reach dest
	traveltime = len / tspeed;

// set nextthink to trigger a think when dest is reached
	self.nextthink = self.ltime + traveltime;

// scale the destdelta vector by the time spent traveling to get velocity
	self.avelocity = destdelta * (1 / traveltime);
	
	self.think1 = func;
	self.finalangle = destangle;
	self.think = SUB_CalcAngleMoveDone;
};

/*
============
After rotating, set angle to exact final angle
============
*/
void() SUB_CalcAngleMoveDone =
{
	self.angles = self.finalangle;
	self.avelocity = '0 0 0';
	self.nextthink = -1;
	if (self.think1)
		self.think1();
};


//=============================================================================

void() DelayThink =
{
	activator = self.enemy;
	SUB_UseTargets ();
	remove(self);
};

/*
==============================
SUB_UseTargets

the global &quot;activator&quot; should be set to the entity that initiated the firing.

If self.delay is set, a DelayedUse entity will be created that will actually
do the SUB_UseTargets after that many seconds have passed.

Centerprints any self.message to the activator.

Removes all entities with a targetname that match self.killtarget,
and removes them, so some events can remove other triggers.

Search for (string)targetname in all entities that
match (string)self.target and call their .use function

==============================
*/
void() SUB_UseTargets =
{
	local entity t, stemp, otemp, act;

//
// check for a delay
//
	if (self.delay)
	{
	// create a temp object to fire at a later time
		t = spawn();
		t.classname = &quot;DelayedUse&quot;;
		t.nextthink = time + self.delay;
		t.think = DelayThink;
		t.enemy = activator;
		t.message = self.message;
		t.killtarget = self.killtarget;
		t.target = self.target;
		return;
	}
	
	
//
// print the message
//
	if (activator.classname == &quot;player&quot; &amp;&amp; self.message != &quot;&quot;)
	{
		centerprint (activator, self.message);
		if (!self.noise)
			sound (activator, CHAN_VOICE, &quot;misc/talk.wav&quot;, 1, ATTN_NORM);
	}

//
// kill the killtagets
//
	if (self.killtarget)
	{
		t = world;
		do
		{
			t = find (t, targetname, self.killtarget);
			if (!t)
				return;
			remove (t);
		} while ( 1 );
	}
	
//
// fire targets
//
	if (self.target)
	{
		act = activator;
		t = world;
		do
		{
			t = find (t, targetname, self.target);
			if (!t)
			{
				return;
			}
			stemp = self;
			otemp = other;
			self = t;
			other = stemp;
			if (self.use != SUB_Null)
			{
				if (self.use)
					self.use ();
			}
			self = stemp;
			other = otemp;
			activator = act;
		} while ( 1 );
	}
	

};


/*

in nightmare mode, all attack_finished times become 0
some monsters refire twice automatically

*/

void(float normal) SUB_AttackFinished =
{
	self.cnt = 0;		// refire count for nightmare
	if (skill != 3)
		self.attack_finished = time + normal;
};

float (entity targ) visible;

void (void() thinkst) SUB_CheckRefire =
{
	if (skill != 3)
		return;
	if (self.cnt == 1)
		return;
	if (!visible (self.enemy))
		return;
	self.cnt = 1;
	self.think = thinkst;
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>04zzbpyr1mfhjte8ibg0g1lh4cydu0q</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>sv nostep</title>
    <ns>0</ns>
    <id>102</id>
    <revision>
      <id>173</id>
      <timestamp>2007-10-31T00:04:55Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=sv_nostep |default-value=0 |saved-to-config=no }}  When set to 1, prevents players from walking up steps, no matter how low. Debug...</comment>
      <text xml:space="preserve" bytes="288">{{lowercase-underscores}}{{Infobox Console variable
|name=sv_nostep
|default-value=0
|saved-to-config=no
}}

When set to 1, prevents players from walking up steps, no matter how low. Debugging tool, unless maybe you have a use for it in your mod (e.g. flight sims).

{{Console variables}}</text>
      <sha1>d7duyatuah9a9s1w8ank9rovqyk7od5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2626</id>
      <parentid>173</parentid>
      <timestamp>2013-03-29T14:22:21Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Sv nostep]] to [[sv nostep]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="288">{{lowercase-underscores}}{{Infobox Console variable
|name=sv_nostep
|default-value=0
|saved-to-config=no
}}

When set to 1, prevents players from walking up steps, no matter how low. Debugging tool, unless maybe you have a use for it in your mod (e.g. flight sims).

{{Console variables}}</text>
      <sha1>d7duyatuah9a9s1w8ank9rovqyk7od5</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>sys ticrate</title>
    <ns>0</ns>
    <id>104</id>
    <revision>
      <id>175</id>
      <timestamp>2007-10-31T00:10:12Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=sys_ticrate |default-value=0.05 |saved-to-config=no }}  This variable is the amount of time in seconds between consecutive packets...</comment>
      <text xml:space="preserve" bytes="823">{{lowercase-underscores}}{{Infobox Console variable
|name=sys_ticrate
|default-value=0.05
|saved-to-config=no
}}

This variable is the amount of time in seconds between consecutive packets sent out by the server to the client on a [[dedicated server]]. This variable is not used on single player or listen servers.

This is one of the most important variables for the server. The default setting of 0.05 will send out 20 packets-per-second to the client. This number is too high for players using modems to connect to the Internet. It is recommended that server administrators set this variable to 0.1 in order to limit the number of out going packets to the clients to 10 packets-per-second. Setting this variable will make a lot of modem players happy.

===See Also===
* [[.nextthink]] entity field

{{Console variables}}</text>
      <sha1>gzpwk1ezjy49r73loww9tjx5u35px8z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2628</id>
      <parentid>175</parentid>
      <timestamp>2013-03-29T14:22:22Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Sys ticrate]] to [[sys ticrate]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="823">{{lowercase-underscores}}{{Infobox Console variable
|name=sys_ticrate
|default-value=0.05
|saved-to-config=no
}}

This variable is the amount of time in seconds between consecutive packets sent out by the server to the client on a [[dedicated server]]. This variable is not used on single player or listen servers.

This is one of the most important variables for the server. The default setting of 0.05 will send out 20 packets-per-second to the client. This number is too high for players using modems to connect to the Internet. It is recommended that server administrators set this variable to 0.1 in order to limit the number of out going packets to the clients to 10 packets-per-second. Setting this variable will make a lot of modem players happy.

===See Also===
* [[.nextthink]] entity field

{{Console variables}}</text>
      <sha1>gzpwk1ezjy49r73loww9tjx5u35px8z</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>tarbaby.qc</title>
    <ns>0</ns>
    <id>861</id>
    <revision>
      <id>2482</id>
      <timestamp>2013-03-29T11:25:23Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for the [[Spawn]] [[Monsters | monster]].   &lt;pre&gt; /* ==============================================================================  BL...&quot;</comment>
      <text xml:space="preserve" bytes="7225">This [[Quake-C]] file contains the code for the [[Spawn]] [[Monsters | monster]].


&lt;pre&gt;
/*
==============================================================================

BLOB

==============================================================================
*/

$cd id1/models/tarbaby
$origin 0 0 24
$base base		

$skin skin

$frame walk1 walk2 walk3 walk4  walk5 walk6 walk7 walk8 walk9 walk10
$frame walk11 walk12 walk13 walk14 walk15 walk16 walk17 walk18 walk19
$frame walk20 walk21 walk22 walk23 walk24 walk25

$frame run1 run2 run3 run4 run5 run6  run7 run8 run9 run10 run11 run12 run13
$frame run14 run15 run16 run17 run18 run19 run20 run21 run22 run23
$frame run24 run25

$frame jump1 jump2 jump3 jump4 jump5 jump6

$frame fly1 fly2 fly3 fly4

$frame exp

void()	tbaby_stand1	=[	$walk1,		tbaby_stand1	] {ai_stand();};

void()	tbaby_hang1		=[	$walk1,		tbaby_hang1	] {ai_stand();};

void()	tbaby_walk1	=[	$walk1,		tbaby_walk2	] {ai_turn();};
void()	tbaby_walk2	=[	$walk2,		tbaby_walk3	] {ai_turn();};
void()	tbaby_walk3	=[	$walk3,		tbaby_walk4	] {ai_turn();};
void()	tbaby_walk4	=[	$walk4,		tbaby_walk5	] {ai_turn();};
void()	tbaby_walk5	=[	$walk5,		tbaby_walk6	] {ai_turn();};
void()	tbaby_walk6	=[	$walk6,		tbaby_walk7	] {ai_turn();};
void()	tbaby_walk7	=[	$walk7,		tbaby_walk8	] {ai_turn();};
void()	tbaby_walk8	=[	$walk8,		tbaby_walk9	] {ai_turn();};
void()	tbaby_walk9	=[	$walk9,		tbaby_walk10	] {ai_turn();};
void()	tbaby_walk10	=[	$walk10,		tbaby_walk11	] {ai_turn();};
void()	tbaby_walk11	=[	$walk11,		tbaby_walk12	] {ai_walk(2);};
void()	tbaby_walk12	=[	$walk12,		tbaby_walk13	] {ai_walk(2);};
void()	tbaby_walk13	=[	$walk13,		tbaby_walk14	] {ai_walk(2);};
void()	tbaby_walk14	=[	$walk14,		tbaby_walk15	] {ai_walk(2);};
void()	tbaby_walk15	=[	$walk15,		tbaby_walk16	] {ai_walk(2);};
void()	tbaby_walk16	=[	$walk16,		tbaby_walk17	] {ai_walk(2);};
void()	tbaby_walk17	=[	$walk17,		tbaby_walk18	] {ai_walk(2);};
void()	tbaby_walk18	=[	$walk18,		tbaby_walk19	] {ai_walk(2);};
void()	tbaby_walk19	=[	$walk19,		tbaby_walk20	] {ai_walk(2);};
void()	tbaby_walk20	=[	$walk20,		tbaby_walk21	] {ai_walk(2);};
void()	tbaby_walk21	=[	$walk21,		tbaby_walk22	] {ai_walk(2);};
void()	tbaby_walk22	=[	$walk22,		tbaby_walk23	] {ai_walk(2);};
void()	tbaby_walk23	=[	$walk23,		tbaby_walk24	] {ai_walk(2);};
void()	tbaby_walk24	=[	$walk24,		tbaby_walk25	] {ai_walk(2);};
void()	tbaby_walk25	=[	$walk25,		tbaby_walk1	] {ai_walk(2);};

void()	tbaby_run1	=[	$run1,		tbaby_run2	] {ai_face();};
void()	tbaby_run2	=[	$run2,		tbaby_run3	] {ai_face();};
void()	tbaby_run3	=[	$run3,		tbaby_run4	] {ai_face();};
void()	tbaby_run4	=[	$run4,		tbaby_run5	] {ai_face();};
void()	tbaby_run5	=[	$run5,		tbaby_run6	] {ai_face();};
void()	tbaby_run6	=[	$run6,		tbaby_run7	] {ai_face();};
void()	tbaby_run7	=[	$run7,		tbaby_run8	] {ai_face();};
void()	tbaby_run8	=[	$run8,		tbaby_run9	] {ai_face();};
void()	tbaby_run9	=[	$run9,		tbaby_run10	] {ai_face();};
void()	tbaby_run10	=[	$run10,		tbaby_run11	] {ai_face();};
void()	tbaby_run11	=[	$run11,		tbaby_run12	] {ai_run(2);};
void()	tbaby_run12	=[	$run12,		tbaby_run13	] {ai_run(2);};
void()	tbaby_run13	=[	$run13,		tbaby_run14	] {ai_run(2);};
void()	tbaby_run14	=[	$run14,		tbaby_run15	] {ai_run(2);};
void()	tbaby_run15	=[	$run15,		tbaby_run16	] {ai_run(2);};
void()	tbaby_run16	=[	$run16,		tbaby_run17	] {ai_run(2);};
void()	tbaby_run17	=[	$run17,		tbaby_run18	] {ai_run(2);};
void()	tbaby_run18	=[	$run18,		tbaby_run19	] {ai_run(2);};
void()	tbaby_run19	=[	$run19,		tbaby_run20	] {ai_run(2);};
void()	tbaby_run20	=[	$run20,		tbaby_run21	] {ai_run(2);};
void()	tbaby_run21	=[	$run21,		tbaby_run22	] {ai_run(2);};
void()	tbaby_run22	=[	$run22,		tbaby_run23	] {ai_run(2);};
void()	tbaby_run23	=[	$run23,		tbaby_run24	] {ai_run(2);};
void()	tbaby_run24	=[	$run24,		tbaby_run25	] {ai_run(2);};
void()	tbaby_run25	=[	$run25,		tbaby_run1	] {ai_run(2);};


//============================================================================


void()	tbaby_jump1;

void()	Tar_JumpTouch =
{
	local	float	ldmg;

	if (other.takedamage &amp;&amp; other.classname != self.classname)
	{
		if ( vlen(self.velocity) &gt; 400 )
		{
			ldmg = 10 + 10*random();
			T_Damage (other, self, self, ldmg);	
			sound (self, CHAN_WEAPON, &quot;blob/hit1.wav&quot;, 1, ATTN_NORM);
		}
	}
	else
		sound (self, CHAN_WEAPON, &quot;blob/land1.wav&quot;, 1, ATTN_NORM);


	if (!checkbottom(self))
	{
		if (self.flags &amp; FL_ONGROUND)
		{	// jump randomly to not get hung up
//dprint (&quot;popjump\n&quot;);
	self.touch = SUB_Null;
	self.think = tbaby_run1;
	self.movetype = MOVETYPE_STEP;
	self.nextthink = time + 0.1;

//			self.velocity_x = (random() - 0.5) * 600;
//			self.velocity_y = (random() - 0.5) * 600;
//			self.velocity_z = 200;
//			self.flags = self.flags - FL_ONGROUND;
		}
		return;	// not on ground yet
	}

	self.touch = SUB_Null;
	self.think = tbaby_jump1;
	self.nextthink = time + 0.1;
};

void()	tbaby_jump5;

void()	tbaby_fly1		=[	$fly1,	tbaby_fly2	] {};
void()	tbaby_fly2		=[	$fly2,	tbaby_fly3	] {};
void()	tbaby_fly3		=[	$fly3,	tbaby_fly4	] {};
void()	tbaby_fly4		=[	$fly4,	tbaby_fly1	] {
self.cnt = self.cnt + 1;
if (self.cnt == 4)
{
//dprint (&quot;spawn hop\n&quot;);
tbaby_jump5 ();
}
};

void()	tbaby_jump1		=[	$jump1,	tbaby_jump2		] {ai_face();};
void()	tbaby_jump2		=[	$jump2,	tbaby_jump3		] {ai_face();};
void()	tbaby_jump3		=[	$jump3,	tbaby_jump4		] {ai_face();};
void()	tbaby_jump4		=[	$jump4,	tbaby_jump5		] {ai_face();};
void()	tbaby_jump5		=[	$jump5,	tbaby_jump6		]
{	
	self.movetype = MOVETYPE_BOUNCE;
	self.touch = Tar_JumpTouch;
	makevectors (self.angles);
	self.origin_z = self.origin_z + 1;
	self.velocity = v_forward * 600 + '0 0 200';
	self.velocity_z = self.velocity_z + random()*150;
	if (self.flags &amp; FL_ONGROUND)
		self.flags = self.flags - FL_ONGROUND;
	self.cnt = 0;
};
void()	tbaby_jump6	=[	$jump6,tbaby_fly1	] {};



//=============================================================================

void()	tbaby_die1	=[	$exp,		tbaby_die2	] {
self.takedamage = DAMAGE_NO;
};
void()	tbaby_die2	=[	$exp,		tbaby_run1	] 
{
	T_RadiusDamage (self, self, 120, world);

	sound (self, CHAN_VOICE, &quot;blob/death1.wav&quot;, 1, ATTN_NORM);
	self.origin = self.origin - 8*normalize(self.velocity);

	WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
	WriteByte (MSG_BROADCAST, TE_TAREXPLOSION);
	WriteCoord (MSG_BROADCAST, self.origin_x);
	WriteCoord (MSG_BROADCAST, self.origin_y);
	WriteCoord (MSG_BROADCAST, self.origin_z);
	
	BecomeExplosion ();
};

//=============================================================================


/*QUAKED monster_tarbaby (1 0 0) (-16 -16 -24) (16 16 24) Ambush
*/
void() monster_tarbaby =
{
	if (deathmatch)
	{
		remove(self);
		return;
	}
	precache_model2 (&quot;progs/tarbaby.mdl&quot;);

	precache_sound2 (&quot;blob/death1.wav&quot;);
	precache_sound2 (&quot;blob/hit1.wav&quot;);
	precache_sound2 (&quot;blob/land1.wav&quot;);
	precache_sound2 (&quot;blob/sight1.wav&quot;);
	
	self.solid = SOLID_SLIDEBOX;
	self.movetype = MOVETYPE_STEP;

	setmodel (self, &quot;progs/tarbaby.mdl&quot;);

	setsize (self, '-16 -16 -24', '16 16 40');
	self.health = 80;

	self.th_stand = tbaby_stand1;
	self.th_walk = tbaby_walk1;
	self.th_run = tbaby_run1;
	self.th_missile = tbaby_jump1;
	self.th_melee = tbaby_jump1;
	self.th_die = tbaby_die1;
	
	walkmonster_start ();
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>iqstotd9f974najz7nd00p6uut4mwwd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>teamplay</title>
    <ns>0</ns>
    <id>109</id>
    <revision>
      <id>181</id>
      <timestamp>2007-10-31T00:20:44Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=teamplay |default-value=0 |saved-to-config=no }} Server-side variable.  Values: *0: Teamplay off. *1: Teamplay on. No friendly fir...</comment>
      <text xml:space="preserve" bytes="243">{{lowercase-underscores}}{{Infobox Console variable
|name=teamplay
|default-value=0
|saved-to-config=no
}}
Server-side variable.

Values:
*0: Teamplay off.
*1: Teamplay on. No friendly fire
*2: Teamplay on. Friendly fire

{{Console variables}}</text>
      <sha1>nhv9875g7rr6ruw6c190tlk40u39wex</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>211</id>
      <parentid>181</parentid>
      <timestamp>2007-11-01T23:20:40Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="298">{{lowercase-underscores}}{{Infobox Console variable
|name=teamplay
|default-value=0
|saved-to-config=no
}}
Server-side variable, players determine the team they are on by pants color.

Values:
*0: Teamplay off.
*1: Teamplay on. No friendly fire
*2: Teamplay on. Friendly fire

{{Console variables}}</text>
      <sha1>pq6se2upxbo61ywkwk6ltnl3zrfo7ze</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2630</id>
      <parentid>211</parentid>
      <timestamp>2013-03-29T14:22:22Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Teamplay]] to [[teamplay]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="298">{{lowercase-underscores}}{{Infobox Console variable
|name=teamplay
|default-value=0
|saved-to-config=no
}}
Server-side variable, players determine the team they are on by pants color.

Values:
*0: Teamplay off.
*1: Teamplay on. No friendly fire
*2: Teamplay on. Friendly fire

{{Console variables}}</text>
      <sha1>pq6se2upxbo61ywkwk6ltnl3zrfo7ze</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>telefrag</title>
    <ns>0</ns>
    <id>1036</id>
    <redirect title="Telefrag" />
    <revision>
      <id>2960</id>
      <timestamp>2013-05-05T15:21:54Z</timestamp>
      <contributor>
        <username>Unmaker</username>
        <id>50</id>
      </contributor>
      <comment>Redirected page to [[Telefrag]]</comment>
      <text xml:space="preserve" bytes="22">#REDIRECT [[Telefrag]]</text>
      <sha1>bhw9x4w6umwf1tjzkl4viwfqlegsw9p</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>temp1</title>
    <ns>0</ns>
    <id>108</id>
    <revision>
      <id>180</id>
      <timestamp>2007-10-31T00:19:32Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=temp1 |defaultvalue=0 |saved-to-config=no }} Versions: All  This cvar was added by [[id Software]] for temporary data storage and/...</comment>
      <text xml:space="preserve" bytes="703">{{lowercase-underscores}}{{Infobox Console variable
|name=temp1
|defaultvalue=0
|saved-to-config=no
}}
Versions: All

This cvar was added by [[id Software]] for temporary data storage and/or as a debugging code. In [[Quake]], setting this variable will override the random choice of player death animation when you are killed. What's amusing is that the default code generates a number in the 1-6 range, so the last player death sequence, player_diee1, is picked twice as often as any other.

The only place where behaviour is specified for this variable is in the [[QuakeC]] code, so if you want to use it for something else, you're free to.

===See Also===
* [[Available Cvars]]

{{Console variables}}</text>
      <sha1>swbiglqpoag3jvd1kmomuituyg3w5v1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2632</id>
      <parentid>180</parentid>
      <timestamp>2013-03-29T14:22:22Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Temp1]] to [[temp1]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="703">{{lowercase-underscores}}{{Infobox Console variable
|name=temp1
|defaultvalue=0
|saved-to-config=no
}}
Versions: All

This cvar was added by [[id Software]] for temporary data storage and/or as a debugging code. In [[Quake]], setting this variable will override the random choice of player death animation when you are killed. What's amusing is that the default code generates a number in the 1-6 range, so the last player death sequence, player_diee1, is picked twice as often as any other.

The only place where behaviour is specified for this variable is in the [[QuakeC]] code, so if you want to use it for something else, you're free to.

===See Also===
* [[Available Cvars]]

{{Console variables}}</text>
      <sha1>swbiglqpoag3jvd1kmomuituyg3w5v1</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>timelimit</title>
    <ns>0</ns>
    <id>107</id>
    <revision>
      <id>179</id>
      <timestamp>2007-10-31T00:17:46Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=timelimit |default-value=0 |saved-to-config=no }}  Server-side variable.  When the time a game have been played reaches the timeli...</comment>
      <text xml:space="preserve" bytes="416">{{lowercase-underscores}}{{Infobox Console variable
|name=timelimit
|default-value=0
|saved-to-config=no
}}

Server-side variable.

When the time a game have been played reaches the timelimit variable the game ends and the person (or team) with the most frags win. If a server admin dont want to use a timelimit he can set it to 0. The game will then play forever (if no [[fraglimit]] is set).

{{Console variables}}</text>
      <sha1>6gf1gu5erej1nnevzplz7p9g50fzdsg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>212</id>
      <parentid>179</parentid>
      <timestamp>2007-11-01T23:23:22Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <minor/>
      <comment>rewrote a little bit</comment>
      <text xml:space="preserve" bytes="413">{{lowercase-underscores}}{{Infobox Console variable
|name=timelimit
|default-value=0
|saved-to-config=no
}}

Server-side variable.

When the game time equals the timelimit variable the match is ended and the server goes to the intermission screen displaying the final scores. A value of 0 means a time limit is not enforced and the match lasts indefinitely provided no [[fraglimit]] is set.

{{Console variables}}</text>
      <sha1>f4lsyxl1eo22kbyup55dw8a55y2gfb8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2634</id>
      <parentid>212</parentid>
      <timestamp>2013-03-29T14:22:23Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Timelimit]] to [[timelimit]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="413">{{lowercase-underscores}}{{Infobox Console variable
|name=timelimit
|default-value=0
|saved-to-config=no
}}

Server-side variable.

When the game time equals the timelimit variable the match is ended and the server goes to the intermission screen displaying the final scores. A value of 0 means a time limit is not enforced and the match lasts indefinitely provided no [[fraglimit]] is set.

{{Console variables}}</text>
      <sha1>f4lsyxl1eo22kbyup55dw8a55y2gfb8</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>traceline</title>
    <ns>0</ns>
    <id>627</id>
    <revision>
      <id>1739</id>
      <timestamp>2013-03-24T23:20:30Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;====Syntax:==== &lt;code&gt;void traceline(vector v1, vector v2, float collisionType, entity ignore)&lt;/code&gt;  This function traces a line between v1 and v2 and sets many global varia...&quot;</comment>
      <text xml:space="preserve" bytes="1576">====Syntax:====
&lt;code&gt;void traceline(vector v1, vector v2, float collisionType, entity ignore)&lt;/code&gt;

This function traces a line between v1 and v2 and sets many global variables depending on the results of the trace.
====Parameters:====
:&lt;code&gt;v1&lt;/code&gt; - The start point of the trace
:&lt;code&gt;v2&lt;/code&gt; - The end point of the trace
:&lt;code&gt;collisionType&lt;/code&gt; - How the trace interacts with other entities.  0 makes it collide with both the world and solid entities' bounding box.  1 makes it not collide with monsters (solid entities with the FL_MONSTER flag set on .flags).  2 makes the trace extra wide against monsters.
====Returns:====
:void
====Global variables affected:====
:&lt;code&gt;float trace_allsolid&lt;/code&gt; - (?)
:&lt;code&gt;float trace_startsolid&lt;/code&gt; - (?)
:&lt;code&gt;float trace_fraction&lt;/code&gt; - The fraction of the total length of the vector v2 - v1 that was traced before the trace hit an obstacle.
:&lt;code&gt;vector trace_endpos&lt;/code&gt; - The coordinates of the end point of the trace.  If the trace did not hit anything, than trace_endpos = v2, otherwise it will report the position where the trace hit an obstacle.
:&lt;code&gt;vector trace_plane_normal&lt;/code&gt; - The normal of the plane that was hit by the trace.
:&lt;code&gt;float trace_plane_dist&lt;/code&gt; - The distance of the plane to the world origin (?)
:&lt;code&gt;entity trace_ent&lt;/code&gt; - The entity that was hit by the trace (if nothing was hit, returns world).
:&lt;code&gt;float trace_inopen&lt;/code&gt; - If the trace is in open air (?)
:&lt;code&gt;float trace_inwater;&lt;/code&gt; - If the trace is in water (?)



[[Category:QuakeC Function]]</text>
      <sha1>i7zedwlypt70cr9lt4d8v5fnhpr87zz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>traceoff</title>
    <ns>0</ns>
    <id>387</id>
    <revision>
      <id>657</id>
      <timestamp>2008-05-07T17:19:28Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: === Function: traceoff ===   void traceoff()  End traces started by [[traceon]]()</comment>
      <text xml:space="preserve" bytes="81">=== Function: traceoff ===
  void traceoff()

End traces started by [[traceon]]()</text>
      <sha1>6g7udwj7jcs474o2dn71wqf4st8kecm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2636</id>
      <parentid>657</parentid>
      <timestamp>2013-03-29T14:22:23Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Traceoff]] to [[traceoff]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="81">=== Function: traceoff ===
  void traceoff()

End traces started by [[traceon]]()</text>
      <sha1>6g7udwj7jcs474o2dn71wqf4st8kecm</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>traceon</title>
    <ns>0</ns>
    <id>386</id>
    <revision>
      <id>656</id>
      <timestamp>2008-05-07T17:19:02Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <comment>New page: === Function: traceon ===   void traceon()  Start tracing functions, end them with [[traceoff]]()</comment>
      <text xml:space="preserve" bytes="97">=== Function: traceon ===
  void traceon()

Start tracing functions, end them with [[traceoff]]()</text>
      <sha1>2dgb3ne8mlu1pydwem69hbpo8gd1wjo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2638</id>
      <parentid>656</parentid>
      <timestamp>2013-03-29T14:22:23Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Traceon]] to [[traceon]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="97">=== Function: traceon ===
  void traceon()

Start tracing functions, end them with [[traceoff]]()</text>
      <sha1>2dgb3ne8mlu1pydwem69hbpo8gd1wjo</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>trigger changelevel</title>
    <ns>0</ns>
    <id>355</id>
    <revision>
      <id>582</id>
      <timestamp>2008-04-11T02:24:01Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: This is the brush entity that allows the player to move from one map to the next. The sole keyvalue for this entity, &quot;map&quot;, is simply the filename of the map to be started after the [[trig...</comment>
      <text xml:space="preserve" bytes="517">This is the brush entity that allows the player to move from one map to the next. The sole keyvalue for this entity, &quot;map&quot;, is simply the filename of the map to be started after the [[trigger_changelevel]] is touched. Don't use any .BSP extension in this value. If your map is called nextmap.bsp, then just use nextmap in the value. There is also a flag you can use to specify whether or not you want to use a level intermission ([[info_intermission]]) camera when the &quot;monsters killed/secrets found&quot; screen comes up.</text>
      <sha1>89us7a08ckyf8p8riswct6u1f6c6nfu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2640</id>
      <parentid>582</parentid>
      <timestamp>2013-03-29T14:22:24Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Trigger changelevel]] to [[trigger changelevel]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="517">This is the brush entity that allows the player to move from one map to the next. The sole keyvalue for this entity, &quot;map&quot;, is simply the filename of the map to be started after the [[trigger_changelevel]] is touched. Don't use any .BSP extension in this value. If your map is called nextmap.bsp, then just use nextmap in the value. There is also a flag you can use to specify whether or not you want to use a level intermission ([[info_intermission]]) camera when the &quot;monsters killed/secrets found&quot; screen comes up.</text>
      <sha1>89us7a08ckyf8p8riswct6u1f6c6nfu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>trigger hurt</title>
    <ns>0</ns>
    <id>357</id>
    <revision>
      <id>585</id>
      <timestamp>2008-04-11T02:28:06Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: This brush entity will cause a given amount of damage to any player who touches it. It's invisible in Quake, so it's normally used for unconventional traps where there is no visible, physi...</comment>
      <text xml:space="preserve" bytes="373">This brush entity will cause a given amount of damage to any player who touches it. It's invisible in Quake, so it's normally used for unconventional traps where there is no visible, physical object to cause the damage. Besides the &quot;delay&quot; keyvalue, to wait a few seconds before causing the injury, the &quot;dmg&quot; keyvalue is set to specify the amount of damage to be inflicted.</text>
      <sha1>cyscxklf3b7vxacr814kkr5kmvh2ltf</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>586</id>
      <parentid>585</parentid>
      <timestamp>2008-04-11T02:28:47Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <text xml:space="preserve" bytes="377">This brush [[entity]] will cause a given amount of damage to any player who touches it. It's invisible in Quake, so it's normally used for unconventional traps where there is no visible, physical object to cause the damage. Besides the &quot;delay&quot; keyvalue, to wait a few seconds before causing the injury, the &quot;dmg&quot; keyvalue is set to specify the amount of damage to be inflicted.</text>
      <sha1>sxz19zmdiwoejot7xkolq4qbi8rirdx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2642</id>
      <parentid>586</parentid>
      <timestamp>2013-03-29T14:22:24Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Trigger hurt]] to [[trigger hurt]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="377">This brush [[entity]] will cause a given amount of damage to any player who touches it. It's invisible in Quake, so it's normally used for unconventional traps where there is no visible, physical object to cause the damage. Besides the &quot;delay&quot; keyvalue, to wait a few seconds before causing the injury, the &quot;dmg&quot; keyvalue is set to specify the amount of damage to be inflicted.</text>
      <sha1>sxz19zmdiwoejot7xkolq4qbi8rirdx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>trigger multiple</title>
    <ns>0</ns>
    <id>547</id>
    <revision>
      <id>1346</id>
      <timestamp>2009-09-30T22:20:36Z</timestamp>
      <contributor>
        <username>Scar3crow</username>
        <id>3</id>
      </contributor>
      <comment>very lame entry for trigger_multiple</comment>
      <text xml:space="preserve" bytes="970">{{lowercase-underscores}}
trigger_multiple, as opposed to [[trigger_once]] is a simple trigger that refreshes consistently, that can target another entity, [[killtarget]] or [[centerprint]] a message via its message field. It is applied to a brush, typically using the trigger texture which is rendered as transparent, and when the player collides with it, it performs all functions in its fields, such as stating which difficulty the hallway you are in represents in [[start]].

It is typically used in cases of important information you want to be sure the player is aware of, and not plot points or narration. Recommend usage involves a brush no thicker than a player's bounding box, so they don't trip the event multiple times while walking on through (unless this is explicitly what you do want). Another use is switch operated doors, if a door closes by itself, but you want the player to open it again remotely, such as standing on a certain texture of the floor.</text>
      <sha1>sy4v6qg6zajyrtft4isch3ekk0sq4kj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2644</id>
      <parentid>1346</parentid>
      <timestamp>2013-03-29T14:22:24Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Trigger multiple]] to [[trigger multiple]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="970">{{lowercase-underscores}}
trigger_multiple, as opposed to [[trigger_once]] is a simple trigger that refreshes consistently, that can target another entity, [[killtarget]] or [[centerprint]] a message via its message field. It is applied to a brush, typically using the trigger texture which is rendered as transparent, and when the player collides with it, it performs all functions in its fields, such as stating which difficulty the hallway you are in represents in [[start]].

It is typically used in cases of important information you want to be sure the player is aware of, and not plot points or narration. Recommend usage involves a brush no thicker than a player's bounding box, so they don't trip the event multiple times while walking on through (unless this is explicitly what you do want). Another use is switch operated doors, if a door closes by itself, but you want the player to open it again remotely, such as standing on a certain texture of the floor.</text>
      <sha1>sy4v6qg6zajyrtft4isch3ekk0sq4kj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>trigger push</title>
    <ns>0</ns>
    <id>359</id>
    <revision>
      <id>588</id>
      <timestamp>2008-04-11T02:32:01Z</timestamp>
      <contributor>
        <username>XaGe</username>
        <id>4</id>
      </contributor>
      <comment>New page: This is the brush entity used to make the wind tunnels that push players around. Simply make a brush to cover the wind's area of influence (the area in which the player gets pushed if he/s...</comment>
      <text xml:space="preserve" bytes="918">This is the brush entity used to make the wind tunnels that push players around. Simply make a brush to cover the wind's area of influence (the area in which the player gets pushed if he/she touches it), then convert it to the [[trigger_push]] entity. Set the &quot;speed&quot; keyvalue to the amount of push strength you want the entity to have, and the angle to the direction the player is to be pushed (Note: You can't set this value to 0. If you want to push in that direction, use 360). To see a sample map with the [[trigger_push]] entity in use, download this map. Note the room with several [[trigger_push]] entities near each other. You can use this room in Quake to see a comparison of push strengths by how high you're pushed (use the walls to judge how high you are being pushed). Notice that there is a limit on how effective the push can be. Any push strength higher than about 300 won't have any increased effect.</text>
      <sha1>58i86qbcojipx8oeoy88v8j7e3uy5in</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2646</id>
      <parentid>588</parentid>
      <timestamp>2013-03-29T14:22:25Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Trigger push]] to [[trigger push]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="918">This is the brush entity used to make the wind tunnels that push players around. Simply make a brush to cover the wind's area of influence (the area in which the player gets pushed if he/she touches it), then convert it to the [[trigger_push]] entity. Set the &quot;speed&quot; keyvalue to the amount of push strength you want the entity to have, and the angle to the direction the player is to be pushed (Note: You can't set this value to 0. If you want to push in that direction, use 360). To see a sample map with the [[trigger_push]] entity in use, download this map. Note the room with several [[trigger_push]] entities near each other. You can use this room in Quake to see a comparison of push strengths by how high you're pushed (use the walls to judge how high you are being pushed). Notice that there is a limit on how effective the push can be. Any push strength higher than about 300 won't have any increased effect.</text>
      <sha1>58i86qbcojipx8oeoy88v8j7e3uy5in</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>trigger relay</title>
    <ns>0</ns>
    <id>1078</id>
    <revision>
      <id>3251</id>
      <timestamp>2014-09-08T14:14:54Z</timestamp>
      <contributor>
        <username>Ijed</username>
        <id>57</id>
      </contributor>
      <comment>Created page with &quot;'''Description''' ---- Their most basic function is to simply be triggered by another entity, then trigger another.  This on its own is a useless behaviour since you can have ...&quot;</comment>
      <text xml:space="preserve" bytes="1140">'''Description'''
----
Their most basic function is to simply be triggered by another entity, then trigger another.  This on its own is a useless behaviour since you can have the two original entities simply trigger each other, however, some additional controls from the trigger system give you more control over what happens.

They duplicate all the behaviour of other triggers, but do not use most of it since they are a non-solid point entity.  This is their only real reason to exist - saving you from including another trigger brush in your map, since you can flag a trigger_whatever as non-solid.

'''Keys'''
----
targetname - What is this relay called, so that another entity can trigger it
target - Will trigger this entity when triggered
killtarget - Will remove this entity when triggered 
wait - wait this amount of time in seconds before triggering the target
message - print this in the centre of the screen when triggered

'''Bug: No Killtarget + Target'''
----
If you give a relay both of these values then the killtarget will not work.  You need a qc fix or to use two trigger_relay's - one that kills and one that triggers.</text>
      <sha1>f8x9uw4fa8ic8s01jff116kwi1icjs0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>triggers.qc</title>
    <ns>0</ns>
    <id>862</id>
    <revision>
      <id>2483</id>
      <timestamp>2013-03-29T11:27:21Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for the [[Trigger | triggers]].   &lt;pre&gt; entity stemp, otemp, s, old;   void() trigger_reactivate = { 	self.solid = SOLID_TRIGGER; };  /...&quot;</comment>
      <text xml:space="preserve" bytes="14357">This [[Quake-C]] file contains the code for the [[Trigger | triggers]].


&lt;pre&gt;
entity stemp, otemp, s, old;


void() trigger_reactivate =
{
	self.solid = SOLID_TRIGGER;
};

//=============================================================================

float	SPAWNFLAG_NOMESSAGE = 1;
float	SPAWNFLAG_NOTOUCH = 1;

// the wait time has passed, so set back up for another activation
void() multi_wait =
{
	if (self.max_health)
	{
		self.health = self.max_health;
		self.takedamage = DAMAGE_YES;
		self.solid = SOLID_BBOX;
	}
};


// the trigger was just touched/killed/used
// self.enemy should be set to the activator so it can be held through a delay
// so wait for the delay time before firing
void() multi_trigger =
{
	if (self.nextthink &gt; time)
	{
		return;		// allready been triggered
	}

	if (self.classname == &quot;trigger_secret&quot;)
	{
		if (self.enemy.classname != &quot;player&quot;)
			return;
		found_secrets = found_secrets + 1;
		WriteByte (MSG_ALL, SVC_FOUNDSECRET);
	}

	if (self.noise)
		sound (self, CHAN_VOICE, self.noise, 1, ATTN_NORM);

// don't trigger again until reset
	self.takedamage = DAMAGE_NO;

	activator = self.enemy;
	
	SUB_UseTargets();

	if (self.wait &gt; 0)	
	{
		self.think = multi_wait;
		self.nextthink = time + self.wait;
	}
	else
	{	// we can't just remove (self) here, because this is a touch function
		// called wheil C code is looping through area links...
		self.touch = SUB_Null;
		self.nextthink = time + 0.1;
		self.think = SUB_Remove;
	}
};

void() multi_killed =
{
	self.enemy = damage_attacker;
	multi_trigger();
};

void() multi_use =
{
	self.enemy = activator;
	multi_trigger();
};

void() multi_touch =
{
	if (other.classname != &quot;player&quot;)
		return;
	
// if the trigger has an angles field, check player's facing direction
	if (self.movedir != '0 0 0')
	{
		makevectors (other.angles);
		if (v_forward * self.movedir &lt; 0)
			return;		// not facing the right way
	}
	
	self.enemy = other;
	multi_trigger ();
};

/*QUAKED trigger_multiple (.5 .5 .5) ? notouch
Variable sized repeatable trigger.  Must be targeted at one or more entities.  If &quot;health&quot; is set, the trigger must be killed to activate each time.
If &quot;delay&quot; is set, the trigger waits some time after activating before firing.
&quot;wait&quot; : Seconds between triggerings. (.2 default)
If notouch is set, the trigger is only fired by other entities, not by touching.
NOTOUCH has been obsoleted by trigger_relay!
sounds
1)	secret
2)	beep beep
3)	large switch
4)
set &quot;message&quot; to text string
*/
void() trigger_multiple =
{
	if (self.sounds == 1)
	{
		precache_sound (&quot;misc/secret.wav&quot;);
		self.noise = &quot;misc/secret.wav&quot;;
	}
	else if (self.sounds == 2)
	{
		precache_sound (&quot;misc/talk.wav&quot;);
		self.noise = &quot;misc/talk.wav&quot;;
	}
	else if (self.sounds == 3)
	{
		precache_sound (&quot;misc/trigger1.wav&quot;);
		self.noise = &quot;misc/trigger1.wav&quot;;
	}
	
	if (!self.wait)
		self.wait = 0.2;
	self.use = multi_use;

	InitTrigger ();

	if (self.health)
	{
		if (self.spawnflags &amp; SPAWNFLAG_NOTOUCH)
			objerror (&quot;health and notouch don't make sense\n&quot;);
		self.max_health = self.health;
		self.th_die = multi_killed;
		self.takedamage = DAMAGE_YES;
		self.solid = SOLID_BBOX;
		setorigin (self, self.origin);	// make sure it links into the world
	}
	else
	{
		if ( !(self.spawnflags &amp; SPAWNFLAG_NOTOUCH) )
		{
			self.touch = multi_touch;
		}
	}
};


/*QUAKED trigger_once (.5 .5 .5) ? notouch
Variable sized trigger. Triggers once, then removes itself.  You must set the key &quot;target&quot; to the name of another object in the level that has a matching
&quot;targetname&quot;.  If &quot;health&quot; is set, the trigger must be killed to activate.
If notouch is set, the trigger is only fired by other entities, not by touching.
if &quot;killtarget&quot; is set, any objects that have a matching &quot;target&quot; will be removed when the trigger is fired.
if &quot;angle&quot; is set, the trigger will only fire when someone is facing the direction of the angle.  Use &quot;360&quot; for an angle of 0.
sounds
1)	secret
2)	beep beep
3)	large switch
4)
set &quot;message&quot; to text string
*/
void() trigger_once =
{
	self.wait = -1;
	trigger_multiple();
};

//=============================================================================

/*QUAKED trigger_relay (.5 .5 .5) (-8 -8 -8) (8 8 8)
This fixed size trigger cannot be touched, it can only be fired by other events.  It can contain killtargets, targets, delays, and messages.
*/
void() trigger_relay =
{
	self.use = SUB_UseTargets;
};


//=============================================================================

/*QUAKED trigger_secret (.5 .5 .5) ?
secret counter trigger
sounds
1)	secret
2)	beep beep
3)
4)
set &quot;message&quot; to text string
*/
void() trigger_secret =
{
	total_secrets = total_secrets + 1;
	self.wait = -1;
	if (!self.message)
		self.message = &quot;You found a secret area!&quot;;
	if (!self.sounds)
		self.sounds = 1;
	
	if (self.sounds == 1)
	{
		precache_sound (&quot;misc/secret.wav&quot;);
		self.noise = &quot;misc/secret.wav&quot;;
	}
	else if (self.sounds == 2)
	{
		precache_sound (&quot;misc/talk.wav&quot;);
		self.noise = &quot;misc/talk.wav&quot;;
	}

	trigger_multiple ();
};

//=============================================================================


void() counter_use =
{
	local string junk;

	self.count = self.count - 1;
	if (self.count &lt; 0)
		return;
	
	if (self.count != 0)
	{
		if (activator.classname == &quot;player&quot;
		&amp;&amp; (self.spawnflags &amp; SPAWNFLAG_NOMESSAGE) == 0)
		{
			if (self.count &gt;= 4)
				centerprint (activator, &quot;There are more to go...&quot;);
			else if (self.count == 3)
				centerprint (activator, &quot;Only 3 more to go...&quot;);
			else if (self.count == 2)
				centerprint (activator, &quot;Only 2 more to go...&quot;);
			else
				centerprint (activator, &quot;Only 1 more to go...&quot;);
		}
		return;
	}
	
	if (activator.classname == &quot;player&quot;
	&amp;&amp; (self.spawnflags &amp; SPAWNFLAG_NOMESSAGE) == 0)
		centerprint(activator, &quot;Sequence completed!&quot;);
	self.enemy = activator;
	multi_trigger ();
};

/*QUAKED trigger_counter (.5 .5 .5) ? nomessage
Acts as an intermediary for an action that takes multiple inputs.

If nomessage is not set, t will print &quot;1 more.. &quot; etc when triggered and &quot;sequence complete&quot; when finished.

After the counter has been triggered &quot;count&quot; times (default 2), it will fire all of it's targets and remove itself.
*/
void() trigger_counter =
{
	self.wait = -1;
	if (!self.count)
		self.count = 2;

	self.use = counter_use;
};


/*
==============================================================================

TELEPORT TRIGGERS

==============================================================================
*/

float	PLAYER_ONLY	= 1;
float	SILENT = 2;

void() play_teleport =
{
	local	float v;
	local	string tmpstr;

	v = random() * 5;
	if (v &lt; 1)
		tmpstr = &quot;misc/r_tele1.wav&quot;;
	else if (v &lt; 2)
		tmpstr = &quot;misc/r_tele2.wav&quot;;
	else if (v &lt; 3)
		tmpstr = &quot;misc/r_tele3.wav&quot;;
	else if (v &lt; 4)
		tmpstr = &quot;misc/r_tele4.wav&quot;;
	else
		tmpstr = &quot;misc/r_tele5.wav&quot;;

	sound (self, CHAN_VOICE, tmpstr, 1, ATTN_NORM);
	remove (self);
};

void(vector org) spawn_tfog =
{
	s = spawn ();
	s.origin = org;
	s.nextthink = time + 0.2;
	s.think = play_teleport;

	WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
	WriteByte (MSG_BROADCAST, TE_TELEPORT);
	WriteCoord (MSG_BROADCAST, org_x);
	WriteCoord (MSG_BROADCAST, org_y);
	WriteCoord (MSG_BROADCAST, org_z);
};


void() tdeath_touch =
{
	if (other == self.owner)
		return;

// frag anyone who teleports in on top of an invincible player
	if (other.classname == &quot;player&quot;)
	{
		if (other.invincible_finished &gt; time)
			self.classname = &quot;teledeath2&quot;;
		if (self.owner.classname != &quot;player&quot;)
		{	// other monsters explode themselves
			T_Damage (self.owner, self, self, 50000);
			return;
		}
		
	}

	if (other.health)
	{
		T_Damage (other, self, self, 50000);
	}
};


void(vector org, entity death_owner) spawn_tdeath =
{
local entity	death;

	death = spawn();
	death.classname = &quot;teledeath&quot;;
	death.movetype = MOVETYPE_NONE;
	death.solid = SOLID_TRIGGER;
	death.angles = '0 0 0';
	setsize (death, death_owner.mins - '1 1 1', death_owner.maxs + '1 1 1');
	setorigin (death, org);
	death.touch = tdeath_touch;
	death.nextthink = time + 0.2;
	death.think = SUB_Remove;
	death.owner = death_owner;
	
	force_retouch = 2;		// make sure even still objects get hit
};

void() teleport_touch =
{
local entity	t;
local vector	org;

	if (self.targetname)
	{
		if (self.nextthink &lt; time)
		{
			return;		// not fired yet
		}
	}

	if (self.spawnflags &amp; PLAYER_ONLY)
	{
		if (other.classname != &quot;player&quot;)
			return;
	}

// only teleport living creatures
	if (other.health &lt;= 0 || other.solid != SOLID_SLIDEBOX)
		return;

	SUB_UseTargets ();

// put a tfog where the player was
	spawn_tfog (other.origin);

	t = find (world, targetname, self.target);
	if (!t)
		objerror (&quot;couldn't find target&quot;);
		
// spawn a tfog flash in front of the destination
	makevectors (t.mangle);
	org = t.origin + 32 * v_forward;

	spawn_tfog (org);
	spawn_tdeath(t.origin, other);

// move the player and lock him down for a little while
	if (!other.health)
	{
		other.origin = t.origin;
		other.velocity = (v_forward * other.velocity_x) + (v_forward * other.velocity_y);
		return;
	}

	setorigin (other, t.origin);
	other.angles = t.mangle;
	if (other.classname == &quot;player&quot;)
	{
		other.fixangle = 1;		// turn this way immediately
		other.teleport_time = time + 0.7;
		if (other.flags &amp; FL_ONGROUND)
			other.flags = other.flags - FL_ONGROUND;
		other.velocity = v_forward * 300;
	}
	other.flags = other.flags - other.flags &amp; FL_ONGROUND;
};

/*QUAKED info_teleport_destination (.5 .5 .5) (-8 -8 -8) (8 8 32)
This is the destination marker for a teleporter.  It should have a &quot;targetname&quot; field with the same value as a teleporter's &quot;target&quot; field.
*/
void() info_teleport_destination =
{
// this does nothing, just serves as a target spot
	self.mangle = self.angles;
	self.angles = '0 0 0';
	self.model = &quot;&quot;;
	self.origin = self.origin + '0 0 27';
	if (!self.targetname)
		objerror (&quot;no targetname&quot;);
};

void() teleport_use =
{
	self.nextthink = time + 0.2;
	force_retouch = 2;		// make sure even still objects get hit
	self.think = SUB_Null;
};

/*QUAKED trigger_teleport (.5 .5 .5) ? PLAYER_ONLY SILENT
Any object touching this will be transported to the corresponding info_teleport_destination entity. You must set the &quot;target&quot; field, and create an object with a &quot;targetname&quot; field that matches.

If the trigger_teleport has a targetname, it will only teleport entities when it has been fired.
*/
void() trigger_teleport =
{
	local vector o;

	InitTrigger ();
	self.touch = teleport_touch;
	// find the destination 
	if (!self.target)
		objerror (&quot;no target&quot;);
	self.use = teleport_use;

	if (!(self.spawnflags &amp; SILENT))
	{
		precache_sound (&quot;ambience/hum1.wav&quot;);
		o = (self.mins + self.maxs)*0.5;
		ambientsound (o, &quot;ambience/hum1.wav&quot;,0.5 , ATTN_STATIC);
	}
};

/*
==============================================================================

trigger_setskill

==============================================================================
*/

void() trigger_skill_touch =
{
	if (other.classname != &quot;player&quot;)
		return;
		
	cvar_set (&quot;skill&quot;, self.message);
};

/*QUAKED trigger_setskill (.5 .5 .5) ?
sets skill level to the value of &quot;message&quot;.
Only used on start map.
*/
void() trigger_setskill =
{
	InitTrigger ();
	self.touch = trigger_skill_touch;
};


/*
==============================================================================

ONLY REGISTERED TRIGGERS

==============================================================================
*/

void() trigger_onlyregistered_touch =
{
	if (other.classname != &quot;player&quot;)
		return;
	if (self.attack_finished &gt; time)
		return;

	self.attack_finished = time + 2;
	if (cvar(&quot;registered&quot;))
	{
		self.message = &quot;&quot;;
		SUB_UseTargets ();
		remove (self);
	}
	else
	{
		if (self.message != &quot;&quot;)
		{
			centerprint (other, self.message);
			sound (other, CHAN_BODY, &quot;misc/talk.wav&quot;, 1, ATTN_NORM);
		}
	}
};

/*QUAKED trigger_onlyregistered (.5 .5 .5) ?
Only fires if playing the registered version, otherwise prints the message
*/
void() trigger_onlyregistered =
{
	precache_sound (&quot;misc/talk.wav&quot;);
	InitTrigger ();
	self.touch = trigger_onlyregistered_touch;
};

//============================================================================

void() hurt_on =
{
	self.solid = SOLID_TRIGGER;
	self.nextthink = -1;
};

void() hurt_touch =
{
	if (other.takedamage)
	{
		self.solid = SOLID_NOT;
		T_Damage (other, self, self, self.dmg);
		self.think = hurt_on;
		self.nextthink = time + 1;
	}

	return;
};

/*QUAKED trigger_hurt (.5 .5 .5) ?
Any object touching this will be hurt
set dmg to damage amount
defalt dmg = 5
*/
void() trigger_hurt =
{
	InitTrigger ();
	self.touch = hurt_touch;
	if (!self.dmg)
		self.dmg = 5;
};

//============================================================================

float PUSH_ONCE = 1;

void() trigger_push_touch =
{
	if (other.classname == &quot;grenade&quot;)
		other.velocity = self.speed * self.movedir * 10;
	else if (other.health &gt; 0)
	{
		other.velocity = self.speed * self.movedir * 10;
		if (other.classname == &quot;player&quot;)
		{
			if (other.fly_sound &lt; time)
			{
				other.fly_sound = time + 1.5;
				sound (other, CHAN_AUTO, &quot;ambience/windfly.wav&quot;, 1, ATTN_NORM);
			}
		}
	}
	if (self.spawnflags &amp; PUSH_ONCE)
		remove(self);
};


/*QUAKED trigger_push (.5 .5 .5) ? PUSH_ONCE
Pushes the player
*/
void() trigger_push =
{
	InitTrigger ();
	precache_sound (&quot;ambience/windfly.wav&quot;);
	self.touch = trigger_push_touch;
	if (!self.speed)
		self.speed = 1000;
};

//============================================================================

void() trigger_monsterjump_touch =
{
	if ( other.flags &amp; (FL_MONSTER | FL_FLY | FL_SWIM) != FL_MONSTER )
		return;

// set XY even if not on ground, so the jump will clear lips
	other.velocity_x = self.movedir_x * self.speed;
	other.velocity_y = self.movedir_y * self.speed;
	
	if ( !(other.flags &amp; FL_ONGROUND) )
		return;
	
	other.flags = other.flags - FL_ONGROUND;

	other.velocity_z = self.height;
};

/*QUAKED trigger_monsterjump (.5 .5 .5) ?
Walking monsters that touch this will jump in the direction of the trigger's angle
&quot;speed&quot; default to 200, the speed thrown forward
&quot;height&quot; default to 200, the speed thrown upwards
*/
void() trigger_monsterjump =
{
	if (!self.speed)
		self.speed = 200;
	if (!self.height)
		self.height = 200;
	if (self.angles == '0 0 0')
		self.angles = '0 360 0';
	InitTrigger ();
	self.touch = trigger_monsterjump_touch;
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>jt4y047fc7l3c9u0id50twektwz2did</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>unit</title>
    <ns>0</ns>
    <id>646</id>
    <revision>
      <id>1917</id>
      <timestamp>2013-03-25T03:34:26Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>basic description of units, with a small amount on the player size, speed and jump height</comment>
      <text xml:space="preserve" bytes="727">A unit is Quake's internal measurement of size and distance. It is not mapped to any real-world measurement, so the generic term 'unit' is used. When making levels for the game, units are often counted as multiples of 16, typically 16, 32, 64 and 128 for normal scale [[brush|brushwork]]. It is helpful to think in these sizes, because the textures used in quake are usually the same dimensions, and 1 pixel of a texture mapped at 1:1 scale is equal to 1 unit in space.

The size of the player in units is a box with dimensions 32x32x48. The player's default movement speed (as defined by [[sv_maxspeed]]) when running is 320 units per second, and for most purposes, it is safe to assume the maximum jump height to be 32 units.</text>
      <sha1>649lc8lu4jvykaw58t23pqm3ed7axal</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1941</id>
      <parentid>1917</parentid>
      <timestamp>2013-03-25T04:34:32Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <text xml:space="preserve" bytes="733">A '''unit''' is Quake's internal measurement of size and distance. It is not mapped to any real-world measurement, so the generic term 'unit' is used. When making levels for the game, units are often counted as multiples of 16, typically 16, 32, 64 and 128 for normal scale [[brush|brushwork]]. It is helpful to think in these sizes, because the textures used in quake are usually the same dimensions, and 1 pixel of a texture mapped at 1:1 scale is equal to 1 unit in space.

The size of the player in units is a box with dimensions 32x32x48. The player's default movement speed (as defined by [[sv_maxspeed]]) when running is 320 units per second, and for most purposes, it is safe to assume the maximum jump height to be 32 units.</text>
      <sha1>8yk4uuxqfqlvdspfic71unw9f3cyneu</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>units</title>
    <ns>0</ns>
    <id>645</id>
    <revision>
      <id>1898</id>
      <timestamp>2013-03-25T02:54:04Z</timestamp>
      <contributor>
        <username>QuakeTree</username>
        <id>26</id>
      </contributor>
      <comment>created units page and added content</comment>
      <text xml:space="preserve" bytes="426">'''Units'''

In Quake level editing a unit is the equivalent of one step in the 3 dimensional grid that Quake uses in the x y and z planes to determine a particular location inside of a level. It is essentially a measurement similar to inches and feet or centimeters and meters. While there is no official comparison to real world measurements it's generally assumed that 64 units equals approximately five feet or 1.7 meters.</text>
      <sha1>qpwd7m6p89grwljek62doedaz5ceqfr</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>vanilla quake</title>
    <ns>0</ns>
    <id>650</id>
    <revision>
      <id>1937</id>
      <timestamp>2013-03-25T04:32:04Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>added small bit of info about vanilla quake</comment>
      <text xml:space="preserve" bytes="648">'''Vanilla Quake''' is a commonly used term that refers to Quake without any [[mod|modifications]] running. It generally used in the map making community as a way to indicate that a level is intended to be run with the standard Quake gameplay and no additional monsters, weapons or other enhancements. It's also a term used often when talking about [[map_based_hacks|map-based hacks]], which are things that can be done in standard Quake that were never intended by [[id software]], often revolving around the use of the [[info_notnull]] entity.

Technically speaking, vanilla Quake refers to Quake running the game from the ID1 folder (-game ID1).</text>
      <sha1>lld0c5hkyxznghe5h3d0hrxq450b5vt</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2234</id>
      <parentid>1937</parentid>
      <timestamp>2013-03-26T13:28:47Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>small link fix</comment>
      <text xml:space="preserve" bytes="641">'''Vanilla Quake''' is a commonly used term that refers to Quake without any [[mod|modifications]] running. It generally used in the map making community as a way to indicate that a level is intended to be run with the standard Quake gameplay and no additional monsters, weapons or other enhancements. It's also a term used often when talking about [[Map_based_hacks|map based hacks]], which are things that can be done in standard Quake that were never intended by [[id software]], often involving the use of the [[info_notnull]] entity.

Technically speaking, vanilla Quake refers to Quake running the game from the ID1 folder (-game ID1).</text>
      <sha1>ajjkfddqh423myz1pijc1em0myjcaqv</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>vectoangles</title>
    <ns>0</ns>
    <id>195</id>
    <revision>
      <id>371</id>
      <timestamp>2008-02-22T19:31:34Z</timestamp>
      <contributor>
        <ip>129.13.186.4</ip>
      </contributor>
      <comment>New page:  vector '''vectoangles'''(vector ''v'')  Returns vector ' pitch  yaw  0 '  Vector to angles: calculates the pitch angle (aiming) and yaw angle (bearing) corresponding to a given 3D directi...</comment>
      <text xml:space="preserve" bytes="197"> vector '''vectoangles'''(vector ''v'')

Returns vector ' pitch  yaw  0 '

Vector to angles: calculates the pitch angle (aiming) and yaw angle (bearing) corresponding to a given 3D direction ''v''.</text>
      <sha1>10vc1hr1vwrue51t9fxb3nkc0kh43j6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2648</id>
      <parentid>371</parentid>
      <timestamp>2013-03-29T14:22:25Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Vectoangles]] to [[vectoangles]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="197"> vector '''vectoangles'''(vector ''v'')

Returns vector ' pitch  yaw  0 '

Vector to angles: calculates the pitch angle (aiming) and yaw angle (bearing) corresponding to a given 3D direction ''v''.</text>
      <sha1>10vc1hr1vwrue51t9fxb3nkc0kh43j6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>vectoyaw</title>
    <ns>0</ns>
    <id>624</id>
    <revision>
      <id>1734</id>
      <timestamp>2013-03-24T23:07:12Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;====Syntax:==== &lt;code&gt;float vectoyaw(vector vec)&lt;/code&gt;  Converts a directional vector into a yaw angle (only the _y component of an angles set) ====Parameters:==== :&lt;code&gt;vec...&quot;</comment>
      <text xml:space="preserve" bytes="294">====Syntax:====
&lt;code&gt;float vectoyaw(vector vec)&lt;/code&gt;

Converts a directional vector into a yaw angle (only the _y component of an angles set)
====Parameters:====
:&lt;code&gt;vec&lt;/code&gt; - The vector to convert
====Returns:====
:The yaw angle equivalent of the vector


[[Category:QuakeC Function]]</text>
      <sha1>j6ywdpyculoq0negqtcmta6zrkmp2sq</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>vid mode</title>
    <ns>0</ns>
    <id>101</id>
    <revision>
      <id>172</id>
      <timestamp>2007-10-31T00:03:03Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=vid_mode |default-value=0 |saved-to-config=no }} Versions: All (though many newer enhanced engines drop this cvar in favour of vid...</comment>
      <text xml:space="preserve" bytes="335">{{lowercase-underscores}}{{Infobox Console variable
|name=vid_mode
|default-value=0
|saved-to-config=no
}}
Versions: All (though many newer enhanced engines drop this cvar in favour of vid_width, vid_height, etc.)

Displays or sets the current video mode. Use [[vid_describemodes]] for a complete, accurate list.

{{Console variables}}</text>
      <sha1>de1nmv7aadj5dyolviqer5jdyd6itw6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2650</id>
      <parentid>172</parentid>
      <timestamp>2013-03-29T14:22:25Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Vid mode]] to [[vid mode]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="335">{{lowercase-underscores}}{{Infobox Console variable
|name=vid_mode
|default-value=0
|saved-to-config=no
}}
Versions: All (though many newer enhanced engines drop this cvar in favour of vid_width, vid_height, etc.)

Displays or sets the current video mode. Use [[vid_describemodes]] for a complete, accurate list.

{{Console variables}}</text>
      <sha1>de1nmv7aadj5dyolviqer5jdyd6itw6</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>vid nopageflip</title>
    <ns>0</ns>
    <id>100</id>
    <revision>
      <id>171</id>
      <timestamp>2007-10-31T00:01:41Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=vid_nopageflip |default-value=0 |saved-to-config=yes }} Versions: Software engines  Setting it to 1 makes software renderer use bl...</comment>
      <text xml:space="preserve" bytes="312">{{lowercase-underscores}}{{Infobox Console variable
|name=vid_nopageflip
|default-value=0
|saved-to-config=yes
}}
Versions: Software engines

Setting it to 1 makes software renderer use block transfers (BLIT) instead of page flipping. Black transfers are usually slower than page flipping.

{{Console variables}}</text>
      <sha1>78d19nlg3gh3bka8ci35bh4q50umtvd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2652</id>
      <parentid>171</parentid>
      <timestamp>2013-03-29T14:22:25Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Vid nopageflip]] to [[vid nopageflip]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="312">{{lowercase-underscores}}{{Infobox Console variable
|name=vid_nopageflip
|default-value=0
|saved-to-config=yes
}}
Versions: Software engines

Setting it to 1 makes software renderer use block transfers (BLIT) instead of page flipping. Black transfers are usually slower than page flipping.

{{Console variables}}</text>
      <sha1>78d19nlg3gh3bka8ci35bh4q50umtvd</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>vid stretch by 2</title>
    <ns>0</ns>
    <id>99</id>
    <revision>
      <id>169</id>
      <timestamp>2007-10-31T00:00:02Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variables |name=vid_stretch_by_2 |default-value=1 |saved-to-config=yes }} Versions: [[WinQuake]] (not present in DOSQuake, present but unused in ...</comment>
      <text xml:space="preserve" bytes="494">{{lowercase-underscores}}{{Infobox Console variables
|name=vid_stretch_by_2
|default-value=1
|saved-to-config=yes
}}
Versions: [[WinQuake]] (not present in DOSQuake, present but unused in [[GLQuake]], as far as I know)

Setting vid_stretch_by_2 to 1 will cause to render in half the screen resolution. It enables use of resolution below 640x480 on a card that don't support such a resolution natively under given OS (ex: WinNT 4.0). 640x480 -&gt; 320x320 ,800x600 -&gt; 300x400

{{Console variables}}</text>
      <sha1>bgz2kqxn0huwqqvkilusa9ukznyjozk</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>170</id>
      <parentid>169</parentid>
      <timestamp>2007-10-31T00:00:07Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="493">{{lowercase-underscores}}{{Infobox Console variable
|name=vid_stretch_by_2
|default-value=1
|saved-to-config=yes
}}
Versions: [[WinQuake]] (not present in DOSQuake, present but unused in [[GLQuake]], as far as I know)

Setting vid_stretch_by_2 to 1 will cause to render in half the screen resolution. It enables use of resolution below 640x480 on a card that don't support such a resolution natively under given OS (ex: WinNT 4.0). 640x480 -&gt; 320x320 ,800x600 -&gt; 300x400

{{Console variables}}</text>
      <sha1>p10zrpwrtnh67ac4fph3e9k3hr9hb3v</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>931</id>
      <parentid>170</parentid>
      <timestamp>2008-10-23T15:23:09Z</timestamp>
      <contributor>
        <ip>189.123.172.1</ip>
      </contributor>
      <comment>I don't know for sure this var, but 320x320 (square?) makes no sense to me, considering the other to be 300x400 (shouldn't it be 400x300? changed it too)... if the var is not like that, fix me please</comment>
      <text xml:space="preserve" bytes="493">{{lowercase-underscores}}{{Infobox Console variable
|name=vid_stretch_by_2
|default-value=1
|saved-to-config=yes
}}
Versions: [[WinQuake]] (not present in DOSQuake, present but unused in [[GLQuake]], as far as I know)

Setting vid_stretch_by_2 to 1 will cause to render in half the screen resolution. It enables use of resolution below 640x480 on a card that don't support such a resolution natively under given OS (ex: WinNT 4.0). 640x480 -&gt; 320x240 ,800x600 -&gt; 400x300

{{Console variables}}</text>
      <sha1>llxqthj7i3kzsec45la78fecnwx0sgg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2654</id>
      <parentid>931</parentid>
      <timestamp>2013-03-29T14:22:26Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Vid stretch by 2]] to [[vid stretch by 2]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="493">{{lowercase-underscores}}{{Infobox Console variable
|name=vid_stretch_by_2
|default-value=1
|saved-to-config=yes
}}
Versions: [[WinQuake]] (not present in DOSQuake, present but unused in [[GLQuake]], as far as I know)

Setting vid_stretch_by_2 to 1 will cause to render in half the screen resolution. It enables use of resolution below 640x480 on a card that don't support such a resolution natively under given OS (ex: WinNT 4.0). 640x480 -&gt; 320x240 ,800x600 -&gt; 400x300

{{Console variables}}</text>
      <sha1>llxqthj7i3kzsec45la78fecnwx0sgg</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>vlen</title>
    <ns>0</ns>
    <id>623</id>
    <revision>
      <id>1733</id>
      <timestamp>2013-03-24T23:05:37Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;====Syntax:==== &lt;code&gt;float vlen(vector vec)&lt;/code&gt;  Gets the length of a vector ====Parameters:==== :&lt;code&gt;vec&lt;/code&gt; - The vector to measure ====Returns:==== :Returns the le...&quot;</comment>
      <text xml:space="preserve" bytes="225">====Syntax:====
&lt;code&gt;float vlen(vector vec)&lt;/code&gt;

Gets the length of a vector
====Parameters:====
:&lt;code&gt;vec&lt;/code&gt; - The vector to measure
====Returns:====
:Returns the length of the vector.


[[Category:QuakeC Function]]</text>
      <sha1>eb7uqz114r8it1jqs574tlu6a8ezlvb</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>void</title>
    <ns>0</ns>
    <id>440</id>
    <revision>
      <id>772</id>
      <timestamp>2008-05-08T19:02:15Z</timestamp>
      <contributor>
        <username>ShoTro</username>
        <id>9</id>
      </contributor>
      <text xml:space="preserve" bytes="157">
== Void type ==
Void is the type for the result of a function that produces no direct result.

Example:
  void helloWorld() {
     print(&quot;hello world&quot;);
  }</text>
      <sha1>5qsbfmopvn7y55iowulehlu15gy11mp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2656</id>
      <parentid>772</parentid>
      <timestamp>2013-03-29T14:22:26Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Void]] to [[void]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="157">
== Void type ==
Void is the type for the result of a function that produces no direct result.

Example:
  void helloWorld() {
     print(&quot;hello world&quot;);
  }</text>
      <sha1>5qsbfmopvn7y55iowulehlu15gy11mp</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>volume</title>
    <ns>0</ns>
    <id>98</id>
    <revision>
      <id>168</id>
      <timestamp>2007-10-30T23:52:08Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{lowercase-underscores}}{{Infobox Console variable |name=volume |default-value=0.7 |saved-to-config=yes }}  This is the master volume for all sounds in the game. The range is 0 to 1, with...</comment>
      <text xml:space="preserve" bytes="459">{{lowercase-underscores}}{{Infobox Console variable
|name=volume
|default-value=0.7
|saved-to-config=yes
}}

This is the master volume for all sounds in the game. The range is 0 to 1, with zero being no sound and 1 being full volume. Do not set above 1 or below 0 or the game may crash. This is particularly useful to [QuakeC] programmers in the event you want to fade out the sound, often times fading simultaneously with [[v_cshift]].

{{Console variables}}</text>
      <sha1>k5resg3dxg9s1jk4gondngnq9uffunj</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>208</id>
      <parentid>168</parentid>
      <timestamp>2007-10-31T20:26:06Z</timestamp>
      <contributor>
        <username>Sajt</username>
        <id>2</id>
      </contributor>
      <minor/>
      <text xml:space="preserve" bytes="461">{{lowercase-underscores}}{{Infobox Console variable
|name=volume
|default-value=0.7
|saved-to-config=yes
}}

This is the master volume for all sounds in the game. The range is 0 to 1, with zero being no sound and 1 being full volume. Do not set above 1 or below 0 or the game may crash. This is particularly useful to [[QuakeC]] programmers in the event you want to fade out the sound, often times fading simultaneously with [[v_cshift]].

{{Console variables}}</text>
      <sha1>n2xemfcolkur6zppjbi66guvvii28pi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2658</id>
      <parentid>208</parentid>
      <timestamp>2013-03-29T14:22:26Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Volume]] to [[volume]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="461">{{lowercase-underscores}}{{Infobox Console variable
|name=volume
|default-value=0.7
|saved-to-config=yes
}}

This is the master volume for all sounds in the game. The range is 0 to 1, with zero being no sound and 1 being full volume. Do not set above 1 or below 0 or the game may crash. This is particularly useful to [[QuakeC]] programmers in the event you want to fade out the sound, often times fading simultaneously with [[v_cshift]].

{{Console variables}}</text>
      <sha1>n2xemfcolkur6zppjbi66guvvii28pi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>vtos</title>
    <ns>0</ns>
    <id>797</id>
    <revision>
      <id>2341</id>
      <timestamp>2013-03-26T23:50:19Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;====Syntax:==== &lt;code&gt;string vtos(vector vec)&lt;/code&gt;  Converts a vector into a string to allow it to be printed to the console or displayed in a centerprint. ====Parameters:==...&quot;</comment>
      <text xml:space="preserve" bytes="579">====Syntax:====
&lt;code&gt;string vtos(vector vec)&lt;/code&gt;

Converts a vector into a string to allow it to be printed to the console or displayed in a centerprint.
====Parameters:====
:&lt;code&gt;vec&lt;/code&gt; - The vector value to convert
====Returns:====
:Returns a string representation of the vector in the form &lt;code&gt;x y z&lt;/code&gt;.
====Other Details:====
The string value returned by this function always points to the same area in memory.  Running this function multiple times in the same frame will cause all strings to be set to the last vector converted.


[[Category:QuakeC Function]]</text>
      <sha1>d7oieh6h8j33apjb6trqd4yvtvq76h3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>walkmove</title>
    <ns>0</ns>
    <id>746</id>
    <revision>
      <id>2132</id>
      <timestamp>2013-03-25T23:44:32Z</timestamp>
      <contributor>
        <username>Necros</username>
        <id>27</id>
      </contributor>
      <comment>Created page with &quot;====Syntax:==== &lt;code&gt;float walkmove(float yaw, float dist)&lt;/code&gt;  Moves the entity referenced by self in the direction and distance specified. ====Parameters:==== :&lt;code&gt;yaw...&quot;</comment>
      <text xml:space="preserve" bytes="746">====Syntax:====
&lt;code&gt;float walkmove(float yaw, float dist)&lt;/code&gt;

Moves the entity referenced by self in the direction and distance specified.
====Parameters:====
:&lt;code&gt;yaw&lt;/code&gt; - The direction that the entity will move in.
:&lt;code&gt;dist&lt;/code&gt; - The distance that the entity will move in.
====Returns:====
:Returns TRUE if the movement completed successfully, and FALSE if it did not.  The entity's position is reverted if the move is unsuccessful.
====Other Details:====
walkmove, unlike movetogoal, does not affect the entity's angles so, in the case of monsters, it causes them to slide around.
Also unlike movetogoal, walkmove does not affect vertical position at all and will not match heights with enemies.

[[Category:QuakeC Function]]</text>
      <sha1>kkw6ior7beu1btwx2wnd65poygypgkz</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>weapons.qc</title>
    <ns>0</ns>
    <id>863</id>
    <revision>
      <id>2484</id>
      <timestamp>2013-03-29T11:29:03Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for the player [[Weapons | weapon]] behavior.   &lt;pre&gt; /* */ void (entity targ, entity inflictor, entity attacker, float damage) T_Damag...&quot;</comment>
      <text xml:space="preserve" bytes="25339">This [[Quake-C]] file contains the code for the player [[Weapons | weapon]] behavior.


&lt;pre&gt;
/*
*/
void (entity targ, entity inflictor, entity attacker, float damage) T_Damage;
void () player_run;
void(entity bomb, entity attacker, float rad, entity ignore) T_RadiusDamage;
void(vector org, vector vel, float damage) SpawnBlood;
void() SuperDamageSound;


// called by worldspawn
void() W_Precache =
{
	precache_sound (&quot;weapons/r_exp3.wav&quot;);	// new rocket explosion
	precache_sound (&quot;weapons/rocket1i.wav&quot;);	// spike gun
	precache_sound (&quot;weapons/sgun1.wav&quot;);
	precache_sound (&quot;weapons/guncock.wav&quot;);	// player shotgun
	precache_sound (&quot;weapons/ric1.wav&quot;);	// ricochet (used in c code)
	precache_sound (&quot;weapons/ric2.wav&quot;);	// ricochet (used in c code)
	precache_sound (&quot;weapons/ric3.wav&quot;);	// ricochet (used in c code)
	precache_sound (&quot;weapons/spike2.wav&quot;);	// super spikes
	precache_sound (&quot;weapons/tink1.wav&quot;);	// spikes tink (used in c code)
	precache_sound (&quot;weapons/grenade.wav&quot;);	// grenade launcher
	precache_sound (&quot;weapons/bounce.wav&quot;);		// grenade bounce
	precache_sound (&quot;weapons/shotgn2.wav&quot;);	// super shotgun
};

float() crandom =
{
	return 2*(random() - 0.5);
};

/*
================
W_FireAxe
================
*/
void() W_FireAxe =
{
	local	vector	source;
	local	vector	org;

	makevectors (self.v_angle);
	source = self.origin + '0 0 16';
	traceline (source, source + v_forward*64, FALSE, self);
	if (trace_fraction == 1.0)
		return;
	
	org = trace_endpos - v_forward*4;

	if (trace_ent.takedamage)
	{
		trace_ent.axhitme = 1;
		SpawnBlood (org, '0 0 0', 20);
		T_Damage (trace_ent, self, self, 20);
	}
	else
	{	// hit wall
		sound (self, CHAN_WEAPON, &quot;player/axhit2.wav&quot;, 1, ATTN_NORM);
		WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
		WriteByte (MSG_BROADCAST, TE_GUNSHOT);
		WriteCoord (MSG_BROADCAST, org_x);
		WriteCoord (MSG_BROADCAST, org_y);
		WriteCoord (MSG_BROADCAST, org_z);
	}
};


//============================================================================


vector() wall_velocity =
{
	local vector	vel;
	
	vel = normalize (self.velocity);
	vel = normalize(vel + v_up*(random()- 0.5) + v_right*(random()- 0.5));
	vel = vel + 2*trace_plane_normal;
	vel = vel * 200;
	
	return vel;
};


/*
================
SpawnMeatSpray
================
*/
void(vector org, vector vel) SpawnMeatSpray =
{
	local	entity missile, mpuff;
	local	vector	org;

	missile = spawn ();
	missile.owner = self;
	missile.movetype = MOVETYPE_BOUNCE;
	missile.solid = SOLID_NOT;

	makevectors (self.angles);

	missile.velocity = vel;
	missile.velocity_z = missile.velocity_z + 250 + 50*random();

	missile.avelocity = '3000 1000 2000';
	
// set missile duration
	missile.nextthink = time + 1;
	missile.think = SUB_Remove;

	setmodel (missile, &quot;progs/zom_gib.mdl&quot;);
	setsize (missile, '0 0 0', '0 0 0');		
	setorigin (missile, org);
};

/*
================
SpawnBlood
================
*/
void(vector org, vector vel, float damage) SpawnBlood =
{
	particle (org, vel*0.1, 73, damage*2);
};

/*
================
spawn_touchblood
================
*/
void(float damage) spawn_touchblood =
{
	local vector	vel;

	vel = wall_velocity () * 0.2;
	SpawnBlood (self.origin + vel*0.01, vel, damage);
};


/*
================
SpawnChunk
================
*/
void(vector org, vector vel) SpawnChunk =
{
	particle (org, vel*0.02, 0, 10);
};

/*
==============================================================================

MULTI-DAMAGE

Collects multiple small damages into a single damage

==============================================================================
*/

entity	multi_ent;
float	multi_damage;

void() ClearMultiDamage =
{
	multi_ent = world;
	multi_damage = 0;
};

void() ApplyMultiDamage =
{
	if (!multi_ent)
		return;
	T_Damage (multi_ent, self, self, multi_damage);
};

void(entity hit, float damage) AddMultiDamage =
{
	if (!hit)
		return;
	
	if (hit != multi_ent)
	{
		ApplyMultiDamage ();
		multi_damage = damage;
		multi_ent = hit;
	}
	else
		multi_damage = multi_damage + damage;
};

/*
==============================================================================

BULLETS

==============================================================================
*/

/*
================
TraceAttack
================
*/
void(float damage, vector dir) TraceAttack =
{
	local	vector	vel, org;
	
	vel = normalize(dir + v_up*crandom() + v_right*crandom());
	vel = vel + 2*trace_plane_normal;
	vel = vel * 200;

	org = trace_endpos - dir*4;

	if (trace_ent.takedamage)
	{
		SpawnBlood (org, vel*0.2, damage);
		AddMultiDamage (trace_ent, damage);
	}
	else
	{
		WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
		WriteByte (MSG_BROADCAST, TE_GUNSHOT);
		WriteCoord (MSG_BROADCAST, org_x);
		WriteCoord (MSG_BROADCAST, org_y);
		WriteCoord (MSG_BROADCAST, org_z);
	}
};

/*
================
FireBullets

Used by shotgun, super shotgun, and enemy soldier firing
Go to the trouble of combining multiple pellets into a single damage call.
================
*/
void(float shotcount, vector dir, vector spread) FireBullets =
{
	local	vector direction;
	local	vector	src;
	
	makevectors(self.v_angle);

	src = self.origin + v_forward*10;
	src_z = self.absmin_z + self.size_z * 0.7;

	ClearMultiDamage ();
	while (shotcount &gt; 0)
	{
		direction = dir + crandom()*spread_x*v_right + crandom()*spread_y*v_up;

		traceline (src, src + direction*2048, FALSE, self);
		if (trace_fraction != 1.0)
			TraceAttack (4, direction);

		shotcount = shotcount - 1;
	}
	ApplyMultiDamage ();
};

/*
================
W_FireShotgun
================
*/
void() W_FireShotgun =
{
	local vector dir;

	sound (self, CHAN_WEAPON, &quot;weapons/guncock.wav&quot;, 1, ATTN_NORM);	

	self.punchangle_x = -2;
	
	self.currentammo = self.ammo_shells = self.ammo_shells - 1;
	dir = aim (self, 100000);
	FireBullets (6, dir, '0.04 0.04 0');
};


/*
================
W_FireSuperShotgun
================
*/
void() W_FireSuperShotgun =
{
	local vector dir;

	if (self.currentammo == 1)
	{
		W_FireShotgun ();
		return;
	}
		
	sound (self ,CHAN_WEAPON, &quot;weapons/shotgn2.wav&quot;, 1, ATTN_NORM);	

	self.punchangle_x = -4;
	
	self.currentammo = self.ammo_shells = self.ammo_shells - 2;
	dir = aim (self, 100000);
	FireBullets (14, dir, '0.14 0.08 0');
};


/*
==============================================================================

ROCKETS

==============================================================================
*/

void()	s_explode1	=	[0,		s_explode2] {};
void()	s_explode2	=	[1,		s_explode3] {};
void()	s_explode3	=	[2,		s_explode4] {};
void()	s_explode4	=	[3,		s_explode5] {};
void()	s_explode5	=	[4,		s_explode6] {};
void()	s_explode6	=	[5,		SUB_Remove] {};

void() BecomeExplosion =
{
	self.movetype = MOVETYPE_NONE;
	self.velocity = '0 0 0';
	self.touch = SUB_Null;
	setmodel (self, &quot;progs/s_explod.spr&quot;);
	self.solid = SOLID_NOT;
	s_explode1 ();
};

void() T_MissileTouch =
{
	local float	damg;

	if (other == self.owner)
		return;		// don't explode on owner

	if (pointcontents(self.origin) == CONTENT_SKY)
	{
		remove(self);
		return;
	}

	damg = 100 + random()*20;
	
	if (other.health)
	{
		if (other.classname == &quot;monster_shambler&quot;)
			damg = damg * 0.5;	// mostly immune
		T_Damage (other, self, self.owner, damg );
	}

	// don't do radius damage to the other, because all the damage
	// was done in the impact
	T_RadiusDamage (self, self.owner, 120, other);

//	sound (self, CHAN_WEAPON, &quot;weapons/r_exp3.wav&quot;, 1, ATTN_NORM);
	self.origin = self.origin - 8*normalize(self.velocity);

	WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
	WriteByte (MSG_BROADCAST, TE_EXPLOSION);
	WriteCoord (MSG_BROADCAST, self.origin_x);
	WriteCoord (MSG_BROADCAST, self.origin_y);
	WriteCoord (MSG_BROADCAST, self.origin_z);

	BecomeExplosion ();
};



/*
================
W_FireRocket
================
*/
void() W_FireRocket =
{
	local	entity missile, mpuff;
	
	self.currentammo = self.ammo_rockets = self.ammo_rockets - 1;
	
	sound (self, CHAN_WEAPON, &quot;weapons/sgun1.wav&quot;, 1, ATTN_NORM);

	self.punchangle_x = -2;

	missile = spawn ();
	missile.owner = self;
	missile.movetype = MOVETYPE_FLYMISSILE;
	missile.solid = SOLID_BBOX;
	missile.classname = &quot;missile&quot;;
		
// set missile speed	

	makevectors (self.v_angle);
	missile.velocity = aim(self, 1000);
	missile.velocity = missile.velocity * 1000;
	missile.angles = vectoangles(missile.velocity);
	
	missile.touch = T_MissileTouch;
	
// set missile duration
	missile.nextthink = time + 5;
	missile.think = SUB_Remove;

	setmodel (missile, &quot;progs/missile.mdl&quot;);
	setsize (missile, '0 0 0', '0 0 0');		
	setorigin (missile, self.origin + v_forward*8 + '0 0 16');
};

/*
===============================================================================

LIGHTNING

===============================================================================
*/

/*
=================
LightningDamage
=================
*/
void(vector p1, vector p2, entity from, float damage) LightningDamage =
{
	local entity		e1, e2;
	local vector		f;
	
	f = p2 - p1;
	normalize (f);
	f_x = 0 - f_y;
	f_y = f_x;
	f_z = 0;
	f = f*16;

	e1 = e2 = world;

	traceline (p1, p2, FALSE, self);
	if (trace_ent.takedamage)
	{
		particle (trace_endpos, '0 0 100', 225, damage*4);
		T_Damage (trace_ent, from, from, damage);
		if (self.classname == &quot;player&quot;)
		{
			if (other.classname == &quot;player&quot;)
				trace_ent.velocity_z = trace_ent.velocity_z + 400;
		}
	}
	e1 = trace_ent;

	traceline (p1 + f, p2 + f, FALSE, self);
	if (trace_ent != e1 &amp;&amp; trace_ent.takedamage)
	{
		particle (trace_endpos, '0 0 100', 225, damage*4);
		T_Damage (trace_ent, from, from, damage);
	}
	e2 = trace_ent;

	traceline (p1 - f, p2 - f, FALSE, self);
	if (trace_ent != e1 &amp;&amp; trace_ent != e2 &amp;&amp; trace_ent.takedamage)
	{
		particle (trace_endpos, '0 0 100', 225, damage*4);
		T_Damage (trace_ent, from, from, damage);
	}
};


void() W_FireLightning =
{
	local	vector		org;
	local	float		cells;

	if (self.ammo_cells &lt; 1)
	{
		self.weapon = W_BestWeapon ();
		W_SetCurrentAmmo ();
		return;
	}

// explode if under water
	if (self.waterlevel &gt; 1)
	{
		cells = self.ammo_cells;
		self.ammo_cells = 0;
		W_SetCurrentAmmo ();
		T_RadiusDamage (self, self, 35*cells, world);
		return;
	}

	if (self.t_width &lt; time)
	{
		sound (self, CHAN_WEAPON, &quot;weapons/lhit.wav&quot;, 1, ATTN_NORM);
		self.t_width = time + 0.6;
	}
	self.punchangle_x = -2;

	self.currentammo = self.ammo_cells = self.ammo_cells - 1;

	org = self.origin + '0 0 16';
	
	traceline (org, org + v_forward*600, TRUE, self);

	WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
	WriteByte (MSG_BROADCAST, TE_LIGHTNING2);
	WriteEntity (MSG_BROADCAST, self);
	WriteCoord (MSG_BROADCAST, org_x);
	WriteCoord (MSG_BROADCAST, org_y);
	WriteCoord (MSG_BROADCAST, org_z);
	WriteCoord (MSG_BROADCAST, trace_endpos_x);
	WriteCoord (MSG_BROADCAST, trace_endpos_y);
	WriteCoord (MSG_BROADCAST, trace_endpos_z);

	LightningDamage (self.origin, trace_endpos + v_forward*4, self, 30);
};


//=============================================================================


void() GrenadeExplode =
{
	T_RadiusDamage (self, self.owner, 120, world);

	WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
	WriteByte (MSG_BROADCAST, TE_EXPLOSION);
	WriteCoord (MSG_BROADCAST, self.origin_x);
	WriteCoord (MSG_BROADCAST, self.origin_y);
	WriteCoord (MSG_BROADCAST, self.origin_z);

	BecomeExplosion ();
};

void() GrenadeTouch =
{
	if (other == self.owner)
		return;		// don't explode on owner
	if (other.takedamage == DAMAGE_AIM)
	{
		GrenadeExplode();
		return;
	}
	sound (self, CHAN_WEAPON, &quot;weapons/bounce.wav&quot;, 1, ATTN_NORM);	// bounce sound
	if (self.velocity == '0 0 0')
		self.avelocity = '0 0 0';
};

/*
================
W_FireGrenade
================
*/
void() W_FireGrenade =
{
	local	entity missile, mpuff;
	
	self.currentammo = self.ammo_rockets = self.ammo_rockets - 1;
	
	sound (self, CHAN_WEAPON, &quot;weapons/grenade.wav&quot;, 1, ATTN_NORM);

	self.punchangle_x = -2;

	missile = spawn ();
	missile.owner = self;
	missile.movetype = MOVETYPE_BOUNCE;
	missile.solid = SOLID_BBOX;
	missile.classname = &quot;grenade&quot;;
		
// set missile speed	

	makevectors (self.v_angle);

	if (self.v_angle_x)
		missile.velocity = v_forward*600 + v_up * 200 + crandom()*v_right*10 + crandom()*v_up*10;
	else
	{
		missile.velocity = aim(self, 10000);
		missile.velocity = missile.velocity * 600;
		missile.velocity_z = 200;
	}

	missile.avelocity = '300 300 300';

	missile.angles = vectoangles(missile.velocity);
	
	missile.touch = GrenadeTouch;
	
// set missile duration
	missile.nextthink = time + 2.5;
	missile.think = GrenadeExplode;

	setmodel (missile, &quot;progs/grenade.mdl&quot;);
	setsize (missile, '0 0 0', '0 0 0');		
	setorigin (missile, self.origin);
};


//=============================================================================

void() spike_touch;
void() superspike_touch;


/*
===============
launch_spike

Used for both the player and the ogre
===============
*/
void(vector org, vector dir) launch_spike =
{
	newmis = spawn ();
	newmis.owner = self;
	newmis.movetype = MOVETYPE_FLYMISSILE;
	newmis.solid = SOLID_BBOX;

	newmis.angles = vectoangles(dir);
	
	newmis.touch = spike_touch;
	newmis.classname = &quot;spike&quot;;
	newmis.think = SUB_Remove;
	newmis.nextthink = time + 6;
	setmodel (newmis, &quot;progs/spike.mdl&quot;);
	setsize (newmis, VEC_ORIGIN, VEC_ORIGIN);		
	setorigin (newmis, org);

	newmis.velocity = dir * 1000;
};

void() W_FireSuperSpikes =
{
	local vector	dir;
	local entity	old;
	
	sound (self, CHAN_WEAPON, &quot;weapons/spike2.wav&quot;, 1, ATTN_NORM);
	self.attack_finished = time + 0.2;
	self.currentammo = self.ammo_nails = self.ammo_nails - 2;
	dir = aim (self, 1000);
	launch_spike (self.origin + '0 0 16', dir);
	newmis.touch = superspike_touch;
	setmodel (newmis, &quot;progs/s_spike.mdl&quot;);
	setsize (newmis, VEC_ORIGIN, VEC_ORIGIN);		
	self.punchangle_x = -2;
};

void(float ox) W_FireSpikes =
{
	local vector	dir;
	local entity	old;
	
	makevectors (self.v_angle);
	
	if (self.ammo_nails &gt;= 2 &amp;&amp; self.weapon == IT_SUPER_NAILGUN)
	{
		W_FireSuperSpikes ();
		return;
	}

	if (self.ammo_nails &lt; 1)
	{
		self.weapon = W_BestWeapon ();
		W_SetCurrentAmmo ();
		return;
	}

	sound (self, CHAN_WEAPON, &quot;weapons/rocket1i.wav&quot;, 1, ATTN_NORM);
	self.attack_finished = time + 0.2;
	self.currentammo = self.ammo_nails = self.ammo_nails - 1;
	dir = aim (self, 1000);
	launch_spike (self.origin + '0 0 16' + v_right*ox, dir);

	self.punchangle_x = -2;
};



.float hit_z;
void() spike_touch =
{
local float rand;
	if (other == self.owner)
		return;

	if (other.solid == SOLID_TRIGGER)
		return;	// trigger field, do nothing

	if (pointcontents(self.origin) == CONTENT_SKY)
	{
		remove(self);
		return;
	}
	
// hit something that bleeds
	if (other.takedamage)
	{
		spawn_touchblood (9);
		T_Damage (other, self, self.owner, 9);
	}
	else
	{
		WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
		
		if (self.classname == &quot;wizspike&quot;)
			WriteByte (MSG_BROADCAST, TE_WIZSPIKE);
		else if (self.classname == &quot;knightspike&quot;)
			WriteByte (MSG_BROADCAST, TE_KNIGHTSPIKE);
		else
			WriteByte (MSG_BROADCAST, TE_SPIKE);
		WriteCoord (MSG_BROADCAST, self.origin_x);
		WriteCoord (MSG_BROADCAST, self.origin_y);
		WriteCoord (MSG_BROADCAST, self.origin_z);
	}

	remove(self);

};

void() superspike_touch =
{
local float rand;
	if (other == self.owner)
		return;

	if (other.solid == SOLID_TRIGGER)
		return;	// trigger field, do nothing

	if (pointcontents(self.origin) == CONTENT_SKY)
	{
		remove(self);
		return;
	}
	
// hit something that bleeds
	if (other.takedamage)
	{
		spawn_touchblood (18);
		T_Damage (other, self, self.owner, 18);
	}
	else
	{
		WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
		WriteByte (MSG_BROADCAST, TE_SUPERSPIKE);
		WriteCoord (MSG_BROADCAST, self.origin_x);
		WriteCoord (MSG_BROADCAST, self.origin_y);
		WriteCoord (MSG_BROADCAST, self.origin_z);
	}

	remove(self);

};


/*
===============================================================================

PLAYER WEAPON USE

===============================================================================
*/

void() W_SetCurrentAmmo =
{
	player_run ();		// get out of any weapon firing states

	self.items = self.items - ( self.items &amp; (IT_SHELLS | IT_NAILS | IT_ROCKETS | IT_CELLS) );
	
	if (self.weapon == IT_AXE)
	{
		self.currentammo = 0;
		self.weaponmodel = &quot;progs/v_axe.mdl&quot;;
		self.weaponframe = 0;
	}
	else if (self.weapon == IT_SHOTGUN)
	{
		self.currentammo = self.ammo_shells;
		self.weaponmodel = &quot;progs/v_shot.mdl&quot;;
		self.weaponframe = 0;
		self.items = self.items | IT_SHELLS;
	}
	else if (self.weapon == IT_SUPER_SHOTGUN)
	{
		self.currentammo = self.ammo_shells;
		self.weaponmodel = &quot;progs/v_shot2.mdl&quot;;
		self.weaponframe = 0;
		self.items = self.items | IT_SHELLS;
	}
	else if (self.weapon == IT_NAILGUN)
	{
		self.currentammo = self.ammo_nails;
		self.weaponmodel = &quot;progs/v_nail.mdl&quot;;
		self.weaponframe = 0;
		self.items = self.items | IT_NAILS;
	}
	else if (self.weapon == IT_SUPER_NAILGUN)
	{
		self.currentammo = self.ammo_nails;
		self.weaponmodel = &quot;progs/v_nail2.mdl&quot;;
		self.weaponframe = 0;
		self.items = self.items | IT_NAILS;
	}
	else if (self.weapon == IT_GRENADE_LAUNCHER)
	{
		self.currentammo = self.ammo_rockets;
		self.weaponmodel = &quot;progs/v_rock.mdl&quot;;
		self.weaponframe = 0;
		self.items = self.items | IT_ROCKETS;
	}
	else if (self.weapon == IT_ROCKET_LAUNCHER)
	{
		self.currentammo = self.ammo_rockets;
		self.weaponmodel = &quot;progs/v_rock2.mdl&quot;;
		self.weaponframe = 0;
		self.items = self.items | IT_ROCKETS;
	}
	else if (self.weapon == IT_LIGHTNING)
	{
		self.currentammo = self.ammo_cells;
		self.weaponmodel = &quot;progs/v_light.mdl&quot;;
		self.weaponframe = 0;
		self.items = self.items | IT_CELLS;
	}
	else
	{
		self.currentammo = 0;
		self.weaponmodel = &quot;&quot;;
		self.weaponframe = 0;
	}
};

float() W_BestWeapon =
{
	local	float	it;
	
	it = self.items;

	if (self.waterlevel &lt;= 1 &amp;&amp; self.ammo_cells &gt;= 1 &amp;&amp; (it &amp; IT_LIGHTNING) )
			return IT_LIGHTNING;
	if(self.ammo_nails &gt;= 2 &amp;&amp; (it &amp; IT_SUPER_NAILGUN) )
		return IT_SUPER_NAILGUN;
	if(self.ammo_shells &gt;= 2 &amp;&amp; (it &amp; IT_SUPER_SHOTGUN) )
		return IT_SUPER_SHOTGUN;
	if(self.ammo_nails &gt;= 1 &amp;&amp; (it &amp; IT_NAILGUN) )
		return IT_NAILGUN;
	if(self.ammo_shells &gt;= 1 &amp;&amp; (it &amp; IT_SHOTGUN) )
		return IT_SHOTGUN;
	return IT_AXE;
};

float() W_CheckNoAmmo =
{
	if (self.currentammo &gt; 0)
		return TRUE;

	if (self.weapon == IT_AXE)
		return TRUE;
	
	self.weapon = W_BestWeapon ();

	W_SetCurrentAmmo ();
	
// drop the weapon down
	return FALSE;
};

/*
============
W_Attack

An attack impulse can be triggered now
============
*/
void()	player_axe1;
void()	player_axeb1;
void()	player_axec1;
void()	player_axed1;
void()	player_shot1;
void()	player_nail1;
void()	player_light1;
void()	player_rocket1;

void() W_Attack =
{
	local	float	r;

	if (!W_CheckNoAmmo ())
		return;

	makevectors	(self.v_angle);			// calculate forward angle for velocity
	self.show_hostile = time + 1;	// wake monsters up

	if (self.weapon == IT_AXE)
	{
		sound (self, CHAN_WEAPON, &quot;weapons/ax1.wav&quot;, 1, ATTN_NORM);
		r = random();
		if (r &lt; 0.25)
			player_axe1 ();
		else if (r&lt;0.5)
			player_axeb1 ();
		else if (r&lt;0.75)
			player_axec1 ();
		else
			player_axed1 ();
		self.attack_finished = time + 0.5;
	}
	else if (self.weapon == IT_SHOTGUN)
	{
		player_shot1 ();
		W_FireShotgun ();
		self.attack_finished = time + 0.5;
	}
	else if (self.weapon == IT_SUPER_SHOTGUN)
	{
		player_shot1 ();
		W_FireSuperShotgun ();
		self.attack_finished = time + 0.7;
	}
	else if (self.weapon == IT_NAILGUN)
	{
		player_nail1 ();
	}
	else if (self.weapon == IT_SUPER_NAILGUN)
	{
		player_nail1 ();
	}
	else if (self.weapon == IT_GRENADE_LAUNCHER)
	{
		player_rocket1();
		W_FireGrenade();
		self.attack_finished = time + 0.6;
	}
	else if (self.weapon == IT_ROCKET_LAUNCHER)
	{
		player_rocket1();
		W_FireRocket();
		self.attack_finished = time + 0.8;
	}
	else if (self.weapon == IT_LIGHTNING)
	{
		player_light1();
		self.attack_finished = time + 0.1;
		sound (self, CHAN_AUTO, &quot;weapons/lstart.wav&quot;, 1, ATTN_NORM);
	}
};

/*
============
W_ChangeWeapon

============
*/
void() W_ChangeWeapon =
{
	local	float	it, am, fl;
	
	it = self.items;
	am = 0;
	
	if (self.impulse == 1)
	{
		fl = IT_AXE;
	}
	else if (self.impulse == 2)
	{
		fl = IT_SHOTGUN;
		if (self.ammo_shells &lt; 1)
			am = 1;
	}
	else if (self.impulse == 3)
	{
		fl = IT_SUPER_SHOTGUN;
		if (self.ammo_shells &lt; 2)
			am = 1;
	}		
	else if (self.impulse == 4)
	{
		fl = IT_NAILGUN;
		if (self.ammo_nails &lt; 1)
			am = 1;
	}
	else if (self.impulse == 5)
	{
		fl = IT_SUPER_NAILGUN;
		if (self.ammo_nails &lt; 2)
			am = 1;
	}
	else if (self.impulse == 6)
	{
		fl = IT_GRENADE_LAUNCHER;
		if (self.ammo_rockets &lt; 1)
			am = 1;
	}
	else if (self.impulse == 7)
	{
		fl = IT_ROCKET_LAUNCHER;
		if (self.ammo_rockets &lt; 1)
			am = 1;
	}
	else if (self.impulse == 8)
	{
		fl = IT_LIGHTNING;
		if (self.ammo_cells &lt; 1)
			am = 1;
	}

	self.impulse = 0;
	
	if (!(self.items &amp; fl))
	{	// don't have the weapon or the ammo
		sprint (self, &quot;no weapon.\n&quot;);
		return;
	}
	
	if (am)
	{	// don't have the ammo
		sprint (self, &quot;not enough ammo.\n&quot;);
		return;
	}

//
// set weapon, set ammo
//
	self.weapon = fl;		
	W_SetCurrentAmmo ();
};

/*
============
CheatCommand
============
*/
void() CheatCommand =
{
	if (deathmatch || coop)
		return;

	self.ammo_rockets = 100;
	self.ammo_nails = 200;
	self.ammo_shells = 100;
	self.items = self.items | 
		IT_AXE |
		IT_SHOTGUN |
		IT_SUPER_SHOTGUN |
		IT_NAILGUN |
		IT_SUPER_NAILGUN |
		IT_GRENADE_LAUNCHER |
		IT_ROCKET_LAUNCHER |
		IT_KEY1 | IT_KEY2;

	self.ammo_cells = 200;
	self.items = self.items | IT_LIGHTNING;

	self.weapon = IT_ROCKET_LAUNCHER;
	self.impulse = 0;
	W_SetCurrentAmmo ();
};

/*
============
CycleWeaponCommand

Go to the next weapon with ammo
============
*/
void() CycleWeaponCommand =
{
	local	float	it, am;
	
	it = self.items;
	self.impulse = 0;
	
	while (1)
	{
		am = 0;

		if (self.weapon == IT_LIGHTNING)
		{
			self.weapon = IT_AXE;
		}
		else if (self.weapon == IT_AXE)
		{
			self.weapon = IT_SHOTGUN;
			if (self.ammo_shells &lt; 1)
				am = 1;
		}
		else if (self.weapon == IT_SHOTGUN)
		{
			self.weapon = IT_SUPER_SHOTGUN;
			if (self.ammo_shells &lt; 2)
				am = 1;
		}		
		else if (self.weapon == IT_SUPER_SHOTGUN)
		{
			self.weapon = IT_NAILGUN;
			if (self.ammo_nails &lt; 1)
				am = 1;
		}
		else if (self.weapon == IT_NAILGUN)
		{
			self.weapon = IT_SUPER_NAILGUN;
			if (self.ammo_nails &lt; 2)
				am = 1;
		}
		else if (self.weapon == IT_SUPER_NAILGUN)
		{
			self.weapon = IT_GRENADE_LAUNCHER;
			if (self.ammo_rockets &lt; 1)
				am = 1;
		}
		else if (self.weapon == IT_GRENADE_LAUNCHER)
		{
			self.weapon = IT_ROCKET_LAUNCHER;
			if (self.ammo_rockets &lt; 1)
				am = 1;
		}
		else if (self.weapon == IT_ROCKET_LAUNCHER)
		{
			self.weapon = IT_LIGHTNING;
			if (self.ammo_cells &lt; 1)
				am = 1;
		}
	
		if ( (it &amp; self.weapon) &amp;&amp; am == 0)
		{
			W_SetCurrentAmmo ();
			return;
		}
	}

};

/*
============
CycleWeaponReverseCommand

Go to the prev weapon with ammo
============
*/
void() CycleWeaponReverseCommand =
{
	local	float	it, am;
	
	it = self.items;
	self.impulse = 0;

	while (1)
	{
		am = 0;

		if (self.weapon == IT_LIGHTNING)
		{
			self.weapon = IT_ROCKET_LAUNCHER;
			if (self.ammo_rockets &lt; 1)
				am = 1;
		}
		else if (self.weapon == IT_ROCKET_LAUNCHER)
		{
			self.weapon = IT_GRENADE_LAUNCHER;
			if (self.ammo_rockets &lt; 1)
				am = 1;
		}
		else if (self.weapon == IT_GRENADE_LAUNCHER)
		{
			self.weapon = IT_SUPER_NAILGUN;
			if (self.ammo_nails &lt; 2)
				am = 1;
		}
		else if (self.weapon == IT_SUPER_NAILGUN)
		{
			self.weapon = IT_NAILGUN;
			if (self.ammo_nails &lt; 1)
				am = 1;
		}
		else if (self.weapon == IT_NAILGUN)
		{
			self.weapon = IT_SUPER_SHOTGUN;
			if (self.ammo_shells &lt; 2)
				am = 1;
		}		
		else if (self.weapon == IT_SUPER_SHOTGUN)
		{
			self.weapon = IT_SHOTGUN;
			if (self.ammo_shells &lt; 1)
				am = 1;
		}
		else if (self.weapon == IT_SHOTGUN)
		{
			self.weapon = IT_AXE;
		}
		else if (self.weapon == IT_AXE)
		{
			self.weapon = IT_LIGHTNING;
			if (self.ammo_cells &lt; 1)
				am = 1;
		}
	
		if ( (it &amp; self.weapon) &amp;&amp; am == 0)
		{
			W_SetCurrentAmmo ();
			return;
		}
	}

};

/*
============
ServerflagsCommand

Just for development
============
*/
void() ServerflagsCommand =
{
	serverflags = serverflags * 2 + 1;
};

void() QuadCheat =
{
	if (deathmatch || coop)
		return;
	self.super_time = 1;
	self.super_damage_finished = time + 30;
	self.items = self.items | IT_QUAD;
	dprint (&quot;quad cheat\n&quot;);
};

/*
============
ImpulseCommands

============
*/
void() ImpulseCommands =
{
	if (self.impulse &gt;= 1 &amp;&amp; self.impulse &lt;= 8)
		W_ChangeWeapon ();

	if (self.impulse == 9)
		CheatCommand ();
	if (self.impulse == 10)
		CycleWeaponCommand ();
	if (self.impulse == 11)
		ServerflagsCommand ();
	if (self.impulse == 12)
		CycleWeaponReverseCommand ();

	if (self.impulse == 255)
		QuadCheat ();
		
	self.impulse = 0;
};

/*
============
W_WeaponFrame

Called every frame so impulse events can be handled as well as possible
============
*/
void() W_WeaponFrame =
{
	if (time &lt; self.attack_finished)
		return;

	ImpulseCommands ();
	
// check for attack
	if (self.button0)
	{
		SuperDamageSound ();
		W_Attack ();
	}
};

/*
========
SuperDamageSound

Plays sound if needed
========
*/
void() SuperDamageSound =
{
	if (self.super_damage_finished &gt; time)
	{
		if (self.super_sound &lt; time)
		{
			self.super_sound = time + 1;
			sound (self, CHAN_BODY, &quot;items/damage3.wav&quot;, 1, ATTN_NORM);
		}
	}
	return;
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>c9xjtq3hqry1mels835qrmq2e2926hh</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>windowed mouse</title>
    <ns>0</ns>
    <id>86</id>
    <revision>
      <id>146</id>
      <timestamp>2007-10-30T22:57:43Z</timestamp>
      <contributor>
        <username>QuakeWiki</username>
        <id>1</id>
      </contributor>
      <comment>New page: {{underscore-lowercase-underscores}}{{Infobox Console variable |name=_windowed_mouse |default-value=0 |saved-to-config=yes }} Versions: [[WinQuake]] and [[GLQuake]]  If the game is running...</comment>
      <text xml:space="preserve" bytes="399">{{underscore-lowercase-underscores}}{{Infobox Console variable
|name=_windowed_mouse
|default-value=0
|saved-to-config=yes
}}
Versions: [[WinQuake]] and [[GLQuake]]

If the game is running in a window and _windowed_mouse is set to 1, then the mouse will control aiming in Quake. If it is set to 0, the mouse will become a Windows (or Linux I suppose) cursor, ignored by Quake.

{{Console variables}}</text>
      <sha1>iodtmittw63u3cxjf45wm44y0i7hjms</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2660</id>
      <parentid>146</parentid>
      <timestamp>2013-03-29T14:22:27Z</timestamp>
      <contributor>
        <username>Move page script</username>
        <id>0</id>
      </contributor>
      <minor/>
      <comment>Move page script moved page [[Windowed mouse]] to [[windowed mouse]]: Fixing the case</comment>
      <text xml:space="preserve" bytes="399">{{underscore-lowercase-underscores}}{{Infobox Console variable
|name=_windowed_mouse
|default-value=0
|saved-to-config=yes
}}
Versions: [[WinQuake]] and [[GLQuake]]

If the game is running in a window and _windowed_mouse is set to 1, then the mouse will control aiming in Quake. If it is set to 0, the mouse will become a Windows (or Linux I suppose) cursor, ignored by Quake.

{{Console variables}}</text>
      <sha1>iodtmittw63u3cxjf45wm44y0i7hjms</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>wizard.qc</title>
    <ns>0</ns>
    <id>864</id>
    <revision>
      <id>2485</id>
      <timestamp>2013-03-29T11:30:06Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for the [[Scrag]] [[Monsters | monster]].   &lt;pre&gt; /* ==============================================================================  WI...&quot;</comment>
      <text xml:space="preserve" bytes="10773">This [[Quake-C]] file contains the code for the [[Scrag]] [[Monsters | monster]].


&lt;pre&gt;
/*
==============================================================================

WIZARD

==============================================================================
*/

$cd id1/models/a_wizard
$origin 0 0 24
$base wizbase	
$skin wizbase

$frame hover1 hover2 hover3 hover4 hover5 hover6 hover7 hover8
$frame hover9 hover10 hover11 hover12 hover13 hover14 hover15

$frame fly1 fly2 fly3 fly4 fly5 fly6 fly7 fly8 fly9 fly10
$frame fly11 fly12 fly13 fly14

$frame magatt1 magatt2 magatt3 magatt4 magatt5 magatt6 magatt7
$frame magatt8 magatt9 magatt10 magatt11 magatt12 magatt13

$frame pain1 pain2 pain3 pain4

$frame death1 death2 death3 death4 death5 death6 death7 death8

/*
==============================================================================

WIZARD

If the player moves behind cover before the missile is launched, launch it
at the last visible spot with no velocity leading, in hopes that the player
will duck back out and catch it.
==============================================================================
*/

/*
=============
LaunchMissile

Sets the given entities velocity and angles so that it will hit self.enemy
if self.enemy maintains it's current velocity
0.1 is moderately accurate, 0.0 is totally accurate
=============
*/
void(entity missile, float mspeed, float accuracy) LaunchMissile =
{
	local	vector	vec, move;
	local	float	fly;

	makevectors (self.angles);
		
// set missile speed
	vec = self.enemy.origin + self.enemy.mins + self.enemy.size * 0.7 - missile.origin;

// calc aproximate time for missile to reach vec
	fly = vlen (vec) / mspeed;
	
// get the entities xy velocity
	move = self.enemy.velocity;
	move_z = 0;

// project the target forward in time
	vec = vec + move * fly;
	
	vec = normalize(vec);
	vec = vec + accuracy*v_up*(random()- 0.5) + accuracy*v_right*(random()- 0.5);
	
	missile.velocity = vec * mspeed;

	missile.angles = '0 0 0';
	missile.angles_y = vectoyaw(missile.velocity);

// set missile duration
	missile.nextthink = time + 5;
	missile.think = SUB_Remove;	
};


void() wiz_run1;
void() wiz_side1;

/*
=================
WizardCheckAttack
=================
*/
float()	WizardCheckAttack =
{
	local vector	spot1, spot2;	
	local entity	targ;
	local float		chance;

	if (time &lt; self.attack_finished)
		return FALSE;
	if (!enemy_vis)
		return FALSE;

	if (enemy_range == RANGE_FAR)
	{
		if (self.attack_state != AS_STRAIGHT)
		{
			self.attack_state = AS_STRAIGHT;
			wiz_run1 ();
		}
		return FALSE;
	}
		
	targ = self.enemy;
	
// see if any entities are in the way of the shot
	spot1 = self.origin + self.view_ofs;
	spot2 = targ.origin + targ.view_ofs;

	traceline (spot1, spot2, FALSE, self);

	if (trace_ent != targ)
	{	// don't have a clear shot, so move to a side
		if (self.attack_state != AS_STRAIGHT)
		{
			self.attack_state = AS_STRAIGHT;
			wiz_run1 ();
		}
		return FALSE;
	}
			
	if (enemy_range == RANGE_MELEE)
		chance = 0.9;
	else if (enemy_range == RANGE_NEAR)
		chance = 0.6;
	else if (enemy_range == RANGE_MID)
		chance = 0.2;
	else
		chance = 0;

	if (random () &lt; chance)
	{
		self.attack_state = AS_MISSILE;
		return TRUE;
	}

	if (enemy_range == RANGE_MID)
	{
		if (self.attack_state != AS_STRAIGHT)
		{
			self.attack_state = AS_STRAIGHT;
			wiz_run1 ();
		}
	}
	else
	{
		if (self.attack_state != AS_SLIDING)
		{
			self.attack_state = AS_SLIDING;
			wiz_side1 ();
		}
	}
	
	return FALSE;
};

/*
=================
WizardAttackFinished
=================
*/
float()	WizardAttackFinished =
{
	if (enemy_range &gt;= RANGE_MID || !enemy_vis)
	{
		self.attack_state = AS_STRAIGHT;
		self.think = wiz_run1;
	}
	else
	{
		self.attack_state = AS_SLIDING;
		self.think = wiz_side1;
	}
};

/*
==============================================================================

FAST ATTACKS

==============================================================================
*/

void() Wiz_FastFire =
{
	local vector		vec;
	local vector		dst;

	if (self.owner.health &gt; 0)
	{
		self.owner.effects = self.owner.effects | EF_MUZZLEFLASH;

		makevectors (self.enemy.angles);	
		dst = self.enemy.origin - 13*self.movedir;
	
		vec = normalize(dst - self.origin);
		sound (self, CHAN_WEAPON, &quot;wizard/wattack.wav&quot;, 1, ATTN_NORM);
		launch_spike (self.origin, vec);
		newmis.velocity = vec*600;
		newmis.owner = self.owner;
		newmis.classname = &quot;wizspike&quot;;
		setmodel (newmis, &quot;progs/w_spike.mdl&quot;);
		setsize (newmis, VEC_ORIGIN, VEC_ORIGIN);		
	}

	remove (self);
};


void() Wiz_StartFast =
{
	local	entity	missile;
	
	sound (self, CHAN_WEAPON, &quot;wizard/wattack.wav&quot;, 1, ATTN_NORM);
	self.v_angle = self.angles;
	makevectors (self.angles);

	missile = spawn ();
	missile.owner = self;
	missile.nextthink = time + 0.6;
	setsize (missile, '0 0 0', '0 0 0');		
	setorigin (missile, self.origin + '0 0 30' + v_forward*14 + v_right*14);
	missile.enemy = self.enemy;
	missile.nextthink = time + 0.8;
	missile.think = Wiz_FastFire;
	missile.movedir = v_right;

	missile = spawn ();
	missile.owner = self;
	missile.nextthink = time + 1;
	setsize (missile, '0 0 0', '0 0 0');		
	setorigin (missile, self.origin + '0 0 30' + v_forward*14 + v_right* -14);
	missile.enemy = self.enemy;
	missile.nextthink = time + 0.3;
	missile.think = Wiz_FastFire;
	missile.movedir = VEC_ORIGIN - v_right;
};



void() Wiz_idlesound =
{
local float wr;
	wr = random() * 5;

	if (self.waitmin &lt; time)
	{
	 	self.waitmin = time + 2;
	 	if (wr &gt; 4.5) 
	 		sound (self, CHAN_VOICE, &quot;wizard/widle1.wav&quot;, 1,  ATTN_IDLE);
	 	if (wr &lt; 1.5)
	 		sound (self, CHAN_VOICE, &quot;wizard/widle2.wav&quot;, 1, ATTN_IDLE);
	}
	return;
};

void()	wiz_stand1	=[	$hover1,		wiz_stand2	] {ai_stand();};
void()	wiz_stand2	=[	$hover2,		wiz_stand3	] {ai_stand();};
void()	wiz_stand3	=[	$hover3,		wiz_stand4	] {ai_stand();};
void()	wiz_stand4	=[	$hover4,		wiz_stand5	] {ai_stand();};
void()	wiz_stand5	=[	$hover5,		wiz_stand6	] {ai_stand();};
void()	wiz_stand6	=[	$hover6,		wiz_stand7	] {ai_stand();};
void()	wiz_stand7	=[	$hover7,		wiz_stand8	] {ai_stand();};
void()	wiz_stand8	=[	$hover8,		wiz_stand1	] {ai_stand();};

void()	wiz_walk1	=[	$hover1,		wiz_walk2	] {ai_walk(8);
Wiz_idlesound();};
void()	wiz_walk2	=[	$hover2,		wiz_walk3	] {ai_walk(8);};
void()	wiz_walk3	=[	$hover3,		wiz_walk4	] {ai_walk(8);};
void()	wiz_walk4	=[	$hover4,		wiz_walk5	] {ai_walk(8);};
void()	wiz_walk5	=[	$hover5,		wiz_walk6	] {ai_walk(8);};
void()	wiz_walk6	=[	$hover6,		wiz_walk7	] {ai_walk(8);};
void()	wiz_walk7	=[	$hover7,		wiz_walk8	] {ai_walk(8);};
void()	wiz_walk8	=[	$hover8,		wiz_walk1	] {ai_walk(8);};

void()	wiz_side1	=[	$hover1,		wiz_side2	] {ai_run(8);
Wiz_idlesound();};
void()	wiz_side2	=[	$hover2,		wiz_side3	] {ai_run(8);};
void()	wiz_side3	=[	$hover3,		wiz_side4	] {ai_run(8);};
void()	wiz_side4	=[	$hover4,		wiz_side5	] {ai_run(8);};
void()	wiz_side5	=[	$hover5,		wiz_side6	] {ai_run(8);};
void()	wiz_side6	=[	$hover6,		wiz_side7	] {ai_run(8);};
void()	wiz_side7	=[	$hover7,		wiz_side8	] {ai_run(8);};
void()	wiz_side8	=[	$hover8,		wiz_side1	] {ai_run(8);};

void()	wiz_run1	=[	$fly1,		wiz_run2	] {ai_run(16);
Wiz_idlesound();
};
void()	wiz_run2	=[	$fly2,		wiz_run3	] {ai_run(16);};
void()	wiz_run3	=[	$fly3,		wiz_run4	] {ai_run(16);};
void()	wiz_run4	=[	$fly4,		wiz_run5	] {ai_run(16);};
void()	wiz_run5	=[	$fly5,		wiz_run6	] {ai_run(16);};
void()	wiz_run6	=[	$fly6,		wiz_run7	] {ai_run(16);};
void()	wiz_run7	=[	$fly7,		wiz_run8	] {ai_run(16);};
void()	wiz_run8	=[	$fly8,		wiz_run9	] {ai_run(16);};
void()	wiz_run9	=[	$fly9,		wiz_run10	] {ai_run(16);};
void()	wiz_run10	=[	$fly10,		wiz_run11	] {ai_run(16);};
void()	wiz_run11	=[	$fly11,		wiz_run12	] {ai_run(16);};
void()	wiz_run12	=[	$fly12,		wiz_run13	] {ai_run(16);};
void()	wiz_run13	=[	$fly13,		wiz_run14	] {ai_run(16);};
void()	wiz_run14	=[	$fly14,		wiz_run1	] {ai_run(16);};

void()	wiz_fast1	=[	$magatt1,		wiz_fast2	] {ai_face();Wiz_StartFast();};
void()	wiz_fast2	=[	$magatt2,		wiz_fast3	] {ai_face();};
void()	wiz_fast3	=[	$magatt3,		wiz_fast4	] {ai_face();};
void()	wiz_fast4	=[	$magatt4,		wiz_fast5	] {ai_face();};
void()	wiz_fast5	=[	$magatt5,		wiz_fast6	] {ai_face();};
void()	wiz_fast6	=[	$magatt6,		wiz_fast7	] {ai_face();};
void()	wiz_fast7	=[	$magatt5,		wiz_fast8	] {ai_face();};
void()	wiz_fast8	=[	$magatt4,		wiz_fast9	] {ai_face();};
void()	wiz_fast9	=[	$magatt3,		wiz_fast10	] {ai_face();};
void()	wiz_fast10	=[	$magatt2,		wiz_run1	] {ai_face();SUB_AttackFinished(2);WizardAttackFinished ();};

void()	wiz_pain1	=[	$pain1,		wiz_pain2	] {};
void()	wiz_pain2	=[	$pain2,		wiz_pain3	] {};
void()	wiz_pain3	=[	$pain3,		wiz_pain4	] {};
void()	wiz_pain4	=[	$pain4,		wiz_run1	] {};

void()	wiz_death1	=[	$death1,		wiz_death2	] {

self.velocity_x = -200 + 400*random();
self.velocity_y = -200 + 400*random();
self.velocity_z = 100 + 100*random();
self.flags = self.flags - (self.flags &amp; FL_ONGROUND);
sound (self, CHAN_VOICE, &quot;wizard/wdeath.wav&quot;, 1, ATTN_NORM);
};
void()	wiz_death2	=[	$death2,		wiz_death3	] {};
void()	wiz_death3	=[	$death3,		wiz_death4	]{self.solid = SOLID_NOT;};
void()	wiz_death4	=[	$death4,		wiz_death5	] {};
void()	wiz_death5	=[	$death5,		wiz_death6	] {};
void()	wiz_death6	=[	$death6,		wiz_death7	] {};
void()	wiz_death7	=[	$death7,		wiz_death8	] {};
void()	wiz_death8	=[	$death8,		wiz_death8	] {};

void() wiz_die =
{
// check for gib
	if (self.health &lt; -40)
	{
		sound (self, CHAN_VOICE, &quot;player/udeath.wav&quot;, 1, ATTN_NORM);
		ThrowHead (&quot;progs/h_wizard.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib2.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib2.mdl&quot;, self.health);
		ThrowGib (&quot;progs/gib2.mdl&quot;, self.health);
		return;
	}

	wiz_death1 ();
};


void(entity attacker, float damage) Wiz_Pain =
{
	sound (self, CHAN_VOICE, &quot;wizard/wpain.wav&quot;, 1, ATTN_NORM);
	if (random()*70 &gt; damage)
		return;		// didn't flinch

	wiz_pain1 ();
};


void() Wiz_Missile =
{
	wiz_fast1();
};

/*QUAKED monster_wizard (1 0 0) (-16 -16 -24) (16 16 40) Ambush
*/
void() monster_wizard =
{
	if (deathmatch)
	{
		remove(self);
		return;
	}
	precache_model (&quot;progs/wizard.mdl&quot;);
	precache_model (&quot;progs/h_wizard.mdl&quot;);
	precache_model (&quot;progs/w_spike.mdl&quot;);

	precache_sound (&quot;wizard/hit.wav&quot;);		// used by c code
	precache_sound (&quot;wizard/wattack.wav&quot;);
	precache_sound (&quot;wizard/wdeath.wav&quot;);
	precache_sound (&quot;wizard/widle1.wav&quot;);
	precache_sound (&quot;wizard/widle2.wav&quot;);
	precache_sound (&quot;wizard/wpain.wav&quot;);
	precache_sound (&quot;wizard/wsight.wav&quot;);

	self.solid = SOLID_SLIDEBOX;
	self.movetype = MOVETYPE_STEP;

	setmodel (self, &quot;progs/wizard.mdl&quot;);

	setsize (self, '-16 -16 -24', '16 16 40');
	self.health = 80;

	self.th_stand = wiz_stand1;
	self.th_walk = wiz_walk1;
	self.th_run = wiz_run1;
	self.th_missile = Wiz_Missile;
	self.th_pain = Wiz_Pain;
	self.th_die = wiz_die;
		
	flymonster_start ();
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>sh5kalxhin5fr69xmotuaiyu2x7tyap</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>world.qc</title>
    <ns>0</ns>
    <id>865</id>
    <revision>
      <id>2486</id>
      <timestamp>2013-03-29T11:32:00Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for general [[World | world-related]] behavior such as default [[Precache | precaching]].   &lt;pre&gt;  void() InitBodyQue;   void() main = ...&quot;</comment>
      <text xml:space="preserve" bytes="11214">This [[Quake-C]] file contains the code for general [[World | world-related]] behavior such as default [[Precache | precaching]].


&lt;pre&gt;

void() InitBodyQue;


void() main =
{
	dprint (&quot;main function\n&quot;);
	
// these are just commands the the prog compiler to copy these files

	precache_file (&quot;progs.dat&quot;);
	precache_file (&quot;gfx.wad&quot;);
	precache_file (&quot;quake.rc&quot;);
	precache_file (&quot;default.cfg&quot;);

	precache_file (&quot;end1.bin&quot;);
	precache_file2 (&quot;end2.bin&quot;);

	precache_file (&quot;demo1.dem&quot;);
	precache_file (&quot;demo2.dem&quot;);
	precache_file (&quot;demo3.dem&quot;);

//
// these are all of the lumps from the cached.ls files
//
	precache_file (&quot;gfx/palette.lmp&quot;);
	precache_file (&quot;gfx/colormap.lmp&quot;);

	precache_file2 (&quot;gfx/pop.lmp&quot;);

	precache_file (&quot;gfx/complete.lmp&quot;);
	precache_file (&quot;gfx/inter.lmp&quot;);

	precache_file (&quot;gfx/ranking.lmp&quot;);
	precache_file (&quot;gfx/vidmodes.lmp&quot;);
	precache_file (&quot;gfx/finale.lmp&quot;);
	precache_file (&quot;gfx/conback.lmp&quot;);
	precache_file (&quot;gfx/qplaque.lmp&quot;);

	precache_file (&quot;gfx/menudot1.lmp&quot;);
	precache_file (&quot;gfx/menudot2.lmp&quot;);
	precache_file (&quot;gfx/menudot3.lmp&quot;);
	precache_file (&quot;gfx/menudot4.lmp&quot;);
	precache_file (&quot;gfx/menudot5.lmp&quot;);
	precache_file (&quot;gfx/menudot6.lmp&quot;);

	precache_file (&quot;gfx/menuplyr.lmp&quot;);
	precache_file (&quot;gfx/bigbox.lmp&quot;);
	precache_file (&quot;gfx/dim_modm.lmp&quot;);
	precache_file (&quot;gfx/dim_drct.lmp&quot;);
	precache_file (&quot;gfx/dim_ipx.lmp&quot;);
	precache_file (&quot;gfx/dim_tcp.lmp&quot;);
	precache_file (&quot;gfx/dim_mult.lmp&quot;);
	precache_file (&quot;gfx/mainmenu.lmp&quot;);
	
	precache_file (&quot;gfx/box_tl.lmp&quot;);
	precache_file (&quot;gfx/box_tm.lmp&quot;);
	precache_file (&quot;gfx/box_tr.lmp&quot;);
	
	precache_file (&quot;gfx/box_ml.lmp&quot;);
	precache_file (&quot;gfx/box_mm.lmp&quot;);
	precache_file (&quot;gfx/box_mm2.lmp&quot;);
	precache_file (&quot;gfx/box_mr.lmp&quot;);
	
	precache_file (&quot;gfx/box_bl.lmp&quot;);
	precache_file (&quot;gfx/box_bm.lmp&quot;);
	precache_file (&quot;gfx/box_br.lmp&quot;);
	
	precache_file (&quot;gfx/sp_menu.lmp&quot;);
	precache_file (&quot;gfx/ttl_sgl.lmp&quot;);
	precache_file (&quot;gfx/ttl_main.lmp&quot;);
	precache_file (&quot;gfx/ttl_cstm.lmp&quot;);
	
	precache_file (&quot;gfx/mp_menu.lmp&quot;);
	
	precache_file (&quot;gfx/netmen1.lmp&quot;);
	precache_file (&quot;gfx/netmen2.lmp&quot;);
	precache_file (&quot;gfx/netmen3.lmp&quot;);
	precache_file (&quot;gfx/netmen4.lmp&quot;);
	precache_file (&quot;gfx/netmen5.lmp&quot;);
	
	precache_file (&quot;gfx/sell.lmp&quot;);
	
	precache_file (&quot;gfx/help0.lmp&quot;);
	precache_file (&quot;gfx/help1.lmp&quot;);
	precache_file (&quot;gfx/help2.lmp&quot;);
	precache_file (&quot;gfx/help3.lmp&quot;);
	precache_file (&quot;gfx/help4.lmp&quot;);
	precache_file (&quot;gfx/help5.lmp&quot;);

	precache_file (&quot;gfx/pause.lmp&quot;);
	precache_file (&quot;gfx/loading.lmp&quot;);

	precache_file (&quot;gfx/p_option.lmp&quot;);
	precache_file (&quot;gfx/p_load.lmp&quot;);
	precache_file (&quot;gfx/p_save.lmp&quot;);
	precache_file (&quot;gfx/p_multi.lmp&quot;);

// sounds loaded by C code
	precache_sound (&quot;misc/menu1.wav&quot;);
	precache_sound (&quot;misc/menu2.wav&quot;);
	precache_sound (&quot;misc/menu3.wav&quot;);

	precache_sound (&quot;ambience/water1.wav&quot;);
	precache_sound (&quot;ambience/wind2.wav&quot;);

// shareware
	precache_file (&quot;maps/start.bsp&quot;);

	precache_file (&quot;maps/e1m1.bsp&quot;);
	precache_file (&quot;maps/e1m2.bsp&quot;);
	precache_file (&quot;maps/e1m3.bsp&quot;);
	precache_file (&quot;maps/e1m4.bsp&quot;);
	precache_file (&quot;maps/e1m5.bsp&quot;);
	precache_file (&quot;maps/e1m6.bsp&quot;);
	precache_file (&quot;maps/e1m7.bsp&quot;);
	precache_file (&quot;maps/e1m8.bsp&quot;);

// registered
	precache_file2 (&quot;gfx/pop.lmp&quot;);

	precache_file2 (&quot;maps/e2m1.bsp&quot;);
	precache_file2 (&quot;maps/e2m2.bsp&quot;);
	precache_file2 (&quot;maps/e2m3.bsp&quot;);
	precache_file2 (&quot;maps/e2m4.bsp&quot;);
	precache_file2 (&quot;maps/e2m5.bsp&quot;);
	precache_file2 (&quot;maps/e2m6.bsp&quot;);
	precache_file2 (&quot;maps/e2m7.bsp&quot;);

	precache_file2 (&quot;maps/e3m1.bsp&quot;);
	precache_file2 (&quot;maps/e3m2.bsp&quot;);
	precache_file2 (&quot;maps/e3m3.bsp&quot;);
	precache_file2 (&quot;maps/e3m4.bsp&quot;);
	precache_file2 (&quot;maps/e3m5.bsp&quot;);
	precache_file2 (&quot;maps/e3m6.bsp&quot;);
	precache_file2 (&quot;maps/e3m7.bsp&quot;);

	precache_file2 (&quot;maps/e4m1.bsp&quot;);
	precache_file2 (&quot;maps/e4m2.bsp&quot;);
	precache_file2 (&quot;maps/e4m3.bsp&quot;);
	precache_file2 (&quot;maps/e4m4.bsp&quot;);
	precache_file2 (&quot;maps/e4m5.bsp&quot;);
	precache_file2 (&quot;maps/e4m6.bsp&quot;);
	precache_file2 (&quot;maps/e4m7.bsp&quot;);
	precache_file2 (&quot;maps/e4m8.bsp&quot;);

	precache_file2 (&quot;maps/end.bsp&quot;);

	precache_file2 (&quot;maps/dm1.bsp&quot;);
	precache_file2 (&quot;maps/dm2.bsp&quot;);
	precache_file2 (&quot;maps/dm3.bsp&quot;);
	precache_file2 (&quot;maps/dm4.bsp&quot;);
	precache_file2 (&quot;maps/dm5.bsp&quot;);
	precache_file2 (&quot;maps/dm6.bsp&quot;);
};


entity	lastspawn;

//=======================
/*QUAKED worldspawn (0 0 0) ?
Only used for the world entity.
Set message to the level name.
Set sounds to the cd track to play.

World Types:
0: medieval
1: metal
2: base
*/
//=======================
void() worldspawn =
{
	lastspawn = world;
	InitBodyQue ();

// custom map attributes
	if (self.model == &quot;maps/e1m8.bsp&quot;)
		cvar_set (&quot;sv_gravity&quot;, &quot;100&quot;);
	else
		cvar_set (&quot;sv_gravity&quot;, &quot;800&quot;);

// the area based ambient sounds MUST be the first precache_sounds

// player precaches	
	W_Precache ();			// get weapon precaches

// sounds used from C physics code
	precache_sound (&quot;demon/dland2.wav&quot;);		// landing thud
	precache_sound (&quot;misc/h2ohit1.wav&quot;);		// landing splash

// setup precaches allways needed
	precache_sound (&quot;items/itembk2.wav&quot;);		// item respawn sound
	precache_sound (&quot;player/plyrjmp8.wav&quot;);		// player jump
	precache_sound (&quot;player/land.wav&quot;);			// player landing
	precache_sound (&quot;player/land2.wav&quot;);		// player hurt landing
	precache_sound (&quot;player/drown1.wav&quot;);		// drowning pain
	precache_sound (&quot;player/drown2.wav&quot;);		// drowning pain
	precache_sound (&quot;player/gasp1.wav&quot;);		// gasping for air
	precache_sound (&quot;player/gasp2.wav&quot;);		// taking breath
	precache_sound (&quot;player/h2odeath.wav&quot;);		// drowning death

	precache_sound (&quot;misc/talk.wav&quot;);			// talk
	precache_sound (&quot;player/teledth1.wav&quot;);		// telefrag
	precache_sound (&quot;misc/r_tele1.wav&quot;);		// teleport sounds
	precache_sound (&quot;misc/r_tele2.wav&quot;);
	precache_sound (&quot;misc/r_tele3.wav&quot;);
	precache_sound (&quot;misc/r_tele4.wav&quot;);
	precache_sound (&quot;misc/r_tele5.wav&quot;);
	precache_sound (&quot;weapons/lock4.wav&quot;);		// ammo pick up
	precache_sound (&quot;weapons/pkup.wav&quot;);		// weapon up
	precache_sound (&quot;items/armor1.wav&quot;);		// armor up
	precache_sound (&quot;weapons/lhit.wav&quot;);		//lightning
	precache_sound (&quot;weapons/lstart.wav&quot;);		//lightning start
	precache_sound (&quot;items/damage3.wav&quot;);

	precache_sound (&quot;misc/power.wav&quot;);			//lightning for boss

// player gib sounds
	precache_sound (&quot;player/gib.wav&quot;);			// player gib sound
	precache_sound (&quot;player/udeath.wav&quot;);		// player gib sound
	precache_sound (&quot;player/tornoff2.wav&quot;);		// gib sound

// player pain sounds

	precache_sound (&quot;player/pain1.wav&quot;);
	precache_sound (&quot;player/pain2.wav&quot;);
	precache_sound (&quot;player/pain3.wav&quot;);
	precache_sound (&quot;player/pain4.wav&quot;);
	precache_sound (&quot;player/pain5.wav&quot;);
	precache_sound (&quot;player/pain6.wav&quot;);

// player death sounds
	precache_sound (&quot;player/death1.wav&quot;);
	precache_sound (&quot;player/death2.wav&quot;);
	precache_sound (&quot;player/death3.wav&quot;);
	precache_sound (&quot;player/death4.wav&quot;);
	precache_sound (&quot;player/death5.wav&quot;);

// ax sounds	
	precache_sound (&quot;weapons/ax1.wav&quot;);			// ax swoosh
	precache_sound (&quot;player/axhit1.wav&quot;);		// ax hit meat
	precache_sound (&quot;player/axhit2.wav&quot;);		// ax hit world

	precache_sound (&quot;player/h2ojump.wav&quot;);		// player jumping into water
	precache_sound (&quot;player/slimbrn2.wav&quot;);		// player enter slime
	precache_sound (&quot;player/inh2o.wav&quot;);		// player enter water
	precache_sound (&quot;player/inlava.wav&quot;);		// player enter lava
	precache_sound (&quot;misc/outwater.wav&quot;);		// leaving water sound

	precache_sound (&quot;player/lburn1.wav&quot;);		// lava burn
	precache_sound (&quot;player/lburn2.wav&quot;);		// lava burn

	precache_sound (&quot;misc/water1.wav&quot;);			// swimming
	precache_sound (&quot;misc/water2.wav&quot;);			// swimming

	precache_model (&quot;progs/player.mdl&quot;);
	precache_model (&quot;progs/eyes.mdl&quot;);
	precache_model (&quot;progs/h_player.mdl&quot;);
	precache_model (&quot;progs/gib1.mdl&quot;);
	precache_model (&quot;progs/gib2.mdl&quot;);
	precache_model (&quot;progs/gib3.mdl&quot;);

	precache_model (&quot;progs/s_bubble.spr&quot;);	// drowning bubbles
	precache_model (&quot;progs/s_explod.spr&quot;);	// sprite explosion

	precache_model (&quot;progs/v_axe.mdl&quot;);
	precache_model (&quot;progs/v_shot.mdl&quot;);
	precache_model (&quot;progs/v_nail.mdl&quot;);
	precache_model (&quot;progs/v_rock.mdl&quot;);
	precache_model (&quot;progs/v_shot2.mdl&quot;);
	precache_model (&quot;progs/v_nail2.mdl&quot;);
	precache_model (&quot;progs/v_rock2.mdl&quot;);

	precache_model (&quot;progs/bolt.mdl&quot;);		// for lightning gun
	precache_model (&quot;progs/bolt2.mdl&quot;);		// for lightning gun
	precache_model (&quot;progs/bolt3.mdl&quot;);		// for boss shock
	precache_model (&quot;progs/lavaball.mdl&quot;);	// for testing
	
	precache_model (&quot;progs/missile.mdl&quot;);
	precache_model (&quot;progs/grenade.mdl&quot;);
	precache_model (&quot;progs/spike.mdl&quot;);
	precache_model (&quot;progs/s_spike.mdl&quot;);

	precache_model (&quot;progs/backpack.mdl&quot;);

	precache_model (&quot;progs/zom_gib.mdl&quot;);

	precache_model (&quot;progs/v_light.mdl&quot;);
	

//
// Setup light animation tables. 'a' is total darkness, 'z' is maxbright.
//

	// 0 normal
	lightstyle(0, &quot;m&quot;);
	
	// 1 FLICKER (first variety)
	lightstyle(1, &quot;mmnmmommommnonmmonqnmmo&quot;);
	
	// 2 SLOW STRONG PULSE
	lightstyle(2, &quot;abcdefghijklmnopqrstuvwxyzyxwvutsrqponmlkjihgfedcba&quot;);
	
	// 3 CANDLE (first variety)
	lightstyle(3, &quot;mmmmmaaaaammmmmaaaaaabcdefgabcdefg&quot;);
	
	// 4 FAST STROBE
	lightstyle(4, &quot;mamamamamama&quot;);
	
	// 5 GENTLE PULSE 1
	lightstyle(5,&quot;jklmnopqrstuvwxyzyxwvutsrqponmlkj&quot;);
	
	// 6 FLICKER (second variety)
	lightstyle(6, &quot;nmonqnmomnmomomno&quot;);
	
	// 7 CANDLE (second variety)
	lightstyle(7, &quot;mmmaaaabcdefgmmmmaaaammmaamm&quot;);
	
	// 8 CANDLE (third variety)
	lightstyle(8, &quot;mmmaaammmaaammmabcdefaaaammmmabcdefmmmaaaa&quot;);
	
	// 9 SLOW STROBE (fourth variety)
	lightstyle(9, &quot;aaaaaaaazzzzzzzz&quot;);
	
	// 10 FLUORESCENT FLICKER
	lightstyle(10, &quot;mmamammmmammamamaaamammma&quot;);

	// 11 SLOW PULSE NOT FADE TO BLACK
	lightstyle(11, &quot;abcdefghijklmnopqrrqponmlkjihgfedcba&quot;);
	
	// styles 32-62 are assigned by the light program for switchable lights

	// 63 testing
	lightstyle(63, &quot;a&quot;);
};

void() StartFrame =
{
	teamplay = cvar(&quot;teamplay&quot;);
	skill = cvar(&quot;skill&quot;);
	framecount = framecount + 1;
};

/*
==============================================================================

BODY QUE

==============================================================================
*/

entity	bodyque_head;

void() bodyque =
{	// just here so spawn functions don't complain after the world
	// creates bodyques
};

void() InitBodyQue =
{
	local entity	e;
	
	bodyque_head = spawn();
	bodyque_head.classname = &quot;bodyque&quot;;
	bodyque_head.owner = spawn();
	bodyque_head.owner.classname = &quot;bodyque&quot;;
	bodyque_head.owner.owner = spawn();
	bodyque_head.owner.owner.classname = &quot;bodyque&quot;;
	bodyque_head.owner.owner.owner = spawn();
	bodyque_head.owner.owner.owner.classname = &quot;bodyque&quot;;
	bodyque_head.owner.owner.owner.owner = bodyque_head;
};


// make a body que entry for the given ent so the ent can be
// respawned elsewhere
void(entity ent) CopyToBodyQue =
{
	bodyque_head.angles = ent.angles;
	bodyque_head.model = ent.model;
	bodyque_head.modelindex = ent.modelindex;
	bodyque_head.frame = ent.frame;
	bodyque_head.colormap = ent.colormap;
	bodyque_head.movetype = ent.movetype;
	bodyque_head.velocity = ent.velocity;
	bodyque_head.flags = 0;
	setorigin (bodyque_head, ent.origin);
	setsize (bodyque_head, ent.mins, ent.maxs);
	bodyque_head = bodyque_head.owner;
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>0vafu5dxk20aaabpxh0kyi2fqx5gjc0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>worldspawn</title>
    <ns>0</ns>
    <id>654</id>
    <revision>
      <id>1958</id>
      <timestamp>2013-03-25T07:21:52Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <comment>created worldspawn page</comment>
      <text xml:space="preserve" bytes="2257">The '''worldspawn''' entity is a special entity that defines all the static geometry in a Quake level, along with various settings of the level, such as its title, the music played and other things. The worldspawn is always the first entity defined in a .map file, and in game, always the first entity loaded.

==Attributes==

===Keys===
Note that the first table lists only the keys supported by the original [[Engines|engine]] and [[Map_compiling|compile tools]]. Modern compile tools and engines very frequently use keys stored in the worldspawn entity to do things the original tools and engines did not allow. Since the supported keys differ between different tools and engines, some of the most common keys are listed in a separate table below. Non-standard keys are usually prefixed with an underscore, which causes engines that do not support them to ignore them.

{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''message'' || This is the text that will be printed to the console when the level loads. It is used for the level name, though some level designers also include their name. As an example, [[E1M1]], the first real level of episode 1, has the text &quot;The Slipgate Complex&quot; as the value for this key.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''worldtype'' || This sets the ambience of the level. Depending on this value, some entities will play different sound effects, and the key items will display differently.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''sounds'' || The number of the cd track to play. If using the original [[quake_soundtrack|Quake music]], valid tracks are 2 to 11.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''light'' || The ambient light level. The [[Light_(map_compiling)|light]] tool uses the value of this key to determin the minimum value of light in the level.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''wad'' || A string that tells [[QBSP]] where to look for wad files so that it can include the textures in the .bsp file it outputs
|}

{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''_sunlight'' || Brightness of the light coming from any [[sky brushes]] in the level.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''_sun_mangle'' || Sets the angle of the sun using [[mangle|pitch, yaw and roll]].
|}

===Spawnflags===
The worldspawn entity has no spawnflags.</text>
      <sha1>25kb90zrymk5mmj90t8hb8wajrsd9qx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1959</id>
      <parentid>1958</parentid>
      <timestamp>2013-03-25T07:24:03Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>/* Keys */  added values for worldtype</comment>
      <text xml:space="preserve" bytes="2295">The '''worldspawn''' entity is a special entity that defines all the static geometry in a Quake level, along with various settings of the level, such as its title, the music played and other things. The worldspawn is always the first entity defined in a .map file, and in game, always the first entity loaded.

==Attributes==

===Keys===
Note that the first table lists only the keys supported by the original [[Engines|engine]] and [[Map_compiling|compile tools]]. Modern compile tools and engines very frequently use keys stored in the worldspawn entity to do things the original tools and engines did not allow. Since the supported keys differ between different tools and engines, some of the most common keys are listed in a separate table below. Non-standard keys are usually prefixed with an underscore, which causes engines that do not support them to ignore them.

{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''message'' || This is the text that will be printed to the console when the level loads. It is used for the level name, though some level designers also include their name. As an example, [[E1M1]], the first real level of episode 1, has the text &quot;The Slipgate Complex&quot; as the value for this key.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''worldtype'' || This sets the ambience of the level. Depending on this value, some entities will play different sound effects, and the key items will display differently.
* 0 : Medieval
* 1 : Metal
* 2 : Base
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''sounds'' || The number of the cd track to play. If using the original [[quake_soundtrack|Quake music]], valid tracks are 2 to 11.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''light'' || The ambient light level. The [[Light_(map_compiling)|light]] tool uses the value of this key to determin the minimum value of light in the level.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''wad'' || A string that tells [[QBSP]] where to look for wad files so that it can include the textures in the .bsp file it outputs
|}

{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''_sunlight'' || Brightness of the light coming from any [[sky brushes]] in the level.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''_sun_mangle'' || Sets the angle of the sun using [[mangle|pitch, yaw and roll]].
|}

===Spawnflags===
The worldspawn entity has no spawnflags.</text>
      <sha1>ejbs3qidvjbc9bewaybpyn53pdd8usi</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>1965</id>
      <parentid>1959</parentid>
      <timestamp>2013-03-25T08:18:34Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>added category</comment>
      <text xml:space="preserve" bytes="2324">The '''worldspawn''' entity is a special entity that defines all the static geometry in a Quake level, along with various settings of the level, such as its title, the music played and other things. The worldspawn is always the first entity defined in a .map file, and in game, always the first entity loaded.

==Attributes==

===Keys===
Note that the first table lists only the keys supported by the original [[Engines|engine]] and [[Map_compiling|compile tools]]. Modern compile tools and engines very frequently use keys stored in the worldspawn entity to do things the original tools and engines did not allow. Since the supported keys differ between different tools and engines, some of the most common keys are listed in a separate table below. Non-standard keys are usually prefixed with an underscore, which causes engines that do not support them to ignore them.

{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''message'' || This is the text that will be printed to the console when the level loads. It is used for the level name, though some level designers also include their name. As an example, [[E1M1]], the first real level of episode 1, has the text &quot;The Slipgate Complex&quot; as the value for this key.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''worldtype'' || This sets the ambience of the level. Depending on this value, some entities will play different sound effects, and the key items will display differently.
* 0 : Medieval
* 1 : Metal
* 2 : Base
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''sounds'' || The number of the cd track to play. If using the original [[quake_soundtrack|Quake music]], valid tracks are 2 to 11.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''light'' || The ambient light level. The [[Light_(map_compiling)|light]] tool uses the value of this key to determin the minimum value of light in the level.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''wad'' || A string that tells [[QBSP]] where to look for wad files so that it can include the textures in the .bsp file it outputs
|}

{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''_sunlight'' || Brightness of the light coming from any [[sky brushes]] in the level.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''_sun_mangle'' || Sets the angle of the sun using [[mangle|pitch, yaw and roll]].
|}

===Spawnflags===
The worldspawn entity has no spawnflags.

[[Category:Quake entities]]</text>
      <sha1>48a2d6zvd1n9y7v32hwunpd5g9c5ptx</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2429</id>
      <parentid>1965</parentid>
      <timestamp>2013-03-28T17:02:51Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>fixed typo and link</comment>
      <text xml:space="preserve" bytes="2340">The '''worldspawn''' entity is a special entity that defines all the static geometry in a Quake level, along with various settings of the level, such as its title, the music played and other things. The worldspawn is always the first entity defined in a .map file, and in game, always the first entity loaded.

==Attributes==

===Keys===
Note that the first table lists only the keys supported by the original [[Engines|engine]] and [[Map_compiling|compile tools]]. Modern compile tools and engines very frequently use keys stored in the worldspawn entity to do things the original tools and engines did not allow. Since the supported keys differ between different tools and engines, some of the most common keys are listed in a separate table below. Non-standard keys are usually prefixed with an underscore, which causes engines that do not support them to ignore them.

{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''message'' || This is the text that will be printed to the console when the level loads. It is used for the level name, though some level designers also include their name. As an example, [[E1M1]], the first real level of episode 1, has the text &quot;The Slipgate Complex&quot; as the value for this key.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''worldtype'' || This sets the ambience of the level. Depending on this value, some entities will play different sound effects, and the key items will display differently.
* 0 : Medieval
* 1 : Metal
* 2 : Base
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''sounds'' || The number of the cd track to play. If using the original [[quake_soundtrack|Quake music]], valid tracks are 2 to 11.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''light'' || The ambient light level. The [[Light_(map_compiling)|light]] tool uses the value of this key to determine the minimum value of light in the level.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''wad'' || A string that tells [[QBSP]] where to look for wad files so that it can include the textures in the .bsp file it outputs
|}

{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''_sunlight'' || Brightness of the light coming from any [[Textures#Skies|sky brushes]] in the level.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''_sun_mangle'' || Sets the angle of the sun using [[mangle|pitch, yaw and roll]].
|}

===Spawnflags===
The worldspawn entity has no spawnflags.

[[Category:Quake entities]]</text>
      <sha1>s5ymxngve6qxpi2lcpesrhj27nkw2d3</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
    <revision>
      <id>2430</id>
      <parentid>2429</parentid>
      <timestamp>2013-03-28T17:06:38Z</timestamp>
      <contributor>
        <username>Than</username>
        <id>31</id>
      </contributor>
      <minor/>
      <comment>worldtype section to list ''in detail'' the differences</comment>
      <text xml:space="preserve" bytes="2516">The '''worldspawn''' entity is a special entity that defines all the static geometry in a Quake level, along with various settings of the level, such as its title, the music played and other things. The worldspawn is always the first entity defined in a .map file, and in game, always the first entity loaded.

==Attributes==

===Keys===
Note that the first table lists only the keys supported by the original [[Engines|engine]] and [[Map_compiling|compile tools]]. Modern compile tools and engines very frequently use keys stored in the worldspawn entity to do things the original tools and engines did not allow. Since the supported keys differ between different tools and engines, some of the most common keys are listed in a separate table below. Non-standard keys are usually prefixed with an underscore, which causes engines that do not support them to ignore them.

{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''message'' || This is the text that will be printed to the console when the level loads. It is used for the level name, though some level designers also include their name. As an example, [[E1M1]], the first real level of episode 1, has the text &quot;The Slipgate Complex&quot; as the value for this key.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''worldtype'' || This sets the ambience of the level. Depending on this value, some entities will play different sound effects, and the key items will display differently.
* 0 : Medieval
* 1 : Metal
* 2 : Base
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''sounds'' || The number of the cd track to play. If using the original [[quake_soundtrack|Quake music]], valid tracks are 2 to 11.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''light'' || The ambient light level. The [[Light_(map_compiling)|light]] tool uses the value of this key to determine the minimum value of light in the level.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''wad'' || A string that tells [[QBSP]] where to look for wad files so that it can include the textures in the .bsp file it outputs
|}

{| class=&quot;wikitable&quot;
|-
| ! bgcolor=&quot;#eeeeee&quot; width=&quot;80px&quot; | ''_sunlight'' || Brightness of the light coming from any [[Textures#Skies|sky brushes]] in the level.
|-
| ! bgcolor=&quot;#eeeeee&quot; | ''_sun_mangle'' || Sets the angle of the sun using [[mangle|pitch, yaw and roll]].
|}

===Spawnflags===
The worldspawn entity has no spawnflags.

==Differences depending on 'worldtype' settings==
&lt;!--
Notes:
list different sound effects used (keys, plats)
items that have a different appearance (keys)
anything else?
--&gt;

[[Category:Quake entities]]</text>
      <sha1>m61rslw45t4zja7gk4b3l6tmahuy4t0</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
  <page>
    <title>zombie.qc</title>
    <ns>0</ns>
    <id>866</id>
    <revision>
      <id>2487</id>
      <timestamp>2013-03-29T11:32:56Z</timestamp>
      <contributor>
        <username>Negke</username>
        <id>23</id>
      </contributor>
      <comment>Created page with &quot;This [[Quake-C]] file contains the code for the [[Zombie]] [[Monsters | monster]].   &lt;pre&gt; /* ==============================================================================  Z...&quot;</comment>
      <text xml:space="preserve" bytes="20219">This [[Quake-C]] file contains the code for the [[Zombie]] [[Monsters | monster]].


&lt;pre&gt;
/*
==============================================================================

ZOMBIE

==============================================================================
*/
$cd id1/models/zombie

$origin	0 0 24

$base base
$skin skin

$frame stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8
$frame stand9 stand10 stand11 stand12 stand13 stand14 stand15

$frame walk1 walk2 walk3 walk4 walk5 walk6 walk7 walk8 walk9 walk10 walk11
$frame walk12 walk13 walk14 walk15 walk16 walk17 walk18 walk19

$frame run1 run2 run3 run4 run5 run6 run7 run8 run9 run10 run11 run12
$frame run13 run14 run15 run16 run17 run18

$frame atta1 atta2 atta3 atta4 atta5 atta6 atta7 atta8 atta9 atta10 atta11
$frame atta12 atta13

$frame attb1 attb2 attb3 attb4 attb5 attb6 attb7 attb8 attb9 attb10 attb11
$frame attb12 attb13 attb14

$frame attc1 attc2 attc3 attc4 attc5 attc6 attc7 attc8 attc9 attc10 attc11
$frame attc12

$frame paina1 paina2 paina3 paina4 paina5 paina6 paina7 paina8 paina9 paina10
$frame paina11 paina12

$frame painb1 painb2 painb3 painb4 painb5 painb6 painb7 painb8 painb9 painb10
$frame painb11 painb12 painb13 painb14 painb15 painb16 painb17 painb18 painb19
$frame painb20 painb21 painb22 painb23 painb24 painb25 painb26 painb27 painb28

$frame painc1 painc2 painc3 painc4 painc5 painc6 painc7 painc8 painc9 painc10
$frame painc11 painc12 painc13 painc14 painc15 painc16 painc17 painc18

$frame paind1 paind2 paind3 paind4 paind5 paind6 paind7 paind8 paind9 paind10
$frame paind11 paind12 paind13

$frame paine1 paine2 paine3 paine4 paine5 paine6 paine7 paine8 paine9 paine10
$frame paine11 paine12 paine13 paine14 paine15 paine16 paine17 paine18 paine19
$frame paine20 paine21 paine22 paine23 paine24 paine25 paine26 paine27 paine28
$frame paine29 paine30

$frame cruc_1 cruc_2 cruc_3 cruc_4 cruc_5 cruc_6

float	SPAWN_CRUCIFIED	= 1;

//=============================================================================

.float inpain;

void() zombie_stand1	=[	$stand1,		zombie_stand2	] {ai_stand();};
void() zombie_stand2	=[	$stand2,		zombie_stand3	] {ai_stand();};
void() zombie_stand3	=[	$stand3,		zombie_stand4	] {ai_stand();};
void() zombie_stand4	=[	$stand4,		zombie_stand5	] {ai_stand();};
void() zombie_stand5	=[	$stand5,		zombie_stand6	] {ai_stand();};
void() zombie_stand6	=[	$stand6,		zombie_stand7	] {ai_stand();};
void() zombie_stand7	=[	$stand7,		zombie_stand8	] {ai_stand();};
void() zombie_stand8	=[	$stand8,		zombie_stand9	] {ai_stand();};
void() zombie_stand9	=[	$stand9,		zombie_stand10	] {ai_stand();};
void() zombie_stand10	=[	$stand10,		zombie_stand11	] {ai_stand();};
void() zombie_stand11	=[	$stand11,		zombie_stand12	] {ai_stand();};
void() zombie_stand12	=[	$stand12,		zombie_stand13	] {ai_stand();};
void() zombie_stand13	=[	$stand13,		zombie_stand14	] {ai_stand();};
void() zombie_stand14	=[	$stand14,		zombie_stand15	] {ai_stand();};
void() zombie_stand15	=[	$stand15,		zombie_stand1	] {ai_stand();};

void() zombie_cruc1	=	[	$cruc_1,		zombie_cruc2	] {
if (random() &lt; 0.1)
	sound (self, CHAN_VOICE, &quot;zombie/idle_w2.wav&quot;, 1, ATTN_STATIC);};
void() zombie_cruc2	=	[	$cruc_2,		zombie_cruc3	] {self.nextthink = time + 0.1 + random()*0.1;};
void() zombie_cruc3	=	[	$cruc_3,		zombie_cruc4	] {self.nextthink = time + 0.1 + random()*0.1;};
void() zombie_cruc4	=	[	$cruc_4,		zombie_cruc5	] {self.nextthink = time + 0.1 + random()*0.1;};
void() zombie_cruc5	=	[	$cruc_5,		zombie_cruc6	] {self.nextthink = time + 0.1 + random()*0.1;};
void() zombie_cruc6	=	[	$cruc_6,		zombie_cruc1	] {self.nextthink = time + 0.1 + random()*0.1;};

void() zombie_walk1		=[	$walk1,		zombie_walk2	] {ai_walk(0);};
void() zombie_walk2		=[	$walk2,		zombie_walk3	] {ai_walk(2);};
void() zombie_walk3		=[	$walk3,		zombie_walk4	] {ai_walk(3);};
void() zombie_walk4		=[	$walk4,		zombie_walk5	] {ai_walk(2);};
void() zombie_walk5		=[	$walk5,		zombie_walk6	] {ai_walk(1);};
void() zombie_walk6		=[	$walk6,		zombie_walk7	] {ai_walk(0);};
void() zombie_walk7		=[	$walk7,		zombie_walk8	] {ai_walk(0);};
void() zombie_walk8		=[	$walk8,		zombie_walk9	] {ai_walk(0);};
void() zombie_walk9		=[	$walk9,		zombie_walk10	] {ai_walk(0);};
void() zombie_walk10	=[	$walk10,	zombie_walk11	] {ai_walk(0);};
void() zombie_walk11	=[	$walk11,	zombie_walk12	] {ai_walk(2);};
void() zombie_walk12	=[	$walk12,	zombie_walk13	] {ai_walk(2);};
void() zombie_walk13	=[	$walk13,	zombie_walk14	] {ai_walk(1);};
void() zombie_walk14	=[	$walk14,	zombie_walk15	] {ai_walk(0);};
void() zombie_walk15	=[	$walk15,	zombie_walk16	] {ai_walk(0);};
void() zombie_walk16	=[	$walk16,	zombie_walk17	] {ai_walk(0);};
void() zombie_walk17	=[	$walk17,	zombie_walk18	] {ai_walk(0);};
void() zombie_walk18	=[	$walk18,	zombie_walk19	] {ai_walk(0);};
void() zombie_walk19	=[	$walk19,	zombie_walk1	] {
ai_walk(0);
if (random() &lt; 0.2)
	sound (self, CHAN_VOICE, &quot;zombie/z_idle.wav&quot;, 1, ATTN_IDLE);};

void() zombie_run1		=[	$run1,		zombie_run2	] {ai_run(1);self.inpain = 0;};
void() zombie_run2		=[	$run2,		zombie_run3	] {ai_run(1);};
void() zombie_run3		=[	$run3,		zombie_run4	] {ai_run(0);};
void() zombie_run4		=[	$run4,		zombie_run5	] {ai_run(1);};
void() zombie_run5		=[	$run5,		zombie_run6	] {ai_run(2);};
void() zombie_run6		=[	$run6,		zombie_run7	] {ai_run(3);};
void() zombie_run7		=[	$run7,		zombie_run8	] {ai_run(4);};
void() zombie_run8		=[	$run8,		zombie_run9	] {ai_run(4);};
void() zombie_run9		=[	$run9,		zombie_run10	] {ai_run(2);};
void() zombie_run10		=[	$run10,		zombie_run11	] {ai_run(0);};
void() zombie_run11		=[	$run11,		zombie_run12	] {ai_run(0);};
void() zombie_run12		=[	$run12,		zombie_run13	] {ai_run(0);};
void() zombie_run13		=[	$run13,		zombie_run14	] {ai_run(2);};
void() zombie_run14		=[	$run14,		zombie_run15	] {ai_run(4);};
void() zombie_run15		=[	$run15,		zombie_run16	] {ai_run(6);};
void() zombie_run16		=[	$run16,		zombie_run17	] {ai_run(7);};
void() zombie_run17		=[	$run17,		zombie_run18	] {ai_run(3);};
void() zombie_run18		=[	$run18,		zombie_run1	] {
ai_run(8);
if (random() &lt; 0.2)
	sound (self, CHAN_VOICE, &quot;zombie/z_idle.wav&quot;, 1, ATTN_IDLE);
if (random() &gt; 0.8)
	sound (self, CHAN_VOICE, &quot;zombie/z_idle1.wav&quot;, 1, ATTN_IDLE);
};

/*
=============================================================================

ATTACKS

=============================================================================
*/

void() ZombieGrenadeTouch =
{
	if (other == self.owner)
		return;		// don't explode on owner
	if (other.takedamage)
	{
		T_Damage (other, self, self.owner, 10 );
		sound (self, CHAN_WEAPON, &quot;zombie/z_hit.wav&quot;, 1, ATTN_NORM);
		remove (self);
		return;
	}
	sound (self, CHAN_WEAPON, &quot;zombie/z_miss.wav&quot;, 1, ATTN_NORM);	// bounce sound
	self.velocity = '0 0 0';
	self.avelocity = '0 0 0';
	self.touch = SUB_Remove;
};

/*
================
ZombieFireGrenade
================
*/
void(vector st) ZombieFireGrenade =
{
	local	entity missile, mpuff;
	local	vector	org;

	sound (self, CHAN_WEAPON, &quot;zombie/z_shot1.wav&quot;, 1, ATTN_NORM);

	missile = spawn ();
	missile.owner = self;
	missile.movetype = MOVETYPE_BOUNCE;
	missile.solid = SOLID_BBOX;

// calc org
	org = self.origin + st_x * v_forward + st_y * v_right + (st_z - 24) * v_up;
	
// set missile speed	

	makevectors (self.angles);

	missile.velocity = normalize(self.enemy.origin - org);
	missile.velocity = missile.velocity * 600;
	missile.velocity_z = 200;

	missile.avelocity = '3000 1000 2000';

	missile.touch = ZombieGrenadeTouch;
	
// set missile duration
	missile.nextthink = time + 2.5;
	missile.think = SUB_Remove;

	setmodel (missile, &quot;progs/zom_gib.mdl&quot;);
	setsize (missile, '0 0 0', '0 0 0');		
	setorigin (missile, org);
};


void() zombie_atta1		=[	$atta1,		zombie_atta2	] {ai_face();};
void() zombie_atta2		=[	$atta2,		zombie_atta3	] {ai_face();};
void() zombie_atta3		=[	$atta3,		zombie_atta4	] {ai_face();};
void() zombie_atta4		=[	$atta4,		zombie_atta5	] {ai_face();};
void() zombie_atta5		=[	$atta5,		zombie_atta6	] {ai_face();};
void() zombie_atta6		=[	$atta6,		zombie_atta7	] {ai_face();};
void() zombie_atta7		=[	$atta7,		zombie_atta8	] {ai_face();};
void() zombie_atta8		=[	$atta8,		zombie_atta9	] {ai_face();};
void() zombie_atta9		=[	$atta9,		zombie_atta10	] {ai_face();};
void() zombie_atta10	=[	$atta10,	zombie_atta11	] {ai_face();};
void() zombie_atta11	=[	$atta11,	zombie_atta12	] {ai_face();};
void() zombie_atta12	=[	$atta12,	zombie_atta13	] {ai_face();};
void() zombie_atta13	=[	$atta13,	zombie_run1	] {ai_face();ZombieFireGrenade('-10 -22 30');};

void() zombie_attb1		=[	$attb1,		zombie_attb2	] {ai_face();};
void() zombie_attb2		=[	$attb2,		zombie_attb3	] {ai_face();};
void() zombie_attb3		=[	$attb3,		zombie_attb4	] {ai_face();};
void() zombie_attb4		=[	$attb4,		zombie_attb5	] {ai_face();};
void() zombie_attb5		=[	$attb5,		zombie_attb6	] {ai_face();};
void() zombie_attb6		=[	$attb6,		zombie_attb7	] {ai_face();};
void() zombie_attb7		=[	$attb7,		zombie_attb8	] {ai_face();};
void() zombie_attb8		=[	$attb8,		zombie_attb9	] {ai_face();};
void() zombie_attb9		=[	$attb9,		zombie_attb10	] {ai_face();};
void() zombie_attb10	=[	$attb10,	zombie_attb11	] {ai_face();};
void() zombie_attb11	=[	$attb11,	zombie_attb12	] {ai_face();};
void() zombie_attb12	=[	$attb12,	zombie_attb13	] {ai_face();};
void() zombie_attb13	=[	$attb13,	zombie_attb14	] {ai_face();};
void() zombie_attb14	=[	$attb13,	zombie_run1	] {ai_face();ZombieFireGrenade('-10 -24 29');};

void() zombie_attc1		=[	$attc1,		zombie_attc2	] {ai_face();};
void() zombie_attc2		=[	$attc2,		zombie_attc3	] {ai_face();};
void() zombie_attc3		=[	$attc3,		zombie_attc4	] {ai_face();};
void() zombie_attc4		=[	$attc4,		zombie_attc5	] {ai_face();};
void() zombie_attc5		=[	$attc5,		zombie_attc6	] {ai_face();};
void() zombie_attc6		=[	$attc6,		zombie_attc7	] {ai_face();};
void() zombie_attc7		=[	$attc7,		zombie_attc8	] {ai_face();};
void() zombie_attc8		=[	$attc8,		zombie_attc9	] {ai_face();};
void() zombie_attc9		=[	$attc9,		zombie_attc10	] {ai_face();};
void() zombie_attc10	=[	$attc10,	zombie_attc11	] {ai_face();};
void() zombie_attc11	=[	$attc11,	zombie_attc12	] {ai_face();};
void() zombie_attc12	=[	$attc12,	zombie_run1		] {ai_face();ZombieFireGrenade('-12 -19 29');};

void() zombie_missile =
{
	local float	r;
	
	r = random();
	
	if (r &lt; 0.3)
		zombie_atta1 ();
	else if (r &lt; 0.6)
		zombie_attb1 ();
	else
		zombie_attc1 ();
};


/*
=============================================================================

PAIN

=============================================================================
*/

void() zombie_paina1	=[	$paina1,	zombie_paina2	] {sound (self, CHAN_VOICE, &quot;zombie/z_pain.wav&quot;, 1, ATTN_NORM);};
void() zombie_paina2	=[	$paina2,	zombie_paina3	] {ai_painforward(3);};
void() zombie_paina3	=[	$paina3,	zombie_paina4	] {ai_painforward(1);};
void() zombie_paina4	=[	$paina4,	zombie_paina5	] {ai_pain(1);};
void() zombie_paina5	=[	$paina5,	zombie_paina6	] {ai_pain(3);};
void() zombie_paina6	=[	$paina6,	zombie_paina7	] {ai_pain(1);};
void() zombie_paina7	=[	$paina7,	zombie_paina8	] {};
void() zombie_paina8	=[	$paina8,	zombie_paina9	] {};
void() zombie_paina9	=[	$paina9,	zombie_paina10	] {};
void() zombie_paina10	=[	$paina10,	zombie_paina11	] {};
void() zombie_paina11	=[	$paina11,	zombie_paina12	] {};
void() zombie_paina12	=[	$paina12,	zombie_run1		] {};

void() zombie_painb1	=[	$painb1,	zombie_painb2	] {sound (self, CHAN_VOICE, &quot;zombie/z_pain1.wav&quot;, 1, ATTN_NORM);};
void() zombie_painb2	=[	$painb2,	zombie_painb3	] {ai_pain(2);};
void() zombie_painb3	=[	$painb3,	zombie_painb4	] {ai_pain(8);};
void() zombie_painb4	=[	$painb4,	zombie_painb5	] {ai_pain(6);};
void() zombie_painb5	=[	$painb5,	zombie_painb6	] {ai_pain(2);};
void() zombie_painb6	=[	$painb6,	zombie_painb7	] {};
void() zombie_painb7	=[	$painb7,	zombie_painb8	] {};
void() zombie_painb8	=[	$painb8,	zombie_painb9	] {};
void() zombie_painb9	=[	$painb9,	zombie_painb10	] {sound (self, CHAN_BODY, &quot;zombie/z_fall.wav&quot;, 1, ATTN_NORM);};
void() zombie_painb10	=[	$painb10,	zombie_painb11	] {};
void() zombie_painb11	=[	$painb11,	zombie_painb12	] {};
void() zombie_painb12	=[	$painb12,	zombie_painb13	] {};
void() zombie_painb13	=[	$painb13,	zombie_painb14	] {};
void() zombie_painb14	=[	$painb14,	zombie_painb15	] {};
void() zombie_painb15	=[	$painb15,	zombie_painb16	] {};
void() zombie_painb16	=[	$painb16,	zombie_painb17	] {};
void() zombie_painb17	=[	$painb17,	zombie_painb18	] {};
void() zombie_painb18	=[	$painb18,	zombie_painb19	] {};
void() zombie_painb19	=[	$painb19,	zombie_painb20	] {};
void() zombie_painb20	=[	$painb20,	zombie_painb21	] {};
void() zombie_painb21	=[	$painb21,	zombie_painb22	] {};
void() zombie_painb22	=[	$painb22,	zombie_painb23	] {};
void() zombie_painb23	=[	$painb23,	zombie_painb24	] {};
void() zombie_painb24	=[	$painb24,	zombie_painb25	] {};
void() zombie_painb25	=[	$painb25,	zombie_painb26	] {ai_painforward(1);};
void() zombie_painb26	=[	$painb26,	zombie_painb27	] {};
void() zombie_painb27	=[	$painb27,	zombie_painb28	] {};
void() zombie_painb28	=[	$painb28,	zombie_run1		] {};

void() zombie_painc1	=[	$painc1,	zombie_painc2	] {sound (self, CHAN_VOICE, &quot;zombie/z_pain1.wav&quot;, 1, ATTN_NORM);};
void() zombie_painc2	=[	$painc2,	zombie_painc3	] {};
void() zombie_painc3	=[	$painc3,	zombie_painc4	] {ai_pain(3);};
void() zombie_painc4	=[	$painc4,	zombie_painc5	] {ai_pain(1);};
void() zombie_painc5	=[	$painc5,	zombie_painc6	] {};
void() zombie_painc6	=[	$painc6,	zombie_painc7	] {};
void() zombie_painc7	=[	$painc7,	zombie_painc8	] {};
void() zombie_painc8	=[	$painc8,	zombie_painc9	] {};
void() zombie_painc9	=[	$painc9,	zombie_painc10	] {};
void() zombie_painc10	=[	$painc10,	zombie_painc11	] {};
void() zombie_painc11	=[	$painc11,	zombie_painc12	] {ai_painforward(1);};
void() zombie_painc12	=[	$painc12,	zombie_painc13	] {ai_painforward(1);};
void() zombie_painc13	=[	$painc13,	zombie_painc14	] {};
void() zombie_painc14	=[	$painc14,	zombie_painc15	] {};
void() zombie_painc15	=[	$painc15,	zombie_painc16	] {};
void() zombie_painc16	=[	$painc16,	zombie_painc17	] {};
void() zombie_painc17	=[	$painc17,	zombie_painc18	] {};
void() zombie_painc18	=[	$painc18,	zombie_run1	] {};

void() zombie_paind1	=[	$paind1,	zombie_paind2	] {sound (self, CHAN_VOICE, &quot;zombie/z_pain.wav&quot;, 1, ATTN_NORM);};
void() zombie_paind2	=[	$paind2,	zombie_paind3	] {};
void() zombie_paind3	=[	$paind3,	zombie_paind4	] {};
void() zombie_paind4	=[	$paind4,	zombie_paind5	] {};
void() zombie_paind5	=[	$paind5,	zombie_paind6	] {};
void() zombie_paind6	=[	$paind6,	zombie_paind7	] {};
void() zombie_paind7	=[	$paind7,	zombie_paind8	] {};
void() zombie_paind8	=[	$paind8,	zombie_paind9	] {};
void() zombie_paind9	=[	$paind9,	zombie_paind10	] {ai_pain(1);};
void() zombie_paind10	=[	$paind10,	zombie_paind11	] {};
void() zombie_paind11	=[	$paind11,	zombie_paind12	] {};
void() zombie_paind12	=[	$paind12,	zombie_paind13	] {};
void() zombie_paind13	=[	$paind13,	zombie_run1	] {};

void() zombie_paine1	=[	$paine1,	zombie_paine2	] {
sound (self, CHAN_VOICE, &quot;zombie/z_pain.wav&quot;, 1, ATTN_NORM);
self.health = 60;
};
void() zombie_paine2	=[	$paine2,	zombie_paine3	] {ai_pain(8);};
void() zombie_paine3	=[	$paine3,	zombie_paine4	] {ai_pain(5);};
void() zombie_paine4	=[	$paine4,	zombie_paine5	] {ai_pain(3);};
void() zombie_paine5	=[	$paine5,	zombie_paine6	] {ai_pain(1);};
void() zombie_paine6	=[	$paine6,	zombie_paine7	] {ai_pain(2);};
void() zombie_paine7	=[	$paine7,	zombie_paine8	] {ai_pain(1);};
void() zombie_paine8	=[	$paine8,	zombie_paine9	] {ai_pain(1);};
void() zombie_paine9	=[	$paine9,	zombie_paine10	] {ai_pain(2);};
void() zombie_paine10	=[	$paine10,	zombie_paine11	] {
sound (self, CHAN_BODY, &quot;zombie/z_fall.wav&quot;, 1, ATTN_NORM);
self.solid = SOLID_NOT;
};
void() zombie_paine11	=[	$paine11,	zombie_paine12	] {self.nextthink = self.nextthink + 5;self.health = 60;};
void() zombie_paine12	=[	$paine12,	zombie_paine13	]{
// see if ok to stand up
self.health = 60;
sound (self, CHAN_VOICE, &quot;zombie/z_idle.wav&quot;, 1, ATTN_IDLE);
self.solid = SOLID_SLIDEBOX;
if (!walkmove (0, 0))
{
	self.think = zombie_paine11;
	self.solid = SOLID_NOT;
	return;
}
};
void() zombie_paine13	=[	$paine13,	zombie_paine14	] {};
void() zombie_paine14	=[	$paine14,	zombie_paine15	] {};
void() zombie_paine15	=[	$paine15,	zombie_paine16	] {};
void() zombie_paine16	=[	$paine16,	zombie_paine17	] {};
void() zombie_paine17	=[	$paine17,	zombie_paine18	] {};
void() zombie_paine18	=[	$paine18,	zombie_paine19	] {};
void() zombie_paine19	=[	$paine19,	zombie_paine20	] {};
void() zombie_paine20	=[	$paine20,	zombie_paine21	] {};
void() zombie_paine21	=[	$paine21,	zombie_paine22	] {};
void() zombie_paine22	=[	$paine22,	zombie_paine23	] {};
void() zombie_paine23	=[	$paine23,	zombie_paine24	] {};
void() zombie_paine24	=[	$paine24,	zombie_paine25	] {};
void() zombie_paine25	=[	$paine25,	zombie_paine26	] {ai_painforward(5);};
void() zombie_paine26	=[	$paine26,	zombie_paine27	] {ai_painforward(3);};
void() zombie_paine27	=[	$paine27,	zombie_paine28	] {ai_painforward(1);};
void() zombie_paine28	=[	$paine28,	zombie_paine29	] {ai_pain(1);};
void() zombie_paine29	=[	$paine29,	zombie_paine30	] {};
void() zombie_paine30	=[	$paine30,	zombie_run1		] {};

void() zombie_die =
{
	sound (self, CHAN_VOICE, &quot;zombie/z_gib.wav&quot;, 1, ATTN_NORM);
	ThrowHead (&quot;progs/h_zombie.mdl&quot;, self.health);
	ThrowGib (&quot;progs/gib1.mdl&quot;, self.health);
	ThrowGib (&quot;progs/gib2.mdl&quot;, self.health);
	ThrowGib (&quot;progs/gib3.mdl&quot;, self.health);
};

/*
=================
zombie_pain

Zombies can only be killed (gibbed) by doing 60 hit points of damage
in a single frame (rockets, grenades, quad shotgun, quad nailgun).

A hit of 25 points or more (super shotgun, quad nailgun) will allways put it
down to the ground.

A hit of from 10 to 40 points in one frame will cause it to go down if it
has been twice in two seconds, otherwise it goes into one of the four
fast pain frames.

A hit of less than 10 points of damage (winged by a shotgun) will be ignored.

FIXME: don't use pain_finished because of nightmare hack
=================
*/
void(entity attacker, float take) zombie_pain =
{
	local float r;

	self.health = 60;		// allways reset health

	if (take &lt; 9)
		return;				// totally ignore

	if (self.inpain == 2)
		return;			// down on ground, so don't reset any counters

// go down immediately if a big enough hit
	if (take &gt;= 25)
	{
		self.inpain = 2;
		zombie_paine1 ();
		return;
	}
	
	if (self.inpain)
	{
// if hit again in next gre seconds while not in pain frames, definately drop
		self.pain_finished = time + 3;
		return;			// currently going through an animation, don't change
	}
	
	if (self.pain_finished &gt; time)
	{
// hit again, so drop down
		self.inpain = 2;
		zombie_paine1 ();
		return;
	}

// gp into one of the fast pain animations	
	self.inpain = 1;

	r = random();
	if (r &lt; 0.25)
		zombie_paina1 ();
	else if (r &lt;  0.5)
		zombie_painb1 ();
	else if (r &lt;  0.75)
		zombie_painc1 ();
	else
		zombie_paind1 ();
};

//============================================================================

/*QUAKED monster_zombie (1 0 0) (-16 -16 -24) (16 16 32) Crucified ambush

If crucified, stick the bounding box 12 pixels back into a wall to look right.
*/
void() monster_zombie =
{
	if (deathmatch)
	{
		remove(self);
		return;
	}

	precache_model (&quot;progs/zombie.mdl&quot;);
	precache_model (&quot;progs/h_zombie.mdl&quot;);
	precache_model (&quot;progs/zom_gib.mdl&quot;);

	precache_sound (&quot;zombie/z_idle.wav&quot;);
	precache_sound (&quot;zombie/z_idle1.wav&quot;);
	precache_sound (&quot;zombie/z_shot1.wav&quot;);
	precache_sound (&quot;zombie/z_gib.wav&quot;);
	precache_sound (&quot;zombie/z_pain.wav&quot;);
	precache_sound (&quot;zombie/z_pain1.wav&quot;);
	precache_sound (&quot;zombie/z_fall.wav&quot;);
	precache_sound (&quot;zombie/z_miss.wav&quot;);
	precache_sound (&quot;zombie/z_hit.wav&quot;);
	precache_sound (&quot;zombie/idle_w2.wav&quot;);

	self.solid = SOLID_SLIDEBOX;
	self.movetype = MOVETYPE_STEP;

	setmodel (self, &quot;progs/zombie.mdl&quot;);

	setsize (self, '-16 -16 -24', '16 16 40');
	self.health = 60;

	self.th_stand = zombie_stand1;
	self.th_walk = zombie_walk1;
	self.th_run = zombie_run1;
	self.th_pain = zombie_pain;
	self.th_die = zombie_die;
	self.th_missile = zombie_missile;

	if (self.spawnflags &amp; SPAWN_CRUCIFIED)
	{
		self.movetype = MOVETYPE_NONE;
		zombie_cruc1 ();
	}
	else
		walkmonster_start();
};
&lt;/pre&gt;(Version 1.06)</text>
      <sha1>kw6sujdcsqdyztq7zc6x0mi915dryy7</sha1>
      <model>wikitext</model>
      <format>text/x-wiki</format>
    </revision>
  </page>
</mediawiki>
